diff --git a/.patch-version b/.patch-version index b8626c4cf..d00491fd7 100644 --- a/.patch-version +++ b/.patch-version @@ -1 +1 @@ -4 +1 diff --git a/dist/126.6c11ab2d3cdbd7baf2dd.css b/dist/126.56949b6fb714b8786c3b.css similarity index 74% rename from dist/126.6c11ab2d3cdbd7baf2dd.css rename to dist/126.56949b6fb714b8786c3b.css index 371c164de..1f8f25f04 100644 --- a/dist/126.6c11ab2d3cdbd7baf2dd.css +++ b/dist/126.56949b6fb714b8786c3b.css @@ -1,17 +1,17 @@ .MediaViewerActions{display:flex;margin-inline-start:auto;margin-inline-end:-0.375rem}.MediaViewerActions .Button{margin-inline-start:.25rem}.MediaViewerActions-mobile{position:relative;color:var(--color-text)}.MediaViewerActions-mobile .ProgressSpinner{position:absolute;top:0;left:0} .MediaViewerFooter{position:absolute;bottom:0;padding:1rem 0;width:100%;transition:opacity .15s}#MediaViewer.zoomed .MediaViewerFooter{display:none}@media(max-height: 640px){.MediaViewerFooter{padding:.5rem 0 0}}@media(max-width: 600px){.MediaViewerFooter{background:linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%)}.MediaViewerFooter.is-for-video{opacity:0;pointer-events:none;padding-bottom:5rem}.video-controls-visible .MediaViewerFooter.is-for-video:not(.is-hidden){opacity:1;pointer-events:all}}body.ghost-animating .MediaViewerFooter{opacity:0}.MediaViewerFooter .media-viewer-footer-content{position:relative;max-width:var(--messages-container-width);margin:auto;cursor:pointer;opacity:.5;transition:opacity .15s}.MediaViewerFooter .media-viewer-footer-content:hover{opacity:1}@media(max-width: 600px){.MediaViewerFooter .media-viewer-footer-content{opacity:1}}.MediaViewerFooter.is-hidden{opacity:0}.MediaViewerFooter .media-text{margin-bottom:0;overflow:auto;padding:0 .5rem;text-align:center;color:rgba(255,255,255,.9);font-size:.9375rem;letter-spacing:.025rem;max-height:4.25rem}@media(max-height: 640px){.MediaViewerFooter .media-text{max-height:2.75rem}}.MediaViewerFooter .media-text .emoji{width:.9375rem;height:.9375rem;vertical-align:-2px}.MediaViewerFooter .media-text.multiline::before{content:"";position:absolute;left:-0.75rem;right:-0.75rem;top:-0.25rem;bottom:-0.25rem;background:rgba(0,0,0,.75);border-radius:var(--border-radius-default);z-index:var(--z-below)}@media(max-width: 600px){.MediaViewerFooter .media-text.multiline::before{display:none;background:none}}.MediaViewerFooter a{color:var(--color-links)}.MediaViewerFooter a:hover,.MediaViewerFooter a:focus{text-decoration:underline} -.VideoPlayerControls{display:flex;align-items:center;position:absolute;left:0;bottom:0;width:100%;padding-top:.625rem;font-size:.875rem;background:linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);transition:opacity .15s;opacity:0;pointer-events:none}#MediaViewer.zoomed .VideoPlayerControls{display:none}@media(max-width: 600px){.VideoPlayerControls{position:fixed;padding:1.25rem .5rem .75rem;background:none;z-index:var(--z-media-viewer)}}.VideoPlayerControls.active{opacity:1;pointer-events:all}.VideoPlayerControls.mobile .player-file-size{position:static;left:auto;transform:none;margin-left:auto}.VideoPlayerControls.mobile .fullscreen{margin-left:1rem}.VideoPlayerControls.mobile .player-time+.fullscreen{margin-left:auto}.VideoPlayerControls .Button{width:2.25rem;padding:0;margin:.25rem;height:1.75rem}@media(max-width: 600px){.VideoPlayerControls .Button{height:2.25rem}}.VideoPlayerControls .play i{line-height:1.5rem}.VideoPlayerControls .player-time{margin:0 1rem;white-space:nowrap}.VideoPlayerControls .fullscreen{margin-left:auto}@media(max-width: 600px){.VideoPlayerControls .fullscreen{margin-left:1rem}}.VideoPlayerControls .fullscreen i{line-height:1.75rem}@media(max-width: 600px){.VideoPlayerControls .fullscreen i{font-size:1.5rem}}@media(max-width: 600px){.VideoPlayerControls .player-time+.fullscreen{margin-left:auto}}.VideoPlayerControls .player-file-size{position:absolute;left:50%;transform:translateX(-50%);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width: 600px){.VideoPlayerControls .player-file-size{position:static;left:auto;transform:none;margin-left:auto;margin-right:1rem}.VideoPlayerControls .player-file-size+.fullscreen{margin-left:0}}.VideoPlayerControls .player-seekline{position:absolute;left:1rem;right:1rem;top:0;height:1rem;touch-action:none;cursor:pointer}.VideoPlayerControls .player-seekline-track{position:absolute;top:50%;left:-0.25rem;right:-0.25rem;height:5px;transform:translateY(-50%);background-color:rgba(255,255,255,.16);border-radius:var(--border-radius-default)}.VideoPlayerControls .player-seekline-buffered,.VideoPlayerControls .player-seekline-played,.VideoPlayerControls .player-seekline-input{position:absolute;top:0;left:0;height:100%;border-radius:var(--border-radius-default)}.VideoPlayerControls .player-seekline-buffered{background-color:rgba(255,255,255,.5)}.VideoPlayerControls .player-seekline-played{background:var(--color-primary)}.VideoPlayerControls .player-seekline-played::after{content:"";position:absolute;width:.75rem;height:.75rem;border-radius:50%;background-color:var(--color-primary);right:0;top:50%;transform:translate(0.325rem, -50%)} -.VideoPlayer{position:relative;display:inline-flex;flex-direction:column;overflow:hidden}#MediaViewer.zoomed .VideoPlayer{position:absolute;top:0;right:0;bottom:0;left:0}#MediaViewer.zoomed .VideoPlayer>div{width:100% !important;height:100% !important}#MediaViewer.zoomed .VideoPlayer video{max-height:none !important}@media(min-width: 601px){.VideoPlayer{z-index:1}}@media(max-width: 600px){.VideoPlayer{overflow:visible}}@media(max-height: 640px){.VideoPlayer{margin-bottom:1.75rem}.has-footer .VideoPlayer{margin-bottom:0}}.VideoPlayer video{display:block;max-height:calc(100vh - 8.25rem);margin:auto;object-fit:contain;outline:none;width:100%;height:100%;background:no-repeat 50% 50%;background-size:contain}@media(max-height: 640px){.VideoPlayer video{max-height:calc(100vh - 10rem)}}.VideoPlayer .play-button{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:3.25rem;height:3.25rem;background-color:rgba(0,0,0,.5) !important}body:not(.animation-level-0) .VideoPlayer .play-button{transition:opacity .3s ease !important}.VideoPlayer .play-button .icon-play{font-size:1.75rem;position:relative;left:.125rem}.VideoPlayer .spinner-container{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.VideoPlayer .spinner-container .buffering{background:rgba(0,0,0,.25);color:#fff;font-size:.75rem;position:absolute;left:.1875rem;top:.1875rem;z-index:1;padding:0 .375rem;border-radius:.75rem;line-height:1.125rem}.VideoPlayer .spinner-container .ProgressSpinner{cursor:pointer} +.VideoPlayer{position:relative;display:inline-flex;flex-direction:column;overflow:hidden}#MediaViewer.zoomed .VideoPlayer{position:absolute;top:0;right:0;bottom:0;left:0}#MediaViewer.zoomed .VideoPlayer>div{width:100% !important;height:100% !important}#MediaViewer.zoomed .VideoPlayer video{max-height:none !important}@media(min-width: 601px){.VideoPlayer{z-index:1}}@media(max-width: 600px){.VideoPlayer{overflow:visible}}@media(max-height: 640px){.VideoPlayer{margin-bottom:1.75rem}.has-footer .VideoPlayer{margin-bottom:0}}.VideoPlayer video{display:block;max-height:calc(100vh - 8.25rem);margin:auto;object-fit:contain;outline:none;width:100%;height:100%;background:no-repeat 50% 50%;background-size:contain}@media(max-height: 640px){.VideoPlayer video{max-height:calc(100vh - 10rem)}}.is-touch-env .VideoPlayer video{pointer-events:none}.VideoPlayer .play-button{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:3.25rem;height:3.25rem;background-color:rgba(0,0,0,.5) !important}body:not(.animation-level-0) .VideoPlayer .play-button{transition:opacity .3s ease !important}.VideoPlayer .play-button .icon-play{font-size:1.75rem;position:relative;left:.125rem}.VideoPlayer .spinner-container{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.VideoPlayer .spinner-container .buffering{background:rgba(0,0,0,.25);color:#fff;font-size:.75rem;position:absolute;left:.1875rem;top:.1875rem;z-index:1;padding:0 .375rem;border-radius:.75rem;line-height:1.125rem}.VideoPlayer .spinner-container .ProgressSpinner{cursor:pointer} +.VideoPlayerControls{display:flex;align-items:center;position:absolute;left:0;bottom:0;width:100%;padding:1rem .5rem .5rem;font-size:.875rem;background:linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);transition:opacity .3s;opacity:0;pointer-events:none}#MediaViewer.zoomed .VideoPlayerControls{display:none}@media(max-width: 600px){.VideoPlayerControls{position:fixed;padding:1.25rem .5rem .75rem;background:none;z-index:var(--z-media-viewer)}}.VideoPlayerControls.active{opacity:1;pointer-events:all}.VideoPlayerControls.mobile .player-file-size{position:static;transform:none;margin-left:auto}.VideoPlayerControls.mobile .fullscreen{margin-left:1rem}.VideoPlayerControls.mobile .player-time+.fullscreen{margin-left:auto}.VideoPlayerControls .Button{width:2.25rem;padding:0;margin:.25rem;height:1.75rem}@media(max-width: 600px){.VideoPlayerControls .Button{height:2.25rem}}.VideoPlayerControls .play i{line-height:1.5rem}.VideoPlayerControls .player-time{margin:0 1rem;white-space:nowrap}.VideoPlayerControls .fullscreen{margin-left:auto}@media(max-width: 600px){.VideoPlayerControls .fullscreen{margin-left:1rem}}.VideoPlayerControls .fullscreen i{line-height:1.75rem}@media(max-width: 600px){.VideoPlayerControls .fullscreen i{font-size:1.5rem}}@media(max-width: 600px){.VideoPlayerControls .player-time+.fullscreen{margin-left:auto}}.VideoPlayerControls .player-file-size{position:absolute;left:50%;transform:translateX(-50%);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width: 600px){.VideoPlayerControls .player-file-size{position:static;transform:none;margin-left:auto;margin-right:1rem}.VideoPlayerControls .player-file-size+.fullscreen{margin-left:0}}.VideoPlayerControls .player-seekline{position:absolute;left:1rem;right:1rem;top:0;height:1rem;touch-action:none;cursor:pointer}.VideoPlayerControls .player-seekline-track{position:absolute;top:50%;left:-0.25rem;right:-0.25rem;height:5px;transform:translateY(-50%);background-color:rgba(255,255,255,.16);border-radius:var(--border-radius-default)}.VideoPlayerControls .player-seekline-buffered,.VideoPlayerControls .player-seekline-played,.VideoPlayerControls .player-seekline-input{position:absolute;top:0;left:0;height:100%;border-radius:var(--border-radius-default)}.VideoPlayerControls .player-seekline-buffered{background-color:rgba(255,255,255,.5)}.VideoPlayerControls .player-seekline-played{background:var(--color-primary)}.VideoPlayerControls .player-seekline-played::after{content:"";position:absolute;width:.75rem;height:.75rem;border-radius:50%;background-color:var(--color-primary);right:0;top:50%;transform:translate(0.325rem, -50%)} .MediaViewerContent{position:absolute;top:0;left:0;right:0;bottom:0;transform:none;overflow:hidden;z-index:1;padding:3.25rem 0;height:100%;display:inline-flex;justify-content:center;align-items:center}.MediaViewerContent .thumbnail{position:relative}.MediaViewerContent .thumbnail img{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.MediaViewerContent>img{max-width:100vw;max-height:calc(100vh - 8.25rem);object-fit:contain;transition:transform .2s}.MediaViewerContent .spinner-wrapper{max-width:100vw;margin:auto}.MediaViewerContent .Spinner{margin:auto} .MediaViewerSlides{position:absolute;display:flex;height:100%;max-height:100vh;min-height:-moz-available;max-height:-webkit-fill-available;width:100%;overflow:hidden;touch-action:none;top:0;left:0;right:0;bottom:0}.MediaViewerSlides *{-ms-scroll-chaining:none}.MediaViewerSlide{position:absolute;top:0;left:0;right:0;bottom:0;height:100%;flex:100% 0 0;z-index:0;touch-action:none;transform-origin:0 0}.MediaViewerSlide--active{z-index:1} -.pan-wrapper,.pan-container{position:relative;width:100%;height:100%}.pan-wrapper{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pan-container{transition:transform .2s ease-in}.pan-wrapper.move .pan-container{transition:none}.zoomed .pan-container{position:fixed;top:0;left:0} -.SenderInfo{display:flex;align-content:center;color:#fff;cursor:pointer;opacity:.5;transition:.15s opacity}.SenderInfo:hover{opacity:1}.SenderInfo .Avatar{margin-inline-end:1rem}@media(max-width: 600px){.SenderInfo .Avatar{display:none}}.SenderInfo .meta{display:flex;flex-direction:column;justify-content:center;max-width:calc(100% - 3.75rem)}.SenderInfo .title{line-height:1.45rem;font-weight:500;white-space:pre;overflow:hidden;text-overflow:ellipsis}.SenderInfo .date{line-height:1.25rem;font-size:.875rem;letter-spacing:-0.01rem} +.pan-wrapper,.pan-container{position:relative;width:100%;height:100%}.pan-wrapper{cursor:move;-webkit-user-select:none;user-select:none}.pan-container{transition:transform .2s ease-in}.pan-wrapper.move .pan-container{transition:none}.zoomed .pan-container{position:fixed;top:0;left:0} +.SenderInfo{display:flex;align-content:center;color:#fff;cursor:pointer;opacity:.5;transition:.15s opacity}.SenderInfo:hover{opacity:1}.SenderInfo .Avatar{margin-inline-end:1rem}@media(max-width: 600px){.SenderInfo .Avatar{display:none}}.SenderInfo .meta{display:flex;flex-direction:column;justify-content:center;max-width:calc(100% - 3.75rem)}.SenderInfo .title{line-height:1.4375rem;font-weight:500;white-space:pre;overflow:hidden;text-overflow:ellipsis}.SenderInfo .date{line-height:1.25rem;font-size:.875rem;letter-spacing:-0.01rem} .ZoomControls{position:absolute;bottom:1.25rem;left:50%;background:rgba(0,0,0,.5);border-radius:var(--border-radius-default);width:100%;height:3.375rem;max-width:274px;transform:translate3d(-50%, 0, 10px);transition:opacity .3s ease-in;pointer-events:none}.ZoomControls.open{z-index:var(--z-media-viewer);pointer-events:all}.ZoomControls .zoom-out,.ZoomControls .zoom-in{position:absolute;top:.4375rem;width:2.5rem;height:2.5rem;color:#fff}.ZoomControls .zoom-out i,.ZoomControls .zoom-in i{font-size:1.5rem}.ZoomControls .zoom-out{left:.5rem}.ZoomControls .zoom-in{right:.5rem}.ZoomControls .seekline{position:absolute;left:3.25rem;right:3.25rem;top:1.125rem;height:1rem}.ZoomControls .seekline-track{position:absolute;top:50%;left:-0.25rem;right:-0.25rem;height:2px;transform:translateY(-50%);background-color:rgba(255,255,255,.5);border-radius:var(--border-radius-default)}.ZoomControls .seekline-played,.ZoomControls .seekline-input{position:absolute;top:0;left:0;height:100%;border-radius:var(--border-radius-default)}.ZoomControls .seekline-played{background:#fff;transition:width 200ms}.ZoomControls .seekline-played::after{content:"";position:absolute;width:.75rem;height:.75rem;border-radius:50%;background-color:var(--color-white);right:0;top:50%;transform:translate(0.325rem, -50%)}.ZoomControls .seekline-input{width:100%;height:1rem;top:-0.375rem;opacity:0;margin:0;padding:0;cursor:pointer;overflow:hidden}.ZoomControls .seekline-input::-webkit-slider-thumb{margin-top:-2rem} -#MediaViewer{position:fixed;top:0;left:0;width:100vw;height:100%;background:rgba(0,0,0,.9);color:#fff;z-index:var(--z-media-viewer);display:grid;grid-template-columns:auto;grid-template-rows:auto 1fr;grid-column-gap:0;grid-row-gap:0;justify-items:stretch;align-items:center}@media(max-width: 600px){#MediaViewer{background:#000}}#MediaViewer:not(.shown){display:block !important;transform:scale(0)}body.ghost-animating #MediaViewer>.pan-wrapper,body.ghost-animating #MediaViewer>button,body.ghost-animating #MediaViewer .MediaViewerContent img,body.ghost-animating #MediaViewer .MediaViewerContent .VideoPlayer{display:none}body.animation-level-2 #MediaViewer{transition-duration:.3s !important}#MediaViewer:not(.open) .SenderInfo,#MediaViewer .closing .SenderInfo{pointer-events:none;transition:none}#MediaViewer.zoomed .navigation{display:none}#MediaViewer.zoomed .media-viewer-head{z-index:2}#MediaViewer.zoomed .MediaViewerSlide{position:fixed;top:0;left:0;width:100vw;height:100vh;padding:0;z-index:1}#MediaViewer .media-viewer-head{display:flex;grid-area:1/1/2/-2;padding:.5rem 1.25rem;position:relative;z-index:var(--z-media-viewer-head);min-width:0}#MediaViewer .media-viewer-head>.Transition{width:100%;min-width:0}@media(max-width: 600px){#MediaViewer .media-viewer-head{padding:.5rem}@supports(padding: 0 env(safe-area-inset-left)){#MediaViewer .media-viewer-head{padding:.5rem max(0.5rem, env(safe-area-inset-left))}}#MediaViewer .media-viewer-head .media-viewer-close{margin-right:1.5rem}}@supports(padding: 0.5rem env(safe-area-inset-left)){#MediaViewer .media-viewer-head{padding:.5rem max(1.25rem, env(safe-area-inset-left))}}#MediaViewer>.Transition,#MediaViewer>.pan-wrapper{grid-area:1/1/-1/-1}#MediaViewer>.Transition,#MediaViewer>.pan-wrapper .Transition{position:relative;justify-self:center;text-align:center;width:100%;height:100%;display:flex;align-items:center;overflow:hidden}#MediaViewer .navigation{position:fixed;top:4rem;width:10vw;bottom:0;border:none;padding:0;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent no-repeat;background-size:1.25rem;opacity:0;transition:opacity .15s;outline:none;cursor:pointer;z-index:1}@media(max-width: 600px){#MediaViewer .navigation{width:20vw}}#MediaViewer .navigation:hover,.is-touch-env #MediaViewer .navigation{opacity:1}#MediaViewer .navigation.prev{left:0;background-image:url(media_navigation_previous.11f3cfece8fead5a78e6..svg);background-position:1.25rem calc(50% - 2rem)}@supports(left: env(safe-area-inset-left)){#MediaViewer .navigation.prev{left:env(safe-area-inset-left)}}#MediaViewer .navigation.prev[dir=rtl]{left:auto;right:0;transform:scaleX(-1)}@supports(left: env(safe-area-inset-left)){#MediaViewer .navigation.prev[dir=rtl]{left:auto;right:env(safe-area-inset-right)}}#MediaViewer .navigation.next{right:0;background-image:url(media_navigation_next.3d6e264d21e73ad72573..svg);background-position:calc(100% - 1.25rem) calc(50% - 2rem)}@supports(left: env(safe-area-inset-left)){#MediaViewer .navigation.next{right:env(safe-area-inset-right)}}#MediaViewer .navigation.next[dir=rtl]{left:0;right:auto;transform:scaleX(-1)}@supports(left: env(safe-area-inset-left)){#MediaViewer .navigation.next[dir=rtl]{right:auto;left:env(safe-area-inset-left)}}#MediaViewer .navigation.inline{top:calc(50% - 3rem);bottom:unset;height:6rem;background-position-y:center}@media(max-width: 600px){#MediaViewer .navigation.inline{opacity:0;transition:opacity .15s ease-in;pointer-events:none}.video-controls-visible #MediaViewer .navigation.inline{opacity:1;pointer-events:all}}.ghost{position:absolute;z-index:var(--z-media-viewer);will-change:transform,opacity;overflow:hidden;border-radius:0;transition:transform .2s ease,opacity .2s ease}.ghost.rounded-corners{border-radius:var(--border-radius-messages)}.ghost.circle{border-radius:50%}body.is-ios .ghost{transition:transform .2s ease,opacity .2s ease,border-radius .2s ease !important}.ghost img,.ghost video{width:100%;height:100%;-moz-user-select:none;user-select:none;-webkit-user-select:none;object-fit:cover} +#MediaViewer{position:fixed;top:0;left:0;width:100vw;height:100%;background:rgba(0,0,0,.9);color:#fff;z-index:var(--z-media-viewer);display:grid;grid-template-columns:auto;grid-template-rows:auto 1fr;grid-column-gap:0;grid-row-gap:0;justify-items:stretch;align-items:center}@media(max-width: 600px){#MediaViewer{background:#000}}#MediaViewer:not(.shown){display:block !important;transform:scale(0)}body.ghost-animating #MediaViewer>.pan-wrapper,body.ghost-animating #MediaViewer>button,body.ghost-animating #MediaViewer .MediaViewerContent img,body.ghost-animating #MediaViewer .MediaViewerContent .VideoPlayer{display:none}body.animation-level-2 #MediaViewer{transition-duration:.3s !important}#MediaViewer:not(.open) .SenderInfo,#MediaViewer .closing .SenderInfo{pointer-events:none;transition:none}#MediaViewer.zoomed .navigation{display:none}#MediaViewer.zoomed .media-viewer-head{z-index:2}#MediaViewer.zoomed .MediaViewerSlide{position:fixed;top:0;left:0;width:100vw;height:100vh;padding:0;z-index:1}#MediaViewer .media-viewer-head{display:flex;grid-area:1/1/2/-2;position:relative;z-index:var(--z-media-viewer-head);min-width:0;padding:.5rem max(1.25rem,env(safe-area-inset-left))}#MediaViewer .media-viewer-head>.Transition{width:100%;min-width:0}@media(max-width: 600px){#MediaViewer .media-viewer-head{padding:.5rem max(.5rem,env(safe-area-inset-left))}#MediaViewer .media-viewer-head .media-viewer-close{margin-right:1.5rem}}#MediaViewer>.Transition,#MediaViewer>.pan-wrapper{grid-area:1/1/-1/-1}#MediaViewer>.Transition,#MediaViewer>.pan-wrapper .Transition{position:relative;justify-self:center;text-align:center;width:100%;height:100%;display:flex;align-items:center;overflow:hidden}#MediaViewer .navigation{position:fixed;top:4rem;width:10vw;bottom:0;border:none;padding:0;margin:0;-webkit-appearance:none;appearance:none;background:transparent no-repeat;background-size:1.25rem;opacity:0;transition:opacity .15s;outline:none;cursor:pointer;z-index:1}@media(max-width: 600px){#MediaViewer .navigation{width:20vw}}#MediaViewer .navigation:hover,.is-touch-env #MediaViewer .navigation{opacity:1}#MediaViewer .navigation.prev{background-image:url(media_navigation_previous.11f3cfece8fead5a78e6..svg);background-position:1.25rem calc(50% - 2rem);left:env(safe-area-inset-left)}#MediaViewer .navigation.prev[dir=rtl]{left:auto;right:env(safe-area-inset-right);transform:scaleX(-1)}#MediaViewer .navigation.next{right:env(safe-area-inset-right);background-image:url(media_navigation_next.3d6e264d21e73ad72573..svg);background-position:calc(100% - 1.25rem) calc(50% - 2rem)}#MediaViewer .navigation.next[dir=rtl]{right:auto;left:env(safe-area-inset-left);transform:scaleX(-1)}#MediaViewer .navigation.inline{top:calc(50% - 3rem);bottom:unset;height:6rem;background-position-y:center}@media(max-width: 600px){#MediaViewer .navigation.inline{opacity:0;transition:opacity .15s ease-in;pointer-events:none}.video-controls-visible #MediaViewer .navigation.inline{opacity:1;pointer-events:all}}.ghost{position:absolute;z-index:var(--z-media-viewer);will-change:transform,opacity;overflow:hidden;border-radius:0;transition:transform .2s ease,opacity .2s ease}.ghost.rounded-corners{border-radius:var(--border-radius-messages)}.ghost.circle{border-radius:50%}body.is-ios .ghost{transition:transform .2s ease,opacity .2s ease,border-radius .2s ease !important}.ghost img,.ghost video{width:100%;height:100%;user-select:none;-webkit-user-select:none;object-fit:cover} .ChatOrUserPicker{z-index:var(--z-media-viewer)}.ChatOrUserPicker .modal-dialog{height:70%;max-width:25rem}@media(max-width: 600px){.ChatOrUserPicker .modal-dialog{height:90%}}.ChatOrUserPicker .modal-header{display:flex;align-items:center;padding:.25rem .5rem}.ChatOrUserPicker .modal-header .Button{margin-right:.5rem}.ChatOrUserPicker .modal-header .input-group{margin:0;flex:1}.ChatOrUserPicker .modal-header .form-control{border:none;box-shadow:none !important;height:2.75rem;padding:.5rem;font-size:1.25rem;line-height:1.75rem;unicode-bidi:plaintext}.ChatOrUserPicker .modal-content{padding:0;overflow:hidden;display:flex;flex-direction:column}.ChatOrUserPicker .modal-content .picker-list{height:100%;overflow-x:hidden;overflow-y:auto;padding:0 .5rem}.ChatOrUserPicker .no-results{height:100%;margin:0;padding:1rem 1rem;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.ChatOrUserPicker .scroll-container{position:relative}.ChatOrUserPicker .ListItem{position:absolute;width:100%}@media(max-width: 600px){.ChatOrUserPicker .ListItem.chat-item-clickable:not(.force-rounded-corners){margin:0}.ChatOrUserPicker .ListItem.chat-item-clickable:not(.force-rounded-corners) .ListItem-button{border-radius:0}} #Dialogs{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:var(--z-modal)} .CalendarModal .modal-dialog{max-width:26.25rem}.CalendarModal .modal-dialog .modal-content{padding:.375rem 1rem 1rem}.CalendarModal .timepicker{display:flex;align-items:center;justify-content:center;margin-bottom:1.5rem}.CalendarModal .timepicker .form-control{max-width:5rem;text-align:center}.CalendarModal .timepicker .form-control:first-child{margin-right:1rem}.CalendarModal .timepicker .form-control:last-child{margin-left:1rem}.CalendarModal .footer{display:flex;justify-content:flex-end;flex-direction:column}.CalendarModal .footer .Button{text-transform:none}.CalendarModal .footer .Button+.Button{margin-top:.5rem}.CalendarModal .month-selector{display:flex;align-items:center}.CalendarModal .month-selector h4{flex:1;margin:0 0 0 1.25rem;font-size:1.25rem}@media(max-width: 600px){.CalendarModal .month-selector h4{margin-left:.75rem}}.CalendarModal .month-selector h4~.Button{color:var(--color-primary)}.CalendarModal .month-selector .Button.hidden{opacity:.5;pointer-events:none}.CalendarModal .day-button{position:relative;border-radius:4rem;outline:none !important;font-weight:500;margin:.125rem .625rem}@media(max-width: 600px){.CalendarModal .day-button{margin:.25rem .375rem}}.CalendarModal .day-button.weekday{margin-bottom:0;height:1rem}.CalendarModal .day-button.clickable{cursor:pointer}.CalendarModal .day-button.clickable:hover{background-color:var(--color-interactive-element-hover)}.CalendarModal .day-button.clickable.selected{background-color:var(--color-primary);color:#fff}.CalendarModal .day-button.disabled{opacity:.25;pointer-events:none}.CalendarModal .day-button::before{content:"";display:block;padding-top:100%}.CalendarModal .day-button span{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:.875rem}.CalendarModal .calendar-wrapper{display:flex;align-items:center;justify-content:center;min-height:17rem;margin:1.5rem -0.5rem .5rem}.CalendarModal .calendar-grid{display:grid;grid-template-columns:repeat(7, 1fr);width:100%} -.MessageSelectToolbar{position:absolute;bottom:.5rem;left:.5rem;right:.5rem;width:auto;z-index:20;justify-content:center;margin:0;opacity:1}@supports(padding-bottom: env(safe-area-inset-bottom)){.MessageSelectToolbar{bottom:calc(.5rem + env(safe-area-inset-bottom))}}.mask-image-disabled .MessageSelectToolbar::before{left:auto !important;right:auto !important}.no-composer .MessageSelectToolbar{width:100%}@media(max-width: 600px){.no-composer .MessageSelectToolbar{width:calc(100% - 1rem)}}@media(min-width: 601px){.MessageSelectToolbar{left:1rem;right:1rem;bottom:1.25rem}.no-composer .MessageSelectToolbar{top:-4.75rem}}.MessageSelectToolbar .MessageSelectToolbar-inner{transform:scaleX(1) translateX(0)}.no-composer .middle-column-footer-button-container+.MessageSelectToolbar,.no-composer .messaging-disabled+.MessageSelectToolbar{top:auto}body.animation-level-0 .MessageSelectToolbar{transition:none !important}.MessageSelectToolbar:not(.shown){opacity:0;pointer-events:none}.MessageSelectToolbar:not(.shown) .shown-inner{transform:scaleX(var(--toolbar-hidden-scale, 1))}.MessageSelectToolbar:not(.shown).with-composer .MessageSelectToolbar-inner{transform:scaleX(var(--toolbar-hidden-scale, 1)) translateX(var(--toolbar-translate-x, 0))}.MessageSelectToolbar:not(.shown):not(.with-composer) .MessageSelectToolbar-inner{transform:scaleX(var(--toolbar-unpin-hidden-scale)) translateX(0)}.MessageSelectToolbar::before{z-index:-1;max-width:32rem;width:100%;left:auto;right:auto}.MessageSelectToolbar-inner{width:100%;max-width:32rem;display:flex;align-items:center;padding:.25rem;background:var(--color-background);border-radius:var(--border-radius-messages);box-shadow:0 1px 2px var(--color-default-shadow);font-weight:500;transform:scaleX(1);transition:transform var(--select-transition),opacity var(--select-transition)}@media(max-width: 600px){.MessageSelectToolbar-inner{padding:0;max-width:none}}.MessageSelectToolbar-inner>.Button{width:3rem;height:3rem}@media(max-width: 600px){.MessageSelectToolbar-inner>.Button{width:2.875rem;height:2.875rem}}.MessageSelectToolbar-count{margin-left:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-grow:1}@media(max-width: 600px){.MessageSelectToolbar-count{margin-right:.5rem}}.MessageSelectToolbar-actions{margin-left:auto;display:flex}.MessageSelectToolbar-actions .item{width:100%;background:none;border:none !important;box-shadow:none !important;outline:none !important;display:flex;position:relative;overflow:hidden;line-height:1.5rem;white-space:nowrap;color:var(--color-text);--ripple-color: rgba(0, 0, 0, 0.08);cursor:pointer;unicode-bidi:plaintext;padding:.6875rem;border-radius:50%}.MessageSelectToolbar-actions .item i{font-size:1.5rem;color:var(--color-text-secondary)}.MessageSelectToolbar-actions .item.destructive{color:var(--color-error)}.MessageSelectToolbar-actions .item.destructive i{color:inherit}.MessageSelectToolbar-actions .item.disabled{opacity:.5;cursor:default;pointer-events:none}.MessageSelectToolbar-actions .item:not(.disabled):active{background-color:var(--color-item-active);transition:none !important}@media(hover: hover){.MessageSelectToolbar-actions .item:hover,.MessageSelectToolbar-actions .item:focus{background-color:var(--color-chat-hover);text-decoration:none}} +.MessageSelectToolbar{position:absolute;bottom:calc(.5rem + env(safe-area-inset-bottom));left:.5rem;right:.5rem;width:auto;z-index:20;justify-content:center;margin:0;opacity:1}.mask-image-disabled .MessageSelectToolbar::before{left:auto !important;right:auto !important}.no-composer .MessageSelectToolbar{width:100%}@media(max-width: 600px){.no-composer .MessageSelectToolbar{width:calc(100% - 1rem)}}@media(min-width: 601px){.MessageSelectToolbar{left:1rem;right:1rem;bottom:1.25rem}.no-composer .MessageSelectToolbar{top:-4.75rem}}.MessageSelectToolbar .MessageSelectToolbar-inner{transform:scaleX(1) translateX(0)}.no-composer .middle-column-footer-button-container+.MessageSelectToolbar,.no-composer .messaging-disabled+.MessageSelectToolbar{top:auto}body.animation-level-0 .MessageSelectToolbar{transition:none !important}.MessageSelectToolbar:not(.shown){opacity:0;pointer-events:none}.MessageSelectToolbar:not(.shown) .shown-inner{transform:scaleX(var(--toolbar-hidden-scale, 1))}.MessageSelectToolbar:not(.shown).with-composer .MessageSelectToolbar-inner{transform:scaleX(var(--toolbar-hidden-scale, 1)) translateX(var(--toolbar-translate-x, 0))}.MessageSelectToolbar:not(.shown):not(.with-composer) .MessageSelectToolbar-inner{transform:scaleX(var(--toolbar-unpin-hidden-scale)) translateX(0)}.MessageSelectToolbar::before{z-index:-1;max-width:32rem;width:100%;left:auto;right:auto}.MessageSelectToolbar-inner{width:100%;max-width:32rem;display:flex;align-items:center;padding:.25rem;background:var(--color-background);border-radius:var(--border-radius-messages);box-shadow:0 1px 2px var(--color-default-shadow);font-weight:500;transform:scaleX(1);transition:transform var(--select-transition),opacity var(--select-transition)}@media(max-width: 600px){.MessageSelectToolbar-inner{padding:0;max-width:none}}.MessageSelectToolbar-inner>.Button{width:3rem;height:3rem}@media(max-width: 600px){.MessageSelectToolbar-inner>.Button{width:2.875rem;height:2.875rem}}.MessageSelectToolbar-count{margin-left:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-grow:1}@media(max-width: 600px){.MessageSelectToolbar-count{margin-right:.5rem}}.MessageSelectToolbar-actions{margin-left:auto;display:flex}.MessageSelectToolbar-actions .item{width:100%;background:none;border:none !important;box-shadow:none !important;outline:none !important;display:flex;position:relative;overflow:hidden;line-height:1.5rem;white-space:nowrap;color:var(--color-text);--ripple-color: rgba(0, 0, 0, 0.08);cursor:pointer;unicode-bidi:plaintext;padding:.6875rem;border-radius:50%}.MessageSelectToolbar-actions .item i{font-size:1.5rem;color:var(--color-text-secondary)}.MessageSelectToolbar-actions .item.destructive{color:var(--color-error)}.MessageSelectToolbar-actions .item.destructive i{color:inherit}.MessageSelectToolbar-actions .item.disabled{opacity:.5;cursor:default;pointer-events:none}.MessageSelectToolbar-actions .item:not(.disabled):active{background-color:var(--color-item-active);transition:none !important}@media(hover: hover){.MessageSelectToolbar-actions .item:hover,.MessageSelectToolbar-actions .item:focus{background-color:var(--color-chat-hover);text-decoration:none}} .ReactorListModal{--color-reaction: var(--color-message-reaction);--hover-color-reaction: var(--color-message-reaction-hover);--accent-color: var(--color-primary)}.ReactorListModal .modal-content{overflow:hidden}.ReactorListModal .Reactions{margin-bottom:.5rem}.ReactorListModal .reaction-filter-emoji{margin-right:.25rem}.ReactorListModal .reactor-list{max-height:400px;overflow:auto;overflow-x:hidden}.ReactorListModal .reactors-list-item{margin:0}.ReactorListModal .reactors-list-item .ListItem-button{display:flex;align-items:center}.ReactorListModal .reactors-list-emoji{width:1.5rem;height:1.5rem;margin-inline-start:auto} .EmojiInteractionAnimation{--start-x: 0;--start-y: 0;--scale: 0;position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000}@keyframes show-interaction{from{transform:translate(0, 0) scale(var(--scale, 0))}to{transform:translate(-50%, -50%) scale(1)}}@keyframes show-interaction-reversed{from{transform:translate(50%, 0) scaleX(-1) scale(var(--scale, 0))}to{transform:translate(100%, -50%) scaleX(-1) scale(1)}}.EmojiInteractionAnimation .AnimatedSticker{position:absolute;top:var(--start-y);left:var(--start-x);transform:scale(var(--scale), 0);transform-origin:left top;transition:.25s cubic-bezier(0.29, 0.81, 0.27, 0.99) opacity}.EmojiInteractionAnimation.reversed .AnimatedSticker{transform:scale(var(--scale), 0) scaleX(-1)}.EmojiInteractionAnimation.playing .AnimatedSticker{animation:show-interaction forwards .25s cubic-bezier(0.29, 0.81, 0.27, 0.99)}.EmojiInteractionAnimation.reversed.playing .AnimatedSticker{animation:show-interaction-reversed forwards .25s cubic-bezier(0.29, 0.81, 0.27, 0.99)}.EmojiInteractionAnimation.hiding .AnimatedSticker{opacity:0}.EmojiInteractionAnimation.reversed.hiding .AnimatedSticker{opacity:0} .RecentContacts .Loading{min-height:75vh}.RecentContacts .top-peers-section{padding:.5rem 1rem}.RecentContacts .top-peers{height:6rem;margin:0 -1rem;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.RecentContacts .top-peers::-webkit-scrollbar{height:0}.RecentContacts .top-peers::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}.RecentContacts .top-peer-item{display:inline-block;width:4.5rem;height:6rem;padding:.625rem .25rem;margin-left:.5rem;border-radius:var(--border-radius-default);cursor:pointer;position:relative;overflow:hidden}.RecentContacts .top-peer-item:first-child{margin-left:.125rem}.RecentContacts .top-peer-item:last-child{margin-right:.125rem}.RecentContacts .top-peer-item .Avatar{margin:0 auto .375rem}.RecentContacts .top-peer-item:hover{background:var(--color-chat-hover)}.RecentContacts .top-peer-item .top-peer-name{text-align:center;white-space:nowrap;font-size:.75rem;overflow:hidden;text-overflow:ellipsis}.RecentContacts .top-peer-item .top-peer-name .emoji-small{width:1rem;height:1rem;background-size:1rem;margin-inline-end:1px;vertical-align:-3px}.RecentContacts .recent-chats-header{display:flex;align-items:center}.RecentContacts .recent-chats-header .Button{margin-left:auto}.RecentContacts .recent-chats-header[dir=rtl] .Button{margin-left:0;margin-right:auto} @@ -36,16 +36,16 @@ .MessageContextMenu{position:absolute;font-size:1rem}.MessageContextMenu .scrollable-content{overflow:auto;overflow:overlay;padding:.5rem 0;overscroll-behavior:contain}.MessageContextMenu .bubble{transition:opacity .15s cubic-bezier(0.2, 0, 0.2, 1),transform .15s cubic-bezier(0.2, 0, 0.2, 1) !important;transform:scale(0.7);overflow:initial;padding:0}.MessageContextMenu.with-reactions .bubble{margin-top:3.5rem}.MessageContextMenu .backdrop{touch-action:none}.MessageContextMenu .avatars{display:flex;align-self:center;margin-left:auto;padding-left:1rem}.MessageContextMenu .avatars .Avatar{border:.0625rem solid var(--color-background);margin-right:0;box-sizing:content-box}.MessageContextMenu .avatars .Avatar:not(:first-child){margin-left:-0.1875rem} .StickerSetModal .modal-dialog{width:26.25rem;max-width:100%}@media(max-width: 600px){.StickerSetModal .modal-dialog{width:18.875rem}}.StickerSetModal .modal-header{padding:.5rem 1rem}.StickerSetModal .modal-content{text-align:center;padding:0}.StickerSetModal .stickers{position:relative;width:100%;height:19rem;max-height:50vh;overflow-y:auto;padding:0 .25rem;text-align:left}.StickerSetModal .button-wrapper{padding:.5rem 0;border-top:1px solid var(--color-borders);box-shadow:0 0 2px var(--color-default-shadow)}.StickerSetModal .button-wrapper button{display:inline-block}.StickerSetModal .Loading{width:100%;height:22.8125rem;max-height:calc(50vh + 3.8125rem)} .HeaderMenuContainer{position:fixed;top:0;left:0;right:0;height:100vh;z-index:var(--z-header-menu)}.HeaderMenuContainer .Menu{position:absolute;font-size:1rem}.HeaderMenuContainer .Menu .backdrop{z-index:var(--z-header-menu-backdrop)}.HeaderMenuContainer .Menu .bubble{z-index:var(--z-header-menu);--offset-y: calc(100% + 1rem)} -#MobileSearch>.header{position:absolute;top:0;left:0;z-index:var(--z-mobile-search);width:100%;height:3.5rem;background:var(--color-background);display:flex;align-items:center;padding:0 .5rem 0 .25rem}@supports(padding-left: env(safe-area-inset-left)){#MobileSearch>.header{padding-left:max(0.25rem, env(safe-area-inset-left));padding-right:max(0.5rem, env(safe-area-inset-right))}}#MobileSearch>.header>.SearchInput{margin-left:.25rem;flex:1}#MobileSearch>.footer{position:absolute;bottom:0;left:0;z-index:var(--z-mobile-search);width:100%;height:3.5rem;background:var(--color-background);display:flex;align-items:center;padding-left:1rem;padding-right:.5rem}@supports(padding-bottom: env(safe-area-inset-bottom)){#MobileSearch>.footer{padding-left:max(1rem, env(safe-area-inset-left));padding-right:max(0.5rem, env(safe-area-inset-right))}body:not(.keyboard-visible) #MobileSearch>.footer{padding-bottom:env(safe-area-inset-bottom);height:calc(3.5rem + env(safe-area-inset-bottom))}}#MobileSearch>.footer>.counter{flex:1;color:var(--color-text-secondary)}#MobileSearch:not(.active) .header,#MobileSearch:not(.active) .footer{transform:translateX(-999rem)} +#MobileSearch>.header{position:absolute;top:0;left:0;z-index:var(--z-mobile-search);width:100%;height:3.5rem;background:var(--color-background);display:flex;align-items:center;padding-left:max(.25rem,env(safe-area-inset-left));padding-right:max(.5rem,env(safe-area-inset-right))}#MobileSearch>.header>.SearchInput{margin-left:.25rem;flex:1}#MobileSearch>.footer{position:absolute;bottom:0;left:0;z-index:var(--z-mobile-search);width:100%;height:3.5rem;background:var(--color-background);display:flex;align-items:center;padding-left:max(1rem,env(safe-area-inset-left));padding-right:max(.5rem,env(safe-area-inset-right))}body:not(.keyboard-visible) #MobileSearch>.footer{padding-bottom:env(safe-area-inset-bottom);height:calc(3.5rem + env(safe-area-inset-bottom))}#MobileSearch>.footer>.counter{flex:1;color:var(--color-text-secondary)}#MobileSearch:not(.active) .header,#MobileSearch:not(.active) .footer{transform:translateX(-999rem)} .MentionTooltip{width:calc(100% - 4rem);max-width:20rem;flex-direction:column;z-index:-1}@media(max-width: 600px){.MentionTooltip{width:calc(100% - 3rem)}}.MentionTooltip .ListItem.chat-item-clickable{margin:0}.MentionTooltip .ListItem.chat-item-clickable .ListItem-button{border-radius:0}.MentionTooltip .ListItem.chat-item-clickable .info{display:flex}.MentionTooltip .ListItem.chat-item-clickable .title{margin-inline-end:.625rem;max-width:70%}.MentionTooltip .ListItem.chat-item-clickable .handle{font-size:1rem}.MentionTooltip .ListItem.chat-item-clickable[dir=rtl] .status{width:auto}.MentionTooltip .ChatInfo .title h3{line-height:1.25}.MentionTooltip .ChatInfo .Avatar{margin-right:.7em}.MentionTooltip .ChatInfo .handle::before{content:"@"}.MentionTooltip .ChatInfo .user-status{display:none !important} -.AttachmentModal{--border-radius-default: 0.625rem}.AttachmentModal .modal-dialog{max-width:26.25rem}@media(max-width: 600px){.AttachmentModal .modal-dialog{max-height:100%;padding-bottom:1.5rem}}.AttachmentModal .modal-content{padding:.5rem 1.25rem 1.875rem;max-height:calc(100vh - 3.25rem)}@media(max-width: 600px){.AttachmentModal .modal-content{padding-bottom:.25rem}}.AttachmentModal .media-wrapper{max-height:26rem;overflow:auto;display:flex;flex-wrap:wrap;margin-bottom:1.5rem}.AttachmentModal .media-wrapper video,.AttachmentModal .media-wrapper img{flex:1;width:calc(50% - .15rem);height:12rem;margin-bottom:.3rem;border-radius:var(--border-radius-default);object-fit:cover}.AttachmentModal .media-wrapper video:only-child,.AttachmentModal .media-wrapper img:only-child{height:auto;max-height:25rem;margin-bottom:0}.AttachmentModal .media-wrapper video:nth-child(even),.AttachmentModal .media-wrapper img:nth-child(even){margin-left:.3rem}.AttachmentModal .document-wrapper{max-height:25rem;overflow:auto;flex-shrink:0;display:flex;flex-direction:column;margin:.75rem 0 1.75rem}.AttachmentModal .document-wrapper .File:not(:last-child){margin-bottom:1.5rem}.AttachmentModal .document-wrapper .file-icon{cursor:default !important}.AttachmentModal .attachment-caption-wrapper{position:relative}.AttachmentModal .attachment-caption-wrapper .form-control{background:var(--color-background)}.AttachmentModal .attachment-caption-wrapper .MentionTooltip{right:0 !important;z-index:0}.AttachmentModal .drop-target{position:relative}.AttachmentModal .drop-target::before,.AttachmentModal .drop-target::after{content:"";position:absolute;left:0;top:0;right:0;bottom:0;border-radius:var(--border-radius-default);pointer-events:none;opacity:0;transition:250ms opacity;z-index:1}.AttachmentModal .drop-target::before{background-image:var(--drag-target-border-hovered);background-color:var(--color-background)}.AttachmentModal .drop-target::after{content:attr(data-attach-description);display:flex;justify-content:center;align-items:center;color:var(--color-primary)}.AttachmentModal.hovered .drop-target::before{opacity:.95}.AttachmentModal.hovered .drop-target::after{opacity:1}.AttachmentModal.hovered .attachment-caption-wrapper,.AttachmentModal.hovered .document-wrapper,.AttachmentModal.hovered .media-wrapper{pointer-events:none}.AttachmentModal.hovered .document-wrapper,.AttachmentModal.hovered .media-wrapper{border-radius:var(--border-radius-default)} -.PollModal .modal-dialog{max-width:26.25rem;max-height:calc(100vh - 5rem)}.PollModal .modal-content{padding:.5rem 1.25rem 1.875rem;min-height:4.875rem}.PollModal .modal-header-condensed{margin-bottom:1rem}.PollModal .options-header{color:var(--color-text-secondary);font-size:1rem;font-weight:500;margin:1.5rem .25rem}.PollModal .options-list{margin:1rem -0.75rem -0.5rem;padding:0 .75rem;border-top:1px solid var(--color-chat-hover);max-height:20rem;overflow:auto}.PollModal .options-list.overflown{padding:0 .4rem .5rem .75rem}@media(max-width: 600px){.PollModal .options-list{overflow:hidden;max-height:none}.PollModal .options-list,.PollModal .options-list.overflown{padding:0 .75rem}}.PollModal .option-wrapper{position:relative}.PollModal .option-wrapper .form-control{padding-right:3rem}.PollModal .option-wrapper .option-remove-button{position:absolute;top:.3125rem;right:.3125rem}.PollModal .quiz-mode{margin-top:1.5rem}.PollModal .quiz-mode .options-header{margin-bottom:.5rem}.PollModal .quiz-mode .note{margin-top:.5rem}.PollModal .note{font-size:smaller;color:var(--color-text-secondary)}.PollModal .error{font-size:smaller;color:var(--color-error);margin:-1rem 0 1rem .25rem}.PollModal .input-group:last-child{margin-bottom:.5rem} +.AttachmentModal{--border-radius-default: 0.625rem}.AttachmentModal .modal-dialog{max-width:26.25rem}@media(max-width: 600px){.AttachmentModal .modal-dialog{max-height:100%;padding-bottom:1.5rem}}.AttachmentModal .modal-content{padding:.5rem 1.25rem 1.875rem;max-height:calc(100vh - 3.25rem)}@media(max-width: 600px){.AttachmentModal .modal-content{padding-bottom:.25rem}}.AttachmentModal .media-wrapper{max-height:26rem;overflow:auto;display:flex;flex-wrap:wrap;margin-bottom:1.5rem}.AttachmentModal .media-wrapper video,.AttachmentModal .media-wrapper img{flex:1;width:calc(50% - .15rem);height:12rem;margin-bottom:.3125rem;border-radius:var(--border-radius-default);object-fit:cover}.AttachmentModal .media-wrapper video:only-child,.AttachmentModal .media-wrapper img:only-child{height:auto;max-height:25rem;margin-bottom:0}.AttachmentModal .media-wrapper video:nth-child(even),.AttachmentModal .media-wrapper img:nth-child(even){margin-left:.3125rem}.AttachmentModal .document-wrapper{max-height:25rem;overflow:auto;flex-shrink:0;display:flex;flex-direction:column;margin:.75rem 0 1.75rem}.AttachmentModal .document-wrapper .File:not(:last-child){margin-bottom:1.5rem}.AttachmentModal .document-wrapper .file-icon{cursor:default !important}.AttachmentModal .attachment-caption-wrapper{position:relative}.AttachmentModal .attachment-caption-wrapper .form-control{background:var(--color-background)}.AttachmentModal .attachment-caption-wrapper .MentionTooltip{right:0 !important;z-index:0}.AttachmentModal .drop-target{position:relative}.AttachmentModal .drop-target::before,.AttachmentModal .drop-target::after{content:"";position:absolute;left:0;top:0;right:0;bottom:0;border-radius:var(--border-radius-default);pointer-events:none;opacity:0;transition:250ms opacity;z-index:1}.AttachmentModal .drop-target::before{background-image:var(--drag-target-border-hovered);background-color:var(--color-background)}.AttachmentModal .drop-target::after{content:attr(data-attach-description);display:flex;justify-content:center;align-items:center;color:var(--color-primary)}.AttachmentModal.hovered .drop-target::before{opacity:.95}.AttachmentModal.hovered .drop-target::after{opacity:1}.AttachmentModal.hovered .attachment-caption-wrapper,.AttachmentModal.hovered .document-wrapper,.AttachmentModal.hovered .media-wrapper{pointer-events:none}.AttachmentModal.hovered .document-wrapper,.AttachmentModal.hovered .media-wrapper{border-radius:var(--border-radius-default)} +.PollModal .modal-dialog{max-width:26.25rem;max-height:calc(100vh - 5rem)}.PollModal .modal-content{padding:.5rem 1.25rem 1.875rem;min-height:4.875rem}.PollModal .modal-header-condensed{margin-bottom:1rem}.PollModal .options-header{color:var(--color-text-secondary);font-size:1rem;font-weight:500;margin:1.5rem .25rem}.PollModal .options-list{margin:1rem -0.75rem -0.5rem;padding:0 .75rem;border-top:1px solid var(--color-chat-hover);max-height:20rem;overflow:auto}.PollModal .options-list.overflown{padding:0 .4375rem .5rem .75rem}@media(max-width: 600px){.PollModal .options-list{overflow:hidden;max-height:none}.PollModal .options-list,.PollModal .options-list.overflown{padding:0 .75rem}}.PollModal .option-wrapper{position:relative}.PollModal .option-wrapper .form-control{padding-right:3rem}.PollModal .option-wrapper .option-remove-button{position:absolute;top:.3125rem;right:.3125rem}.PollModal .quiz-mode{margin-top:1.5rem}.PollModal .quiz-mode .options-header{margin-bottom:.5rem}.PollModal .quiz-mode .note{margin-top:.5rem}.PollModal .note{font-size:smaller;color:var(--color-text-secondary)}.PollModal .error{font-size:smaller;color:var(--color-error);margin:-1rem 0 1rem .25rem}.PollModal .input-group:last-child{margin-bottom:.5rem} .EmojiButton{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;margin:.125rem;border-radius:var(--border-radius-messages-small);cursor:pointer;font-size:1.75rem;line-height:2.5rem;background-color:transparent;transition:background-color .15s ease}.mac-os-fix .EmojiButton{line-height:inherit}.EmojiButton.focus,.EmojiButton:hover{background-color:var(--color-background-selected)}.EmojiButton>img{width:2rem;height:2rem} -.EmojiPicker{height:100%}.EmojiPicker-main{height:calc(100% - 3rem);overflow-y:auto;padding:.5rem}@media(max-width: 600px){.EmojiPicker-main{padding:.5rem .25rem}}.EmojiPicker-main .symbol-set-container{display:flex;flex-wrap:wrap}.EmojiPicker-header{height:3rem;border-bottom:1px solid var(--color-borders);display:flex;align-items:center;justify-content:space-around;box-shadow:0 0 2px var(--color-default-shadow)}@media(max-width: 600px){.EmojiPicker-header{overflow-x:auto;overflow-y:hidden;display:block;white-space:nowrap;padding:.4375rem 0;scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.EmojiPicker-header::-webkit-scrollbar{height:0}.EmojiPicker-header::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}.EmojiPicker-header .symbol-set-button{display:inline-flex;vertical-align:middle}.EmojiPicker-header::after{content:"";display:block;flex-shrink:0;width:.1px;height:1rem}} -.StickerPicker{height:100%}.StickerPicker-main{position:relative;height:calc(100% - 3rem);overflow-y:auto;padding:.5rem}@media(max-width: 600px){.StickerPicker-main{padding:.5rem .25rem}}.StickerPicker-header{height:3rem;border-bottom:1px solid var(--color-borders);padding:.125rem 0;overflow-x:auto;overflow-y:hidden;white-space:nowrap;box-shadow:0 0 2px var(--color-default-shadow);scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.StickerPicker-header::-webkit-scrollbar{height:0}.StickerPicker-header::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}.StickerPicker-header::after{content:"";display:block;flex-shrink:0;width:.1px;height:1rem}.StickerPicker-header .sticker-set-button{display:inline-flex;vertical-align:middle;align-items:center;justify-content:center}.StickerPicker-header .sticker-set-button.StickerButton{background-size:2rem}.StickerPicker-header .sticker-set-button.StickerButton video,.StickerPicker-header .sticker-set-button.StickerButton img,.StickerPicker-header .sticker-set-button.StickerButton .AnimatedSticker{top:.375rem;left:.375rem;width:2rem;height:2rem}.StickerPicker-header .sticker-set-button .sticker-set-cover{width:2rem;height:2rem;position:relative;display:flex;align-items:center;justify-content:center}.StickerPicker-header .sticker-set-button .sticker-set-cover video,.StickerPicker-header .sticker-set-button .sticker-set-cover img,.StickerPicker-header .sticker-set-button .sticker-set-cover .AnimatedSticker{width:100%;height:100%;position:absolute;top:0;left:0}.StickerPicker .symbol-set-container{width:25rem;line-height:0}@media(max-width: 600px){.StickerPicker .symbol-set-container{width:100%}}.StickerPicker .sticker-set-button{width:2.75rem !important;height:2.75rem;margin:0 .25rem;border-radius:var(--border-radius-messages-small)} +.EmojiPicker{height:100%}.EmojiPicker-main{height:calc(100% - 3rem);overflow-y:auto;padding:.5rem}@media(max-width: 600px){.EmojiPicker-main{padding:.5rem .25rem}}.EmojiPicker-main .symbol-set-container{display:flex;flex-wrap:wrap}.EmojiPicker-header{height:3rem;border-bottom:1px solid var(--color-borders);display:flex;align-items:center;justify-content:space-around;box-shadow:0 0 2px var(--color-default-shadow)}@media(max-width: 600px){.EmojiPicker-header{overflow-x:auto;overflow-y:hidden;display:block;white-space:nowrap;padding:.4375rem 0;scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.EmojiPicker-header::-webkit-scrollbar{height:0}.EmojiPicker-header::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}.EmojiPicker-header .symbol-set-button{display:inline-flex;vertical-align:middle}.EmojiPicker-header::after{content:"";display:block;flex-shrink:0;width:1px;height:1rem}} +.StickerPicker{height:100%}.StickerPicker-main{position:relative;height:calc(100% - 3rem);overflow-y:auto;padding:.5rem}@media(max-width: 600px){.StickerPicker-main{padding:.5rem .25rem}}.StickerPicker-header{height:3rem;border-bottom:1px solid var(--color-borders);padding:.125rem 0;overflow-x:auto;overflow-y:hidden;white-space:nowrap;box-shadow:0 0 2px var(--color-default-shadow);scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.StickerPicker-header::-webkit-scrollbar{height:0}.StickerPicker-header::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}.StickerPicker-header::after{content:"";display:block;flex-shrink:0;width:1px;height:1rem}.StickerPicker-header .sticker-set-button{display:inline-flex;vertical-align:middle;align-items:center;justify-content:center}.StickerPicker-header .sticker-set-button.StickerButton{background-size:2rem}.StickerPicker-header .sticker-set-button.StickerButton video,.StickerPicker-header .sticker-set-button.StickerButton img,.StickerPicker-header .sticker-set-button.StickerButton .AnimatedSticker{top:.375rem;left:.375rem;width:2rem;height:2rem}.StickerPicker-header .sticker-set-button .sticker-set-cover{width:2rem;height:2rem;position:relative;display:flex;align-items:center;justify-content:center}.StickerPicker-header .sticker-set-button .sticker-set-cover video,.StickerPicker-header .sticker-set-button .sticker-set-cover img,.StickerPicker-header .sticker-set-button .sticker-set-cover .AnimatedSticker{width:100%;height:100%;position:absolute;top:0;left:0}.StickerPicker .symbol-set-container{width:25rem;line-height:0}@media(max-width: 600px){.StickerPicker .symbol-set-container{width:100%}}.StickerPicker .sticker-set-button{width:2.75rem !important;height:2.75rem;margin:0 .25rem;border-radius:var(--border-radius-messages-small)} .GifButton{display:flex;align-items:center;justify-content:center;height:6.25rem;background-color:transparent;cursor:pointer;overflow:hidden;position:relative}.GifButton:last-child{margin-bottom:1rem}.GifButton.vertical{grid-column-end:span 1}.GifButton.horizontal{grid-column-end:span 2}.GifButton .thumbnail{width:100%;height:100%;background:transparent no-repeat center;background-size:cover !important}.GifButton .preview,.GifButton video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.GifButton .Spinner{position:absolute;pointer-events:none} .GifPicker{display:grid;grid-template-columns:repeat(6, 1fr);grid-auto-rows:6.25rem;grid-gap:.25rem;grid-auto-flow:dense;height:100%;overflow-y:auto;padding:.25rem}@supports(overflow: overlay){.GifPicker{overflow-y:overlay}}.GifPicker .Loading,.GifPicker .picker-disabled{grid-column:1/-1;height:var(--menu-height)} -.SymbolMenu.mobile-menu{position:fixed;left:0;right:0;bottom:0;background:var(--color-background);transform:translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0);z-index:1;transition:transform var(--layer-transition)}@supports(padding-bottom: env(safe-area-inset-bottom)){.SymbolMenu.mobile-menu{padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);transform:translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height) + env(safe-area-inset-bottom)), 0)}}.SymbolMenu.mobile-menu.open{transform:translate3d(0, 0, 0)}body.is-media-viewer-open .SymbolMenu.mobile-menu.open{transform:translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0)}body.animation-level-0 .SymbolMenu.mobile-menu{transition:none}.SymbolMenu.mobile-menu:not(.middle-column-open){transform:translate3d(100vw, 0, 0) !important}.SymbolMenu-main{height:var(--symbol-menu-height);max-height:calc(100vh - var(--symbol-menu-footer-height))}@supports(padding-bottom: env(safe-area-inset-bottom)){.SymbolMenu-main{max-height:calc(100vh - var(--symbol-menu-footer-height) - env(safe-area-inset-bottom))}}.SymbolMenu-footer{height:var(--symbol-menu-footer-height);border-top:1px solid var(--color-borders);display:flex;align-items:center;justify-content:center;box-shadow:0 0 2px var(--color-default-shadow);position:relative}.SymbolMenu-footer .Button{flex-shrink:0;width:2.125rem !important;height:2.125rem;margin:0 .25rem;padding:0}.SymbolMenu-footer .Button.activated{pointer-events:none}.SymbolMenu-footer .Button.symbol-tab-button{margin:0 .75rem}.SymbolMenu-footer .Button.symbol-search-button{position:absolute;left:.25rem}.SymbolMenu-footer .Button.symbol-delete-button{position:absolute;right:.25rem}.SymbolMenu .Transition.slide{height:100%}.SymbolMenu .Transition.slide .Loading{height:var(--symbol-menu-height)}.is-pointer-env .SymbolMenu>.backdrop{position:absolute;top:-1rem;left:0;right:auto;width:3.5rem;height:4.5rem}.is-pointer-env .Button.bot-commands~.SymbolMenu>.backdrop,.is-pointer-env .Button.send-as-button~.SymbolMenu>.backdrop{left:3rem;width:3.25rem}.SymbolMenu .bubble{width:calc(var(--symbol-menu-width) + .25rem);padding:0;overflow:hidden}@supports(overflow: overlay){.SymbolMenu .bubble{width:var(--symbol-menu-width)}}.SymbolMenu .picker-disabled{height:var(--symbol-menu-height);display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.SymbolMenu .symbol-close-button{display:none;position:absolute;right:.25rem;top:.25rem}@supports(right: env(safe-area-inset-right)){.SymbolMenu .symbol-close-button{right:max(.25rem, env(safe-area-inset-right));top:max(.25rem, env(safe-area-inset-top))}}@media(orientation: landscape){.SymbolMenu .symbol-close-button{display:block}}.symbol-set{margin-bottom:1rem}.symbol-set-name{font-size:1rem;line-height:1.6875rem;font-weight:500;margin:0;padding-left:.5rem;color:rgba(var(--color-text-secondary-rgb), 0.75);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:initial;unicode-bidi:plaintext}.symbol-set-container{text-align:initial}.symbol-set-button{flex-shrink:0;width:2.125rem !important;height:2.125rem;margin:0 .25rem;padding:0}.Transition>div:not(.Transition__slide--active) .symbol-set,body.animating-right-column .symbol-set{overflow:hidden}.symbol-set .symbol-set-container:not(.shown){display:block}.symbol-set .symbol-set-container.closing{transition:none} +.SymbolMenu.mobile-menu{position:fixed;left:0;right:0;bottom:0;background:var(--color-background);z-index:1;transition:transform var(--layer-transition);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);transform:translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height) + env(safe-area-inset-bottom)), 0)}.SymbolMenu.mobile-menu.open{transform:translate3d(0, 0, 0)}body.is-media-viewer-open .SymbolMenu.mobile-menu.open{transform:translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0)}body.animation-level-0 .SymbolMenu.mobile-menu{transition:none}.SymbolMenu.mobile-menu:not(.middle-column-open){transform:translate3d(100vw, 0, 0) !important}.SymbolMenu-main{height:var(--symbol-menu-height);max-height:calc(100vh - var(--symbol-menu-footer-height) - env(safe-area-inset-bottom))}.SymbolMenu-footer{height:var(--symbol-menu-footer-height);border-top:1px solid var(--color-borders);display:flex;align-items:center;justify-content:center;box-shadow:0 0 2px var(--color-default-shadow);position:relative}.SymbolMenu-footer .Button{flex-shrink:0;width:2.125rem !important;height:2.125rem;margin:0 .25rem;padding:0}.SymbolMenu-footer .Button.activated{pointer-events:none}.SymbolMenu-footer .Button.symbol-tab-button{margin:0 .75rem}.SymbolMenu-footer .Button.symbol-search-button{position:absolute;left:.25rem}.SymbolMenu-footer .Button.symbol-delete-button{position:absolute;right:.25rem}.SymbolMenu .Transition.slide{height:100%}.SymbolMenu .Transition.slide .Loading{height:var(--symbol-menu-height)}.is-pointer-env .SymbolMenu>.backdrop{position:absolute;top:-1rem;left:0;right:auto;width:3.5rem;height:4.5rem}.is-pointer-env .Button.bot-commands~.SymbolMenu>.backdrop,.is-pointer-env .Button.send-as-button~.SymbolMenu>.backdrop{left:3rem;width:3.25rem}.SymbolMenu .bubble{width:calc(var(--symbol-menu-width) + .25rem);padding:0;overflow:hidden}@supports(overflow: overlay){.SymbolMenu .bubble{width:var(--symbol-menu-width)}}.SymbolMenu .picker-disabled{height:var(--symbol-menu-height);display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.SymbolMenu .symbol-close-button{display:none;position:absolute;right:max(.25rem,env(safe-area-inset-right));top:max(.25rem,env(safe-area-inset-top))}@media(orientation: landscape){.SymbolMenu .symbol-close-button{display:block}}.symbol-set{margin-bottom:1rem}.symbol-set-name{font-size:1rem;line-height:1.6875rem;font-weight:500;margin:0;padding-left:.5rem;color:rgba(var(--color-text-secondary-rgb), 0.75);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:initial;unicode-bidi:plaintext}.symbol-set-container{text-align:initial}.symbol-set-button{flex-shrink:0;width:2.125rem !important;height:2.125rem;margin:0 .25rem;padding:0}.Transition>div:not(.Transition__slide--active) .symbol-set,body.animating-right-column .symbol-set{overflow:hidden}.symbol-set .symbol-set-container:not(.shown){display:block}.symbol-set .symbol-set-container.closing{transition:none} .AttachMenu{position:relative}.is-pointer-env .AttachMenu>.backdrop{position:absolute;top:-1rem;left:auto;right:0;width:3.5rem}.AttachMenu .media-disabled>button{white-space:normal} .BotCommand{margin:0 !important}.BotCommand .ListItem-button{border-radius:0}.BotCommand .multiline-item{padding:0 1rem}.BotCommand .multiline-item .subtitle{padding-top:.25rem;line-height:1.3125}.BotCommand.with-avatar .multiline-item{padding:0;display:flex}.BotCommand.with-avatar .content-inner{flex:1} .BotCommandTooltip{width:calc(100% - 4rem);max-width:26rem;flex-direction:column;z-index:-1}@media(max-width: 600px){.BotCommandTooltip{width:calc(100% - 3rem)}} @@ -64,11 +64,11 @@ .PollResults{height:100%;position:relative;display:flex;flex-direction:column;pointer-events:auto}.PollResults>.Loading{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(255,255,255,.75)}.PollResults .poll-question{padding:.75rem 1.5rem;flex-shrink:0;font-size:1.25rem}@media(max-width: 600px){.PollResults .poll-question{padding:0 1rem}}.PollResults .poll-results-list{border-top:1px solid var(--color-borders);flex-grow:1;overflow:auto} .Management{position:relative;height:100%}.Management>.custom-scroll{height:100%;overflow-y:scroll;overflow-x:hidden}.Management .section{padding:1rem 1.5rem;border-top:1px solid var(--color-borders)}.Management .section.wide{padding:1.5rem}.Management .section:first-of-type{border-top:none;padding-top:1rem}.Management .section.no-border{border-top:none}.Management .section>.ChatInfo{margin:0 0 2rem !important}.Management .section>.ChatInfo .title h3{margin-bottom:0}.Management .section .section-icon{width:8.75rem;height:8.75rem;margin:0 auto 2rem;position:relative}.Management .section .section-icon .AnimatedSticker{position:absolute;left:0;top:0;width:100%;height:100%}.Management .section .section-icon .AnimatedSticker.hidden{display:none}.Management .section .ListItem{margin:0 -0.75rem}.Management .section .ListItem .Reaction{display:flex;align-items:center}.Management .section .ListItem .ReactionStaticEmoji{width:1.5rem;margin-right:1rem}.Management .section .ListItem:last-child{margin-bottom:0}.Management .section .ListItem .multiline-item .subtitle{line-height:1.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.Management .section .ListItem:not(.picker-list-item) .Checkbox{margin-top:2rem;margin-bottom:2rem}.Management .section .ListItem.narrow .Checkbox{margin-top:1rem;margin-bottom:1rem}.Management .section .ListItem.exceptions-member .ChatInfo .status{white-space:pre-wrap}.Management .section .section-heading{font-weight:500;font-size:.9375rem;color:var(--color-text-secondary)}.Management .section .section-heading[dir=auto]{text-align:initial}.Management .section .section-help{color:var(--color-text-secondary);line-height:1.375rem}.Management .section .section-help[dir=auto]{text-align:initial}.Management .section .section-info{color:var(--color-text-secondary);font-size:.875rem}.Management .section[dir=rtl]{text-align:right}.Management textarea.form-control{height:auto}.Management .group-link{color:var(--color-text)}.Management .radio-group{margin-top:2rem}.Management .radio-group .Radio{padding-left:3.5rem;margin-bottom:2rem}.Management .radio-group .Radio:last-child{margin-bottom:.625rem}.Management .radio-group .Radio-main::before{left:.125rem;top:.25rem;transform:none}.Management .radio-group .Radio-main::after{left:.4375rem;top:.5625rem;transform:none}.Management__filter{padding:0 1rem .25rem .75rem;border-bottom:1px solid var(--color-borders);display:flex;flex-flow:row wrap;flex-shrink:0;overflow-y:auto;max-height:20rem}.Management__filter .input-group{margin-bottom:.5rem;margin-left:.5rem;flex-grow:1}.Management__filter .form-control{height:2rem;border:none;border-radius:0;padding:0;box-shadow:none}.Management .Spinner{margin:2rem auto}.ManageGroupMembers{padding:.5rem 1rem}.ManageInvites .primary-link{position:relative}.ManageInvites .primary-link-input{cursor:pointer;margin-bottom:1rem;padding-right:3rem}.ManageInvites .primary-link-more-menu{position:absolute;right:.5rem;top:50%;transform:translate(0, -50%);z-index:1}.ManageInvites .create-link{margin-bottom:.5rem}.ManageInvites .invite-title{white-space:nowrap}.ManageInvite .link-name{margin-bottom:1rem}.ManageInvite .expire-limit{margin-top:1rem}.ManageInvite .usage-limit{margin-top:1rem;-moz-appearance:textfield}.ManageInvite .usage-limit::-webkit-outer-spin-button,.ManageInvite .usage-limit::-webkit-inner-spin-button{-webkit-appearance:none}.ManageInvite .custom-scroll{padding-bottom:4rem}.ManageInviteInfo .copy-link{margin-top:1rem;margin-bottom:1rem}.ManageInviteInfo .link-title{text-align:center}.ManageJoinRequests .bulk-actions{display:flex;justify-content:space-around}.ManageJoinRequests .bulk-action-button{width:auto;height:auto}.ManageInvite .hint,.ManageInvites .hint{font-size:.875rem;margin-bottom:0;margin-top:.5rem} .JoinRequest{display:flex;flex-direction:column;padding:1rem 0}.JoinRequest:not(:last-child){border-bottom:1px solid var(--color-borders)}.JoinRequest__top{display:flex;cursor:pointer;padding:.5rem;border-radius:.5rem}.JoinRequest__top:hover{background-color:var(--color-chat-hover)}.JoinRequest__user{display:flex;flex-grow:1;min-width:0;overflow:hidden}.JoinRequest__user-info{display:flex;flex-direction:column;justify-content:center;overflow:hidden;margin-left:1rem}.JoinRequest__user-subtitle{color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.JoinRequest__user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.JoinRequest__date{color:var(--color-text-secondary);font-size:.875rem;margin-left:1rem;white-space:nowrap}.JoinRequest__buttons{display:flex;justify-content:space-evenly;margin-top:1rem;gap:.5rem}.JoinRequest__button{width:auto;height:auto} -.ShippingInfo{padding:.5rem 1rem}.ShippingInfo h5{font-size:.9rem;color:var(--color-text-secondary);margin:1rem 0 1.1rem} +.ShippingInfo{padding:.5rem 1rem}.ShippingInfo h5{font-size:.875rem;color:var(--color-text-secondary);margin:1rem 0 1.25rem} .Shipping{padding:.5rem 1rem}.Shipping form p{color:var(--color-text-secondary);font-weight:500;margin:.5rem 0 2rem}.Shipping form .Radio{margin-bottom:2rem} -.Checkout{padding:.5rem 0}.Checkout .description{display:flex;flex-direction:row;margin:0 1rem}.Checkout .description img{height:6rem;margin:.5rem}.Checkout .description .text h5{margin-top:.5rem;font-size:1.125rem}.Checkout .description .text p{font-size:.8rem;line-height:1rem;color:var(--color-text-secondary)}.Checkout .price-info{margin:1rem}.Checkout .price-info .price-info-item{margin:1rem .5rem;display:flex;flex-direction:row;align-content:space-between;color:var(--color-text-secondary);font-weight:500}.Checkout .price-info .price-info-item-main{color:var(--color-text)}.Checkout .price-info .price-info-item .title{display:flex;flex:1 auto}.Checkout .invoice-info{border-top:1px var(--color-borders) solid;padding:1rem}.Checkout .invoice-info .checkout-info-item{display:flex;padding:.75rem .5rem 1rem;text-align:left}.Checkout .invoice-info .checkout-info-item i{font-size:1.5rem;color:var(--color-text-secondary);margin-right:2rem;width:1.5rem}.Checkout .invoice-info .checkout-info-item i.stripe-provider{background:url(stripe-logo.c0c5683dcd30037389c3..png) no-repeat center;background-size:2rem;border-radius:1rem;height:1.5rem}.Checkout .invoice-info .checkout-info-item .info .title{font-size:1rem;line-height:1.4375rem;margin-bottom:0;font-weight:400;word-break:break-word;color:var(--color-text);text-transform:capitalize}.Checkout .invoice-info .checkout-info-item .info .data{margin-bottom:0;font-size:.875rem;color:var(--color-text-secondary)} -.CardInput{position:relative}.CardInput .input-group.has-left-addon .form-control{padding-left:4rem}.CardInput .left-addon{position:absolute;top:.8rem;left:1rem;z-index:8}.CardInput .left-addon img{max-width:2rem} -.PaymentInfo{padding:.5rem 1rem}.PaymentInfo h5{font-size:.9rem;color:var(--color-text-secondary);margin:1rem 0 1.1rem}.PaymentInfo .inline-inputs{display:flex;justify-content:space-between}.PaymentInfo .inline-inputs .input-group{flex:1 10rem;max-width:45%;display:flex} +.Checkout{padding:.5rem 0}.Checkout .description{display:flex;flex-direction:row;margin:0 1rem}.Checkout .description img{height:6rem;margin:.5rem}.Checkout .description .text h5{margin-top:.5rem;font-size:1.125rem}.Checkout .description .text p{font-size:.8125rem;line-height:1rem;color:var(--color-text-secondary)}.Checkout .price-info{margin:1rem}.Checkout .price-info .price-info-item{margin:1rem .5rem;display:flex;flex-direction:row;align-content:space-between;color:var(--color-text-secondary);font-weight:500}.Checkout .price-info .price-info-item-main{color:var(--color-text)}.Checkout .price-info .price-info-item .title{display:flex;flex:1 auto}.Checkout .invoice-info{border-top:1px var(--color-borders) solid;padding:1rem}.Checkout .invoice-info .checkout-info-item{display:flex;padding:.75rem .5rem 1rem;text-align:left}.Checkout .invoice-info .checkout-info-item i{font-size:1.5rem;color:var(--color-text-secondary);margin-right:2rem;width:1.5rem}.Checkout .invoice-info .checkout-info-item i.stripe-provider{background:url(stripe-logo.c0c5683dcd30037389c3..png) no-repeat center;background-size:2rem;border-radius:1rem;height:1.5rem}.Checkout .invoice-info .checkout-info-item .info .title{font-size:1rem;line-height:1.4375rem;margin-bottom:0;font-weight:400;word-break:break-word;color:var(--color-text);text-transform:capitalize}.Checkout .invoice-info .checkout-info-item .info .data{margin-bottom:0;font-size:.875rem;color:var(--color-text-secondary)} +.CardInput{position:relative}.CardInput .input-group.has-left-addon .form-control{padding-left:4rem}.CardInput .left-addon{position:absolute;top:.8125rem;left:1rem;z-index:8}.CardInput .left-addon img{max-width:2rem} +.PaymentInfo{padding:.5rem 1rem}.PaymentInfo h5{font-size:.875rem;color:var(--color-text-secondary);margin:1rem 0 1.25rem}.PaymentInfo .inline-inputs{display:flex;justify-content:space-between}.PaymentInfo .inline-inputs .input-group{flex:1 10rem;max-width:45%;display:flex} .PaymentModal .modal-backdrop{pointer-events:none}.PaymentModal .header{position:relative;border-top-left-radius:10px;border-top-right-radius:10px;width:100%;padding:.25rem 1rem;display:flex;align-items:center;flex-direction:row;background:var(--color-background);border-bottom:1px var(--color-borders) solid}.PaymentModal .header h3{margin-bottom:0;margin-left:1.5rem;unicode-bidi:plaintext;text-align:initial}.PaymentModal .Transition{height:25rem}.PaymentModal .empty-content{height:25rem;max-height:90%;display:flex;align-items:center;justify-content:center}.PaymentModal .receipt-content{height:25rem;overflow-y:auto}.PaymentModal .content{overflow:auto;width:100%;height:100%;position:relative}.PaymentModal .footer{position:relative;border-bottom-left-radius:10px;border-bottom-right-radius:10px;width:100%;padding:.75rem 1rem;background:var(--color-background);border-top:1px var(--color-borders) solid}.PaymentModal .footer button{text-transform:none;font-weight:500}.PaymentModal .modal-dialog{width:25rem}.PaymentModal .modal-content{padding:0;overflow:hidden}@media screen and (max-device-width: 640px)and (max-height: 640px)and (orientation: landscape){.PaymentModal .modal-dialog{max-height:100%}.PaymentModal .Transition{height:10rem}} -/*# sourceMappingURL=126.6c11ab2d3cdbd7baf2dd.css.map*/ \ No newline at end of file +/*# sourceMappingURL=126.56949b6fb714b8786c3b.css.map*/ \ No newline at end of file diff --git a/dist/126.56949b6fb714b8786c3b.css.map b/dist/126.56949b6fb714b8786c3b.css.map new file mode 100644 index 000000000..6ab57b22a --- /dev/null +++ b/dist/126.56949b6fb714b8786c3b.css.map @@ -0,0 +1 @@ +{"version":3,"file":"126.56949b6fb714b8786c3b.css","mappings":"AAAA,oBACE,aACA,yBACA,4BAEA,4BACE,2BAIJ,2BACE,kBACA,wBAEA,4CACE,kBACA,MACA,O;ACjBJ,mBACE,kBACA,SACA,eACA,WACA,wBAEA,uCACE,aAGF,0BAXF,mBAYI,mBAGF,yBAfF,mBAgBI,mEAEA,gCACE,UACA,oBACA,oBAEA,wEACE,UACA,oBAKN,wCACE,UAGF,gDACE,kBACA,0CACA,YACA,eACA,WACA,wBAEA,sDACE,UAGF,yBAZF,gDAaI,WAIJ,6BACE,UAGF,+BACE,gBACA,cACA,gBACA,kBACA,2BACA,mBACA,uBACA,mBAEA,0BAVF,+BAWI,oBAGF,sCACE,eACA,gBACA,oBAIA,iDACE,WACA,kBACA,cACA,eACA,aACA,gBACA,2BACA,2CACA,uBAEA,yBAXF,iDAYI,aACA,iBAMR,qBACE,yBAEA,sDAEE,0B;ACpGN,aACE,kBACA,oBACA,sBACA,gBAEA,iCACE,kBACA,MACA,QACA,SACA,OACA,qCACE,sBACA,uBAEF,uCACE,2BAIJ,yBArBF,aAuBI,WAGF,yBA1BF,aA2BI,kBAGF,0BA9BF,aA+BI,sBACS,yBACP,iBAIJ,mBACE,cACA,iCACA,YACA,mBACA,aACA,WACA,YACA,6BACA,wBAEA,0BAXF,mBAYI,gCAIF,iCACE,oBAIJ,0BACE,kBACA,SACA,QACA,gCACA,cACA,eACA,2CACA,uDACE,uCAGF,qCACE,kBACA,kBACA,aAIJ,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBAEA,2CACE,2BACA,WACA,iBACA,kBACA,cACA,aACA,UACA,kBACA,qBACA,qBAGF,iDACE,e;ACrGN,qBACE,aACA,mBACA,kBACA,OACA,SACA,WACA,yBACA,kBACA,mEACA,uBACA,UACA,oBAEA,yCACE,aAGF,yBAlBF,qBAmBI,eACA,6BACA,gBACA,+BAGF,4BACE,UACA,mBAIA,8CACE,gBACA,eACA,iBAGF,wCACE,iBAGF,qDACE,iBAIJ,6BACE,cACA,UACA,cACA,eACA,yBALF,6BAMI,gBAIJ,6BACE,mBAGF,kCACE,cACA,mBAGF,iCACE,iBACA,yBAFF,iCAGI,kBAEF,mCACE,oBACA,yBAFF,mCAGI,kBAKN,yBACE,8CACE,kBAIJ,uCACE,kBACA,SACA,2BACA,mBACA,gBACA,uBAEA,yBARF,uCASI,gBACA,eACA,iBACA,kBACA,mDACE,eAKN,sCACE,kBACA,UACA,WACA,MACA,YACA,kBACA,eAEA,4CACE,kBACA,QACA,cACA,eACA,WACA,2BACA,uCACA,2CAGF,wIAGE,kBACA,MACA,OACA,YACA,2CAGF,+CACE,sCAGF,6CACE,gCAEA,oDACE,WACA,kBACA,aACA,cACA,kBACA,sCACA,QACA,QACA,oC;ACrJR,oBACE,kBACA,MACA,OACA,QACA,SACA,eACA,gBACA,UACA,kBACA,YACA,oBACA,uBACA,mBAEA,+BACE,kBAEA,mCACE,kBACA,QACA,SACA,gCAIJ,wBACE,gBACA,iCACA,mBACA,yBAGF,qCACE,gBACA,YAGF,6BACE,Y;ACvCJ,mBACE,kBACA,aACA,YACA,iBACA,0BAEA,kCACA,WACA,gBAEA,kBACA,MACA,OACA,QACA,SAEA,qBACE,yBAIJ,kBACE,kBACA,MACA,OACA,QACA,SACA,YACA,cACA,UACA,kBACA,qBAEA,0BACE,U;ACnCJ,4BAEE,kBACA,WACA,YAGF,aACE,YACA,0CAGF,eACE,iCAEA,iCACE,gBAGF,uBACE,eACA,MACA,O;ACtBJ,YACE,aACA,qBACA,WACA,eAEA,WACA,wBAEA,kBACE,UAGF,oBACE,uBAEA,yBAHF,oBAII,cAIJ,kBACE,aACA,sBACA,uBACA,+BAGF,mBACE,sBACA,gBACA,gBACA,gBACA,uBAGF,kBACE,oBACA,kBACA,wB;ACvCJ,cACE,kBACA,eACA,SACA,0BACA,2CACA,WACA,gBACA,gBACA,qCACA,+BACA,oBAEA,mBACE,8BACA,mBAGF,+CAEE,kBACA,aACA,aACA,cACA,WAEA,mDACE,iBAIJ,wBACE,WAGF,uBACE,YAGF,wBACE,kBACA,aACA,cACA,aACA,YAEA,8BACE,kBACA,QACA,cACA,eACA,WACA,2BACA,sCACA,2CAGF,6DAEE,kBACA,MACA,OACA,YACA,2CAGF,+BACE,gBACA,uBAEA,sCACE,WACA,kBACA,aACA,cACA,kBACA,oCACA,QACA,QACA,oCAIJ,8BACE,WACA,YACA,cACA,UACA,SACA,UACA,eACA,gBAEA,oDACE,iB;AC9FR,aACE,eACA,MACA,OACA,YACA,YACA,0BACA,WACA,8BAEA,aACA,2BACA,4BACA,kBACA,eACA,sBACA,mBAEA,yBAlBF,aAmBI,iBAIF,yBACE,yBACA,mBAIA,qNAIE,aAIJ,oCACE,mCAKA,sEACE,oBACA,gBAKF,gCACE,aAGF,uCACE,UAGF,sCACE,eACA,MACA,OACA,YACA,aACA,UACA,UAIJ,gCACE,aACA,mBACA,kBACA,mCACA,YACA,qDAEA,4CACE,WACA,YAGF,yBAbF,gCAcI,mDAEA,oDACE,qBAKN,mDAEE,oBAGF,+DAEE,kBACA,oBACA,kBACA,WACA,YACA,aACA,mBACA,gBAGF,yBACE,eACA,SACA,WACA,SACA,YACA,UACA,SACA,wCACA,iCACA,wBACA,UACA,wBACA,aACA,eACA,UAEA,yBAjBF,yBAkBI,YAGF,sEAEE,UAGF,8BACE,yDACA,6CAEA,+BAEA,uCACE,UACA,iCACA,qBAIJ,8BACE,iCACA,yDACA,0DAEA,uCACE,WACA,+BACA,qBAIJ,gCACE,qBACA,aACA,YACA,6BAEA,yBANF,gCAOI,UACA,gCACA,oBAEA,wDACE,UACA,oBAOV,OACE,kBACA,8BACA,8BACA,gBACA,gBACA,+CAEA,uBACE,4CAGF,cACE,kBAGF,mBACE,iFAGF,wBAEE,WACA,YACA,iBACA,yBACA,+C;AC7MJ,kBACE,8BAEA,gCACE,WACA,gBAEA,yBAJF,gCAKI,YAIJ,gCACE,aACA,mBACA,qBAEA,wCACE,mBAGF,6CACE,SACA,OAGF,8CACE,YACA,2BAEA,eACA,cACA,kBACA,oBACA,uBAIJ,iCACE,UACA,gBACA,aACA,sBAEA,8CACE,YACA,kBACA,gBACA,gBAIJ,8BACE,YACA,SACA,kBACA,aACA,mBACA,uBACA,kCAGF,oCACE,kBAGF,4BACE,kBACA,WAKE,yBADF,4EAEI,SAEA,6FACE,iB;AC7EV,SACE,eACA,MACA,OACA,YACA,aACA,uB;ACLA,6BACE,mBACA,4CACE,0BAIJ,2BACE,aACA,mBACA,uBACA,qBAEA,yCACE,eACA,kBAEA,qDACE,kBAEF,oDACE,iBAKN,uBACE,aACA,yBACA,sBAEA,+BACE,oBAEA,uCACE,iBAKN,+BACE,aACA,mBAEA,kCACE,OACA,qBACA,kBAEA,yBALF,kCAMI,oBAGF,0CACE,2BAIJ,8CACE,WACA,oBAIJ,2BACE,kBACA,mBACA,wBACA,gBACA,uBAEA,yBAPF,2BAQI,uBAGF,mCACE,gBACA,YAGF,qCACE,eAEA,2CACE,wDAGF,8CACE,sCACA,WAIJ,oCACE,YACA,oBAGF,mCACE,WACA,cACA,iBAGF,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBACA,kBAIJ,iCACE,aACA,mBACA,uBACA,iBACA,4BAGF,8BACE,aACA,qCACA,W;ACjIJ,sBACE,kBACA,iDACA,WACA,YACA,WACA,WACA,uBACA,SAwBA,UAtBA,mDACE,qBACA,sBAGF,mCACE,WACA,yBAFF,mCAGI,yBAIJ,yBAtBF,sBAuBI,UACA,WACA,eAEA,mCACE,cAMJ,kDACE,kCAGF,iIAEE,SAGF,6CACE,2BAGF,kCACE,UACA,oBAEA,+CACE,iDAGF,4EACE,2FAGF,kFACE,kEAIJ,8BACE,WACA,gBACA,WACA,UACA,WAGF,4BACE,WACA,gBACA,aACA,mBACA,eAEA,mCACA,4CACA,iDACA,gBAEA,oBACA,+EAEA,yBAfF,4BAgBI,UACA,gBAGF,oCACE,WACA,YAEA,yBAJF,oCAKI,eACA,iBAKN,4BACE,iBACA,mBACA,gBACA,uBACA,YAEA,yBAPF,4BAQI,oBAIJ,8BACE,iBACA,aAEA,oCACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,iBACA,kBAEA,sCACE,iBACA,kCAGF,gDACE,yBACA,kDACE,cAIJ,6CACE,WACA,eACA,oBAGF,0DACE,0CACA,2BAGF,qBACE,oFACE,yCACA,sB;ACpKV,kBACE,gDACA,4DACA,qCAEA,iCACE,gBAGF,6BACE,oBAGF,yCACE,oBAGF,gCACE,iBACA,cACA,kBAGF,sCACE,SAGF,uDACE,aACA,mBAGF,uCACE,aACA,cACA,yB;ACnCJ,2BACE,aACA,aACA,WACA,kBACA,MACA,OACA,WACA,YACA,oBACA,aAEA,4BACE,KACE,iDAGF,GACE,0CAIJ,qCACE,KACE,8DAGF,GACE,qDAIJ,4CACE,kBACA,mBACA,oBACA,iCACA,0BACA,6DAGF,qDACE,4CAGF,oDACE,8EAGF,6DACE,uFAGF,mDACE,UAGF,4DACE,U;ACzDF,yBACE,gBAGF,mCACE,mBAGF,2BACE,YACA,eACA,gBACA,kBACA,mBAEA,qBACA,8BAEA,8CACE,SAGF,oDACE,+BAIJ,+BACE,qBACA,aACA,YACA,uBACA,kBACA,2CACA,eACA,kBACA,gBAEA,2CACE,oBAGF,0CACE,qBAGF,uCACE,sBAGF,qCACE,mCAGF,8CACE,kBACA,mBACA,iBACA,gBACA,uBAEA,2DACE,WACA,YACA,qBACA,sBACA,oBAKN,qCACE,aACA,mBAEA,6CACE,iBAIA,sDACE,cACA,kB;AClFN,yBACE,iBAIA,qFACE,qCAIJ,8BACE,qBAIA,0BACE,YAGF,sBACE,eACA,WAGF,6BACE,kCAEA,sDACE,wBACA,mBACA,qBACA,kBACA,qBAEA,kEACE,mBAKN,4BACE,YACA,kCACA,gBACA,uBAEA,yCACE,wBAEA,gDACE,aAIJ,gCACE,cACA,eACA,iBACA,sBACA,wBACA,oBAGF,uCACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAKN,uBACE,aACA,8BAIA,gCACE,iB;ACnFN,aACE,aACA,YACA,mBACA,8BACA,kBACA,oBAEA,wBACE,aACA,cACA,eACA,mBACA,eACA,kBACA,gBACA,kCAEA,uCACE,kBACA,oB;ACpBN,wBACE,sBACA,YACA,gBACA,yBAEA,MACE,gBACA,sBAGF,kBACE,UACA,6BAGF,yBACE,uCAEA,iBACE,8BAIJ,iBACE,oBACA,qBACA,oCACA,gBAEA,mBACA,kCACA,sCAEA,UACE,kBACA,WACA,WACA,gCACA,aACA,SACA,8EAGF,cAEE,sBACA,oCACA,mBACA,8FAEA,SACE,cACA,uHAKN,4BAEE,wBACA,2CACA,uIAEA,YACE,sBAIJ,YACE,0CAGF,iBACE,YACA,YACA,gBACA,uBACA,sBACA,2BAGF,gBACE,kCACA,kBACA,mBACA,yBAGF,YACE,cACA,qCACA,mBACA,gBACA,qCAIA,gCACE,uDAMA,sBACE,2BACA,+DAEA,WACE,6EACA,aACE,yBACA,8DAIJ,YACE,kCACA,4EAEA,UACE,gEAMJ,gBACE,wEAEA,WACE,0DAQR,uBACE,iEAEA,YACE,gBACA,0BAKN,sBACE,kBACE,8BAIJ,oBACE,8CAEA,iCACE,mBACA,gBACA,2BACA,oBACA,oDAEA,WACE,yBACA,gBACA,kBACA,mHAEA,yBAEE,0HAMF,UACE,iBACA,eACA,sCAKN,aACE,oBACA,6BAIJ,iBACE,aACA,cACA,iBACA,8BACA,qBACA,iDACA,yCACA,iCACA,gBACA,kBACA,8BAEA,iDAEA,aACE,4DAEA,iBACE,qEAKF,gBACE,eACA,2BAKN,WACE,qCAIA,cACE,mBACA,C;AC5NJ,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDAEE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDAtEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAoEE,qDA1EJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAwEE,8CA9EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYAGE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a;ACjFR,gBACE,mCACA,aACA,mBACA,gBACA,oBACA,+BACA,qBAEA,kBACE,iBACA,kBACA,kCAGF,yBACE,a;AChBJ,4BACE,yCAEA,2CACE,+CAEA,8DACE,oBACA,kBACA,YACA,kCAIJ,yCACE,sBAEA,qDACE,aAKF,uFACE,uBAGF,kFACE,qBAGF,iEACE,iBACA,qBAGF,kEACE,eACA,gBACA,SAIA,0EACE,cACA,kBACA,eACA,sBAKN,kDACE,mBACA,gBACA,oBAGF,iDACE,uBACA,6C;AC5DJ,mCACE,WACA,aACA,mBACA,8BAIA,sCACE,aACA,mBAEA,8CACE,qBACA,oBAGF,6CACE,aACA,2BACA,mBAEA,gDACE,eACA,gBACA,mBACA,SACA,gBACA,mBACA,uBACA,gBAIJ,8CACE,aAIA,yDACE,iBAMJ,+CACE,WAIJ,2DACE,2BAEA,6DACE,UACA,cAKF,6CACE,mBACA,sBAKN,+BACE,eACA,wBACA,6B;ACtEA,4CACE,oBAGF,+DAEE,WACA,YACA,mBACA,UACA,cAGF,wBACE,eACA,gBAGF,yCACE,aACA,sBACA,uBAIA,iFAEE,mB;AC5BN,eACE,SACA,oBACA,eACA,kBAEA,kDAEE,kBACA,OACA,MACA,WACA,YAGF,4BACE,gBACA,mBACA,+BAEA,mEAEE,kBACA,OACA,MACA,WACA,YACA,iBAIJ,sBACE,WACA,cACA,sCACA,UACA,6BAIA,+BACE,UAGF,qCACE,qBAIJ,kCACE,YACA,aACA,mBACA,uB;ACpDF,gDACE,aACA,cACA,qCACA,mBACA,gBAGF,oCACE,uBACA,gB;ACVF,0DACE,gCAGF,0FAEE,kBAGF,8CACE,gBACA,aAGF,4CACE,cACA,aAGF,uCACE,cACA,WACA,YACA,2CACA,eAGF,wCACE,kBACA,aACA,cACA,aACA,cACA,wCACA,qBACA,YAGF,oDACE,YAGF,uCACE,sBACA,aAEA,oDACE,gBAGE,mEACE,mDAKN,gEACE,mBAGF,+DACE,kBAIJ,mDACE,aACA,cACA,qCACA,mBACA,gBAEA,uDACE,eACA,iDACA,iCAEA,8DACE,0CACA,wDAIF,8DACE,cACA,WACA,WACA,iBACA,oB;ACzFR,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;AClCJ,UACE,YAEA,cACE,aACA,sBACA,gBAGF,uBACE,uBAIJ,sBACE,aACA,YACA,8BACA,mBAIA,4BACE,WAEA,6CACE,6BACA,8BAKN,kBACE,mCACA,yCAEA,gBC9BA,+BD0BF,kBCzBI,mBAGA,mBD6BF,kCACE,aACA,sBAEA,iDACE,cACA,YAIJ,0BACE,iBACA,mBAGF,iCACE,iBACA,qBAIJ,yBACE,aACA,sBACA,mBACA,sBACA,kBAEA,sCACE,WAIJ,uBACE,WACA,YACA,qBACA,kBAEA,wCACE,kBACA,OACA,MACA,WACA,YAEA,+CACE,aAKN,oBACE,uBAEA,+BACE,yBACA,yBACA,2EACA,8DAEA,gDACE,qBAKN,eACE,0CACA,2BAEA,yBACE,gBAGF,sBACE,eACA,kCACA,mBACA,kBAEA,+BACE,iBAIJ,sBACE,gBAGF,2BACE,kBACA,kCACA,mBACA,qBAEA,oDACE,eAGF,oCACE,iBACA,uBAIJ,kCACE,eACA,sBACA,kCACA,gBACA,qBAEA,2CACE,iBAIJ,yBACE,oBAEA,oCACE,gBAGF,8CACE,oBAEA,wDACE,WAGF,oDACE,YACA,iBACA,iBACA,kCAGF,6GAEE,cACA,gBAGF,qDACE,oBAGF,wDACE,kBACA,mBACA,kCAEA,kEACE,oBAGF,8DACE,wBAGF,8DACE,sBACA,uBAMJ,sDACE,yBAEA,wDACE,cAKN,2CACE,oBAEA,4DACE,mBACA,gBACA,cAGF,mDACE,WACA,YACA,kBAGF,yDACE,eACA,iBACA,qBACA,gBAGF,0DACE,kBACA,iBACA,kCAMA,+HAEE,iBAGF,6DACE,WACA,cACA,kBAMR,4BACE,wBAGF,qDAEE,qBAIA,8CACE,gBAIJ,gEAEE,gBAIJ,sBACE,yCACA,kBACA,gBAEA,wCACE,YAGF,4CACE,aAIJ,uBACE,iBAGF,eACE,yBAIA,4CACE,aAGF,8CACE,uBACA,aAKF,8CACE,aACA,cACA,uB;AEnUJ,SACE,YACA,gBACA,kBAEA,eACE,yCACA,gBAEA,sBACE,kBACA,aACA,sBAEA,yDACE,kBACA,oBACA,qBAGF,6BACE,yBAGF,4BACE,sBACA,kCAGF,4CACE,kCACA,eACA,gBACA,mBAGF,yCACE,kBACA,oBAEA,kBACA,Y;ACzCR,eACE,YACA,gBAEA,0BACE,yC;ACLJ,0BACE,kBACA,kBACA,eACA,gBAEA,sCACE,cAGF,kCACE,WACA,YACA,kBACA,MACA,OACA,6DACA,0BAGF,2CACE,kBACA,MACA,c;ACvBJ,kBACE,kBACA,YACA,mCACA,eACA,4BACA,YACA,mBACA,mEACA,YACA,YAEA,8BACE,kBACA,cACA,WACA,aACA,eACA,WACA,YACA,kBACA,mCACA,WAGF,gCACE,kBACA,cACA,WACA,cACA,gBACA,YACA,aACA,kBACA,mCAGF,iCACE,YACA,wDAGF,4FAEE,wDAGF,iCACE,WACA,YACA,gBACA,mBAGF,yBACE,eACA,WACA,YACA,gBACA,iBACA,kBACA,aACA,eACA,mBACA,mB;AChEJ,oBACE,kBACA,eAEA,wCACE,cACA,iBACA,gBACA,4BAGF,4BACE,4GACA,qBACA,iBACA,UAGF,2CACE,kBAGF,8BACE,kBAGF,6BACE,aACA,kBACA,iBACA,kBAEA,qCACE,8CACA,eACA,uBAEA,uDACE,uB;ACrCN,+BACE,eACA,eAGF,yBACE,+BACE,iBAIJ,+BACE,mBAGF,gCACE,kBACA,UAGF,2BACE,kBACA,WACA,aACA,gBACA,gBACA,iBACA,gBAGF,iCACE,gBACA,0CACA,+CAEA,wCACE,qBAIJ,0BACE,WACA,kBACA,kC;AC5CJ,qBACE,eACA,MACA,OACA,QACA,aACA,6BAEA,2BACE,kBACA,eAEA,qCACE,sCAGF,mCACE,6BACA,8B;AClBN,sBACE,kBACA,MACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,mDACA,oDAEA,mCACE,mBACA,OAIJ,sBACE,kBACA,SACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,iDACA,oDAEA,kDACE,2CACA,kDAGF,+BACE,OACA,kCAKF,sEAEE,8B;AC9CJ,gBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,gBAQI,yBAGF,8CACE,SAEA,+DACE,gBAGF,oDACE,aAGF,qDACE,0BACA,cAGF,sDACE,eAIA,+DACE,WAMJ,oCACE,iBAGF,kCACE,kBAIA,0CACE,YAIJ,uCACE,wB;ACtDN,iBACE,kCAEA,+BACE,mBACA,yBAFF,+BAGI,gBACA,uBAIJ,gCACE,+BACA,iCACA,yBAHF,gCAII,uBAIJ,gCACE,iBACA,cACA,aACA,eACA,qBAEA,0EAEE,OACA,yBACA,aACA,uBACA,2CACA,iBAEA,gGACE,YACA,iBACA,gBAGF,0GACE,qBAKN,mCACE,iBACA,cACA,cACA,aACA,sBACA,wBAEA,0DACE,qBAGF,8CACE,0BAIJ,6CACE,kBAEA,2DACE,mCAGF,6DACE,mBACA,UAIJ,8BACE,kBAEA,2EAEE,WACA,kBACA,OACA,MACA,QACA,SACA,2CACA,oBAEA,UACA,yBACA,UAGF,sCACE,mDACA,yCAGF,qCACE,sCACA,aACA,uBACA,mBACA,2BAKF,8CACE,YAGF,6CACE,UAGF,wIAGE,oBAGF,mFAEE,2C;AC9HJ,yBACE,mBACA,8BAGF,0BACE,+BACA,oBAGF,mCACE,mBAGF,2BACE,kCACA,eACA,gBACA,qBAGF,yBACE,6BACA,iBACA,6CACA,iBACA,cAEA,mCACE,gCAGF,yBAXF,yBAYI,gBACA,gBAEA,4DAEE,kBAKN,2BACE,kBAEA,yCACE,mBAGF,iDACE,kBACA,aACA,eAIJ,sBACE,kBAEA,sCACE,oBAGF,4BACE,iBAIJ,iBACE,kBACA,kCAGF,kBACE,kBACA,yBACA,2BAGF,mCACE,oB;AClFJ,aACE,oBACA,mBACA,uBACA,aACA,cACA,eACA,kDACA,eACA,kBACA,mBACA,6BACA,sCAEA,yBACE,oBAGF,sCAEE,kDAGF,iBACE,WACA,Y;ACzBJ,aACE,YAEA,kBACE,yBACA,gBACA,cAEA,yBALF,kBAMI,sBAGF,wCACE,aACA,eAIJ,oBACE,YACA,6CACA,aACA,mBACA,6BACA,+CAEA,yBARF,oBASI,gBACA,kBACA,cACA,mBACA,mBAEA,qBACA,8BAEA,uCACE,SAGF,6CACE,+BAGF,uCACE,oBACA,sBAIF,2BACE,WACA,cACA,cACA,UACA,a;ACvDR,eACE,YAEA,oBACE,kBACA,yBACA,gBACA,cAEA,yBANF,oBAOI,sBAIJ,sBACE,YACA,6CACA,kBACA,gBACA,kBACA,mBACA,+CAEA,qBACA,8BAEA,yCACE,SAGF,+CACE,+BAIF,6BACE,WACA,cACA,cACA,UACA,YAIF,0CACE,oBACA,sBACA,mBACA,uBAEA,wDACE,qBAEA,mMACE,YACA,aACA,WACA,YAIJ,6DACE,WACA,YACA,kBACA,aACA,mBACA,uBAEA,kNACE,WACA,YACA,kBACA,MACA,OAMR,qCACE,YACA,cAEA,yBAJF,qCAKI,YAIJ,mCACE,yBACA,eACA,gBACA,kD;AC7FJ,WACE,aACA,mBACA,uBACA,eACA,6BACA,eACA,gBACA,kBAEA,sBACE,mBAGF,oBACE,uBAGF,sBACE,uBAGF,sBACE,WACA,YACA,wCACA,iCAGF,qCACE,kBACA,MACA,OACA,WACA,YACA,iBAGF,oBACE,kBACA,oB;ACxCJ,WACE,aACA,qCACA,uBACA,gBACA,qBACA,YACA,gBACA,eAEA,6BAVF,WAWI,oBAGF,gDACE,iBACA,0B;ACbF,wBACE,eACA,OACA,QACA,SACA,mCACA,UAEA,6CACA,yCACA,2CACA,uCACA,8HAMA,6BACE,+BAEA,uDACE,gGAIJ,+CACE,gBAGF,iDACE,8CAIJ,iBACE,iCACA,wFAGF,mBACE,wCACA,0CACA,aACA,mBACA,uBACA,+CACA,kBAEA,2BACE,cACA,0BACA,gBACA,gBACA,UAEA,qCACE,oBAGF,6CACE,gBAGF,gDACE,kBACA,YAGF,gDACE,kBACA,aAKN,8BACE,YAEA,uCACE,iCAKF,sCACE,kBACA,UACA,OACA,WACA,aACA,cAMF,wHACE,UACA,cAIJ,oBACE,8CACA,UACA,gBAEA,6BALF,oBAMI,gCAIJ,6BACE,iCACA,aACA,mBACA,uBACA,kCAGF,iCACE,aACA,kBACA,6CACA,yCAGF,+BACE,iCACE,eAKN,YACE,mBAEA,iBACE,eACA,sBACA,gBACA,SACA,mBACA,kDACA,gBACA,mBACA,uBACA,mBACA,uBAGF,sBACE,mBAGF,mBACE,cACA,0BACA,gBACA,gBACA,UjBlKF,oGiBsKE,gBAIA,8CACE,cAGF,0CACE,gB;ACjLN,YACE,kBAGE,sCACE,kBACA,UACA,UACA,QACA,aAKJ,mCACE,mB;ACfJ,YACE,oBAEA,6BACE,gBAGF,4BACE,eAEA,sCACE,mBACA,mBAKF,wCACE,UACA,aAGF,uCACE,O;ACvBN,mBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,mBAQI,yB;ACPF,gCACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,gCAQI,yBAKF,0CACE,kBACA,UACA,OACA,WACA,aACA,c;ACpBN,gBACE,aACA,2DACA,oBACA,mBAEA,uBACE,a;ACPJ,gBACE,kBACA,cAGE,0CACE,kBACA,UACA,UACA,QACA,aAKJ,uCACE,mBAGF,wBACE,Y;ACpBJ,cACE,aACA,oBAEA,gBAIA,kBAHA,+BALF,cAMI,oBAIF,2BACE,gB;ACVF,iDACE,gCACA,iCAEA,wDACE,cACA,uBAIJ,mBACE,mDACA,cACA,WACA,YACA,iBACA,gDACA,oBACA,qBACA,uBACA,wBACA,gBACA,iBAEA,mCACE,WACA,iBAGF,6BACE,aACA,cACA,kBAIJ,2BACE,YAGF,mBACE,gBACA,gBACA,uBAGF,yBACE,mBACA,oBACA,qBACA,4BACA,gBACA,uBACA,gBACA,uBAEF,8DAEE,iB;AC3DJ,aACE,SACA,oBACA,gBACA,kBACA,eAEA,iBACE,kBACA,OACA,MACA,WACA,YACA,iB;ACbJ,kBAME,2BALA,oCACE,cACA,gBAKF,0BACE,aACA,qCACA,aACA,UAEA,yBANF,0BAOI,sCAGF,qCACE,iBACA,sDACE,4BACA,6BAIJ,qCACE,wBAGF,yCACE,cACA,SACA,SACA,oBACA,gBAEA,uJAGE,kBACA,MACA,OACA,sBACA,uBAEA,yBATF,uJAUI,WACA,YACA,oCACA,sC;ACjDR,2BACE,gBACA,oBACA,sBACA,yBACA,mBAGF,4BACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,4BAQI,yBAKF,sCACE,UACA,kBACA,UACA,OACA,WACA,aACA,cAKN,YACE,oBAGA,6BACE,oBACA,kBACA,2BACA,4BAEA,qCACE,cACA,WACA,kBACA,SACA,UACA,sCACA,uBACA,wBACA,kBAIJ,6BACE,iCACA,gBACA,mBAGF,kBACE,0BAGF,sBACE,mBACA,kCACA,mB;ACtEJ,aACE,YACA,gBACA,gBAEA,0BACE,aACA,sBACA,gBACA,kCACA,uBACA,mB;ACXJ,eACE,YACA,gBACA,gBAEA,4BACE,aACA,sBACA,gBACA,kCAGF,4BACE,mBAEA,mCACE,aACA,8BACA,cAEA,kDACE,gBAGF,0CACE,eACA,sBACA,SACA,gBACA,mBACA,uBAGF,0CACE,kCACA,SAGF,2CACE,cACA,iBAEA,oDACE,mCACA,kCAEA,qHAEE,+CAMR,iCACE,aACA,iBACA,gBAIA,oDACE,iBAGF,6CACE,cACA,kBAKN,8BACE,e;ACzEJ,WACE,YACA,eAEA,0BACE,YACA,cAEA,+BACE,aACA,qCACA,uBACA,gBACA,qBAIJ,wBACE,6BACA,gBACA,kB;ACpBJ,mBACE,6CACA,wBACA,aACA,8BAEA,gCACE,aACA,mBACA,mBACA,sBACA,gBACA,kCACA,+BACA,gBACA,MACA,mCAEA,yBAZF,gCAaI,kCAIJ,mCACE,iBAEA,6CACE,cACA,kBAIJ,gCACE,iBACA,kBACA,gBAEA,yBALF,gCAMI,kBAGF,yCACE,wBAKF,oEACE,qBAIA,6EACE,oBACA,eAKN,mCACE,0BACA,wBAGE,uDACE,iBACA,eAKN,8BACE,sBACA,kBACA,iB;AC1EJ,aACE,YACA,kBACA,aACA,sBACA,oBAEA,sBACE,kBACA,MACA,OACA,SACA,QACA,iCAGF,4BACE,sBACA,cACA,kBAEA,yBALF,4BAMI,gBAIJ,gCACE,0CACA,YACA,c;AC7BJ,YACE,kBACA,YAEA,2BACE,YACA,kBACA,kBAGF,qBACE,oBACA,0CAEA,0BACE,eAGF,mCACE,gBACA,iBAGF,+BACE,gBAGF,+BACE,2BAEA,yCACE,gBAIJ,mCACE,cACA,eACA,mBACA,kBAEA,oDACE,kBACA,OACA,MACA,WACA,YAEA,2DACE,aAKN,+BACE,kBAEA,yCACE,aACA,mBAGF,oDACE,aACA,kBAGF,0CACE,gBAGF,yDACE,oBACA,mBACA,gBACA,uBAGF,gEACE,gBACA,mBAIA,gDACE,gBACA,mBAKF,mEACE,qBAKN,sCACE,gBACA,mBACA,kCAEA,gDACE,mBAIJ,mCACE,kCACA,qBAEA,6CACE,mBAIJ,mCACE,kCACA,kBAGF,8BACE,iBAIJ,kCACE,YAGF,wBACE,wBAGF,yBACE,gBAEA,gCACE,oBACA,mBAEA,2CACE,sBAKF,6CACE,aACA,WACA,eAGF,4CACE,cACA,aACA,eAKN,oBACE,6BACA,6CACA,aACA,mBACA,cAEA,gBACA,iBAEA,iCACE,oBACA,kBACA,YAGF,kCACE,YACA,YACA,gBACA,UACA,gBAIJ,qBACE,iBAIJ,oBACE,mBAIA,6BACE,kBAGF,mCACE,eACA,mBACA,mBAGF,uCACE,kBACA,YACA,QACA,6BACA,UAGF,4BACE,oBAGF,6BACE,mBAKF,yBACE,mBAGF,4BACE,gBAGF,2BACE,gBAEA,0BACA,4GAEE,wBAIJ,6BACE,oBAKF,6BACE,gBACA,mBAGF,8BACE,kBAKF,kCACE,aACA,6BAGF,wCACE,WACA,YAMF,yCACE,kBACA,gBACA,iB;ACnRJ,aACE,aACA,sBACA,eAEA,8BACE,6CAGF,kBACE,aACA,eACA,cACA,oBAEA,wBACE,yCAIJ,mBACE,aACA,YACA,YACA,gBAGF,wBACE,aACA,sBACA,uBACA,gBACA,iBAGF,4BACE,kCACA,gBACA,uBACA,mBAGF,wBACE,gBACA,uBACA,mBAGF,mBACE,kCACA,kBACA,iBACA,mBAGF,sBACE,aACA,6BACA,gBACA,UAGF,qBACE,WACA,Y;AChEJ,cACE,mBAEA,iBACE,kBACA,kCACA,sB;ACNJ,UACE,mBAGE,iBACE,kCACA,gBACA,oBAGF,sBACE,mB;ACXN,UACE,gBAEA,uBACE,aACA,mBACA,cAEA,2BACE,YACA,aAIA,gCACE,iBACA,mBAGF,+BACE,mBACA,iBACA,kCAKN,sBACE,YAEA,uCACE,kBACA,aACA,mBACA,4BACA,kCACA,gBAEA,4CACE,wBAGF,8CACE,aACA,YAKN,wBACE,0CACA,aAEA,4CACE,aACA,0BACA,gBAEA,8CACE,iBACA,kCACA,kBACA,aAGF,8DACE,oEACA,qBACA,mBACA,cAIA,yDACE,eACA,sBACA,gBACA,gBACA,sBACA,wBACA,0BAGF,wDACE,gBACA,kBACA,qC;ACtFV,WACE,kBAEA,qDACE,kBAGF,uBACE,kBACA,aACA,UACA,UAEA,2BACE,e;ACdN,aACE,mBAEA,gBACE,kBACA,kCACA,sBAGF,4BACE,aACA,8BAEA,yCACE,aACA,cACA,a;ACfJ,8BACE,oBAGF,sBACE,kBACA,4BACA,6BACA,WACA,oBACA,aACA,mBACA,mBACA,mCACA,6CAEA,yBACE,gBACA,mBACA,uBACA,mBAIJ,0BACE,aAGF,6BACE,aACA,eACA,aACA,mBACA,uBAGF,+BACE,aACA,gBAGF,uBACE,cACA,WACA,YACA,kBAGF,sBACE,kBACA,+BACA,gCACA,WACA,oBACA,mCACA,0CAEA,6BACE,oBACA,gBAIJ,4BACE,YAGF,6BACE,UACA,gBAIJ,+FAEI,4BACE,gBAGF,0BACE,c","sources":["webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.scss","webpack://telegram-t/./src/components/mediaViewer/PanZoom.scss","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.scss","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.scss","webpack://telegram-t/./src/components/common/ChatOrUserPicker.scss","webpack://telegram-t/./src/components/main/Dialogs.scss","webpack://telegram-t/./src/components/common/CalendarModal.scss","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.scss","webpack://telegram-t/./src/components/middle/ReactorListModal.scss","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.scss","webpack://telegram-t/./src/components/left/search/RecentContacts.scss","webpack://telegram-t/./src/components/left/search/ChatMessage.scss","webpack://telegram-t/./src/components/left/search/DateSuggest.scss","webpack://telegram-t/./src/components/left/search/LeftSearch.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss","webpack://telegram-t/./src/components/ui/ShowMoreButton.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.scss","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.scss","webpack://telegram-t/./src/components/left/settings/WallpaperTile.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.scss","webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/left/settings/Settings.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/left/newChat/NewChat.scss","webpack://telegram-t/./src/components/left/ArchivedChats.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelector.scss","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.scss","webpack://telegram-t/./src/components/common/StickerSetModal.scss","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.scss","webpack://telegram-t/./src/components/middle/MobileSearch.scss","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.scss","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.scss","webpack://telegram-t/./src/components/middle/composer/PollModal.scss","webpack://telegram-t/./src/components/middle/composer/EmojiButton.scss","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.scss","webpack://telegram-t/./src/components/middle/composer/StickerPicker.scss","webpack://telegram-t/./src/components/common/GifButton.scss","webpack://telegram-t/./src/components/middle/composer/GifPicker.scss","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.scss","webpack://telegram-t/./src/components/middle/composer/AttachMenu.scss","webpack://telegram-t/./src/components/middle/composer/BotCommand.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.scss","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.scss","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.scss","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.scss","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.scss","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.scss","webpack://telegram-t/./src/components/right/RightSearch.scss","webpack://telegram-t/./src/components/right/StickerSearch.scss","webpack://telegram-t/./src/components/right/GifSearch.scss","webpack://telegram-t/./src/components/right/PollAnswerResults.scss","webpack://telegram-t/./src/components/right/PollResults.scss","webpack://telegram-t/./src/components/right/management/Management.scss","webpack://telegram-t/./src/components/right/management/JoinRequest.scss","webpack://telegram-t/./src/components/payment/ShippingInfo.scss","webpack://telegram-t/./src/components/payment/Shipping.scss","webpack://telegram-t/./src/components/payment/Checkout.scss","webpack://telegram-t/./src/components/payment/CardInput.scss","webpack://telegram-t/./src/components/payment/PaymentInfo.scss","webpack://telegram-t/./src/components/payment/PaymentModal.scss"],"sourcesContent":[".MediaViewerActions {\n display: flex;\n margin-inline-start: auto;\n margin-inline-end: -0.375rem;\n\n .Button {\n margin-inline-start: 0.25rem;\n }\n}\n\n.MediaViewerActions-mobile {\n position: relative;\n color: var(--color-text);\n\n .ProgressSpinner {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n",".MediaViewerFooter {\n position: absolute;\n bottom: 0;\n padding: 1rem 0;\n width: 100%;\n transition: opacity 0.15s;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-height: 640px) {\n padding: 0.5rem 0 0;\n }\n\n @media (max-width: 600px) {\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n\n &.is-for-video {\n opacity: 0;\n pointer-events: none;\n padding-bottom: 5rem;\n\n .video-controls-visible &:not(.is-hidden) {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n\n body.ghost-animating & {\n opacity: 0;\n }\n\n .media-viewer-footer-content {\n position: relative;\n max-width: var(--messages-container-width);\n margin: auto;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity 0.15s;\n\n &:hover {\n opacity: 1;\n }\n\n @media (max-width: 600px) {\n opacity: 1;\n }\n }\n\n &.is-hidden {\n opacity: 0;\n }\n\n .media-text {\n margin-bottom: 0;\n overflow: auto;\n padding: 0 0.5rem;\n text-align: center;\n color: rgba(255, 255, 255, 0.9);\n font-size: 0.9375rem;\n letter-spacing: 0.025rem;\n max-height: 4.25rem;\n\n @media (max-height: 640px) {\n max-height: 2.75rem;\n }\n\n .emoji {\n width: 0.9375rem;\n height: 0.9375rem;\n vertical-align: -2px;\n }\n\n &.multiline {\n &::before {\n content: \"\";\n position: absolute;\n left: -0.75rem;\n right: -0.75rem;\n top: -0.25rem;\n bottom: -0.25rem;\n background: rgba(0, 0, 0, 0.75);\n border-radius: var(--border-radius-default);\n z-index: var(--z-below);\n\n @media (max-width: 600px) {\n display: none;\n background: none;\n }\n }\n }\n }\n\n a {\n color: var(--color-links);\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n}\n",".VideoPlayer {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n overflow: hidden;\n\n #MediaViewer.zoomed & {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n > div {\n width: 100% !important;\n height: 100% !important;\n }\n video {\n max-height: none !important;\n }\n }\n\n @media (min-width: 601px) {\n // Safari: custom controls are not displayed after exiting full screen mode.\n z-index: 1;\n }\n\n @media (max-width: 600px) {\n overflow: visible;\n }\n\n @media (max-height: 640px) {\n margin-bottom: 1.75rem;\n @at-root .has-footer #{&} {\n margin-bottom: 0;\n }\n }\n\n video {\n display: block;\n max-height: calc(100vh - 8.25rem);\n margin: auto;\n object-fit: contain;\n outline: none;\n width: 100%;\n height: 100%;\n background: no-repeat 50% 50%;\n background-size: contain;\n\n @media (max-height: 640px) {\n max-height: calc(100vh - 10rem);\n }\n\n // Disable fullscreen on double tap on mobile devices\n .is-touch-env & {\n pointer-events: none;\n }\n }\n\n .play-button {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 3.25rem;\n height: 3.25rem;\n background-color: rgba(0, 0, 0, 0.5) !important;\n body:not(.animation-level-0) & {\n transition: opacity 0.3s ease !important;\n }\n\n .icon-play {\n font-size: 1.75rem;\n position: relative;\n left: 0.125rem;\n }\n }\n\n .spinner-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .buffering {\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n position: absolute;\n left: 0.1875rem;\n top: 0.1875rem;\n z-index: 1;\n padding: 0 0.375rem;\n border-radius: 0.75rem;\n line-height: 1.125rem;\n }\n\n .ProgressSpinner {\n cursor: pointer;\n }\n }\n}\n",".VideoPlayerControls {\n display: flex;\n align-items: center;\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n padding: 1rem 0.5rem 0.5rem;\n font-size: 0.875rem;\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n transition: opacity 0.3s;\n opacity: 0;\n pointer-events: none;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-width: 600px) {\n position: fixed;\n padding: 1.25rem 0.5rem 0.75rem;\n background: none;\n z-index: var(--z-media-viewer);\n }\n\n &.active {\n opacity: 1;\n pointer-events: all;\n }\n\n &.mobile {\n .player-file-size {\n position: static;\n transform: none;\n margin-left: auto;\n }\n\n .fullscreen {\n margin-left: 1rem;\n }\n\n .player-time + .fullscreen {\n margin-left: auto;\n }\n }\n\n .Button {\n width: 2.25rem;\n padding: 0;\n margin: 0.25rem;\n height: 1.75rem;\n @media (max-width: 600px) {\n height: 2.25rem;\n }\n }\n\n .play i {\n line-height: 1.5rem;\n }\n\n .player-time {\n margin: 0 1rem;\n white-space: nowrap;\n }\n\n .fullscreen {\n margin-left: auto;\n @media (max-width: 600px) {\n margin-left: 1rem;\n }\n i {\n line-height: 1.75rem;\n @media (max-width: 600px) {\n font-size: 1.5rem;\n }\n }\n }\n\n @media (max-width: 600px) {\n .player-time + .fullscreen {\n margin-left: auto;\n }\n }\n\n .player-file-size {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (max-width: 600px) {\n position: static;\n transform: none;\n margin-left: auto;\n margin-right: 1rem;\n & + .fullscreen {\n margin-left: 0;\n }\n }\n }\n\n .player-seekline {\n position: absolute;\n left: 1rem;\n right: 1rem;\n top: 0;\n height: 1rem;\n touch-action: none;\n cursor: pointer;\n\n &-track {\n position: absolute;\n top: 50%;\n left: -0.25rem;\n right: -0.25rem;\n height: 5px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.16);\n border-radius: var(--border-radius-default);\n }\n\n &-buffered,\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-buffered {\n background-color: rgba(255, 255, 255, 0.5);\n }\n\n &-played {\n background: var(--color-primary);\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n border-radius: 50%;\n background-color: var(--color-primary);\n right: 0;\n top: 50%;\n transform: translate(0.325rem, -50%);\n }\n }\n }\n}\n",".MediaViewerContent {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: none;\n overflow: hidden;\n z-index: 1;\n padding: 3.25rem 0;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .thumbnail {\n position: relative;\n\n img {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n > img {\n max-width: 100vw;\n max-height: calc(100vh - 8.25rem);\n object-fit: contain;\n transition: transform 0.2s;\n }\n\n .spinner-wrapper {\n max-width: 100vw;\n margin: auto;\n }\n\n .Spinner {\n margin: auto;\n }\n}\n",".MediaViewerSlides {\n position: absolute;\n display: flex;\n height: 100%;\n max-height: 100vh;\n min-height: -moz-available;\n /* stylelint-disable-next-line declaration-block-no-duplicate-properties */\n max-height: -webkit-fill-available;\n width: 100%;\n overflow: hidden;\n -ms-touch-action: none;\n touch-action: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n & * {\n -ms-scroll-chaining: none;\n }\n}\n\n.MediaViewerSlide {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n flex: 100% 0 0;\n z-index: 0;\n touch-action: none;\n transform-origin: 0 0;\n\n &--active {\n z-index: 1;\n }\n}\n",".pan-wrapper,\n.pan-container {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.pan-wrapper {\n cursor: move;\n user-select: none;\n}\n\n.pan-container {\n transition: transform 0.2s ease-in;\n\n .pan-wrapper.move & {\n transition: none;\n }\n\n .zoomed & {\n position: fixed;\n top: 0;\n left: 0;\n }\n}\n",".SenderInfo {\n display: flex;\n align-content: center;\n color: white;\n cursor: pointer;\n\n opacity: 0.5;\n transition: 0.15s opacity;\n\n &:hover {\n opacity: 1;\n }\n\n .Avatar {\n margin-inline-end: 1rem;\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n justify-content: center;\n max-width: calc(100% - 3.75rem);\n }\n\n .title {\n line-height: 1.4375rem;\n font-weight: 500;\n white-space: pre;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .date {\n line-height: 1.25rem;\n font-size: 0.875rem;\n letter-spacing: -0.01rem;\n }\n}\n",".ZoomControls {\n position: absolute;\n bottom: 1.25rem;\n left: 50%;\n background: rgba(0, 0, 0, 0.5);\n border-radius: var(--border-radius-default);\n width: 100%;\n height: 3.375rem;\n max-width: 274px;\n transform: translate3d(-50%, 0, 10px);\n transition: opacity 0.3s ease-in;\n pointer-events: none;\n\n &.open {\n z-index: var(--z-media-viewer);\n pointer-events: all;\n }\n\n .zoom-out,\n .zoom-in {\n position: absolute;\n top: 0.4375rem;\n width: 2.5rem;\n height: 2.5rem;\n color: #fff;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n .zoom-out {\n left: 0.5rem;\n }\n\n .zoom-in {\n right: 0.5rem;\n }\n\n .seekline {\n position: absolute;\n left: 3.25rem;\n right: 3.25rem;\n top: 1.125rem;\n height: 1rem;\n\n &-track {\n position: absolute;\n top: 50%;\n left: -0.25rem;\n right: -0.25rem;\n height: 2px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: var(--border-radius-default);\n }\n\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-played {\n background: #fff;\n transition: width 200ms;\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n border-radius: 50%;\n background-color: var(--color-white);\n right: 0;\n top: 50%;\n transform: translate(0.325rem, -50%);\n }\n }\n\n &-input {\n width: 100%;\n height: 1rem;\n top: -0.375rem;\n opacity: 0;\n margin: 0;\n padding: 0;\n cursor: pointer;\n overflow: hidden;\n\n &::-webkit-slider-thumb {\n margin-top: -2rem;\n }\n }\n }\n}\n","#MediaViewer {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100%;\n background: rgba(0, 0, 0, 0.9);\n color: #fff;\n z-index: var(--z-media-viewer);\n\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: auto 1fr;\n grid-column-gap: 0;\n grid-row-gap: 0;\n justify-items: stretch;\n align-items: center;\n\n @media (max-width: 600px) {\n background: rgba(0, 0, 0, 1);\n }\n\n // Potential perf improvement\n &:not(.shown) {\n display: block !important;\n transform: scale(0);\n }\n\n body.ghost-animating & {\n > .pan-wrapper,\n > button,\n .MediaViewerContent img,\n .MediaViewerContent .VideoPlayer {\n display: none;\n }\n }\n\n body.animation-level-2 & {\n transition-duration: 0.3s !important;\n }\n\n &:not(.open),\n .closing {\n .SenderInfo {\n pointer-events: none;\n transition: none;\n }\n }\n\n &.zoomed {\n .navigation {\n display: none;\n }\n\n .media-viewer-head {\n z-index: 2;\n }\n\n .MediaViewerSlide {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n padding: 0;\n z-index: 1;\n }\n }\n\n .media-viewer-head {\n display: flex;\n grid-area: 1 / 1 / 2 / -2;\n position: relative;\n z-index: var(--z-media-viewer-head);\n min-width: 0;\n padding: 0.5rem max(1.25rem, env(safe-area-inset-left));\n\n & > .Transition {\n width: 100%;\n min-width: 0;\n }\n\n @media (max-width: 600px) {\n padding: 0.5rem max(0.5rem, env(safe-area-inset-left));\n\n .media-viewer-close {\n margin-right: 1.5rem;\n }\n }\n }\n\n & > .Transition,\n & > .pan-wrapper {\n grid-area: 1 / 1 / -1 / -1;\n }\n\n & > .Transition,\n & > .pan-wrapper .Transition {\n position: relative;\n justify-self: center;\n text-align: center;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n }\n\n .navigation {\n position: fixed;\n top: 4rem;\n width: 10vw;\n bottom: 0;\n border: none;\n padding: 0;\n margin: 0;\n appearance: none;\n background: transparent no-repeat;\n background-size: 1.25rem;\n opacity: 0;\n transition: opacity 0.15s;\n outline: none;\n cursor: pointer;\n z-index: 1;\n\n @media (max-width: 600px) {\n width: 20vw;\n }\n\n &:hover,\n .is-touch-env & {\n opacity: 1;\n }\n\n &.prev {\n background-image: url(\"../../assets/media_navigation_previous.svg\");\n background-position: 1.25rem calc(50% - 2rem);\n\n left: env(safe-area-inset-left);\n\n &[dir=\"rtl\"] {\n left: auto;\n right: env(safe-area-inset-right);\n transform: scaleX(-1);\n }\n }\n\n &.next {\n right: env(safe-area-inset-right);\n background-image: url(\"../../assets/media_navigation_next.svg\");\n background-position: calc(100% - 1.25rem) calc(50% - 2rem);\n\n &[dir=\"rtl\"] {\n right: auto;\n left: env(safe-area-inset-left);\n transform: scaleX(-1);\n }\n }\n\n &.inline {\n top: calc(50% - 3rem);\n bottom: unset;\n height: 6rem;\n background-position-y: center;\n\n @media (max-width: 600px) {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n pointer-events: none;\n\n .video-controls-visible & {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n }\n}\n\n.ghost {\n position: absolute;\n z-index: var(--z-media-viewer);\n will-change: transform, opacity;\n overflow: hidden;\n border-radius: 0;\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n &.rounded-corners {\n border-radius: var(--border-radius-messages);\n }\n\n &.circle {\n border-radius: 50%;\n }\n\n body.is-ios & {\n transition: transform 0.2s ease, opacity 0.2s ease, border-radius 0.2s ease !important;\n }\n\n img,\n video {\n width: 100%;\n height: 100%;\n user-select: none;\n -webkit-user-select: none;\n object-fit: cover;\n }\n}\n",".ChatOrUserPicker {\n z-index: var(--z-media-viewer);\n\n .modal-dialog {\n height: 70%;\n max-width: 25rem;\n\n @media (max-width: 600px) {\n height: 90%;\n }\n }\n\n .modal-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.5rem;\n\n .Button {\n margin-right: 0.5rem;\n }\n\n .input-group {\n margin: 0;\n flex: 1;\n }\n\n .form-control {\n border: none;\n box-shadow: none !important;\n\n height: 2.75rem;\n padding: 0.5rem;\n font-size: 1.25rem;\n line-height: 1.75rem;\n unicode-bidi: plaintext;\n }\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .picker-list {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0 0.5rem;\n }\n }\n\n .no-results {\n height: 100%;\n margin: 0;\n padding: 1rem 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem {\n position: absolute;\n width: 100%;\n }\n\n .ListItem.chat-item-clickable {\n &:not(.force-rounded-corners) {\n @media (max-width: 600px) {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n }\n }\n }\n}\n","#Dialogs {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: var(--z-modal);\n}\n",".CalendarModal {\n .modal-dialog {\n max-width: 26.25rem;\n .modal-content {\n padding: 0.375rem 1rem 1rem;\n }\n }\n\n .timepicker {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 1.5rem;\n\n .form-control {\n max-width: 5rem;\n text-align: center;\n\n &:first-child {\n margin-right: 1rem;\n }\n &:last-child {\n margin-left: 1rem;\n }\n }\n }\n\n .footer {\n display: flex;\n justify-content: flex-end;\n flex-direction: column;\n\n .Button {\n text-transform: none;\n\n + .Button {\n margin-top: 0.5rem;\n }\n }\n }\n\n .month-selector {\n display: flex;\n align-items: center;\n\n h4 {\n flex: 1;\n margin: 0 0 0 1.25rem;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n margin-left: 0.75rem;\n }\n\n & ~ .Button {\n color: var(--color-primary);\n }\n }\n\n .Button.hidden {\n opacity: 0.5;\n pointer-events: none;\n }\n }\n\n .day-button {\n position: relative;\n border-radius: 4rem;\n outline: none !important;\n font-weight: 500;\n margin: 0.125rem 0.625rem;\n\n @media (max-width: 600px) {\n margin: 0.25rem 0.375rem;\n }\n\n &.weekday {\n margin-bottom: 0;\n height: 1rem;\n }\n\n &.clickable {\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n }\n\n &.selected {\n background-color: var(--color-primary);\n color: white;\n }\n }\n\n &.disabled {\n opacity: 0.25;\n pointer-events: none;\n }\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n }\n }\n\n .calendar-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 17rem;\n margin: 1.5rem -0.5rem 0.5rem;\n }\n\n .calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n width: 100%;\n }\n}\n",".MessageSelectToolbar {\n position: absolute;\n bottom: calc(0.5rem + env(safe-area-inset-bottom));\n left: 0.5rem;\n right: 0.5rem;\n width: auto;\n z-index: 20;\n justify-content: center;\n margin: 0;\n\n .mask-image-disabled &::before {\n left: auto !important;\n right: auto !important;\n }\n\n .no-composer & {\n width: 100%;\n @media (max-width: 600px) {\n width: calc(100% - 1rem);\n }\n }\n\n @media (min-width: 601px) {\n left: 1rem;\n right: 1rem;\n bottom: 1.25rem;\n\n .no-composer & {\n top: -4.75rem;\n }\n }\n\n opacity: 1;\n\n & .MessageSelectToolbar-inner {\n transform: scaleX(1) translateX(0);\n }\n\n .no-composer .middle-column-footer-button-container + &,\n .no-composer .messaging-disabled + & {\n top: auto;\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &:not(.shown) {\n opacity: 0;\n pointer-events: none;\n\n .shown-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1));\n }\n\n &.with-composer .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1)) translateX(var(--toolbar-translate-x, 0));\n }\n\n &:not(.with-composer) .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-unpin-hidden-scale)) translateX(0);\n }\n }\n\n &::before {\n z-index: -1;\n max-width: 32rem;\n width: 100%;\n left: auto;\n right: auto;\n }\n\n &-inner {\n width: 100%;\n max-width: 32rem;\n display: flex;\n align-items: center;\n padding: 0.25rem;\n\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n box-shadow: 0 1px 2px var(--color-default-shadow);\n font-weight: 500;\n\n transform: scaleX(1);\n transition: transform var(--select-transition), opacity var(--select-transition);\n\n @media (max-width: 600px) {\n padding: 0;\n max-width: none;\n }\n\n > .Button {\n width: 3rem;\n height: 3rem;\n\n @media (max-width: 600px) {\n width: 2.875rem;\n height: 2.875rem;\n }\n }\n }\n\n &-count {\n margin-left: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-grow: 1;\n\n @media (max-width: 600px) {\n margin-right: 0.5rem;\n }\n }\n\n &-actions {\n margin-left: auto;\n display: flex;\n\n .item {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n padding: 0.6875rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n }\n\n &.destructive {\n color: var(--color-error);\n i {\n color: inherit;\n }\n }\n\n &.disabled {\n opacity: 0.5;\n cursor: default;\n pointer-events: none;\n }\n\n &:not(.disabled):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n @media (hover: hover) {\n &:hover, &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n }\n }\n }\n }\n}\n",".ReactorListModal {\n --color-reaction: var(--color-message-reaction);\n --hover-color-reaction: var(--color-message-reaction-hover);\n --accent-color: var(--color-primary);\n\n .modal-content {\n overflow: hidden;\n }\n\n .Reactions {\n margin-bottom: 0.5rem;\n }\n\n .reaction-filter-emoji {\n margin-right: 0.25rem;\n }\n\n .reactor-list {\n max-height: 400px;\n overflow: auto;\n overflow-x: hidden;\n }\n\n .reactors-list-item {\n margin: 0;\n }\n\n .reactors-list-item .ListItem-button {\n display: flex;\n align-items: center;\n }\n\n .reactors-list-emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-start: auto;\n }\n}\n",".EmojiInteractionAnimation {\n --start-x: 0;\n --start-y: 0;\n --scale: 0;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1000;\n\n @keyframes show-interaction {\n from {\n transform: translate(0, 0) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n @keyframes show-interaction-reversed {\n from {\n transform: translate(50%, 0) scaleX(-1) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(100%, -50%) scaleX(-1) scale(1);\n }\n }\n\n .AnimatedSticker {\n position: absolute;\n top: var(--start-y);\n left: var(--start-x);\n transform: scale(var(--scale), 0);\n transform-origin: left top;\n transition: 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99) opacity;\n }\n\n &.reversed .AnimatedSticker {\n transform: scale(var(--scale), 0) scaleX(-1);\n }\n\n &.playing .AnimatedSticker {\n animation: show-interaction forwards 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99);\n }\n\n &.reversed.playing .AnimatedSticker {\n animation: show-interaction-reversed forwards 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99);\n }\n\n &.hiding .AnimatedSticker {\n opacity: 0;\n }\n\n &.reversed.hiding .AnimatedSticker {\n opacity: 0;\n }\n}\n",".RecentContacts {\n .Loading {\n min-height: 75vh;\n }\n\n .top-peers-section {\n padding: 0.5rem 1rem;\n }\n\n .top-peers {\n height: 6rem;\n margin: 0 -1rem;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n }\n\n .top-peer-item {\n display: inline-block;\n width: 4.5rem;\n height: 6rem;\n padding: 0.625rem 0.25rem;\n margin-left: 0.5rem;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n position: relative;\n overflow: hidden;\n\n &:first-child {\n margin-left: 0.125rem;\n }\n\n &:last-child {\n margin-right: 0.125rem;\n }\n\n .Avatar {\n margin: 0 auto 0.375rem;\n }\n\n &:hover {\n background: var(--color-chat-hover);\n }\n\n .top-peer-name {\n text-align: center;\n white-space: nowrap;\n font-size: 0.75rem;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n background-size: 1rem;\n margin-inline-end: 1px;\n vertical-align: -3px;\n }\n }\n }\n\n .recent-chats-header {\n display: flex;\n align-items: center;\n\n .Button {\n margin-left: auto;\n }\n\n &[dir=\"rtl\"] {\n .Button {\n margin-left: 0;\n margin-right: auto;\n }\n }\n }\n}\n",".ChatMessage {\n &:first-child {\n margin-top: 0.5rem;\n }\n &:hover,\n &.selected {\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n\n .ListItem-button {\n padding: 0.25rem 0.5rem;\n }\n\n .info {\n .title {\n flex-grow: 1;\n }\n\n h3 {\n font-size: 1rem;\n width: auto;\n }\n\n .subtitle {\n color: var(--color-text-secondary);\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #cae3f7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n display: inline-block;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n }\n\n .message {\n flex-grow: 1;\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: \": \";\n }\n }\n\n img {\n width: 1.25rem;\n height: 1.25rem;\n object-fit: cover;\n border-radius: 0.125rem;\n vertical-align: -0.25rem;\n margin-right: 0.25rem;\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n }\n }\n }\n\n .info-row {\n display: flex;\n justify-content: space-between;\n }\n\n &[dir=\"rtl\"] {\n .subtitle {\n text-align: right;\n }\n }\n}\n",".DateSuggest {\n display: flex;\n height: 2rem;\n flex-direction: row;\n justify-content: space-between;\n margin-left: 0.5rem;\n margin-bottom: 0.5rem;\n\n .date-item {\n display: flex;\n flex: 1 1 auto;\n min-width: 8rem;\n margin-top: 0.375rem;\n cursor: pointer;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n\n .icon-calendar {\n font-size: 1.25rem;\n margin-right: 0.25rem;\n }\n }\n}\n",".LeftSearch {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n\n & > .Transition {\n flex: 1;\n overflow: hidden;\n }\n\n .TabList {\n padding-bottom: 1px;\n z-index: 1;\n }\n\n .documents-list {\n padding: 0 1.25rem 1.25rem;\n\n .ListItem {\n padding: 0.625rem 0;\n }\n }\n\n .section-heading {\n position: relative;\n padding-top: 1.25rem;\n padding-left: 1.25rem;\n margin: 0 0 1rem -1.25rem !important;\n\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 1px;\n background: var(--color-borders);\n left: 0.625rem;\n top: -1px;\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n padding-left: 0;\n padding-right: 1.25rem;\n margin: 0 -1.25rem 0 1rem !important;\n text-align: initial;\n\n &::before {\n left: auto;\n right: 0.625rem;\n }\n }\n }\n\n .LeftSearch .search-section .section-heading,\n .RecentContacts .search-section .section-heading {\n margin-left: -1rem !important;\n width: calc(100% + 2rem);\n box-shadow: 0 -1px 0 0 var(--color-borders);\n\n &::before {\n display: none;\n }\n }\n\n .WebLink {\n display: flex;\n }\n\n .content:not(.with-seekline) {\n align-self: center;\n min-width: 0;\n flex-grow: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n }\n\n .message-date {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n padding-left: 1rem;\n white-space: nowrap;\n }\n\n .media-list {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n }\n\n .Audio {\n .ProgressSpinner {\n margin: -0.1875rem 0 0 -0.1875rem;\n }\n }\n\n .ListItem.search-result {\n .ChatInfo {\n .handle {\n unicode-bidi: plaintext;\n color: var(--color-primary);\n\n &::before {\n content: \"@\";\n html[lang=\"ar\"] & {\n content: \" ،@\";\n margin-inline-end: 0.25rem;\n }\n }\n\n &::after {\n content: \", \";\n color: var(--color-text-secondary);\n\n html[lang=\"ar\"] & {\n content: \"\";\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .status {\n text-align: right;\n\n .handle {\n float: right;\n }\n }\n }\n }\n }\n\n .ListItem.search-result-message {\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: \": \";\n white-space: pre;\n }\n }\n }\n\n @media (max-width: 600px) {\n .ListItem {\n margin: 0 -0.625rem;\n }\n }\n\n .search-section {\n padding: 0 1rem 0.5rem;\n\n .section-heading {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n font-weight: 500;\n margin-bottom: 0 !important;\n padding-top: 0.875rem;\n\n .Link {\n float: right;\n color: var(--color-links);\n font-weight: 400;\n margin-right: 1rem;\n\n &:focus,\n &:hover {\n text-decoration: underline;\n }\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n .Link {\n float: left;\n margin-left: 1rem;\n margin-right: 0;\n }\n }\n }\n\n .Loading {\n height: 4.5rem;\n margin-bottom: 0.5rem;\n }\n }\n\n .chat-selection {\n padding-top: 0.5rem;\n display: flex;\n flex-shrink: 0;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: flex-end;\n box-shadow: inset 0 -1px 0 0 var(--color-borders);\n background-color: var(--color-background);\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n overflow-y: hidden;\n\n scrollbar-color: rgba(0, 0, 0, 0);\n\n > .PickerSelectedItem {\n flex: 0 0 auto;\n\n &:last-child {\n margin-right: auto;\n }\n }\n\n &[dir=\"rtl\"] {\n > .PickerSelectedItem:last-child {\n margin-left: auto;\n margin-right: 0;\n }\n }\n }\n\n .NothingFound {\n height: 100%;\n }\n\n [dir=\"rtl\"] {\n .message-date {\n padding-left: 0;\n padding-right: 1rem;\n }\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content,\n #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform 0.15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input,\n i,\n &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n",".ShowMoreButton {\n color: var(--text-color) !important;\n display: flex;\n align-items: center;\n text-align: left;\n text-transform: none;\n padding-left: 0.75rem !important;\n opacity: 1 !important;\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n\n .Spinner {\n top: 0.4375rem;\n }\n}\n",".SettingsFoldersChatsPicker {\n height: calc(100% - var(--header-height));\n\n .picker-header {\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n .max-items-reached {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n color: var(--color-text-secondary);\n }\n }\n\n .picker-list {\n padding: 0 0.5rem 0.5rem;\n\n .no-results {\n height: 10rem;\n }\n }\n\n .ListItem.picker-list-item {\n &.chat-type-item .ListItem-button {\n padding: 0.875rem 0.75rem;\n }\n\n &.chat-item .ListItem-button {\n padding: 0.5rem 0.75rem;\n }\n\n .Checkbox {\n margin-left: auto;\n padding-left: 3.25rem;\n }\n\n .chat-type {\n font-size: 1rem;\n font-weight: 400;\n margin: 0;\n }\n\n &[dir=\"rtl\"] {\n .Checkbox {\n margin-left: 0;\n margin-right: auto;\n padding-left: 0;\n padding-right: 3.25rem;\n }\n }\n }\n\n .settings-item-header {\n margin-left: 0.75rem;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n }\n\n .picker-list-divider {\n margin: 0.5rem -0.5rem 0;\n border-bottom: 1px solid var(--color-borders);\n }\n}\n",".settings-folders-recommended-item {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.settings-folders-list-item {\n .ChatInfo {\n display: flex;\n align-items: center;\n\n .Avatar {\n margin-left: -0.25rem;\n margin-right: 1.5rem;\n }\n\n .title {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n h3 {\n font-size: 1rem;\n font-weight: 500;\n line-height: 1.3125;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: left;\n }\n }\n\n .status {\n display: none;\n }\n\n &[dir=\"rtl\"] {\n .title h3 {\n text-align: right;\n }\n }\n }\n\n .ListItem-button {\n i {\n opacity: 0.9;\n }\n }\n\n &.color-primary .ListItem-button {\n color: var(--color-primary);\n\n i {\n opacity: 1;\n color: inherit;\n }\n }\n\n &[dir=\"rtl\"] {\n .Avatar {\n margin-left: 1.5rem;\n margin-right: -0.25rem;\n }\n }\n}\n\n.settings-item .ShowMoreButton {\n margin: 0 -1rem;\n width: calc(100% + 2rem);\n padding-left: 1rem !important;\n}\n",".SettingsStickerSet {\n .settings-item &.ListItem {\n margin-bottom: 0.5rem;\n }\n\n .StickerButton,\n .Button {\n width: 3rem;\n height: 3rem;\n margin: 0 0.5rem 0 0;\n padding: 0;\n flex: 0 0 3rem;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n\n .multiline-menu-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n &[dir=\"rtl\"] {\n .StickerButton,\n .Button {\n margin: 0 0 0 0.5rem;\n }\n }\n}\n",".WallpaperTile {\n height: 0;\n padding-bottom: 100%;\n cursor: pointer;\n position: relative;\n\n .media-inner,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n\n .media-inner {\n overflow: hidden;\n transform: scale(1);\n transition: transform 0.15s ease;\n\n img,\n canvas {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n\n &::after {\n content: \"\";\n display: block;\n border: 2px solid var(--color-primary);\n opacity: 0;\n transition: opacity 0.15s ease;\n }\n\n &.selected {\n &::after {\n opacity: 1;\n }\n\n .media-inner {\n transform: scale(0.9);\n }\n }\n\n .spinner-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n",".SettingsGeneralBackground {\n .settings-wallpapers {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n }\n\n .Loading {\n height: auto !important;\n margin-top: 5rem;\n }\n}\n",".SettingsGeneralBackgroundColor {\n &:not(.is-dragging) .handle {\n transition: transform 300ms ease;\n }\n\n .color-picker,\n .hue-picker {\n position: relative;\n }\n\n .color-picker {\n margin-top: 1rem;\n height: 12rem;\n }\n\n .hue-picker {\n margin: 2rem 0;\n height: 0.5rem;\n }\n\n canvas {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n }\n\n .handle {\n position: absolute;\n top: -0.75rem;\n left: -0.75rem;\n width: 1.5rem;\n height: 1.5rem;\n border: 0.125rem solid var(--color-white);\n border-radius: 0.75rem;\n cursor: grab;\n }\n\n .hue-picker .handle {\n top: -0.5rem;\n }\n\n .tools {\n margin-bottom: 0.625rem;\n display: flex;\n\n .input-group {\n margin-bottom: 0;\n\n &[dir=\"rtl\"] {\n label {\n transform: scale(0.75) translate(1.25rem, -2.25rem);\n }\n }\n }\n\n .input-group:first-child {\n margin-right: 0.5rem;\n }\n\n .input-group:last-child {\n margin-left: 0.5rem;\n }\n }\n\n .predefined-colors {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n\n div {\n cursor: pointer;\n box-shadow: inset 0 0 0 0 var(--color-background);\n transition: box-shadow 300ms ease;\n\n &.active {\n border: 0.125rem solid var(--color-primary);\n box-shadow: inset 0 0 0 0.3125rem var(--color-background);\n }\n\n // A hack to make a square\n &:before {\n display: block;\n content: \"\";\n width: 100%;\n padding-top: 100%;\n pointer-events: none;\n }\n }\n }\n}\n","#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n","@import \"../../../styles/mixins\";\n\n#Settings {\n height: 100%;\n\n > div {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .left-header {\n padding-right: 0.8125rem;\n }\n}\n\n.settings-main-header {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n align-items: center;\n}\n\n.settings-more-menu {\n .bubble {\n width: auto;\n\n .MenuItem button {\n padding-left: 1rem !important;\n padding-right: 2rem !important;\n }\n }\n}\n\n.settings-content {\n background: var(--color-background);\n height: calc(100% - var(--header-height));\n\n overflow-y: auto;\n @include overflow-y-overlay();\n\n &.infinite-scroll {\n display: flex;\n flex-direction: column;\n\n & > .custom-scroll {\n flex: 1 1 auto;\n height: auto;\n }\n }\n\n #monkey {\n margin-top: 0.5rem;\n margin-bottom: 1rem;\n }\n\n .AnimatedEmoji {\n margin-top: 0.5rem;\n margin-bottom: 1.5rem;\n }\n}\n\n.settings-content-header {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 0 1.5rem 1rem;\n text-align: center;\n\n .input-group {\n width: 100%;\n }\n}\n\n.settings-content-icon {\n width: 5rem;\n height: 5rem;\n margin-bottom: 2.5rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n}\n\n.settings-main-menu {\n padding: 0 0.5rem 0.75rem;\n\n > .ChatExtra {\n padding: 0 0.5rem 0.3125rem;\n margin: 0 -0.5rem 0.625rem;\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n border-bottom: 0.625rem solid var(--color-background-secondary);\n\n .ListItem.narrow {\n margin-bottom: 0.25rem;\n }\n }\n}\n\n.settings-item {\n border-top: 1px solid var(--color-borders);\n padding: 1.5rem 1.5rem 1rem;\n\n &.no-border {\n border-top: none;\n }\n\n &-header {\n font-size: 1rem;\n color: var(--color-text-secondary);\n margin-bottom: 2rem;\n position: relative;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n &-slider {\n margin-top: 2rem;\n }\n\n &-description {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin-top: -0.5rem;\n margin-bottom: 1.5rem;\n\n .settings-content.two-fa & {\n font-size: 1rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n\n &-description-larger {\n font-size: 1rem;\n line-height: 1.3125rem;\n color: var(--color-text-secondary);\n margin-top: 2rem;\n margin-bottom: 0.75rem;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n .ListItem {\n margin: 0 -1rem 1rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-menu-item {\n white-space: initial;\n\n &.full-size {\n width: 100%;\n }\n\n .date {\n float: right;\n font-size: 0.75rem;\n margin-left: 1rem;\n color: var(--color-text-secondary);\n }\n\n .title,\n .subtitle {\n display: block;\n text-align: left;\n }\n\n .title {\n line-height: 1.25rem;\n }\n\n .subtitle {\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: var(--color-text-secondary);\n\n & + .subtitle {\n margin-top: -0.25rem;\n }\n\n &.black {\n color: var(--color-text);\n }\n\n &.tight {\n line-height: 1.3125rem;\n margin-bottom: 0.1875rem;\n }\n }\n }\n\n &.destructive {\n .ListItem-button {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n }\n\n &.blocked-list-item {\n margin-bottom: 0.5rem;\n\n .ListItem-button {\n align-items: center;\n text-align: left;\n padding: 0.5rem;\n }\n\n .Avatar {\n width: 3rem;\n height: 3rem;\n margin-right: 1rem;\n }\n\n .contact-name {\n font-size: 1rem;\n line-height: 1rem;\n margin-bottom: 0.25rem;\n font-weight: 500;\n }\n\n .contact-phone {\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n &[dir=\"rtl\"] {\n .multiline-menu-item {\n .title,\n .subtitle {\n text-align: right;\n }\n\n .date {\n float: left;\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n }\n\n .RangeSlider {\n margin-bottom: 1.0625rem;\n }\n\n .Checkbox,\n .radio-group {\n margin: 0 -1rem 0.5rem;\n }\n\n .radio-group {\n .Radio:last-child {\n margin-bottom: 0;\n }\n }\n\n .Radio + .Radio,\n .Checkbox + .Checkbox {\n margin-top: 2rem;\n }\n}\n\n.settings-fab-wrapper {\n height: calc(100% - var(--header-height));\n position: relative;\n overflow: hidden;\n\n .settings-content {\n height: 100%;\n }\n\n .FloatingActionButton {\n right: 1.5rem;\n }\n}\n\n.settings-edit-profile {\n padding: 0 1.5rem;\n}\n\n.username-link {\n color: var(--color-links);\n}\n\n.settings-quick-reaction {\n .Radio-main .label {\n display: flex;\n }\n\n .ReactionStaticEmoji {\n margin-inline-end: 1rem;\n width: 1.5rem;\n }\n}\n\n.SettingsDefaultReaction {\n .ReactionStaticEmoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-end: 2rem;\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".NewChat {\n height: 100%;\n overflow: hidden;\n position: relative;\n\n &-inner {\n height: calc(100% - var(--header-height));\n overflow: hidden;\n\n &.step-2 {\n padding: 0 1.25rem;\n display: flex;\n flex-direction: column;\n\n .note, .error {\n font-size: 0.875rem;\n line-height: 1.25rem;\n margin: 1.5rem 0.25rem;\n }\n\n .error {\n color: var(--color-error);\n }\n\n .note {\n margin-top: -0.5625rem;\n color: var(--color-text-secondary);\n }\n\n .chat-members-heading {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1rem 0.25rem;\n }\n\n .chat-members-list {\n margin: 0 -1.25rem;\n padding: 0 1rem 1rem;\n\n overflow-x: hidden;\n flex-grow: 1;\n }\n }\n }\n}\n",".ArchivedChats {\n height: 100%;\n overflow: hidden;\n\n .chat-list {\n height: calc(100% - var(--header-height));\n }\n}\n",".ReactionSelectorReaction {\n margin-left: 0.5rem;\n position: relative;\n min-width: 2rem;\n min-height: 2rem;\n\n &:first-child {\n margin-left: 0;\n }\n\n &__static {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n background: url('../../../assets/reaction-thumbs.png') no-repeat;\n background-size: auto 100%;\n }\n\n .AnimatedSticker {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n",".ReactionSelector {\n position: absolute;\n height: 3rem;\n background: var(--color-background);\n min-width: 3rem;\n max-width: calc(100% + 5rem);\n z-index: 100;\n border-radius: 3rem;\n filter: drop-shadow(0 0.25rem 0.125rem var(--color-default-shadow));\n right: -3rem;\n top: -3.5rem;\n\n &__bubble-big {\n position: absolute;\n display: block;\n content: \"\";\n right: 1.5rem;\n bottom: -0.5rem;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n background: var(--color-background);\n z-index: -1;\n }\n\n &__bubble-small {\n position: absolute;\n display: block;\n content: \"\";\n right: 1.25rem;\n bottom: -1.25rem;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--color-background);\n }\n\n body.is-safari & {\n filter: none;\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n body.is-safari &__bubble-small,\n body.is-safari &__bubble-big {\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n &__items-wrapper {\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: 3rem;\n }\n\n &__items {\n padding: 0 1rem;\n width: 100%;\n height: 100%;\n overflow-x: auto;\n overflow: overlay;\n overflow-y: hidden;\n display: flex;\n cursor: pointer;\n align-items: center;\n border-radius: 3rem;\n }\n}\n",".MessageContextMenu {\n position: absolute;\n font-size: 1rem;\n\n .scrollable-content {\n overflow: auto;\n overflow: overlay;\n padding: 0.5rem 0;\n overscroll-behavior: contain;\n }\n\n .bubble {\n transition: opacity 0.15s cubic-bezier(0.2, 0, 0.2, 1), transform 0.15s cubic-bezier(0.2, 0, 0.2, 1) !important;\n transform: scale(0.7);\n overflow: initial;\n padding: 0;\n }\n\n &.with-reactions .bubble {\n margin-top: 3.5rem;\n }\n\n .backdrop {\n touch-action: none;\n }\n\n .avatars {\n display: flex;\n align-self: center;\n margin-left: auto;\n padding-left: 1rem;\n\n .Avatar {\n border: 0.0625rem solid var(--color-background);\n margin-right: 0;\n box-sizing: content-box;\n\n &:not(:first-child) {\n margin-left: -0.1875rem;\n }\n }\n }\n}\n",".StickerSetModal {\n .modal-dialog {\n width: 26.25rem;\n max-width: 100%;\n }\n\n @media (max-width: 600px) {\n .modal-dialog {\n width: 18.875rem;\n }\n }\n\n .modal-header {\n padding: 0.5rem 1rem;\n }\n\n .modal-content {\n text-align: center;\n padding: 0;\n }\n\n .stickers {\n position: relative;\n width: 100%;\n height: 19rem;\n max-height: 50vh;\n overflow-y: auto;\n padding: 0 0.25rem;\n text-align: left;\n }\n\n .button-wrapper {\n padding: 0.5rem 0;\n border-top: 1px solid var(--color-borders);\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n button {\n display: inline-block;\n }\n }\n\n .Loading {\n width: 100%;\n height: 22.8125rem;\n max-height: calc(50vh + 3.8125rem);\n }\n}\n\n",".HeaderMenuContainer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n z-index: var(--z-header-menu);\n\n .Menu {\n position: absolute;\n font-size: 1rem;\n\n .backdrop {\n z-index: var(--z-header-menu-backdrop);\n }\n\n .bubble {\n z-index: var(--z-header-menu);\n --offset-y: calc(100% + 1rem);\n }\n }\n}\n","#MobileSearch > .header {\n position: absolute;\n top: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: max(0.25rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n\n > .SearchInput {\n margin-left: 0.25rem;\n flex: 1;\n }\n}\n\n#MobileSearch > .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: max(1rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n\n body:not(.keyboard-visible) & {\n padding-bottom: env(safe-area-inset-bottom);\n height: calc(3.5rem + env(safe-area-inset-bottom));\n }\n\n > .counter {\n flex: 1;\n color: var(--color-text-secondary);\n }\n}\n\n#MobileSearch:not(.active) {\n .header, .footer {\n // `display: none` will prevent synchronous focus on iOS\n transform: translateX(-999rem);\n }\n}\n",".MentionTooltip {\n width: calc(100% - 4rem);\n max-width: 20rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .info {\n display: flex;\n }\n\n .title {\n margin-inline-end: 0.625rem;\n max-width: 70%;\n }\n\n .handle {\n font-size: 1rem;\n }\n\n &[dir=\"rtl\"] {\n .status {\n width: auto;\n }\n }\n }\n\n .ChatInfo {\n .title h3 {\n line-height: 1.25;\n }\n\n .Avatar {\n margin-right: 0.7em;\n }\n\n .handle {\n &::before {\n content: \"@\";\n }\n }\n\n .user-status {\n display: none !important;\n }\n }\n}\n",".AttachmentModal {\n --border-radius-default: 0.625rem;\n\n .modal-dialog {\n max-width: 26.25rem;\n @media (max-width: 600px) {\n max-height: 100%;\n padding-bottom: 1.5rem;\n }\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem 1.875rem;\n max-height: calc(100vh - 3.25rem);\n @media (max-width: 600px) {\n padding-bottom: 0.25rem;\n }\n }\n\n .media-wrapper {\n max-height: 26rem;\n overflow: auto;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 1.5rem;\n\n video,\n img {\n flex: 1;\n width: calc(50% - 0.15rem);\n height: 12rem;\n margin-bottom: 0.3125rem;\n border-radius: var(--border-radius-default);\n object-fit: cover;\n\n &:only-child {\n height: auto;\n max-height: 25rem;\n margin-bottom: 0;\n }\n\n &:nth-child(even) {\n margin-left: 0.3125rem;\n }\n }\n }\n\n .document-wrapper {\n max-height: 25rem;\n overflow: auto;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n margin: 0.75rem 0 1.75rem;\n\n .File:not(:last-child) {\n margin-bottom: 1.5rem;\n }\n\n .file-icon {\n cursor: default !important;\n }\n }\n\n .attachment-caption-wrapper {\n position: relative;\n\n .form-control {\n background: var(--color-background);\n }\n\n .MentionTooltip {\n right: 0 !important;\n z-index: 0;\n }\n }\n\n .drop-target {\n position: relative;\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: var(--border-radius-default);\n pointer-events: none;\n\n opacity: 0;\n transition: 250ms opacity;\n z-index: 1;\n }\n\n &::before {\n background-image: var(--drag-target-border-hovered);\n background-color: var(--color-background);\n }\n\n &::after {\n content: attr(data-attach-description);\n display: flex;\n justify-content: center;\n align-items: center;\n color: var(--color-primary);\n }\n }\n\n &.hovered {\n .drop-target::before {\n opacity: 0.95;\n }\n\n .drop-target::after {\n opacity: 1;\n }\n\n .attachment-caption-wrapper,\n .document-wrapper,\n .media-wrapper {\n pointer-events: none;\n }\n\n .document-wrapper,\n .media-wrapper {\n border-radius: var(--border-radius-default);\n }\n }\n}\n",".PollModal {\n .modal-dialog {\n max-width: 26.25rem;\n max-height: calc(100vh - 5rem);\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem 1.875rem;\n min-height: 4.875rem;\n }\n\n .modal-header-condensed {\n margin-bottom: 1rem;\n }\n\n .options-header {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1.5rem 0.25rem;\n }\n\n .options-list {\n margin: 1rem -0.75rem -0.5rem;\n padding: 0 0.75rem;\n border-top: 1px solid var(--color-chat-hover);\n max-height: 20rem;\n overflow: auto;\n\n &.overflown {\n padding: 0 0.4375rem 0.5rem 0.75rem;\n }\n\n @media (max-width: 600px) {\n overflow: hidden;\n max-height: none;\n\n &,\n &.overflown {\n padding: 0 0.75rem;\n }\n }\n }\n\n .option-wrapper {\n position: relative;\n\n .form-control {\n padding-right: 3rem;\n }\n\n .option-remove-button {\n position: absolute;\n top: 0.3125rem;\n right: 0.3125rem;\n }\n }\n\n .quiz-mode {\n margin-top: 1.5rem;\n\n .options-header {\n margin-bottom: 0.5rem;\n }\n\n .note {\n margin-top: 0.5rem;\n }\n }\n\n .note {\n font-size: smaller;\n color: var(--color-text-secondary);\n }\n\n .error {\n font-size: smaller;\n color: var(--color-error);\n margin: -1rem 0 1rem 0.25rem;\n }\n\n .input-group:last-child {\n margin-bottom: 0.5rem;\n }\n}\n",".EmojiButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n margin: 0.125rem;\n border-radius: var(--border-radius-messages-small);\n cursor: pointer;\n font-size: 1.75rem;\n line-height: 2.5rem;\n background-color: transparent;\n transition: background-color 0.15s ease;\n\n .mac-os-fix & {\n line-height: inherit;\n }\n\n &.focus,\n &:hover {\n background-color: var(--color-background-selected);\n }\n\n & > img {\n width: 2rem;\n height: 2rem;\n }\n}\n",".EmojiPicker {\n height: 100%;\n\n &-main {\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n\n .symbol-set-container {\n display: flex;\n flex-wrap: wrap;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: space-around;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n @media (max-width: 600px) {\n overflow-x: auto;\n overflow-y: hidden;\n display: block;\n white-space: nowrap;\n padding: 0.4375rem 0;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n .symbol-set-button {\n display: inline-flex;\n vertical-align: middle;\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 1px;\n height: 1rem;\n }\n }\n }\n}\n",".StickerPicker {\n height: 100%;\n\n &-main {\n position: relative;\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n padding: 0.125rem 0;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 1px;\n height: 1rem;\n }\n\n\n .sticker-set-button {\n display: inline-flex;\n vertical-align: middle;\n align-items: center;\n justify-content: center;\n\n &.StickerButton {\n background-size: 2rem;\n\n video, img, .AnimatedSticker {\n top: 0.375rem;\n left: 0.375rem;\n width: 2rem;\n height: 2rem;\n }\n }\n\n .sticker-set-cover {\n width: 2rem;\n height: 2rem;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n video, img, .AnimatedSticker {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n }\n }\n }\n\n .symbol-set-container {\n width: 25rem;\n line-height: 0;\n\n @media (max-width: 600px) {\n width: 100%;\n }\n }\n\n .sticker-set-button {\n width: 2.75rem !important;\n height: 2.75rem;\n margin: 0 0.25rem;\n border-radius: var(--border-radius-messages-small);\n }\n}\n",".GifButton {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 6.25rem;\n background-color: transparent;\n cursor: pointer;\n overflow: hidden;\n position: relative;\n\n &:last-child {\n margin-bottom: 1rem;\n }\n\n &.vertical {\n grid-column-end: span 1;\n }\n\n &.horizontal {\n grid-column-end: span 2;\n }\n\n .thumbnail {\n width: 100%;\n height: 100%;\n background: transparent no-repeat center;\n background-size: cover !important;\n }\n\n .preview, video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .Spinner {\n position: absolute;\n pointer-events: none;\n }\n}\n",".GifPicker {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n height: 100%;\n overflow-y: auto;\n padding: 0.25rem;\n\n @supports (overflow: overlay) {\n overflow-y: overlay;\n }\n\n .Loading, .picker-disabled {\n grid-column: 1 / -1;\n height: var(--menu-height);\n }\n}\n","@import \"../../../styles/mixins\";\n\n.SymbolMenu {\n &.mobile-menu {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--color-background);\n z-index: 1;\n\n transition: transform var(--layer-transition);\n padding-right: env(safe-area-inset-right);\n padding-bottom: env(safe-area-inset-bottom);\n padding-left: env(safe-area-inset-left);\n transform: translate3d(\n 0,\n calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height) + env(safe-area-inset-bottom)),\n 0\n );\n\n &.open {\n transform: translate3d(0, 0, 0);\n\n body.is-media-viewer-open & {\n transform: translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0);\n }\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n &:not(.middle-column-open) {\n transform: translate3d(100vw, 0, 0) !important;\n }\n }\n\n &-main {\n height: var(--symbol-menu-height);\n max-height: calc(100vh - var(--symbol-menu-footer-height) - env(safe-area-inset-bottom));\n }\n\n &-footer {\n height: var(--symbol-menu-footer-height);\n border-top: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 2px var(--color-default-shadow);\n position: relative;\n\n .Button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n\n &.activated {\n pointer-events: none;\n }\n\n &.symbol-tab-button {\n margin: 0 0.75rem;\n }\n\n &.symbol-search-button {\n position: absolute;\n left: 0.25rem;\n }\n\n &.symbol-delete-button {\n position: absolute;\n right: 0.25rem;\n }\n }\n }\n\n .Transition.slide {\n height: 100%;\n\n .Loading {\n height: var(--symbol-menu-height);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n\n .Button.bot-commands ~ &,\n .Button.send-as-button ~ & {\n .is-pointer-env & > .backdrop {\n left: 3rem;\n width: 3.25rem;\n }\n }\n\n .bubble {\n width: calc(var(--symbol-menu-width) + 0.25rem); // Reserve width for scrollbar\n padding: 0;\n overflow: hidden;\n\n @supports (overflow: overlay) {\n width: var(--symbol-menu-width);\n }\n }\n\n .picker-disabled {\n height: var(--symbol-menu-height);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .symbol-close-button {\n display: none;\n position: absolute;\n right: max(calc(0.25rem), env(safe-area-inset-right));\n top: max(calc(0.25rem), env(safe-area-inset-top));\n }\n\n @media (orientation: landscape) {\n .symbol-close-button {\n display: block;\n }\n }\n}\n\n.symbol-set {\n margin-bottom: 1rem;\n\n &-name {\n font-size: 1rem;\n line-height: 1.6875rem;\n font-weight: 500;\n margin: 0;\n padding-left: 0.5rem;\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n &-container {\n text-align: initial;\n }\n\n &-button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n }\n\n @include while-transition() {\n overflow: hidden;\n }\n\n .symbol-set-container {\n &:not(.shown) {\n display: block;\n }\n\n &.closing {\n transition: none;\n }\n }\n}\n",".AttachMenu {\n position: relative;\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n}\n",".BotCommand {\n margin: 0 !important;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .multiline-item {\n padding: 0 1rem;\n\n .subtitle {\n padding-top: 0.25rem;\n line-height: 1.3125;\n }\n }\n\n &.with-avatar {\n .multiline-item {\n padding: 0;\n display: flex;\n }\n\n .content-inner {\n flex: 1;\n }\n }\n}\n",".BotCommandTooltip {\n width: calc(100% - 4rem);\n max-width: 26rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n}\n",".BotCommandMenu {\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n",".StickerTooltip {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(5rem, 1fr));\n grid-auto-rows: auto;\n place-items: center;\n\n &.hidden {\n display: none;\n }\n}\n",".CustomSendMenu {\n position: relative;\n bottom: 3.5rem;\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n\n .bubble {\n width: 16rem;\n }\n}\n",".EmojiTooltip {\n display: flex;\n padding-left: 0.25rem;\n\n overflow-x: auto;\n @supports (overflow-x: overlay) {\n overflow-x: overlay;\n }\n overflow-y: hidden;\n\n .EmojiButton {\n flex: 0 0 2.5rem;\n }\n}\n",".BaseResult {\n &.chat-item-clickable > .ListItem-button {\n padding-left: 1.25rem !important;\n padding-right: 1.25rem !important;\n\n .title {\n display: block;\n text-overflow: ellipsis;\n }\n }\n\n .thumb {\n background-color: var(--color-background-secondary);\n flex: 0 0 3rem;\n width: 3rem;\n height: 3rem;\n line-height: 3rem;\n border-radius: var(--border-radius-default-tiny);\n display: inline-flex;\n align-content: center;\n justify-content: center;\n margin-inline-end: 0.5rem;\n overflow: hidden;\n font-size: 1.5rem;\n\n img:not(.emoji) {\n width: 100%;\n object-fit: cover;\n }\n\n img.emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin: 0.75rem 0 0;\n }\n }\n\n .content-inner {\n min-width: 0;\n }\n\n .title {\n font-weight: 500;\n text-align: left;\n unicode-bidi: plaintext;\n }\n\n .description {\n white-space: normal;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n unicode-bidi: plaintext;\n }\n &[dir=\"rtl\"] .title,\n &[dir=\"rtl\"] .description {\n text-align: right;\n }\n}\n",".MediaResult {\n height: 0;\n padding-bottom: 100%;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n\n img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n",".InlineBotTooltip {\n .switch-pm .title {\n margin: 0 auto;\n font-weight: 500;\n }\n\n --border-radius-default: 0;\n\n &.gallery {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-gap: 1px;\n padding: 0;\n\n @media (max-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n .switch-pm {\n grid-column: 1 / -1;\n .ListItem-button {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n .GifButton {\n grid-column-end: initial;\n }\n\n .StickerButton {\n width: initial;\n height: 0;\n margin: 0;\n padding-bottom: 100%;\n border-radius: 0;\n\n .AnimatedSticker,\n img,\n canvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important;\n\n @media (min-width: 600px) {\n top: 0.25rem;\n left: 0.25rem;\n width: calc(100% - 0.5rem) !important;\n height: calc(100% - 0.5rem) !important;\n }\n }\n }\n }\n}\n",".SendAsMenu {\n .send-as-title {\n font-weight: 500;\n line-height: 1.25rem;\n word-break: break-word;\n margin-inline-start: 1rem;\n margin-block: 0.5rem;\n }\n\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n z-index: 2;\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n\n.SendAsItem {\n margin: 0 !important;\n $border-size: 2px;\n\n .Avatar.selected {\n margin-right: 0.75rem;\n position: relative;\n width: calc(2.125rem - #{$border-size * 2});\n height: calc(2.125rem - #{$border-size * 2});\n\n &::before {\n display: block;\n content: \"\";\n position: absolute;\n top: #{-$border-size * 2};\n left: #{-$border-size * 2};\n border: $border-size solid var(--color-primary);\n width: calc(100% + #{$border-size * 4});\n height: calc(100% + #{$border-size * 4});\n border-radius: 50%;\n }\n }\n\n .ListItem-button {\n padding: 0.5625rem 1rem !important;\n border-radius: 0;\n align-items: center;\n }\n\n .info {\n margin-inline-start: 0.5rem;\n }\n\n .subtitle {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n line-height: 1.3125;\n }\n}\n",".RightSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n text-align: initial;\n }\n}\n",".StickerSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n }\n\n .sticker-set {\n margin-bottom: 1rem;\n\n &-header {\n display: flex;\n justify-content: space-between;\n padding: 0.5rem;\n\n .title-wrapper {\n overflow: hidden;\n }\n\n .title {\n font-size: 1rem;\n line-height: 1.6875rem;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .count {\n color: var(--color-text-secondary);\n margin: 0;\n }\n\n .Button {\n flex-shrink: 0;\n margin-left: 1rem;\n\n &.is-added {\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n\n &:hover,\n &:active {\n background: var(--color-item-active) !important;\n }\n }\n }\n }\n\n &-main {\n display: flex;\n flex-wrap: nowrap;\n overflow: hidden;\n }\n\n &[dir=\"rtl\"] {\n .title-wrapper {\n text-align: right;\n }\n\n .Button {\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n\n .StickerButton {\n margin: 0.125rem;\n }\n}\n",".GifSearch {\n height: 100%;\n padding: 0.25rem;\n\n .gif-container {\n height: 100%;\n overflow: auto;\n\n &.grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n }\n }\n\n .helper-text {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n",".PollAnswerResults {\n border-bottom: 1px solid var(--color-borders);\n padding: 0 0.5rem 0.625rem;\n display: flex;\n flex-direction: column-reverse;\n\n .answer-head {\n display: flex;\n align-items: center;\n font-size: 0.9375rem;\n line-height: 1.3125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n padding: 1rem 0.75rem 0.5rem 1rem;\n position: sticky;\n top: 0;\n background: var(--color-background);\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem 0.5rem 0.5rem;\n }\n }\n\n .answer-percent {\n margin-left: auto;\n\n &[dir=\"auto\"] {\n margin-left: 0;\n margin-right: auto;\n }\n }\n\n .poll-voters {\n padding: 0 0.75rem;\n position: relative;\n min-height: 3rem;\n\n @media (max-width: 600px) {\n padding: 0 0.25rem;\n }\n\n .Spinner {\n --spinner-size: 1.25rem;\n }\n }\n\n .chat-item-clickable {\n .ChatInfo .Avatar.size-tiny {\n margin-right: 1.75rem;\n }\n\n &[dir=\"rtl\"] {\n .ChatInfo .Avatar.size-tiny {\n margin-left: 1.75rem;\n margin-right: 0;\n }\n }\n }\n\n .ShowMoreButton {\n margin: 0.25rem 0 0 -0.5rem;\n width: calc(100% + 1rem);\n\n &[dir=\"rtl\"] {\n .icon-down {\n margin-left: 2rem;\n margin-right: 0;\n }\n }\n }\n\n .icon-down {\n vertical-align: middle;\n margin-right: 2rem;\n font-size: 1.5rem;\n }\n}\n",".PollResults {\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n\n > .Loading {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: rgba(white, 0.75);\n }\n\n .poll-question {\n padding: 0.75rem 1.5rem;\n flex-shrink: 0;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n padding: 0 1rem;\n }\n }\n\n .poll-results-list {\n border-top: 1px solid var(--color-borders);\n flex-grow: 1;\n overflow: auto;\n }\n}\n",".Management {\n position: relative;\n height: 100%;\n\n & > .custom-scroll {\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n }\n\n .section {\n padding: 1rem 1.5rem;\n border-top: 1px solid var(--color-borders);\n\n &.wide {\n padding: 1.5rem;\n }\n\n &:first-of-type {\n border-top: none;\n padding-top: 1rem;\n }\n\n &.no-border {\n border-top: none;\n }\n\n > .ChatInfo {\n margin: 0 0 2rem !important;\n\n .title h3 {\n margin-bottom: 0;\n }\n }\n\n .section-icon {\n width: 8.75rem;\n height: 8.75rem;\n margin: 0 auto 2rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n }\n\n .ListItem {\n margin: 0 -0.75rem;\n\n .Reaction {\n display: flex;\n align-items: center;\n }\n\n .ReactionStaticEmoji {\n width: 1.5rem;\n margin-right: 1rem;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-item .subtitle {\n line-height: 1.25rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:not(.picker-list-item) .Checkbox {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n\n &.narrow {\n .Checkbox {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n }\n\n &.exceptions-member {\n .ChatInfo .status {\n white-space: pre-wrap;\n }\n }\n }\n\n .section-heading {\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-help {\n color: var(--color-text-secondary);\n line-height: 1.375rem;\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-info {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n textarea.form-control {\n height: auto;\n }\n\n .group-link {\n color: var(--color-text);\n }\n\n .radio-group {\n margin-top: 2rem;\n\n .Radio {\n padding-left: 3.5rem;\n margin-bottom: 2rem;\n\n &:last-child {\n margin-bottom: 0.625rem;\n }\n }\n\n .Radio-main {\n &::before {\n left: 0.125rem;\n top: 0.25rem;\n transform: none;\n }\n\n &::after {\n left: 0.4375rem;\n top: 0.5625rem;\n transform: none;\n }\n }\n }\n\n &__filter {\n padding: 0 1rem 0.25rem 0.75rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n flex-flow: row wrap;\n flex-shrink: 0;\n\n overflow-y: auto;\n max-height: 20rem;\n\n .input-group {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n }\n\n .form-control {\n height: 2rem;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n }\n\n .Spinner {\n margin: 2rem auto;\n }\n}\n\n.ManageGroupMembers {\n padding: 0.5rem 1rem;\n}\n\n.ManageInvites {\n .primary-link {\n position: relative;\n }\n\n .primary-link-input {\n cursor: pointer;\n margin-bottom: 1rem;\n padding-right: 3rem;\n }\n\n .primary-link-more-menu {\n position: absolute;\n right: 0.5rem;\n top: 50%;\n transform: translate(0, -50%);\n z-index: 1;\n }\n\n .create-link {\n margin-bottom: 0.5rem;\n }\n\n .invite-title {\n white-space: nowrap;\n }\n}\n\n.ManageInvite {\n .link-name {\n margin-bottom: 1rem;\n }\n\n .expire-limit {\n margin-top: 1rem;\n }\n\n .usage-limit {\n margin-top: 1rem;\n\n -moz-appearance: textfield;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n }\n\n .custom-scroll {\n padding-bottom: 4rem;\n }\n}\n\n.ManageInviteInfo {\n .copy-link {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .link-title {\n text-align: center;\n }\n}\n\n.ManageJoinRequests {\n .bulk-actions {\n display: flex;\n justify-content: space-around;\n }\n\n .bulk-action-button {\n width: auto;\n height: auto;\n }\n}\n\n.ManageInvite,\n.ManageInvites {\n .hint {\n font-size: 0.875rem;\n margin-bottom: 0;\n margin-top: 0.5rem;\n }\n}\n",".JoinRequest {\n display: flex;\n flex-direction: column;\n padding: 1rem 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--color-borders);\n }\n\n &__top {\n display: flex;\n cursor: pointer;\n padding: 0.5rem;\n border-radius: 0.5rem;\n\n &:hover {\n background-color: var(--color-chat-hover);\n }\n }\n\n &__user {\n display: flex;\n flex-grow: 1;\n min-width: 0;\n overflow: hidden;\n }\n\n &__user-info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n margin-left: 1rem;\n }\n\n &__user-subtitle {\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__user-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__date {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n margin-left: 1rem;\n white-space: nowrap;\n }\n\n &__buttons {\n display: flex;\n justify-content: space-evenly;\n margin-top: 1rem;\n gap: 0.5rem;\n }\n\n &__button {\n width: auto;\n height: auto;\n }\n}\n",".ShippingInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.25rem;\n }\n}\n",".Shipping {\n padding: 0.5rem 1rem;\n\n form {\n p {\n color: var(--color-text-secondary);\n font-weight: 500;\n margin: 0.5rem 0 2rem;\n }\n\n .Radio {\n margin-bottom: 2rem;\n }\n }\n}\n",".Checkout {\n padding: 0.5rem 0;\n\n .description {\n display: flex;\n flex-direction: row;\n margin: 0 1rem;\n\n img {\n height: 6rem;\n margin: 0.5rem;\n }\n\n .text {\n h5 {\n margin-top: 0.5rem;\n font-size: 1.125rem;\n }\n\n p {\n font-size: 0.8125rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n }\n\n .price-info {\n margin: 1rem;\n\n .price-info-item {\n margin: 1rem 0.5rem;\n display: flex;\n flex-direction: row;\n align-content: space-between;\n color: var(--color-text-secondary);\n font-weight: 500;\n\n &-main {\n color: var(--color-text);\n }\n\n .title {\n display: flex;\n flex: 1 auto;\n }\n }\n }\n\n .invoice-info {\n border-top: 1px var(--color-borders) solid;\n padding: 1rem;\n\n .checkout-info-item {\n display: flex;\n padding: 0.75rem 0.5rem 1rem;\n text-align: left;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n margin-right: 2rem;\n width: 1.5rem;\n }\n\n i.stripe-provider {\n background: url(\"../../assets/stripe-logo.png\") no-repeat center;\n background-size: 2rem;\n border-radius: 1rem;\n height: 1.5rem;\n }\n\n .info {\n .title {\n font-size: 1rem;\n line-height: 1.4375rem;\n margin-bottom: 0;\n font-weight: 400;\n word-break: break-word;\n color: var(--color-text);\n text-transform: capitalize;\n }\n\n .data {\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n }\n }\n }\n }\n}\n",".CardInput {\n position: relative;\n\n .input-group.has-left-addon .form-control{\n padding-left: 4rem;\n }\n\n .left-addon {\n position: absolute;\n top: 0.8125rem;\n left: 1rem;\n z-index: 8;\n\n img {\n max-width: 2rem;\n }\n }\n}\n",".PaymentInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.25rem;\n }\n\n .inline-inputs {\n display: flex;\n justify-content: space-between;\n\n .input-group {\n flex: 1 10rem;\n max-width: 45%;\n display: flex;\n }\n }\n}\n",".PaymentModal {\n .modal-backdrop {\n pointer-events: none;\n }\n\n .header {\n position: relative;\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n width: 100%;\n padding: 0.25rem 1rem;\n display: flex;\n align-items: center;\n flex-direction: row;\n background: var(--color-background);\n border-bottom: 1px var(--color-borders) solid;\n\n h3 {\n margin-bottom: 0;\n margin-left: 1.5rem;\n unicode-bidi: plaintext;\n text-align: initial;\n }\n }\n\n .Transition {\n height: 25rem;\n }\n\n .empty-content {\n height: 25rem;\n max-height: 90%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .receipt-content {\n height: 25rem;\n overflow-y: auto;\n }\n\n .content {\n overflow: auto;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .footer {\n position: relative;\n border-bottom-left-radius: 10px;\n border-bottom-right-radius: 10px;\n width: 100%;\n padding: 0.75rem 1rem;\n background: var(--color-background);\n border-top: 1px var(--color-borders) solid;\n\n button {\n text-transform: none;\n font-weight: 500;\n }\n }\n\n .modal-dialog {\n width: 25rem;\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n }\n}\n\n@media screen and (max-device-width: 640px) and (max-height: 640px) and (orientation: landscape) {\n .PaymentModal {\n .modal-dialog {\n max-height: 100%;\n }\n\n .Transition {\n height: 10rem;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/126.56949b6fb714b8786c3b.js b/dist/126.56949b6fb714b8786c3b.js new file mode 100644 index 000000000..05bb17b7b --- /dev/null +++ b/dist/126.56949b6fb714b8786c3b.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[126],{9126:(e,t,n)=>{n.r(t),n.d(t,{ArchivedChats:()=>ts,AttachMenu:()=>Er,AttachmentModal:()=>zs,BotCommandMenu:()=>br,BotCommandTooltip:()=>fr,CalendarModal:()=>je,ChatFolderModal:()=>as,ContactList:()=>Va,ContextMenuContainer:()=>Is,CustomSendMenu:()=>yr,DeleteMessageModal:()=>We,Dialogs:()=>Oe,DropArea:()=>Nr.Z,EmojiInteractionAnimation:()=>ut,EmojiTooltip:()=>wr,ForwardPicker:()=>$e,GifSearch:()=>Xr,HeaderMenuContainer:()=>ks,HistoryCalendar:()=>Ke,InlineBotTooltip:()=>Br,LeftSearch:()=>tn,Management:()=>bl,MediaViewer:()=>be,MentionTooltip:()=>Js,MessageSelectToolbar:()=>rt,MobileSearch:()=>Ms,NewChat:()=>Qa,NewChatStep1:()=>ja,NewChatStep2:()=>Ka,Notifications:()=>Ge,PaymentModal:()=>Vl,PinMessageModal:()=>Qe,PollModal:()=>Ys,PollResults:()=>_r,ReactorListModal:()=>ct,ReceiptModal:()=>Kl,RightSearch:()=>Dr,SafeLinkModal:()=>ze,SeenByModal:()=>lt,SendAsMenu:()=>$r,Settings:()=>Ya,StickerSearch:()=>Jr,StickerSetModal:()=>ys,StickerTooltip:()=>Ir,SymbolMenu:()=>pr,TextFormatter:()=>kr.Z,UnpinAllMessagesModal:()=>et});var a=n(4050),s=n(5116),r=n(6137),l=n(1713),o=n(3716),i=n(7361),c=n(2937),d=n(5326),m=n(8674),u=n(6590),h=n(9107),Z=n(6202),v=n(2566),P=n(7204),g=n(8415),p=n(9066),E=n(396),C=n(3989),f=n(1174),b=n(3858),I=n(4399),y=n(996),N=n(3227);function k(e,t){const n=document.createElement("div");n.classList.add("ghost");const a=new Image;if(a.draggable=!1,a.oncontextmenu=N.Z,"string"==typeof e?a.src=e:e instanceof HTMLVideoElement?a.src=e.poster:a.src=e.src,n.appendChild(a),t===l.bZ.ProfileAvatar||t===l.bZ.SettingsAvatar){n.classList.add("ProfileInfo"),t===l.bZ.SettingsAvatar&&n.classList.add("self");const e=document.querySelector(t===l.bZ.ProfileAvatar?"#RightColumn .ProfileInfo .info":"#Settings .ProfileInfo .info");e&&n.appendChild(e.cloneNode(!0))}return n}function S(e,t){const n=document.querySelector(".Transition__slide--active > .MessageList");let a=e.offsetTop+t.closest(".content-inner, .WebPage").offsetTop;return e.id.includes("album-media-")&&(a+=e.parentElement.offsetTop+e.closest(".Message").offsetTop),a>n.scrollTop&&a+t.offsetHeight .MessageList #album-media-${t.id}`,a=".full-media";break;case l.bZ.SharedMedia:n=`#shared-media${t.id}`,a="img";break;case l.bZ.SearchResult:n=`#search-media${t.id}`,a="img";break;case l.bZ.MiddleHeaderAvatar:n=".MiddleHeader .Transition__slide--active .ChatInfo .Avatar",a="img.avatar-media";break;case l.bZ.SettingsAvatar:n="#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto",a="img.avatar-media";break;case l.bZ.ProfileAvatar:n="#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto",a="img.avatar-media";break;case l.bZ.ScheduledInline:case l.bZ.Inline:default:n=`.Transition__slide--active > .MessageList #message${t.id}`,a=".message-content .full-media, .message-content .thumbnail"}const s=document.querySelector(n),r=s&&s.querySelectorAll(a);return{container:s,mediaEl:null==r?void 0:r[r.length-1]}}function T(e,t){switch(t){case l.bZ.Album:case l.bZ.ScheduledAlbum:case l.bZ.Inline:case l.bZ.ScheduledInline:e.classList.add("rounded-corners");break;case l.bZ.SharedMedia:case l.bZ.SettingsAvatar:case l.bZ.ProfileAvatar:case l.bZ.SearchResult:e.firstChild.style.objectFit="cover";break;case l.bZ.MiddleHeaderAvatar:e.classList.add("circle")}}var R=n(231),A=n(126),L=n(2255),F=n(3106),B=n(8964),$=n(9196);const x=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n}=t;return{isDownloading:!!n&&(0,p.te)(e,n),isProtected:(0,p.EV)(e,n)}}))((e=>{let{mediaData:t,isVideo:n,isZoomed:r,message:l,fileName:o,isAvatar:c,isDownloading:d,isProtected:m,onCloseMediaViewer:u,onForward:Z,onZoomToggle:P}=e;const{downloadMessageMedia:p,cancelMessageMediaDownload:E}=(0,s.uC)(),{loadProgress:C}=(0,v.Z)(l&&(0,g.Ti)(l,"download"),!d),f=(0,a.I4)((()=>{d?E({message:l}):p({message:l})}),[E,p,d,l]),b=(0,h.Z)(),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",className:n?"active":void 0,onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);if(i.wB){if(m)return;return a.ZP.createElement("div",{className:"MediaViewerActions-mobile"},a.ZP.createElement(F.Z,{trigger:I,positionX:"right"},!c&&a.ZP.createElement(B.Z,{icon:"forward",onClick:Z},b("Forward")),n?a.ZP.createElement(B.Z,{icon:d?"close":"download",onClick:f},d?`${Math.round(100*C)}% Downloading...`:"Download"):a.ZP.createElement(B.Z,{icon:"download",href:t,download:o},b("AccActionDownload"))),d&&a.ZP.createElement($.Z,{progress:C,size:"s",noCross:!0}))}return a.ZP.createElement("div",{className:"MediaViewerActions"},!c&&!m&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Forward"),onClick:Z},a.ZP.createElement("i",{className:"icon-forward"}))),function(){if(!m)return n?a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload"),onClick:f},d?a.ZP.createElement($.Z,{progress:C,size:"s",onClick:f}):a.ZP.createElement("i",{className:"icon-download"})):a.ZP.createElement(R.Z,{href:t,download:o,round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload")},a.ZP.createElement("i",{className:"icon-download"}))}(),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:r?"Zoom Out":"Zoom In",onClick:P},a.ZP.createElement("i",{className:r?"icon-zoom-out":"icon-zoom-in"})),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})))})));var D=n(2202),O=n(9933),U=n(275),G=n(9118),J=n(9204),X=n(6752);const z=e=>{let{text:t="",isHidden:n,isForVideo:s,onClick:r}=e;const[l,o]=(0,a.eJ)(!1);(0,a.d4)((()=>{const e=document.querySelector(".MediaViewerFooter .media-text"),t=()=>{const t=e?e.clientHeight:0;o(t>2*I.Gw)};t();const n=(0,G.P2)(t,500,!0);return window.addEventListener("resize",n,!1),()=>{window.removeEventListener("resize",n,!1)}}),[]);const c=(0,X.Z)("MediaViewerFooter",s&&"is-for-video",n&&"is-hidden");return a.ZP.createElement("div",{className:c,onClick:function(e){t&&e.stopPropagation()}},t&&a.ZP.createElement("div",{className:"media-viewer-footer-content",onClick:i.wB?void 0:r},a.ZP.createElement("p",{className:"media-text custom-scroll "+(l?"multiline":""),dir:"auto"},t)))};var _=n(2019);const Y=void 0!==document.fullscreenElement?"fullscreenElement":void 0!==document.mozFullScreenElement?"mozFullScreenElement":void 0!==document.webkitFullscreenElement?"webkitFullscreenElement":"";var H=n(1212),V=n(6898),q=n(4753),j=n(790);const K=["bytes","kB","MB","GB","TB","PB"],W=e=>{const t=0===e?0:Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**Math.floor(t)).toFixed(1)} ${K[t]}`},Q=e=>{e.stopPropagation()},ee=e=>{let{bufferedProgress:t,currentTime:n,duration:s,fileSize:r,isForceMobileVersion:l,isPlayed:o,isFullscreenSupported:c,isFullscreen:d,onChangeFullscreen:m,onPlayPause:u,isVisible:Z,setVisibility:v,onSeek:P}=e;const g=(0,a.sO)(null),p=(0,a.sO)(!1);(0,a.d4)((()=>{let e;if(Z&&o)return e=window.setTimeout((()=>{v(!1)}),1500),()=>{e&&window.clearTimeout(e)};e&&window.clearTimeout(e)}),[o,Z,v]),(0,a.d4)((()=>(Z?document.body.classList.add("video-controls-visible"):document.body.classList.remove("video-controls-visible"),()=>{document.body.classList.remove("video-controls-visible")})),[Z]);const E=(0,h.Z)(),C=(0,a.I4)((e=>{if(p.current&&g.current){const{width:t,left:n}=g.current.getBoundingClientRect(),a=e instanceof MouseEvent?e.clientX:e.targetTouches[0].clientX;P(Math.max(Math.min(s*((a-n)/t),s),0))}}),[s,P]),b=(0,a.I4)((e=>{p.current=!0,C(e)}),[C]),I=(0,a.I4)((()=>{p.current=!1}),[]);return(0,a.d4)((()=>{if(g.current&&Z)return(0,f.sf)(g.current,{onCapture:b,onRelease:I,onClick:I,onDrag:C})}),[Z,b,C,I]),a.ZP.createElement("div",{className:(0,X.Z)("VideoPlayerControls",l&&"mobile",Z&&"active"),onClick:Q},function(e,t,n,s){const r=e/t*100,l=100*n;return a.ZP.createElement("div",{className:"player-seekline",ref:s},a.ZP.createElement("div",{className:"player-seekline-track"},a.ZP.createElement("div",{className:"player-seekline-buffered",style:`width: ${l||0}%`}),a.ZP.createElement("div",{className:"player-seekline-played",style:`width: ${r||0}%`})))}(n,s,t,g),a.ZP.createElement(R.Z,{ariaLabel:E("AccActionPlay"),size:"tiny",ripple:!i.wB,color:"translucent-white",className:"play",onClick:u},a.ZP.createElement("i",{className:o?"icon-pause":"icon-play"})),function(e,t){return a.ZP.createElement("div",{className:"player-time"},`${(0,j.k9)(e)} / ${(0,j.k9)(t)}`)}(n,s),t<1&&(y=t,N=r,a.ZP.createElement("div",{className:"player-file-size"},`${W(N*y)} / ${W(N)}`)),c&&a.ZP.createElement(R.Z,{ariaLabel:"Fullscreen",size:"tiny",color:"translucent-white",className:"fullscreen",onClick:m},a.ZP.createElement("i",{className:d?"icon-smallscreen":"icon-fullscreen"})));var y,N};function te(){return te=Object.assign||function(e){for(var t=1;t{let{url:t,isGif:n,posterData:s,posterSize:r,loadProgress:l,fileSize:o,isMediaViewerOpen:c,noPlay:d,onClose:m,toggleControls:u,areControlsVisible:h}=e;const Z=(0,a.sO)(null),[v,P]=(0,a.eJ)(!i.$b||!i.cj),[g,p]=(0,a.eJ)(0),[E,C,f]=function(e,t){const[n,s]=(0,a.eJ)(Boolean(Y&&document[Y]));return(0,a.bt)((()=>{const n=()=>{s(Boolean(Y&&document[Y]))},a=()=>{s(!0)},r=()=>{s(!1),t(!1)},l=e.current;return document.addEventListener("fullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),l&&(l.addEventListener("webkitbeginfullscreen",a,!1),l.addEventListener("webkitendfullscreen",r,!1)),()=>{document.removeEventListener("fullscreenchange",n,!1),document.removeEventListener("webkitfullscreenchange",n,!1),document.removeEventListener("mozfullscreenchange",n,!1),l&&(l.removeEventListener("webkitbeginfullscreen",a,!1),l.removeEventListener("webkitendfullscreen",r,!1))}}),[]),Y||"iOS"===i.Lt?[n,()=>{e.current&&(Y||"iOS"===i.Lt)&&(e.current.requestFullscreen?e.current.requestFullscreen():e.current.webkitRequestFullscreen?e.current.webkitRequestFullscreen():e.current.webkitEnterFullscreen?e.current.webkitEnterFullscreen():e.current.mozRequestFullScreen&&e.current.mozRequestFullScreen(),s(!0))},()=>{e.current&&(document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen(),s(!1))}]:[!1]}(Z,P),{isBuffered:b,bufferedProgress:I,bufferingHandlers:y}=(0,_.Z)(),{shouldRender:N,transitionClassNames:k}=(0,H.Z)(!b,void 0,void 0,"slow"),{shouldRender:S,transitionClassNames:w}=(0,H.Z)(i.cj&&!v&&!N,void 0,void 0,"slow");(0,a.d4)((()=>{d||!c?Z.current.pause():t&&!i.$b&&(0,q.Z)(Z.current)}),[d,c,t]),(0,a.d4)((()=>{Z.current.currentTime===Z.current.duration?(p(0),P(!1)):p(Z.current.currentTime)}),[g]);const M=(0,a.I4)((e=>{e.stopPropagation(),v?(Z.current.pause(),P(!1)):((0,q.Z)(Z.current),P(!0))}),[v]);(0,V.Z)(Z,[]);const T=(0,a.I4)((()=>{u(!0)}),[u]),A=(0,a.I4)((e=>{e.target===Z.current&&u(!1)}),[u]),L=(0,a.I4)((e=>{p(e.currentTarget.currentTime)}),[]),F=(0,a.I4)((()=>{p(0),P(!1),u(!0)}),[u]),B=(0,a.I4)((()=>{E&&f?f():!E&&C&&C()}),[f,E,C]),x=(0,a.I4)((e=>{Z.current.currentTime=e}),[]);(0,a.d4)((()=>{const e=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),M(e))};return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)}}),[M]);const D=r&&`width: ${r.width}px; height: ${r.height}px`,O=`background-image: url(${s})`;return a.ZP.createElement("div",{className:"VideoPlayer",onMouseMove:n||i.$b?void 0:T,onMouseOut:n||i.$b?void 0:A},a.ZP.createElement("div",{style:D},a.ZP.createElement("video",te({ref:Z,autoPlay:i.$b,playsInline:!0,loop:n,muted:n,id:"media-viewer-video",style:O,onPlay:i.cj?()=>P(!0):void 0,onEnded:F,onClick:i.wB?void 0:M,onDoubleClick:i.$b?void 0:B},y,{onTimeUpdate:L}),t&&a.ZP.createElement("source",{src:t}))),S&&a.ZP.createElement(R.Z,{round:!0,className:`play-button ${w}`,onClick:M},a.ZP.createElement("i",{className:"icon-play"})),N&&a.ZP.createElement("div",{className:["spinner-container",k].join(" ")},!b&&a.ZP.createElement("div",{className:"buffering"},"Buffering..."),a.ZP.createElement($.Z,{size:"xl",progress:b?1:l,square:!0,onClick:m})),!n&&!N&&a.ZP.createElement(ee,{isPlayed:v,bufferedProgress:I,currentTime:g,isFullscreenSupported:Boolean(C),isFullscreen:E,fileSize:o,duration:Z.current&&Z.current.duration||0,isVisible:h,setVisibility:u,isForceMobileVersion:r&&r.width<400,onSeek:x,onChangeFullscreen:B,onPlayPause:M}))})),ae=(0,a.X$)((0,s.c$)(((e,t)=>{const{chatId:n,threadId:a,messageId:s,avatarOwnerId:r,profilePhotoIndex:o,origin:i}=t;if(i===l.bZ.SearchResult){if(!n||!s)return{};const t=(0,p.hj)(e,n,s);return t?{chatId:n,messageId:s,senderId:t.senderId,origin:i,message:t,isProtected:(0,p.EV)(e,t)}:{}}if(r)return{messageId:-1,senderId:r,avatarOwner:(0,p.dy)(e,r)||(0,p.Z1)(e,r),profilePhotoIndex:o||0,origin:i};if(!(n&&a&&s))return{};let c;return c=i&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(i)?(0,p.Tm)(e,n,s):(0,p.hj)(e,n,s),c?{chatId:n,threadId:a,messageId:s,senderId:c.senderId,origin:i,message:c,isProtected:(0,p.EV)(e,c)}:{}}))((e=>{const{messageId:t,isActive:n,avatarOwner:s,chatId:o,message:d,profilePhotoIndex:m,origin:u,animationLevel:h,onClose:P,onFooterClick:p,isFooterHidden:E,isProtected:C,setIsFooterHidden:f}=e,b=d?(0,g.O$)(d):void 0,k=d?(0,g.b7)(d):void 0,S=d?(0,g.F$)(d):void 0,w=d?(0,g.Cg)(d):void 0,M=!!d&&(0,g.rl)(d),T=!!d&&(0,g.hC)(d),R=Boolean(k||w||T),A=Boolean(!R&&(b||S||M)),{isGif:L}=k||w||{},F=Boolean(s||t),B=Boolean(s),$=u===l.bZ.SharedMedia,x=u===l.bZ.SearchResult,D=2===h;function O(e){if(B&&void 0!==m){const{photos:t}=s;return t&&t[m]?`photo${t[m].id}?size=c`:(0,g.RT)(s,e?"big":"normal")}return d&&(0,g.Ti)(d,e?"viewerFull":"viewerPreview")}const U=(0,Z.Z)(d&&($||x)&&(0,g.Ti)(d,"pictogram"),void 0,r.IU.BlobUrl,void 0,D&&350),G=O(),X=(0,Z.Z)(G,void 0,r.IU.BlobUrl,void 0,D&&350),{mediaData:_,loadProgress:Y}=(0,v.Z)(O(!0),void 0,d&&(0,g.kG)(d,"viewerFull"),void 0,D&&350),H=(0,a.I4)((e=>{null==f||f(!e)}),[f]),V=b||k?(b||k).blobUrl:void 0;let q=!R&&(V||_)||X||U;const j=(0,c.Z)(!q&&d&&(0,g.DH)(d));q||u===l.bZ.SearchResult||(q=j);const K=d?(0,g.c0)(d):void 0;let W;if(d?M||T?W=(0,g.aE)(d).mediaSize:b||S?W=(0,g.bV)(b||S):(k||w)&&(W=(0,g.jC)(k||w)):W=I.vY,B)return a.ZP.createElement("div",{key:o,className:"MediaViewerContent"},se(_||X,(0,I.PA)(I.vY,!1),!i.wB&&!C));if(!d)return;const Q=(0,y.X)(d),ee=Boolean(Q);return a.ZP.createElement("div",{className:"MediaViewerContent "+(ee?"has-footer":"")},C&&a.ZP.createElement("div",{onContextMenu:N.Z,className:"protector"}),A&&se(V||_||X||U,d&&(0,I.PA)(W,ee),!i.wB&&!C),R&&(!n&&i.$b?function(e,t,n){const s=t&&`width: ${t.width}px; height: ${t.height}px`,r=`background-image: url(${e})`;return e?a.ZP.createElement("div",{className:"VideoPlayer"},a.ZP.createElement("div",{style:s},a.ZP.createElement("video",{style:r,draggable:Boolean(n)}))):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(J.Z,{color:"white"}))}(q,d&&(0,I.PA)(W,ee,!0),!i.wB&&!C):a.ZP.createElement(ne,{key:t,url:V||_,isGif:L,posterData:q,posterSize:d&&(0,I.PA)(W,ee,!0),loadProgress:Y,fileSize:K,isMediaViewerOpen:F&&n,areControlsVisible:!E,toggleControls:H,noPlay:!n,onClose:P})),Q&&a.ZP.createElement(z,{text:Q,onClick:p,isHidden:E&&i.$b,isForVideo:R&&!L}))})));function se(e,t,n){return e?a.ZP.createElement("img",{src:e,alt:"",style:t?`width: ${t.width}px`:"",draggable:Boolean(n)}):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(J.Z,{color:"white"}))}function re(){return re=Object.assign||function(e){for(var t=1;t{let{messageId:t,getMessageId:n,selectMessage:s,isVideo:r,isGif:l,isPhoto:o,isOpen:c,isActive:m,hasFooter:u,...h}=e;const Z=(0,a.sO)(null),v=(0,a.sO)(null),P=(0,a.sO)({x:0,y:0,scale:1}),g=(0,a.sO)(void 0),p=(0,a.sO)(!0),[E,C]=(0,a.eJ)(t),b=(0,d.Z)(),[I,y]=(0,a.eJ)(!0),{isZoomed:N,onClose:k}=h,S=(0,a.I4)((e=>{P.current=e,b()}),[b]),w=(0,a.I4)((e=>{p.current=e,b()}),[b]),M=(0,D.Z)(350,!0),T=(0,D.Z)(500,!0),R=(0,D.Z)(800,!0),A=(0,a.I4)((e=>{if(!i.$b)return;const t=window.innerHeight-e.pageY<80;!t&&e.pageX<40||!t&&e.pageX>window.innerWidth-40||y(!I)}),[I]);if(function(e,t){const n=(0,a.sO)(e);(0,a.bt)((()=>{n.current=e}),[e]),(0,a.d4)((()=>{if("number"!=typeof t)return;const e=setTimeout((()=>n.current()),t);return()=>clearTimeout(e)}),[t])}((()=>y(!1)),200),(0,a.d4)((()=>{if(!i.$b||!Z.current||N||!E)return;let e={x:0,y:0,scale:1};const t={x:0,y:0},a={x:0,y:0},r={x:0,y:0};let l,o,c=Date.now();const d=(0,G.Ds)((()=>{c=Date.now()}),500,!1,!0),m=t=>{if(1!==P.current.scale)return!1;let a=0;if(window.innerHeight-t.pageY<80)return!1;t.pageX<40?a=-1:t.pageX>window.innerWidth-40&&(a=1);const r=n(E,a);if(r){const t=(window.innerWidth+40)*a;P.current.x+=t,p.current=!1,C(r),M((()=>s(r))),R((()=>{w(!0)})),e={x:0,y:0,scale:1},oe=(0,O.vr)({from:P.current.x,to:0,duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({y:0,x:e,scale:1})})}return 0!==a};return(0,f.sf)(Z.current,{isNotPassive:!0,excludedClosestSelector:".VideoPlayerControls, .MediaViewerFooter",onCapture:()=>{if(c=Date.now(),(0,U.Z)(P.current,{x:0,y:0,scale:1})){if(!v.current)return;if(o=v.current.querySelector("img, video"),!o)return;l=o.getBoundingClientRect()}},onDrag:(n,a,s)=>{let{dragOffsetX:l,dragOffsetY:o}=s;if(i.cj){const{pageX:e}=a.touches[0];if(e<=f.vJ||e>=window.innerWidth-f.vJ)return}oe&&(oe(),oe=void 0),r.x=t.x-l,r.y=t.y-o,t.x=l,t.y=o;const c=Math.abs(l),m=Math.abs(o),{scale:u,x:h,y:Z}=P.current,v=10;if(d(),1===u)return g.current!==ie.Vertical&&(g.current===ie.Horizontal||Math.abs(h)>v||c>v&&mv||m>v&&c{let{zoomFactor:s,initialCenterX:r,initialCenterY:l,dragOffsetX:o,dragOffsetY:i,currentCenterX:c,currentCenterY:d}=n;const m=Math.min(12,Math.max(e.scale*s,.6)),u=m/e.scale,h=Math.abs(Math.min(e.x,0))+r,Z=Math.abs(Math.min(e.y,0))+l;a.x=c,a.y=d;const v=h-u*h,P=Z-u*Z;S({x:e.x+v+o,y:e.y+P+i,scale:m})},onClick(e){m(e)&&(e.preventDefault(),e.stopPropagation())},onDoubleClick(t,n){let{centerX:a,centerY:s}=n;if(m(t))return t.preventDefault(),void t.stopPropagation();const r=a-3*a,l=s-3*s,{scale:o,x:i,y:c}=P.current;if(1===o){if(0!==i||0!==c)return;e={x:r,y:l,scale:3}}else e={x:0,y:0,scale:1};return(0,O.vr)({from:[i,c,o],to:[e.x,e.y,e.scale],duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:e[0],y:e[1],scale:e[2]})})},onRelease:()=>{const i=Math.abs(P.current.x),d=Math.abs(P.current.y),{scale:m,x:u,y:h}=P.current;if(T((()=>{g.current=void 0})),R((()=>{w(!0)})),m<1)return e={x:0,y:0,scale:1},(0,O.vr)({from:[u,h,m],to:[0,0,1],duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:e[0],y:e[1],scale:e[2]})});if(m>1){if(!o||!l)return void(e={x:u,y:h,scale:m});const n=o.getBoundingClientRect(),s=Math.min(m,4),i=s/m;let d=u*i+(a.x-i*a.x),Z=h*i+(a.y-i*a.y);const v=.15;if(e.scale===m){const e=Math.abs(t.x)/(Date.now()-c),n=Math.abs(t.y)/(Date.now()-c);d-=Math.abs(t.x)*e*v*r.x,Z-=Math.abs(t.y)*n*v*r.y}if(n.width>window.innerWidth){const e=-l.left*s,t=window.innerWidth-l.right*s;d=Math.min(e,Math.max(t,d))}else d=(window.innerWidth-window.innerWidth*s)/2;if(n.height>window.innerHeight){const e=-l.top*s,t=window.innerHeight-l.bottom*s;Z=Math.min(e,Math.max(t,Z))}else Z=(window.innerHeight-window.innerHeight*s)/2;return e={x:d,y:Z,scale:s},void(oe=(0,O.vr)({from:[u,h,m],to:[d,Z,s],duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:e[0],y:e[1],scale:e[2]})}))}if(e={x:u,y:h,scale:m},d>=50)return k();if(d>0)return(0,O.vr)({from:h,to:0,duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:0,y:e,scale:m})});const Z=u<0?1:-1,v=n(E,u<0?1:-1),p=r.x<0?-1:1;if(v&&i>=50&&Z===p){const e=(window.innerWidth+40)*Z;P.current.x+=e,C(v),M((()=>s(v)))}oe=(0,O.vr)({from:P.current.x,to:0,duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({y:0,x:e,scale:P.current.scale})})}})}),[N,k,S,n,E,w]),!E)return;const L=n(E,1),F=n(E,-1),B=P.current.x,$=P.current.y,{scale:x}=P.current;return a.ZP.createElement("div",{className:"MediaViewerSlides",ref:Z},F&&1===x&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:de(-window.innerWidth+B-40)},a.ZP.createElement(ae,re({},h,{messageId:F}))),E&&a.ZP.createElement("div",{className:"MediaViewerSlide "+(m?"MediaViewerSlide--active":""),onClick:A,ref:v,style:de(B,$,x)},a.ZP.createElement(ae,re({},h,{messageId:E,isActive:m&&p.current,setIsFooterHidden:y,isFooterHidden:I||N||1!==x}))),L&&1===x&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:de(window.innerWidth+B+40)},a.ZP.createElement(ae,re({},h,{messageId:L}))))}));function de(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return`transform: translate3d(${e.toFixed(3)}px, ${t.toFixed(3)}px, 0px) scale(${n.toFixed(3)});`}var me=n(782);const ue=[1,0,0,1,0,0],he={1:1,1.5:1.5,2:2.2,2.5:3.3,3:5.5},Ze=150,ve=(0,a.X$)((e=>{let{children:t,className:n,noWrap:s,canPan:r,zoomLevel:l,panDeltaX:o,panDeltaY:i,onPan:c}=e;const d=he[l]||l,[m,u]=(0,a.eJ)(!1),[h,Z]=(0,a.eJ)({dx:o,dy:i,x:0,y:0}),[v,P]=(0,a.eJ)(ue),g=(0,a.sO)(null),p=(0,a.sO)(null);return(0,a.d4)((()=>{const e=d||v[0],t=o||v[4],n=i||v[5],a=[...v];v[0]!==e&&(a[0]=e||a[0],a[3]=e||a[3]),v[4]!==t&&(a[4]=t),v[5]!==n&&(a[5]=n),(0,me.et)(v,a)||P(function(e,t,n){const a=n&&n.querySelector(".Transition__slide--active img");if(!n||!a)return t;const s=n.getBoundingClientRect(),r=a.getBoundingClientRect(),l=r.width/e*t[0],o=r.height/e*t[3],i=(s.width-l)/2+t[4],c=(s.height-o)/2+t[5];return s.width&&s.width-Ze{r||P(ue)}),[r]),(0,a.d4)((()=>{p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}),[s,v]),s?t:a.ZP.createElement("div",{ref:g,className:`pan-wrapper ${n||""}`,onMouseDown:e=>{if(!r)return;e.stopPropagation(),e.preventDefault();const t={dx:v[4],dy:v[5],x:e.pageX,y:e.pageY};Z(t),u(!0),g.current&&g.current.classList.add("move")},onMouseUp:()=>{u(!1),g.current&&g.current.classList.remove("move"),c&&c(v[4],v[5])},onMouseMove:e=>{if(m){const t=function(e,t){const n=[...v],a=h.x-e,s=h.y-t;return n[4]=h.dx-a,n[5]=h.dy-s,n}(e.pageX,e.pageY);P(t),p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}}},a.ZP.createElement("div",{ref:p,className:"pan-container"},t))}));var Pe=n(2340),ge=n(172);const pe=(0,s.c$)(((e,t)=>{let{chatId:n,messageId:a,isAvatar:s}=t;if(s&&n)return{sender:(0,g.YC)(n)?(0,p.dy)(e,n):(0,p.Z1)(e,n)};if(!a||!n)return{};const r=(0,p.hj)(e,n,a);return{message:r,sender:r&&(0,p.Ur)(e,r)}}))((e=>{let{chatId:t,messageId:n,sender:r,isAvatar:l,message:o}=e;const{closeMediaViewer:c,focusMessage:d,toggleChatInfo:m}=(0,s.uC)(),u=(0,a.I4)((()=>{c(),i.wB?setTimeout((()=>{m(!1,{forceSyncOnIOs:!0}),d({chatId:t,messageId:n})}),350):d({chatId:t,messageId:n})}),[t,d,m,n,c]),Z=(0,h.Z)();if(!r||!o&&!l)return;const v=(0,g.OU)(Z,r);return a.ZP.createElement("div",{className:"SenderInfo",onClick:u},(0,g.YC)(r.id)?a.ZP.createElement(ge.Z,{key:r.id,size:"medium",user:r}):a.ZP.createElement(ge.Z,{key:r.id,size:"medium",chat:r}),a.ZP.createElement("div",{className:"meta"},a.ZP.createElement("div",{className:"title",dir:"auto"},v&&(0,Pe.Z)(v)),a.ZP.createElement("div",{className:"date",dir:"auto"},l?Z("lng_mediaview_profile_photo"):(0,j.ZK)(Z,1e3*o.date,!0))))})),Ee=e=>{let{children:t,...n}=e;return i.$b?t(!0,!0,1):a.ZP.createElement(L.Z,n,t)},Ce=(0,a.X$)((e=>{let{isShown:t,onChangeZoom:n}=e;const{transitionClassNames:s}=(0,H.Z)(t),r=(0,P.Z)(t),l=(0,a.sO)(null),[o,c]=(0,a.eJ)(1),d=(0,a.sO)(!1);(0,a.d4)((()=>{t&&!r&&c(1.5)}),[t,r]);const m=(0,a.I4)((()=>{d.current=!0}),[]),u=(0,a.I4)((()=>{d.current=!1,1===o&&n(o,!d.current)}),[n,o]);(0,a.d4)((()=>{n(o,!d.current)}),[o,n]);const Z=(0,h.Z)(),v=(0,X.Z)("ZoomControls",s);return a.ZP.createElement("div",{className:v},a.ZP.createElement(R.Z,{disabled:1===o,size:"tiny",color:"translucent-white",ariaLabel:Z("ZoomOut"),className:"zoom-out",ripple:!i.wB,onClick:()=>{l.current&&c(Math.max(1,o-.5))}},a.ZP.createElement("i",{className:"icon-zoom-out"})),a.ZP.createElement(R.Z,{disabled:3===o,size:"tiny",color:"translucent-white",ariaLabel:"Zoom In",className:"zoom-in",ripple:!i.wB,onClick:()=>{l.current&&c(Math.min(3,o+.5))}},a.ZP.createElement("i",{className:"icon-zoom-in"})),a.ZP.createElement("div",{className:"seekline"},a.ZP.createElement("div",{className:"seekline-track"},a.ZP.createElement("div",{className:"seekline-played",style:`width: ${50*(o-1)}%`}),a.ZP.createElement("input",{ref:l,min:1,max:3,step:"0.5",value:o,type:"range",className:"seekline-input",onChange:e=>{c(Math.min(3,Math.max(Number(e.target.value),1)))},onMouseDown:m,onMouseUp:u}))))})),fe=350,be=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,threadId:n,messageId:a,avatarOwnerId:s,profilePhotoIndex:r,origin:o}=e.mediaViewer,{animationLevel:i}=e.settings.byKey;if(o===l.bZ.SearchResult){if(!t||!a)return{animationLevel:i};const n=(0,p.hj)(e,t,a);return n?{chatId:t,messageId:a,senderId:n.senderId,origin:o,message:n,animationLevel:i}:{animationLevel:i}}if(s)return{messageId:-1,senderId:s,avatarOwner:(0,p.dy)(e,s)||(0,p.Z1)(e,s),profilePhotoIndex:r||0,animationLevel:i,origin:o};if(!(t&&n&&a))return{animationLevel:i};let c,d,m;if(c=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,p.Tm)(e,t,a):(0,p.hj)(e,t,a),!c)return{animationLevel:i};if(d=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,p.Fn)(e,t):(0,p.Zw)(e,t),o===l.bZ.Inline||o===l.bZ.Album)m=(0,p.qC)(e,t,n)||(0,p.gb)(e,t,n);else if(o===l.bZ.SharedMedia){const t=(0,p.we)(e),{foundIds:n}=t&&t.resultsByType&&t.resultsByType.media||{};m=n}return{chatId:t,threadId:n,messageId:a,senderId:c.senderId,origin:o,message:c,chatMessages:d,collectionIds:m,animationLevel:i}}))((e=>{let{chatId:t,threadId:n,messageId:p,senderId:N,origin:F,avatarOwner:B,profilePhotoIndex:$,message:D,chatMessages:O,collectionIds:U,animationLevel:G}=e;const{openMediaViewer:J,closeMediaViewer:X,openForwardMenu:z,focusMessage:_,toggleChatInfo:Y}=(0,s.uC)(),H=Boolean(B||p),V=F===l.bZ.SharedMedia,q=F===l.bZ.SearchResult,j=D?(0,g.O$)(D):void 0,K=D?(0,g.b7)(D):void 0,W=D?(0,g.F$)(D):void 0,Q=D?(0,g.Cg)(D):void 0,ee=!!D&&(0,g.rl)(D),te=!!D&&(0,g.hC)(D),ne=Boolean(K||Q||te),{isGif:ae}=K||Q||{},se=Boolean(!ne&&(j||W||ee)),re=Boolean(B),le=W||Q?p:void 0,oe=(0,a.Ye)((()=>le?[le]:(0,g.N0)(O||{},U||[],V)),[le,O,U,V]),ie=p?oe.indexOf(p):-1,de=0===ie||-1===ie,me=ie===oe.length-1||-1===ie,ue=(0,a.sO)(),he=(0,P.Z)(N);!H||he&&he===N&&ue.current||(ue.current=ie);const Ze=G>=1&&!i.$b?"mv-slide":"none",Pe=2===G?"slide-fade":"none",ge=2===G,[be,Ie]=(0,a.eJ)(!1),[ye,Ne]=(0,a.eJ)(!1),[ke,Se]=(0,a.eJ)(1),[we,Me]=(0,a.eJ)({x:0,y:0});function Te(e){if(re&&void 0!==$){const{photos:t}=B;return t&&t[$]?`photo${t[$].id}?size=c`:(0,g.RT)(B,e?"big":"normal")}return D&&(0,g.Ti)(D,e?"viewerFull":"viewerPreview")}const Re=(0,Z.Z)(D&&(V||q)&&(0,g.Ti)(D,"pictogram"),void 0,r.IU.BlobUrl,void 0,ge&&fe),Ae=Te(),Le=(0,Z.Z)(Ae,void 0,r.IU.BlobUrl,void 0,ge&&fe),{mediaData:Fe}=(0,v.Z)(Te(!0),void 0,D&&(0,g.kG)(D,"viewerFull"),void 0,ge&&fe),Be=j||K?(j||K).blobUrl:void 0;let $e=!ne&&(Be||Fe)||Le||Re;const xe=(0,c.Z)(!$e&&D&&(0,g.DH)(D));$e||F===l.bZ.SearchResult||($e=xe);const De=D?(0,g.ep)(D):re?`avatar${B.id}-${$}.jpg`:void 0;let Oe;D?ee||te?Oe=(0,g.aE)(D).mediaSize:j||W?Oe=(0,g.bV)(j||W):(K||Q)&&(Oe=(0,g.jC)(K||Q)):Oe=I.vY,(0,a.d4)((()=>{i.wB&&document.body.classList.toggle("is-media-viewer-open",H)}),[H]);const Ue=(0,d.Z)();(0,a.d4)((()=>{const e=window.matchMedia(I.L6);return"function"==typeof e.addEventListener?e.addEventListener("change",Ue):"function"==typeof e.addListener&&e.addListener(Ue),()=>{"function"==typeof e.removeEventListener?e.removeEventListener("change",Ue):"function"==typeof e.removeListener&&e.removeListener(Ue)}}),[Ue]);const Ge=(0,P.Z)(D),Je=(0,P.Z)(F),Xe=(0,P.Z)(B),ze=(0,P.Z)($e),_e=D?(0,y.X)(D):void 0,Ye=Boolean(_e);(0,a.d4)((()=>{ge&&H&&!Ge&&!Xe&&((0,m.YW)(fe+o.fK),function(e,t,n,a,s,r){const{mediaEl:c}=M(t,r);if(!c)return;const{width:d}=b.Z.get(),{width:m,height:u}=(0,I.fM)(e,s),{width:h,height:Z}=(0,I.jg)(m,u,a.width,a.height),v=(d-h)/2,P=function(e){const t=window.matchMedia(I.L6);let n=4.125;return e&&!i.$b&&(n+=t.matches?.875:2.125),n*I.Gw}(e)+(u-Z)/2;let{top:g,left:p,width:E,height:C}=c.getBoundingClientRect();if([l.bZ.SharedMedia,l.bZ.Album,l.bZ.ScheduledAlbum,l.bZ.SearchResult].includes(t)){const e=function(e,t,n,a,s,r){if(e===t){const l=Math.max(s,r)*(e/t);a-=(l-s)/2,n-=(l-r)/2,s=l,r=l}else if(e>t){const n=s;a-=((s=r*(e/t))-n)/2}else if(t>e){const a=r;n-=((r=s*(t/e))-a)/2}return{top:n,left:a,width:s,height:r}}(h,Z,g,p,E,C);g=e.top,p=e.left,E=e.width,C=e.height}const f=p+E/2-(v+h/2),y=g+C/2-(P+Z/2),N=E/h,S=C/Z,R=k(n||c);w(R,{top:`${P}px`,left:`${v}px`,width:`${h}px`,height:`${Z}px`,transform:`translate3d(${f}px, ${y}px, 0) scale(${N}, ${S})`}),T(R,t),document.body.classList.add("ghost-animating"),requestAnimationFrame((()=>{document.body.appendChild(R),requestAnimationFrame((()=>{R.style.transform="",function(e){e.firstChild.style.objectFit="default",e.classList.remove("rounded-corners","circle")}(R),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(R)&&document.body.removeChild(R),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(Ye,F,$e,Oe,ne,D)),ge&&!H&&(Ge||Xe)&&((0,m.YW)(fe+o.fK),function(e,t,n){const{container:a,mediaEl:s}=M(e,n);if(!s)return;const r=document.getElementById("MediaViewer").querySelector(".MediaViewerSlide--active img, .MediaViewerSlide--active video");if(!r||!s)return;const{top:i,left:c,width:d,height:m}=r.getBoundingClientRect(),{top:u,left:h,width:Z,height:v}=s.getBoundingClientRect();let P=u;if(!function(e){if("none"===e.style.display)return!1;const t=e.getBoundingClientRect(),{height:n}=b.Z.get();return t.top<=n&&t.top+t.height>=0}(a)){const{height:e}=b.Z.get();P=uC?E=C:C>E&&(C=E));const I=document.getElementsByClassName("ghost")[0],y=I||k(t||s,e);I||w(y,{top:`${P}px`,left:`${h}px`,width:`${Z}px`,height:`${v}px`,transform:`translate3d(${g}px, ${p}px, 0) scale(${E}, ${C})`}),requestAnimationFrame((()=>{if(I){const{top:e,left:t,width:n,height:a}=I.getBoundingClientRect();w(y,{transition:"none",top:`${P}px`,left:`${h}px`,transformOrigin:"top left",transform:`translate3d(${t-h}px, ${e-P}px, 0) scale(${n/Z}, ${a/v})`,width:`${Z}px`,height:`${v}px`})}document.body.classList.add("ghost-animating"),I||document.body.appendChild(y),requestAnimationFrame((()=>{I&&(I.style.transition=""),y.style.transform="",f&&(y.style.opacity="0"),T(y,e),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(y)&&document.body.removeChild(y),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(Je,ze,Ge||void 0))}),[ge,H,F,Je,D,Ge,Xe,$e,ze,Oe,ne,Ye]),(0,a.d4)((()=>{let e;return ye?Ie(!0):e=window.setTimeout((()=>{Ie(!1)}),fe),()=>{e&&window.clearTimeout(e)}}),[ye]);const He=()=>{Ne(!1),Se(1),Me({x:0,y:0})},Ve=(0,a.I4)((()=>{Ne(!ye),Se(ye?1:1.5),ye&&Me({x:0,y:0})}),[ye]),qe=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Se(e),1===e&&t&&He()}),[]),je=(0,a.I4)((()=>{X(),He()}),[X]),Ke=(0,a.I4)((()=>{je(),i.wB?setTimeout((()=>{Y(!1,{forceSyncOnIOs:!0}),_({chatId:t,threadId:n,messageId:p})}),fe):_({chatId:t,threadId:n,messageId:p})}),[je,t,n,_,Y,p]),We=(0,a.I4)((()=>{z({fromChatId:t,messageIds:[p]}),He()}),[z,t,p]),Qe=(0,a.I4)((e=>J({chatId:t,threadId:n,messageId:e,origin:F},{forceOnHeavyAnimation:!0})),[t,J,F,n]);(0,a.d4)((()=>H?(0,C.Z)((()=>{ye?He():je()})):void 0),[je,H,ye]),(0,a.d4)((()=>{ne&&!ae&&(0,E.Es)()}),[ae,ne]),(0,a.d4)((()=>{if(H)return b.Z.disableRefresh(),()=>{b.Z.enableRefresh()}}),[H]);const et=(0,a.I4)(((e,t)=>{if(!e)return;const n=oe.indexOf(e);return-1===t&&n>0||1===t&&n{Me({x:e,y:t})}),[]),st=(0,h.Z)();function rt(){return re?a.ZP.createElement(pe,{key:B.id,chatId:B.id,isAvatar:!0}):a.ZP.createElement(pe,{key:p,chatId:t,messageId:p})}return(0,u.ZP)(H,X,J,{chatId:t,threadId:n,messageId:p,origin:F,avatarOwnerId:B&&B.id}),(0,a.d4)((()=>{if(H)return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)};function e(e){switch(e.key){case"Left":case"ArrowLeft":Qe(nt);break;case"Right":case"ArrowRight":Qe(tt)}}}),[H,tt,nt,Qe]),(0,a.d4)((()=>{if(ye||i.$b)return;const e=document.querySelector(".MediaViewerSlide--active");if(!e)return;const t=ae&&!i.cj;return(0,f.sf)(e,{excludedClosestSelector:".backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer"+(t?"":", .VideoPlayer"),onClick:je})}),[je,ae,ye,p]),a.ZP.createElement(A.Z,{id:"MediaViewer",className:ye?"zoomed":"",isOpen:H},(()=>a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"media-viewer-head",dir:st.isRtl?"rtl":void 0},i.wB&&a.ZP.createElement(R.Z,{className:"media-viewer-close",round:!0,size:"smaller",color:"translucent-white",ariaLabel:st("Close"),onClick:je},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(L.Z,{activeKey:ue.current,name:Pe},rt),a.ZP.createElement(x,{mediaData:Fe||Le,isVideo:ne,isZoomed:ye,message:D,fileName:De,onCloseMediaViewer:je,onForward:We,onZoomToggle:Ve,isAvatar:re})),a.ZP.createElement(ve,{noWrap:!be,canPan:ye,panDeltaX:we.x,panDeltaY:we.y,zoomLevel:ke,onPan:at},a.ZP.createElement(Ee,{activeKey:ie,name:Ze},(e=>a.ZP.createElement(ce,{messageId:p,getMessageId:et,chatId:t,isPhoto:se,isGif:ae,threadId:n,avatarOwnerId:B&&B.id,profilePhotoIndex:$,origin:F,isOpen:H,hasFooter:Ye,isZoomed:ye,isActive:e,isVideo:ne,animationLevel:G,onClose:je,selectMessage:Qe,onFooterClick:Ke})))),!de&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation prev ${ne&&!ae&&"inline"}`,"aria-label":st("AccDescrPrevious"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(nt)}),!me&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation next ${ne&&!ae&&"inline"}`,"aria-label":st("Next"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(tt)}),a.ZP.createElement(Ce,{isShown:ye,onChangeZoom:qe}))))})));var Ie=n(8360),ye=n(706),Ne=n(7407),ke=n(2313),Se=n(2515),we=n(4288),Me=n(3103),Te=n(7687),Re=n(1273),Ae=n(1876),Le=n(8799),Fe=n(6058);const Be=(0,a.X$)((e=>{let{isOpen:t,currentUserId:n,chatOrUserIds:s,filterRef:r,filter:l,filterPlaceholder:i,loadMore:c,onFilterChange:d,onSelectChatOrUser:m,onClose:u,onCloseAnimationEnd:Z}=e;const v=(0,h.Z)(),[P,p]=(0,Ne.Z)(c,s,Boolean(l)),E=(0,a.I4)((()=>{d("")}),[d]);(0,Se.Z)(r,t,E);const C=(0,a.sO)(null),f=(0,a.I4)((e=>{d(e.currentTarget.value)}),[d]),b=(0,ke.Z)(C,t,(e=>{P&&P.length>0&&m(P[-1===e?0:e])}),".ListItem-button",!0),I=a.ZP.createElement("div",{className:"modal-header",dir:v.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:v("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Te.Z,{ref:r,value:l,onChange:f,onKeyDown:b,placeholder:i})),y=s.indexOf(P[0]);return a.ZP.createElement(Me.Z,{isOpen:t,className:"ChatOrUserPicker",header:I,onClose:u,onCloseAnimationEnd:Z},null!=P&&P.length?a.ZP.createElement(Re.Z,{ref:C,className:"picker-list custom-scroll",items:P,onLoadMore:p,withAbsolutePositioning:!0,maxHeight:s.length*o.rS,onKeyDown:b},P.map(((e,t)=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable force-rounded-corners",style:`top: ${(y+t)*o.rS}px;`,onClick:()=>m(e)},(0,g.YC)(e)?a.ZP.createElement(Fe.Z,{status:e===n?v("SavedMessagesInfo"):void 0,userId:e}):a.ZP.createElement(Le.Z,{chatId:e}))))):P&&!P.length?a.ZP.createElement("p",{className:"no-results"},v("lng_blocked_list_not_found")):a.ZP.createElement(we.Z,null))})),$e=(0,a.X$)((0,s.c$)((e=>{var t;const{chats:{byId:n,listIds:a,orderedPinnedIds:s},currentUserId:r}=e;return{chatsById:n,activeListIds:a.active,archivedListIds:a.archived,pinnedIds:s.active,contactIds:null===(t=e.contactList)||void 0===t?void 0:t.userIds,currentUserId:r}}))((e=>{let{chatsById:t,activeListIds:n,archivedListIds:l,pinnedIds:o,contactIds:i,currentUserId:c,isOpen:d}=e;const{setForwardChatId:m,exitForwardMode:u}=(0,s.uC)(),Z=(0,h.Z)(),[v,P]=(0,a.eJ)(""),p=(0,a.sO)(null),[E,C,f]=(0,ye.Z)();(0,a.d4)((()=>{d&&C()}),[d,C]);const b=(0,a.Ye)((()=>{if(!d)return;let e=o||[];c&&(e=(0,me.Tw)([c,...e]));const a=[...n||[],...l||[]].filter((e=>{const n=t[e];return n&&(0,g.Qm)(n,r._f)})),m=(0,s.Rd)().users.byId;return(0,g.ih)((0,me.Tw)([...(0,g.$l)(Z,a,t,v,c),...i?(0,g.kK)(i,m,v):[]]),t,void 0,e)}),[n,l,t,i,c,v,d,Z,o]),I=(0,a.I4)((e=>{m({id:e})}),[m]),y=(0,Ie.Z)(b,!0);if(d||E)return a.ZP.createElement(Be,{currentUserId:c,isOpen:d,chatOrUserIds:y,filterRef:p,filterPlaceholder:Z("ForwardTo"),filter:v,onFilterChange:P,onSelectChatOrUser:I,onClose:u,onCloseAnimationEnd:f})})));var xe=n(1947);function De(e){return e.isSlowMode?"Slowmode enabled":e.hasErrorKey?"Something went wrong":"Telegram"}const Oe=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e,["dialogs"])))((e=>{let{dialogs:t}=e;const{dismissDialog:n,acceptInviteConfirmation:r,sendMessage:l,showNotification:o}=(0,s.uC)(),[i,c,d]=(0,ye.Z)(),m=(0,h.Z)();var u,Z,v;if((0,a.d4)((()=>{t.length>0&&c()}),[t,c]),t.length)return a.ZP.createElement("div",{id:"Dialogs"},Boolean(t.length)&&("hash"in(u=t[t.length-1])?(e=>{const{hash:t,title:s,about:l,participantsCount:c,isChannel:u,photo:h,isRequestNeeded:Z}=e,v=m(u?"Subscribers":"Members",c,"i"),g=m(u?"ChannelJoin":"JoinGroup"),p=m(u?"MemberRequests.RequestToJoinChannel":"MemberRequests.RequestToJoinGroup");return a.ZP.createElement(Me.Z,{isOpen:i,onClose:d,className:"error",header:P(s,h),onCloseAnimationEnd:n},void 0!==c&&a.ZP.createElement("p",{className:"modal-help"},v),l&&a.ZP.createElement("p",{className:"modal-about"},(0,Pe.Z)(l,["br"])),Z&&a.ZP.createElement("p",{className:"modal-help"},m(u?"MemberRequests.RequestToJoinDescriptionChannel":"MemberRequests.RequestToJoinDescriptionGroup")),a.ZP.createElement(R.Z,{isText:!0,className:"confirm-dialog-button",onClick:()=>{r({hash:t}),o({message:m(u?"RequestToJoinChannelSentDescription":"RequestToJoinGroupSentDescription")}),d()}},Z?p:g),a.ZP.createElement(R.Z,{isText:!0,className:"confirm-dialog-button",onClick:d},m("Cancel")))})(u):"phoneNumber"in u?(Z=u,a.ZP.createElement(Me.Z,{isOpen:i,onClose:d,className:"confirm",title:m("ShareYouPhoneNumberTitle"),onCloseAnimationEnd:n},m("AreYouSureShareMyContactInfoBot"),a.ZP.createElement("div",null,a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:()=>{l({contact:(0,me.ei)(Z,["firstName","lastName","phoneNumber"])}),d()}},m("OK")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},m("Cancel"))))):(v=u,a.ZP.createElement(Me.Z,{isOpen:i,onClose:d,onCloseAnimationEnd:n,className:"error",title:De(v)},v.hasErrorKey?(0,xe.ZP)(v):(0,Pe.Z)(v.message,["emoji","br"]),a.ZP.createElement("div",null,a.ZP.createElement(R.Z,{isText:!0,onClick:d},m("OK")))))));function P(e,t){return a.ZP.createElement("div",{className:"modal-header"},t&&a.ZP.createElement(ge.Z,{size:"small",photo:t}),a.ZP.createElement("div",{className:"modal-title"},(0,Pe.Z)(e)),a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:m("Close"),onClick:d},a.ZP.createElement("i",{className:"icon-close"})))}})));var Ue=n(6937);const Ge=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e,["notifications"])))((e=>{let{notifications:t}=e;const{dismissNotification:n}=(0,s.uC)();if(t.length)return a.ZP.createElement("div",{id:"Notifications"},t.map((e=>{let{message:t,localId:s}=e;return a.ZP.createElement(Ue.Z,{message:(0,Pe.Z)(t,["emoji","br","links","simple_markdown"]),onDismiss:()=>n({localId:s})})})))})));var Je=n(1396),Xe=n(7551);const ze=(0,a.X$)((e=>{let{url:t}=e;const{toggleSafeLinkModal:n}=(0,s.uC)(),r=(0,h.Z)(),l=(0,a.I4)((()=>{window.open((0,Je.X)(t)),n({url:void 0})}),[n,t]),o=(0,a.I4)((()=>{n({url:void 0})}),[n]),i=(0,Ie.Z)(t);return a.ZP.createElement(Xe.Z,{isOpen:Boolean(t),onClose:o,title:r("OpenUrlTitle"),textParts:(0,Pe.Z)(r("OpenUrlAlert2",i),["links"]),confirmLabel:r("OpenUrlTitle"),confirmHandler:l})})),_e=2147483647e3,Ye=["lng_weekday1","lng_weekday2","lng_weekday3","lng_weekday4","lng_weekday5","lng_weekday6","lng_weekday7"];function He(e,t,n,a,s){const r=new Date(e,t,n),l=a&&(0,j.$Y)(a),o=s&&(0,j.$Y)(s);return!!(o&&r>o)||!!(l&&r{let{selectedAt:t,minAt:n,maxAt:s,isFutureMode:r,isPastMode:l,isOpen:o,withTimePicker:i,submitButtonLabel:c,secondButtonLabel:d,onClose:m,onSubmit:u,onSecondButtonClick:Z}=e;const v=(0,h.Z)(),g=new Date,p=(0,a.Ye)((()=>r&&!n?new Date:new Date(Math.max(n||0,0))),[r,n]),E=(0,a.Ye)((()=>l&&!s?new Date:new Date(Math.min(s||_e,_e))),[l,s]),C=(0,a.Ye)((()=>t?new Date(t):new Date),[t]),f=(0,P.Z)(o),[b,I,y]=(0,ye.Z)(!1),[N,k]=(0,a.eJ)(C),[S,w]=(0,a.eJ)(new Date(N.getFullYear(),N.getMonth(),1)),[M,T]=(0,a.eJ)(Ve(C.getHours())),[A,L]=(0,a.eJ)(Ve(C.getMinutes())),F=qe(N.getFullYear(),N.getMonth(),N.getDate()),B=S.getFullYear(),$=S.getMonth();(0,a.d4)((()=>{!f&&o&&(k(C),w(new Date(C.getFullYear(),C.getMonth(),1)),i&&(T(Ve(C.getHours())),L(Ve(C.getMinutes()))))}),[C,o,f,i]),(0,a.d4)((()=>{r&&!b&&N.getTime(){l&&!b&&N.getTime()>E.getTime()&&(k(E),T(Ve(E.getHours())),L(Ve(E.getMinutes())))}),[r,l,b,E,p,N]),(0,a.d4)((()=>{if(t){const e=new Date(t);k(e),T(Ve(e.getHours())),L(Ve(e.getMinutes()))}}),[t]);const x=l&&B>=g.getFullYear()&&$>=g.getMonth()||E&&B>=E.getFullYear()&&$>=E.getMonth(),D=r&&B<=g.getFullYear()&&$<=g.getMonth(),{prevMonthGrid:O,currentMonthGrid:U,nextMonthGrid:G}=(0,a.Ye)((()=>function(e,t){const n=[],a=[],s=[],r=new Date;r.setDate(1),r.setMonth(t),r.setFullYear(e);const l=r.getDay(),o=new Date(e,t,0).getDate();for(let e=1;e0)for(let e=1;e<=7-i;e++)s.push(e);return{prevMonthGrid:n,currentMonthGrid:a,nextMonthGrid:s}}(B,$)),[$,B]),J=(0,a.Ye)((()=>c||function(e,t){const n=(0,j.xH)(t,e.code);return n===(0,j.xH)(new Date,e.code)?e("Conversation.ScheduleMessage.SendToday",(0,j.mr)(e,t)):e("Conversation.ScheduleMessage.SendOn",[n,(0,j.mr)(e,t)])}(v,N)),[v,N,c]),z=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return T(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),23)),a=new Date(N.getTime());a.setHours(n),k(a);const s=Ve(n);T(s),e.target.value=s}),[N]),_=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return L(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),59)),a=new Date(N.getTime());a.setMinutes(n),k(a);const s=Ve(n);L(s),e.target.value=s}),[N]);return a.ZP.createElement(Me.Z,{isOpen:o,onClose:m,className:"CalendarModal"},a.ZP.createElement("div",{className:"container"},a.ZP.createElement("div",{className:"month-selector"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:m},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h4",null,v(`lng_month${$+1}`)," ",B),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",disabled:D,onClick:D?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()-1),t}))}},a.ZP.createElement("i",{className:"icon-previous"})),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",disabled:x,onClick:x?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()+1),t}))}},a.ZP.createElement("i",{className:"icon-next"})))),a.ZP.createElement("div",{className:"calendar-wrapper"},a.ZP.createElement("div",{className:"calendar-grid"},Ye.map((e=>a.ZP.createElement("div",{className:"day-button faded weekday"},a.ZP.createElement("span",null,v(e))))),O.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))),U.map((e=>a.ZP.createElement("div",{role:"button",tabIndex:0,onClick:()=>{return t=e,void k((e=>{const n=new Date(e);return n.setDate(t),n.setMonth($),n.setFullYear(B),n}));var t},className:(0,X.Z)("day-button",He(B,$,e,p,E)?"disabled":e?"clickable":"",F===qe(B,$,e)&&"selected")},Boolean(e)&&a.ZP.createElement("span",null,e)))),G.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))))),i&&a.ZP.createElement("div",{className:"timepicker"},a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:M,onChange:z,onFocus:I,onBlur:y}),":",a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:A,onChange:_,onFocus:I,onBlur:y})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(R.Z,{onClick:function(){u(N)}},J),d&&a.ZP.createElement(R.Z,{onClick:Z,isText:!0},d)))})),Ke=(0,a.X$)((0,s.c$)((e=>({selectedAt:e.historyCalendarSelectedAt})))((e=>{let{isOpen:t,selectedAt:n}=e;const{searchMessagesByDate:r,closeHistoryCalendar:l}=(0,s.uC)(),o=(0,a.I4)((e=>{r({timestamp:e.valueOf()/1e3}),l()}),[l,r]),i=(0,h.Z)();return a.ZP.createElement(je,{isOpen:t,selectedAt:n,isPastMode:!0,submitButtonLabel:i("JumpToDate"),onClose:l,onSubmit:o})}))),We=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n,isSchedule:a}=t;const{threadId:s}=(0,p.Bt)(e)||{},{canDeleteForAll:r}=s&&(0,p._k)(e,n,s)||{},l=(0,p.Z1)(e,n.chatId);return{canDeleteForAll:!a&&r,contactName:l&&(0,g.YC)(l.id)?(0,g.Vl)((0,p.dy)(e,(0,g.zX)(l))):void 0,willDeleteForCurrentUserOnly:l&&(0,g.G9)(l)&&!r,willDeleteForAll:l&&(0,g.ZV)(l)}}))((e=>{let{isOpen:t,isSchedule:n,message:r,album:l,canDeleteForAll:o,contactName:i,willDeleteForCurrentUserOnly:c,willDeleteForAll:d,onClose:m}=e;const{deleteMessages:u,deleteScheduledMessages:Z}=(0,s.uC)(),v=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];u({messageIds:e,shouldDeleteForAll:!0}),m()}),[u,r.id,m,l]),P=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];n?Z({messageIds:e}):u({messageIds:e,shouldDeleteForAll:!1}),m()}),[l,r.id,n,m,Z,u]),g=(0,h.Z)();return a.ZP.createElement(Me.Z,{isOpen:t,onClose:m,onEnter:t&&!o?P:void 0,className:"delete",title:g("DeleteSingleMessagesTitle")},a.ZP.createElement("p",null,g("AreYouSureDeleteSingleMessage")),c&&a.ZP.createElement("p",null,g("lng_delete_for_me_chat_hint",1,"i")),d&&a.ZP.createElement("p",null,g("lng_delete_for_everyone_hint",1,"i")),o&&a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:v},i&&(0,Pe.Z)(g("Conversation.DeleteMessagesFor",i)),!i&&g("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:P},g(o?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},g("Cancel")))}))),Qe=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,g.YC)(n),s=(0,p.FM)(e,n),r=(0,p.Z1)(e,n),l=Boolean(r)&&(0,g.eA)(r),o=Boolean(r)&&(0,g.G9)(r),i=Boolean(r)&&(0,g.ZV)(r);return{isPrivateChat:a,isChatWithSelf:s,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:a&&!s||i||o,contactName:r&&(0,g.YC)(r.id)?(0,g.Vl)((0,p.dy)(e,(0,g.zX)(r))):void 0}}))((e=>{let{isOpen:t,messageId:n,chatId:r,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:c,contactName:d,onClose:m}=e;const{pinMessage:u}=(0,s.uC)(),Z=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1}),m()}),[u,r,n,m]),v=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1,isOneSide:!0,isSilent:!0}),m()}),[r,n,m,u]),P=(0,h.Z)();return a.ZP.createElement(Me.Z,{isOpen:t,onClose:m,className:"pin",title:P("PinMessageAlertTitle")},a.ZP.createElement("p",null,P(l?"PinMessageAlertChannel":o||i?"PinMessageAlert":"PinMessageAlertChat")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:v},P("DialogPin")),c&&a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:Z},d?(0,Pe.Z)(P("Conversation.PinMessagesFor",d)):P("Conversation.PinMessageAlert.PinAndNotifyMembers")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},P("Cancel")))}))),et=(0,a.X$)((e=>{let{isOpen:t,pinnedMessagesCount:n=0,onClose:s,onUnpin:r}=e;const l=(0,h.Z)();return a.ZP.createElement(Me.Z,{isOpen:t,onClose:s,className:"unpin-all",title:l("Chat.PanelUnpinAllMessages")},a.ZP.createElement("p",null,l("Chat.UnpinAllMessagesConfirmation",n,"i")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},l("DialogUnpin")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:s},l("Cancel")))}));var tt=n(517);const nt=(0,a.X$)((0,s.c$)(((e,t)=>{let{isSchedule:n}=t;const{messageIds:a}=e.selectedMessages||{},{canDeleteForAll:s}=(0,p.xl)(e),r=(0,p.jr)(e);return{selectedMessageIds:a,canDeleteForAll:!n&&s,contactName:r&&(0,g.YC)(r.id)?(0,g.Vl)((0,p.dy)(e,(0,g.zX)(r))):void 0,willDeleteForCurrentUserOnly:r&&(0,g.G9)(r)&&!s,willDeleteForAll:r&&(0,g.ZV)(r)}}))((e=>{let{isOpen:t,isSchedule:n,selectedMessageIds:r,canDeleteForAll:l,contactName:o,willDeleteForCurrentUserOnly:i,willDeleteForAll:c,onClose:d}=e;const{deleteMessages:m,deleteScheduledMessages:u,exitMessageSelectMode:Z}=(0,s.uC)(),v=(0,P.Z)(t),g=(0,a.I4)((()=>{d(),m({messageIds:r,shouldDeleteForAll:!0})}),[m,r,d]),p=(0,a.I4)((()=>{n?u({messageIds:r}):m({messageIds:r,shouldDeleteForAll:!1}),d()}),[n,d,u,r,m]),E=(0,h.Z)();if((0,a.d4)((()=>{!t&&v&&Z()}),[Z,t,v]),r)return a.ZP.createElement(Me.Z,{isOpen:t,onClose:d,onEnter:l?void 0:p,className:"delete",title:E("Conversation.DeleteManyMessages")},a.ZP.createElement("p",null,E("AreYouSureDeleteFewMessages")),i&&a.ZP.createElement("p",null,"This will delete them just for you, not for other participants in the chat."),c&&a.ZP.createElement("p",null,"This will delete them for everyone in this chat."),l&&a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:g},o?(0,Pe.Z)(E("ChatList.DeleteForEveryone",o)):E("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:p},E(l?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},E("Cancel")))})));var at=n(4434);const st=(0,a.X$)((e=>{let{isOpen:t,messageIds:n,onClose:r}=e;const{reportMessages:l,exitMessageSelectMode:o}=(0,s.uC)(),[i,c]=(0,a.eJ)("spam"),[d,m]=(0,a.eJ)(""),u=()=>{l({messageIds:n,reason:i,description:d}),o(),r()},Z=(0,a.I4)((e=>{c(e)}),[]),v=(0,a.I4)((e=>{m(e.target.value)}),[]),P=(0,h.Z)(),g=[{value:"spam",label:P("lng_report_reason_spam")},{value:"violence",label:P("lng_report_reason_violence")},{value:"pornography",label:P("lng_report_reason_pornography")},{value:"childAbuse",label:P("lng_report_reason_child_abuse")},{value:"copyright",label:P("ReportPeer.ReasonCopyright")},{value:"other",label:P("lng_report_reason_other")}];if(n)return a.ZP.createElement(Me.Z,{isOpen:t,onClose:r,onEnter:t?u:void 0,className:"report",title:P("lng_report_message_title")},a.ZP.createElement(at.Z,{name:"report-message",options:g,onChange:Z,selected:i}),a.ZP.createElement(Te.Z,{label:P("lng_report_reason_description"),value:d,onChange:v}),a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:u},P("lng_report_button")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},P("Cancel")))})),rt=(0,a.X$)((0,s.c$)((e=>{const{type:t,chatId:n}=(0,p.Bt)(e)||{},{canDelete:a}=(0,p.xl)(e),s=(0,p.nB)(e),r=(0,p.Nu)(e),{messageIds:l}=e.selectedMessages||{},o=!!n&&(0,p.ku)(e,n,l);return{isSchedule:"scheduled"===t,selectedMessagesCount:(0,p.D7)(e),canDeleteMessages:a,canReportMessages:s,canDownloadMessages:r,selectedMessageIds:l,hasProtectedMessage:o}}))((e=>{let{canPost:t,isActive:n,messageListType:r,isSchedule:l,selectedMessagesCount:o,canDeleteMessages:i,canReportMessages:c,canDownloadMessages:d,hasProtectedMessage:m,selectedMessageIds:u}=e;const{exitMessageSelectMode:Z,openForwardMenuForSelectedMessages:v,downloadSelectedMessages:g}=(0,s.uC)(),[p,E,C]=(0,ye.Z)(),[f,b,I]=(0,ye.Z)();(0,a.d4)((()=>!n||p||f?void 0:(0,tt.Z)({onBackspace:E,onDelete:E,onEsc:Z})),[n,p,f,E,Z]);const y=(0,a.I4)((()=>{g(),Z()}),[g,Z]),N=(0,P.Z)(o||void 0,!0),k=n?o:N,S=(0,h.Z)(),w=S("VoiceOver.Chat.MessagesSelected",k,"i"),M=(0,X.Z)("MessageSelectToolbar",t&&"with-composer",n&&"shown"),T=(e,t,n,s,r)=>a.ZP.createElement("div",{role:"button",tabIndex:0,className:(0,X.Z)("item",s&&"disabled",r&&"destructive"),onClick:s?void 0:n,title:t},a.ZP.createElement("i",{className:`icon-${e}`}));return a.ZP.createElement("div",{className:M},a.ZP.createElement("div",{className:"MessageSelectToolbar-inner"},a.ZP.createElement(R.Z,{color:"translucent",round:!0,onClick:Z,ariaLabel:"Exit select mode"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("span",{className:"MessageSelectToolbar-count",title:w},w),Boolean(o)&&a.ZP.createElement("div",{className:"MessageSelectToolbar-actions"},"scheduled"!==r&&T("forward",S("Chat.ForwardActionHeader"),v,m),c&&T("flag",S("Conversation.ReportMessages"),b),d&&T("download",S("lng_media_download"),y,m),T("delete",S("EditAdminGroupDeleteMessages"),E,!i,!0))),a.ZP.createElement(nt,{isOpen:p,isSchedule:l,onClose:C}),a.ZP.createElement(st,{isOpen:f,onClose:I,messageIds:u}))}))),lt=(0,a.X$)((0,s.c$)((e=>{var t;const{chatId:n,messageId:a}=e.seenByModal||{};return n&&a?{memberIds:null===(t=(0,p.hj)(e,n,a))||void 0===t?void 0:t.seenByUserIds}:{}}))((e=>{let{isOpen:t,memberIds:n}=e;const{openChat:r,closeSeenByModal:l}=(0,s.uC)(),o=(0,h.Z)(),i=(0,a.I4)((e=>{l(),setTimeout((()=>{r({id:e})}),100)}),[l,r]),c=(0,Ie.Z)(n,!0);return a.ZP.createElement(Me.Z,{isOpen:t,onClose:l,className:"narrow",title:"Which users read the message"},a.ZP.createElement("div",{dir:o.isRtl?"rtl":void 0},c&&c.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable scroll-item small-icon",onClick:()=>i(e)},a.ZP.createElement(Fe.Z,{userId:e,noStatusOrTyping:!0}))))),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:l},o("Close")))})));var ot=n(2155),it=n(8198);const ct=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,messageId:n}=e.reactorModal||{},a=t&&n?(0,p.hj)(e,t,n):void 0;return{chatId:t,messageId:n,reactions:null==a?void 0:a.reactions,reactors:null==a?void 0:a.reactors,seenByUserIds:null==a?void 0:a.seenByUserIds}}))((e=>{let{isOpen:t,reactors:n,reactions:r,chatId:o,messageId:i,seenByUserIds:c}=e;const{loadReactors:d,closeReactorListModal:m,openChat:u}=(0,s.uC)(),Z=(0,s.Rd)().users.byId,v=(0,h.Z)(),[P,p,E]=(0,ye.Z)(!1),[C,f]=(0,a.eJ)(void 0),b=n&&r&&n.count>=10&&r.results.length>1,I=(0,a.sO)();(0,a.d4)((()=>{P&&!t&&(E(),f(void 0))}),[P,t,E]);const y=(0,a.I4)((()=>{I.current&&u({id:I.current}),m()}),[m,u]),N=(0,a.I4)((()=>{p()}),[p]),k=(0,a.I4)((e=>{I.current=e,N()}),[N]),S=(0,a.I4)((()=>{d({chatId:o,messageId:i})}),[o,d,i]),w=(0,a.Ye)((()=>null!=n&&n.reactions?(0,me.Tw)(n.reactions.map((e=>e.reaction))):[]),[null==n?void 0:n.reactions]),M=(0,a.Ye)((()=>C?null==n?void 0:n.reactions.filter((e=>e.reaction===C)).map((e=>e.userId)):(0,me.Tw)((null==n?void 0:n.reactions.map((e=>e.userId)).concat(c||[]))||[])),[C,null==n?void 0:n.reactions,c]),[T,A]=(0,Ne.Z)(S,M,n&&void 0===n.nextOffset);return(0,a.d4)((()=>{null==A||A({direction:l.Uq.Backwards})}),[A]),a.ZP.createElement(Me.Z,{isOpen:t&&!P,onClose:N,className:"ReactorListModal narrow",title:v("Reactions"),onCloseAnimationEnd:y},b&&a.ZP.createElement("div",{className:"Reactions"},a.ZP.createElement(R.Z,{className:(0,X.Z)(!C&&"chosen"),size:"tiny",ripple:!0,onClick:()=>f(void 0)},a.ZP.createElement("i",{className:"icon-reaction-filled"}),(null==n?void 0:n.count)&&(0,ot.bi)(n.count)),w.map((e=>{var t;const n=null==r||null===(t=r.results.find((t=>t.reaction===e)))||void 0===t?void 0:t.count;return a.ZP.createElement(R.Z,{className:(0,X.Z)(C===e&&"chosen"),size:"tiny",ripple:!0,onClick:()=>f(e)},a.ZP.createElement(it.Z,{reaction:e,className:"reaction-filter-emoji"}),n&&(0,ot.bi)(n))}))),a.ZP.createElement("div",{dir:v.isRtl?"rtl":void 0},null!=T&&T.length?a.ZP.createElement(Re.Z,{className:"reactor-list custom-scroll",items:T,onLoadMore:A},null==T?void 0:T.map((e=>{var t;const s=Z[e],r=(0,g.Js)(s),l=null==n||null===(t=n.reactions.find((t=>t.userId===e)))||void 0===t?void 0:t.reaction;return a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable reactors-list-item",onClick:()=>k(e)},a.ZP.createElement(ge.Z,{user:s,size:"medium"}),a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,Pe.Z)(r))),l&&a.ZP.createElement(it.Z,{className:"reactors-list-emoji",reaction:l}))}))):a.ZP.createElement(we.Z,null)),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},v("Close")))})));var dt=n(7324),mt=n(7799);const ut=(0,a.X$)((0,s.c$)(((e,t)=>{let{activeEmojiInteraction:n}=t;const a=void 0!==n.animatedEffect&&(0,p.tH)(e,n.animatedEffect);return{effectAnimationId:a?a.id:void 0,localEffectAnimation:!a&&n.animatedEffect&&Object.keys(dt.x).includes(n.animatedEffect)?n.animatedEffect:void 0}}))((e=>{let{effectAnimationId:t,localEffectAnimation:n,activeEmojiInteraction:l}=e;const{stopActiveEmojiInteraction:o}=(0,s.uC)(),[c,d]=(0,ye.Z)(!1),[u,h]=(0,ye.Z)(!1),v=(0,a.sO)(),P=(0,a.I4)((()=>{d(),v.current&&clearTimeout(v.current),setTimeout((()=>{o({id:l.id})}),250)}),[l.id,d,o]),g=(0,a.I4)((e=>{var t;null!==(t=e.target)&&void 0!==t&&t.closest(".AnimatedEmoji")||P()}),[P]);(0,a.d4)((()=>(document.addEventListener("touchstart",g),document.addEventListener("touchmove",g),document.addEventListener("mousedown",g),document.addEventListener("wheel",g),()=>{document.removeEventListener("touchstart",g),document.removeEventListener("touchmove",g),document.removeEventListener("mousedown",g),document.removeEventListener("wheel",g)})),[g]),(0,a.bt)((()=>{const e=(0,m.YW)();v.current=setTimeout((()=>{P(),e()}),3e3)}),[P]);const p=(0,Z.Z)(`sticker${t}`,!t,r.IU.Lottie),[E,C]=(0,a.eJ)();if((0,a.d4)((()=>{n&&(0,dt.Z)(n).then((e=>{C(e)}))}),[n]),!l.startSize)return;const f=(l.startSize||0)/240;return a.ZP.createElement("div",{className:(0,X.Z)("EmojiInteractionAnimation",c&&"hiding",u&&"playing",l.isReversed&&"reversed"),style:`--scale: ${f}; --start-x: ${l.x}px; --start-y: ${l.y}px;`},a.ZP.createElement(mt.Z,{key:`effect_${t}`,id:`effect_${t}`,size:240,animationData:E||p,play:u,quality:i.wZ?.5:void 0,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:h}))})));var ht=n(3133),Zt=n(735),vt=n(1470);const Pt=e=>{const t=(0,a.sO)(null),n=(0,a.I4)((n=>{"Enter"===n.key&&t.current===document.activeElement&&e()}),[e]);return(0,a.d4)((()=>(window.addEventListener("keydown",n,!1),()=>window.removeEventListener("keydown",n,!1))),[n]),t};var gt=n(329),pt=n(742);const Et=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),r=s&&(0,g.zX)(s);return{chat:s,user:r?(0,p.dy)(e,r):void 0,isPinned:(0,p.ep)(e,a),isMuted:s?(0,g.i4)(s,(0,p.dZ)(e),(0,p.NJ)(e)):void 0,canChangeFolder:Boolean(null===(n=e.chatFolders.orderedIds)||void 0===n?void 0:n.length)}}))((e=>{let{chatId:t,withUsername:n,onClick:s,chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c}=e;const[d,m,u]=(0,ye.Z)(),[h,Z,v]=(0,ye.Z)(),P=(0,vt.Z)({chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c,handleDelete:m,handleChatFolderChange:Z},!0),p=()=>{s(t)},E=Pt(p);if(r)return a.ZP.createElement(Ae.Z,{className:"chat-item-clickable search-result",onClick:p,contextActions:P,buttonRef:E},(0,g.YC)(t)?a.ZP.createElement(Fe.Z,{userId:t,withUsername:n,avatarSize:"large"}):a.ZP.createElement(Le.Z,{chatId:t,withUsername:n,avatarSize:"large"}),a.ZP.createElement(gt.Z,{isOpen:d,onClose:u,chat:r}),a.ZP.createElement(pt.Z,{isOpen:h,onClose:v,chatId:t}))})));var Ct=n(8781);const ft=(0,G.P2)((e=>e()),6e4,!0),bt=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.topPeers,n=e.users.byId,{recentlyFoundChatIds:a}=e.globalSearch;return{topUserIds:t,usersById:n,recentlyFoundChatIds:a}}))((e=>{let{topUserIds:t,usersById:n,recentlyFoundChatIds:r,onReset:l}=e;const{loadTopUsers:o,loadContactList:i,openChat:c,addRecentlyFoundChatId:d,clearRecentlyFoundChats:m}=(0,s.uC)(),u=(0,a.sO)(null);(0,a.d4)((()=>{ft((()=>{o(),i()}))}),[o,i]),(0,Ct.Z)(u.current,!t);const Z=(0,a.I4)((e=>{c({id:e,shouldReplaceHistory:!0}),l(),setTimeout((()=>{d({id:e})}),250)}),[c,d,l]),v=(0,h.Z)();return a.ZP.createElement("div",{className:"RecentContacts custom-scroll"},t&&a.ZP.createElement("div",{className:"top-peers-section",dir:v.isRtl?"rtl":void 0},a.ZP.createElement("div",{ref:u,className:"top-peers no-selection"},t.map((e=>a.ZP.createElement("div",{className:"top-peer-item",onClick:()=>Z(e),dir:v.isRtl?"rtl":void 0},a.ZP.createElement(ge.Z,{user:n[e]}),a.ZP.createElement("div",{className:"top-peer-name"},(0,Pe.Z)((0,g.Vl)(n[e])||" "))))))),r&&a.ZP.createElement("div",{className:"search-section pt-1"},a.ZP.createElement("h3",{className:"section-heading mt-0 recent-chats-header",dir:v.isRtl?"rtl":void 0},v("Recent"),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",ariaLabel:"Clear recent chats",onClick:m,isRtl:v.isRtl},a.ZP.createElement("i",{className:"icon-close"}))),r.map((e=>a.ZP.createElement(Et,{chatId:e,onClick:Z})))))})));var It=n(9411),yt=n(8033);const Nt=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n);if(!a)return{};const s=(0,g.zX)(a);return{chat:a,lastSyncTime:e.lastSyncTime,...s&&{privateChatUser:(0,p.dy)(e,s)}}}))((e=>{let{message:t,searchQuery:n,chatId:r,chat:l,privateChatUser:o,lastSyncTime:c}=e;const{focusMessage:d}=(0,s.uC)(),m=(0,g.DH)(t),u=(0,Z.Z)((0,g.Ti)(t,"micro")),v=Boolean((0,g.Y5)(t)),P=(0,a.I4)((()=>{d({chatId:r,messageId:t.id})}),[r,d,t.id]),p=(0,h.Z)(),E=Pt(P);if(l)return a.ZP.createElement(Ae.Z,{className:"ChatMessage chat-item-clickable",ripple:!i.wB,onClick:P,buttonRef:E},a.ZP.createElement(ge.Z,{chat:l,user:o,isSavedMessages:null==o?void 0:o.isSelf,lastSyncTime:c}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"info-row"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},(0,Pe.Z)((0,g.U)(p,l,o))),l.isVerified&&a.ZP.createElement(It.Z,null)),a.ZP.createElement("div",{className:"message-date"},a.ZP.createElement(yt.Z,{className:"date"},(0,j.VX)(p,1e3*t.date)))),a.ZP.createElement("div",{className:"subtitle"},a.ZP.createElement("div",{className:"message",dir:"auto"},function(e,t,n,s,r){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:r?"round":void 0}),(0,g.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,y.e)(e,t,!0,s)):(0,y.e)(e,t,void 0,s)}(p,t,u||m,n,v)))))}))),kt=(0,a.X$)((e=>{let{searchDate:t,onSelect:n}=e;const s=(0,a.Ye)((()=>function(e){if(e.match(/^\d{2,4}-\d{2}-\d{2}$/g)){const t=new Date(e);return[{date:t,text:(0,j.xH)(t)}]}const t=[],n=new Date,a=n.getFullYear(),s=n.getTime()>new Date(`${a}-${e}`).getTime()?a:a-1;for(let n=0;n<8;n++){const a=new Date(`${s-n}-${e}`);t.push({date:a,text:(0,j.xH)(a)})}return t}(t)),[t]);return a.ZP.createElement("section",{className:"DateSuggest custom-scroll custom-scroll-x"},s.map((e=>{let{date:t,text:s}=e;return a.ZP.createElement("div",{onClick:()=>n(t),className:"date-item",key:s},a.ZP.createElement("i",{className:"icon-calendar"}),a.ZP.createElement("span",null,s))})))}));var St=n(7262),wt=n(9187);const Mt=(0,G.P2)((e=>e()),500,!0),Tt=(0,a.X$)((0,s.c$)((e=>{var t;const{byId:n}=e.chats,{userIds:a}=e.contactList||{};if(!a)return{chatsById:n};const{currentUserId:s,messages:r,lastSyncTime:l}=e,{fetchingStatus:o,globalResults:i,localResults:c,resultsByType:d}=e.globalSearch,{chatIds:m,userIds:u}=i||{},{chatIds:h,userIds:Z}=c||{},{byChatId:v}=r;return{currentUserId:s,localContactIds:a,localChatIds:h,localUserIds:Z,globalChatIds:m,globalUserIds:u,foundIds:null==d||null===(t=d.text)||void 0===t?void 0:t.foundIds,globalMessagesByChatId:v,chatsById:n,fetchingStatus:o,lastSyncTime:l}}))((e=>{let{searchQuery:t,searchDate:n,dateSearchQuery:r,currentUserId:o,localContactIds:c,localChatIds:d,localUserIds:m,globalChatIds:u,globalUserIds:Z,foundIds:v,globalMessagesByChatId:P,chatsById:p,fetchingStatus:E,lastSyncTime:C,onReset:f,onSearchDateSelect:b}=e;const{openChat:I,addRecentlyFoundChatId:N,searchMessagesGlobal:k,setGlobalSearchChatId:S}=(0,s.uC)(),w=(0,h.Z)(),[M,T]=(0,a.eJ)(!1),[R,A]=(0,a.eJ)(!1),L=(0,a.I4)((e=>{let{direction:n}=e;C&&n===l.Uq.Backwards&&Mt((()=>{k({type:"text",query:t})}))}),[C,k,t]),F=(0,a.I4)((e=>{I({id:e,shouldReplaceHistory:!0}),e!==o&&N({id:e}),i.wB||f()}),[o,I,N,f]),B=(0,a.I4)((e=>{S({id:e})}),[S]),$=(0,a.Ye)((()=>{if(!t||t.startsWith("@")&&t.length<2)return Zt.D;const e=[...o?[o]:[],...c||[]],n=(0,s.Rd)().users.byId,a=(0,g.kK)(e,n,t,o,w("SavedMessages"));return[...(0,g.ih)((0,me.Tw)([...a||[],...d||[],...m||[]]),p,void 0,o?[o]:void 0)]}),[t,o,c,w,d,m,p]),x=(0,a.Ye)((()=>!t||t.length<4||!u||!Z?Zt.D:(0,g.ih)((0,me.Tw)([...u,...Z]),p,!0)),[p,u,Z,t]),D=(0,a.Ye)((()=>(t||n)&&v&&0!==v.length?v.map((e=>{var t;const[n,a]=e.split("_");return null==P||null===(t=P[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):Zt.D),[v,P,t,n]),O=(0,a.I4)((()=>{T(!M)}),[M]),U=(0,a.I4)((()=>{A(!R)}),[R]),G=E&&!E.chats&&!E.messages&&!$.length&&!x.length&&!D.length;return t||n?a.ZP.createElement(Re.Z,{className:"LeftSearch custom-scroll",items:D,onLoadMore:L,noScrollRestoreOnTop:!0,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(kt,{searchDate:r,onSelect:b})),G&&a.ZP.createElement(St.Z,{text:w("ChatList.Search.NoResults"),description:w("ChatList.Search.NoResultsDescription")}),Boolean($.length)&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar",dir:w.isRtl?"rtl":void 0},$.map((e=>a.ZP.createElement(wt.Z,{chatOrUserId:e,onClick:B,clickArg:e})))),Boolean($.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:w.isRtl?"auto":void 0},$.length>5&&a.ZP.createElement(yt.Z,{onClick:O},w(M?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),w("DialogList.SearchSectionDialogs")),$.map(((e,t)=>{if(M||!(t>=5))return a.ZP.createElement(Et,{chatId:e,onClick:F})}))),Boolean(x.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:w.isRtl?"auto":void 0},x.length>5&&a.ZP.createElement(yt.Z,{onClick:U},w(R?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),w("DialogList.SearchSectionGlobal")),x.map(((e,t)=>{if(R||!(t>=5))return a.ZP.createElement(Et,{chatId:e,withUsername:!0,onClick:F})}))),Boolean(D.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:w.isRtl?"auto":void 0},w("SearchMessages")),D.map((function(e){const n=(0,y.e)(w,e),s=p[e.chatId];if(n&&s)return a.ZP.createElement(Nt,{chatId:e.chatId,message:e,searchQuery:t})})))):a.ZP.createElement(bt,{onReset:f})}))),Rt=(0,G.P2)((e=>e()),500,!0),At=(0,a.X$)((0,s.c$)((e=>{const{byId:t}=e.chats,{currentUserId:n,messages:{byChatId:a},lastSyncTime:s}=e,{fetchingStatus:r,resultsByType:l}=e.globalSearch,{foundIds:o}=(null==l?void 0:l.text)||{};return{currentUserId:n,foundIds:o,globalMessagesByChatId:a,chatsById:t,fetchingStatus:r,lastSyncTime:s}}))((e=>{let{searchQuery:t,currentUserId:n,dateSearchQuery:r,foundIds:o,globalMessagesByChatId:i,chatsById:c,fetchingStatus:d,lastSyncTime:m,onSearchDateSelect:u}=e;const{searchMessagesGlobal:Z}=(0,s.uC)(),v=(0,h.Z)(),P=(0,a.I4)((e=>{let{direction:a}=e;m&&a===l.Uq.Backwards&&Rt((()=>{Z({type:"text",query:t,chatId:n})}))}),[n,m,Z,t]),g=(0,a.Ye)((()=>o&&0!==o.length?o.map((e=>{var t;const[n,a]=e.split("_");return null==i||null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):Zt.D),[o,i]),p=d&&!d.chats&&!d.messages&&!g.length;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content custom-scroll chat-list",items:g,onLoadMore:P,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(kt,{searchDate:r,onSelect:u})),p&&a.ZP.createElement(St.Z,{text:v("ChatList.Search.NoResults"),description:v("ChatList.Search.NoResultsDescription")}),g.map((function(e){const n=(0,y.e)(v,e),s=c[e.chatId];if(n&&s)return a.ZP.createElement(Nt,{chatId:e.chatId,message:e,searchQuery:t})}))))})));function Lt(e){return(t,n)=>{var a,s;const{byId:r}=t.chats,{byId:l}=t.users,{fetchingStatus:o,resultsByType:i,chatId:c}=t.globalSearch,d="audio"!==e?e:null!=n&&n.isVoice?"voice":"audio",{byChatId:m}=t.messages,u=null==i||null===(a=i[d])||void 0===a?void 0:a.foundIds,h=t.activeDownloads.byChatId;return{theme:(0,p.Pu)(t),isLoading:void 0===u||!!o&&Boolean(o.chats||o.messages),chatsById:r,usersById:l,globalMessagesByChatId:m,foundIds:u,searchChatId:c,activeDownloads:h,isChatProtected:c?null===(s=(0,p.Z1)(t,c))||void 0===s?void 0:s.isProtected:void 0,lastSyncTime:t.lastSyncTime}}}var Ft=n(7891),Bt=n(3657),$t=n(3709);const xt="media",Dt=(0,G.P2)((e=>e()),500,!0),Ot=(0,a.X$)((0,s.c$)(Lt(xt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,globalMessagesByChatId:i,foundIds:c,lastSyncTime:d,isChatProtected:m}=e;const{searchMessagesGlobal:u,openMediaViewer:Z}=(0,s.uC)(),v=(0,a.sO)(null),P=(0,h.Z)(),{observe:g}=(0,Bt.S1)({rootRef:v,throttleMs:500}),p=(0,a.I4)((e=>{let{direction:a}=e;d&&a===l.Uq.Backwards&&Dt((()=>{u({type:xt,query:t,chatId:n})}))}),[d,u,t,n]),E=(0,a.Ye)((()=>c&&i?c.map((e=>{var t;const[n,a]=e.split("_");return null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):Zt.D),[i,c]),C=(0,a.I4)(((e,t)=>{Z({chatId:t,messageId:e,origin:l.bZ.SearchResult})}),[Z]),f=(0,Ft.Z)([t],o.Y)&&!r,b=f&&c&&c.length>0&&!t,I=f&&c&&c.length>0&&t,y=(0,X.Z)("search-content custom-scroll",I&&"chat-list");return a.ZP.createElement("div",{ref:v,className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:y,items:E,itemSelector:t?".ListItem":".Media",onLoadMore:p,noFastList:!0},!f&&a.ZP.createElement(we.Z,null),f&&(!c||0===c.length)&&a.ZP.createElement(St.Z,{text:P("ChatList.Search.NoResults"),description:P("ChatList.Search.NoResultsDescription")}),b&&a.ZP.createElement("div",{className:"media-list",dir:P.isRtl?"rtl":void 0},E.map((e=>a.ZP.createElement($t.Z,{key:e.id,idPrefix:"search-media",message:e,isProtected:m||e.isProtected,observeIntersection:g,onClick:C})))),I&&E.map((e=>a.ZP.createElement(Nt,{key:e.id,chatId:e.chatId,message:e})))))})));var Ut=n(91),Gt=n(5418);const Jt="links",Xt=(0,G.P2)((e=>e()),500,!0),zt=(0,a.X$)((0,s.c$)(Lt(Jt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,lastSyncTime:u,isChatProtected:Z}=e;const{searchMessagesGlobal:v,focusMessage:P}=(0,s.uC)(),g=(0,a.sO)(null),p=(0,h.Z)(),{observe:E}=(0,Bt.S1)({rootRef:g,throttleMs:500}),C=(0,a.I4)((e=>{let{direction:a}=e;u&&a===l.Uq.Backwards&&Xt((()=>{v({type:Jt,query:t,chatId:n})}))}),[u,v,t,n]),f=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_");return null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):Zt.D),[d,m]),b=(0,a.I4)(((e,t)=>{P({chatId:t,messageId:e})}),[P]),I=(0,Ft.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:g,className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content documents-list custom-scroll",items:f,onLoadMore:C,noFastList:!0},!I&&a.ZP.createElement(we.Z,null),I&&(!m||0===m.length)&&a.ZP.createElement(St.Z,{text:p("ChatList.Search.NoResults"),description:p("ChatList.Search.NoResultsDescription")}),I&&m&&m.length>0&&f.map(((e,t)=>{const n=0===t||(0,j.kj)(e.date)!==(0,j.kj)(f[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",dir:p.isRtl?"rtl":void 0,key:e.id},n&&a.ZP.createElement("p",{className:"section-heading",dir:p.isRtl?"rtl":void 0},(0,j.np)(p,new Date(1e3*e.date))),a.ZP.createElement(Gt.Z,{key:e.id,message:e,senderTitle:(0,Ut.F)(p,e,i,c),isProtected:Z||e.isProtected,observeIntersection:E,onMessageClick:b}))}))))})));var _t=n(2535);const Yt="documents",Ht=(0,G.P2)((e=>e()),500,!0),Vt=(0,a.X$)((0,s.c$)(Lt(Yt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,activeDownloads:u,lastSyncTime:Z}=e;const{searchMessagesGlobal:v,focusMessage:P}=(0,s.uC)(),p=(0,a.sO)(null),E=(0,h.Z)(),{observe:C}=(0,Bt.S1)({rootRef:p,throttleMs:500}),f=(0,a.I4)((e=>{let{direction:a}=e;Z&&a===l.Uq.Backwards&&Ht((()=>{v({type:Yt,query:t,chatId:n})}))}),[Z,v,t,n]),b=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_"),s=null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)];return s&&(0,g.aE)(s)?s:void 0})).filter(Boolean):Zt.D),[d,m]),I=(0,a.I4)(((e,t)=>{P({chatId:t,messageId:e})}),[P]),y=(0,Ft.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:p,className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content documents-list custom-scroll",items:b,onLoadMore:f,noFastList:!0},!y&&a.ZP.createElement(we.Z,null),y&&(!m||0===m.length)&&a.ZP.createElement(St.Z,{text:E("ChatList.Search.NoResults"),description:E("ChatList.Search.NoResultsDescription")}),y&&m&&m.length>0&&b.map(((e,t)=>{var n;const s=0===t||(0,j.kj)(e.date)!==(0,j.kj)(b[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},s&&a.ZP.createElement("p",{className:"section-heading"},(0,j.np)(E,new Date(1e3*e.date))),a.ZP.createElement(_t.Z,{message:e,withDate:!0,datetime:e.date,smaller:!0,sender:(0,Ut.F)(E,e,i,c),className:"scroll-item",isDownloading:null===(n=u[e.chatId])||void 0===n?void 0:n.includes(e.id),observeIntersection:C,onDateClick:I}))}))))})));var qt=n(4752);const jt=(0,G.P2)((e=>e()),500,!0),Kt=(0,a.X$)((0,s.c$)(Lt("audio"))((e=>{let{theme:t,isVoice:n,searchQuery:r,searchChatId:i,isLoading:c,chatsById:d,usersById:m,globalMessagesByChatId:u,foundIds:Z,lastSyncTime:v,activeDownloads:P}=e;const{searchMessagesGlobal:g,focusMessage:p,openAudioPlayer:E}=(0,s.uC)(),C=(0,h.Z)(),f=n?"voice":"audio",b=(0,a.I4)((e=>{let{direction:t}=e;v&&t===l.Uq.Backwards&&jt((()=>{g({type:f,query:r,chatId:i})}))}),[f,v,g,r,i]),I=(0,a.Ye)((()=>Z&&u?Z.map((e=>{var t;const[n,a]=e.split("_");return null===(t=u[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):Zt.D),[u,Z]),y=(0,a.I4)(((e,t)=>{p({chatId:t,messageId:e})}),[p]),N=(0,a.I4)(((e,t)=>{E({chatId:t,messageId:e})}),[E]),k=(0,Ft.Z)([r],o.Y)&&!c;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content documents-list custom-scroll",items:I,onLoadMore:b,noFastList:!0},!k&&a.ZP.createElement(we.Z,null),k&&(!Z||0===Z.length)&&a.ZP.createElement(St.Z,{text:C("ChatList.Search.NoResults"),description:C("ChatList.Search.NoResultsDescription")}),k&&Z&&Z.length>0&&I.map(((e,n)=>{var s;const r=0===n||(0,j.kj)(e.date)!==(0,j.kj)(I[n-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},r&&a.ZP.createElement("p",{className:"section-heading",dir:C.isRtl?"rtl":void 0},(0,j.np)(C,new Date(1e3*e.date))),a.ZP.createElement(qt.Z,{key:e.id,theme:t,message:e,origin:l.Cr.Search,senderTitle:(0,Ut.F)(C,e,d,m),date:e.date,lastSyncTime:v,className:"scroll-item",onPlay:N,onDateClick:y,isDownloading:null===(s=P[e.chatId])||void 0===s?void 0:s.includes(e.id)}))}))))}))),Wt=[{type:l.nJ.ChatList,title:"SearchAllChatsShort"},{type:l.nJ.Media,title:"SharedMediaTab2"},{type:l.nJ.Links,title:"SharedLinksTab2"},{type:l.nJ.Files,title:"SharedFilesTab2"},{type:l.nJ.Music,title:"SharedMusicTab2"},{type:l.nJ.Voice,title:"SharedVoiceTab2"}],Qt=[{type:l.nJ.ChatList,title:"All Messages"},...Wt.slice(1)],en=Object.keys(l.nJ).length/2,tn=(0,a.X$)((0,s.c$)((e=>{const{currentContent:t,chatId:n}=e.globalSearch;return{currentContent:t,chatId:n}}))((e=>{let{searchQuery:t,searchDate:n,isActive:r,currentContent:o=l.nJ.ChatList,chatId:i,onReset:c}=e;const{setGlobalSearchContent:d,setGlobalSearchDate:m}=(0,s.uC)(),Z=(0,h.Z)(),[v,P]=(0,a.eJ)(o),g=(0,a.Ye)((()=>(0,j.xk)(t)),[t]),p=(0,a.I4)((e=>{const t=Wt[e];d({content:t.type}),P(e)}),[d]),E=(0,a.I4)((e=>{m({date:e.getTime()/1e3})}),[m]);(0,u.ZP)(r,c,void 0,void 0,!0);const C=(0,a.sO)(null),f=(0,ke.Z)(C,r,void 0,".ListItem-button",!0);return a.ZP.createElement("div",{className:"LeftSearch",ref:C,onKeyDown:f},a.ZP.createElement(ht.Z,{activeTab:v,tabs:i?Qt:Wt,onSwitchTab:p}),a.ZP.createElement(L.Z,{name:Z.isRtl?"slide-optimized-rtl":"slide-optimized",renderCount:en,activeKey:o},(()=>{switch(o){case l.nJ.ChatList:return i?a.ZP.createElement(At,{searchQuery:t,dateSearchQuery:g,onReset:c,onSearchDateSelect:E}):a.ZP.createElement(Tt,{searchQuery:t,searchDate:n,dateSearchQuery:g,onReset:c,onSearchDateSelect:E});case l.nJ.Media:return a.ZP.createElement(Ot,{searchQuery:t});case l.nJ.Links:return a.ZP.createElement(zt,{searchQuery:t});case l.nJ.Files:return a.ZP.createElement(Vt,{searchQuery:t});case l.nJ.Music:return a.ZP.createElement(Kt,{key:"audio",searchQuery:t});case l.nJ.Voice:return a.ZP.createElement(Kt,{key:"voice",isVoice:!0,searchQuery:t});default:return}})))})));var nn=n(1090);const an={currentPassword:"",password:"",hint:"",email:""},sn=(e,t)=>{switch(t.type){case"setCurrentPassword":return{...e,currentPassword:t.payload};case"setPassword":return{...e,password:t.payload};case"setHint":return{...e,hint:t.payload};case"setEmail":return{...e,email:t.payload};case"reset":return an;default:return e}},rn=(0,a.X$)((e=>{let{currentScreen:t,editedFolderId:n,onReset:r,onSaveFilter:o,onScreenSelect:c}=e;const{signOut:d,deleteChatFolder:m}=(0,s.uC)(),[u,Z]=(0,a.eJ)(!1),[v,P]=(0,a.eJ)(!1),g=(0,a.I4)((()=>{Z(!0)}),[]),p=(0,a.I4)((()=>{Z(!1)}),[]),E=(0,a.I4)((()=>{P(!0)}),[]),C=(0,a.I4)((()=>{P(!1)}),[]),f=(0,a.I4)((()=>{p(),d()}),[p,d]),b=(0,a.I4)((()=>{C(),m({id:n}),r()}),[n,C,m,r]),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(R.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]),y=(0,h.Z)();return a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:r,ariaLabel:y("AccDescrGoBack")},a.ZP.createElement("i",{className:"icon-arrow-left"})),function(){switch(t){case l.MT.EditProfile:return a.ZP.createElement("h3",null,y("lng_settings_information"));case l.MT.General:return a.ZP.createElement("h3",null,y("General"));case l.MT.QuickReaction:return a.ZP.createElement("h3",null,y("DoubleTapSetting"));case l.MT.Notifications:return a.ZP.createElement("h3",null,y("Notifications"));case l.MT.DataStorage:return a.ZP.createElement("h3",null,y("DataSettings"));case l.MT.Privacy:return a.ZP.createElement("h3",null,y("PrivacySettings"));case l.MT.Language:return a.ZP.createElement("h3",null,y("Language"));case l.MT.GeneralChatBackground:return a.ZP.createElement("h3",null,y("ChatBackground"));case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement("h3",null,y("SetColor"));case l.MT.PrivacyPhoneNumber:return a.ZP.createElement("h3",null,y("PrivacyPhone"));case l.MT.PrivacyLastSeen:return a.ZP.createElement("h3",null,y("PrivacyLastSeen"));case l.MT.PrivacyProfilePhoto:return a.ZP.createElement("h3",null,y("Privacy.ProfilePhoto"));case l.MT.PrivacyForwarding:return a.ZP.createElement("h3",null,y("PrivacyForwards"));case l.MT.PrivacyGroupChats:return a.ZP.createElement("h3",null,y("AutodownloadGroupChats"));case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement("h3",null,y("AlwaysShareWith"));case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement("h3",null,y("NeverShareWith"));case l.MT.PrivacyActiveSessions:return a.ZP.createElement("h3",null,y("SessionsTitle"));case l.MT.PrivacyBlockedUsers:return a.ZP.createElement("h3",null,y("BlockedUsers"));case l.MT.TwoFaDisabled:case l.MT.TwoFaEnabled:return a.ZP.createElement("h3",null,y("TwoStepVerification"));case l.MT.TwoFaNewPassword:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseReEnterPassword"));case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement("h3",null,y("PasswordHint"));case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement("h3",null,y("RecoveryEmailTitle"));case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement("h3",null,"Recovery Email Code");case l.MT.TwoFaCongratulations:return a.ZP.createElement("h3",null,y("TwoStepVerificationPasswordSet"));case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.Folders:return a.ZP.createElement("h3",null,y("Filters"));case l.MT.FoldersCreateFolder:return a.ZP.createElement("h3",null,y("FilterNew"));case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("FilterEdit")),n&&a.ZP.createElement(F.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(B.Z,{icon:"delete",destructive:!0,onClick:E},y("Delete"))));case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},t===l.MT.FoldersIncludedChats||t===l.MT.FoldersIncludedChatsFromChatList?a.ZP.createElement("h3",null,y("FilterInclude")):a.ZP.createElement("h3",null,y("FilterExclude")),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",className:"color-primary",onClick:o,ariaLabel:y("AutoDeleteConfirm")},a.ZP.createElement("i",{className:"icon-check"})));default:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("SETTINGS")),a.ZP.createElement(R.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",onClick:()=>c(l.MT.EditProfile),ariaLabel:y("lng_settings_information")},a.ZP.createElement("i",{className:"icon-edit"})),a.ZP.createElement(F.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(B.Z,{icon:"logout",onClick:g},y("LogOutTitle"))))}}(),a.ZP.createElement(Xe.Z,{isOpen:u,onClose:p,text:y("lng_sure_logout"),confirmLabel:y("AccountSettings.Logout"),confirmHandler:f,confirmIsDestructive:!0}),a.ZP.createElement(Xe.Z,{isOpen:v,onClose:C,text:y("FilterDeleteAlert"),confirmLabel:y("Delete"),confirmHandler:b,confirmIsDestructive:!0}))}));var ln=n(787),on=n(180);const cn=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t,lastSyncTime:n}=e;return{currentUser:t?(0,p.dy)(e,t):void 0,lastSyncTime:n}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,currentUser:o,lastSyncTime:i}=e;const{loadProfilePhotos:c}=(0,s.uC)(),d=(0,h.Z)(),m=null==o?void 0:o.id;return(0,a.d4)((()=>{m&&i&&c({profileId:m})}),[i,m,c]),(0,u.ZP)(t,r,n,l.MT.Main),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-main-menu"},o&&a.ZP.createElement(ln.Z,{userId:o.id,forceShowSelf:!0}),o&&a.ZP.createElement(on.Z,{chatOrUserId:o.id,forceShowSelf:!0}),a.ZP.createElement(Ae.Z,{icon:"settings",onClick:()=>n(l.MT.General)},d("Telegram.GeneralSettingsViewController")),a.ZP.createElement(Ae.Z,{icon:"unmute",onClick:()=>n(l.MT.Notifications)},d("Notifications")),a.ZP.createElement(Ae.Z,{icon:"lock",onClick:()=>n(l.MT.Privacy)},d("PrivacySettings")),a.ZP.createElement(Ae.Z,{icon:"data",onClick:()=>n(l.MT.DataStorage)},d("DataSettings")),a.ZP.createElement(Ae.Z,{icon:"folder",onClick:()=>n(l.MT.Folders)},d("Filters")),a.ZP.createElement(Ae.Z,{icon:"language",onClick:()=>n(l.MT.Language)},d("Language"))))})));var dn=n(710),mn=n(1151);const un="https://t.me/",hn=/https:\/\/t\.me\/?/i,Zn=/^([a-zA-Z0-9_]+)$/,vn=(0,G.Ds)((e=>e()),250,!1),Pn=(0,a.X$)((e=>{let{currentUsername:t,asLink:n,isLoading:s,isUsernameAvailable:r,checkUsername:l,onChange:o}=e;const[i,c]=(0,a.eJ)(t||""),d=(0,h.Z)(),m=n?"SetUrl":"Username",u=d(n?"SetUrlPlaceholder":"Username"),[Z,v]=(0,a.Ye)((()=>i.length?i.length<5?[void 0,`${u} is too short`]:i.length>32?[void 0,`${u} is too long`]:Zn.test(i)?void 0===r?[]:[r?d(`${m}Available`,"Username"):void 0,!1===r?d(`${m}InUse`):void 0]:[void 0,`${u} contains invalid characters`]:[]),[i,r,d,m,u]);(0,a.d4)((()=>{c(t||"")}),[n,t]);const P=(0,a.I4)((e=>{const t=e.target.value.trim().replace(hn,"");c(t),e.target.value=`${n?un:""}${t}`;const a=function(e){return e.length>=5&&e.length<=32&&Zn.test(e)}(t);a&&vn((()=>{l({username:t})})),o&&o(!!a&&t)}),[n,l,o]);return a.ZP.createElement(Te.Z,{value:`${n?un:""}${i}`,onChange:P,label:u,error:v,success:Z,readOnly:s})})),gn=(0,G.P2)((e=>e()),6e4,!0),pn="Please provide your first name",En="Bio can' be longer than 70 characters",Cn=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e,{progress:n,isUsernameAvailable:a}=e.profileEdit||{},s=t?(0,p.dy)(e,t):void 0;if(!s)return{progress:n,isUsernameAvailable:a};const{firstName:r,lastName:l,username:o,fullInfo:i}=s,{bio:c}=i||{};return{currentAvatarHash:(0,g.RT)(s),currentFirstName:r,currentLastName:l,currentBio:c,currentUsername:o,progress:n,isUsernameAvailable:a}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:o,currentAvatarHash:i,currentFirstName:c,currentLastName:d,currentBio:m,currentUsername:v,progress:P,isUsernameAvailable:g}=e;const{loadCurrentUser:p,updateProfile:E,checkUsername:C}=(0,s.uC)(),f=(0,h.Z)(),[b,I]=(0,a.eJ)(!1),[y,N]=(0,a.eJ)(!1),[k,S]=(0,a.eJ)(),[w,M]=(0,a.eJ)(),[T,R]=(0,a.eJ)(c||""),[A,L]=(0,a.eJ)(d||""),[F,B]=(0,a.eJ)(m||""),[$,x]=(0,a.eJ)(v||""),D=(0,Z.Z)(i,!1,r.IU.BlobUrl),O=P===l.rN.InProgress,U=!1===$,G=(0,a.Ye)((()=>!U&&(Boolean(w)||y||!0===g)),[w,y,U,g]);(0,u.ZP)(t,o,n,l.MT.EditProfile),(0,a.d4)((()=>{gn((()=>{p()}))}),[p]),(0,a.d4)((()=>{M(void 0)}),[D]),(0,a.d4)((()=>{R(c||""),L(d||""),B(m||"")}),[c,d,m]),(0,a.d4)((()=>{x(v||"")}),[v]),(0,a.d4)((()=>{P===l.rN.Complete&&(N(!1),I(!1),S(void 0))}),[P]);const X=(0,a.I4)((e=>{M(e)}),[]),z=(0,a.I4)((e=>{R(e.target.value),N(!0)}),[]),_=(0,a.I4)((e=>{L(e.target.value),N(!0)}),[]),Y=(0,a.I4)((e=>{B(e.target.value),N(!0)}),[]),H=(0,a.I4)((e=>{x(e),I(!0)}),[]),V=(0,a.I4)((()=>{const e=T.trim(),t=A.trim(),n=F.trim();e.length?n.length>70?S(En):E({photo:w,...y&&{firstName:e,lastName:t,bio:n},...b&&{username:$}}):S(pn)}),[w,T,A,F,y,$,b,E]);return a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-edit-profile"},a.ZP.createElement(dn.Z,{currentAvatarBlobUrl:D,onChange:X,title:"Edit your profile photo",disabled:O}),a.ZP.createElement(Te.Z,{value:T,onChange:z,label:f("FirstName"),disabled:O,error:k===pn?k:void 0}),a.ZP.createElement(Te.Z,{value:A,onChange:_,label:f("LastName"),disabled:O}),a.ZP.createElement(Te.Z,{value:F,onChange:Y,label:f("UserBio"),disabled:O,error:k===En?k:void 0}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,Pe.Z)(f("lng_settings_about_bio"),["br","simple_markdown"]))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:f.isRtl?"rtl":void 0},f("Username")),a.ZP.createElement(Pn,{currentUsername:$||"",isLoading:O,isUsernameAvailable:g,checkUsername:C,onChange:H}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,Pe.Z)(f("UsernameHelp"),["br","simple_markdown"])),$&&a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},f("lng_username_link"),a.ZP.createElement("br",null),a.ZP.createElement("span",{className:"username-link"},"https://t.me/",$)))),a.ZP.createElement(mn.Z,{isShown:G,onClick:V,disabled:O,ariaLabel:"Save changes"},O?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))})));var fn=n(4605),bn=n(8051);const In=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e.settings.byKey,["canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb"])))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,canAutoLoadPhotoFromContacts:i,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:d,canAutoLoadPhotoInChannels:m,canAutoLoadVideoFromContacts:Z,canAutoLoadVideoInPrivateChats:v,canAutoLoadVideoInGroups:P,canAutoLoadVideoInChannels:g,canAutoLoadFileFromContacts:p,canAutoLoadFileInPrivateChats:E,canAutoLoadFileInGroups:C,canAutoLoadFileInChannels:f,canAutoPlayGifs:b,canAutoPlayVideos:I,autoLoadFileMaxSizeMb:y}=e;const{setSettingOption:N}=(0,s.uC)(),k=(0,h.Z)();(0,u.ZP)(t,r,n,l.MT.General);const S=(0,a.I4)((e=>k("AutodownloadSizeLimitUpTo",k("FileSize.MB",String(o.by[e]),"i"))),[k]),w=(0,a.I4)((e=>{N({autoLoadFileMaxSizeMb:o.by[e]})}),[N]);function M(e,t,n,s,r,l){return a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},e),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.Contacts"),checked:n,onCheck:e=>N({[`canAutoLoad${t}FromContacts`]:e})}),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.PrivateChats"),checked:s,onCheck:e=>N({[`canAutoLoad${t}InPrivateChats`]:e})}),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.GroupChats"),checked:r,onCheck:e=>N({[`canAutoLoad${t}InGroups`]:e})}),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.Channels"),checked:l,onCheck:e=>N({[`canAutoLoad${t}InChannels`]:e})}),"File"===t&&function(){const e=o.by.indexOf(y);return a.ZP.createElement("div",{className:"pt-5"},a.ZP.createElement(bn.Z,{label:k("AutoDownloadMaxFileSize"),min:0,max:5,value:-1!==e?e:2,renderValue:S,onChange:w}))}())}return a.ZP.createElement("div",{className:"settings-content custom-scroll"},M(k("AutoDownloadPhotosTitle"),"Photo",i,c,d,m),M(k("AutoDownloadVideosTitle"),"Video",Z,v,P,g),M("Auto-download files","File",p,E,C,f),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("AutoplayMedia")),a.ZP.createElement(fn.Z,{label:k("GifsTab2"),checked:b,onCheck:e=>N({canAutoPlayGifs:e})}),a.ZP.createElement(fn.Z,{label:k("DataAndStorage.Autoplay.Videos"),checked:I,onCheck:e=>N({canAutoPlayVideos:e})})))})));var yn=n(5616);const Nn=(0,G.P2)((e=>e()),6e4,!0),kn=(0,a.X$)((0,s.c$)((e=>{const{orderedIds:t,byId:n,recommended:a}=e.chatFolders;return{orderedFolderIds:t,foldersById:n,recommendedChatFolders:a}}))((e=>{let{isActive:t,onCreateFolder:n,onEditFolder:r,onScreenSelect:i,onReset:c,orderedFolderIds:d,foldersById:m,recommendedChatFolders:Z}=e;const{loadRecommendedChatFolders:v,addChatFolder:P,showDialog:p}=(0,s.uC)(),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(!1),I=(0,a.I4)((()=>b(!0)),[]);(0,a.d4)((()=>{E||(0,dt.Z)("FoldersAll").then(C)}),[E]),(0,a.d4)((()=>{Nn((()=>{v()}))}),[v]);const y=(0,a.I4)((()=>{Object.keys(m).length>=10?p({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):n()}),[m,p,n]),N=(0,h.Z)();(0,u.ZP)(t,c,i,l.MT.Folders);const k=(0,yn.mE)(),S=(0,a.Ye)((()=>{if(d)return d.map((e=>{const t=m[e];return{id:t.id,title:t.title,subtitle:(0,g.SB)(N,t,k[t.id])}}))}),[d,m,N,k]),w=(0,a.I4)((e=>{Object.keys(m).length>=10?p({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):P({folder:e})}),[m,P,p]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},E&&a.ZP.createElement(mt.Z,{id:"settingsFoldersMain",size:o.ku,animationData:E,play:f,noLoop:!0,onLoad:I})),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},N("CreateNewFilterInfo")),a.ZP.createElement(R.Z,{className:"with-icon mb-2",color:"primary",size:"smaller",pill:!0,fluid:!0,onClick:y,isRtl:N.isRtl},a.ZP.createElement("i",{className:"icon-add"}),N("CreateNewFilter"))),a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:N.isRtl?"rtl":void 0},N("Filters")),null!=S&&S.length?S.map((e=>a.ZP.createElement(Ae.Z,{className:"mb-2 no-icon",narrow:!0,multiline:!0,onClick:()=>r(m[e.id])},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.subtitle)))):S&&!S.length?a.ZP.createElement("p",{className:"settings-item-description my-4",dir:"auto"},"You have no folders yet."):a.ZP.createElement(we.Z,null)),Z&&Boolean(Z.length)&&a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:N.isRtl?"rtl":void 0},N("FilterRecommended")),Z.map((e=>a.ZP.createElement(Ae.Z,{className:"mb-2",narrow:!0,onClick:()=>w(e)},a.ZP.createElement("div",{className:"settings-folders-recommended-item"},a.ZP.createElement("div",{className:"multiline-item"},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.description)),a.ZP.createElement(R.Z,{className:"px-3",color:"primary",size:"tiny",pill:!0,fluid:!0,isRtl:N.isRtl},N("Add"))))))))})));var Sn=n(3455);const wn=e=>{let{count:t,itemName:n,itemPluralName:s,isLoading:r,onClick:l}=e;const o=(0,h.Z)();return a.ZP.createElement(R.Z,{className:"ShowMoreButton",color:"translucent",size:"smaller",isText:!0,isLoading:r,isRtl:o.isRtl,onClick:l},a.ZP.createElement("i",{className:"icon-down"}),"Show ",t," more ",t>1?s||`${n}s`:n)},Mn="Please provide a title for this folder.",Tn="ChatList.Filter.Error.Empty",Rn=(0,a.X$)((0,s.c$)((e=>{const{listIds:t}=e.chats;return{loadedActiveChatIds:t.active,loadedArchivedChatIds:t.archived}}))((e=>{let{state:t,dispatch:n,onAddIncludedChats:r,onAddExcludedChats:i,isActive:c,onScreenSelect:d,onReset:m,onBack:Z,loadedActiveChatIds:v,loadedArchivedChatIds:P}=e;const{editChatFolder:p,addChatFolder:E}=(0,s.uC)(),[C,f]=(0,a.eJ)(),[b,I]=(0,a.eJ)(!1),y=(0,a.I4)((()=>I(!0)),[]),[N,k]=(0,a.eJ)(!1),[S,w]=(0,a.eJ)(!1),{selectedChatIds:M,selectedChatTypes:T}=(0,Sn.vb)(t,"included"),{selectedChatIds:R,selectedChatTypes:A}=(0,Sn.vb)(t,"excluded");(0,a.d4)((()=>{C||(0,dt.Z)("FoldersNew").then(f)}),[C]),(0,a.d4)((()=>{k(!1),w(!1)}),[t.folderId]);const[L,F]=(0,a.Ye)((()=>{const e=new Set([...v||[],...P||[]]),t=(0,me.eL)(M,e),n=(0,me.eL)(R,e);return[N?t:t.slice(0,5-T.length),S?n:n.slice(0,5-A.length)]}),[R,M,T,A,S,N,v,P]),B=(0,h.Z)();function $(e){const t="included"===e?T:A,n="included"===e?L:F,s="included"===e?N:S,r=("included"===e?M:R).length-t.length-n.length,l="included"===e?()=>k(!0):()=>w(!0);return a.ZP.createElement(a.ZP.Fragment,null,t.map((t=>function(e,t){const n="included"===t?Sn.fi.find((t=>{let{key:n}=t;return n===e})):Sn.Yy.find((t=>{let{key:n}=t;return n===e}));if(n)return a.ZP.createElement(Ae.Z,{key:n.key,className:"settings-folders-list-item mb-1",icon:n.icon,narrow:!0,inactive:!0},B(n.title))}(t,e))),n.map((e=>a.ZP.createElement(Ae.Z,{className:"settings-folders-list-item mb-1",narrow:!0,inactive:!0},(0,g.YC)(e)?a.ZP.createElement(Fe.Z,{avatarSize:"small",userId:e}):a.ZP.createElement(Le.Z,{avatarSize:"small",chatId:e})))),!s&&r>0&&a.ZP.createElement(wn,{count:r,itemName:"chat",onClick:l}))}return(0,u.ZP)(c,Z,d,"edit"===t.mode?l.MT.FoldersEditFolder:l.MT.FoldersCreateFolder),a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},C&&a.ZP.createElement(mt.Z,{id:"settingsFoldersEdit",size:o.ku,animationData:C,play:b&&String(t.folderId),noLoop:!0,onLoad:y})),"create"===t.mode&&a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:B.isRtl?"rtl":void 0},B("FilterIncludeInfo")),a.ZP.createElement(Te.Z,{className:"mb-0",label:B("FilterNameHint"),value:t.folder.title,onChange:function(e){const{currentTarget:t}=e;n({type:"setTitle",payload:t.value.trim()})},error:t.error&&t.error===Mn?Mn:void 0})),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},t.error&&t.error===Tn&&a.ZP.createElement("p",{className:"settings-item-description color-danger mb-2",dir:B.isRtl?"rtl":void 0},B(t.error)),a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterInclude")),a.ZP.createElement(Ae.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:r},B("FilterAddChats")),$("included")),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterExclude")),a.ZP.createElement(Ae.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:i},B("FilterAddChats")),$("excluded"))),a.ZP.createElement(mn.Z,{isShown:Boolean(t.isTouched),disabled:t.isLoading,onClick:function(){const{title:e}=t.folder;e?M.length||Object.keys(T).length?(n({type:"setIsLoading",payload:!0}),"edit"===t.mode?p({id:t.folderId,folderUpdate:t.folder}):E({folder:t.folder}),setTimeout((()=>{m()}),500)):n({type:"setError",payload:Tn}):n({type:"setError",payload:Mn})},ariaLabel:"edit"===t.mode?"Save changes":"Create folder"},t.isLoading?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),An=(0,a.X$)((e=>{let{mode:t,chatIds:n,selectedIds:s,selectedChatTypes:r,filterValue:l,onSelectedIdsChange:o,onSelectedChatTypesChange:i,onFilterChange:c}=e;const d=(0,a.sO)(null),m="included"===t?Sn.fi:Sn.Yy,u=s.length+r.length>10,Z=s.length>=100;(0,a.d4)((()=>{setTimeout((()=>{requestAnimationFrame((()=>{d.current.focus()}))}),500)}),[]);const v=(0,a.I4)((e=>{const t=[...s];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),o(t)}),[s,o]),P=(0,a.I4)((e=>{const t=[...r];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),i(t)}),[r,i]),p=(0,a.I4)((e=>{const{value:t}=e.currentTarget;c(t)}),[c]),E=(0,h.Z)(),[C,f]=(0,Ne.Z)(void 0,n,Boolean(l));return a.ZP.createElement("div",{className:"Picker SettingsFoldersChatsPicker"},a.ZP.createElement("div",{className:"picker-header custom-scroll"},r.map((function(e){const t=m.find((t=>{let{key:n}=t;return e===n}));if(t)return a.ZP.createElement(wt.Z,{icon:t.icon,title:E(t.title),isMinimized:u,canClose:!0,onClick:P,clickArg:t.key})})),s.map(((e,t)=>a.ZP.createElement(wt.Z,{chatOrUserId:e,isMinimized:u&&tP(e.key),ripple:!0},a.ZP.createElement("i",{className:`icon-${e.icon}`}),a.ZP.createElement("h3",{className:"chat-type",dir:"auto"},E(e.title)),a.ZP.createElement(fn.Z,{label:"",checked:r.includes(e.key),round:!0}))})),a.ZP.createElement("div",{key:"divider",className:"picker-list-divider"}),a.ZP.createElement("h4",{key:"header2",className:"settings-item-header",dir:E.isRtl?"rtl":void 0},E("FilterChats"))),null!=C&&C.length?C.map((function(e){const t=s.includes(e);return a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable picker-list-item chat-item",onClick:()=>v(e),ripple:!0,disabled:!t&&Z},(0,g.YC)(e)?a.ZP.createElement(Fe.Z,{userId:e}):a.ZP.createElement(Le.Z,{chatId:e,withChatType:!0}),a.ZP.createElement(fn.Z,{label:"",checked:t,round:!0}))})):C&&!C.length?a.ZP.createElement("p",{className:"no-results",key:"no-results"},"Sorry, nothing found."):a.ZP.createElement(we.Z,{key:"loading"})))})),Ln=(0,a.X$)((e=>{let{mode:t,state:n,dispatch:r,isActive:i,onScreenSelect:c,onReset:d}=e;const{chatFilter:m}=n,{selectedChatIds:Z,selectedChatTypes:v}=(0,Sn.vb)(n,t,!0),P=(0,h.Z)(),p=(0,yn.d7)(o.Nf),E=(0,yn.d7)(o.WS),C=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=[...p||[],...E||[]];return(0,me.Tw)([...Z,...(0,g.$l)(P,t,e,m)])}),[p,E,Z,P,m]),f=(0,a.I4)((e=>{r({type:"setChatFilter",payload:e})}),[r]),b=(0,a.I4)((e=>{r("included"===t?{type:"setIncludeFilters",payload:{...n.includeFilters,includedChatIds:e}}:{type:"setExcludeFilters",payload:{...n.excludeFilters,excludedChatIds:e}})}),[t,n,r]),I=(0,a.I4)((e=>{const n={};e.forEach((e=>{n[e]=!0})),r("included"===t?{type:"setIncludeFilters",payload:{includedChatIds:Z,...n}}:{type:"setExcludeFilters",payload:{excludedChatIds:Z,...n}})}),[t,Z,r]);return(0,u.ZP)(i,d,c,"included"===t?l.MT.FoldersIncludedChats:l.MT.FoldersExcludedChats),C?a.ZP.createElement(An,{mode:t,chatIds:C,selectedIds:Z,selectedChatTypes:v,filterValue:m,onSelectedIdsChange:b,onSelectedChatTypesChange:I,onFilterChange:f}):a.ZP.createElement(we.Z,null)})),Fn=(0,a.X$)((e=>{let{currentScreen:t,shownScreen:n,state:s,dispatch:r,isActive:o,onScreenSelect:i,onReset:c}=e;const d=(0,a.I4)((()=>{t!==l.MT.FoldersCreateFolder&&t!==l.MT.FoldersEditFolder&&t!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),t!==l.MT.FoldersIncludedChats&&t!==l.MT.FoldersExcludedChats?c():"create"===s.mode?i(l.MT.FoldersCreateFolder):i(l.MT.FoldersEditFolder)}),[s.mode,r,t,c,i]),m=(0,a.I4)((()=>{r({type:"reset"}),i(l.MT.FoldersCreateFolder)}),[i,r]),u=(0,a.I4)((e=>{r({type:"editFolder",payload:e}),i(l.MT.FoldersEditFolder)}),[r,i]),h=(0,a.I4)((()=>{r({type:"editIncludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersIncludedChatsFromChatList:l.MT.FoldersIncludedChats)}),[t,r,i]),Z=(0,a.I4)((()=>{r({type:"editExcludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersExcludedChatsFromChatList:l.MT.FoldersExcludedChats)}),[t,r,i]);switch(t){case l.MT.Folders:return a.ZP.createElement(kn,{onCreateFolder:m,onEditFolder:u,onScreenSelect:i,isActive:o||[l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onReset:c});case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement(Rn,{state:s,dispatch:r,onAddIncludedChats:h,onAddExcludedChats:Z,onReset:d,onScreenSelect:i,isActive:o||[l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onBack:c});case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:return a.ZP.createElement(Ln,{mode:"included",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(Ln,{mode:"excluded",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});default:return}}));var Bn=n(711),$n=n(692);const xn=(0,a.X$)((e=>{let{size:t=o.DC,stickerSet:n,observeIntersection:s}=e;const l=(0,a.sO)(null),i=(0,Bt.Op)(l,s),c=`stickerSet${n.id}`,d=(0,Z.Z)(c,!i,r.IU.Lottie),m=(0,$n.Z)(d),u=(0,a.Ye)((()=>{if(!d)return(0,ot.Xv)(n.title,2)}),[d,n.title]);return a.ZP.createElement("div",{ref:l,className:"sticker-set-cover"},u,d&&a.ZP.createElement(mt.Z,{id:c,size:t,animationData:d,className:m}))})),Dn=(0,a.X$)((e=>{let{stickerSet:t,observeIntersection:n}=e;const s=(0,a.sO)(null),r=(0,Bt.Op)(s,n),l=(0,Z.Z)(t.hasThumbnail&&`stickerSet${t.id}`,!r),o=(0,$n.Z)(l),c=t.isGifs,d=(0,a.Ye)((()=>{if(c&&!i.Hh||!l)return(0,ot.Xv)(t.title,2)}),[c,l,t.title]);return a.ZP.createElement("div",{ref:s,className:"sticker-set-cover"},d,c?a.ZP.createElement("video",{src:l,className:o,loop:!0,autoPlay:!0}):a.ZP.createElement("img",{src:l,className:o,alt:""}))}));var On=n(3547);const Un=(0,a.X$)((e=>{var t;let{stickerSet:n,observeIntersection:s,onClick:r}=e;const l=(0,h.Z)();if(!n||!n.stickers)return;const i=null===(t=n.stickers)||void 0===t?void 0:t[0];return n.hasThumbnail||!i?a.ZP.createElement(Ae.Z,{narrow:!0,className:"SettingsStickerSet",inactive:!i,onClick:()=>i&&r(i)},a.ZP.createElement(R.Z,{ariaLabel:n.title,color:"translucent",isRtl:l.isRtl},n.isLottie?a.ZP.createElement(xn,{size:o.Mw,stickerSet:n,observeIntersection:s}):a.ZP.createElement(Dn,{stickerSet:n,observeIntersection:s})),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i")))):a.ZP.createElement(Ae.Z,{narrow:!0,className:"SettingsStickerSet",onClick:()=>r(i)},a.ZP.createElement(On.Z,{sticker:i,size:o.Mw,title:n.title,observeIntersection:s}),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i"))))}));var Gn=n(4851);const Jn=["Solid and Steady","Nice and Fast","Lots of Stuff"],Xn=[{label:"12-hour",value:"12h"},{label:"24-hour",value:"24h"}],zn=(0,a.X$)((0,s.c$)((e=>{var t;return{...(0,me.ei)(e.settings.byKey,["messageTextSize","animationLevel","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","isSensitiveEnabled","canChangeSensitive","timeFormat"]),stickerSetIds:e.stickers.added.setIds,stickerSetsById:e.stickers.setsById,defaultReaction:null===(t=e.appConfig)||void 0===t?void 0:t.defaultReaction}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,stickerSetIds:o,stickerSetsById:c,defaultReaction:d,messageTextSize:m,animationLevel:Z,messageSendKeyCombo:v,shouldSuggestStickers:P,shouldLoopStickers:g,timeFormat:p}=e;const{setSettingOption:E}=(0,s.uC)(),C=(0,a.sO)(null),{observe:f}=(0,Bt.S1)({rootRef:C}),[b,I,y]=(0,ye.Z)(),[N,k]=(0,a.eJ)(),S=(0,h.Z)(),w=i.$b?void 0:[{value:"enter",label:S("lng_settings_send_enter"),subLabel:"New line by Shift + Enter"},{value:"ctrl-enter",label:S(i.jm?"lng_settings_send_cmdenter":"lng_settings_send_ctrlenter"),subLabel:"New line by Enter"}],M=(0,a.I4)((e=>{Jn.forEach(((t,n)=>{document.body.classList.toggle(`animation-level-${n}`,e===n)})),E({animationLevel:e})}),[E]),T=(0,a.I4)((e=>{document.documentElement.style.setProperty("--composer-text-size",`${Math.max(e,i.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*e)}px`),document.documentElement.style.setProperty("--message-text-size",`${e}px`),document.documentElement.setAttribute("data-message-text-size",e.toString()),E({messageTextSize:e})}),[E]),R=(0,a.I4)((e=>{E({timeFormat:e}),E({wasTimeFormatSetManually:!0}),(0,Bn.qf)(e)}),[E]),A=(0,a.I4)((e=>{k(e),I()}),[I]),L=o&&o.map((e=>{var t;return!(null==c||null===(t=c[e])||void 0===t||!t.installedDate)&&c[e]})).filter(Boolean);return(0,u.ZP)(t,r,n,l.MT.General),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},S("SETTINGS")),a.ZP.createElement(bn.Z,{label:S("TextSize"),min:12,max:20,value:m,onChange:T}),a.ZP.createElement(Ae.Z,{icon:"photo",onClick:()=>n(l.MT.GeneralChatBackground)},S("ChatBackground"))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},"Time Format"),a.ZP.createElement(at.Z,{name:"timeformat",options:Xn,selected:p,onChange:R})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},"Animation Level"),a.ZP.createElement("p",{className:"settings-item-description",dir:S.isRtl?"rtl":void 0},"Choose the desired animations amount."),a.ZP.createElement(bn.Z,{options:Jn,value:Z,onChange:M})),w&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},S("VoiceOver.Keyboard")),a.ZP.createElement(at.Z,{name:"keyboard-send-settings",options:w,onChange:e=>E({messageSendKeyCombo:e}),selected:v})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},S("AccDescrStickers")),d&&a.ZP.createElement(Ae.Z,{className:"SettingsDefaultReaction",onClick:()=>n(l.MT.QuickReaction)},a.ZP.createElement(it.Z,{reaction:d}),a.ZP.createElement("div",{className:"title"},S("DoubleTapSetting"))),a.ZP.createElement(fn.Z,{label:S("SuggestStickers"),checked:P,onCheck:e=>E({shouldSuggestStickers:e})}),a.ZP.createElement(fn.Z,{label:S("LoopAnimatedStickers"),checked:g,onCheck:e=>E({shouldLoopStickers:e})}),a.ZP.createElement("div",{className:"mt-4",ref:C},L&&L.map((e=>a.ZP.createElement(Un,{key:e.id,stickerSet:e,observeIntersection:f,onClick:A})))),N&&a.ZP.createElement(Gn.Z,{isOpen:b,fromSticker:N,onClose:y})))})));let _n;function Yn(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];_n||(_n=document.createElement("input"),_n.setAttribute("type","file")),_n.setAttribute("accept",e),n?_n.removeAttribute("multiple"):_n.setAttribute("multiple","multiple"),_n.onchange=null,_n.value="",_n.onchange=t,_n.click()}var Hn=n(1394);function Vn(e){return[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)]}function qn(e){const t=e[0].toString(16),n=e[1].toString(16),a=e[2].toString(16);return(1==t.length?"0"+t:t)+(1==n.length?"0"+n:n)+(1==a.length?"0"+a:a)}function jn(e){let[t,n,a]=e;t/=255,n/=255,a/=255;let s,r,l=Math.max(t,n,a),o=Math.min(t,n,a),i=l,c=l-o;if(r=0==l?0:c/l,l==o)s=0;else{switch(l){case t:s=(n-a)/c+(n.5?Math.max(0,.65*a):Math.max(0,Math.min(1,1-.65*a)),`hsla(${360*t}, ${100*n}%, ${100*a}%, .4)`}var Qn=n(9524),ea=n(5866);const ta=(0,a.X$)((e=>{var t;let{wallpaper:n,theme:s,isSelected:r,onClick:i}=e;const{slug:c,document:d}=n,m=`wallpaper${d.id}`,u=d.previewBlobUrl,h=(0,Z.Z)(`${m}?size=m`),g=(0,ea.Z)(null===(t=d.thumbnail)||void 0===t?void 0:t.dataUri,Boolean(h),!0),{transitionClassNames:p}=(0,H.Z)(Boolean(h||u),void 0,void 0,"slow"),[E,C]=(0,a.eJ)(!1),{mediaData:f,loadProgress:b}=(0,v.Z)(m,!E),I=!1===(0,P.Z)(E),{shouldRender:y,transitionClassNames:N}=(0,H.Z)(E&&!f||c===l.mp,void 0,I,"slow"),k=(0,a.sO)();k.current=s;const S=(0,a.I4)((()=>{(async()=>{const e=await(0,Hn.gm)(f);await Qn.save(o.fo,k.current,e),i(c)})()}),[f,i,c]);(0,a.d4)((()=>{f&&S()}),[f,S]);const w=(0,a.I4)((()=>{f?S():C((e=>!e))}),[f,S]),M=(0,X.Z)("WallpaperTile",r&&"selected");return a.ZP.createElement("div",{className:M,onClick:w},a.ZP.createElement("div",{className:"media-inner"},a.ZP.createElement("canvas",{ref:g,className:"thumbnail"}),a.ZP.createElement("img",{src:h||u,className:(0,X.Z)("full-media",p),alt:""}),y&&a.ZP.createElement("div",{className:(0,X.Z)("spinner-container",N)},a.ZP.createElement($.Z,{progress:b,onClick:w}))))})),na=(0,G.P2)((e=>e()),6e4,!0),aa=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.Pu)(e),{background:n,isBlurred:a}=e.settings.themes[t]||{},{loadedWallpapers:s}=e.settings;return{background:n,isBlurred:a,loadedWallpapers:s,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,background:i,isBlurred:c,loadedWallpapers:d,theme:m}=e;const{loadWallpapers:Z,uploadWallpaper:v,setThemeSettings:P}=(0,s.uC)(),g=(0,a.sO)();g.current=m,(0,a.d4)((()=>{na((()=>{Z()}))}),[Z]);const p=(0,a.I4)((e=>{const{files:t}=e.target;t&&t.length>0&&v(t[0])}),[v]),E=(0,a.I4)((()=>{Yn("image/jpeg",p,!0)}),[p]),C=(0,a.I4)((()=>{n(l.MT.GeneralChatBackgroundColor)}),[n]),f=(0,a.I4)((()=>{P({theme:m,background:void 0,backgroundColor:void 0,isBlurred:!0,patternColor:"dark"===m?o.Vv:o.g})}),[P,m]),b=(0,a.I4)((e=>{P({theme:g.current,background:e});const t=d&&d.find((t=>t.slug===e));null!=t&&t.document.thumbnail&&async function(e){const t=[0,0,0];let n,a,s,r,l=-4,o=[0,0,0],i=0;const c=document.createElement("canvas"),d=c.getContext&&c.getContext("2d");if(!d)return t;const m=await(0,Hn.pt)(e);s=m.naturalHeight||m.offsetHeight||m.height,a=m.naturalWidth||m.offsetWidth||m.width,c.height=s,c.width=a,d.drawImage(m,0,0);try{n=d.getImageData(0,0,a,s)}catch(e){return t}for(r=n.data.length;(l+=20){const t=Wn(e),n=`#${qn(e)}`;P({theme:g.current,backgroundColor:n,patternColor:t})}))}),[d,P]),I=(0,a.I4)((e=>{P({theme:g.current,isBlurred:e.target.checked})}),[P]),y=(0,h.Z)();(0,u.ZP)(t,r,n,l.MT.GeneralChatBackground);const N=(null==d?void 0:d[0])&&d[0].slug===l.mp;return a.ZP.createElement("div",{className:"SettingsGeneralBackground settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(Ae.Z,{icon:"camera-add",className:"mb-0",disabled:N,onClick:E},y("UploadImage")),a.ZP.createElement(Ae.Z,{icon:"colorize",className:"mb-0",onClick:C},y("SetColor")),a.ZP.createElement(Ae.Z,{icon:"favorite",onClick:f},y("ThemeResetToDefaults")),a.ZP.createElement(fn.Z,{label:y("BackgroundBlurred"),checked:Boolean(c),onChange:I})),d?a.ZP.createElement("div",{className:"settings-wallpapers"},d.map((e=>a.ZP.createElement(ta,{wallpaper:e,theme:m,isSelected:i===e.slug,onClick:b})))):a.ZP.createElement(we.Z,null))}))),sa=jn(Vn("e6ebee")),ra=["#e6ebee","#b2cee1","#008dd0","#c6e7cb","#c4e1a6","#60b16e","#ccd0af","#a6a997","#7a7072","#fdd7af","#fdb76e","#dd8851"];function la(e,t){return{colorPosition:[Math.round(e[1]*(t.colorRect.width-1)),Math.round((1-e[2])*(t.colorRect.height-1))],huePosition:Math.round(e[0]*(t.hueRect.width-1))}}function oa(e,t){let{colorPosition:n,huePosition:a}=e;return[a/(t.hueRect.width-1),n[0]/(t.colorRect.width-1),1-n[1]/(t.colorRect.height-1)]}const ia=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.Pu)(e),{backgroundColor:n}=e.settings.themes[t]||{};return{backgroundColor:n,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,theme:o,backgroundColor:i}=e;const{setThemeSettings:c}=(0,s.uC)(),d=(0,a.sO)();d.current=o;const m=(0,a.sO)(null),h=(0,a.sO)(null),Z=(0,a.sO)(null),v=(0,a.sO)(!0),[P,g]=(0,a.eJ)(function(e){return e&&e.startsWith("#")?jn(Vn(e.replace("#",""))):sa}(i)),p=(0,a.sO)(P);(0,a.d4)((()=>{p.current=P}),[P]);const[E,C,b]=(0,ye.Z)(),[I,y]=(0,a.eJ)(""),[N,k]=(0,a.eJ)(""),S=(0,a.sO)(),w=(0,a.sO)();(0,a.d4)((()=>{const e={offsetLeft:h.current.offsetLeft,...(0,me.ei)(h.current.getBoundingClientRect(),["top","width","height"])},t={offsetLeft:Z.current.offsetLeft,...(0,me.ei)(Z.current.getBoundingClientRect(),["width"])};function n(t){const n=[Math.min(Math.max(0,t.pageX-e.offsetLeft),e.width-1),Math.min(Math.max(0,t.pageY-e.top+m.current.scrollTop),e.height-1)],{huePosition:a}=la(p.current,S.current);return g(oa({colorPosition:n,huePosition:a},S.current)),C(),!0}function a(e){const{colorPosition:n}=la(p.current,S.current),a=Math.min(Math.max(0,e.pageX-t.offsetLeft),t.width-1);return g(oa({colorPosition:n,huePosition:a},S.current)),C(),!0}S.current={colorRect:e,hueRect:t},(0,f.sf)(h.current,{onCapture:n,onDrag:n,onRelease:b,onClick:b,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0}),(0,f.sf)(Z.current,{onCapture:a,onDrag:a,onRelease:b,onClick:b,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0})}),[C,b]);const{colorPosition:M=[0,0],huePosition:T=0}=S.current?la(P,S.current):{},R=qn(Kn(P)),A=P[0],L=qn(Kn([A,1,1]));(0,a.d4)((()=>{const e=Kn(P),t=`#${qn(e)}`;if(y(e.join(", ")),k(t),!v.current){const n=Wn(e);c({theme:d.current,background:void 0,backgroundColor:t,patternColor:n})}v.current=!1}),[P,c]),(0,a.d4)((()=>{!function(e,t,n,a){let s,r,l;n.current&&a.current?(s=a.current.colorRect.width,r=a.current.colorRect.height,l=n.current):(s=e.offsetWidth,r=e.offsetHeight,l=e.getContext("2d"),e.width=s,e.height=r,n.current=l);const o=l.createImageData(s,r),i=o.data,c=Kn([t,1,1]);let d=0;for(let e=0;e{!function(e){const t=e.offsetWidth;e.width=t,e.height=1;const n=e.getContext("2d"),a=n.createImageData(t,1),s=a.data;let r=0;for(let e=0;e{const t=e.currentTarget.value.replace(/[^\d, ]/g,"").slice(0,13);if(t.match(/^\d{1,3},\s?\d{1,3},\s?\d{1,3}$/)){const e=t.split(",").map((e=>Number(e.trim())));g(jn(e))}e.currentTarget.value=t}),[]),B=(0,a.I4)((e=>{const t=e.currentTarget.value.replace(/[^0-9a-fA-F]/g,"").slice(0,6);t.match(/^#?[0-9a-fA-F]{6}$/)&&g(jn(Vn(t.replace("#","")))),e.currentTarget.value=t}),[]),$=(0,a.I4)((e=>{g(jn(Vn(e.currentTarget.dataset.color.replace("#",""))))}),[]),x=(0,X.Z)("SettingsGeneralBackgroundColor settings-content custom-scroll",E&&"is-dragging");return(0,u.ZP)(t,r,n,l.MT.GeneralChatBackgroundColor),a.ZP.createElement("div",{ref:m,className:x},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("div",{ref:h,className:"color-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translate(${M[0]}px, ${M[1]}px); background-color: #${R};`})),a.ZP.createElement("div",{ref:Z,className:"hue-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translateX(${T}px); background-color: #${L};`})),a.ZP.createElement("div",{className:"tools"},a.ZP.createElement(Te.Z,{value:N,label:"HEX",onChange:B}),a.ZP.createElement(Te.Z,{value:I,label:"RGB",onChange:F}))),a.ZP.createElement("div",{className:"predefined-colors"},ra.map((e=>a.ZP.createElement("div",{className:e===`#${R}`?"active":void 0,"data-color":e,style:`background-color: ${e};`,onClick:$})))))})));var ca=n(8406);const da=(0,a.X$)((0,s.c$)((e=>({hasPrivateChatsNotifications:Boolean(e.settings.byKey.hasPrivateChatsNotifications),hasPrivateChatsMessagePreview:Boolean(e.settings.byKey.hasPrivateChatsMessagePreview),hasGroupNotifications:Boolean(e.settings.byKey.hasGroupNotifications),hasGroupMessagePreview:Boolean(e.settings.byKey.hasGroupMessagePreview),hasBroadcastNotifications:Boolean(e.settings.byKey.hasBroadcastNotifications),hasBroadcastMessagePreview:Boolean(e.settings.byKey.hasBroadcastMessagePreview),hasContactJoinedNotifications:Boolean(e.settings.byKey.hasContactJoinedNotifications),hasWebNotifications:e.settings.byKey.hasWebNotifications,hasPushNotifications:e.settings.byKey.hasPushNotifications,notificationSoundVolume:e.settings.byKey.notificationSoundVolume})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPrivateChatsNotifications:o,hasPrivateChatsMessagePreview:i,hasGroupNotifications:c,hasGroupMessagePreview:d,hasBroadcastNotifications:m,hasBroadcastMessagePreview:Z,hasContactJoinedNotifications:v,hasPushNotifications:P,hasWebNotifications:g,notificationSoundVolume:p}=e;const{loadNotificationSettings:E,updateContactSignUpNotification:C,updateNotificationSettings:f,updateWebNotificationSettings:b}=(0,s.uC)();(0,a.d4)((()=>{E()}),[E]);const I=(0,D.Z)(500,!0),y=(0,a.I4)(((e,t,n)=>{const a="contact"===t?!o:!("group"===t?c:m),s="contact"===t?i:"group"===t?d:Z;f({peerType:t,..."silent"===n&&{isSilent:!e.target.checked,shouldShowPreviews:s},..."showPreviews"===n&&{shouldShowPreviews:e.target.checked,isSilent:a}})}),[Z,m,d,c,i,o,f]),N=(0,a.I4)((e=>{C({isSilent:!e.target.checked})}),[C]),k=(0,h.Z)();return(0,u.ZP)(t,r,n,l.MT.Notifications),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},"Web notifications"),a.ZP.createElement(fn.Z,{label:"Web notifications",subLabel:k(g?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:g,onChange:e=>{b({hasWebNotifications:e.target.checked})}}),a.ZP.createElement(fn.Z,{label:"Offline notifications",disabled:!g,subLabel:k(P?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:P,onChange:e=>{b({hasPushNotifications:e.target.checked})}}),a.ZP.createElement("div",{className:"settings-item-slider"},a.ZP.createElement(bn.Z,{label:"Sound",min:0,max:10,value:p,onChange:e=>{b({notificationSoundVolume:e}),I((()=>(0,ca.q3)(void 0,e)))}}))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("AutodownloadPrivateChats")),a.ZP.createElement(fn.Z,{label:k("NotificationsForPrivateChats"),subLabel:k(o?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:o,onChange:e=>{y(e,"contact","silent")}}),a.ZP.createElement(fn.Z,{label:k("MessagePreview"),disabled:!o,subLabel:k(i?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:i,onChange:e=>{y(e,"contact","showPreviews")}})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("FilterGroups")),a.ZP.createElement(fn.Z,{label:k("NotificationsForGroups"),subLabel:k(c?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:c,onChange:e=>{y(e,"group","silent")}}),a.ZP.createElement(fn.Z,{label:k("MessagePreview"),disabled:!c,subLabel:k(d?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:d,onChange:e=>{y(e,"group","showPreviews")}})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("FilterChannels")),a.ZP.createElement(fn.Z,{label:k("NotificationsForChannels"),subLabel:k(m?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:m,onChange:e=>{y(e,"broadcast","silent")}}),a.ZP.createElement(fn.Z,{label:k("MessagePreview"),disabled:!m,subLabel:k(Z?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:Z,onChange:e=>{y(e,"broadcast","showPreviews")}})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("PhoneOther")),a.ZP.createElement(fn.Z,{label:k("ContactJoined"),checked:v,onChange:N})))}))),ma=(0,a.X$)((0,s.c$)((e=>{var t,n,a,s,r;const{settings:{byKey:{hasPassword:l,isSensitiveEnabled:o,canChangeSensitive:i},privacy:c},blocked:d,activeSessions:m}=e;return{hasPassword:l,blockedCount:d.totalCount,sessionsCount:m.length,isSensitiveEnabled:o,canChangeSensitive:i,visibilityPrivacyPhoneNumber:null===(t=c.phoneNumber)||void 0===t?void 0:t.visibility,visibilityPrivacyLastSeen:null===(n=c.lastSeen)||void 0===n?void 0:n.visibility,visibilityPrivacyProfilePhoto:null===(a=c.profilePhoto)||void 0===a?void 0:a.visibility,visibilityPrivacyForwarding:null===(s=c.forwards)||void 0===s?void 0:s.visibility,visibilityPrivacyGroupChats:null===(r=c.chatInvite)||void 0===r?void 0:r.visibility}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPassword:o,blockedCount:i,sessionsCount:c,isSensitiveEnabled:d,canChangeSensitive:m,visibilityPrivacyPhoneNumber:Z,visibilityPrivacyLastSeen:v,visibilityPrivacyProfilePhoto:P,visibilityPrivacyForwarding:g,visibilityPrivacyGroupChats:p}=e;const{loadPrivacySettings:E,loadBlockedContacts:C,loadAuthorizations:f,loadContentSettings:b,updateContentSettings:I}=(0,s.uC)();(0,a.d4)((()=>{C(),f(),E(),b()}),[C,f,E,b]);const y=(0,h.Z)();function N(e){switch(e){case"everybody":return y("P2PEverybody");case"contacts":return y("P2PContacts");case"nobody":return y("P2PNobody")}}return(0,u.ZP)(t,r,n,l.MT.Privacy),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(Ae.Z,{icon:"delete-user",narrow:!0,onClick:()=>n(l.MT.PrivacyBlockedUsers)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("BlockedUsers")),i>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y("Users",i)))),a.ZP.createElement(Ae.Z,{icon:"lock",narrow:!0,onClick:()=>n(o?l.MT.TwoFaEnabled:l.MT.TwoFaDisabled)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("TwoStepVerification")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(o?"PasswordOn":"PasswordOff")))),a.ZP.createElement(Ae.Z,{icon:"active-sessions",narrow:!0,onClick:()=>n(l.MT.PrivacyActiveSessions)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("SessionsTitle")),c>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},1===c?"1 session":`${c} sessions`)))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:y.isRtl?"rtl":void 0},y("PrivacyTitle")),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyPhoneNumber)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyPhoneTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(Z)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyLastSeen)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("LastSeenTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(v)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyProfilePhoto)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyProfilePhotoTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(P)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyForwarding)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyForwardsTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(g)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyGroupChats)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("WhoCanAddMe")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(p))))),m&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:y.isRtl?"rtl":void 0},y("lng_settings_sensitive_title")),a.ZP.createElement(fn.Z,{label:y("lng_settings_sensitive_disable_filtering"),subLabel:y("lng_settings_sensitive_about"),checked:Boolean(d),disabled:!m,onCheck:I})))}))),ua=(0,a.X$)((0,s.c$)((e=>({languages:e.settings.byKey.languages,language:e.settings.byKey.language})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,languages:o,language:i}=e;const{loadLanguages:c,setSettingOption:d}=(0,s.uC)(),[m,h]=(0,a.eJ)(i),[Z,v,P]=(0,ye.Z)();(0,a.d4)((()=>{c()}),[c]);const g=(0,a.I4)((e=>{h(e),v(),(0,Bn.m0)(e,(()=>{P(),d({language:e})}))}),[v,P,d]),p=(0,a.Ye)((()=>o?function(e){const t=(window.navigator.language||"en").toLowerCase(),n=t.substr(0,2);return e.map((e=>{let{langCode:t,nativeName:n,name:a}=e;return{value:t,label:n,subLabel:a}})).sort((e=>!t||e.value!==t&&e.value!==n?0:-1))}(o):void 0),[o]);return(0,u.ZP)(t,r,n,l.MT.Language),a.ZP.createElement("div",{className:"settings-content settings-item settings-language custom-scroll"},p?a.ZP.createElement(at.Z,{name:"keyboard-send-settings",options:p,selected:m,loadingOption:Z?m:void 0,onChange:g}):a.ZP.createElement(we.Z,null))})));function ha(e){switch(e){case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return"phoneNumber";case l.MT.PrivacyLastSeen:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return"lastSeen";case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return"profilePhoto";case l.MT.PrivacyForwarding:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return"forwards";case l.MT.PrivacyGroupChats:case l.MT.PrivacyGroupChatsAllowedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return"chatInvite"}}const Za=(0,a.X$)((0,s.c$)(((e,t)=>{let n,{screen:a}=t;const{chats:{byId:s},settings:{privacy:r}}=e;switch(a){case l.MT.PrivacyPhoneNumber:n=r.phoneNumber;break;case l.MT.PrivacyLastSeen:n=r.lastSeen;break;case l.MT.PrivacyProfilePhoto:n=r.profilePhoto;break;case l.MT.PrivacyForwarding:n=r.forwards;break;case l.MT.PrivacyGroupChats:n=r.chatInvite}return n?{...n,chatsById:s}:{}}))((e=>{let{screen:t,isActive:n,onScreenSelect:r,onReset:o,visibility:i,allowUserIds:c,allowChatIds:d,blockUserIds:m,blockChatIds:Z,chatsById:v}=e;const{setPrivacyVisibility:P}=(0,s.uC)(),g=(0,h.Z)(),p=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyGroupChats:return[{value:"everybody",label:g("P2PEverybody")},{value:"contacts",label:g("P2PContacts")}];default:return[{value:"everybody",label:g("P2PEverybody")},{value:"contacts",label:g("P2PContacts")},{value:"nobody",label:g("P2PNobody")}]}}),[g,t]),E={shouldShowDenied:"nobody"!==i,shouldShowAllowed:"everybody"!==i},C=ha(t),f=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyPhoneNumber:return g("PrivacyPhoneTitle");case l.MT.PrivacyLastSeen:return g("LastSeenTitle");case l.MT.PrivacyProfilePhoto:return g("PrivacyProfilePhotoTitle");case l.MT.PrivacyForwarding:return g("PrivacyForwardsTitle");case l.MT.PrivacyGroupChats:return g("WhoCanAddMe");default:return}}),[g,t]);(0,u.ZP)(n,o,r,t);const b=(0,a.Ye)((()=>{if(t===l.MT.PrivacyLastSeen)return g("CustomHelp")}),[g,t]),I=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberAllowedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenAllowedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoAllowedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingAllowedContacts;default:return l.MT.PrivacyGroupChatsAllowedContacts}})(),y=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberDeniedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenDeniedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoDeniedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingDeniedContacts;default:return l.MT.PrivacyGroupChatsDeniedContacts}})(),N=(0,a.Ye)((()=>c&&d&&v?d.reduce(((e,t)=>e+(v[t]?v[t].membersCount:0)),c.length):0),[d,c,v]),k=(0,a.Ye)((()=>m&&Z&&v?Z.reduce(((e,t)=>e+(v[t]?v[t].membersCount:0)),m.length):0),[Z,m,v]),S=(0,a.I4)((e=>{P({privacyKey:C,visibility:e})}),[C,P]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:g.isRtl?"rtl":void 0},f),a.ZP.createElement(at.Z,{name:`visibility-${C}`,options:p,onChange:S,selected:i}),b&&a.ZP.createElement("p",{className:"settings-item-description-larger",dir:g.isRtl?"rtl":void 0},b)),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:g.isRtl?"rtl":void 0},g("PrivacyExceptions")),E.shouldShowAllowed&&a.ZP.createElement(Ae.Z,{narrow:!0,icon:"add-user",onClick:()=>{r(I)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},N>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"+",N),a.ZP.createElement("span",{className:"title"},g("AlwaysShareWith")),a.ZP.createElement("span",{className:"subtitle"},g("EditAdminAddUsers")))),E.shouldShowDenied&&a.ZP.createElement(Ae.Z,{narrow:!0,icon:"delete-user",onClick:()=>{r(y)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},k>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"−",k),a.ZP.createElement("span",{className:"title"},g("NeverShareWith")),a.ZP.createElement("span",{className:"subtitle"},g("EditAdminAddUsers"))))))})));function va(e){return[e.region,e.country].filter(Boolean).join(", ")}function Pa(e){return`${e.deviceModel}${e.deviceModel?", ":""} ${e.platform} ${e.systemVersion}`}const ga=(0,a.X$)((0,s.c$)((e=>({activeSessions:e.activeSessions})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,activeSessions:o}=e;const{loadAuthorizations:i,terminateAuthorization:c,terminateAllAuthorizations:d}=(0,s.uC)(),[m,Z,v]=(0,ye.Z)();(0,a.d4)((()=>{i()}),[i]);const P=(0,a.I4)((e=>{c({hash:e})}),[c]),g=(0,a.I4)((()=>{v(),d()}),[v,d]),p=(0,a.Ye)((()=>o.find((e=>e.isCurrent))),[o]),E=(0,a.Ye)((()=>o.filter((e=>!e.isCurrent))),[o]),C=(0,h.Z)();return(0,u.ZP)(t,r,n,l.MT.PrivacyActiveSessions),a.ZP.createElement("div",{className:"settings-content custom-scroll"},p&&(b=p,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:C.isRtl?"rtl":void 0},C("AuthSessions.CurrentSession")),a.ZP.createElement(Ae.Z,{narrow:!0,inactive:!0,className:"no-icon"},a.ZP.createElement("div",{className:"multiline-menu-item",dir:"auto"},a.ZP.createElement("span",{className:"title",dir:"auto"},b.appName),a.ZP.createElement("span",{className:"subtitle black tight"},Pa(b)),a.ZP.createElement("span",{className:"subtitle"},b.ip," - ",va(b)))),a.ZP.createElement(Ae.Z,{className:"destructive mb-0 no-icon",icon:"stop",ripple:!0,narrow:!0,onClick:Z},C("TerminateAllSessions")))),E&&(f=E,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:C.isRtl?"rtl":void 0},C("OtherSessions")),f.map((function(e){return a.ZP.createElement(Ae.Z,{key:e.hash,ripple:!0,narrow:!0,contextActions:[{title:"Terminate",icon:"stop",handler:()=>{P(e.hash)}}],className:"no-icon"},a.ZP.createElement("div",{className:"multiline-menu-item full-size",dir:"auto"},a.ZP.createElement("span",{className:"date"},(0,j.VX)(C,1e3*e.dateActive)),a.ZP.createElement("span",{className:"title"},e.appName),a.ZP.createElement("span",{className:"subtitle black tight"},Pa(e)),a.ZP.createElement("span",{className:"subtitle"},e.ip," - ",va(e))))})))),E&&a.ZP.createElement(Xe.Z,{isOpen:m,onClose:v,text:"Are you sure you want to terminate all other sessions?",confirmLabel:"Terminate All Other Sessions",confirmHandler:g,confirmIsDestructive:!0}));var f,b})));var pa=n(6272);const Ea=(0,a.X$)((0,s.c$)((e=>{const{users:{byId:t},blocked:{ids:n},contactList:a,currentUserId:s}=e;return{usersById:t,blockedIds:n,contactIds:null==a?void 0:a.userIds,localContactIds:e.userSearch.localUserIds,currentUserId:s}}))((e=>{let{usersById:t,blockedIds:n,contactIds:r,localContactIds:l,currentUserId:o,isOpen:i,onClose:c}=e;const{loadContactList:d,setUserSearchQuery:m,blockContact:u}=(0,s.uC)(),Z=(0,h.Z)(),[v,P]=(0,a.eJ)(""),p=(0,a.sO)(null);(0,a.d4)((()=>{m({query:v})}),[v,m]);const E=(0,a.Ye)((()=>{const e=(0,me.Tw)([...r||[],...l||[]].filter((e=>e!==o&&!n.includes(e))));return(0,g.kK)(e,t,v).sort(((e,n)=>{const a=(0,g.Js)(t[e])||"",s=(0,g.Js)(t[n])||"";return a.localeCompare(s)}))}),[n,r,o,v,l,t]),C=(0,a.I4)((e=>{const{id:n,accessHash:a}=t[e]||{};n&&a&&(u({contactId:n,accessHash:a}),c())}),[u,c,t]);return a.ZP.createElement(Be,{isOpen:i,chatOrUserIds:E,filterRef:p,filterPlaceholder:Z("BlockedUsers.BlockUser"),filter:v,onFilterChange:P,loadMore:d,onSelectChatOrUser:C,onClose:c})}))),Ca=(0,a.X$)((0,s.c$)((e=>{const{chats:{byId:t},users:{byId:n},blocked:{ids:a},countryList:{phoneCodes:s}}=e;return{chatsByIds:t,usersByIds:n,blockedIds:a,phoneCodeList:s}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,chatsByIds:i,usersByIds:c,blockedIds:d,phoneCodeList:m}=e;const{unblockContact:Z}=(0,s.uC)(),v=(0,h.Z)(),[P,p,E]=(0,ye.Z)(),C=(0,a.I4)((e=>{Z({contactId:e})}),[Z]);return(0,u.ZP)(t,r,n,l.MT.PrivacyBlockedUsers),a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content infinite-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("p",{className:"settings-item-description-larger mt-0 mb-2",dir:v.isRtl?"rtl":void 0},v("BlockedUsersInfo"))),a.ZP.createElement("div",{className:"chat-list custom-scroll"},null!=d&&d.length?a.ZP.createElement("div",{className:"scroll-container"},d.map(((e,t)=>function(e,t,n){const s=(0,g.YC)(e),r=s?c[e]:void 0,l=s?void 0:i[e],d=(0,X.Z)("Chat chat-item-clickable blocked-list-item small-icon",s?"private":"group");return a.ZP.createElement(Ae.Z,{key:e,className:d,ripple:!0,narrow:!0,contextActions:[{title:"Unblock",icon:"unlock",handler:()=>{C(e)}}],style:`top: ${(0+t)*o.rS}px;`},a.ZP.createElement(ge.Z,{size:"medium",user:r,chat:l}),a.ZP.createElement("div",{className:"contact-info",dir:"auto"},a.ZP.createElement("h3",{dir:"auto"},(0,Pe.Z)((s?(0,g.Js)(r):(0,g.U)(v,l))||"")),(null==r?void 0:r.phoneNumber)&&a.ZP.createElement("div",{className:"contact-phone",dir:"auto"},(0,pa.WZ)(m,r.phoneNumber)),r&&!r.phoneNumber&&r.username&&a.ZP.createElement("div",{className:"contact-username",dir:"auto"},"@",r.username)))}(e,t)))):d&&!d.length?a.ZP.createElement("div",{className:"no-results",dir:"auto"},v("NoBlocked")):a.ZP.createElement(we.Z,{key:"loading"}))),a.ZP.createElement(mn.Z,{isShown:!0,onClick:p,ariaLabel:v("BlockContact")},a.ZP.createElement("i",{className:"icon-add"})),a.ZP.createElement(Ea,{isOpen:P,onClose:E}))})));var fa=n(7854);const ba=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"🔐")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,h.Z)();return(0,u.ZP)(t,n,r,l.MT.TwoFaEnabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},(0,Pe.Z)(o("EnabledPasswordText"),["br"]))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(Ae.Z,{icon:"edit",onClick:()=>r(l.MT.TwoFaChangePasswordCurrent)},o("ChangePassword")),a.ZP.createElement(Ae.Z,{icon:"password-off",onClick:()=>r(l.MT.TwoFaTurnOff)},o("TurnPasswordOff")),a.ZP.createElement(Ae.Z,{icon:"email",onClick:()=>r(l.MT.TwoFaRecoveryEmailCurrentPassword)},o("SetRecoveryEmail"))))})));var Ia=n(3490),ya=n(9364);const Na=(0,a.X$)((e=>{let{screen:t,isActive:n,onScreenSelect:s,onReset:r,error:l,isLoading:o,expectedPassword:i,placeholder:c="Current Password",hint:d,submitLabel:m,clearError:Z,onSubmit:v}=e;const[P,g]=(0,a.eJ)(""),[p,E]=(0,a.eJ)(!1),C=(0,a.I4)((e=>{i&&e!==i?g("Passwords Should Be Equal"):v(e)}),[v,i]),f=(0,a.I4)((()=>{Z&&Z(),g("")}),[Z]),b=(0,h.Z)();return(0,u.ZP)(n,r,s,t),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ia.Z,{isBig:!0,isPasswordVisible:p})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(ya.Z,{error:P||l,hint:d,placeholder:c,submitLabel:m||b("Next"),clearError:f,isLoading:o,isPasswordVisible:p,onChangePasswordVisibility:E,onSubmit:C})))})),ka=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"🔐")})))((e=>{let{isActive:t,onScreenSelect:n,onReset:s,animatedEmoji:r,onStart:o}=e;const i=(0,h.Z)();return(0,u.ZP)(t,s,n,l.MT.TwoFaDisabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:r,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},i("SetAdditionalPasswordInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(R.Z,{onClick:o},i("EditAdminTransferSetPassword"))))}))),Sa=i.wB?550:400,wa=(0,a.X$)((0,s.c$)(((e,t)=>{let{icon:n}=t;return{animatedEmoji:(0,p.zB)(e,"email"===n?"💌":"💡")}}))((e=>{let{animatedEmoji:t,type:n="text",isLoading:s,error:r,placeholder:l,shouldConfirm:o,clearError:c,onSubmit:d,isActive:m,onScreenSelect:Z,onReset:v,screen:P}=e;const g=(0,a.sO)(null),[p,E]=(0,a.eJ)(""),[C,f,b]=(0,ye.Z)(!1);(0,a.d4)((()=>{i.$b||setTimeout((()=>{g.current.focus()}),Sa)}),[]);const I=(0,h.Z)();return(0,u.ZP)(m,v,Z,P),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement("form",{action:"",onSubmit:e=>{e.preventDefault(),g.current&&d(p)}},a.ZP.createElement(Te.Z,{ref:g,value:p,inputMode:n,label:l,error:r,onChange:e=>{r&&c&&c(),E(e.target.value)}}),p?a.ZP.createElement(R.Z,{type:"submit",isLoading:s,ripple:!0},I("Continue")):a.ZP.createElement(R.Z,{isText:!0,isLoading:s,ripple:!0,onClick:o?f:()=>{d()}},I("YourEmailSkip"))),o&&a.ZP.createElement(Me.Z,{className:"narrow",isOpen:C,title:I("YourEmailSkipWarning"),onClose:b},(0,Pe.Z)(I("YourEmailSkipWarningText"),["br","simple_markdown"]),a.ZP.createElement("div",{className:"dialog-buttons"},a.ZP.createElement(R.Z,{color:"danger",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:()=>{b(),d()}},I("YourEmailSkip")),a.ZP.createElement(R.Z,{color:"primary",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:b},I("Cancel"))))))}))),Ma=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"🥳")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,h.Z)();return(0,u.ZP)(t,n,r,l.MT.TwoFaCongratulations),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},o("TwoStepVerificationPasswordSetInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(R.Z,{onClick:()=>{r(l.MT.Privacy)}},o("TwoStepVerificationPasswordReturnSettings"))))}))),Ta=i.wB?550:400,Ra=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"💌"),codeLength:e.twoFaSettings.waitingEmailCodeLength})))((e=>{let{animatedEmoji:t,codeLength:n,isLoading:s,error:r,clearError:l,onSubmit:o,isActive:c,onScreenSelect:d,onReset:m,screen:Z}=e;const v=(0,a.sO)(null),[P,g]=(0,a.eJ)("");(0,a.d4)((()=>{i.$b||setTimeout((()=>{v.current.focus()}),Ta)}),[]);const p=(0,h.Z)();return(0,u.ZP)(c,m,d,Z),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(Te.Z,{value:P,ref:v,inputMode:"decimal",label:p("YourEmailCode"),error:r,onChange:e=>{r&&l&&l();const t=e.target.value.slice(0,n);t.length===n&&o(t),g(t),e.target.value=t}}),s&&a.ZP.createElement(we.Z,null)))}))),Aa=(0,a.X$)((0,s.c$)((e=>({...e.twoFaSettings})))((e=>{let{currentScreen:t,shownScreen:n,state:r,hint:o,isLoading:i,error:c,waitingEmailCodeLength:d,dispatch:m,isActive:u,onScreenSelect:Z,onReset:v}=e;const{updatePassword:P,checkPassword:g,clearTwoFaError:p,updateRecoveryEmail:E,provideTwoFaEmailCode:C,clearPassword:f}=(0,s.uC)();(0,a.d4)((()=>{d&&(t===l.MT.TwoFaNewPasswordEmail?Z(l.MT.TwoFaNewPasswordEmailCode):t===l.MT.TwoFaRecoveryEmail&&Z(l.MT.TwoFaRecoveryEmailCode))}),[t,Z,d]);const b=(0,a.I4)((()=>{m({type:"reset"}),Z(l.MT.TwoFaNewPassword)}),[m,Z]),I=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),Z(l.MT.TwoFaNewPasswordConfirm)}),[m,Z]),y=(0,a.I4)((()=>{Z(l.MT.TwoFaNewPasswordHint)}),[Z]),N=(0,a.I4)((e=>{m({type:"setHint",payload:e}),Z(l.MT.TwoFaNewPasswordEmail)}),[m,Z]),k=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),P({...r,email:e,onSuccess:()=>{Z(l.MT.TwoFaCongratulations)}})}),[m,Z,r,P]),S=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),g({currentPassword:e,onSuccess:()=>{Z(l.MT.TwoFaChangePasswordNew)}})}),[g,m,Z]),w=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),Z(l.MT.TwoFaChangePasswordConfirm)}),[m,Z]),M=(0,a.I4)((()=>{Z(l.MT.TwoFaChangePasswordHint)}),[Z]),T=(0,a.I4)((e=>{m({type:"setHint",payload:e}),P({...r,hint:e,onSuccess:()=>{Z(l.MT.TwoFaCongratulations)}})}),[m,Z,r,P]),R=(0,a.I4)((e=>{f({currentPassword:e,onSuccess:()=>{Z(l.MT.Privacy)}})}),[f,Z]),A=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),g({currentPassword:e,onSuccess:()=>{Z(l.MT.TwoFaRecoveryEmail)}})}),[g,m,Z]),L=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),E({...r,email:e,onSuccess:()=>{Z(l.MT.TwoFaCongratulations)}})}),[m,Z,r,E]),F=(0,a.I4)((e=>{C({code:e})}),[C]),B=(0,h.Z)();switch(t){case l.MT.TwoFaDisabled:return a.ZP.createElement(ka,{onStart:b,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPassword:return a.ZP.createElement(Na,{screen:t,placeholder:B("PleaseEnterPassword"),submitLabel:B("Continue"),onSubmit:I,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement(Na,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),submitLabel:B("Continue"),onSubmit:y,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordHint:return a.ZP.createElement(wa,{icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:N,screen:t,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordEmail:return a.ZP.createElement(wa,{icon:"email",type:"email",isLoading:i,error:c,clearError:p,placeholder:B("RecoveryEmailTitle"),shouldConfirm:!0,onSubmit:k,screen:t,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordEmailCode:return a.ZP.createElement(Ra,{isLoading:i,error:c,clearError:p,onSubmit:F,screen:t,onScreenSelect:Z,isActive:u||n===l.MT.TwoFaCongratulations,onReset:v});case l.MT.TwoFaCongratulations:return a.ZP.createElement(Ma,{onScreenSelect:Z,isActive:u,onReset:v});case l.MT.TwoFaEnabled:return a.ZP.createElement(ba,{onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordCurrent:return a.ZP.createElement(Na,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:S,onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordNew:return a.ZP.createElement(Na,{screen:t,placeholder:B("PleaseEnterNewFirstPassword"),onSubmit:w,onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement(Na,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),onSubmit:M,onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement(wa,{isLoading:i,error:c,clearError:p,icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:T,onScreenSelect:Z,isActive:u||n===l.MT.TwoFaCongratulations,onReset:v,screen:t});case l.MT.TwoFaTurnOff:return a.ZP.createElement(Na,{isLoading:i,error:c,clearError:p,hint:o,onSubmit:R,onScreenSelect:Z,isActive:u,onReset:v,screen:t});case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement(Na,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:A,onScreenSelect:Z,isActive:u||[l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement(wa,{screen:t,icon:"email",type:"email",placeholder:B("RecoveryEmailTitle"),onSubmit:L,onScreenSelect:Z,isActive:u||[l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Ra,{screen:t,isLoading:i,error:c,clearError:p,onSubmit:F,onScreenSelect:Z,isActive:u||n===l.MT.TwoFaCongratulations,onReset:v});default:return}})));var La=n(1820);function Fa(e,t){const{privacy:n}=e.settings;switch(t){case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return n.phoneNumber;case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return n.lastSeen;case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return n.profilePhoto;case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return n.forwards;case l.MT.PrivacyGroupChatsDeniedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return n.chatInvite}}const Ba=(0,a.X$)((0,s.c$)(((e,t)=>{let{screen:n}=t;return{currentUserId:e.currentUserId,settings:Fa(e,n)}}))((e=>{let{isAllowList:t,screen:n,isActive:r,onScreenSelect:i,onReset:c,currentUserId:d,settings:m}=e;const{setPrivacySettings:Z}=(0,s.uC)(),v=(0,h.Z)(),P=(0,a.Ye)((()=>m?t?[...m.allowUserIds,...m.allowChatIds]:[...m.blockUserIds,...m.blockChatIds]:[]),[t,m]),[p,E]=(0,a.eJ)(""),[C,f]=(0,a.eJ)(!1),[b,I]=(0,a.eJ)(P),y=(0,yn.d7)(o.Nf),N=(0,yn.d7)(o.WS),k=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=(0,me.Tw)([...y||[],...N||[]]).filter((t=>{const n=e[t];return n&&((0,g.YC)(n.id)&&n.id!==d||(0,g.Bf)(n))}));return(0,me.Tw)([...P,...(0,g.$l)(v,t,e,p)])}),[y,N,P,v,p,d]),S=(0,a.I4)((e=>{I(e),f(!0)}),[]),w=(0,a.I4)((()=>{Z({privacyKey:ha(n),isAllowList:Boolean(t),contactsIds:b}),i(l.MT.Privacy)}),[t,b,i,n,Z]);return(0,u.ZP)(r,c,i,n),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(La.Z,{itemIds:k||[],selectedIds:b,filterValue:p,filterPlaceholder:v(t?"AlwaysShareWithPlaceholder":"NeverShareWithPlaceholder"),searchInputId:"new-group-picker-search",onSelectedIdsChange:S,onFilterChange:E}),a.ZP.createElement(mn.Z,{isShown:C,onClick:w,ariaLabel:v(t?"AlwaysShareWithTitle":"NeverShareWithTitle")},a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),$a=(0,a.X$)((0,s.c$)((e=>{const{availableReactions:t,appConfig:n}=e;return{availableReactions:t,selectedReaction:null==n?void 0:n.defaultReaction}}))((e=>{let{isActive:t,onReset:n,onScreenSelect:r,availableReactions:o,selectedReaction:i}=e;const{setDefaultReaction:c}=(0,s.uC)();(0,u.ZP)(t,n,r,l.MT.General);const d=(null==o?void 0:o.filter((e=>!e.isInactive)).map((e=>({label:a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(it.Z,{reaction:e.reaction}),e.title),value:e.reaction}))))||[],m=(0,a.I4)((e=>{c({reaction:e})}),[c]);return a.ZP.createElement("div",{className:"settings-content settings-item custom-scroll settings-quick-reaction"},a.ZP.createElement(at.Z,{name:"quick-reaction-settings",options:d,selected:i,onChange:m}))}))),xa=Object.keys(l.MT).length/2,Da=[l.MT.TwoFaDisabled,l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations,l.MT.TwoFaEnabled,l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode],Oa=[l.MT.Folders,l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersEditFolderFromChatList,l.MT.FoldersIncludedChats,l.MT.FoldersIncludedChatsFromChatList,l.MT.FoldersExcludedChats,l.MT.FoldersExcludedChatsFromChatList],Ua=[l.MT.PrivacyBlockedUsers,l.MT.PrivacyActiveSessions],Ga=[l.MT.PrivacyPhoneNumberAllowedContacts,l.MT.PrivacyPhoneNumberDeniedContacts],Ja=[l.MT.PrivacyLastSeenAllowedContacts,l.MT.PrivacyLastSeenDeniedContacts],Xa=[l.MT.PrivacyProfilePhotoAllowedContacts,l.MT.PrivacyProfilePhotoDeniedContacts],za=[l.MT.PrivacyForwardingAllowedContacts,l.MT.PrivacyForwardingDeniedContacts],_a=[l.MT.PrivacyGroupChatsAllowedContacts,l.MT.PrivacyGroupChatsDeniedContacts],Ya=(0,a.X$)((e=>{let{isActive:t,currentScreen:n,foldersState:s,foldersDispatch:r,onScreenSelect:o,onReset:c,shouldSkipTransition:d}=e;const[m,u]=(0,nn.Z)(sn,an),h=(0,a.I4)((()=>{n!==l.MT.FoldersCreateFolder&&n!==l.MT.FoldersEditFolder&&n!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),n!==l.MT.FoldersIncludedChats&&n!==l.MT.FoldersExcludedChats?c():"create"===s.mode?o(l.MT.FoldersCreateFolder):o(l.MT.FoldersEditFolder)}),[s.mode,r,n,c,o]),Z=(0,a.I4)((()=>{r({type:"saveFilters"}),h()}),[r,h]);function v(e,i,c){return a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(rn,{currentScreen:n,onReset:h,onSaveFilter:Z,onScreenSelect:o,editedFolderId:s.folderId}),function(e,i){const c={[l.MT.PrivacyPhoneNumber]:Ga.includes(i),[l.MT.PrivacyLastSeen]:Ja.includes(i),[l.MT.PrivacyProfilePhoto]:Xa.includes(i),[l.MT.PrivacyForwarding]:za.includes(i),[l.MT.PrivacyGroupChats]:_a.includes(i)},d=Da.includes(i),Z=Oa.includes(i),v=Ua.includes(i)||d||Object.keys(c).includes(i.toString())||Object.values(c).find((e=>!0===e));switch(n){case l.MT.Main:return a.ZP.createElement(cn,{onScreenSelect:o,isActive:t,onReset:h});case l.MT.EditProfile:return a.ZP.createElement(Cn,{onScreenSelect:o,isActive:t&&e,onReset:h});case l.MT.General:return a.ZP.createElement(zn,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor||i===l.MT.GeneralChatBackground||i===l.MT.QuickReaction||v||Z,onReset:h});case l.MT.QuickReaction:return a.ZP.createElement($a,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Notifications:return a.ZP.createElement(da,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.DataStorage:return a.ZP.createElement(In,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Privacy:return a.ZP.createElement(ma,{onScreenSelect:o,isActive:e||v||d,onReset:h});case l.MT.Language:return a.ZP.createElement(ua,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.GeneralChatBackground:return a.ZP.createElement(aa,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor,onReset:h});case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement(ia,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyActiveSessions:return a.ZP.createElement(ga,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyBlockedUsers:return a.ZP.createElement(Ca,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyLastSeen:case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyForwarding:case l.MT.PrivacyGroupChats:return a.ZP.createElement(Za,{screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement(Ba,{isAllowList:!0,screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement(Ba,{screen:n,onScreenSelect:o,isActive:e,onReset:h});case l.MT.Folders:case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(Fn,{currentScreen:n,shownScreen:i,state:s,dispatch:r,isActive:e,onScreenSelect:o,onReset:h});case l.MT.TwoFaDisabled:case l.MT.TwoFaNewPassword:case l.MT.TwoFaNewPasswordConfirm:case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaCongratulations:case l.MT.TwoFaEnabled:case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:case l.MT.TwoFaChangePasswordHint:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:case l.MT.TwoFaRecoveryEmail:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Aa,{currentScreen:n,state:m,dispatch:u,shownScreen:i,isActive:e,onScreenSelect:o,onReset:h});default:return}}(e,c))}return a.ZP.createElement(L.Z,{id:"Settings",name:d?"none":i.s0,activeKey:n,renderCount:xa},v)})),Ha=(0,G.P2)((e=>e()),6e4,!0),Va=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n,statusesById:a}=e.users;return{usersById:n,userStatusesById:a,contactIds:t,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{isActive:t,filter:n,usersById:r,userStatusesById:l,contactIds:o,serverTimeOffset:c,onReset:d}=e;const{loadContactList:m,openChat:h}=(0,s.uC)();(0,a.d4)((()=>{Ha((()=>{m()}))})),(0,u.ZP)(t,d);const Z=(0,a.I4)((e=>{h({id:e,shouldReplaceHistory:!0})}),[h]),v=(0,a.Ye)((()=>{if(!o)return;const e=(0,g.kK)(o,r,n);return(0,g.Z0)(e,r,l,void 0,c)}),[o,n,r,l,c]),[P,p]=(0,Ne.Z)(void 0,v,Boolean(n));return a.ZP.createElement(Re.Z,{items:P,onLoadMore:p,className:"chat-list custom-scroll"},null!=P&&P.length?P.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable",onClick:()=>Z(e),ripple:!i.wB},a.ZP.createElement(Fe.Z,{userId:e,forceShowSelf:!0,avatarSize:"large"})))):P&&!P.length?a.ZP.createElement("p",{className:"no-results",key:"no-results",dir:"auto"},n.length?"No contacts matched your search.":"Contact list is empty."):a.ZP.createElement(we.Z,{key:"loading"}))}))),qa=(0,G.P2)((e=>e()),6e4,!0),ja=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n}=e.chats,{query:a,fetchingStatus:s,globalResults:r,localResults:l}=e.globalSearch,{userIds:o}=r||{},{userIds:i}=l||{};return{chatsById:n,localContactIds:t,searchQuery:a,isSearching:null==s?void 0:s.chats,globalUserIds:o,localUserIds:i}}))((e=>{let{isChannel:t,isActive:n,selectedMemberIds:r,onSelectedMemberIdsChange:l,onNextStep:o,onReset:i,chatsById:c,localContactIds:d,searchQuery:m,isSearching:Z,localUserIds:v,globalUserIds:P}=e;const{loadContactList:p,setGlobalSearchQuery:E}=(0,s.uC)();(0,a.d4)((()=>{qa((()=>{p()}))}));const C=(0,h.Z)();(0,u.ZP)(n,i);const f=(0,a.I4)((e=>{E({query:e})}),[E]),b=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,t=d?(0,g.kK)(d,e,m):[];return(0,g.ih)((0,me.Tw)([...t,...v||[],...P||[]]).filter((t=>{const n=e[t];return!n||!n.isSelf&&(n.canBeInvitedToGroup||!(0,g.cS)(n))})),c,!1,r)}),[d,c,m,v,P,r]),I=(0,a.I4)((()=>{(r.length||t)&&(E({query:""}),o())}),[r.length,t,E,o]);return a.ZP.createElement("div",{className:"NewChat step-1"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:i,ariaLabel:"Return to Chat List"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,C("GroupAddMembers"))),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(La.Z,{itemIds:b,selectedIds:r,filterValue:m,filterPlaceholder:C("SendMessageTo"),searchInputId:"new-group-picker-search",isLoading:Z,onSelectedIdsChange:l,onFilterChange:f}),a.ZP.createElement(mn.Z,{isShown:Boolean(r.length||t),onClick:I,ariaLabel:t?"Continue To Channel Info":"Continue To Group Info"},a.ZP.createElement("i",{className:"icon-arrow-right"}))))}))),Ka=(0,a.X$)((0,s.c$)((e=>{const{progress:t,error:n}=e.chatCreation||{};return{creationProgress:t,creationError:n}}))((e=>{let{isChannel:t,isActive:n,memberIds:r,onReset:o,creationProgress:i,creationError:c}=e;const{createGroupChat:d,createChannel:m}=(0,s.uC)(),Z=(0,h.Z)();(0,u.ZP)(n,o);const[v,P]=(0,a.eJ)(""),[g,p]=(0,a.eJ)(""),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),I="Chat title can't be empty",y="Channel title can't be empty",N="Sorry, creating supergroups is not yet supported",k=i===l.Nh.InProgress,S=(0,a.I4)((e=>{const{value:t}=e.currentTarget,n=t.replace(/^\s+/,"");P(n),n!==t&&(e.currentTarget.value=n)}),[]),w=(0,a.I4)((e=>{p(e.currentTarget.value)}),[]),M=(0,a.I4)((()=>{v.length?r.length>199?b(N):d({title:v,photo:E,memberIds:r}):b(I)}),[v,r,d,E,I,N]),T=(0,a.I4)((()=>{v.length?m({title:v,about:g,photo:E,memberIds:r}):b(y)}),[v,m,g,E,r,y]);(0,a.d4)((()=>{i===l.Nh.Complete&&o(!0)}),[i,o]);const A=c&&Z(c)||(f!==I&&f!==y?f:void 0);return a.ZP.createElement("div",{className:"NewChat"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>o(),ariaLabel:"Return to member selection"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,Z(t?"NewChannel":"NewGroup"))),a.ZP.createElement("div",{className:"NewChat-inner step-2"},a.ZP.createElement(dn.Z,{onChange:C,title:Z("AddPhoto")}),a.ZP.createElement(Te.Z,{value:v,onChange:S,label:Z(t?"EnterChannelName":"GroupName"),error:f===I||f===y?f:void 0}),t&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Te.Z,{value:g,onChange:w,label:Z("DescriptionOptionalPlaceholder")}),a.ZP.createElement("p",{className:"note"},Z("DescriptionInfo"))),A&&a.ZP.createElement("p",{className:"error"},A),r.length>0&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"chat-members-heading"},Z("GroupInfo.ParticipantCount",r.length,"i")),a.ZP.createElement("div",{className:"chat-members-list custom-scroll"},r.map((e=>a.ZP.createElement(Ae.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Fe.Z,{userId:e}))))))),a.ZP.createElement(mn.Z,{isShown:0!==v.length,onClick:t?T:M,disabled:k,ariaLabel:t?Z("ChannelIntro.CreateChannel"):"Create Group"},k?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),Wa=Object.keys(l.du).length/2,Qa=(0,a.X$)((e=>{let{isActive:t,isChannel:n=!1,content:s,onContentChange:r,onReset:o}=e;const[c,d]=(0,a.eJ)([]),m=(0,a.I4)((()=>{r(n?l.du.NewChannelStep2:l.du.NewGroupStep2)}),[n,r]);return a.ZP.createElement(L.Z,{id:"NewChat",name:i.s0,renderCount:Wa,activeKey:s},(e=>{switch(s){case l.du.NewChannelStep1:case l.du.NewGroupStep1:return a.ZP.createElement(ja,{isChannel:n,isActive:t,selectedMemberIds:c,onSelectedMemberIdsChange:d,onNextStep:m,onReset:o});case l.du.NewChannelStep2:case l.du.NewGroupStep2:return a.ZP.createElement(Ka,{isChannel:n,isActive:e&&t,memberIds:c,onReset:o});default:return}}))}));var es=n(1080);const ts=(0,a.X$)((e=>{let{isActive:t,onReset:n,onContentChange:s}=e;const r=(0,h.Z)();return(0,u.ZP)(t,n,s,l.du.Archived),a.ZP.createElement("div",{className:"ArchivedChats"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:n,ariaLabel:"Return to chat list"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,r("ArchivedChats"))),a.ZP.createElement(es.Z,{folderType:"archived",isActive:t}))}));var ns=n(1218);const as=(0,a.X$)((0,s.c$)((e=>{const{byId:t,orderedIds:n}=e.chatFolders;return{foldersById:t,folderOrderedIds:n}}))((e=>{let{isOpen:t,chatId:n,foldersById:r,folderOrderedIds:l,onClose:o,onCloseAnimationEnd:i}=e;const{editChatFolders:c}=(0,s.uC)(),d=(0,h.Z)(),m=(0,a.Ye)((()=>r?Object.keys(r).reduce(((e,t)=>{const{includedChatIds:a,pinnedChatIds:s}=r[Number(t)];return(a.includes(n)||null!=s&&s.includes(n))&&e.push(t),e}),[]):[]),[n,r]),[u,Z]=(0,a.eJ)(m),v=(0,a.Ye)((()=>(null==l?void 0:l.map((e=>({label:r?r[e].title:"",value:String(e)}))))||[]),[l,r]),P=(0,a.I4)((()=>{const e=m.filter((e=>!u.includes(e))).map(Number),t=u.filter((e=>!m.includes(e))).map(Number);c({chatId:n,idsToRemove:e,idsToAdd:t}),o()}),[n,c,m,o,u]);if(r&&l)return a.ZP.createElement(Me.Z,{isOpen:t,onClose:o,onCloseAnimationEnd:i,onEnter:P,className:"delete",title:d("FilterAddTo")},a.ZP.createElement(ns.Z,{options:v,selected:u,onChange:Z,round:!0}),a.ZP.createElement(R.Z,{color:"primary",className:"confirm-dialog-button",isText:!0,onClick:P},d("FilterAddTo")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:o},d("Cancel")))})));var ss=n(4319),rs=n(647);function ls(e){return e?"lng_context_copy_selected":"lng_context_copy_text"}let os,is;const cs={Down:!0,ArrowDown:!0,Up:!0,ArrowUp:!0,Left:!0,ArrowLeft:!0,Right:!0,ArrowRight:!0," ":!0,PageUp:!0,PageDown:!0,End:!0,Home:!0,Tab:!0},ds=e=>"changedTouches"in e?e.changedTouches[0].clientY:0,ms=e=>{const t="deltaY"in e?e.deltaY:ds(e);if(!os||!os.contains(e.target)||os.scrollTop<=0&&t<=0||os.scrollTop>=os.scrollHeight-os.offsetHeight&&t>=0){if(is&&e.target.closest(is))return;e.preventDefault()}};function us(e){cs[e.key]&&!function(e){if(!(e&&e instanceof HTMLElement))return!1;const t=e,n=t.tagName.toLowerCase();if("textarea"===n)return!0;if("input"!==n)return!1;const a=t.getAttribute("type");return!!a&&["text","password","number","email","tel","url","search","date","datetime","datetime-local","time","month","week"].indexOf(a.toLowerCase())>-1}(e.target)&&e.preventDefault()}function hs(e,t){os=e,is=t,document.addEventListener("wheel",ms,{passive:!1}),document.addEventListener("touchmove",ms,{passive:!1}),document.onkeydown=us}function Zs(){os=void 0,is=void 0,document.removeEventListener("wheel",ms),document.removeEventListener("touchmove",ms),document.onkeydown=null}var vs=n(3394),Ps=n(2328);const gs=(0,X.y)("ReactionSelectorReaction"),ps=(0,a.X$)((e=>{var t;let{reaction:n,previewIndex:s,onSendReaction:l,isReady:o}=e;const i=(0,a.sO)(null),c=(0,Z.Z)(`document${null===(t=n.selectAnimation)||void 0===t?void 0:t.id}`,!o,r.IU.Lottie),[d,m,u]=(0,ye.Z)(),[h,v]=(0,ye.Z)(),P=Boolean(o&&c),{transitionClassNames:g}=(0,H.Z)(P),{shouldRender:p,transitionClassNames:E}=(0,H.Z)(!o||!h,void 0,!0);return a.ZP.createElement("div",{className:gs("&"),onClick:function(){if(!i.current)return;const{x:e,y:t}=i.current.getBoundingClientRect();l(n.reaction,e,t)},ref:i,onMouseEnter:o?m:void 0},p&&a.ZP.createElement("div",{className:gs("static",o?[E]:void 0),style:`background-position-x: ${-32*s}px;`}),P&&a.ZP.createElement(mt.Z,{id:`select_${n.reaction}`,className:gs("animated",[g]),animationData:c,play:d,noLoop:!0,size:32,onLoad:v,onEnded:u}))})),Es=(0,X.y)("ReactionSelector"),Cs=(0,a.X$)((e=>{let{availableReactions:t,enabledReactions:n,onSendReaction:s,isPrivate:r,isReady:l}=e;const o=(0,a.sO)(null),[i,c]=(0,ye.Z)(!1);(0,Ct.Z)(o.current,!i),(0,a.bt)((()=>{c()}),[c]);const d=e=>{o&&("deltaY"in e?e.deltaY:ds(e))&&e.preventDefault()};if((r||null!=n&&n.length)&&t)return a.ZP.createElement("div",{className:Es("&"),onWheelCapture:d,onTouchMove:d},a.ZP.createElement("div",{className:Es("bubble-big")}),a.ZP.createElement("div",{className:Es("bubble-small")}),a.ZP.createElement("div",{className:Es("items-wrapper")},a.ZP.createElement("div",{className:Es("items",["no-scrollbar"]),ref:o},null==t?void 0:t.map(((e,t)=>{if(!e.isInactive&&(r||n&&n.includes(e.reaction)))return a.ZP.createElement(ps,{key:e.reaction,previewIndex:t,isReady:l,onSendReaction:s,reaction:e})})))))})),fs=(0,a.X$)((e=>{var t,n,s,l;let{availableReactions:o,isOpen:c,message:d,isPrivate:m,enabledReactions:u,anchor:Z,canSendNow:v,canReschedule:P,canReply:p,canEdit:E,canPin:C,canUnpin:f,canDelete:b,canReport:I,canForward:y,canFaveSticker:N,canUnfaveSticker:k,canCopy:S,canCopyLink:w,canSelect:M,canDownload:T,isDownloading:R,canShowSeenBy:A,canShowReactionsCount:L,canRemoveReaction:F,canShowReactionList:$,seenByRecentUsers:x,onReply:D,onEdit:O,onPin:U,onUnpin:G,onForward:J,onDelete:z,onReport:_,onFaveSticker:Y,onUnfaveSticker:H,onSelect:V,onSend:q,onReschedule:j,onClose:K,onCloseAnimationEnd:W,onCopyLink:Q,onDownload:ee,onShowSeenBy:te,onShowReactors:ne,onSendReaction:ae}=e;const se=(0,a.sO)(null),re=(0,a.sO)(null),le=function(e,t,n){const a=[],s=(0,g.UD)(e),l=(0,g.O$)(e)||((0,g.Cg)(e)?void 0:(0,g.F$)(e)),o=(0,g.Ti)(e,"inline"),i=l&&(o||(0,g.BM)(e))&&ss.yl,c=window.getSelection();if(i&&a.push({label:"lng_context_copy_image",handler:()=>{Promise.resolve(o?rs.he(o,r.IU.BlobUrl):l.blobUrl).then(ss.VP),t&&t()}}),s){var d;const n=Boolean((null==c||null===(d=c.anchorNode)||void 0===d?void 0:d.parentNode)&&c.anchorNode.parentNode.closest(".Message .content-inner")&&""!==c.toString().replace(/(?:\r\n|\r|\n)/g,""));a.push({label:ls(n),handler:()=>{const a=n&&c?c.toString():(0,g.EU)(e);(0,ss.TE)(a),t&&t()}})}return n&&a.push({label:"lng_context_copy_message_link",handler:()=>{n(),t&&t()}}),a}(d,K,w?Q:void 0),oe=!(m||null!=u&&u.length),ie=$&&!oe,[ce,de,me]=(0,ye.Z)(),ue=(0,a.I4)((()=>document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id="${d.id}"]`)),[d.id]),he=(0,a.I4)((()=>document.querySelector(".Transition__slide--active > .MessageList")),[]),Ze=(0,a.I4)((()=>document.querySelector(".MessageContextMenu .bubble")),[]),ve=(0,a.I4)((()=>{var e;const t=i.wB&&(null===(e=document.querySelector(".AudioPlayer-content"))||void 0===e?void 0:e.offsetHeight)||0,n=document.querySelector(".HeaderPinnedMessage-wrapper"),a=(i.wB&&!t||!i.wB&&(null==n?void 0:n.classList.contains("full-width")))&&(null==n?void 0:n.offsetHeight)||0;return{extraPaddingX:10,extraTopPadding:document.querySelector(".MiddleHeader").offsetHeight,marginSides:ie?32:void 0,extraMarginTop:a+t}}),[ie]),Pe=(0,a.I4)((()=>{ae(void 0,0,0)}),[ae]);(0,a.d4)((()=>{c?setTimeout((()=>{de()}),200):me()}),[c,de,me]);const{positionX:pe,positionY:Ee,transformOriginX:Ce,transformOriginY:fe,style:be,menuStyle:Ie,withScroll:Ne}=(0,vs.Z)(Z,ue,he,Ze,ve);(0,a.d4)((()=>(hs(Ne?re.current:void 0,".ReactionSelector"),Zs)),[Ne]);const ke=(0,h.Z)();return a.ZP.createElement(Ps.Z,{ref:se,isOpen:c,transformOriginX:Ce,transformOriginY:fe,positionX:pe,positionY:Ee,style:be,bubbleStyle:Ie,className:(0,X.Z)("MessageContextMenu","fluid",ie&&"with-reactions"),onClose:K,onCloseAnimationEnd:W},$&&a.ZP.createElement(Cs,{enabledReactions:u,onSendReaction:ae,isPrivate:m,availableReactions:o,isReady:ce}),a.ZP.createElement("div",{className:"scrollable-content custom-scroll",style:Ie,ref:re},F&&a.ZP.createElement(B.Z,{icon:"reactions",onClick:Pe},"Remove Reaction"),v&&a.ZP.createElement(B.Z,{icon:"send-outline",onClick:q},ke("MessageScheduleSend")),P&&a.ZP.createElement(B.Z,{icon:"schedule",onClick:j},ke("MessageScheduleEditTime")),p&&a.ZP.createElement(B.Z,{icon:"reply",onClick:D},ke("Reply")),E&&a.ZP.createElement(B.Z,{icon:"edit",onClick:O},ke("Edit")),N&&a.ZP.createElement(B.Z,{icon:"favorite",onClick:Y},ke("AddToFavorites")),k&&a.ZP.createElement(B.Z,{icon:"favorite",onClick:H},ke("Stickers.RemoveFromFavorites")),S&&le.map((e=>a.ZP.createElement(B.Z,{key:e.label,icon:"copy",onClick:e.handler},ke(e.label)))),C&&a.ZP.createElement(B.Z,{icon:"pin",onClick:U},ke("DialogPin")),f&&a.ZP.createElement(B.Z,{icon:"unpin",onClick:G},ke("DialogUnpin")),T&&a.ZP.createElement(B.Z,{icon:"download",onClick:ee},ke(R?"lng_context_cancel_download":"lng_media_download")),y&&a.ZP.createElement(B.Z,{icon:"forward",onClick:J},ke("Forward")),M&&a.ZP.createElement(B.Z,{icon:"select",onClick:V},ke("Common.Select")),I&&a.ZP.createElement(B.Z,{icon:"flag",onClick:_},ke("lng_context_report_msg")),(A||L)&&a.ZP.createElement(B.Z,{icon:L?"reactions":"group",onClick:L?ne:te,disabled:!(L||null!==(t=d.seenByUserIds)&&void 0!==t&&t.length)},L&&null!==(n=d.reactors)&&void 0!==n&&n.count?A&&null!==(s=d.seenByUserIds)&&void 0!==s&&s.length?ke("Chat.OutgoingContextMixedReactionCount",[d.reactors.count,d.seenByUserIds.length]):ke("Chat.ContextReactionCount",d.reactors.count,"i"):null!==(l=d.seenByUserIds)&&void 0!==l&&l.length?ke("Conversation.ContextMenuSeen",d.seenByUserIds.length,"i"):ke("Conversation.ContextMenuNoViews"),a.ZP.createElement("div",{className:"avatars"},null==x?void 0:x.map((e=>a.ZP.createElement(ge.Z,{size:"micro",user:e}))))),b&&a.ZP.createElement(B.Z,{destructive:!0,icon:"delete",onClick:z},ke("Delete"))))})),bs=2*I.Gw,Is=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a,s;let{message:r,messageListType:l}=t;const{threadId:i}=(0,p.Bt)(e)||{},c=(0,p.xs)(e,r.chatId),d=(0,p.Z1)(e,r.chatId),{seenByExpiresAt:m,seenByMaxChatMembers:u}=e.appConfig||{},{noOptions:h,canReply:Z,canPin:v,canUnpin:P,canDelete:E,canReport:C,canEdit:f,canForward:b,canFaveSticker:I,canUnfaveSticker:y,canCopy:N,canCopyLink:k,canSelect:S,canDownload:w}=i&&(0,p._k)(e,r,i)||{},M="pinned"===l,T="scheduled"===l,R=d&&(0,g.eA)(d),A=(0,g.CI)(r),L=Boolean(d&&u&&m&&(0,g.Bf)(d)&&(0,g.B4)(r)&&!T&&d.membersCount&&d.membersCountDate.now()/1e3-m),F=d&&(0,g.YC)(d.id),B=(0,g.Lo)(r),$=!A&&!R&&!T&&!B&&!F&&r.reactions&&!(0,g.JE)(r.reactions)&&r.reactions.canSeeList,x=F&&(null===(n=r.reactions)||void 0===n||null===(a=n.results)||void 0===a?void 0:a.some((e=>e.isChosen))),D=(0,p.EV)(e,r);return{availableReactions:e.availableReactions,noOptions:h,canSendNow:T,canReschedule:T,canReply:!M&&!T&&Z,canPin:!T&&v,canUnpin:!T&&P,canDelete:E,canReport:C,canEdit:!M&&f,canForward:!D&&!T&&b,canFaveSticker:!T&&I,canUnfaveSticker:!T&&y,canCopy:!D&&N,canCopyLink:!D&&!T&&k,canSelect:S,canDownload:!D&&w,activeDownloads:c,canShowSeenBy:L,enabledReactions:null==d||null===(s=d.fullInfo)||void 0===s?void 0:s.enabledReactions,isPrivate:F,hasFullInfo:Boolean(null==d?void 0:d.fullInfo),canShowReactionsCount:$,canShowReactionList:!A&&!B&&!T&&(null==d?void 0:d.id)!==o.aw,canRemoveReaction:x}}))((e=>{var t;let{availableReactions:n,isOpen:r,messageListType:l,chatUsername:o,message:i,album:c,anchor:d,onClose:m,onCloseAnimationEnd:u,noOptions:h,canSendNow:Z,hasFullInfo:v,canReschedule:P,canReply:g,canPin:p,canUnpin:E,canDelete:C,canReport:f,canShowReactionsCount:b,canShowReactionList:I,canRemoveReaction:y,canEdit:N,enabledReactions:k,isPrivate:S,canForward:w,canFaveSticker:M,canUnfaveSticker:T,canCopy:R,canCopyLink:A,canSelect:L,canDownload:F,activeDownloads:B,canShowSeenBy:$}=e;const{setReplyingToId:x,setEditingId:D,pinMessage:O,openForwardMenu:U,faveSticker:G,unfaveSticker:J,toggleMessageSelection:z,sendScheduledMessages:_,rescheduleMessage:Y,downloadMessageMedia:V,cancelMessageMediaDownload:q,loadSeenBy:K,openSeenByModal:W,sendReaction:Q,openReactorListModal:ee,loadFullChat:te,loadReactors:ne}=(0,s.uC)(),{transitionClassNames:ae}=(0,H.Z)(r,u,void 0,!1),[se,re]=(0,a.eJ)(!0),[le,oe]=(0,a.eJ)(!1),[ie,ce]=(0,a.eJ)(!1),[de,me]=(0,a.eJ)(!1),[ue,he,Ze]=(0,ye.Z)();(0,a.d4)((()=>{$&&r&&K({chatId:i.chatId,messageId:i.id})}),[K,r,i.chatId,i.id,$]),(0,a.d4)((()=>{b&&r&&ne({chatId:i.chatId,messageId:i.id})}),[b,r,ne,i.chatId,i.id]),(0,a.d4)((()=>{v||S||!r||te({chatId:i.chatId})}),[v,r,S,te,i.chatId]);const ve=(0,a.Ye)((()=>{var e,t,n;if(null!==(e=i.reactions)&&void 0!==e&&null!==(t=e.recentReactions)&&void 0!==t&&t.length){var a,r;const e=(0,s.Rd)().users.byId;return null===(a=i.reactions)||void 0===a||null===(r=a.recentReactions)||void 0===r?void 0:r.slice(0,3).map((t=>{let{userId:n}=t;return e[n]})).filter(Boolean)}if(!i.seenByUserIds)return;const l=(0,s.Rd)().users.byId;return null===(n=i.seenByUserIds)||void 0===n?void 0:n.slice(0,3).map((e=>l[e])).filter(Boolean)}),[null===(t=i.reactions)||void 0===t?void 0:t.recentReactions,i.seenByUserIds]),Pe=c?c.messages.some((e=>B.includes(e.id))):B.includes(i.id),ge=(0,a.I4)((()=>{re(!1),oe(!0)}),[]),pe=(0,a.I4)((()=>{re(!1),ce(!0)}),[]),Ee=(0,a.I4)((()=>{re(!1),m()}),[m]),Ce=(0,a.I4)((()=>{oe(!1),m()}),[m]),fe=(0,a.I4)((()=>{ce(!1),m()}),[m]),be=(0,a.I4)((()=>{me(!1),m()}),[m]),Ie=(0,a.I4)((()=>{Ze(),m()}),[Ze,m]),Ne=(0,a.I4)((()=>{x({messageId:i.id}),Ee()}),[x,i.id,Ee]),ke=(0,a.I4)((()=>{D({messageId:i.id}),Ee()}),[D,i.id,Ee]),Se=(0,a.I4)((()=>{re(!1),me(!0)}),[]),we=(0,a.I4)((()=>{O({messageId:i.id,isUnpin:!0}),Ee()}),[O,i.id,Ee]),Me=(0,a.I4)((()=>{if(Ee(),null!=c&&c.messages){const e=c.messages.map((e=>{let{id:t}=e;return t}));U({fromChatId:i.chatId,messageIds:e})}else U({fromChatId:i.chatId,messageIds:[i.id]})}),[U,i,Ee,c]),Te=(0,a.I4)((()=>{Ee(),G({sticker:i.content.sticker})}),[Ee,i.content.sticker,G]),Re=(0,a.I4)((()=>{Ee(),J({sticker:i.content.sticker})}),[Ee,i.content.sticker,J]),Ae=(0,a.I4)((()=>{const e=null!=c&&c.messages?{messageId:i.id,childMessageIds:c.messages.map((e=>{let{id:t}=e;return t})),withShift:!1}:{messageId:i.id,withShift:!1};z(e),Ee()}),[Ee,i.id,z,c]),Le=(0,a.I4)((()=>{_({chatId:i.chatId,id:i.id}),Ee()}),[Ee,i.chatId,i.id,_]),Fe=(0,a.I4)((()=>{re(!1),he()}),[he]),Be=(0,a.I4)((()=>{Ee(),W({chatId:i.chatId,messageId:i.id})}),[Ee,i.chatId,i.id,W]),$e=(0,a.I4)((()=>{Ee(),ee({chatId:i.chatId,messageId:i.id})}),[Ee,ee,i.chatId,i.id]),xe=(0,a.I4)((e=>{Y({chatId:i.chatId,messageId:i.id,scheduledAt:Math.round(e.getTime()/1e3)})}),[i.chatId,i.id,Y]),De=(0,a.I4)((()=>{(0,ss.TE)(`https://t.me/${o||`c/${i.chatId.replace("-","")}`}/${i.id}`),Ee()}),[o,Ee,i.chatId,i.id]),Oe=(0,a.I4)((()=>{((null==c?void 0:c.messages)||[i]).forEach((e=>{Pe?q({message:e}):V({message:e})})),Ee()}),[c,i,Ee,Pe,q,V]),Ue=(0,a.I4)(((e,t,n)=>{Q({chatId:i.chatId,messageId:i.id,reaction:e,x:t,y:n,startSize:bs}),Ee()}),[Ee,i.chatId,i.id,Q]),Ge=(0,a.Ye)((()=>(c?c.messages:[i]).map((e=>{let{id:t}=e;return t}))),[c,i]);if(h)return void Ee();const Je=new Date;return Je.setFullYear(Je.getFullYear()+1),a.ZP.createElement("div",{className:(0,X.Z)("ContextMenuContainer",ae)},a.ZP.createElement(fs,{availableReactions:n,message:i,isPrivate:S,isOpen:se,enabledReactions:k,anchor:d,canShowReactionsCount:b,canShowReactionList:I,canRemoveReaction:y,canSendNow:Z,canReschedule:P,canReply:g,canDelete:C,canReport:f,canPin:p,canUnpin:E,canEdit:N,canForward:w,canFaveSticker:M,canUnfaveSticker:T,canCopy:R,canCopyLink:A,canSelect:L,canDownload:F,canShowSeenBy:$,isDownloading:Pe,seenByRecentUsers:ve,onReply:Ne,onEdit:ke,onPin:Se,onUnpin:we,onForward:Me,onDelete:ge,onReport:pe,onFaveSticker:Te,onUnfaveSticker:Re,onSelect:Ae,onSend:Le,onReschedule:Fe,onClose:Ee,onCopyLink:De,onDownload:Oe,onShowSeenBy:Be,onSendReaction:Ue,onShowReactors:$e}),a.ZP.createElement(We,{isOpen:le,isSchedule:"scheduled"===l,onClose:Ce,album:c,message:i}),a.ZP.createElement(st,{isOpen:ie,onClose:fe,messageIds:Ge}),a.ZP.createElement(Qe,{isOpen:de,messageId:i.id,chatId:i.chatId,onClose:be}),P&&a.ZP.createElement(je,{isOpen:ue,withTimePicker:!0,selectedAt:1e3*i.date,maxAt:(0,j._F)(Je),isFutureMode:!0,onClose:Ie,onSubmit:xe}))}))),ys=(0,a.X$)((0,s.c$)(((e,t)=>{let{fromSticker:n,stickerSetShortName:a}=t;const s=(0,p.Bt)(e),{chatId:r,threadId:l}=s||{},o=r&&(0,p.Z1)(e,r),i=o?(0,g.H5)(o):void 0;return{canSendStickers:Boolean(o&&l&&(0,g.Qm)(o,l)&&(null==i?void 0:i.canSendStickers)),stickerSet:n?(0,p.Ny)(e,n.stickerSetId):a?(0,p.E_)(e,a):void 0}}))((e=>{let{isOpen:t,fromSticker:n,stickerSetShortName:r,stickerSet:l,canSendStickers:i,onClose:c}=e;const{loadStickers:d,toggleStickerSet:m,sendMessage:u}=(0,s.uC)(),Z=(0,a.sO)(null),v=(0,h.Z)(),{observe:P}=(0,Bt.S1)({rootRef:Z,throttleMs:200,isDisabled:!t});(0,a.d4)((()=>{if(t)if(n){const{stickerSetId:e,stickerSetAccessHash:t}=n;d({stickerSetId:e,stickerSetAccessHash:t})}else r&&d({stickerSetShortName:r})}),[t,n,d,r]);const g=(0,a.I4)((e=>{e={...e,isPreloadedGlobally:!0},u({sticker:e}),c()}),[c,u]),p=(0,a.I4)((()=>{l&&(m({stickerSetId:l.id}),c())}),[c,l,m]);return a.ZP.createElement(Me.Z,{className:"StickerSetModal",isOpen:t,onClose:c,hasCloseButton:!0,title:l?(0,Pe.Z)(l.title,["emoji","links"]):v("AccDescrStickerSet")},null!=l&&l.stickers?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{ref:Z,className:"stickers custom-scroll"},l.stickers.map((e=>a.ZP.createElement(On.Z,{sticker:e,size:o.yK,observeIntersection:P,onClick:i?g:void 0,clickArg:e})))),a.ZP.createElement("div",{className:"button-wrapper"},a.ZP.createElement(R.Z,{size:"smaller",fluid:!0,color:l.installedDate?"danger":"primary",onClick:p},v(l.installedDate?"StickerPack.RemoveStickerCount":"StickerPack.AddStickerCount",l.count,"i")))):a.ZP.createElement(we.Z,null))})));var Ns=n(2898);const ks=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a);if(!s||s.isRestricted)return{};const r=(0,g.YC)(s.id),l=r?(0,p.dy)(e,a):void 0,o=l&&(0,g.kw)(l);return{chat:s,isMuted:(0,g.i4)(s,(0,p.dZ)(e),(0,p.NJ)(e)),isPrivate:r,canAddContact:o,canDeleteChat:(0,g.cc)(s),hasLinkedChat:Boolean(null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.linkedChatId)}}))((e=>{let{chatId:t,isOpen:n,withExtraActions:r,anchor:l,isChannel:o,canStartBot:c,canRestartBot:d,canSubscribe:m,canSearch:u,canCall:Z,canMute:v,canLeave:P,canEnterVoiceChat:g,canCreateVoiceChat:p,chat:E,isPrivate:C,isMuted:f,canDeleteChat:b,hasLinkedChat:I,canAddContact:y,onSubscribeChannel:N,onSearchClick:k,onClose:S,onCloseAnimationEnd:w}=e;const{updateChatMutedState:M,enterMessageSelectMode:T,sendBotCommand:R,restartBot:A,joinGroupCall:L,createGroupCall:F,openLinkedChat:$,addContact:x,openCallFallbackConfirm:D}=(0,s.uC)(),[O,U]=(0,a.eJ)(!0),[G,J]=(0,a.eJ)(!1),{x:X,y:z}=l;(0,H.Z)(n,w,void 0,!1);const _=(0,a.I4)((()=>{U(!1),J(!0)}),[]),Y=(0,a.I4)((()=>{U(!1),S()}),[S]),V=(0,a.I4)((()=>{J(!1),S()}),[S]),q=(0,a.I4)((()=>{R({command:"/start"})}),[R]),j=(0,a.I4)((()=>{A({chatId:t})}),[t,A]),K=(0,a.I4)((()=>{M({chatId:t,isMuted:!f}),Y()}),[t,Y,f,M]),W=(0,a.I4)((()=>{p?F({chatId:t}):L({chatId:t}),Y()}),[Y,p,t,L,F]),Q=(0,a.I4)((()=>{$({id:t}),Y()}),[t,Y,$]),ee=(0,a.I4)((()=>{x({userId:t}),Y()}),[x,t,Y]),te=(0,a.I4)((()=>{N(),Y()}),[Y,N]),ne=(0,a.I4)((()=>{D(),Y()}),[Y,D]),ae=(0,a.I4)((()=>{k(),Y()}),[Y,k]),se=(0,a.I4)((()=>{T(),Y()}),[Y,T]);(0,a.d4)((()=>(hs(),Zs)),[]);const re=(0,h.Z)();return a.ZP.createElement(Ns.Z,null,a.ZP.createElement("div",{className:"HeaderMenuContainer"},a.ZP.createElement(Ps.Z,{isOpen:O,positionX:"right",style:`left: ${X}px;top: ${z}px;`,onClose:Y},r&&c&&a.ZP.createElement(B.Z,{icon:"bots",onClick:q},re("BotStart")),r&&d&&a.ZP.createElement(B.Z,{icon:"bots",onClick:j},re("BotRestart")),r&&m&&a.ZP.createElement(B.Z,{icon:o?"channel":"group",onClick:te},re(o?"ProfileJoinChannel":"ProfileJoinGroup")),y&&a.ZP.createElement(B.Z,{icon:"add-user",onClick:ee},re("AddContact")),i.wB&&Z&&a.ZP.createElement(B.Z,{icon:"phone",onClick:ne},re("Call")),i.wB&&u&&a.ZP.createElement(B.Z,{icon:"search",onClick:ae},re("Search")),v&&a.ZP.createElement(B.Z,{icon:f?"unmute":"mute",onClick:K},re(f?"ChatsUnmute":"ChatsMute")),(g||p)&&a.ZP.createElement(B.Z,{icon:"voice-chat",onClick:W},re(p?"StartVoipChat":"VoipGroupJoinCall")),I&&a.ZP.createElement(B.Z,{icon:o?"comments":"channel",onClick:Q},re(o?"ViewDiscussion":"lng_profile_view_channel")),a.ZP.createElement(B.Z,{icon:"select",onClick:se},re("ReportSelectMessages")),P&&a.ZP.createElement(B.Z,{destructive:!0,icon:"delete",onClick:_},re(C?"DeleteChatUser":b?"GroupInfo.DeleteAndExit":o?"LeaveChannel":"Group.LeaveGroup"))),E&&a.ZP.createElement(gt.Z,{isOpen:G,onClose:V,chat:E})))})));var Ss=n(9589);const ws=(0,G.Ds)((e=>e()),200,!1),Ms=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.jr)(e);if(!t)return{};const{query:n,results:a}=(0,p.n5)(e)||{},{totalCount:s,foundIds:r}=a||{};return{chat:t,query:n,totalCount:s,foundIds:r,isHistoryCalendarOpen:Boolean(e.historyCalendarSelectedAt)}}))((e=>{let{isActive:t,chat:n,query:r,totalCount:l,foundIds:o,isHistoryCalendarOpen:i}=e;const{setLocalTextSearchQuery:c,searchTextMessagesLocal:d,focusMessage:m,closeLocalTextSearch:u,openHistoryCalendar:h}=(0,s.uC)(),Z=(0,a.sO)(null),[v,P]=(0,a.eJ)(0);(0,a.d4)((()=>{const{visualViewport:e}=window;if(!e)return;const t=document.getElementById("Main"),n=()=>{const{activeElement:n}=document;if(n&&n===Z.current){const{pageTop:n,height:a}=e;t.style.transform=`translateY(${n}px)`,t.style.height=`${a}px`,document.documentElement.scrollTop=n}else t.style.transform="",t.style.height=""};return e.addEventListener("resize",n),()=>{e.removeEventListener("resize",n)}}),[]),(0,a.d4)((()=>{null!=n&&n.id&&null!=o&&o.length?(m({chatId:n.id,messageId:o[0]}),P(0)):P(-1)}),[null==n?void 0:n.id,m,o]),(0,a.d4)((()=>{Array.from(document.querySelectorAll("input")).forEach((e=>{e.disabled=Boolean(t&&e!==Z.current)})),Array.from(document.querySelectorAll("div[contenteditable]")).forEach((e=>{e.contentEditable=t?"false":"true"}))}),[t]),(0,a.d4)((()=>{t||Z.current.blur()}),[t]),(0,a.bt)((()=>{document.querySelector("#MobileSearch input").blur()}),[i]);const g=(0,a.I4)((e=>{c({query:e}),e.length&&ws(d)}),[d,c]),p=(0,a.I4)((()=>{if(n&&o){const e=v+1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]),E=(0,a.I4)((()=>{if(n&&o){const e=v-1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]);return a.ZP.createElement("div",{id:"MobileSearch",className:t?"active":""},a.ZP.createElement("div",{className:"header"},a.ZP.createElement(R.Z,{size:"smaller",round:!0,color:"translucent",onClick:u},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement(Ss.Z,{ref:Z,value:r,onChange:g})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement("div",{className:"counter"},r?null!=o&&o.length?`${v+1} of ${l}`:o&&!o.length?"No results":"":a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>h({selectedAt:(0,j._F)(Date.now())}),ariaLabel:"Search messages by date"},a.ZP.createElement("i",{className:"icon-calendar"}))),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:p,disabled:!o||!o.length||v===o.length-1},a.ZP.createElement("i",{className:"icon-up"})),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:E,disabled:!o||!o.length||0===v},a.ZP.createElement("i",{className:"icon-down"}))))})));var Ts=n(5376),Rs=n(9295),As=n(3575),Ls=n(971),Fs=n(7002),Bs=n(3616);function $s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const l=e[r?"scrollLeft":"scrollTop"],o=l+e[r?"offsetWidth":"offsetHeight"],i="string"==typeof t?e.querySelectorAll(t):t,{length:c}=i,d=[];let m=!1;for(let e=0;e=l-n&&u<=o+n:c<=o+n&&u>=l-n)d.push(e),m=!0;else if(m&&!a)break}return{allElements:i,visibleIndexes:d}}const xs=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const a=e[n?"scrollLeft":"scrollTop"],s=a+e[n?"offsetWidth":"offsetHeight"],r=t[n?"offsetLeft":"offsetTop"],l=r+t[n?"offsetWidth":"offsetHeight"];return r>a&&ls[s.length-1]?"start":"end";(0,Ds.Z)(a,r[t],e,10)}}var Us=n(3570);function Gs(e){let{isActive:t,isHorizontal:n,shouldSaveSelectionOnUpdateItems:s,shouldRemoveSelectionOnReset:r,noArrowNavigation:l,items:o,shouldSelectOnTab:i,onSelect:c,onClose:d}=e;const[m,u]=(0,a.eJ)(-1),h=(0,a.I4)((e=>o?(0,Us.Z)(o.length,e):-1),[o]),Z=(0,a.I4)(((e,t)=>{t.preventDefault(),u((t=>h(t+e)))}),[u,h]),v=(0,a.I4)((e=>{if(o&&o.length&&m>-1){const t=o[m];t&&(e.preventDefault(),c(t))}}),[o,c,m]),P=!o||m>o.length-1;return(0,a.d4)((()=>{s&&!P||u(r?-1:0)}),[P,r,s]),(0,a.d4)((()=>t?(0,tt.Z)({onEsc:d,onUp:l||n?void 0:e=>Z(-1,e),onDown:l||n?void 0:e=>Z(1,e),onLeft:l||!n?void 0:e=>Z(-1,e),onRight:l||!n?void 0:e=>Z(1,e),onTab:i?v:void 0,onEnter:v}):void 0),[l,Z,v,t,n,d,i]),m}const Js=(0,a.X$)((e=>{let{isOpen:t,onClose:n,onInsertUserName:r,filteredUsers:l}=e;const o=(0,a.sO)(null),{shouldRender:i,transitionClassNames:c}=(0,H.Z)(t,void 0,void 0,!1),d=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(0,s.Rd)().users.byId,a=n[e];a&&r(a,t)}),[r]),m=(0,a.I4)((e=>{d(e.id,!0)}),[d]),u=Gs({isActive:t,items:l,onSelect:m,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});(0,a.d4)((()=>{Os(".chat-item-clickable",u,o)}),[u]),(0,a.d4)((()=>{l&&!l.length&&n()}),[l,n]);const h=(0,P.Z)(null!=l&&l.length?l:void 0,i),Z=l&&!l.length?h:l;if(!i||Z&&!Z.length)return;const v=(0,X.Z)("MentionTooltip composer-tooltip custom-scroll",c);return a.ZP.createElement("div",{className:v,ref:o},null==Z?void 0:Z.map(((e,t)=>{let{id:n}=e;return a.ZP.createElement(Ae.Z,{key:n,className:"chat-item-clickable scroll-item",onClick:()=>d(n),focus:u===t},a.ZP.createElement(Fe.Z,{userId:n,avatarSize:"small",withUsername:!0}))})))}));var Xs=n(9830);const zs=(0,a.X$)((e=>{let{chatId:t,threadId:n,attachments:s,caption:r,isReady:l,currentUserId:i,groupChatMembers:c,recentEmojis:d,baseEmojiKeywords:m,emojiKeywords:u,addRecentEmoji:Z,onCaptionUpdate:v,onSend:g,onFileAppend:p,onClear:E}=e;const f=(0,Ls.Y)(r),b=(0,a.sO)(),I=(0,P.Z)(s),y=s.length?s:I,N=Boolean(s.length),[k,S,w]=(0,ye.Z)(),M=Boolean(y&&y.every((e=>e.quick))),T=(0,h.Z)(),{isMentionTooltipOpen:A,closeMentionTooltip:L,insertMention:F,mentionFilteredUsers:B}=(0,Rs.Z)(N,f,v,o.nY,c,void 0,i),{isEmojiTooltipOpen:$,closeEmojiTooltip:x,filteredEmojis:D,insertEmoji:O}=(0,As.Z)(N,f,d,o.nY,v,m,u,!l);(0,a.d4)((()=>N?(0,C.Z)(E):void 0),[N,E]);const U=(0,a.I4)((()=>{N&&g()}),[N,g]),G=(0,a.I4)((e=>{e.preventDefault(),w();const{dataTransfer:{files:t}}=e;if(null!=t&&t.length){const e=M?Array.from(t).filter((e=>e.type&&o.dI.has(e.type))):Array.from(t);p(e,M)}}),[M,p,w]);if(!y)return;const J=y.every((e=>o.oG.has(e.mimeType))),X=y.every((e=>o.wG.has(e.mimeType))),z=y.every((e=>e.mimeType.startsWith("audio/")));let _="";return _=T(J?"PreviewSender.SendPhoto":X?"PreviewSender.SendVideo":z?"PreviewSender.SendAudio":"PreviewSender.SendFile",y.length,"i"),a.ZP.createElement(Me.Z,{isOpen:N,onClose:E,header:function(){if(y)return a.ZP.createElement("div",{className:"modal-header-condensed",dir:T.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel attachments",onClick:E},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},_),a.ZP.createElement(R.Z,{color:"primary",size:"smaller",className:"modal-action-button",onClick:U},T("Send")))}(),className:"AttachmentModal "+(k?"hovered":"")},a.ZP.createElement("div",{className:"drop-target",onDragEnter:S,onDrop:G,onDragOver:function(e){e.preventDefault(),e.stopPropagation(),b.current&&(window.clearTimeout(b.current),b.current=void 0)},onDragLeave:e=>{const{relatedTarget:t,target:n}=e;n.matches(".drop-target")&&!t&&(b.current=window.setTimeout(w,150)),n&&n.closest(".AttachmentModal.hovered")||(t&&e.stopPropagation(),w())},"data-attach-description":T("Preview.Dragging.AddItems",10)},M?a.ZP.createElement("div",{className:"media-wrapper custom-scroll"},y.map((e=>e.mimeType.startsWith("image/")?a.ZP.createElement("img",{src:e.blobUrl,alt:""}):a.ZP.createElement("video",{src:e.blobUrl,autoPlay:!0,muted:!0,loop:!0})))):a.ZP.createElement("div",{className:"document-wrapper custom-scroll"},y.map((e=>a.ZP.createElement(Fs.Z,{name:e.filename,extension:(0,Ts.mD)(e.filename,e.mimeType),previewData:e.previewBlobUrl,size:e.size,smaller:!0})))),a.ZP.createElement("div",{className:"attachment-caption-wrapper"},a.ZP.createElement(Js,{isOpen:A,onClose:L,onInsertUserName:F,filteredUsers:B}),a.ZP.createElement(Xs.Z,{isOpen:$,emojis:D,onClose:x,onEmojiSelect:O,addRecentEmoji:Z}),a.ZP.createElement(Bs.Z,{id:"caption-input-text",chatId:t,threadId:n,isAttachmentModalInput:!0,html:r,editableInputId:o.nY,placeholder:T("Caption"),onUpdate:v,onSend:g,canAutoFocus:Boolean(l&&s.length)}))))}));var _s=n(3099);const Ys=(0,a.X$)((e=>{let{isOpen:t,onSend:n,onClear:s}=e;const r=(0,a.sO)(null),l=(0,a.sO)(null),o=(0,a.sO)(null),[i,c]=(0,a.eJ)(""),[d,m]=(0,a.eJ)([""]),[u,Z]=(0,a.eJ)(!0),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1),[E,f]=(0,a.eJ)(),[b,I]=(0,a.eJ)(),[y,N]=(0,a.eJ)(!1),k=(0,h.Z)(),S=(0,a.I4)((e=>{t&&e.current&&e.current.focus()}),[t]);(0,a.d4)((()=>t?(0,C.Z)(s):void 0),[t,s]),(0,a.d4)((()=>{t||(c(""),m([""]),Z(!0),P(!1),p(!1),f(""),I(""),N(!1))}),[t]),(0,a.d4)((()=>S(r)),[S,t]),(0,a.bt)((()=>{const e=o.current;e&&E!==e.innerHTML&&(e.innerHTML=E)}),[E]);const w=(0,a.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];m([...e,""]),requestAnimationFrame((()=>{const e=l.current;e&&(e.classList.toggle("overflown",e.scrollHeight>320),e.scrollTo({top:e.scrollHeight,behavior:"smooth"}))}))}),[]),M=(0,a.I4)((()=>{if(N(!1),!t)return;const e=i.trim().substring(0,255),a=d.map((e=>e.trim().substring(0,100))).filter((e=>e.length));if(!e||a.length<2)return c(e),a.length?a.length<2?w(a):m(a):w(),void N(!0);if(g&&(!b||!a[Number(b)]))return void N(!0);const s={summary:{question:e,answers:a.map(((e,t)=>({text:e.trim(),option:String(t),...String(t)===b&&{correct:!0}}))),...!u&&{isPublic:!0},...v&&{multipleChoice:!0},...g&&{quiz:!0}}};if(g){const{text:e,entities:t}=E&&(0,_s.Z)(E.substring(0,200))||{};s.quiz={correctAnswers:[b],...e&&{solution:e},...t&&{solutionEntities:t}}}n(s)}),[t,i,d,g,b,u,v,n,w,E]),T=(0,a.I4)(((e,t)=>{const n=[...d];n[e]=t,n[n.length-1].trim().length&&n.length<10?w(n):m(n)}),[d,w]),A=(0,a.I4)((e=>{const t=[...d];t.splice(e,1),m(t),requestAnimationFrame((()=>{l.current&&l.current.classList.toggle("overflown",l.current.scrollHeight>320)}))}),[d]),L=(0,a.I4)((e=>{I(e)}),[I]),F=(0,a.I4)((e=>{Z(e.target.checked)}),[]),B=(0,a.I4)((e=>{P(e.target.checked)}),[]),$=(0,a.I4)((e=>{p(e.target.checked)}),[]),x=(0,a.I4)((e=>{13===e.keyCode&&M()}),[M]),D=(0,a.I4)((()=>{if(y&&!i.trim().length)return k("lng_polls_choose_question")}),[y,k,i]),O=(0,a.I4)((e=>{const t=d.map((e=>e.trim())).filter((e=>e.length));if(y&&t.length<2&&!d[e].trim().length)return k("lng_polls_choose_answers")}),[y,k,d]);function U(){return d.map(((e,t)=>a.ZP.createElement("div",{className:"option-wrapper"},a.ZP.createElement(Te.Z,{label:t!==d.length-1||10===d.length?k("OptionHint"):k("CreatePoll.AddOption"),error:O(t),value:e,onChange:e=>T(t,e.currentTarget.value),onKeyPress:x}),t!==d.length-1&&a.ZP.createElement(R.Z,{className:"option-remove-button",round:!0,color:"translucent",size:"smaller",ariaLabel:k("Delete"),onClick:()=>A(t)},a.ZP.createElement("i",{className:"icon-close"})))))}return a.ZP.createElement(Me.Z,{isOpen:t,onClose:s,header:a.ZP.createElement("div",{className:"modal-header-condensed"},a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel poll creation",onClick:s},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},k("NewPoll")),a.ZP.createElement(R.Z,{color:"primary",size:"smaller",className:"modal-action-button",onClick:M},k("Create"))),className:"PollModal"},a.ZP.createElement(Te.Z,{ref:r,label:k("AskAQuestion"),value:i,error:D(),onChange:e=>c(e.currentTarget.value),onKeyPress:x}),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"options-list custom-scroll",ref:l},a.ZP.createElement("h3",{className:"options-header"},k("PollOptions")),y&&function(){const e=d.map((e=>e.trim())).filter((e=>e.length));return g&&(!b||!e[Number(b)])&&a.ZP.createElement("p",{className:"error"},k("lng_polls_choose_correct"))}(),g?a.ZP.createElement(at.Z,{name:"correctOption",options:U().map(((e,t)=>({value:String(t),label:e,hidden:t===d.length-1}))),onChange:L}):U()),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"quiz-mode"},a.ZP.createElement(fn.Z,{label:k("PollAnonymous"),checked:u,onChange:F}),a.ZP.createElement(fn.Z,{label:k("PollMultiple"),checked:v,disabled:g,onChange:B}),a.ZP.createElement(fn.Z,{label:k("PollQuiz"),checked:g,disabled:v,onChange:$}),g&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"options-header"},k("lng_polls_solution_title")),a.ZP.createElement("div",{ref:o,className:"form-control",contentEditable:!0,dir:"auto",onChange:e=>f(e.currentTarget.innerHTML)}),a.ZP.createElement("div",{className:"note"},k("CreatePoll.ExplanationInfo")))))}));var Hs=n(6503),Vs=n(4284),qs=n(1367);const js=(0,a.X$)((e=>{let{emoji:t,focus:n,onClick:s}=e;const r=(0,a.I4)((e=>{e.preventDefault(),s(t.native,t.id)}),[t,s]);return a.ZP.createElement("div",{className:"EmojiButton "+(n?"focus":""),onMouseDown:r,title:`:${t.names[0]}:`},i.op?t.native:a.ZP.createElement("img",{src:`./img-apple-64/${t.image}.png`,alt:"",loading:"lazy"}))})),Ks=(0,a.X$)((e=>{let{category:t,index:n,allEmojis:s,observeIntersection:r,shouldRender:l,onEmojiSelect:o}=e;const c=(0,a.sO)(null);(0,Bt._N)(c,r);const d=(0,$n.Z)(l),m=(0,h.Z)(),u=i.wB?Math.floor((b.Z.get().width-8)/44):9,Z=44*Math.ceil(t.emojis.length/u);return a.ZP.createElement("div",{ref:c,key:t.id,id:`emoji-category-${n}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name",dir:"auto"},m("recent"===t.id?"RecentStickers":`Emoji${n}`)),a.ZP.createElement("div",{className:(0,X.Z)("symbol-set-container",d),style:`height: ${Z}px;`,dir:m.isRtl?"rtl":void 0},l&&t.emojis.map((e=>{const t=s[e];if(!t)return;const n="id"in t?t:t[1];return a.ZP.createElement(js,{key:n.id,emoji:n,onClick:o})}))))})),Ws={recent:"icon-recent",people:"icon-smile",nature:"icon-animals",foods:"icon-eats",activity:"icon-sport",places:"icon-car",objects:"icon-lamp",symbols:"icon-language",flags:"icon-flag"},Qs=[];let er,tr,nr;const ar=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e,["recentEmojis"])))((e=>{let{className:t,onEmojiSelect:s,recentEmojis:r}=e;const l=(0,a.sO)(null),c=(0,a.sO)(null),[d,m]=(0,a.eJ)(),[u,Z]=(0,a.eJ)(),[v,P]=(0,a.eJ)(0),{observe:g}=(0,Bt.S1)({rootRef:l,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("emoji-category-"))return;const n=Number(t.replace("emoji-category-",""));Qs[n]=e.isIntersecting}));const t=Qs.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&P(t[Math.floor(t.length/2)].index)}));(0,Ct.Z)(c.current,!i.wB),(0,a.d4)((()=>{if(!d)return;const e=c.current;if(!e)return;const t=42*v-e.offsetWidth/2+21;(0,qs.Z)(e,t)}),[d,v]);const p=(0,h.Z)(),E=(0,a.Ye)((()=>{if(!d)return Zt.D;const e=[...d];return null!=r&&r.length&&e.unshift({id:"recent",name:p("RecentStickers"),emojis:r}),e}),[d,p,r]);(0,a.d4)((()=>{setTimeout((()=>{const e=()=>{m(nr.categories),Z(nr.emojis)};nr?e():async function(){return er||(er=n.e(501).then(n.t.bind(n,7501,19)),tr=(await er).default,nr=(0,Vs.NM)(tr)),er}().then(e)}),200)}),[]);const C=(0,a.I4)((e=>{P(e);const t=document.getElementById(`emoji-category-${e}`);(0,Ds.Z)(l.current,t,"start",50,800)}),[]),f=(0,a.I4)(((e,t)=>{s(e,t)}),[s]),b=(0,Ft.Z)([],o.kU),I=(0,X.Z)("EmojiPicker",t);return u&&b?a.ZP.createElement("div",{className:I},a.ZP.createElement("div",{ref:c,className:"EmojiPicker-header",dir:p.isRtl?"rtl":""},E.map((function(e,t){const n=Ws[e.id];return n&&a.ZP.createElement(R.Z,{className:"symbol-set-button "+(t===v?"activated":""),round:!0,faded:!0,color:"translucent",onClick:()=>C(t),ariaLabel:e.name},a.ZP.createElement("i",{className:n}))}))),a.ZP.createElement("div",{ref:l,className:(0,X.Z)("EmojiPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},E.map(((e,t)=>a.ZP.createElement(Ks,{category:e,index:t,allEmojis:u,observeIntersection:g,shouldRender:v>=t-1&&v<=t+1,onEmojiSelect:f}))))):a.ZP.createElement("div",{className:I},a.ZP.createElement(we.Z,null))})));var sr=n(6389);const rr=i.wB?8:16,lr=(0,a.X$)((e=>{let{stickerSet:t,loadAndPlay:n,index:s,observeIntersection:r,shouldRender:l,onStickerSelect:c,onStickerUnfave:d}=e;const m=(0,a.sO)(null);(0,Bt._N)(m,r);const u=(0,$n.Z)(l),h=i.wB?Math.floor((b.Z.get().width-8)/(o.Q+rr)):5,Z=Math.ceil(t.count/h)*(o.Q+rr);return a.ZP.createElement("div",{ref:m,key:t.id,id:`sticker-set-${s}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name"},t.title),a.ZP.createElement("div",{className:(0,X.Z)("symbol-set-container",u),style:`height: ${Z}px;`},l&&t.stickers&&t.stickers.map((e=>a.ZP.createElement(On.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:r,noAnimate:!n,onClick:c,clickArg:e,onUnfaveClick:"favorite"===t.id?d:void 0})))))})),or=[],ir=(0,a.X$)((0,s.c$)((e=>{const{setsById:t,added:n,recent:a,favorite:s}=e.stickers;return{recentStickers:a.stickers,favoriteStickers:s.stickers,stickerSetsById:t,addedSetIds:n.setIds,shouldPlay:e.settings.byKey.shouldLoopStickers}}))((e=>{let{chatId:t,threadId:n,className:r,loadAndPlay:l,canSendStickers:c,recentStickers:d,favoriteStickers:m,addedSetIds:u,stickerSetsById:Z,shouldPlay:v,onStickerSelect:P}=e;const{loadRecentStickers:g,addRecentSticker:p,unfaveSticker:E}=(0,s.uC)(),C=(0,a.sO)(null),f=(0,a.sO)(null),[b,I]=(0,a.eJ)(0),y=(0,sr.Z)(t,n),{observe:N}=(0,Bt.S1)({rootRef:C,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("sticker-set-"))return;const n=Number(t.replace("sticker-set-",""));or[n]=e.isIntersecting}));const t=or.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&I(t[Math.floor(t.length/2)].index)})),{observe:k}=(0,Bt.S1)({rootRef:f}),S=(0,h.Z)(),w=Boolean(u),M=(0,a.Ye)((()=>u?[{id:"recent",title:S("RecentStickers"),stickers:d,count:d.length},{id:"favorite",title:S("FavoriteStickers"),stickers:m,count:m.length},...u.map((e=>Z[e])).filter(Boolean)]:Zt.D),[u,S,d,m,Z]),T=(0,a.Ye)((()=>w&&0===M.filter((e=>{var t;return null===(t=e.stickers)||void 0===t?void 0:t.length})).length),[M,w]);(0,a.d4)((()=>{l&&(g(),y({type:"chooseSticker"}))}),[l,g,y]),(0,Ct.Z)(f.current),(0,a.d4)((()=>{if(!w)return;const e=f.current;if(!e)return;const t=52*b-(e.offsetWidth/2-26);(0,qs.Z)(e,t)}),[w,b]);const A=(0,a.I4)((e=>{I(e);const t=document.getElementById(`sticker-set-${e}`);(0,Ds.Z)(C.current,t,"start",void 0,500)}),[]),L=(0,a.I4)((e=>{P(e),p({sticker:e})}),[p,P]),F=(0,a.I4)((e=>{E({sticker:e})}),[E]),B=(0,a.I4)((()=>{y({type:"chooseSticker"})}),[y]),$=(0,Ft.Z)([],o.Y),x=(0,X.Z)("StickerPicker",r);return w&&$&&!T&&c?a.ZP.createElement("div",{className:x},a.ZP.createElement("div",{ref:f,className:"StickerPicker-header no-selection no-scrollbar"},M.map((function(e,t){var n;const s=null===(n=e.stickers)||void 0===n?void 0:n[0],r=(0,X.Z)("symbol-set-button sticker-set-button",t===b&&"activated");return"recent"===e.id||"favorite"===e.id||e.hasThumbnail||!s?a.ZP.createElement(R.Z,{key:e.id,className:r,ariaLabel:e.title,round:!0,faded:"recent"===e.id||"favorite"===e.id,color:"translucent",onClick:()=>A(t)},"recent"===e.id?a.ZP.createElement("i",{className:"icon-recent"}):"favorite"===e.id?a.ZP.createElement("i",{className:"icon-favorite"}):e.isLottie?a.ZP.createElement(xn,{stickerSet:e,observeIntersection:k}):a.ZP.createElement(Dn,{stickerSet:e,observeIntersection:k})):a.ZP.createElement(On.Z,{key:e.id,sticker:s,size:o.DC,title:e.title,className:r,observeIntersection:k,onClick:A,clickArg:t})}))),a.ZP.createElement("div",{ref:C,onMouseMove:B,className:(0,X.Z)("StickerPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},M.map(((e,t)=>a.ZP.createElement(lr,{key:e.id,stickerSet:e,loadAndPlay:Boolean(v&&l),index:t,observeIntersection:N,shouldRender:b>=t-1&&b<=t+1,onStickerSelect:L,onStickerUnfave:F}))))):a.ZP.createElement("div",{className:x},c?T?a.ZP.createElement("div",{className:"picker-disabled"},S("NoStickers")):a.ZP.createElement(we.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},S("ErrorSendRestrictedStickersAll")))})));var cr=n(386);function dr(){return dr=Object.assign||function(e){for(var t=1;t{var t,n;let{gif:s,observeIntersection:l,isDisabled:o,className:i,onClick:c}=e;const d=(0,a.sO)(null),m=(0,a.sO)(null),u=Boolean(null===(t=s.thumbnail)||void 0===t?void 0:t.dataUri),h=`gif${s.id}`,v=(0,Bt.Op)(d,l)&&!o,P=(0,Z.Z)(`${h}?size=m`,!v,r.IU.BlobUrl),g=(0,ea.Z)(null===(n=s.thumbnail)||void 0===n?void 0:n.dataUri,Boolean(P)),p=(0,Z.Z)(h,!v,r.IU.BlobUrl),E=Boolean(v&&p),{isBuffered:C,bufferingHandlers:f}=(0,_.Z)(!0),b=v&&!C,I=v&&C;(0,V.Z)(m,[E]);const y=(0,a.I4)((()=>c({...s,blobUrl:p})),[c,s,p]),N=(0,X.Z)("GifButton",s.width&&s.height&&s.width({savedGifs:e.gifs.saved.gifs})))((e=>{let{className:t,loadAndPlay:n,canSendGifs:r,savedGifs:l,onGifSelect:c}=e;const{loadSavedGifs:d}=(0,s.uC)(),m=(0,a.sO)(null),{observe:u}=(0,Bt.S1)({rootRef:m,debounceMs:300});(0,a.d4)((()=>{n&&d()}),[n,d]);const h=(0,Ft.Z)([],o.Y);return a.ZP.createElement("div",{ref:m,className:(0,X.Z)("GifPicker",t,i.$b?"no-scrollbar":"custom-scroll")},r?h&&l&&l.length?l.map((e=>a.ZP.createElement(mr,{key:e.id,gif:e,observeIntersection:u,isDisabled:!n,onClick:c}))):h&&l?a.ZP.createElement("div",{className:"picker-disabled"},"No saved GIFs."):a.ZP.createElement(we.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},"Sending GIFs is not allowed in this chat."))})));let hr;!function(e){e[e.Emoji=0]="Emoji",e[e.Stickers=1]="Stickers",e[e.GIFs=2]="GIFs"}(hr||(hr={}));const Zr=Object.values(hr).filter((e=>"string"==typeof e)),vr={[hr.Emoji]:"icon-smile",[hr.Stickers]:"icon-stickers",[hr.GIFs]:"icon-gifs"},Pr=(0,a.X$)((e=>{let{activeTab:t,onSwitchTab:n,onRemoveSymbol:s,onSearchOpen:r}=e;const l=(0,h.Z)();function o(e){return a.ZP.createElement(R.Z,{className:"symbol-tab-button "+(t===e?"activated":""),onClick:()=>n(e),ariaLabel:Zr[e],round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:vr[e]}))}const i=(0,a.I4)((()=>{r(t===hr.Stickers?"stickers":"gifs")}),[t,r]);return a.ZP.createElement("div",{className:"SymbolMenu-footer",onClick:function(e){e.stopPropagation()},dir:l.isRtl?"rtl":void 0},t!==hr.Emoji&&a.ZP.createElement(R.Z,{className:"symbol-search-button",ariaLabel:t===hr.Stickers?"Search Stickers":"Search GIFs",round:!0,faded:!0,color:"translucent",onClick:i},a.ZP.createElement("i",{className:"icon-search"})),o(hr.Emoji),o(hr.Stickers),o(hr.GIFs),t===hr.Emoji&&a.ZP.createElement(R.Z,{className:"symbol-delete-button",onClick:s,ariaLabel:"Remove Symbol",round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:"icon-delete-left"})))}));let gr=!1;const pr=(0,a.X$)((0,s.c$)((e=>({isLeftColumnShown:e.isLeftColumnShown})))((e=>{let{chatId:t,threadId:n,isOpen:s,canSendStickers:r,canSendGifs:l,isLeftColumnShown:o,onLoad:c,onClose:d,onEmojiSelect:m,onStickerSelect:u,onGifSelect:Z,onRemoveSymbol:v,onSearchOpen:P,addRecentEmoji:g}=e;const[p,E]=(0,a.eJ)(0),[C,f]=(0,a.eJ)([]),[b,I]=(0,Hs.Z)(s,d,void 0,i.wB),{shouldRender:y,transitionClassNames:N}=(0,H.Z)(s,d,!1,!1);!gr&&s&&(gr=!0),(0,a.d4)((()=>{c()}),[c]),(0,a.bt)((()=>{if(i.wB)return s&&(document.body.classList.add("enable-symbol-menu-transforms"),document.body.classList.add("is-symbol-menu-open")),()=>{s&&(0,G.T2)((()=>{document.body.classList.remove("is-symbol-menu-open"),setTimeout((()=>{document.body.classList.remove("enable-symbol-menu-transforms")}),350)}))}}),[s]);const k=(0,a.sO)(C);k.current=C,(0,a.d4)((()=>{k.current.length&&(k.current.forEach((e=>{g({emoji:e})})),f([]))}),[s,p,g]);const S=(0,a.I4)(((e,t)=>{f((e=>[...e,t])),m(e)}),[m]),w=(0,a.I4)((e=>{d(),P(e)}),[d,P]),M=(0,a.I4)((e=>{u(e,!0)}),[u]),T=(0,h.Z)();function A(e,o){switch(p){case hr.Emoji:return a.ZP.createElement(ar,{className:"picker-tab",onEmojiSelect:S});case hr.Stickers:return a.ZP.createElement(ir,{className:"picker-tab",loadAndPlay:!!r&&s&&(e||o),canSendStickers:r,onStickerSelect:M,chatId:t,threadId:n});case hr.GIFs:return a.ZP.createElement(ur,{className:"picker-tab",loadAndPlay:!!l&&s&&(e||o),canSendGifs:l,onGifSelect:Z})}}const F=a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"SymbolMenu-main",onClick:function(e){e.stopPropagation()}},gr&&a.ZP.createElement(L.Z,{name:"slide",activeKey:p,renderCount:Zr.length},A)),i.wB&&a.ZP.createElement(R.Z,{round:!0,faded:!0,color:"translucent",ariaLabel:T("Close"),className:"symbol-close-button",size:"tiny",onClick:d},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Pr,{activeTab:p,onSwitchTab:E,onRemoveSymbol:v,onSearchOpen:w}));if(i.wB){if(!y)return;const e=(0,X.Z)("SymbolMenu mobile-menu",N,!o&&"middle-column-open");return a.ZP.createElement(Ns.Z,null,a.ZP.createElement("div",{className:e},F))}return a.ZP.createElement(Ps.Z,{isOpen:s,positionX:"left",positionY:"bottom",onClose:d,className:"SymbolMenu",onCloseAnimationEnd:d,onMouseEnter:i.$b?void 0:b,onMouseLeave:i.$b?void 0:I,noCloseOnBackdrop:!i.$b},F)}))),Er=(0,a.X$)((e=>{let{isOpen:t,canAttachMedia:n,canAttachPolls:s,onFileSelect:r,onPollCreate:l,onClose:c}=e;const[d,m]=(0,Hs.Z)(t,c),u=(0,a.I4)(((e,t)=>{const{files:n}=e.target;n&&n.length>0&&r(Array.from(n),t)}),[r]),Z=(0,a.I4)((()=>{Yn(Array.from(o.dI).join(","),(e=>u(e,!0)))}),[u]),v=(0,a.I4)((()=>{Yn("*",(e=>u(e,!1)))}),[u]),P=(0,h.Z)();return a.ZP.createElement(Ps.Z,{isOpen:t,autoClose:!0,positionX:"right",positionY:"bottom",onClose:c,className:"AttachMenu fluid",onCloseAnimationEnd:c,onMouseEnter:i.$b?void 0:d,onMouseLeave:i.$b?void 0:m,noCloseOnBackdrop:!i.$b},!n&&a.ZP.createElement(B.Z,{className:"media-disabled",disabled:!0},"Posting media content is not allowed in this group."),n&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(B.Z,{icon:"photo",onClick:Z},P("AttachmentMenu.PhotoOrVideo")),a.ZP.createElement(B.Z,{icon:"document",onClick:v},P("AttachDocument"))),s&&a.ZP.createElement(B.Z,{icon:"poll",onClick:l},P("Poll")))})),Cr=(0,a.X$)((e=>{let{withAvatar:t,focus:n,botCommand:s,bot:r,onClick:l}=e;return a.ZP.createElement(Ae.Z,{key:s.command,className:(0,X.Z)("BotCommand chat-item-clickable scroll-item",t&&"with-avatar"),multiline:!0,onClick:()=>l(s),focus:n},t&&a.ZP.createElement(ge.Z,{size:"small",user:r}),a.ZP.createElement("div",{className:"content-inner"},a.ZP.createElement("span",{className:"title"},"/",s.command),a.ZP.createElement("span",{className:"subtitle"},(0,Pe.Z)(s.description))))})),fr=(0,a.X$)((0,s.c$)((e=>({usersById:e.users.byId})))((e=>{let{usersById:t,isOpen:n,withUsername:r,botCommands:l,onClick:o,onClose:i}=e;const{sendBotCommand:c}=(0,s.uC)(),d=(0,a.sO)(null),{shouldRender:m,transitionClassNames:u}=(0,H.Z)(n,void 0,void 0,!1),h=(0,a.I4)((e=>{let{botId:n,command:a}=e;const s=t[n];c({command:`/${a}${r&&s?`@${s.username}`:""}`,botId:n}),o()}),[o,c,t,r]),Z=Gs({isActive:n,items:l,onSelect:h,onClose:i});(0,a.d4)((()=>{l&&!l.length&&i()}),[l,i]),(0,a.d4)((()=>{Os(".chat-item-clickable",Z,d)}),[Z]);const v=(0,P.Z)(l&&l.length?l:void 0,m),g=l&&!l.length?v:l;if(!m||g&&!g.length)return;const p=(0,X.Z)("BotCommandTooltip composer-tooltip custom-scroll",u);return a.ZP.createElement("div",{className:p,ref:d},g&&g.map(((e,n)=>a.ZP.createElement(Cr,{key:`${e.botId}_${e.command}`,botCommand:e,bot:t[e.botId],withAvatar:!0,onClick:h,focus:Z===n}))))}))),br=(0,a.X$)((e=>{let{isOpen:t,botCommands:n,onClose:r}=e;const{sendBotCommand:l}=(0,s.uC)(),[o,c]=(0,Hs.Z)(t,r,void 0,i.wB),d=(0,a.I4)((e=>{l({command:`/${e.command}`,botId:e.botId}),r()}),[r,l]);return a.ZP.createElement(Ps.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:r,className:"BotCommandMenu",onCloseAnimationEnd:r,onMouseEnter:i.$b?void 0:o,onMouseLeave:i.$b?void 0:c,noCloseOnBackdrop:!i.$b},n.map((e=>a.ZP.createElement(Cr,{key:e.command,botCommand:e,onClick:d}))))})),Ir=(0,a.X$)((0,s.c$)((e=>{const{stickers:t}=e.stickers.forEmoji;return{stickers:t}}))((e=>{let{chatId:t,threadId:n,isOpen:r,onStickerSelect:l,stickers:c}=e;const{clearStickersForEmoji:d}=(0,s.uC)(),m=(0,a.sO)(null),{shouldRender:u,transitionClassNames:h}=(0,H.Z)(r,void 0,void 0,!1),Z=(0,P.Z)(c,!0),v=c||Z,g=(0,sr.Z)(t,n),{observe:p}=(0,Bt.S1)({rootRef:m,throttleMs:200});(0,a.d4)((()=>r?(0,C.Z)(d):void 0),[r,d]);const E=(0,X.Z)("StickerTooltip composer-tooltip custom-scroll",h,!(null!=v&&v.length)&&"hidden");return a.ZP.createElement("div",{ref:m,className:E,onMouseEnter:i.$b?void 0:()=>{document.body.classList.add("no-select")},onMouseLeave:i.$b?void 0:()=>{document.body.classList.remove("no-select")},onMouseMove:()=>{g({type:"chooseSticker"})}},u&&v?v.map((e=>a.ZP.createElement(On.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:p,onClick:l,clickArg:e}))):u?a.ZP.createElement(we.Z,null):void 0)}))),yr=(0,a.X$)((e=>{let{isOpen:t,onSilentSend:n,onScheduleSend:s,onClose:r,onCloseAnimationEnd:l}=e;const[o,c]=(0,Hs.Z)(t,r),d=(0,h.Z)();return a.ZP.createElement(Ps.Z,{isOpen:t,autoClose:!0,positionX:"right",positionY:"bottom",className:"CustomSendMenu",onClose:r,onCloseAnimationEnd:l,onMouseEnter:i.$b?void 0:o,onMouseLeave:i.$b?void 0:c,noCloseOnBackdrop:!i.$b},n&&a.ZP.createElement(B.Z,{icon:"mute",onClick:n},d("SendWithoutSound")),s&&a.ZP.createElement(B.Z,{icon:"schedule",onClick:s},d("ScheduleMessage")))}));var Nr=n(2420),kr=n(3283),Sr=n(2678);const wr=(0,a.X$)((e=>{let{isOpen:t,emojis:n,onClose:s,onEmojiSelect:r,addRecentEmoji:l}=e;const o=(0,a.sO)(null),{shouldRender:c,transitionClassNames:d}=(0,H.Z)(t,void 0,void 0,!1),m=(0,Sr.Z)(n.length?n:void 0,350)||[],u=(0,a.I4)((e=>{r(e.native),l({emoji:e.id})}),[l,r]),h=(0,a.I4)(((e,t)=>{r(e),l({emoji:t})}),[l,r]),Z=Gs({isActive:t,isHorizontal:!0,items:n,onSelect:u,onClose:s});(0,a.d4)((()=>{!function(e,t){const n=t.current;if(!n)return;const{visibleIndexes:a,allElements:s}=$s(n,".EmojiButton",8,!0,!0,!0);if(!s.length||!s[e])return;const r=a[0];if(!a.includes(e)||e===r&&!xs(n,s[r],!0)){const t="start"==(e>a[a.length-1]?"start":"end")?44*e:0;(0,qs.Z)(n,t)}}(Z,o)}),[Z]);const v=(0,X.Z)("EmojiTooltip composer-tooltip custom-scroll-x",d);return a.ZP.createElement("div",{ref:o,className:v,onMouseEnter:i.$b?void 0:()=>{document.body.classList.add("no-select")},onMouseLeave:i.$b?void 0:()=>{document.body.classList.remove("no-select")}},c&&m?m.map(((e,t)=>a.ZP.createElement(js,{key:e.id,emoji:e,focus:Z===t,onClick:h}))):c?a.ZP.createElement(we.Z,null):void 0)})),Mr=(0,a.X$)((e=>{let{title:t,description:n,thumbnail:s,thumbUrl:r,focus:l,transitionClassNames:o="",onClick:i}=e,c="";const d=(0,Z.Z)(s?`webDocument:${s.url}`:void 0);return r=r||d,r?c=a.ZP.createElement("img",{src:r,className:o,alt:"",decoding:"async",draggable:"false"}):t&&(c=(0,ot.Xv)(t,1)),a.ZP.createElement(Ae.Z,{focus:l,className:"BaseResult chat-item-clickable",onMouseDown:cr.b,onClick:i},a.ZP.createElement("span",{className:"thumb"},"string"==typeof c?(0,Pe.Z)(c):c),a.ZP.createElement("div",{className:"content-inner"},t&&a.ZP.createElement("div",{className:"title"},t),n&&a.ZP.createElement("div",{className:"description"},n)))})),Tr=(0,a.X$)((e=>{var t;let n,s,r,{focus:l,isForGallery:o,inlineResult:i,onClick:c}=e;"photo"in i&&(n=i.photo),"thumbnail"in i&&(s=i.thumbnail),"webThumbnail"in i&&o&&(r=i.webThumbnail);const d=(0,Z.Z)(r?`webDocument:${r.url}`:void 0),m=(0,Z.Z)(n&&`photo${n.id}?size=m`),u=(0,$n.Z)(m),h=(0,a.I4)((()=>{c(i)}),[i,c]);var v,P;if(o)return a.ZP.createElement("div",{className:"MediaResult chat-item-clickable",onClick:h},a.ZP.createElement("img",{src:(null===(v=n)||void 0===v||null===(P=v.thumbnail)||void 0===P?void 0:P.dataUri)||d,alt:""}),a.ZP.createElement("img",{src:m,className:(0,X.Z)("full-media",u),alt:""}));const{title:g,description:p}=i;return a.ZP.createElement(Mr,{focus:l,thumbUrl:m||(null===(t=s)||void 0===t?void 0:t.dataUri)||d,transitionClassNames:u,title:g,description:p,onClick:h})})),Rr=(0,a.X$)((e=>{let{focus:t,inlineResult:n,onClick:s}=e;const{title:r,url:l,description:o,webThumbnail:i}=n,c=(0,a.I4)((()=>{s(n)}),[n,s]);return a.ZP.createElement(Mr,{focus:t,thumbnail:i,title:r||l,description:o,onClick:c})})),Ar=(0,a.X$)((e=>{let{inlineResult:t,observeIntersection:n,onClick:s}=e;const{gif:r}=t,l=(0,a.I4)((()=>{s(t)}),[t,s]);if(r)return a.ZP.createElement(mr,{gif:r,observeIntersection:n,className:"chat-item-clickable",onClick:l})})),Lr=(0,a.X$)((e=>{let{inlineResult:t,observeIntersection:n,onClick:s}=e;const{sticker:r}=t;if(r)return a.ZP.createElement(On.Z,{sticker:r,size:o.zq,observeIntersection:n,title:r.emoji,className:"chat-item-clickable",onClick:s,clickArg:t})})),Fr=(0,G.P2)((e=>e()),500,!0),Br=(0,a.X$)((e=>{let{isOpen:t,botId:n,isGallery:r,inlineBotResults:o,switchPm:c,loadMore:d,onClose:m,onSelectResult:u}=e;const{openChat:h,startBot:Z}=(0,s.uC)(),v=(0,a.sO)(null),{shouldRender:g,transitionClassNames:p}=(0,H.Z)(t,void 0,void 0,!1),{observe:E}=(0,Bt.S1)({rootRef:v,debounceMs:200,isDisabled:!t}),C=(0,a.I4)((e=>{let{direction:t}=e;t===l.Uq.Backwards&&Fr(d)}),[d]),f=Gs({isActive:t,shouldRemoveSelectionOnReset:r,noArrowNavigation:r,items:o,onSelect:u,onClose:m});(0,a.d4)((()=>{Os(".chat-item-clickable",f,v)}),[f]);const b=(0,a.I4)((()=>{h({id:n}),Z({botId:n,param:c.startParam})}),[n,h,Z,c]),I=(0,P.Z)(null!=o&&o.length?o:void 0,g),y=o&&!o.length?I:o;if(!g||!(null!=y&&y.length||c))return;const N=(0,X.Z)("InlineBotTooltip composer-tooltip",i.$b?"no-scrollbar":"custom-scroll",r&&"gallery",p);return a.ZP.createElement(Re.Z,{ref:v,className:N,items:y,itemSelector:".chat-item-clickable",noFastList:!0,onLoadMore:C,sensitiveArea:160},c&&a.ZP.createElement(Ae.Z,{ripple:!0,className:"switch-pm scroll-item",onClick:b},a.ZP.createElement("span",{className:"title"},c.text)),(null==y?void 0:y.length)&&y.map(((e,t)=>{switch(e.type){case"gif":return a.ZP.createElement(Ar,{key:e.id,inlineResult:e,observeIntersection:E,onClick:u});case"photo":return a.ZP.createElement(Tr,{key:e.id,isForGallery:r,inlineResult:e,onClick:u});case"sticker":return a.ZP.createElement(Lr,{key:e.id,inlineResult:e,observeIntersection:E,onClick:u});case"video":case"file":case"game":return a.ZP.createElement(Tr,{key:e.id,focus:f===t,inlineResult:e,onClick:u});case"article":case"audio":return a.ZP.createElement(Rr,{key:e.id,focus:f===t,inlineResult:e,onClick:u});default:return}})))})),$r=(0,a.X$)((e=>{let{isOpen:t,onClose:n,chatId:r,selectedSendAsId:l,sendAsIds:o}=e;const{saveDefaultSendAs:c}=(0,s.uC)(),d=(0,s.Rd)().users.byId,m=(0,s.Rd)().chats.byId,u=(0,h.Z)(),Z=(0,a.sO)(null),[v,P,p]=(0,Hs.Z)(t,n,void 0);(0,a.d4)((()=>{t&&p()}),[t,p]);const E=(0,a.I4)((e=>{n(),c({chatId:r,sendAsId:e})}),[r,n,c]),C=Gs({isActive:t,items:o,onSelect:E,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});return(0,a.d4)((()=>{Os(".chat-item-clickable",C,Z)}),[C]),(0,a.d4)((()=>{o&&!o.length&&n()}),[o,n]),a.ZP.createElement(Ps.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:n,className:"SendAsMenu",onCloseAnimationEnd:n,onMouseEnter:i.$b?void 0:v,onMouseLeave:i.$b?void 0:P,noCloseOnBackdrop:!i.$b},a.ZP.createElement("div",{className:"send-as-title",dir:"auto"},u("SendMessageAsTitle")),d&&m&&(null==o?void 0:o.map(((e,t)=>{const n=(0,g.YC)(e)?d[e]:void 0,s=n?void 0:m[e],r=n?(0,g.Js)(n):null==s?void 0:s.title;return a.ZP.createElement(Ae.Z,{key:e,className:"SendAsItem chat-item-clickable scroll-item with-avatar",onClick:()=>E(e),focus:C===t},a.ZP.createElement(ge.Z,{size:"small",user:n,chat:s,className:(0,X.Z)(l===e&&"selected")}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,Pe.Z)(r))),a.ZP.createElement("span",{className:"subtitle"},n?u("VoipGroupPersonalAccount"):u("Subscribers",null==s?void 0:s.membersCount,"i"))))}))))}));var xr=n(6844);const Dr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n),s=a&&(0,p.Zw)(e,a.id);if(!a||!s)return{};const{query:r,results:l}=(0,p.n5)(e)||{},{totalCount:o,foundIds:i}=l||{};return{chat:a,messagesById:s,query:r,totalCount:o,foundIds:i}}))((e=>{let{chatId:t,threadId:n,onClose:r,isActive:l,chat:o,messagesById:i,query:c,totalCount:d,foundIds:m}=e;const{searchTextMessagesLocal:Z,focusMessage:v}=(0,s.uC)(),P=(0,a.sO)(null),E=(0,h.Z)();(0,u.ZP)(l,r);const[C,f]=(0,Ne.Z)(Z,m),b=(0,a.Ye)((()=>c&&null!=C&&C.length&&i?C.map((e=>{const a=i[e];if(!a)return;const r=a.senderId?(0,p.dy)((0,s.Rd)(),a.senderId):void 0;let l;if(o&&(0,g.eA)(o))l=o;else if(a.forwardInfo){const{isChannelPost:e,fromChatId:t}=a.forwardInfo;l=e&&t?(0,p.Z1)((0,s.Rd)(),t):void 0}else l=a.senderId?(0,p.Z1)((0,s.Rd)(),a.senderId):void 0;return{message:a,senderUser:r,senderChat:l,onClick:()=>v({chatId:t,threadId:n,messageId:e})}})).filter(Boolean):Zt.D),[c,C,i,o,v,t,n]),I=(0,ke.Z)(P,!0,(e=>{const t=null==b?void 0:b[-1===e?0:e];t&&t.onClick()}),".ListItem-button",!0),N=(null==C?void 0:C[0])===(null==m?void 0:m[0]);return a.ZP.createElement(Re.Z,{ref:P,className:"RightSearch custom-scroll",items:b,preloadBackwards:0,onLoadMore:f,onKeyDown:I},N&&a.ZP.createElement("p",{key:"helper-text",className:"helper-text",dir:"auto"},c?0!==d&&b.length?1===d?"1 message found":`${b.length&&(d||b.length)} messages found`:E("lng_search_no_results"):E("lng_dlg_search_for_messages")),b.map((e=>{let{message:t,senderUser:n,senderChat:s,onClick:r}=e;const l=s?(0,g.U)(E,s):(0,g.Js)(n),o=(0,y.e)(E,t,void 0,c);return a.ZP.createElement(Ae.Z,{key:t.id,teactOrderKey:-t.date,className:"chat-item-clickable search-result-message m-0",onClick:r},a.ZP.createElement(ge.Z,{chat:s,user:n}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},l&&(0,Pe.Z)(l)),a.ZP.createElement(xr.Z,{message:t})),a.ZP.createElement("div",{className:"subtitle",dir:"auto"},o)))})))})));var Or=n(9290);const Ur=(0,a.X$)((0,s.c$)(((e,t)=>{let{stickerSetId:n}=t;return{set:(0,p.Ny)(e,n),shouldPlay:(0,p.yB)(e)}}))((e=>{let{stickerSetId:t,observeIntersection:n,set:r,shouldPlay:l,isSomeModalOpen:i,onModalToggle:c}=e;const{loadStickers:d,toggleStickerSet:m}=(0,s.uC)(),u=(0,h.Z)(),Z=r&&Boolean(r.installedDate),v=Boolean(null==r?void 0:r.stickers),[P,g,p]=(0,ye.Z)();(0,Or.Z)((()=>{c(P)}),[P,c]);const E=(0,a.Ye)((()=>{if(!r)return[];const e=(r.covers||[]).map((e=>{let{id:t}=e;return t})),t=r.stickers?r.stickers.filter((t=>{let{id:n}=t;return!e.includes(n)})):[];return[...r.covers||[],...t].slice(0,5)}),[r]);(0,a.d4)((()=>{!v&&E.length<5&&d({stickerSetId:t})}),[v,E.length,d,t]);const C=(0,a.I4)((()=>{m({stickerSetId:t})}),[m,t]);if(!r)return;const f=E.length>0;return a.ZP.createElement("div",{key:r.id,className:"sticker-set",dir:u.isRtl?"rtl":void 0},a.ZP.createElement("div",{className:"sticker-set-header"},a.ZP.createElement("div",{className:"title-wrapper"},a.ZP.createElement("h3",{className:"title",dir:"auto"},r.title),a.ZP.createElement("p",{className:"count",dir:"auto"},u("Stickers",r.count,"i"))),a.ZP.createElement(R.Z,{className:Z?"is-added":void 0,color:"primary",size:"tiny",pill:!0,fluid:!0,onClick:C},u(Z?"Stickers.Installed":"Stickers.Install"))),a.ZP.createElement("div",{className:"sticker-set-main"},!f&&a.ZP.createElement(J.Z,null),f&&E.map((e=>a.ZP.createElement(On.Z,{sticker:e,size:o.Y7,observeIntersection:n,noAnimate:!l||P||i,onClick:g})))),f&&a.ZP.createElement(Gn.Z,{isOpen:P,fromSticker:E[0],onClose:p}))}))),Gr=(0,G.P2)((e=>e()),6e4,!0),Jr=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.y5)(e),{query:n,resultIds:a}=t||{},{featured:s}=e.stickers;return{query:n,featuredIds:s.setIds,resultIds:a}}))((e=>{let{onClose:t,isActive:n,query:r,featuredIds:l,resultIds:o}=e;const{loadFeaturedStickers:i}=(0,s.uC)(),c=(0,a.sO)(null),d=(0,h.Z)(),[m,Z]=(0,a.eJ)(!1),{observe:v}=(0,Bt.S1)({rootRef:c,throttleMs:200});return(0,a.d4)((()=>{Gr((()=>{i()}))})),(0,u.ZP)(n,t),a.ZP.createElement("div",{ref:c,className:"StickerSearch custom-scroll",dir:d.isRtl?"rtl":void 0},function(){if(void 0!==r)return!r&&l?l.map((e=>a.ZP.createElement(Ur,{key:e,stickerSetId:e,observeIntersection:v,isSomeModalOpen:m,onModalToggle:Z}))):o?o.length?o.map((e=>a.ZP.createElement(Ur,{key:e,stickerSetId:e,observeIntersection:v,isSomeModalOpen:m,onModalToggle:Z}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},"Nothing found."):a.ZP.createElement(we.Z,null)}())}))),Xr=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.yN)(e),{query:n,results:a}=t||{},{chatId:s}=(0,p.Bt)(e)||{},r=s?(0,p.Z1)(e,s):void 0;return{query:n,results:a,chat:r,isChatWithBot:r?(0,p.xo)(e,r):void 0}}))((e=>{let{onClose:t,isActive:n,query:r,results:l,chat:o,isChatWithBot:c}=e;const{searchMoreGifs:d,sendMessage:m,setGifSearchQuery:Z}=(0,s.uC)(),v=(0,a.sO)(null),{observe:P}=(0,Bt.S1)({rootRef:v,debounceMs:300}),{canSendGifs:p}=(0,g.H5)(o,c),E=(0,a.I4)((e=>{p&&m({gif:e}),i.$b&&Z({query:void 0})}),[p,m,Z]),C=(0,h.Z)();(0,u.ZP)(n,t);const f=Boolean(void 0!==r&&l&&l.length);return a.ZP.createElement("div",{className:"GifSearch",dir:C.isRtl?"rtl":void 0},a.ZP.createElement(Re.Z,{ref:v,className:(0,X.Z)("gif-container custom-scroll",f&&"grid"),items:l,itemSelector:".GifButton",preloadBackwards:96,noFastList:!0,onLoadMore:d},function(){if(void 0!==r)return l?l.length?l.map((e=>a.ZP.createElement(mr,{key:e.id,gif:e,observeIntersection:P,onClick:E}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},C("NoGIFsFound")):a.ZP.createElement(we.Z,null)}()))}))),zr=(0,a.X$)((0,s.c$)(((e,t)=>{let{answer:n}=t;const{voters:a,offsets:s}=e.pollResults;return{voters:null==a?void 0:a[n.option],offset:(null==s?void 0:s[n.option])||""}}))((e=>{let{chat:t,message:n,answer:r,answerVote:l,totalVoters:o,voters:i,offset:c}=e;const{loadPollOptionResults:d,openChat:m,closePollResults:u}=(0,s.uC)(),Z=(0,P.Z)(l.votersCount),[v,g]=(0,a.eJ)(!0),p=Boolean(i),{option:E,text:C}=r,f=(0,h.Z)();(0,a.d4)((()=>{p&&Z===l.votersCount||d({chat:t,messageId:n.id,option:E,offset:c,limit:4,shouldResetVoters:!0})}),[l.votersCount,p]);const b=(0,a.I4)((()=>{g(!0),d({chat:t,messageId:n.id,option:E,offset:c,limit:50})}),[t,d,n.id,c,E]);(0,a.d4)((()=>{g(!1)}),[i]);const I=(0,a.I4)((e=>{m({id:e}),u()}),[u,m]);return a.ZP.createElement("div",{className:"PollAnswerResults"},a.ZP.createElement("div",{className:"poll-voters"},i?i.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable",onClick:()=>I(e)},a.ZP.createElement(Fe.Z,{avatarSize:"tiny",userId:e,forceShowSelf:!0,noStatusOrTyping:!0})))):a.ZP.createElement(we.Z,null),i&&function(){const e=l.votersCount-i.length;return l.votersCount>4&&e>0&&a.ZP.createElement(wn,{count:e,itemName:"voter",isLoading:v,onClick:b})}()),a.ZP.createElement("div",{className:"answer-head",dir:f.isRtl?"rtl":void 0},a.ZP.createElement("span",{className:"answer-title",dir:"auto"},C),a.ZP.createElement("span",{className:"answer-percent",dir:f.isRtl?"auto":void 0},(y=l.votersCount,(N=o)>0?(y/N*100).toFixed():0),"%")));var y,N}))),_r=(0,a.X$)((0,s.c$)((e=>{const{pollResults:{chatId:t,messageId:n},lastSyncTime:a}=e;return t&&n?{chat:(0,p.Z1)(e,t),message:(0,p.hj)(e,t,n),lastSyncTime:a}:{}}))((e=>{let{onClose:t,isActive:n,chat:s,message:r,lastSyncTime:l}=e;const o=(0,h.Z)();if((0,u.ZP)(n,t),!r||!s)return a.ZP.createElement(we.Z,null);const{summary:i,results:c}=(0,g.t9)(r);if(!c.results)return;const d=(0,me.ee)(c.results,"option");return a.ZP.createElement("div",{className:"PollResults",dir:o.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"poll-question",dir:"auto"},(0,Pe.Z)(i.question,["emoji","br"])),a.ZP.createElement("div",{className:"poll-results-list custom-scroll"},l&&i.answers.map((e=>a.ZP.createElement(zr,{key:`${r.id}-${e.option}`,chat:s,message:r,answer:e,answerVote:d[e.option],totalVoters:c.totalVoters}))),!l&&a.ZP.createElement(we.Z,null)))}))),Yr="Please provide first name",Hr=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;const a=(0,p.dy)(e,n),s=(0,p.Z1)(e,n),{progress:r}=e.management;return{user:a,progress:r,isMuted:(0,g.i4)(s,(0,p.dZ)(e),(0,p.NJ)(e))}}))((e=>{let{userId:t,user:n,progress:r,isMuted:o,onClose:i,isActive:c}=e;const{updateContact:d,deleteContact:m,closeManagement:Z}=(0,s.uC)(),[v,P,g]=(0,ye.Z)(),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(),b=(0,h.Z)();(0,u.ZP)(c,i);const I=n&&n.firstName||"",y=n&&n.lastName||"",[N,k]=(0,a.eJ)(I),[S,w]=(0,a.eJ)(y),[M,T]=(0,a.eJ)(!o);(0,a.d4)((()=>{T(!o)}),[o]),(0,a.d4)((()=>{E(!1),g()}),[g,t]),(0,a.d4)((()=>{k(I),w(y)}),[I,y,n]),(0,a.d4)((()=>{r===l.wv.Complete&&(E(!1),f(void 0),g())}),[g,r]);const R=(0,a.I4)((e=>{k(e.target.value),E(!0)}),[]),A=(0,a.I4)((e=>{w(e.target.value),E(!0)}),[]),L=(0,a.I4)((e=>{T(e.target.checked),E(!0)}),[]),F=(0,a.I4)((()=>{const e=N.trim(),n=S.trim();e.length||f(Yr),d({userId:t,isMuted:!M,firstName:e,lastName:n})}),[N,S,d,t,M]),B=(0,a.I4)((()=>{m({userId:t}),g(),Z()}),[g,Z,m,t]);if(!n)return;const $=r===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Fe.Z,{userId:n.id,avatarSize:"jumbo",status:"original name",withFullInfo:!0}),a.ZP.createElement(Te.Z,{id:"user-first-name",label:b("UserInfo.FirstNamePlaceholder"),onChange:R,value:N,error:C===Yr?C:void 0}),a.ZP.createElement(Te.Z,{id:"user-last-name",label:b("UserInfo.LastNamePlaceholder"),onChange:A,value:S}),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(fn.Z,{checked:M,label:b("Notifications"),subLabel:b(M?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),onChange:L}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:P},b("DeleteContact")))),a.ZP.createElement(mn.Z,{isShown:p,onClick:F,disabled:$,ariaLabel:b("Save")},$?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:v,onClose:g,text:b("AreYouSureDeleteContact"),confirmLabel:b("DeleteContact"),confirmHandler:B,confirmIsDestructive:!0}))}))),Vr="Group title can't be empty",qr=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,p.Z1)(e,s),{progress:l}=e.management,o=Boolean(null===(n=r.fullInfo)||void 0===n?void 0:n.linkedChatId),i=(0,g.G9)(r),{invites:c}=e.management.byChatId[s]||{};return{chat:r,progress:l,isBasicGroup:i,hasLinkedChannel:o,canChangeInfo:i?r.isCreator:(0,g.VE)(r,"changeInfo"),canBanUsers:i?r.isCreator:(0,g.VE)(r,"banUsers"),canInvite:i?r.isCreator:(0,g.VE)(r,"inviteUsers"),exportedInvites:c,lastSyncTime:e.lastSyncTime,availableReactionsCount:null===(a=e.availableReactions)||void 0===a?void 0:a.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d;let{chatId:m,chat:v,progress:P,isBasicGroup:p,hasLinkedChannel:E,canChangeInfo:C,canBanUsers:f,canInvite:b,onScreenSelect:I,onClose:y,isActive:N,exportedInvites:k,lastSyncTime:S,availableReactionsCount:w}=e;const{togglePreHistoryHidden:M,updateChat:T,deleteChat:R,leaveChannel:A,deleteChannel:L,closeManagement:F,openChat:B,loadExportedChatInvites:$,loadChatJoinRequests:x}=(0,s.uC)(),[D,O,U]=(0,ye.Z)(),G=v.title,X=v.fullInfo&&v.fullInfo.about||"",[z,_]=(0,a.eJ)(!1),[Y,H]=(0,a.eJ)(G||""),[V,q]=(0,a.eJ)(X),[j,K]=(0,a.eJ)(),[W,Q]=(0,a.eJ)(),ee=(0,g.RT)(v),te=(0,Z.Z)(ee,!1,r.IU.BlobUrl),ne=v.username||E,ae=(0,h.Z)();(0,u.ZP)(N,y),(0,a.d4)((()=>{S&&b&&($({chatId:m}),$({chatId:m,isRevoked:!0}),x({chatId:m}))}),[m,$,S,b,x]),(0,a.d4)((()=>{P===l.wv.Complete&&(_(!1),Q(void 0))}),[P]);const se=(0,a.I4)((()=>{I(l.u1.ChatPrivacyType)}),[I]),re=(0,a.I4)((()=>{I(l.u1.Discussion)}),[I]),le=(0,a.I4)((()=>{I(l.u1.Reactions)}),[I]),oe=(0,a.I4)((()=>{I(l.u1.GroupPermissions)}),[I]),ie=(0,a.I4)((()=>{I(l.u1.ChatAdministrators)}),[I]),ce=(0,a.I4)((e=>{K(e),_(!0)}),[]),de=(0,a.I4)((e=>{H(e.target.value),_(!0)}),[]),me=(0,a.I4)((e=>{q(e.target.value),_(!0)}),[]),ue=(0,a.I4)((()=>{const e=Y.trim(),t=V.trim();e.length?T({chatId:m,title:e,about:t,photo:j}):Q(Vr)}),[V,m,j,Y,T]),he=(0,a.I4)((()=>{I(l.u1.GroupMembers)}),[I]),Ze=(0,a.I4)((()=>{if(!v.fullInfo)return;const{isPreHistoryHidden:e}=v.fullInfo;M({chatId:v.id,isEnabled:!e})}),[v,M]),ve=(null===(t=v.fullInfo)||void 0===t||null===(n=t.enabledReactions)||void 0===n?void 0:n.length)||0,ge=(0,a.Ye)((()=>{if(!v.defaultBannedRights)return 0;let e=["sendMessages","sendMedia","embedLinks","sendPolls","changeInfo","inviteUsers","pinMessages"].filter((e=>!v.defaultBannedRights[e])).length;const{sendStickers:t,sendGifs:n}=v.defaultBannedRights;return t||n||(e+=1),e}),[v]),pe=(null===(o=v.fullInfo)||void 0===o||null===(i=o.adminMembers)||void 0===i?void 0:i.length)||0,Ee=(0,a.I4)((()=>{p?R({chatId:v.id}):v.isCreator?L({chatId:v.id}):A({chatId:v.id}),U(),F(),B({id:void 0})}),[p,v.isCreator,v.id,U,F,A,L,R,B]);if(v.isRestricted)return;const Ce=P===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(dn.Z,{currentAvatarBlobUrl:te,onChange:ce,disabled:!C}),a.ZP.createElement(Te.Z,{id:"group-title",label:ae("GroupName"),onChange:de,value:Y,error:W===Vr?W:void 0,disabled:!C}),a.ZP.createElement(Te.Z,{id:"group-about",className:"mb-2",label:ae("DescriptionPlaceholder"),onChange:me,value:V,disabled:!C}),v.isCreator&&a.ZP.createElement(Ae.Z,{icon:"lock",multiline:!0,onClick:se},a.ZP.createElement("span",{className:"title"},ae("GroupType")),a.ZP.createElement("span",{className:"subtitle"},v.username?ae("TypePublic"):ae("TypePrivate"))),E&&a.ZP.createElement(Ae.Z,{icon:"message",multiline:!0,onClick:re},a.ZP.createElement("span",{className:"title"},ae("LinkedChannel")),a.ZP.createElement("span",{className:"subtitle"},ae("DiscussionUnlink"))),a.ZP.createElement(Ae.Z,{icon:"permissions",multiline:!0,onClick:oe,disabled:!f},a.ZP.createElement("span",{className:"title"},ae("ChannelPermissions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},ge,"/",8)),a.ZP.createElement(Ae.Z,{icon:"reactions",multiline:!0,onClick:le,disabled:!C},a.ZP.createElement("span",{className:"title"},ae("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},ve,"/",w)),a.ZP.createElement(Ae.Z,{icon:"admin",multiline:!0,onClick:ie},a.ZP.createElement("span",{className:"title"},ae("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(pe))),b&&a.ZP.createElement(Ae.Z,{icon:"link",onClick:()=>{I(l.u1.Invites)},multiline:!0,disabled:!k},a.ZP.createElement("span",{className:"title"},ae("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},k?(0,ot.kh)(k.length):ae("Loading"))),Boolean(null===(c=v.joinRequests)||void 0===c?void 0:c.length)&&a.ZP.createElement(Ae.Z,{icon:"add-user-filled",onClick:()=>{I(l.u1.JoinRequests)},multiline:!0},a.ZP.createElement("span",{className:"title"},ae("MemberRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(v.joinRequests.length)))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"group",multiline:!0,onClick:he},a.ZP.createElement("span",{className:"title"},ae("GroupMembers")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(null!==(d=v.membersCount)&&void 0!==d?d:0))),!ne&&v.fullInfo&&a.ZP.createElement("div",{className:"ListItem narrow no-selection"},a.ZP.createElement(fn.Z,{checked:!v.fullInfo.isPreHistoryHidden,label:ae("ChatHistory"),onChange:Ze,disabled:!f}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:O},ae("DeleteMega")))),a.ZP.createElement(mn.Z,{isShown:z,onClick:ue,disabled:Ce,ariaLabel:ae("Save")},Ce?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:D,onClose:U,textParts:(0,Pe.Z)(p||!v.isCreator?ae("AreYouSureDeleteAndExit"):ae("AreYouSureDeleteThisChatWithGroup",v.title),["br","simple_markdown"]),confirmLabel:p||!v.isCreator?ae("DeleteMega"):ae("DeleteGroupForAll"),confirmHandler:Ee,confirmIsDestructive:!0}))}))),jr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,p.Z1)(e,n),currentUserId:e.currentUserId}}))((e=>{let{onScreenSelect:t,onChatMemberSelect:n,chat:r,currentUserId:o,onClose:i,isActive:c}=e;const{updateChatDefaultBannedRights:d}=(0,s.uC)(),[m,Z]=(0,a.eJ)({}),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1),E=(0,h.Z)();(0,u.ZP)(c,i);const C=(0,a.I4)((()=>{t(l.u1.GroupRemovedUsers)}),[t]),f=(0,a.I4)((()=>{t(l.u1.GroupUserPermissionsCreate)}),[t]),b=(0,a.I4)((e=>{n(e.userId,e.promotedByUserId===o),t(l.u1.GroupUserPermissions)}),[o,n,t]);(0,a.d4)((()=>{Z((null==r?void 0:r.defaultBannedRights)||{}),P(!1),setTimeout((()=>{p(!1)}),250)}),[r]);const I=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}Z((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),P(!0)}),[]),y=(0,a.I4)((()=>{r&&(p(!0),d({chatId:r.id,bannedRights:m}))}),[r,m,d]),N=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.kickedMembers?r.fullInfo.kickedMembers.length:0),[r]),k=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.members?r.fullInfo.members.filter((e=>{let{bannedRights:t}=e;return Boolean(t)})):[]),[r]),S=(0,a.I4)((e=>{const{bannedRights:t}=e;if(!t||!r)return;const{defaultBannedRights:n}=r;return Object.keys(t).reduce(((e,a)=>{if(!t[a]||null!=n&&n[a]||"sendInline"===a||"viewMessages"===a||"sendGames"===a)return e;const s=function(e){switch(e){case"sendMessages":return"UserRestrictionsNoSend";case"sendMedia":return"UserRestrictionsNoSendMedia";case"sendStickers":return"UserRestrictionsNoSendStickers";case"embedLinks":return"UserRestrictionsNoEmbedLinks";case"sendPolls":return"UserRestrictionsNoSendPolls";case"changeInfo":return"UserRestrictionsNoChangeInfo";case"inviteUsers":return"UserRestrictionsInviteUsers";case"pinMessages":return"UserRestrictionsPinMessages";default:return}}(a);if(!s)return e;const r=E(s);return`${e}${e.length?`, ${r}`:r}`}),"")}),[r,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("ChannelPermissionsHeader")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMessages",checked:!m.sendMessages,label:E("UserRestrictionsSend"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMedia",checked:!m.sendMedia,label:E("UserRestrictionsSendMedia"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:E("UserRestrictionsSendStickers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendPolls",checked:!m.sendPolls,label:E("UserRestrictionsSendPolls"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"embedLinks",checked:!m.embedLinks,label:E("UserRestrictionsEmbedLinks"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:E("UserRestrictionsInviteUsers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"pinMessages",checked:!m.pinMessages,label:E("UserRestrictionsPinMessages"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!m.changeInfo,label:E("UserRestrictionsChangeInfo"),blocking:!0,onChange:I}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete-user",multiline:!0,narrow:!0,onClick:C},a.ZP.createElement("span",{className:"title"},E("ChannelBlockedUsers")),a.ZP.createElement("span",{className:"subtitle"},N))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("PrivacyExceptions")),a.ZP.createElement(Ae.Z,{icon:"add-user",onClick:f},E("ChannelAddException")),k.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable exceptions-member",onClick:()=>b(e)},a.ZP.createElement(Fe.Z,{userId:e.userId,status:S(e)})))))),a.ZP.createElement(mn.Z,{isShown:v,onClick:y,ariaLabel:E("Save"),disabled:g},g?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Kr=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e;return{currentUserId:t}}))((e=>{var t;let{chat:n,currentUserId:r,isOpen:l,onClose:o}=e;const{loadMoreMembers:i,deleteChatMember:c}=(0,s.uC)(),d=(0,h.Z)(),[m,u]=(0,a.eJ)(""),Z=(0,a.sO)(null),v=(0,a.Ye)((()=>{var e;const t=((null===(e=n.fullInfo)||void 0===e?void 0:e.members)||[]).reduce(((e,t)=>(t.isAdmin||t.isOwner||t.userId===r||e.push(t.userId),e)),[]),a=(0,s.Rd)().users.byId;return(0,g.kK)(t,a,m)}),[null===(t=n.fullInfo)||void 0===t?void 0:t.members,r,m]),P=(0,a.I4)((e=>{c({chatId:n.id,userId:e}),o()}),[n.id,c,o]);return a.ZP.createElement(Be,{isOpen:l,chatOrUserIds:v,filterRef:Z,filterPlaceholder:d("ChannelBlockUser"),filter:m,onFilterChange:u,loadMore:i,onSelectChatOrUser:P,onClose:o})}))),Wr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n),{byId:s}=e.users;return{chat:a,usersById:s,canDeleteMembers:a&&((0,g.VE)(a,"banUsers")||a.isCreator)}}))((e=>{let{chat:t,usersById:n,canDeleteMembers:r,onClose:l,isActive:o}=e;const{updateChatMemberBannedRights:i}=(0,s.uC)(),c=(0,h.Z)(),[d,m,Z]=(0,ye.Z)();(0,u.ZP)(o,l);const v=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.kickedMembers?t.fullInfo.kickedMembers:[]),[t]),P=(0,a.I4)((e=>{if(!e.kickedByUserId)return;const t=n[e.kickedByUserId];return t?c("UserRemovedBy",(0,g.Js)(t)):void 0}),[c,n]),p=(0,a.I4)((e=>{if(t)return[{title:c("Unblock"),icon:"delete",destructive:!0,handler:()=>i({chatId:t.id,userId:e.userId,bannedRights:{}})}]}),[c,t,i]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:c.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted"},c("NoBlockedGroup2")),v.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable",ripple:!0,contextActions:p(e)},a.ZP.createElement(Fe.Z,{userId:e.userId,status:P(e)})))),r&&a.ZP.createElement(mn.Z,{isShown:!0,onClick:m,ariaLabel:c("Channel.EditAdmin.Permission.BanUsers")},a.ZP.createElement("i",{className:"icon-add-user-filled"})),t&&r&&a.ZP.createElement(Kr,{chat:t,isOpen:d,onClose:Z}))))}))),Qr="Channel title can't be empty",el=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),{progress:r}=e.management,l=Boolean(null==s?void 0:s.isSignaturesShown),{invites:o}=e.management.byChatId[a]||{};return{chat:s,progress:r,isSignaturesShown:l,canChangeInfo:(0,g.VE)(s,"changeInfo"),canInvite:(0,g.VE)(s,"inviteUsers"),lastSyncTime:e.lastSyncTime,exportedInvites:o,availableReactionsCount:null===(n=e.availableReactions)||void 0===n?void 0:n.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d,m;let{chatId:v,chat:P,progress:p,isSignaturesShown:E,canChangeInfo:C,canInvite:f,exportedInvites:b,lastSyncTime:I,availableReactionsCount:y,onScreenSelect:N,onClose:k,isActive:S}=e;const{updateChat:w,toggleSignatures:M,closeManagement:T,leaveChannel:R,deleteChannel:A,openChat:L,loadExportedChatInvites:F,loadChatJoinRequests:B}=(0,s.uC)(),$=P&&P.title||"",x=null!=P&&P.fullInfo&&P.fullInfo.about||"",D=null==P||null===(t=P.fullInfo)||void 0===t?void 0:t.linkedChatId,[O,U,G]=(0,ye.Z)(),[X,z]=(0,a.eJ)(!1),[_,Y]=(0,a.eJ)($),[H,V]=(0,a.eJ)(x),[q,j]=(0,a.eJ)(),[K,W]=(0,a.eJ)(),Q=P&&(0,g.RT)(P),ee=(0,Z.Z)(Q,!1,r.IU.BlobUrl),te=(0,h.Z)();(0,u.ZP)(S,k),(0,a.d4)((()=>{I&&(F({chatId:v}),F({chatId:v,isRevoked:!0}),B({chatId:v}))}),[v,F,I,B]),(0,a.d4)((()=>{p===l.wv.Complete&&(z(!1),W(void 0))}),[p]);const ne=(null==P||null===(n=P.fullInfo)||void 0===n||null===(o=n.adminMembers)||void 0===o?void 0:o.length)||0,ae=(0,a.I4)((()=>{N(l.u1.ChatPrivacyType)}),[N]),se=(0,a.I4)((()=>{N(l.u1.Discussion)}),[N]),re=(0,a.I4)((()=>{N(l.u1.Reactions)}),[N]),le=(0,a.I4)((()=>{N(l.u1.ChatAdministrators)}),[N]),oe=(0,a.I4)((e=>{j(e),z(!0)}),[]),ie=(0,a.I4)((e=>{Y(e.target.value),z(!0)}),[]),ce=(0,a.I4)((e=>{V(e.target.value),z(!0)}),[]),de=(0,a.I4)((()=>{const e=_.trim(),t=H.trim();e.length?w({chatId:v,title:e,about:t,photo:q}):W(Qr)}),[H,v,q,_,w]),me=(0,a.I4)((()=>{M({chatId:v,isEnabled:!E})}),[v,E,M]),ue=(0,a.I4)((()=>{N(l.u1.ChannelSubscribers)}),[N]),he=(0,a.I4)((()=>{P.isCreator?A({chatId:P.id}):R({chatId:P.id}),G(),T(),L({id:void 0})}),[P.isCreator,P.id,G,T,R,A,L]),Ze=(null===(i=P.fullInfo)||void 0===i||null===(c=i.enabledReactions)||void 0===c?void 0:c.length)||0;if(P.isRestricted)return;const ve=p===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(dn.Z,{currentAvatarBlobUrl:ee,onChange:oe,disabled:!C}),a.ZP.createElement(Te.Z,{id:"channel-title",label:te("EnterChannelName"),onChange:ie,value:_,error:K===Qr?K:void 0,disabled:!C}),a.ZP.createElement(Te.Z,{id:"channel-about",className:"mb-2",label:te("DescriptionPlaceholder"),onChange:ce,value:H,disabled:!C}),P.isCreator&&a.ZP.createElement(Ae.Z,{icon:"lock",multiline:!0,onClick:ae},a.ZP.createElement("span",{className:"title"},te("ChannelType")),a.ZP.createElement("span",{className:"subtitle"},P.username?te("TypePublic"):te("TypePrivate"))),a.ZP.createElement(Ae.Z,{icon:"message",multiline:!0,onClick:se,disabled:!C},a.ZP.createElement("span",{className:"title"},te("Discussion")),a.ZP.createElement("span",{className:"subtitle"},te(D?"DiscussionUnlink":"Add"))),a.ZP.createElement(Ae.Z,{icon:"admin",multiline:!0,onClick:le},a.ZP.createElement("span",{className:"title"},te("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},ne)),f&&a.ZP.createElement(Ae.Z,{icon:"link",onClick:()=>{N(l.u1.Invites)},multiline:!0,disabled:!b},a.ZP.createElement("span",{className:"title"},te("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},b?(0,ot.kh)(b.length):te("Loading"))),Boolean(null===(d=P.joinRequests)||void 0===d?void 0:d.length)&&a.ZP.createElement(Ae.Z,{icon:"add-user-filled",onClick:()=>{N(l.u1.JoinRequests)},multiline:!0},a.ZP.createElement("span",{className:"title"},te("SubscribeRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(P.joinRequests.length))),a.ZP.createElement(Ae.Z,{icon:"reactions",multiline:!0,onClick:re,disabled:!C},a.ZP.createElement("span",{className:"title"},te("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},Ze,"/",y)),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(fn.Z,{checked:E,label:te("ChannelSignMessages"),onChange:me}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"group",multiline:!0,onClick:ue},a.ZP.createElement("span",{className:"title",dir:"auto"},te("ChannelSubscribers")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},te("Subscribers",null!==(m=P.membersCount)&&void 0!==m?m:0,"i")))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:U},P.isCreator?te("ChannelDelete"):te("LeaveChannel")))),a.ZP.createElement(mn.Z,{isShown:X,onClick:de,disabled:ve,ariaLabel:te("Save")},ve?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:O,onClose:G,text:P.isCreator?te("ChannelDeleteAlert"):te("ChannelLeaveAlert"),confirmLabel:P.isCreator?te("ChannelDelete"):te("LeaveChannel"),confirmHandler:he,confirmIsDestructive:!0}))})));var tl=n(88);const nl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n),{isUsernameAvailable:s}=(0,p.aW)(e,n);return{chat:a,isChannel:(0,g.eA)(a),progress:e.management.progress,isUsernameAvailable:s,isProtected:null==a?void 0:a.isProtected}}))((e=>{var t;let{chat:n,onClose:r,isActive:o,isChannel:i,progress:c,isUsernameAvailable:d,isProtected:m}=e;const{checkPublicLink:Z,updatePublicLink:v,updatePrivateLink:P,toggleIsProtected:g}=(0,s.uC)(),p=Boolean(n.username),E=null===(t=n.fullInfo)||void 0===t?void 0:t.inviteLink,[C,f]=(0,a.eJ)(p?"public":"private"),[b,I]=(0,a.eJ)(),[y,N,k]=(0,ye.Z)(),S=Boolean("public"===C&&b&&d||"private"===C&&p);(0,u.ZP)(o,r),(0,a.d4)((()=>{C&&!E&&P()}),[C,E,P]);const w=(0,a.I4)((e=>{f(e)}),[]),M=(0,a.I4)((e=>{g({chatId:n.id,isProtected:"protected"===e})}),[n.id,g]),T=(0,a.I4)((()=>{v({username:"public"===C?b:""})}),[C,v,b]),R=(0,a.I4)((()=>{k(),P()}),[k,P]),A=(0,h.Z)(),L=i?"Channel":"Mega",F=i?"Channel":"Group",B=[{value:"private",label:A(`${L}Private`),subLabel:A(`${L}PrivateInfo`)},{value:"public",label:A(`${L}Public`),subLabel:A(`${L}PublicInfo`)}],$=[{value:"allowed",label:A("ChannelVisibility.Forwarding.Enabled")},{value:"protected",label:A("ChannelVisibility.Forwarding.Disabled")}],x=c===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(`${F}Type`)),a.ZP.createElement(at.Z,{selected:C,name:"channel-type",options:B,onChange:w})),"private"===C?a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},E?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(tl.Z,{url:E,className:"group-link",text:E}),a.ZP.createElement("p",{className:"section-info",dir:A.isRtl?"rtl":void 0},A(`${L}PrivateLinkHelp`)),a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:N},A("RevokeLink")),a.ZP.createElement(Xe.Z,{isOpen:y,onClose:k,text:A("RevokeAlert"),confirmLabel:A("RevokeButton"),confirmHandler:R,confirmIsDestructive:!0})):a.ZP.createElement(we.Z,null)):a.ZP.createElement("div",{className:"section no-border"},a.ZP.createElement(Pn,{asLink:!0,currentUsername:n.username,isLoading:x,isUsernameAvailable:d,checkUsername:Z,onChange:I}),a.ZP.createElement("p",{className:"section-info",dir:"auto"},A(`${F}.Username.CreatePublicLinkHelp`))),a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(i?"ChannelVisibility.Forwarding.ChannelTitle":"ChannelVisibility.Forwarding.GroupTitle")),a.ZP.createElement(at.Z,{selected:m?"protected":"allowed",name:"forwarding-type",options:$,onChange:M}),a.ZP.createElement("p",{className:"section-info"},A(i?"ChannelVisibility.Forwarding.ChannelInfo":"ChannelVisibility.Forwarding.GroupInfo")))),a.ZP.createElement(mn.Z,{isShown:S,disabled:x,ariaLabel:A("Save"),onClick:T},x?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),al=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),{forDiscussionIds:r,byId:l}=e.chats;return{chat:s,chatsByIds:l,forDiscussionIds:r,linkedChat:null!=s&&null!==(n=s.fullInfo)&&void 0!==n&&n.linkedChatId?(0,p.Z1)(e,s.fullInfo.linkedChatId):void 0,isChannel:s&&(0,g.eA)(s)}}))((e=>{let{chat:t,onClose:n,isActive:r,chatId:i,chatsByIds:c,linkedChat:d,forDiscussionIds:m,isChannel:Z,onScreenSelect:v}=e;const{loadGroupsForDiscussion:P,linkDiscussionGroup:g,unlinkDiscussionGroup:p}=(0,s.uC)(),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),[I,y]=(0,a.eJ)(!1),N=(0,a.I4)((()=>y(!0)),[]),[k,S,w]=(0,ye.Z)(),[M,T,R]=(0,ye.Z)(),A=(0,h.Z)(),L=null==d?void 0:d.id;(0,u.ZP)(r,n),(0,a.d4)((()=>{P()}),[P]),(0,a.d4)((()=>{f||(0,dt.Z)("DiscussionGroups").then(b)}),[f]);const F=(0,a.I4)((()=>{w(),p({channelId:Z?i:L}),Z||v(l.u1.Initial)}),[w,p,Z,i,L,v]),B=(0,a.I4)((()=>{R(),g({channelId:i,chatId:E})}),[R,g,i,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},f&&a.ZP.createElement(mt.Z,{id:"discussionGroupsDucks",size:o.bM,animationData:f,play:I,noLoop:!0,onLoad:N})),d&&a.ZP.createElement("div",null,a.ZP.createElement(Ae.Z,{className:"chat-item-clickable",inactive:!0},a.ZP.createElement(Le.Z,{chatId:d.id})),a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:S},A(Z?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel")),a.ZP.createElement(Xe.Z,{isOpen:k,onClose:w,header:a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(ge.Z,{size:"tiny",chat:d}),a.ZP.createElement("div",{className:"modal-title"},A(Z?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"))),textParts:(0,Pe.Z)(A(Z?"DiscussionUnlinkChannelAlert":"DiscussionUnlinkGroupAlert",d.title),["br","simple_markdown"]),confirmLabel:A(Z?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"),confirmHandler:F,confirmIsDestructive:!0})),!d&&a.ZP.createElement("div",null,a.ZP.createElement("p",{className:"section-help",dir:"auto"},A("DiscussionChannelHelp")),a.ZP.createElement("div",{teactFastList:!0},a.ZP.createElement(Ae.Z,{key:"create-group",icon:"group",ripple:!0,teactOrderKey:0,className:"not-implemented"},A("DiscussionCreateGroup")),m?m.map(((e,t)=>a.ZP.createElement(Ae.Z,{key:e,teactOrderKey:t+1,className:"chat-item-clickable scroll-item",onClick:()=>{C(e),T()}},a.ZP.createElement(Le.Z,{chatId:e})))):a.ZP.createElement(St.Z,{key:"nothing-found",teactOrderKey:0,text:"No discussion groups found"})),a.ZP.createElement("p",{className:"mt-4 mb-0 section-help",dir:"auto"},A("DiscussionChannelHelp2")),a.ZP.createElement(Xe.Z,{isOpen:M,onClose:R,header:function(){const e=c[E];if(e)return a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(ge.Z,{size:"tiny",chat:e}),a.ZP.createElement("div",{className:"modal-title"},A("Channel.DiscussionGroup.LinkGroup")))}(),textParts:function(){const e=c[E];if(e)return e.hasPrivateLink?(0,Pe.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?`,["br","simple_markdown"]):(0,Pe.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?\n\nAnyone from the channel will be able to see messages in this group.`,["br","simple_markdown"])}(),confirmLabel:A("DiscussionLinkGroup"),confirmHandler:B,isButtonsInOneRow:!0})))))}))),sl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,p.Z1)(e,n);return{chat:s,isFormFullyDisabled:!(s.isCreator||a)}}))((e=>{let{chat:t,selectedChatMemberId:n,onScreenSelect:r,isFormFullyDisabled:o,onClose:i,isActive:c}=e;const{updateChatMemberBannedRights:d}=(0,s.uC)(),[m,Z]=(0,a.eJ)({}),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1),[E,C,f]=(0,ye.Z)(),b=(0,h.Z)();(0,u.ZP)(c,i);const I=(0,a.Ye)((()=>{if(t&&t.fullInfo&&t.fullInfo.members)return t.fullInfo.members.find((e=>{let{userId:t}=e;return t===n}))}),[t,n]);(0,a.d4)((()=>{null!=t&&t.fullInfo&&n&&!I&&r(l.u1.GroupPermissions)}),[t,r,I,n]),(0,a.d4)((()=>{Z((null==I?void 0:I.bannedRights)||(null==t?void 0:t.defaultBannedRights)||{}),P(!1),p(!1)}),[t,I]);const y=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}Z((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),P(!0)}),[]),N=(0,a.I4)((()=>{t&&n&&(p(!0),d({chatId:t.id,userId:n,bannedRights:m}))}),[t,n,m,d]),k=(0,a.I4)((()=>{t&&n&&d({chatId:t.id,userId:n,bannedRights:{viewMessages:!0}})}),[t,n,d]),S=(0,a.I4)((e=>!!o||!(!t||!t.defaultBannedRights)&&t.defaultBannedRights[e]),[t,o]);if(I)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Fe.Z,{userId:I.userId})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},b("UserRestrictionsCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMessages",checked:!m.sendMessages,label:b("UserRestrictionsSend"),blocking:!0,disabled:S("sendMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMedia",checked:!m.sendMedia,label:b("UserRestrictionsSendMedia"),blocking:!0,disabled:S("sendMedia"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:b("UserRestrictionsSendStickers"),blocking:!0,disabled:S("sendStickers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendPolls",checked:!m.sendPolls,label:b("UserRestrictionsSendPolls"),blocking:!0,disabled:S("sendPolls"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"embedLinks",checked:!m.embedLinks,label:b("UserRestrictionsEmbedLinks"),blocking:!0,disabled:S("embedLinks"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:b("UserRestrictionsInviteUsers"),blocking:!0,disabled:S("inviteUsers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"pinMessages",checked:!m.pinMessages,label:b("UserRestrictionsPinMessages"),blocking:!0,disabled:S("pinMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!m.changeInfo,label:b("UserRestrictionsChangeInfo"),blocking:!0,disabled:S("changeInfo"),onChange:y}))),!o&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete-user",ripple:!0,destructive:!0,onClick:C},b("UserRestrictionsBlock")))),a.ZP.createElement(mn.Z,{isShown:v,onClick:N,ariaLabel:b("Save"),disabled:g},g?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:E,onClose:f,text:"Are you sure you want to ban and remove this user from the group?",confirmLabel:"Remove",confirmHandler:k,confirmIsDestructive:!0}))}))),rl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n);return{chat:a,currentUserId:e.currentUserId,isChannel:(0,g.eA)(a)}}))((e=>{let{chat:t,isChannel:n,currentUserId:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d}=e;const m=(0,h.Z)();(0,u.ZP)(d,c);const Z=(0,a.Ye)((()=>t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),v=(0,a.I4)((e=>{i(e.userId,e.promotedByUserId===r),o(l.u1.ChatAdminRights)}),[r,i,o]),P=(0,a.I4)((()=>{o(l.u1.GroupAddAdmins)}),[o]),p=(0,a.I4)((e=>{if(e.isOwner)return m("ChannelCreator");const t=(0,s.Rd)().users.byId,n=e.promotedByUserId?t[e.promotedByUserId]:void 0;return n?m("EditAdminPromotedBy",(0,g.Js)(n)):m("ChannelAdmin")}),[m]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"recent",multiline:!0,onClick:function(){o(l.u1.GroupRecentActions)}},a.ZP.createElement("span",{className:"title"},m("EventLog")),a.ZP.createElement("span",{className:"subtitle"},m(n?"EventLogInfoDetailChannel":"EventLogInfoDetail")))),a.ZP.createElement("div",{className:"section",dir:m.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted",dir:"auto"},n?"You can add administrators to help you manage your channel.":"You can add administrators to help you manage your group."),Z.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable",onClick:()=>v(e)},a.ZP.createElement(Fe.Z,{userId:e.userId,status:p(e),forceShowSelf:!0})))),a.ZP.createElement(mn.Z,{isShown:!0,onClick:P,ariaLabel:m("Channel.Management.AddModerator")},a.ZP.createElement("i",{className:"icon-add-user-filled"})))))}))),ll=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,p.Z1)(e,n)}}))((e=>{let{chat:t,onClose:n,isActive:s}=e;const r=(0,h.Z)();(0,u.ZP)(s,n);const l=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),o=(0,a.I4)((e=>e.isOwner?r("ChannelCreator"):r("ChannelAdmin")),[r]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},"Actions"),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllEvents"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewAdmins"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewMembers"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterChannelInfo"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterDeletedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterEditedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterLeavingMembers"),onChange:void 0}))),a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},r("Channel.Management.Title")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllAdmins"),onChange:void 0})),l.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable picker-list-item",onClick:void 0,ripple:!0},a.ZP.createElement(fn.Z,{label:"",checked:!0}),a.ZP.createElement(Fe.Z,{userId:e.userId,status:o(e),forceShowSelf:!0})))))))}))),ol=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,p.Z1)(e,n),{byId:r}=e.users,{currentUserId:l}=e;return{chat:s,usersById:r,currentUserId:l,isChannel:(0,g.eA)(s),isFormFullyDisabled:!(s.isCreator||a),defaultRights:s.adminRights}}))((e=>{var t;let{isNewAdmin:n,selectedUserId:r,defaultRights:o,onScreenSelect:i,chat:c,usersById:d,currentUserId:m,isChannel:Z,isFormFullyDisabled:v,onClose:P,isActive:p}=e;const{updateChatAdmin:E}=(0,s.uC)(),[C,f]=(0,a.eJ)({}),[b,I]=(0,a.eJ)(Boolean(n)),[y,N]=(0,a.eJ)(!1),[k,S,w]=(0,ye.Z)(),[M,T]=(0,a.eJ)(""),R=(0,h.Z)();(0,u.ZP)(p,P);const A=(0,a.Ye)((()=>{var e,t;const a=null===(e=c.fullInfo)||void 0===e||null===(t=e.adminMembers)||void 0===t?void 0:t.find((e=>{let{userId:t}=e;return t===r}));if(!n||!a&&r){if(n){const e=(0,s.Rd)().users.byId[r];return e?{userId:e.id,adminRights:o,customTitle:R("ChannelAdmin"),isOwner:!1,promotedByUserId:void 0}:void 0}return a}}),[null===(t=c.fullInfo)||void 0===t?void 0:t.adminMembers,o,n,R,r]);(0,a.d4)((()=>{null!=c&&c.fullInfo&&r&&!A&&i(l.u1.ChatAdministrators)}),[c,i,A,r]),(0,a.d4)((()=>{f((null==A?void 0:A.adminRights)||{}),T(((null==A?void 0:A.customTitle)||"").substr(0,16)),I(Boolean(n)),N(!1)}),[o,n,A]);const L=(0,a.I4)((e=>{const{name:t}=e.target;f((e=>{return{...e,[t]:(n=e[t],!n||void 0)};var n})),I(!0)}),[]),F=(0,a.I4)((()=>{r&&(N(!0),E({chatId:c.id,userId:r,adminRights:C,customTitle:M}))}),[r,E,c.id,C,M]),B=(0,a.I4)((()=>{r&&(E({chatId:c.id,userId:r,adminRights:{}}),w())}),[c.id,w,r,E]),$=(0,a.I4)((e=>!((0,g.G9)(c)||!v&&c.adminRights&&c.adminRights[e])),[c,v]),x=(0,a.Ye)((()=>{if(n||!A)return;if(A.isOwner)return R("ChannelCreator");const e=A.promotedByUserId?d[A.promotedByUserId]:void 0;return e?R("EditAdminPromotedBy",(0,g.Js)(e)):R("ChannelAdmin")}),[n,A,d,R]),D=(0,a.I4)((e=>{const{value:t}=e.target;T(t),I(!0)}),[]);if(A)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Fe.Z,{userId:A.userId,status:x,forceShowSelf:!0})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},R("EditAdminWhatCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:Boolean(C.changeInfo),label:R(Z?"EditAdminChangeChannelInfo":"EditAdminChangeGroupInfo"),blocking:!0,disabled:$("changeInfo"),onChange:L})),Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"postMessages",checked:Boolean(C.postMessages),label:R("EditAdminPostMessages"),blocking:!0,disabled:$("postMessages"),onChange:L})),Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"editMessages",checked:Boolean(C.editMessages),label:R("EditAdminEditMessages"),blocking:!0,disabled:$("editMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"deleteMessages",checked:Boolean(C.deleteMessages),label:R(Z?"EditAdminDeleteMessages":"EditAdminGroupDeleteMessages"),blocking:!0,disabled:$("deleteMessages"),onChange:L})),!Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"banUsers",checked:Boolean(C.banUsers),label:R("EditAdminBanUsers"),blocking:!0,disabled:$("banUsers"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"inviteUsers",checked:Boolean(C.inviteUsers),label:R("EditAdminAddUsers"),blocking:!0,disabled:$("inviteUsers"),onChange:L})),!Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"pinMessages",checked:Boolean(C.pinMessages),label:R("EditAdminPinMessages"),blocking:!0,disabled:$("pinMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"addAdmins",checked:Boolean(C.addAdmins),label:R("EditAdminAddAdmins"),blocking:!0,disabled:$("addAdmins"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"manageCall",checked:Boolean(C.manageCall),label:R("StartVoipChatPermission"),blocking:!0,disabled:$("manageCall"),onChange:L})),!Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"anonymous",checked:Boolean(C.anonymous),label:R("EditAdminSendAnonymously"),blocking:!0,disabled:$("anonymous"),onChange:L})),v&&a.ZP.createElement("p",{className:"section-info mb-4",dir:"auto"},R("Channel.EditAdmin.CannotEdit")),!Z&&a.ZP.createElement(Te.Z,{id:"admin-title",label:R("EditAdminRank"),onChange:D,value:M,disabled:v,maxLength:16}),m!==r&&!v&&!n&&a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:S},R("EditAdminRemoveAdmin")))),a.ZP.createElement(mn.Z,{isShown:b,onClick:F,ariaLabel:R("Save"),disabled:y},y?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),!n&&a.ZP.createElement(Xe.Z,{isOpen:k,onClose:w,text:"Are you sure you want to dismiss this admin?",confirmLabel:R("Channel.Admin.Dismiss"),confirmHandler:B,confirmIsDestructive:!0}))}))),il=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,p.Z1)(e,s),{statusesById:l}=e.users,o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.members,i=null==r||null===(a=r.fullInfo)||void 0===a?void 0:a.adminMembers,c=r&&(0,g.eA)(r),{userIds:d}=e.contactList||{},{query:m,fetchingStatus:u,globalUserIds:h,localUserIds:Z}=e.userSearch;return{members:o,adminMembers:i,userStatusesById:l,isChannel:c,localContactIds:d,searchQuery:m,isSearching:u,globalUserIds:h,localUserIds:Z,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{noAdmins:t,members:n,adminMembers:r,userStatusesById:o,isChannel:i,isActive:c,globalUserIds:d,localContactIds:m,localUserIds:Z,isSearching:v,searchQuery:P,serverTimeOffset:p,onClose:E,onScreenSelect:C,onChatMemberSelect:f}=e;const{openChat:b,setUserSearchQuery:I,loadContactList:y}=(0,s.uC)(),N=(0,h.Z)(),k=(0,a.sO)(null),S=(0,a.sO)(null),w=(0,a.Ye)((()=>t&&(null==r?void 0:r.map((e=>{let{userId:t}=e;return t})))||[]),[r,t]),M=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId;if(!n||!e)return[];const a=(0,g.Z0)(n.map((e=>{let{userId:t}=e;return t})),e,o,void 0,p);return t?a.filter((e=>!w.includes(e))):a}),[n,o,p,t,w]),T=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,n=(0,s.Rd)().chats.byId,a=Boolean(P),r=a?m?(0,g.kK)(m,e,P):[]:M;return(0,g.ih)((0,me.Tw)([...r,...a&&Z||[],...a&&d||[]]).filter((n=>{const a=e[n];return!a||(i||a.canBeInvitedToGroup||!(0,g.cS)(a))&&(!t||!w.includes(n))})),n,!0)}),[M,m,P,Z,d,i,t,w]),[R,A]=(0,Ne.Z)(y,T,Boolean(P)),L=(0,a.I4)((e=>{t?(f(e,!1),C(l.u1.ChatNewAdminRights)):b({id:e})}),[t,f,C,b]),F=(0,a.I4)((e=>{I({query:e.target.value})}),[I]),B=(0,ke.Z)(S,c,(e=>{R&&R.length>0&&L(R[-1===e?0:e])}),".ListItem-button",!0);return(0,u.ZP)(c,E),a.ZP.createElement("div",{className:"Management"},t&&a.ZP.createElement("div",{className:"Management__filter",dir:N.isRtl?"rtl":void 0},a.ZP.createElement(Te.Z,{ref:k,value:P,onChange:F,placeholder:N("Search")})),a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},null!=R&&R.length?a.ZP.createElement(Re.Z,{className:"picker-list custom-scroll",items:T,onLoadMore:A,noScrollRestore:Boolean(P),ref:S,onKeyDown:B},R.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable scroll-item",onClick:()=>L(e)},a.ZP.createElement(Fe.Z,{userId:e,forceShowSelf:!0}))))):v||!R||R.length?a.ZP.createElement(we.Z,null):a.ZP.createElement(St.Z,{teactOrderKey:0,key:"nothing-found",text:i?"No subscribers found":"No members found"}))))}))),cl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),{byId:r,statusesById:l}=e.users;return{members:null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.members,usersById:r,userStatusesById:l,isChannel:s&&(0,g.eA)(s),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{usersById:t,userStatusesById:n,members:s,isChannel:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,serverTimeOffset:m}=e;(0,u.ZP)(d,c);const h=(0,a.Ye)((()=>{if(s&&t)return(0,g.Z0)(s.filter((e=>!e.isOwner)).map((e=>{let{userId:t}=e;return t})),t,n,void 0,m)}),[s,m,t,n]),Z=(0,a.I4)((e=>{i(e),o(l.u1.GroupUserPermissions)}),[i,o]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",teactFastList:!0},h?h.map(((e,t)=>a.ZP.createElement(Ae.Z,{key:e,teactOrderKey:t,className:"chat-item-clickable scroll-item",onClick:()=>Z(e)},a.ZP.createElement(Fe.Z,{userId:e,forceShowSelf:!0})))):a.ZP.createElement(St.Z,{teactOrderKey:0,key:"nothing-found",text:r?"No subscribers found":"No members found"}))))})));var dl=n(2357),ml=n(2267);function ul(e,t){const{isPermanent:n,usage:a=0,date:s}=e,{isPermanent:r,usage:l=0,date:o}=t;return n||r?Number(n)-Number(r):a||l?l-a:o-s}const hl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{invites:a,revokedInvites:s}=e.management.byChatId[n],r=(0,p.Z1)(e,n),l=r&&(0,g.eA)(r);return{exportedInvites:a,revokedExportedInvites:s,chat:r,serverTimeOffset:e.serverTimeOffset,isChannel:l}}))((e=>{let{chatId:t,chat:n,exportedInvites:r,revokedExportedInvites:c,isActive:m,isChannel:Z,serverTimeOffset:v,onClose:P,onScreenSelect:g}=e;const{setEditingExportedInvite:p,showNotification:E,editExportedChatInvite:C,deleteExportedChatInvite:f,deleteRevokedExportedChatInvites:b,setOpenedInviteInfo:I}=(0,s.uC)(),y=(0,h.Z)(),[N,k,S]=(0,ye.Z)(),[w,M,T]=(0,ye.Z)(),[A,L]=(0,a.eJ)(),[$,x,D]=(0,ye.Z)(),[O,U]=(0,a.eJ)(),[G,J]=(0,a.eJ)(),[X,z]=(0,a.eJ)(!1),_=(0,a.I4)((()=>z(!0)),[]);(0,a.d4)((()=>{G||(0,dt.Z)("Invite").then(J)}),[G]),(0,u.ZP)(m,P);const Y=(0,a.Ye)((()=>{if(r)return r.some((e=>{let{expireDate:t}=e;return t&&t-(0,ml.b)(v){H()}),Y?1e3:void 0);const V=null==r?void 0:r.find((e=>{let{isPermanent:t}=e;return t})),q=null!=n&&n.username?`t.me/${n.username}`:null==V?void 0:V.link,K=(0,a.Ye)((()=>{const e=null!=n&&n.username?r:null==r?void 0:r.filter((e=>{let{isPermanent:t}=e;return!t}));return null==e?void 0:e.sort(ul)}),[null==n?void 0:n.username,r]),W=(0,a.I4)((e=>{const{link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l}=e;C({chatId:t,link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l,isRevoked:!0})}),[t,C]),Q=(0,a.I4)((e=>{L(e),M()}),[M]),ee=(0,a.I4)((()=>{A&&(W(A),L(void 0),T())}),[T,W,A]),te=(0,a.I4)((()=>{g(l.u1.EditInvite)}),[g]),ne=(0,a.I4)((()=>{V&&Q(V)}),[Q,V]),ae=(0,a.I4)((()=>{b({chatId:t}),S()}),[t,S,b]),se=(0,a.I4)((e=>{I({chatId:t,invite:e}),g(l.u1.InviteInfo)}),[t,g,I]),re=(0,a.I4)((e=>{f({chatId:t,link:e.link})}),[t,f]),le=(0,a.I4)((e=>{U(e),x()}),[x]),oe=(0,a.I4)((()=>{O&&(re(O),U(void 0),D())}),[D,re,O]),ie=(0,a.I4)((e=>{(0,ss.TE)(e),E({message:y("LinkCopied")})}),[y,E]),ce=(0,a.I4)((()=>{ie(q)}),[ie,q]),de=e=>{const{usage:t=0,usageLimit:n,expireDate:a,isPermanent:s,requested:r,isRevoked:l}=e;let o="";if(o=!l&&n&&t0?y("InviteLink.ExpiresIn",(0,j.D)(y,e)):y("InviteLink.Expired")}else s&&(o+=` • ${y("Permanent")}`);return o},me=e=>{const n=[];return n.push({title:y("Copy"),icon:"copy",handler:()=>ie(e.link)}),e.isPermanent||e.isRevoked||n.push({title:y("Edit"),icon:"edit",handler:()=>(e=>{p({chatId:t,invite:e}),g(l.u1.EditInvite)})(e)}),e.isRevoked?n.push({title:y("DeleteLink"),icon:"delete",handler:()=>le(e),destructive:!0}):n.push({title:y("RevokeButton"),icon:"delete",handler:()=>Q(e),destructive:!0}),n},ue=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(R.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"Actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);return a.ZP.createElement("div",{className:"Management ManageInvites"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},G&&a.ZP.createElement(mt.Z,{id:"inviteDuck",size:o.jV,animationData:G,play:X,onLoad:_})),a.ZP.createElement("p",{className:"text-muted"},y(Z?"PrimaryLinkHelpChannel":"PrimaryLinkHelp"))),q&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",{className:"text-muted"},null!=n&&n.username?y("PublicLink"):y("lng_create_permanent_link_title")),a.ZP.createElement("div",{className:"primary-link"},a.ZP.createElement("input",{className:"form-control primary-link-input",value:q,readOnly:!0,onClick:ce}),a.ZP.createElement(F.Z,{className:"primary-link-more-menu",trigger:ue,positionX:"right"},a.ZP.createElement(B.Z,{icon:"copy",onClick:ce},y("Copy")),!(null!=n&&n.username)&&a.ZP.createElement(B.Z,{icon:"delete",onClick:ne,destructive:!0},y("RevokeButton")))),a.ZP.createElement(R.Z,{onClick:ce},y("CopyLink"))),a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement(R.Z,{isText:!0,key:"create",className:"create-link",onClick:te},y("CreateNewLink")),(!K||!K.length)&&a.ZP.createElement(St.Z,{text:"No links found",key:"nothing"}),null==K?void 0:K.map((e=>a.ZP.createElement(Ae.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>se(e),contextActions:me(e),key:e.link},a.ZP.createElement("span",{className:"title invite-title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},de(e))))),a.ZP.createElement("p",{className:"text-muted hint",key:"links-hint"},y("ManageLinksInfoHelp"))),c&&Boolean(c.length)&&a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement("p",{className:"text-muted",key:"title"},y("RevokedLinks")),a.ZP.createElement(Ae.Z,{icon:"delete",destructive:!0,key:"delete",onClick:k},a.ZP.createElement("span",{className:"title"},y("DeleteAllRevokedLinks"))),null==c?void 0:c.map((e=>a.ZP.createElement(Ae.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>se(e),contextActions:me(e),key:e.link},a.ZP.createElement("span",{className:"title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},de(e))))))),a.ZP.createElement(Xe.Z,{isOpen:N,onClose:S,title:y("DeleteAllRevokedLinks"),text:y("DeleteAllRevokedLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("DeleteAll"),confirmHandler:ae}),a.ZP.createElement(Xe.Z,{isOpen:w,onClose:T,title:y("RevokeLink"),text:y("RevokeAlert"),confirmIsDestructive:!0,confirmLabel:y("RevokeButton"),confirmHandler:ee}),a.ZP.createElement(Xe.Z,{isOpen:$,onClose:D,title:y("DeleteLink"),text:y("DeleteLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("Delete"),confirmHandler:oe}))}))),Zl=[1,10,100],vl={hour:36e5,day:864e5,week:6048e5},Pl=vl.hour,gl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{editingInvite:a}=e.management.byChatId[n];return{editingInvite:a,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,editingInvite:n,isActive:r,serverTimeOffset:o,onClose:i,onScreenSelect:c}=e;const{editExportedChatInvite:d,exportChatInvite:m}=(0,s.uC)(),Z=(0,h.Z)(),[v,P,g]=(0,ye.Z)(),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(""),[b,I]=(0,a.eJ)(Date.now()+Pl),[y,N]=(0,a.eJ)("unlimited"),[k,S]=(0,a.eJ)(10),[w,M]=(0,a.eJ)("0"),[T,A]=(0,a.eJ)(!1);(0,u.ZP)(r,i),(0,Or.Z)((e=>{let[t]=e;if(t!==n)if(n){const{title:e,usageLimit:t,expireDate:a,isRequestNeeded:s}=n;if(e&&f(e),t&&(M(Zl.includes(t)?t.toString():"custom"),S(t)),a){const e=(0,ml.b)(o)+Pl;N("custom"),I(1e3*Math.max(a,e))}s&&E(!0)}else f(""),N("unlimited"),M("0"),I(1e3*(0,ml.b)(o)+Pl),S(10),E(!1)}),[n,o]);const L=(0,a.I4)((e=>{E(e.target.checked)}),[]),F=(0,a.I4)((e=>{f(e.target.value)}),[]),B=(0,a.I4)((e=>{S(Number.parseInt(e.target.value,10))}),[]),$=(0,a.I4)((e=>{I(e.getTime()),g()}),[g]),x=(0,a.I4)((()=>{A(!0);const e="custom"===w?k:w;let a;switch(y){case"custom":a=(0,ml.b)(o)+(b-Date.now())/1e3;break;case"hour":case"day":case"week":a=(0,ml.b)(o)+vl[y]/1e3;break;default:a=void 0}n?d({link:n.link,chatId:t,title:C,isRequestNeeded:p,expireDate:a,usageLimit:e}):m({chatId:t,title:C,isRequestNeeded:p,expireDate:a,usageLimit:e}),c(l.u1.Invites)}),[t,b,k,d,n,m,p,y,w,C,c,o]);return a.ZP.createElement("div",{className:"Management ManageInvite"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(fn.Z,{label:Z("ApproveNewMembers"),subLabel:Z("ApproveNewMembersDescription"),checked:p,onChange:L})),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Te.Z,{className:"link-name",placeholder:Z("LinkNameHint"),value:C,onChange:F}),a.ZP.createElement("p",{className:"text-muted hint"},Z("LinkNameHelp"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},Z("LimitByPeriod")),a.ZP.createElement(at.Z,{name:"expireOptions",options:[{value:"hour",label:Z("Hours",1)},{value:"day",label:Z("Days",1)},{value:"week",label:Z("Weeks",1)},{value:"unlimited",label:Z("NoLimit")},{value:"custom",label:Z("lng_group_invite_expire_custom")}],onChange:N,selected:y}),"custom"===y&&a.ZP.createElement(R.Z,{className:"expire-limit",isText:!0,onClick:P},(0,j.Tu)(Z,b)," ",(0,j.mr)(Z,b)),a.ZP.createElement("p",{className:"text-muted hint"},Z("TimeLimitHelp"))),!p&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},Z("LimitNumberOfUses")),a.ZP.createElement(at.Z,{name:"usageOptions",options:[...Zl.map((e=>({value:e.toString(),label:e}))),{value:"0",label:Z("NoLimit")},{value:"custom",label:Z("lng_group_invite_usage_custom")}],onChange:M,selected:w}),"custom"===w&&a.ZP.createElement("input",{className:"form-control usage-limit",type:"number",min:"1",max:"99999",value:k,onChange:B}),a.ZP.createElement("p",{className:"text-muted hint"},Z("UsesLimitHelp"))),a.ZP.createElement(mn.Z,{isShown:!0,onClick:x,disabled:T,ariaLabel:Z(n?"SaveLink":"CreateLink")},a.ZP.createElement("i",{className:"icon-check"}))),a.ZP.createElement(je,{isOpen:v,isFutureMode:!0,withTimePicker:!0,onClose:g,onSubmit:$,selectedAt:b,submitButtonLabel:Z("Save")}))}))),pl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a);return{enabledReactions:null===(n=s.fullInfo)||void 0===n?void 0:n.enabledReactions,availableReactions:e.availableReactions,chat:s}}))((e=>{let{availableReactions:t,enabledReactions:n,chat:r,isActive:l,onClose:o}=e;const{setChatEnabledReactions:i}=(0,s.uC)(),c=(0,h.Z)(),[d,m]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(!1),[P,g]=(0,a.eJ)(n||[]);(0,u.ZP)(l,o);const p=(0,a.I4)((()=>{r&&(v(!0),i({chatId:r.id,enabledReactions:P}))}),[r,P,i]);(0,a.d4)((()=>{n&&(v(!1),m(!1),g(n))}),[n]);const E=(0,a.I4)((e=>{if(!r||!t)return;const{name:n,checked:a}=e.currentTarget,s="all"===n?a?t.map((e=>e.reaction)):[]:a?[...P,n]:P.filter((e=>e!==n));g(s),m(!0)}),[t,r,P]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"all",checked:!P||P.length>0,label:c("EnableReactions"),onChange:E})),null==t?void 0:t.filter((e=>!e.isInactive)).map((e=>{let{reaction:t,title:n}=e;return a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:t,checked:!P||(null==P?void 0:P.includes(t)),disabled:0===(null==P?void 0:P.length),label:a.ZP.createElement("div",{className:"Reaction"},a.ZP.createElement(it.Z,{reaction:t}),n),onChange:E}))})))),a.ZP.createElement(mn.Z,{isShown:d,onClick:p,ariaLabel:c("Save"),disabled:Z},Z?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),El=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{inviteInfo:a}=e.management.byChatId[n],{invite:s,importers:r,requesters:l}=a||{},o=(0,p.Z1)(e,n);return{invite:s,importers:r,requesters:l,isChannel:o&&(0,g.eA)(o),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,invite:n,importers:r,requesters:l,isChannel:o,isActive:i,serverTimeOffset:c,onClose:d}=e;const{showNotification:m,loadChatInviteImporters:Z,loadChatInviteRequesters:v,openChat:P}=(0,s.uC)(),g=(0,h.Z)(),{usage:p=0,usageLimit:E,link:C,adminId:f}=n||{},b=(null==n?void 0:n.expireDate)&&1e3*(n.expireDate-(0,ml.b)(c))+Date.now(),I=((null==n?void 0:n.expireDate)||0)-(0,ml.b)(c)<0;(0,a.d4)((()=>{C&&(Z({chatId:t,link:C}),v({chatId:t,link:C}))}),[t,C,Z,v]);const y=(0,a.I4)((()=>{(0,ss.TE)(n.link),m({message:g("LinkCopied")})}),[n,g,m]);return(0,u.ZP)(i,d),a.ZP.createElement("div",{className:"Management ManageInviteInfo"},a.ZP.createElement("div",{className:"custom-scroll"},!n&&a.ZP.createElement("p",{className:"text-muted"},g("Loading")),n&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"link-title"},n.title||n.link),a.ZP.createElement("input",{className:"form-control",value:n.link,readOnly:!0,onClick:y}),a.ZP.createElement(R.Z,{className:"copy-link",onClick:y},g("CopyLink")),b&&a.ZP.createElement("p",{className:"text-muted"},I?g("ExpiredLink"):g("LinkExpiresIn",`${(0,j.Tu)(g,b)} ${(0,j.mr)(g,b)}`))),f&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,g("LinkCreatedeBy")),a.ZP.createElement(Ae.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>P({id:f})},a.ZP.createElement(Fe.Z,{userId:f,status:(0,j.ZK)(g,1e3*n.date,!0),forceShowSelf:!0}))),(()=>{if(null!=r&&r.length||null==l||!l.length)return r?a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,r.length?g("PeopleJoined",p):g("NoOneJoined")),a.ZP.createElement("p",{className:"text-muted"},!r.length&&(E?g("PeopleCanJoinViaLinkCount",E-p):g("NoOneJoinedYet")),r.map((e=>a.ZP.createElement(Ae.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>P({id:e.userId})},a.ZP.createElement(Fe.Z,{userId:e.userId,status:(0,j.ZK)(g,1e3*e.date,!0),forceShowSelf:!0})))))):a.ZP.createElement(J.Z,null)})(),(()=>{if(null==n||!n.isRevoked){if(!l&&r)return a.ZP.createElement(J.Z,null);if(null!=l&&l.length)return a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,g(o?"SubscribeRequests":"MemberRequests")),a.ZP.createElement("p",{className:"text-muted"},l.map((e=>a.ZP.createElement(Ae.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>P({id:e.userId})},a.ZP.createElement(Fe.Z,{userId:e.userId,status:(0,j.ZK)(g,1e3*e.date,!0),forceShowSelf:!0}))))))}})())))}))),Cl=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;return{user:(0,p.dy)(e,n),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{userId:t,about:n,date:r,isChannel:l,user:o,serverTimeOffset:i,chatId:c}=e;const{openChat:d,hideChatJoinRequest:m}=(0,s.uC)(),u=(0,X.y)("JoinRequest"),Z=(0,h.Z)(),v=(0,g.Js)(o),P=1e3*(r-(0,ml.b)(i))+Date.now(),p=(0,j.zk)(new Date(P))?(0,j.mr)(Z,P):(0,j.j1)(Z,P,!0,!1,!0),E=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!0})}),[c,m,t]),C=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!1})}),[c,m,t]);return a.ZP.createElement("div",{className:u("&")},a.ZP.createElement("div",{className:u("top")},a.ZP.createElement("div",{className:u("user"),onClick:()=>{d({id:t})}},a.ZP.createElement(ge.Z,{key:t,size:"medium",user:o}),a.ZP.createElement("div",{className:u("user-info")},a.ZP.createElement("div",{className:u("user-name")},v),a.ZP.createElement("div",{className:u("user-subtitle")},n))),a.ZP.createElement("div",{className:u("date")},p)),a.ZP.createElement("div",{className:u("buttons")},a.ZP.createElement(R.Z,{className:u("button"),onClick:E},Z(l?"ChannelAddToChannel":"ChannelAddToGroup")),a.ZP.createElement(R.Z,{className:u("button"),isText:!0,onClick:C},Z("DismissRequest"))))}))),fl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n);return{chat:a,serverTimeOffset:e.serverTimeOffset,isChannel:a&&(0,g.eA)(a)}}))((e=>{var t,n,r;let{chat:l,chatId:i,isActive:c,isChannel:d,onClose:m}=e;const{hideAllChatJoinRequests:Z,loadChatJoinRequests:v}=(0,s.uC)(),[P,p,E]=(0,ye.Z)(),[C,f,b]=(0,ye.Z)(),I=(0,h.Z)(),[y,N]=(0,a.eJ)(),[k,S]=(0,a.eJ)(!1),w=(0,a.I4)((()=>S(!0)),[]);(0,a.d4)((()=>{y||(0,dt.Z)("JoinRequest").then(N)}),[y]),(0,u.ZP)(c,m),(0,a.d4)((()=>{null!=l&&l.joinRequests||(0,g.YC)(i)||v({chatId:i})}),[l,i,v]);const M=(0,a.I4)((()=>{Z({chatId:i,isApproved:!0}),E()}),[Z,i,E]),T=(0,a.I4)((()=>{Z({chatId:i,isApproved:!1}),b()}),[Z,i,b]);return a.ZP.createElement("div",{className:"Management ManageJoinRequests"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},y&&a.ZP.createElement(mt.Z,{id:"joinRequestDucks",size:o.PM,animationData:y,play:k,onLoad:w})),Boolean(null==l||null===(t=l.joinRequests)||void 0===t?void 0:t.length)&&a.ZP.createElement("div",{className:"bulk-actions"},a.ZP.createElement(R.Z,{className:"bulk-action-button",onClick:p},"Accept all"),a.ZP.createElement(R.Z,{className:"bulk-action-button",onClick:f,isText:!0},"Dismiss all"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"custom-scroll",teactFastList:!0},a.ZP.createElement("p",{key:"title"},null!=l&&l.joinRequests?l.joinRequests.length?I("JoinRequests",l.joinRequests.length):I("NoMemberRequests"):I("Loading")),!(null!=l&&l.joinRequests)&&a.ZP.createElement(J.Z,{key:"loading"}),0===(null==l||null===(n=l.joinRequests)||void 0===n?void 0:n.length)&&a.ZP.createElement("p",{className:"text-muted",key:"empty"},I(d?"NoSubscribeRequestsDescription":"NoMemberRequestsDescription")),null==l||null===(r=l.joinRequests)||void 0===r?void 0:r.map((e=>{let{userId:t,about:n,date:s}=e;return a.ZP.createElement(Cl,{userId:t,about:n,date:s,isChannel:d,chatId:i,key:t})})))),a.ZP.createElement(Xe.Z,{isOpen:P,onClose:E,title:"Accept all requests?",text:"Are you sure you want to accept all requests?",confirmHandler:M}),a.ZP.createElement(Xe.Z,{isOpen:C,onClose:b,title:"Reject all requests?",text:"Are you sure you want to reject all requests?",confirmHandler:T}))}))),bl=(0,a.X$)((0,s.c$)((e=>({managementType:(0,p.pP)(e)})))((e=>{let{chatId:t,currentScreen:n,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,managementType:m}=e;switch(n){case l.u1.Initial:switch(m){case"user":return a.ZP.createElement(Hr,{key:t,userId:t,onClose:c,isActive:d});case"group":return a.ZP.createElement(qr,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChatPrivacyType,l.u1.Discussion,l.u1.GroupPermissions,l.u1.ChatAdministrators,l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)});case"channel":return a.ZP.createElement(el,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChannelSubscribers,l.u1.ChatAdministrators,l.u1.Discussion,l.u1.ChatPrivacyType,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)})}break;case l.u1.ChatPrivacyType:return a.ZP.createElement(nl,{chatId:t,isActive:d,onClose:c});case l.u1.Discussion:return a.ZP.createElement(al,{chatId:t,onScreenSelect:o,isActive:d,onClose:c});case l.u1.GroupPermissions:return a.ZP.createElement(jr,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.GroupRemovedUsers:return a.ZP.createElement(Wr,{chatId:t,isActive:d,onClose:c});case l.u1.GroupUserPermissionsCreate:return a.ZP.createElement(cl,{chatId:t,onChatMemberSelect:i,onScreenSelect:o,isActive:d||[l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.GroupUserPermissions:return a.ZP.createElement(sl,{chatId:t,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChatAdministrators:return a.ZP.createElement(rl,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n),onClose:c});case l.u1.GroupRecentActions:return a.ZP.createElement(ll,{chatId:t,isActive:d,onClose:c});case l.u1.ChatNewAdminRights:case l.u1.ChatAdminRights:return a.ZP.createElement(ol,{chatId:t,isNewAdmin:n===l.u1.ChatNewAdminRights,selectedUserId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChannelSubscribers:case l.u1.GroupMembers:return a.ZP.createElement(il,{chatId:t,isActive:d,onClose:c});case l.u1.Invites:return a.ZP.createElement(hl,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.EditInvite:return a.ZP.createElement(gl,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.GroupAddAdmins:return a.ZP.createElement(il,{chatId:t,noAdmins:!0,isActive:d,onClose:c,onScreenSelect:o,onChatMemberSelect:i});case l.u1.Reactions:return a.ZP.createElement(pl,{chatId:t,isActive:d,onClose:c});case l.u1.InviteInfo:return a.ZP.createElement(El,{chatId:t,isActive:d,onClose:c});case l.u1.JoinRequests:return a.ZP.createElement(fl,{chatId:t,isActive:d,onClose:c})}})));var Il=n(9937);const yl=/^4[0-9]{12}(?:[0-9]{1,3})?$/,Nl=/^5[1-5][0-9]{11,14}$/,kl=/^2[2-7][0-9]{11,14}$/;let Sl;!function(e){e[e.Default=0]="Default",e[e.Visa=1]="Visa",e[e.Mastercard=2]="Mastercard"}(Sl||(Sl={}));const wl={[Sl.Default]:"",[Sl.Visa]:"visa",[Sl.Mastercard]:"mastercard"};function Ml(e){return e=e.replace(/\s/g,""),yl.test(e)?Sl.Visa:Nl.test(e)||kl.test(e)?Sl.Mastercard:Sl.Default}const Tl={},Rl=/(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,3})?(\d{1,3})?/,Al="AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234".split("\n").map((e=>({id:e.substr(0,2),flag:e.substr(2,4),code:`+${e.match(/\d+/)[0]}`,name:e.split(/\d+/)[1],phoneFormat:function(e){if(!e)return Rl;const t=e[0];let n;if(!Tl[t]){const e=t.split("").map(Number);n=e.reduce(((e,t,n)=>`${e}(\\d{1,${t}})${n>0?"?":""}`),""),Tl[t]=new RegExp(`${n}${"()?".repeat(5-e.length)}`)}return Tl[t]}(e.match(/\d+$/))}))),Ll={streetLine1:"",streetLine2:"",city:"",state:"",countryIso2:"",postCode:"",fullName:"",email:"",phone:"",shipping:"",cardNumber:"",cardholder:"",expiry:"",cvv:"",billingCountry:"",billingZip:"",saveInfo:!0,saveCredentials:!1,formErrors:{}},Fl=(e,t)=>{switch(t.type){case"changeAddress1":return{...e,streetLine1:t.payload,formErrors:{...e.formErrors,streetLine1:void 0}};case"changeAddress2":return{...e,streetLine2:t.payload,formErrors:{...e.formErrors,streetLine2:void 0}};case"changeCity":return{...e,city:t.payload,formErrors:{...e.formErrors,city:void 0}};case"changeState":return{...e,state:t.payload,formErrors:{...e.formErrors,state:void 0}};case"changeCountry":return{...e,countryIso2:t.payload,billingCountry:Bl(t.payload),formErrors:{...e.formErrors,countryIso2:void 0}};case"changePostCode":return{...e,postCode:t.payload,formErrors:{...e.formErrors,postCode:void 0}};case"changeFullName":return{...e,fullName:t.payload,formErrors:{...e.formErrors,fullName:void 0}};case"changeEmail":return{...e,email:t.payload,formErrors:{...e.formErrors,email:void 0}};case"changePhone":return{...e,phone:t.payload,formErrors:{...e.formErrors,phone:void 0}};case"changeShipping":return{...e,shipping:t.payload};case"changeCardNumber":return{...e,cardNumber:t.payload,formErrors:{...e.formErrors,cardNumber:void 0}};case"changeCardholder":return{...e,cardholder:t.payload,formErrors:{...e.formErrors,cardholder:void 0}};case"changeExpiryDate":return{...e,expiry:t.payload,formErrors:{...e.formErrors,expiry:void 0}};case"changeCvvCode":return{...e,cvv:t.payload,formErrors:{...e.formErrors,cvv:void 0}};case"changeBillingCountry":return{...e,billingCountry:t.payload,formErrors:{...e.formErrors,billingCountry:void 0}};case"changeBillingZip":return{...e,billingZip:t.payload,formErrors:{...e.formErrors,billingZip:void 0}};case"changeSaveInfo":return{...e,saveInfo:t.payload};case"changeSaveCredentials":return{...e,saveCredentials:t.payload};case"updateUserInfo":return t.payload.countryIso2?{...e,...t.payload,billingCountry:Bl(t.payload.countryIso2)}:{...e,...t.payload};case"setFormErrors":return{...e,formErrors:{...e.formErrors,...t.payload}};default:return e}};function Bl(e){const t=Al.find((t=>{let{id:n}=t;return n===e}));return t?t.name:""}function $l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:400;(0,a.d4)((()=>{i.$b||setTimeout((()=>{(0,G.T2)((()=>{e.current&&e.current.focus()}))}),t)}),[e,t])}const xl=(0,a.X$)((e=>{const{id:t,value:n,label:s,hasArrow:r,error:l,ref:o,placeholder:i,onChange:c,children:d}=e,m=l||s,u=(0,X.Z)("input-group",n&&"touched",l&&"error",m&&"with-label",r&&"with-arrow","input-group");return a.ZP.createElement("div",{className:u},a.ZP.createElement("select",{className:"form-control",id:t,value:n||"",onChange:c,placeholder:i||s,ref:o},d),m&&t&&a.ZP.createElement("label",{htmlFor:t},m))})),Dl=(0,a.X$)((e=>{let{state:t,needEmail:n,needPhone:s,needName:r,needAddress:l,dispatch:o}=e;const i=(0,a.sO)(null),c=(0,a.sO)(null),d=(0,a.sO)(null);(0,a.d4)((()=>{d.current&&d.current.value!==t.countryIso2&&(d.current.value=t.countryIso2)}),[t.countryIso2]);const m=(0,h.Z)();$l(i);const u=(0,a.I4)((e=>{o({type:"changeAddress1",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeAddress2",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeCity",payload:e.target.value})}),[o]),P=(0,a.I4)((e=>{o({type:"changeState",payload:e.target.value})}),[o]),g=(0,a.I4)((e=>{o({type:"changeCountry",payload:e.target.value})}),[o]),p=(0,a.I4)((e=>{o({type:"changePostCode",payload:e.target.value})}),[o]),E=(0,a.I4)((e=>{o({type:"changeFullName",payload:e.target.value})}),[o]),C=(0,a.I4)((e=>{o({type:"changeEmail",payload:e.target.value})}),[o]),f=(0,a.I4)((e=>{let{value:t}=e.target;t=`+${t.replace(/\D/g,"")}`,c.current&&(c.current.value=t),o({type:"changePhone",payload:t})}),[o]),b=(0,a.I4)((e=>{o({type:"changeSaveInfo",payload:e.target.value})}),[o]),{formErrors:I}=t;return a.ZP.createElement("div",{className:"ShippingInfo"},a.ZP.createElement("form",null,l?a.ZP.createElement("div",null,a.ZP.createElement("h5",null,m("PaymentShippingAddress")),a.ZP.createElement(Te.Z,{ref:i,label:"Address1 (Street)",onChange:u,value:t.streetLine1,inputMode:"text",error:I.streetLine1}),a.ZP.createElement(Te.Z,{label:"Address2 (Street)",onChange:Z,value:t.streetLine2,inputMode:"text",error:I.streetLine2}),a.ZP.createElement(Te.Z,{label:"City",onChange:v,value:t.city,inputMode:"text",error:I.city}),a.ZP.createElement(Te.Z,{label:"State",onChange:P,value:t.state,inputMode:"text",error:I.state}),a.ZP.createElement(xl,{label:"Country",placeholder:"Country",onChange:g,value:t.countryIso2,hasArrow:Boolean(!0),id:"shipping-country",error:I.countryIso2,ref:d},Al.map((e=>{let{name:t,id:n}=e;return a.ZP.createElement("option",{value:n,className:"county-item"},t)}))),a.ZP.createElement(Te.Z,{label:"Post Code",onChange:p,value:t.postCode,inputMode:"text",error:I.postCode})):void 0,r||n||s?a.ZP.createElement("h5",null,m("PaymentShippingReceiver")):void 0,r&&a.ZP.createElement(Te.Z,{label:"Full name",onChange:E,value:t.fullName,inputMode:"text",error:I.fullName}),n&&a.ZP.createElement(Te.Z,{label:"Email",onChange:C,value:t.email,inputMode:"email",error:I.email}),s&&a.ZP.createElement(Te.Z,{label:"Phone number",onChange:f,value:t.phone,inputMode:"tel",error:I.phone,ref:c}),a.ZP.createElement(fn.Z,{label:m("PaymentShippingSave"),subLabel:m("PaymentShippingSaveInfo"),checked:Boolean(t.saveInfo),onChange:b})))})),Ol=(0,a.X$)((e=>{let{state:t,shippingOptions:n,currency:s,dispatch:r}=e;const l=(0,h.Z)();(0,a.d4)((()=>{n&&!t.shipping&&r({type:"changeShipping",payload:n[0].id})}),[n,t.shipping,r]);const o=(0,a.I4)((e=>{r({type:"changeShipping",payload:e})}),[r]),i=(0,a.Ye)((()=>n.map((e=>{let{id:t,title:n,amount:a}=e;return{label:n,subLabel:(0,Il.x)(a,s,l.code),value:t}}))),[n,s,l.code]);return a.ZP.createElement("div",{className:"Shipping"},a.ZP.createElement("form",null,a.ZP.createElement("p",null,"Select shipping method"),a.ZP.createElement(at.Z,{name:"shipping-options",options:i,onChange:o,selected:t.shipping})))}));function Ul(e,t,n,s){let r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return a.ZP.createElement("div",{className:"price-info-item "+(r?"price-info-item-main":"")},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("div",{className:"value"},(0,Il.x)(n,s,e)))}function Gl(e,t,n){return a.ZP.createElement("div",{className:"checkout-info-item"},a.ZP.createElement("i",{className:e}," "),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("p",{className:"data"},n)))}const Jl=(0,a.X$)((e=>{let{invoiceContent:t,prices:n,shippingPrices:s,checkoutInfo:r,currency:l,totalPrice:o}=e;const i=(0,h.Z)(),{photoUrl:c,title:d,text:m}=t||{},{paymentMethod:u,paymentProvider:Z,shippingAddress:v,name:P,phone:g,shippingMethod:p}=r||{};return a.ZP.createElement("div",{className:"Checkout"},a.ZP.createElement("div",{className:"description has-image"},c&&a.ZP.createElement("img",{src:c,alt:""}),a.ZP.createElement("div",{className:"text"},a.ZP.createElement("h5",null,d),a.ZP.createElement("p",null,m))),a.ZP.createElement("div",{className:"price-info"},n&&n.map((e=>Ul(i.code,e.label,e.amount,l))),s&&s.map((e=>Ul(i.code,e.label,e.amount,l))),void 0!==o&&Ul(i.code,i("Checkout.TotalAmount"),o,l,!0)),a.ZP.createElement("div",{className:"invoice-info"},u&&Gl("icon-card",u,"Payment method"),Z&&Gl("stripe-provider",Z,"Payment provider"),v&&Gl("icon-location",v,"Shipping address"),P&&Gl("icon-user",P,"Name"),g&&Gl("icon-phone",g,"Phone number"),p&&Gl("icon-truck",p,"Shipping method")))})),Xl=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,a.sO)(null),l=(0,a.I4)((e=>{if("Backspace"===e.key&&"/"===t.charAt(t.length-1)){const e=t.slice(0,t.length-1);r.current&&(r.current.value=e)}}),[t]),o=(0,a.I4)((e=>{s(function(e){const t=(e=e.replace(/[^\d]/g,"").slice(0,4)).match(/.{1,2}/g);return null!=t&&t[0]&&Number(t[0])>12&&(t[0]="12"),null!=t&&t[0]&&2===t[0].length&&!t[1]&&(t[1]=""),t?t.join("/"):""}(e.target.value))}),[s]);return a.ZP.createElement(Te.Z,{label:"Expiry date",ref:r,onChange:o,onKeyDown:l,value:t,error:n,inputMode:"numeric",maxLength:5})}));var zl=n(6352),_l=n(5753);const Yl=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,a.sO)(null);$l(r);const[l,o]=(0,a.eJ)(Sl.Default);(0,a.d4)((()=>{const e=Ml(t);o(e)}),[]);const i=(0,a.I4)((e=>{const t=function(e){const t=(e=e.replace(/[^\d]/g,"")).match(/.{1,4}/g);return t?t.join(" "):""}(e.target.value),n=Ml(e.target.value);o(n),s(t),r.current&&(r.current.value=t)}),[s,r]),c=function(e){switch(e){case Sl.Mastercard:return a.ZP.createElement("img",{src:zl,alt:""});case Sl.Visa:return a.ZP.createElement("img",{src:_l,alt:""});default:return}}(l);return a.ZP.createElement("div",{className:"CardInput"},a.ZP.createElement("span",{className:"left-addon"},c),a.ZP.createElement(Te.Z,{ref:r,label:"Card number",onChange:i,value:t,inputMode:"numeric",className:l?"has-left-addon":"",error:n,maxLength:23}))})),Hl=(0,a.X$)((e=>{let{state:t,canSaveCredentials:n,needCardholderName:s,needCountry:r,needZip:l,dispatch:o}=e;const i=(0,a.sO)(null);(0,a.d4)((()=>{i.current&&i.current.value!==t.billingCountry&&(i.current.value=t.billingCountry)}),[t.billingCountry]);const c=(0,a.I4)((e=>{o({type:"changeCardNumber",payload:e})}),[o]),d=(0,a.I4)((e=>{o({type:"changeCardholder",payload:e.target.value.toUpperCase()})}),[o]),m=(0,a.I4)((e=>{o({type:"changeExpiryDate",payload:e})}),[o]),u=(0,a.I4)((e=>{o({type:"changeCvvCode",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeBillingCountry",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeBillingZip",payload:e.target.value})}),[o]),P=(0,a.I4)((e=>{o({type:"changeSaveCredentials",payload:e.target.value})}),[o]),g=(0,h.Z)(),{formErrors:p={}}=t;return a.ZP.createElement("div",{className:"PaymentInfo"},a.ZP.createElement("form",null,a.ZP.createElement("h5",null,g("PaymentCardTitle")),a.ZP.createElement(Yl,{onChange:c,value:t.cardNumber,error:p.cardNumber}),s&&a.ZP.createElement(Te.Z,{label:"Name on card",onChange:d,value:t.cardholder,inputMode:"text",error:p.cardholder}),a.ZP.createElement("section",{className:"inline-inputs"},a.ZP.createElement(Xl,{value:t.expiry,onChange:m,error:p.expiry}),a.ZP.createElement(Te.Z,{label:"CVV code",onChange:u,value:t.cvv,inputMode:"numeric",maxLength:3,error:p.cvv})),r||l?a.ZP.createElement("h5",null,g("PaymentBillingAddress")):void 0,r&&a.ZP.createElement(xl,{label:"Country",placeholder:"Country",onChange:Z,value:t.billingCountry,hasArrow:Boolean(!0),id:"billing-country",error:p.billingCountry,ref:i},Al.map((e=>{let{name:t}=e;return a.ZP.createElement("option",{value:t,className:"county-item"},t)}))),l&&a.ZP.createElement(Te.Z,{label:"Post Code",onChange:v,value:t.billingZip,inputMode:"text",error:p.billingZip}),n&&a.ZP.createElement(fn.Z,{label:g("PaymentCardSavePaymentInformation"),checked:t.saveCredentials,onChange:P})))})),Vl=(0,a.X$)((0,s.c$)((e=>{const{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,invoice:r,invoiceContent:l,nativeProvider:o,nativeParams:i,passwordMissing:c,error:d}=e.payment,m=Boolean(r&&(!o||"stripe"!==o)),{needCardholderName:u,needCountry:h,needZip:Z}=i||{},{nameRequested:v,phoneRequested:P,emailRequested:g,shippingAddressRequested:p,flexible:E,phoneToProvider:C,emailToProvider:f,currency:b,prices:I}=r||{};return{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,nativeProvider:o,passwordMissing:c,nameRequested:v,shippingAddressRequested:p,phoneRequested:P,emailRequested:g,flexible:E,phoneToProvider:C,emailToProvider:f,currency:b,prices:I,isProviderError:m,invoiceContent:l,needCardholderName:u,needCountry:h,needZip:Z,error:d}}))((e=>{let{isOpen:t,onClose:n,step:r,shippingOptions:o,savedInfo:i,canSaveCredentials:c,nameRequested:d,shippingAddressRequested:m,phoneRequested:u,emailRequested:Z,phoneToProvider:v,emailToProvider:P,currency:g,passwordMissing:p,isProviderError:E,invoiceContent:C,nativeProvider:f,prices:b,needCardholderName:I,needCountry:y,needZip:N,error:k}=e;const{validateRequestedInfo:S,sendPaymentForm:w,setPaymentStep:M,sendCredentialsInfo:T,clearPaymentError:A}=(0,s.uC)(),[F,B]=(0,nn.Z)(Fl,Ll),[$,x]=(0,a.eJ)(!1),D=(0,h.Z)();(0,a.d4)((()=>{(r||k)&&x(!1)}),[r,k]),(0,a.d4)((()=>{null!=k&&k.field&&B({type:"setFormErrors",payload:{[k.field]:k.message}})}),[k,B]),(0,a.d4)((()=>{if(i){const{name:e,phone:t,email:n,shippingAddress:a}=i;B({type:"updateUserInfo",payload:{fullName:e,phone:t&&"+"!==t.charAt(0)?`+${t}`:t,email:n,...a||{}}})}}),[i,B]);const O=(0,a.I4)((()=>{A()}),[A]),U=(0,a.Ye)((()=>r!==l.KB.Checkout?0:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;const a=t?jl(t,n):[];let s=0;const r=e.concat(a||[]);return s=r.reduce(((e,t)=>e+t.amount),s),s}(b,o,F.shipping)),[r,F.shipping,b,o]),G=(0,a.Ye)((()=>{if(r===l.KB.Checkout)return function(e,t,n){const a=`${function(e){const t=Ml(e);return wl[t]||""}(e.cardNumber)} *${e.cardNumber.slice(-4)}`,s=e.streetLine1?`${e.streetLine1}, ${e.city}, ${e.countryIso2}`:void 0,{phone:r,fullName:l}=e,o=t?ql(t,e.shipping):void 0;return{paymentMethod:a,paymentProvider:n,shippingAddress:s,name:l,phone:r,shippingMethod:null==o?void 0:o.title}}(F,o,f||"")}),[r,F,o,f]),X=(0,a.I4)((()=>{const{saveInfo:e}=F,t=function(e){const{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l,fullName:o,phone:i,email:c}=e;return{name:o,phone:i,email:c,shippingAddress:{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l}}}(F);S({requestInfo:t,saveInfo:e})}),[S,F]),z=(0,a.I4)((()=>{const e=function(e){const{cardNumber:t,cardholder:n,expiry:a,cvv:s,billingCountry:r,billingZip:l}=e,[o,i]=a.split("/");return{data:{cardNumber:t,cardholder:n,expiryMonth:o,expiryYear:i,cvv:s,country:r,zip:l}}}(F);T({credentials:e})}),[T,F]),_=(0,a.I4)((()=>{w({shippingOptionId:F.shipping,saveCredentials:F.saveCredentials})}),[w,F]),Y=(0,a.I4)((e=>{M({step:e})}),[M]),H=(0,a.I4)((()=>{switch(x(!0),r){case l.KB.ShippingInfo:return X();case l.KB.Shipping:return Y(l.KB.PaymentInfo);case l.KB.PaymentInfo:return z();case l.KB.Checkout:return _();default:return()=>{}}}),[r,X,Y,z,_]),V=(0,a.Ye)((()=>{switch(r){case l.KB.ShippingInfo:return D("PaymentShippingInfo");case l.KB.Shipping:return D("PaymentShippingMethod");case l.KB.PaymentInfo:return D("PaymentCardInfo");case l.KB.Checkout:return D("PaymentCheckout");default:return""}}),[r,D]),q=(0,a.Ye)((()=>r===l.KB.Checkout?D("Checkout.PayPrice",(0,Il.x)(U,g,D.code)):D("Next")),[r,D,g,U]);return E?a.ZP.createElement(Me.Z,{className:"error",isOpen:t,onClose:n},a.ZP.createElement("p",null,"Sorry, Telegram WebZ doesn't support payments with this provider yet. ",a.ZP.createElement("br",null),"Please use one of our mobile apps to do this."),a.ZP.createElement(R.Z,{isText:!0,onClick:n},D("OK"))):a.ZP.createElement(Me.Z,{className:"PaymentModal",isOpen:t,onClose:n},a.ZP.createElement("div",{className:"header",dir:D.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null,V)),void 0!==r?a.ZP.createElement(L.Z,{name:"slide",activeKey:r},(()=>a.ZP.createElement("div",{className:"content custom-scroll"},function(e){switch(e){case l.KB.ShippingInfo:return a.ZP.createElement(Dl,{state:F,dispatch:B,needAddress:Boolean(m),needEmail:Boolean(Z||P),needPhone:Boolean(u||v),needName:Boolean(d)});case l.KB.Shipping:return a.ZP.createElement(Ol,{state:F,dispatch:B,shippingOptions:o||[],currency:g});case l.KB.PaymentInfo:return a.ZP.createElement(Hl,{state:F,dispatch:B,canSaveCredentials:Boolean(!p&&c),needCardholderName:I,needCountry:y,needZip:N});case l.KB.Checkout:return a.ZP.createElement(Jl,{prices:b,shippingPrices:F.shipping&&o?jl(o,F.shipping):void 0,totalPrice:U,invoiceContent:C,checkoutInfo:G,currency:g});default:return}}(r)))):a.ZP.createElement("div",{className:"empty-content"},a.ZP.createElement(J.Z,{color:"gray"})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(R.Z,{type:"submit",onClick:H,disabled:$,isLoading:$},q)),k&&!k.field&&function(){if(k)return a.ZP.createElement(Me.Z,{className:"error",isOpen:Boolean(k),onClose:O},a.ZP.createElement("h4",null,k.description||"Error"),a.ZP.createElement("p",null,k.description||"Error"),a.ZP.createElement(R.Z,{isText:!0,onClick:A},D("OK")))}())})));function ql(e,t){return e.find((e=>{let{id:n}=e;return n===t}))}function jl(e,t){const n=ql(e,t);return null==n?void 0:n.prices}const Kl=(0,a.X$)((0,s.c$)((e=>{const{receipt:t}=e.payment,{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}=t||{};return{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}}))((e=>{let{isOpen:t,onClose:n,prices:s,shippingPrices:r,totalAmount:l,currency:o,info:i,photoUrl:c,text:d,title:m,credentialsTitle:u,shippingMethod:Z}=e;const v=(0,h.Z)(),P=(0,a.Ye)((()=>function(e,t,n){if(!t)return{paymentMethod:e};const{shippingAddress:a}=t,s=null!=a&&a.streetLine1?`${a.streetLine1}, ${a.city}, ${a.countryIso2}`:void 0,{phone:r,name:l}=t;return{paymentMethod:e,paymentProvider:"Stripe",shippingAddress:s,name:l,phone:r,shippingMethod:n}}(u,i,Z)),[i,Z,u]);return a.ZP.createElement(Me.Z,{className:"PaymentModal PaymentModal-receipt",isOpen:t,onClose:n},a.ZP.createElement("div",null,a.ZP.createElement("div",{className:"header",dir:v.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null," ",v("PaymentReceipt")," ")),a.ZP.createElement("div",{className:"receipt-content custom-scroll"},a.ZP.createElement(Jl,{prices:s,shippingPrices:r,totalPrice:l,invoiceContent:{photoUrl:c,text:d,title:m},checkoutInfo:P,currency:o}))))})))},9364:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),s=n(3716),r=n(7361),l=n(6752),o=n(9107),i=n(231);const c=r.wB?550:400,d=(0,a.X$)((e=>{let{isLoading:t=!1,isPasswordVisible:n,error:d,hint:m,placeholder:u="Password",submitLabel:h="Next",clearError:Z,onChangePasswordVisibility:v,onInputChange:P,onSubmit:g}=e;const p=(0,a.sO)(null),E=(0,o.Z)(),[C,f]=(0,a.eJ)(""),[b,I]=(0,a.eJ)(!1);return(0,a.d4)((()=>{r.$b||setTimeout((()=>{p.current.focus()}),c)}),[]),(0,a.d4)((()=>{d&&requestAnimationFrame((()=>{p.current.focus(),p.current.select()}))}),[d]),a.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),t||b&&g(C)},autoComplete:"off"},a.ZP.createElement("div",{className:(0,l.Z)("input-group password-input",C&&"touched",d&&"error"),dir:E.isRtl?"rtl":void 0},a.ZP.createElement("input",{ref:p,className:"form-control",type:n?"text":"password",id:"sign-in-password",value:C||"",autoComplete:"current-password",onChange:function(e){d&&Z();const{target:t}=e;f(t.value),I(t.value.length>=s.lo),P&&P(t.value)},dir:"auto"}),a.ZP.createElement("label",null,d||m||u),a.ZP.createElement("div",{className:"toggle-password",onClick:function(){v(!n)},role:"button",tabIndex:0,title:"Toggle password visibility"},a.ZP.createElement("i",{className:n?"icon-eye":"icon-eye-closed"}))),b&&a.ZP.createElement(i.Z,{type:"submit",ripple:!0,isLoading:t},h))}))},3490:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),s=n(3716),r=n(7361),l=n(7324),o=n(7799);const i=[0,50],c=[0,20],d=[20,0],m=r.wB?s.qp:s.z7,u=(0,a.X$)((e=>{let{isPasswordVisible:t,isBig:n}=e;const[r,u]=(0,a.eJ)(),[h,Z]=(0,a.eJ)(),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1);(0,a.d4)((()=>{r?setTimeout((()=>p(!0)),2e3):(0,l.Z)("MonkeyClose").then(u)}),[r]),(0,a.d4)((()=>{h||(0,l.Z)("MonkeyPeek").then(Z)}),[h]);const E=(0,a.I4)((()=>P(!0)),[]);return a.ZP.createElement("div",{id:"monkey",className:n?"big":""},!v&&a.ZP.createElement("div",{className:"monkey-preview"}),r&&a.ZP.createElement(o.Z,{id:"closeMonkey",size:n?s.K2:m,className:g?"hidden":"shown",animationData:r,playSegment:i,noLoop:!0,onLoad:E}),h&&a.ZP.createElement(o.Z,{id:"peekMonkey",size:n?s.K2:m,className:g?"shown":"hidden",animationData:h,playSegment:t?c:d,noLoop:!0}))}))},710:(e,t,n)=>{n.d(t,{Z:()=>P});var a=n(4050),s=n(6752),r=n(3716),l=n(1394),o=n(9107),i=n(231),c=n(3103),d=n(4288);const m={type:"blob",quality:1,format:"jpeg",circle:!1,size:{width:1024,height:1024}};let u,h,Z;const v=(0,a.X$)((e=>{let{file:t,onChange:s,onClose:v}=e;const[P,g]=(0,a.eJ)(!1);(0,a.d4)((()=>{t&&(P?async function(e){try{const t=document.getElementById("avatar-crop");if(!t)return;const{offsetWidth:n,offsetHeight:a}=t;Z=new u(t,{enableZoom:!0,boundary:{width:n,height:a},viewport:{width:n-16,height:a-16,type:"circle"}});const s=await(0,l.YJ)(e);await Z.bind({url:s})}catch(e){r.eM&&console.error(e)}}(t):async function(){return h||(h=Promise.all([n.e(99),n.e(472)]).then(n.bind(n,3472)),u=(await h).default),h}().then((()=>g(!0))))}),[t,P]);const p=(0,o.Z)();return a.ZP.createElement(c.Z,{isOpen:Boolean(t),onClose:v,title:"Drag to reposition",className:"CropModal",hasCloseButton:!0},P?a.ZP.createElement("div",{id:"avatar-crop"}):a.ZP.createElement(d.Z,null),a.ZP.createElement(i.Z,{className:"confirm-button",round:!0,color:"primary",onClick:async function(){if(!Z)return;const e=await Z.result(m),t="string"==typeof e?e:(0,l.hl)(e,"avatar.jpg");s(t)},ariaLabel:p("CropImage")},a.ZP.createElement("i",{className:"icon-check"})))})),P=(0,a.X$)((e=>{let{title:t="Change your profile picture",disabled:n,currentAvatarBlobUrl:r,onChange:l}=e;const[o,i]=(0,a.eJ)(),[c,d]=(0,a.eJ)(r);(0,a.d4)((()=>{d(r)}),[r]);const m=(0,s.Z)(c&&"filled",n&&"disabled");return a.ZP.createElement("div",{className:"AvatarEditable"},a.ZP.createElement("label",{className:m,role:"button",tabIndex:0,title:t},a.ZP.createElement("input",{type:"file",onChange:function(e){const t=e.target;t&&t.files&&t.files[0]&&(i(t.files[0]),t.value="")},accept:"image/png, image/jpeg"}),a.ZP.createElement("i",{className:"icon-camera-add"}),c&&a.ZP.createElement("img",{src:c,alt:"Avatar"})),a.ZP.createElement(v,{file:o,onClose:function(){i(void 0)},onChange:function(e){i(void 0),l(e),c&&URL.revokeObjectURL(c),d(URL.createObjectURL(e))}}))}))},6352:(e,t,n)=>{e.exports=n.p+"mastercard.4216118edafe23cc2dec..svg"},5753:(e,t,n)=>{e.exports=n.p+"visa.e5a7c336e1deb4b92a63..svg"}}]); +//# sourceMappingURL=126.56949b6fb714b8786c3b.js.map \ No newline at end of file diff --git a/dist/126.56949b6fb714b8786c3b.js.map b/dist/126.56949b6fb714b8786c3b.js.map new file mode 100644 index 000000000..a4a47cf6e --- /dev/null +++ b/dist/126.56949b6fb714b8786c3b.js.map @@ -0,0 +1 @@ +{"version":3,"file":"126.56949b6fb714b8786c3b.js","mappings":"s0CA+MA,SAASA,EAAYC,EAAsDC,GACzE,MAAMC,EAAQC,SAASC,cAAc,OACrCF,EAAMG,UAAUC,IAAI,SAEpB,MAAMC,EAAM,IAAIC,MAchB,GAbAD,EAAIE,WAAY,EAChBF,EAAIG,cAAgBC,EAAAA,EAEE,iBAAXX,EACTO,EAAIK,IAAMZ,EACDA,aAAkBa,iBAC3BN,EAAIK,IAAMZ,EAAOc,OAEjBP,EAAIK,IAAMZ,EAAOY,IAGnBV,EAAMa,YAAYR,GAEdN,IAAWe,EAAAA,GAAAA,eAAmCf,IAAWe,EAAAA,GAAAA,eAAkC,CAC7Fd,EAAMG,UAAUC,IAAI,eAChBL,IAAWe,EAAAA,GAAAA,gBACbd,EAAMG,UAAUC,IAAI,QAEtB,MAAMW,EAAcd,SAASe,cAC3BjB,IAAWe,EAAAA,GAAAA,cACP,kCACA,gCAEFC,GACFf,EAAMa,YAAYE,EAAYE,WAAU,IAI5C,OAAOjB,EAoCT,SAASkB,EAA2BC,EAAwBC,GAC1D,MAAMC,EAAqBpB,SAASe,cAA8B,6CAClE,IAAIM,EAAeH,EAAUI,UAAYH,EAAQI,QAAwB,4BAA6BD,UAKtG,OAJIJ,EAAUM,GAAGC,SAAS,kBACxBJ,GAAgBH,EAAUQ,cAAeJ,UAAYJ,EAAUK,QAAwB,YAAaD,WAG/FD,EAAeD,EAAmBO,WACpCN,EAAeF,EAAQS,aAAeR,EAAmBO,UAAYP,EAAmBQ,aAa/F,SAASC,EAAYC,EAAsBC,GACzCC,OAAOC,OAAOH,EAAQI,MAAOH,GAG/B,SAASI,EAASrC,EAA2BsC,GAC3C,IAAIC,EACAC,EAEJ,OAAQxC,GACN,KAAKe,EAAAA,GAAAA,MACL,KAAKA,EAAAA,GAAAA,eACHwB,EAAqB,0DAAyDD,EAASZ,KACvFc,EAAgB,cAChB,MAEF,KAAKzB,EAAAA,GAAAA,YACHwB,EAAqB,gBAAeD,EAASZ,KAC7Cc,EAAgB,MAChB,MAEF,KAAKzB,EAAAA,GAAAA,aACHwB,EAAqB,gBAAeD,EAASZ,KAC7Cc,EAAgB,MAChB,MAEF,KAAKzB,EAAAA,GAAAA,mBACHwB,EAAoB,6DACpBC,EAAgB,mBAChB,MAEF,KAAKzB,EAAAA,GAAAA,eACHwB,EAAoB,kEACpBC,EAAgB,mBAChB,MAEF,KAAKzB,EAAAA,GAAAA,cACHwB,EAAoB,qEACpBC,EAAgB,mBAChB,MAEF,KAAKzB,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,OACL,QACEwB,EAAqB,qDAAoDD,EAASZ,KAClFc,EAAgB,4DAGpB,MAAMpB,EAAYlB,SAASe,cAA2BsB,GAChDE,EAAWrB,GAAaA,EAAUsB,iBAAsDF,GAE9F,MAAO,CACLpB,UAAAA,EACAuB,QAASF,MAAAA,OAAF,EAAEA,EAAWA,EAASG,OAAS,IAI1C,SAASC,EAAW5C,EAAuBD,GACzC,OAAQA,GACN,KAAKe,EAAAA,GAAAA,MACL,KAAKA,EAAAA,GAAAA,eACL,KAAKA,EAAAA,GAAAA,OACL,KAAKA,EAAAA,GAAAA,gBACHd,EAAMG,UAAUC,IAAI,mBACpB,MAEF,KAAKU,EAAAA,GAAAA,YACL,KAAKA,EAAAA,GAAAA,eACL,KAAKA,EAAAA,GAAAA,cACL,KAAKA,EAAAA,GAAAA,aACFd,EAAM6C,WAA2BV,MAAMW,UAAY,QACpD,MAEF,KAAKhC,EAAAA,GAAAA,mBACHd,EAAMG,UAAUC,IAAI,W,8DC1U1B,MAgKA,GAAe2C,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAqC,IAA5B,QAAEZ,GAA0B,EAInC,MAAO,CACLa,gBAJoBb,IAAUc,EAAAA,EAAAA,IAAoBF,EAAQZ,GAK1De,aAJkBC,EAAAA,EAAAA,IAAyBJ,EAAQZ,MAHrCW,EAhKkC,IAYhD,IAZiD,UACrDM,EADqD,QAErDC,EAFqD,SAGrDC,EAHqD,QAIrDnB,EAJqD,SAKrDoB,EALqD,SAMrDC,EANqD,cAOrDR,EAPqD,YAQrDE,EARqD,mBASrDO,EATqD,UAUrDC,EAVqD,aAWrDC,GACI,EACJ,MAAM,qBACJC,EADI,2BAEJC,IACEC,EAAAA,EAAAA,OAEIC,aAAcC,IAAqBC,EAAAA,EAAAA,GACzC9B,IAAW+B,EAAAA,EAAAA,IAAoB/B,EAAS,aACvCa,GAGGmB,GAAsBC,EAAAA,EAAAA,KAAY,KAClCpB,EACFa,EAA2B,CAAE1B,QAAAA,IAE7ByB,EAAqB,CAAEzB,QAAAA,MAExB,CAAC0B,EAA4BD,EAAsBZ,EAAeb,IAE/DkC,GAAOC,EAAAA,EAAAA,KAEPC,GAA8DC,EAAAA,EAAAA,KAAQ,IACnE,QAAC,UAAEC,EAAF,OAAaC,GAAd,SACL,mBAACC,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNC,UAAWL,EAAS,cAAWM,EAC/BC,QAASR,EACTS,UAAU,gBAEV,wBAAGH,UAAU,iBAGhB,IAmCH,GAAII,EAAAA,GAAyB,CAC3B,GAAIjC,EACF,OAGF,OACE,0BAAK6B,UAAU,6BACb,mBAACK,EAAA,EAAD,CACEC,QAASd,EACTe,UAAU,UAER9B,GACA,mBAAC+B,EAAA,EAAD,CACEC,KAAK,UACLP,QAASvB,GAERW,EAAK,YAGThB,EACC,mBAACkC,EAAA,EAAD,CACEC,KAAMxC,EAAgB,QAAU,WAChCiC,QAASd,GAERnB,EAAiB,GAAEyC,KAAKb,MAAyB,IAAnBZ,qBAA4C,YAG7E,mBAACuB,EAAA,EAAD,CACEC,KAAK,WACLE,KAAMtC,EACNuC,SAAUpC,GAETc,EAAK,uBAIXrB,GAAiB,mBAAC4C,EAAA,EAAD,CAAiBC,SAAU7B,EAAkBa,KAAK,IAAIiB,SAAO,KAKrF,OACE,0BAAKf,UAAU,uBACXvB,IAAaN,GACb,sCACE,mBAACyB,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,oBACNI,UAAWb,EAAK,WAChBY,QAASvB,GAET,wBAAGqB,UAAU,mBArFvB,WACE,IAAI7B,EAIJ,OAAOG,EACL,mBAACsB,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,oBACNI,UAAWb,EAAK,qBAChBY,QAASd,GAERnB,EACC,mBAAC4C,EAAA,EAAD,CAAiBC,SAAU7B,EAAkBa,KAAK,IAAII,QAASd,IAE/D,wBAAGY,UAAU,mBAIjB,mBAACJ,EAAA,EAAD,CACEe,KAAMtC,EACNuC,SAAUpC,EACVqB,OAAK,EACLC,KAAK,UACLC,MAAM,oBACNI,UAAWb,EAAK,sBAEhB,wBAAGU,UAAU,mBA6DdgB,GACD,mBAACpB,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,oBACNI,UAAW5B,EAAW,WAAa,UACnC2B,QAAStB,GAET,wBAAGoB,UAAWzB,EAAW,gBAAkB,kBAE7C,mBAACqB,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,oBACNI,UAAWb,EAAK,SAChBY,QAASxB,GAET,wBAAGsB,UAAU,qB,+DCxLrB,MAyDA,EAhDwC,IAElC,IAFmC,KACvCiB,EAAO,GADgC,SAC5BC,EAD4B,WAClBC,EADkB,QACNjB,GAC7B,EACJ,MAAOkB,EAAaC,IAAkBC,EAAAA,EAAAA,KAAS,IAC/CC,EAAAA,EAAAA,KAAU,KACR,MAAMC,EAAgBxG,SAASe,cAAc,kCAEvC0F,EAAmB,KACvB,MAAMC,EAASF,EAAgBA,EAAcG,aAAe,EAE5DN,EAAeK,EAAe,EAANE,EAAAA,KAI1BH,IAEA,MAAMI,GAAeC,EAAAA,EAAAA,IAASL,EAzBP,KAyB6C,GAIpE,OAFAM,OAAOC,iBAAiB,SAAUH,GAAc,GAEzC,KACLE,OAAOE,oBAAoB,SAAUJ,GAAc,MAEpD,IAQH,MAAMK,GAAaC,EAAAA,EAAAA,GACjB,oBACAhB,GAAc,eACdD,GAAY,aAGd,OACE,0BAAKlB,UAAWkC,EAAYhC,QAb9B,SAAmBkC,GACbnB,GACFmB,EAAEC,oBAYDpB,GACC,0BAAKjB,UAAU,8BAA8BE,QAAUE,EAAAA,QAAoCH,EAAVC,GAC/E,wBAAGF,UAAY,6BAA2BoB,EAAc,YAAc,IAAMkB,IAAI,QAAQrB,M,cClDlG,MAAMsB,OA+EsC,IAA/BvH,SAASwH,kBACX,yBAC2C,IAAlCxH,SAASyH,qBAClB,4BAC8C,IAArCzH,SAAS0H,wBAClB,0BAGF,G,2CCjGT,MAAMC,EAAQ,CAAC,QAAS,KAAM,KAAM,KAAM,KAAM,MAQhD,EANwBC,IACtB,MAAMC,EAAmB,IAAVD,EAAc,EAAIlC,KAAKoC,MAAMpC,KAAKqC,IAAIH,GAASlC,KAAKqC,IAAI,OAEvE,MAAQ,IAAGH,EAAQ,MAAQlC,KAAKoC,MAAMD,IAASG,QAAQ,MAAML,EAAME,MC0B/DrH,EAAa4G,IACjBA,EAAEC,mBA0JJ,GArJwC,IAclC,IAdmC,iBACvCY,EADuC,YAEvCC,EAFuC,SAGvCC,EAHuC,SAIvCC,EAJuC,qBAKvCC,EALuC,SAMvCC,EANuC,sBAOvCC,EAPuC,aAQvCC,EARuC,mBASvCC,EATuC,YAUvCC,EAVuC,UAWvCC,EAXuC,cAYvCC,EAZuC,OAavCC,GACI,EAEJ,MAAMC,GAAYC,EAAAA,EAAAA,IAAuB,MACnCC,GAAYD,EAAAA,EAAAA,KAAgB,IAGlCxC,EAAAA,EAAAA,KAAU,KACR,IAAI0C,EACJ,GAAKN,GAAcL,EAOnB,OAHAW,EAAUlC,OAAOmC,YAAW,KAC1BN,GAAc,KA7Ba,MA+BtB,KACDK,GAASlC,OAAOoC,aAAaF,IAP7BA,GAASlC,OAAOoC,aAAaF,KASlC,CAACX,EAAUK,EAAWC,KAEzBrC,EAAAA,EAAAA,KAAU,KACJoC,EACF3I,SAASoJ,KAAKlJ,UAAUC,IAAI,0BAE5BH,SAASoJ,KAAKlJ,UAAUmJ,OAAO,0BAE1B,KACLrJ,SAASoJ,KAAKlJ,UAAUmJ,OAAO,6BAEhC,CAACV,IAEJ,MAAMrE,GAAOC,EAAAA,EAAAA,KAEP+E,GAAajF,EAAAA,EAAAA,KAAa+C,IAC9B,GAAI4B,EAAUO,SAAWT,EAAUS,QAAS,CAC1C,MAAM,MACJC,EADI,KAEJC,GACEX,EAAUS,QAAQG,wBAChBC,EAAUvC,aAAawC,WAAaxC,EAAEuC,QAAUvC,EAAEyC,cAAc,GAAGF,QACzEd,EAAOnD,KAAKoE,IAAIpE,KAAKqE,IAAI5B,IAAawB,EAAUF,GAAQD,GAAQrB,GAAW,OAE5E,CAACA,EAAUU,IAERmB,GAAkB3F,EAAAA,EAAAA,KAAa+C,IACnC4B,EAAUO,SAAU,EACpBD,EAAWlC,KACV,CAACkC,IAEEW,GAAiB5F,EAAAA,EAAAA,KAAY,KACjC2E,EAAUO,SAAU,IACnB,IAaH,OAXAhD,EAAAA,EAAAA,KAAU,KACR,GAAKuC,EAAUS,SAAYZ,EAC3B,OAAOuB,EAAAA,EAAAA,IAAcpB,EAAUS,QAAS,CACtCY,UAAWH,EACXI,UAAWH,EACX/E,QAAS+E,EACTI,OAAQf,MAET,CAACX,EAAWqB,EAAiBV,EAAYW,IAI1C,0BACEjF,WAAWmC,EAAAA,EAAAA,GAAe,sBAAuBkB,GAAwB,SAAUM,GAAa,UAChGzD,QAAS1E,GA8Cf,SACE0H,EAAqBC,EAAkBF,EAA0Ba,GAEjE,MAAMwB,EAAoBpC,EAAcC,EAAY,IAC9CoC,EAAwC,IAAnBtC,EAE3B,OACE,0BAAKjD,UAAU,kBAAkBwF,IAAK1B,GACpC,0BAAK9D,UAAU,yBACb,0BACEA,UAAU,2BACV9C,MAAQ,UAASqI,GAAsB,OAEzC,0BACEvF,UAAU,yBACV9C,MAAQ,UAASoI,GAAoB,SA3DxCG,CAAevC,EAAaC,EAAUF,EAAkBa,GACzD,mBAAClE,EAAA,EAAD,CACEO,UAAWb,EAAK,iBAChBQ,KAAK,OACL4F,QAAStF,EAAAA,GACTL,MAAM,oBACNC,UAAU,OACVE,QAASwD,GAET,wBAAG1D,UAAWsD,EAAW,aAAe,eAmBhD,SAAoBJ,EAAqBC,GACvC,OACE,0BAAKnD,UAAU,eACX,IAAE2F,EAAAA,EAAAA,IAAoBzC,SAAkByC,EAAAA,EAAAA,IAAoBxC,MApB7DyC,CAAW1C,EAAaC,GACxBF,EAAmB,IAwBF4C,EAxBsB5C,EAwBC6C,EAxBiB1C,EA0B5D,0BAAKpD,UAAU,oBACX,GAAE+F,EAAeD,EAAYD,QAAoBE,EAAeD,OA1BjEvC,GACC,mBAAC3D,EAAA,EAAD,CACEO,UAAU,aACVL,KAAK,OACLC,MAAM,oBACNC,UAAU,aACVE,QAASuD,GAET,wBAAGzD,UAAcwD,EAAe,mBAAqB,sBAe/D,IAAwBqC,EAAuBC,G,mNC9H/C,MAsLA,IAAehI,EAAAA,EAAAA,KApLmB,IAY5B,IAZ6B,IACjCkI,EADiC,MAEjCC,EAFiC,WAGjCC,EAHiC,WAIjCC,EAJiC,aAKjCnH,EALiC,SAMjCoE,EANiC,kBAOjCgD,EAPiC,OAQjCC,EARiC,QASjCC,EATiC,eAUjCC,EAViC,mBAWjCC,GACI,EAEJ,MAAMC,GAAW1C,EAAAA,EAAAA,IAAyB,OACnCT,EAAUoD,IAAepF,EAAAA,EAAAA,KAAUqF,EAAAA,KAAiBC,EAAAA,KACpD1D,EAAa2D,IAAkBvF,EAAAA,EAAAA,IAAS,IAExCkC,EAAcsD,EAAeC,GHtCvB,SAA6BC,EAAgBN,GAC1D,MAAOlD,EAAcyD,IAAmB3F,EAAAA,EAAAA,IAAS4F,QAAQ3E,GAAQvH,SAASuH,KAoE1E,OA9BA4E,EAAAA,EAAAA,KAAgB,KACd,MAAMC,EAAW,KAAQH,EAAgBC,QAAQ3E,GAAQvH,SAASuH,MAC5D8E,EAAgB,KAAQJ,GAAgB,IACxCK,EAAe,KACnBL,GAAgB,GAChBP,GAAY,IAERa,EAAQP,EAAMzC,QAWpB,OATAvJ,SAASgH,iBAAiB,mBAAoBoF,GAAU,GACxDpM,SAASgH,iBAAiB,yBAA0BoF,GAAU,GAC9DpM,SAASgH,iBAAiB,sBAAuBoF,GAAU,GAEvDG,IACFA,EAAMvF,iBAAiB,wBAAyBqF,GAAe,GAC/DE,EAAMvF,iBAAiB,sBAAuBsF,GAAc,IAGvD,KACLtM,SAASiH,oBAAoB,mBAAoBmF,GAAU,GAC3DpM,SAASiH,oBAAoB,yBAA0BmF,GAAU,GACjEpM,SAASiH,oBAAoB,sBAAuBmF,GAAU,GAC1DG,IACFA,EAAMtF,oBAAoB,wBAAyBoF,GAAe,GAClEE,EAAMtF,oBAAoB,sBAAuBqF,GAAc,OAIlE,IAEE/E,GAAyB,QAAjBiF,EAAAA,GAIN,CAAChE,EAtEc,KACfwD,EAAMzC,UAAahC,GAAyB,QAAjBiF,EAAAA,MAI5BR,EAAMzC,QAAQkD,kBAChBT,EAAMzC,QAAQkD,oBACLT,EAAMzC,QAAQmD,wBACvBV,EAAMzC,QAAQmD,0BACLV,EAAMzC,QAAQoD,sBACvBX,EAAMzC,QAAQoD,wBACLX,EAAMzC,QAAQqD,sBACvBZ,EAAMzC,QAAQqD,uBAGhBX,GAAgB,KAGK,KAChBD,EAAMzC,UAIPvJ,SAAS+L,eACX/L,SAAS+L,iBACA/L,SAAS6M,oBAClB7M,SAAS6M,sBACA7M,SAAS8M,uBAClB9M,SAAS8M,yBACA9M,SAAS+M,sBAClB/M,SAAS+M,uBAGXd,GAAgB,MAkCT,EAAC,GGhC4Ce,CAAoBvB,EAAUC,IAE9E,WAAEuB,EAAF,iBAAchF,EAAd,kBAAgCiF,IAAsBC,EAAAA,EAAAA,MAE1DC,aAAcC,EACdC,qBAAsBC,IACpBC,EAAAA,EAAAA,IAAmBP,OAAYhI,OAAWA,EAAW,SAEvDmI,aAAcK,EACdH,qBAAsBI,IACpBF,EAAAA,EAAAA,GAAkB5B,EAAAA,KAAWtD,IAAa+E,OAAqBpI,OAAWA,EAAW,SAEzFsB,EAAAA,EAAAA,KAAU,KACJ8E,IAAWD,EACbK,EAASlC,QAASoE,QACT3C,IAAQW,EAAAA,KAIjBiC,EAAAA,EAAAA,GAASnC,EAASlC,WAEnB,CAAC8B,EAAQD,EAAmBJ,KAE/BzE,EAAAA,EAAAA,KAAU,KACJkF,EAASlC,QAASrB,cAAgBuD,EAASlC,QAASpB,UACtD0D,EAAe,GACfH,GAAY,IAEZG,EAAeJ,EAASlC,QAASrB,eAElC,CAACA,IAEJ,MAAM2F,GAAkBxJ,EAAAA,EAAAA,KAAa+C,IACnCA,EAAEC,kBACEiB,GACFmD,EAASlC,QAASoE,QAClBjC,GAAY,MAEZkC,EAAAA,EAAAA,GAASnC,EAASlC,SAClBmC,GAAY,MAEb,CAACpD,KAEJwF,EAAAA,EAAAA,GAAgBrC,EAAU,IAE1B,MAAMsC,GAAkB1J,EAAAA,EAAAA,KAAY,KAClCkH,GAAe,KACd,CAACA,IAEEyC,GAAiB3J,EAAAA,EAAAA,KAAa+C,IAC9BA,EAAE6G,SAAWxC,EAASlC,SACxBgC,GAAe,KAEhB,CAACA,IAEE2C,GAAmB7J,EAAAA,EAAAA,KAAa+C,IACpCyE,EAAezE,EAAE+G,cAAcjG,eAC9B,IAEGkG,GAAc/J,EAAAA,EAAAA,KAAY,KAC9BwH,EAAe,GACfH,GAAY,GACZH,GAAe,KACd,CAACA,IAEE8C,GAAyBhK,EAAAA,EAAAA,KAAY,KACrCmE,GAAgBuD,EAClBA,KACUvD,GAAgBsD,GAC1BA,MAED,CAACC,EAAgBvD,EAAcsD,IAE5BxC,GAAajF,EAAAA,EAAAA,KAAaiK,IAC9B7C,EAASlC,QAASrB,YAAcoG,IAC/B,KAEH/H,EAAAA,EAAAA,KAAU,KACR,MAAMgI,EAA4BnH,IAClB,UAAVA,EAAEoH,KAA6B,MAAVpH,EAAEoH,MACzBpH,EAAEqH,iBACFZ,EAAgBzG,KAMpB,OAFApH,SAASgH,iBAAiB,UAAWuH,GAA0B,GAExD,KACLvO,SAASiH,oBAAoB,UAAWsH,GAA0B,MAEnE,CAACV,IAEJ,MAAMa,EAAevD,GAAe,UAASA,EAAW3B,oBAAoB2B,EAAWzE,WACjFiI,EAAc,yBAAwBzD,KAE5C,OACE,0BACElG,UAAU,cACV4J,YAAc3D,GAAUU,EAAAA,QAAiC1G,EAAlB8I,EACvCc,WAAa5D,GAAUU,EAAAA,QAAgC1G,EAAjB+I,GAEtC,0BACE9L,MAAOwM,GAGP,+BACElE,IAAKiB,EACLqD,SAAUnD,EAAAA,GACVoD,aAAW,EACXC,KAAM/D,EAENgE,MAAOhE,EACPzJ,GAAG,qBACHU,MAAOyM,EACPO,OAAQtD,EAAAA,GAAS,IAAMF,GAAY,QAAQzG,EAC3CkK,QAASf,EACTlJ,QAAUE,EAAAA,QAA4CH,EAAlB4I,EACpCuB,cAAgBzD,EAAAA,QAAwC1G,EAAzBoJ,GAE3BnB,EAdN,CAeEmC,aAAcnB,IAEblD,GAAO,6BAAQvK,IAAKuK,MAGxByC,GACC,mBAAC7I,EAAA,EAAD,CAAQC,OAAK,EAACG,UAAY,eAAc0I,IAAwBxI,QAAS2I,GACvE,wBAAG7I,UAAU,eAGhBqI,GACC,0BAAKrI,UAAW,CAAC,oBAAqBuI,GAAmB+B,KAAK,OAC1DrC,GAAc,0BAAKjI,UAAU,aAAf,gBAChB,mBAACa,EAAA,EAAD,CACEf,KAAK,KACLgB,SAAUmH,EAAa,EAAIjJ,EAC3BuL,QAAM,EACNrK,QAASoG,MAIbL,IAAUoC,GACV,mBAAC,GAAD,CACE/E,SAAUA,EACVL,iBAAkBA,EAClBC,YAAaA,EACbK,sBAAuB2D,QAAQJ,GAC/BtD,aAAcA,EACdJ,SAAUA,EACVD,SAAUsD,EAASlC,SAAUkC,EAASlC,QAAQpB,UAAgB,EAC9DQ,UAAW6C,EACX5C,cAAe2C,EACflD,qBAAsB8C,GAAcA,EAAW3B,MA5KpB,IA6K3BX,OAAQS,EACRb,mBAAoB4F,EACpB3F,YAAamF,QCsBvB,IAAe/K,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAQwM,KACP,MAAM,OACJC,EADI,SAEJC,EAFI,UAGJC,EAHI,cAIJC,EAJI,kBAKJC,EALI,OAMJ/P,GACE0P,EAEJ,GAAI1P,IAAWe,EAAAA,GAAAA,aAAgC,CAC7C,IAAM4O,IAAUE,EACd,MAAO,GAGT,MAAMvN,GAAU0N,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,GAClD,OAAKvN,EAIE,CACLqN,OAAAA,EACAE,UAAAA,EACAI,SAAU3N,EAAQ2N,SAClBjQ,OAAAA,EACAsC,QAAAA,EACAe,aAAaC,EAAAA,EAAAA,IAAyBJ,EAAQZ,IATvC,GAaX,GAAIwN,EAGF,MAAO,CACLD,WAAY,EACZI,SAAUH,EACVI,aALaC,EAAAA,EAAAA,IAAWjN,EAAQ4M,KAAkBM,EAAAA,EAAAA,IAAWlN,EAAQ4M,GAMrEC,kBAAmBA,GAAqB,EACxC/P,OAAAA,GAIJ,KAAM2P,GAAUC,GAAYC,GAC1B,MAAO,GAGT,IAAIvN,EAOJ,OALEA,EADEtC,GAAU,CAACe,EAAAA,GAAAA,eAAkCA,EAAAA,GAAAA,iBAAmCY,SAAS3B,IACjFqQ,EAAAA,EAAAA,IAAuBnN,EAAQyM,EAAQE,IAEvCG,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,GAGzCvN,EAIE,CACLqN,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAI,SAAU3N,EAAQ2N,SAClBjQ,OAAAA,EACAsC,QAAAA,EACAe,aAAaC,EAAAA,EAAAA,IAAyBJ,EAAQZ,IAVvC,KAvDOW,EA7JmCqN,IACrD,MAAM,UACJT,EADI,SAEJU,EAFI,YAGJL,EAHI,OAIJP,EAJI,QAKJrN,EALI,kBAMJyN,EANI,OAOJ/P,EAPI,eAQJwQ,EARI,QASJhF,EATI,cAUJiF,EAVI,eAWJC,EAXI,YAYJrN,EAZI,kBAaJsN,GACEL,EAEEM,EAAQtO,GAAUuO,EAAAA,EAAAA,IAAgBvO,QAAW6C,EAC7CsH,EAAQnK,GAAUwO,EAAAA,EAAAA,IAAgBxO,QAAW6C,EAC7C4L,EAAezO,GAAU0O,EAAAA,EAAAA,IAAuB1O,QAAW6C,EAC3D8L,EAAe3O,GAAU4O,EAAAA,EAAAA,IAAuB5O,QAAW6C,EAC3DgM,IAAkB7O,IAAU8O,EAAAA,EAAAA,IAAuB9O,GACnD+O,IAAkB/O,IAAUgP,EAAAA,EAAAA,IAAuBhP,GACnDkB,EAAU4I,QAAQK,GAASwE,GAAgBI,GAC3CE,EAAUnF,SAAS5I,IAAYoN,GAASG,GAAgBI,KACxD,MAAEhG,GAAUsB,GAASwE,GAAgB,GAErCpM,EAASuH,QAAQ8D,GAAeL,GAChClM,EAAWyI,QAAQ8D,GAEnBsB,EAAoBxR,IAAWe,EAAAA,GAAAA,YAC/B0Q,EAAezR,IAAWe,EAAAA,GAAAA,aAE1B2Q,EAAsC,IAAnBlB,EAGzB,SAASmB,EAAaC,GACpB,GAAIjO,QAAkCwB,IAAtB4K,EAAiC,CAC/C,MAAM,OAAE8B,GAAW3B,EACnB,OAAO2B,GAAUA,EAAO9B,GACnB,QAAO8B,EAAO9B,GAAmBrO,aAClCoQ,EAAAA,EAAAA,IAAkB5B,EAAc0B,EAAS,MAAQ,UAGvD,OAAOtP,IAAW+B,EAAAA,EAAAA,IAAoB/B,EAASsP,EAAS,aAAe,iBAGzE,MAAMG,GAAmBC,EAAAA,EAAAA,GACvB1P,IAAYkP,GAAqBC,KAAiBpN,EAAAA,EAAAA,IAAoB/B,EAAS,kBAC/E6C,EACA8M,EAAAA,GAAAA,aACA9M,EACAuM,GAtDuB,KAwDnBQ,EAAmBP,IACnBQ,GAAiBH,EAAAA,EAAAA,GACrBE,OACA/M,EACA8M,EAAAA,GAAAA,aACA9M,EACAuM,GA9DuB,MAiEvBnO,UAAW6O,EADP,aAEJlO,IACEE,EAAAA,EAAAA,GACFuN,GAAa,QACbxM,EACA7C,IAAW+P,EAAAA,EAAAA,IAAsB/P,EAAS,mBAC1C6C,EACAuM,GAxEuB,KA2EnBjG,GAAiBlH,EAAAA,EAAAA,KAAasE,IAClC8H,MAAAA,GAAAA,GAAqB9H,KACpB,CAAC8H,IAEE2B,EAAgB1B,GAASnE,GAAUmE,GAASnE,GAAQ8F,aAAUpN,EACpE,IAAIqN,GAAkBhP,IAAY8O,GAAgBF,IAAsBD,GAAkBJ,EAC1F,MAAMU,GAAeC,EAAAA,EAAAA,IAAaF,GAAiBlQ,IAAWqQ,EAAAA,EAAAA,IAA4BrQ,IACrFkQ,GAAiBxS,IAAWe,EAAAA,GAAAA,eAC/ByR,EAAgBC,GAGlB,MAAMG,EAAYtQ,GAAUuQ,EAAAA,EAAAA,IAAmBvQ,QAAW6C,EAE1D,IAAI2N,EAaJ,GAZIxQ,EACE6O,GAAmBE,EACrByB,GAAaC,EAAAA,EAAAA,IAAmBzQ,GAAU0Q,UACjCpC,GAASG,EAClB+B,GAAaG,EAAAA,EAAAA,IAAwBrC,GAASG,IACrCtE,GAASwE,KAClB6B,GAAaI,EAAAA,EAAAA,IAAoBzG,GAASwE,IAG5C6B,EAAaK,EAAAA,GAGXxP,EACF,OACE,0BAAK+K,IAAKiB,EAAQzK,UAAU,sBACzBkO,GACChB,GAAoBD,GACpBkB,EAAAA,EAAAA,IAA+BF,EAAAA,IAAwB,IACtD7N,EAAAA,KAA4BjC,IAMrC,IAAKf,EAAS,OACd,MAAMgR,GAAYC,EAAAA,EAAAA,GAAkBjR,GAC9BkR,GAAYpH,QAAQkH,GAE1B,OACE,0BACEpO,UAAY,uBAAqBsO,GAAY,aAAe,KAE3DnQ,GAAe,0BAAKoQ,cAAe/S,EAAAA,EAAWwE,UAAU,cACxDqM,GAAW6B,GACVd,GAAgBF,GAAoBD,GAAkBJ,EACtDzP,IAAW+Q,EAAAA,EAAAA,IAA+BP,EAAaU,KACtDlO,EAAAA,KAA4BjC,GAE9BG,KAAc+M,GAAY1E,EAAAA,GA0HjC,SAA4B0G,EAAkBmB,EAA2BC,GACvE,MAAM/E,EAAe8E,GAAc,UAASA,EAAUhK,oBAAoBgK,EAAU9M,WAC9EiI,EAAc,yBAAwB0D,KAC5C,OAAOA,EAEH,0BACErN,UAAU,eAEV,0BACE9C,MAAOwM,GAGP,4BACExM,MAAOyM,EACPrO,UAAW4L,QAAQuH,OAMzB,0BACEzO,UAAU,kBACV9C,MAAOsR,EAAa,UAASA,EAAUhK,UAAY,IAEnD,mBAACkK,EAAA,EAAD,CAAS3O,MAAM,WAlJ0B4O,CACzCrB,EACAlQ,IAAW+Q,EAAAA,EAAAA,IAA+BP,EAAaU,IAAW,IACjElO,EAAAA,KAA4BjC,GAE7B,mBAAC,GAAD,CACEqL,IAAKmB,EACL3E,IAAKoH,GAAgBF,EACrBjH,MAAOA,EACPC,WAAYoH,EACZnH,WAAY/I,IAAW+Q,EAAAA,EAAAA,IAA+BP,EAAaU,IAAW,GAC9EtP,aAAcA,EACdoE,SAAUsK,EACVtH,kBAAmBzG,GAAU0L,EAC7B7E,oBAAqBgF,EACrBjF,eAAgBA,EAChBF,QAASgF,EACT/E,QAASA,KAGZ8H,GACC,mBAAC,EAAD,CACEnN,KAAMmN,EACNlO,QAASqL,EACTrK,SAAUsK,GAAkB7E,EAAAA,GAC5BxF,WAAY7C,IAAY2H,SA6ElC,SAASiI,GAAYb,EAAkBmB,EAA2BC,GAChE,OAAOpB,EAEH,0BACE5R,IAAK4R,EACLuB,IAAI,GACJ1R,MAAOsR,EAAa,UAASA,EAAUhK,UAAY,GACnDlJ,UAAW4L,QAAQuH,KAIrB,0BACEzO,UAAU,kBACV9C,MAAOsR,EAAa,UAASA,EAAUhK,UAAY,IAEnD,mBAACkK,EAAA,EAAD,CAAS3O,MAAM,W,mNChRvB,MAGM8O,GAAqB,IAS3B,IAAIC,G,IAQCC,I,SAAAA,GAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,SAAAA,GAAAA,W,CAAAA,KAAAA,GAAAA,KAKL,MAqeA,IAAejR,EAAAA,EAAAA,KAreyB,IAWlC,IAXmC,UACvC6M,EADuC,aAEvCqE,EAFuC,cAGvCC,EAHuC,QAIvC3Q,EAJuC,MAKvC2H,EALuC,QAMvCoG,EANuC,OAOvC1M,EAPuC,SAQvC0L,EARuC,UASvCiD,KACGY,GACC,EAEJ,MAAMC,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCqL,GAAiBrL,EAAAA,EAAAA,IAAuB,MACxCsL,GAAetL,EAAAA,EAAAA,IAAkB,CAAEuL,EAAG,EAAGC,EAAG,EAAGC,MAAO,IACtDC,GAAoB1L,EAAAA,EAAAA,SAAmC9D,GACvDyP,GAAc3L,EAAAA,EAAAA,KAAO,IACpB4L,EAAiBC,IAAsBtO,EAAAA,EAAAA,IAA6BqJ,GACrEkF,GAAcC,EAAAA,EAAAA,MACbtE,EAAgBC,IAAqBnK,EAAAA,EAAAA,KAAkB,IAExD,SACJ/C,EADI,QAEJ+H,GACE4I,EAEEa,GAAe1Q,EAAAA,EAAAA,KAAa2Q,IAChCX,EAAa9K,QAAUyL,EACvBH,MACC,CAACA,IAEEI,GAAc5Q,EAAAA,EAAAA,KAAa2Q,IAC/BN,EAAYnL,QAAUyL,EACtBH,MACC,CAACA,IAEEK,GAAqBC,EAAAA,EAAAA,GA3DJ,KA2DkC,GACnDC,GAAyBD,EAAAA,EAAAA,GA3DV,KA2DsC,GACrDE,GAAiBF,EAAAA,EAAAA,GA3DD,KA2D8B,GAE9CG,GAA+BjR,EAAAA,EAAAA,KAAa+C,IAChD,IAAKuE,EAAAA,GAAc,OACnB,MAAM4J,EAAWxO,OAAOyO,YAAcpO,EAAEqO,MA1DlB,IA2DjBF,GAAYnO,EAAEsO,MA5DG,KA6DjBH,GAAYnO,EAAEsO,MAAQ3O,OAAO4O,WA7DZ,IA8DtBlF,GAAmBD,KAClB,CAACA,IAsYJ,GCrfF,SAAoBoF,EAAsBC,GACxC,MAAMC,GAAgB/M,EAAAA,EAAAA,IAAO6M,IAE7BzJ,EAAAA,EAAAA,KAAgB,KACd2J,EAAcvM,QAAUqM,IACvB,CAACA,KAEJrP,EAAAA,EAAAA,KAAU,KACR,GAAqB,iBAAVsP,EACT,OAEF,MAAMrU,EAAK0H,YAAW,IAAM4M,EAAcvM,WAAWsM,GACrD,MAAO,IAAM1M,aAAa3H,KACzB,CAACqU,IDoGJE,EAAW,IAAMtF,GAAkB,IAAQoD,MAE3CtN,EAAAA,EAAAA,KAAU,KACR,IAAKoF,EAAAA,KAAiBwI,EAAa5K,SAAWhG,IAAaoR,EACzD,OAEF,IAAIqB,EAAgB,CAAE1B,EAAG,EAAGC,EAAG,EAAGC,MAAO,GACzC,MAAMyB,EAAiB,CACrB3B,EAAG,EACHC,EAAG,GAEC2B,EAAiB,CACrB5B,EAAG,EACHC,EAAG,GAEC4B,EAAW,CACf7B,EAAG,EACHC,EAAG,GAEL,IACI6B,EACAC,EAFAC,EAAkBC,KAAKC,MAG3B,MAAMC,GAAqBC,EAAAA,EAAAA,KAAS,KAClCJ,EAAkBC,KAAKC,QACtB,KAAK,GAAO,GAETG,EAAevP,IACnB,GAAmC,IAA/BiN,EAAa9K,QAAQiL,MAAa,OAAO,EAC7C,IAAIoC,EAAY,EAChB,GAAI7P,OAAOyO,YAAcpO,EAAEqO,MA7FP,GA8FlB,OAAO,EAELrO,EAAEsO,MAjGc,GAkGlBkB,GAAa,EACJxP,EAAEsO,MAAQ3O,OAAO4O,WAnGR,KAoGlBiB,EAAY,GAEd,MAAMC,EAAM7C,EAAaW,EAAiBiC,GAC1C,GAAIC,EAAK,CACP,MAAMC,GAAU/P,OAAO4O,WAhHZ,IAgHuCiB,EAClDvC,EAAa9K,QAAQ+K,GAAKwC,EAC1BpC,EAAYnL,SAAU,EACtBqL,EAAmBiC,GACnB3B,GAAmB,IAAMjB,EAAc4C,KACvCxB,GAAe,KACbJ,GAAY,MAEde,EAAgB,CAAE1B,EAAG,EAAGC,EAAG,EAAGC,MAAO,GACrCV,IAAkBiD,EAAAA,EAAAA,IAAc,CAC9BC,KAAM3C,EAAa9K,QAAQ+K,EAC3B2C,GAAI,EACJ9O,SAAU0L,GACVqD,OAAQC,EAAAA,GAAAA,aACRC,SAAWpC,GAAUD,EAAa,CAChCR,EAAG,EACHD,EAAGU,EACHR,MAAO,MAIb,OAAqB,IAAdoC,GAGT,OAAO1M,EAAAA,EAAAA,IAAciK,EAAa5K,QAAS,CACzC8N,cAAc,EACdC,wBAAyB,2CACzBnN,UAAW,KAET,GADAmM,EAAkBC,KAAKC,OACnBe,EAAAA,EAAAA,GAAqBlD,EAAa9K,QAAS,CAAE+K,EAAG,EAAGC,EAAG,EAAGC,MAAO,IAAM,CACxE,IAAKJ,EAAe7K,QAAS,OAE7B,GADA8M,EAAUjC,EAAe7K,QAAQxI,cAAc,eAC1CsV,EAAS,OAEdD,EAAqBC,EAAQ3M,0BAGjCW,OAAQ,CAACmN,EAAOC,EAAR,KAGF,IAHwB,YAC5BC,EAD4B,YAE5BC,GACI,EAEJ,GAAI/L,EAAAA,GAAQ,CACV,MAAM,MAAE8J,GAAW+B,EAAgCG,QAAQ,GAC3D,GAAIlC,GAASmC,EAAAA,IAA6BnC,GAAS3O,OAAO4O,WAAakC,EAAAA,GACrE,OAGA/D,KACFA,KACAA,QAAkB7O,GAEpBkR,EAAS7B,EAAI2B,EAAe3B,EAAIoD,EAChCvB,EAAS5B,EAAI0B,EAAe1B,EAAIoD,EAChC1B,EAAe3B,EAAIoD,EACnBzB,EAAe1B,EAAIoD,EACnB,MAAMG,EAAapS,KAAKqS,IAAIL,GACtBM,EAAatS,KAAKqS,IAAIJ,IACtB,MACJnD,EADI,EAEJF,EAFI,EAGJC,GACEF,EAAa9K,QACX0O,EAAI,GAOV,GAHAxB,IAGc,IAAVjC,EAUJ,OAAIC,EAAkBlL,UAAYwK,GAAemE,WAG3CzD,EAAkBlL,UAAYwK,GAAeoE,YAC5CzS,KAAKqS,IAAIzD,GAAK2D,GAAMH,EAAaG,GAAKD,EAAaC,IACtDxD,EAAkBlL,QAAUwK,GAAeoE,WAC3CzD,EAAYnL,SAAU,OACtBwL,EAAa,CACXT,EAAGoD,EACHnD,EAAG,EACHC,MAAAA,WAMFC,EAAkBlL,UAAYwK,GAAemE,UAC5CxS,KAAKqS,IAAIxD,GAAK0D,GAAMD,EAAaC,GAAKH,EAAaG,KACtDxD,EAAkBlL,QAAUwK,GAAemE,SAC3CnD,EAAa,CACXT,EAAG,EACHC,EAAGoD,EACHnD,MAAAA,MA/BE,YAAagD,GAAkC,IAAzBA,EAAMI,QAAQlV,QACtCqS,EAAa,CACXT,EAAG0B,EAAc1B,EAAIoD,EACrBnD,EAAGyB,EAAczB,EAAIoD,EACrBnD,MAAAA,KA+BR4D,OAAQ,CAAChR,EAAD,KAQF,IARM,WACViR,EADU,eAEVC,EAFU,eAGVC,EAHU,YAIVb,EAJU,YAKVC,EALU,eAMVa,EANU,eAOVC,GACI,EAEJ,MAAMjE,EAAQ9O,KAAKqE,IAAI2O,GAAchT,KAAKoE,IAAIkM,EAAcxB,MAAQ6D,EA9N3D,KA+NHM,EAAcnE,EAAQwB,EAAcxB,MAKpCoE,EAJUlT,KAAKqS,IAAIrS,KAAKqE,IAAIiM,EAAc1B,EAAG,IAInBgE,EAC1BO,EAJUnT,KAAKqS,IAAIrS,KAAKqE,IAAIiM,EAAczB,EAAG,IAInBgE,EAGhCrC,EAAe5B,EAAIkE,EACnBtC,EAAe3B,EAAIkE,EAGnB,MAAMK,EAAgBF,EAAgBD,EAAcC,EAC9CG,EAAgBF,EAAgBF,EAAcE,EAEpD9D,EAAa,CACXT,EAAG0B,EAAc1B,EAAIwE,EAAepB,EACpCnD,EAAGyB,EAAczB,EAAIwE,EAAepB,EACpCnD,MAAAA,KAGJtP,QAAQkC,GACFuP,EAAYvP,KACdA,EAAEqH,iBACFrH,EAAEC,oBAGN+H,cAAchI,EAAD,GAGV,IAHc,QACf4R,EADe,QAEfC,GACC,EACD,GAAItC,EAAYvP,GAGd,OAFAA,EAAEqH,sBACFrH,EAAEC,kBAIJ,MAAMyR,EAAgBE,EApQN,EAoQkCA,EAC5CD,EAAgBE,EArQN,EAqQkCA,GAC5C,MACJzE,EADI,EAEJF,EAFI,EAGJC,GACEF,EAAa9K,QACjB,GAAc,IAAViL,EAAa,CACf,GAAU,IAANF,GAAiB,IAANC,EAAS,OACxByB,EAAgB,CACd1B,EAAGwE,EACHvE,EAAGwE,EACHvE,MAhRY,QAmRdwB,EAAgB,CACd1B,EAAG,EACHC,EAAG,EACHC,MAAO,GAGX,OAAOuC,EAAAA,EAAAA,IAAc,CACnBC,KAAM,CAAC1C,EAAGC,EAAGC,GACbyC,GAAI,CAACjB,EAAc1B,EAAG0B,EAAczB,EAAGyB,EAAcxB,OACrDrM,SAAU0L,GACVqD,OAAQC,EAAAA,GAAAA,aACRC,SAAWpC,GAAUD,EAAa,CAChCT,EAAGU,EAAM,GACTT,EAAGS,EAAM,GACTR,MAAOQ,EAAM,QAInB5K,UAAW,KACT,MAAM8O,EAAOxT,KAAKqS,IAAI1D,EAAa9K,QAAQ+K,GACrC6E,EAAOzT,KAAKqS,IAAI1D,EAAa9K,QAAQgL,IACrC,MACJC,EADI,EAEJF,EAFI,EAGJC,GACEF,EAAa9K,QAUjB,GARA6L,GAAuB,KACrBX,EAAkBlL,aAAUtE,KAE9BoQ,GAAe,KACbJ,GAAY,MAIVT,EAAQ,EAEV,OADAwB,EAAgB,CAAE1B,EAAG,EAAGC,EAAG,EAAGC,MAAO,IAC9BuC,EAAAA,EAAAA,IAAc,CACnBC,KAAM,CAAC1C,EAAGC,EAAGC,GACbyC,GAAI,CAAC,EAAG,EAAG,GACX9O,SAAU0L,GACVqD,OAAQC,EAAAA,GAAAA,aACRC,SAAWpC,GAAUD,EAAa,CAChCT,EAAGU,EAAM,GACTT,EAAGS,EAAM,GACTR,MAAOQ,EAAM,OAInB,GAAIR,EAAQ,EAAG,CACb,IAAK6B,IAAYD,EAMf,YALAJ,EAAgB,CACd1B,EAAAA,EACAC,EAAAA,EACAC,MAAAA,IAKJ,MAAM4E,EAAa/C,EAAQ3M,wBACrB2P,EAAK3T,KAAKqE,IAAIyK,EAjVb,GAkVDmE,EAAcU,EAAK7E,EAIzB,IAAI8E,EAAKhF,EAAIqE,GAAezC,EAAe5B,EAAIqE,EAAczC,EAAe5B,GACxEiF,EAAKhF,EAAIoE,GAAezC,EAAe3B,EAAIoE,EAAczC,EAAe3B,GAG5E,MAAMiF,EAAI,IAGV,GAAIxD,EAAcxB,QAAUA,EAAO,CAEjC,MAAMiF,EAAK/T,KAAKqS,IAAI9B,EAAe3B,IAAMiC,KAAKC,MAAQF,GAChDoD,EAAKhU,KAAKqS,IAAI9B,EAAe1B,IAAMgC,KAAKC,MAAQF,GAGtDgD,GAAM5T,KAAKqS,IAAI9B,EAAe3B,GAAKmF,EAAKD,EAAIrD,EAAS7B,EACrDiF,GAAM7T,KAAKqS,IAAI9B,EAAe1B,GAAKmF,EAAKF,EAAIrD,EAAS5B,EAKvD,GAAI6E,EAAW5P,MAAQzC,OAAO4O,WAAY,CACxC,MAAMgE,GAAcvD,EAAmB3M,KAAO4P,EACxCO,EAAa7S,OAAO4O,WAAaS,EAAmByD,MAAQR,EAClEC,EAAK5T,KAAKqE,IAAI4P,EAAYjU,KAAKoE,IAAI8P,EAAYN,SAG/CA,GAAMvS,OAAO4O,WAAa5O,OAAO4O,WAAa0D,GAAM,EAGtD,GAAID,EAAW1S,OAASK,OAAOyO,YAAa,CAC1C,MAAMsE,GAAc1D,EAAmB2D,IAAMV,EACvCW,EAAajT,OAAOyO,YAAcY,EAAmB6D,OAASZ,EACpEE,EAAK7T,KAAKqE,IAAI+P,EAAYpU,KAAKoE,IAAIkQ,EAAYT,SAE/CA,GAAMxS,OAAOyO,YAAczO,OAAOyO,YAAc6D,GAAM,EAkBxD,OAhBArD,EAAgB,CACd1B,EAAGgF,EACH/E,EAAGgF,EACH/E,MAAO6E,QAETvF,IAAkBiD,EAAAA,EAAAA,IAAc,CAC9BC,KAAM,CAAC1C,EAAGC,EAAGC,GACbyC,GAAI,CAACqC,EAAIC,EAAIF,GACblR,SAAU0L,GACVqD,OAAQC,EAAAA,GAAAA,aACRC,SAAWpC,GAAUD,EAAa,CAChCT,EAAGU,EAAM,GACTT,EAAGS,EAAM,GACTR,MAAOQ,EAAM,QAUnB,GALAgB,EAAgB,CACd1B,EAAAA,EACAC,EAAAA,EACAC,MAAAA,GAEE2E,GAtZc,GAsZa,OAAO7N,IAEtC,GAAI6N,EAAO,EACT,OAAOpC,EAAAA,EAAAA,IAAc,CACnBC,KAAMzC,EACN0C,GAAI,EACJ9O,SAAU0L,GACVqD,OAAQC,EAAAA,GAAAA,aACRC,SAAWpC,GAAUD,EAAa,CAChCT,EAAG,EACHC,EAAGS,EACHR,MAAAA,MAKN,MAAMoC,EAAYtC,EAAI,EAAI,GAAK,EACzBuC,EAAM7C,EAAaW,EAAiBL,EAAI,EAAI,GAAK,GAKjD4F,EAAO/D,EAAS7B,EAAI,GAAK,EAAI,EACnC,GAAIuC,GAAOqC,GA9aO,IA8asBtC,IAAcsD,EAAM,CAC1D,MAAMpD,GAAU/P,OAAO4O,WA7ad,IA6ayCiB,EAGlDvC,EAAa9K,QAAQ+K,GAAKwC,EAC1BlC,EAAmBiC,GACnB3B,GAAmB,IAAMjB,EAAc4C,KAGzC/C,IAAkBiD,EAAAA,EAAAA,IAAc,CAC9BC,KAAM3C,EAAa9K,QAAQ+K,EAC3B2C,GAAI,EACJ9O,SAAU0L,GACVqD,OAAQC,EAAAA,GAAAA,aACRC,SAAWpC,GAAUD,EAAa,CAChCR,EAAG,EACHD,EAAGU,EACHR,MAAOH,EAAa9K,QAAQiL,eAOnC,CACDjR,EACA+H,EACAyJ,EACAf,EACAW,EACAM,KAGGN,EAAiB,OAEtB,MAAMwF,EAAgBnG,EAAaW,EAAiB,GAC9CyF,EAAoBpG,EAAaW,GAAkB,GACnD0F,EAAUhG,EAAa9K,QAAQ+K,EAC/BgG,EAAUjG,EAAa9K,QAAQgL,GAC/B,MAAEC,GAAUH,EAAa9K,QAE/B,OACE,0BAAKvE,UAAU,oBAAoBwF,IAAK2J,GACrCiG,GAA+B,IAAV5F,GACpB,0BAAKxP,UAAU,mBAAmB9C,MAAOqY,IAAmBxT,OAAO4O,WAAa0E,EAxdrE,KAydT,mBAAC,GAAD,MAEMnG,EAFN,CAGEvE,UAAWyK,MAGhBzF,GACC,0BACE3P,UAAY,qBAAmBqL,EAAW,2BAA6B,IACvEnL,QAASoQ,EACT9K,IAAK4J,EACLlS,MAAOqY,GAAkBF,EAASC,EAAS9F,IAE3C,mBAAC,GAAD,MAEMN,EAFN,CAGEvE,UAAWgF,EACXtE,SAAUA,GAAYqE,EAAYnL,QAClCkH,kBAAmBA,EACnBD,eAAgBA,GAAkBjN,GAAsB,IAAViR,MAInD2F,GAA2B,IAAV3F,GAChB,0BAAKxP,UAAU,mBAAmB9C,MAAOqY,GAAkBxT,OAAO4O,WAAa0E,EAjfpE,KAkfT,mBAAC,GAAD,MAEMnG,EAFN,CAGEvE,UAAWwK,UASvB,SAASI,KAA2C,IAAzBjG,EAAyB,uDAArB,EAAGC,EAAkB,uDAAd,EAAGC,EAAW,uDAAH,EAC/C,MAAQ,0BAAyBF,EAAEtM,QAAQ,SAASuM,EAAEvM,QAAQ,oBAAoBwM,EAAMxM,QAAQ,O,cEzgBlG,MAAMwS,GAAiB,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,GAGXC,GAAe,CACnB,EAAG,EACH,IAAK,IACL,EAAG,IACH,IAAK,IACL,EAAG,KAGCC,GAAiB,IAsKvB,IAAe5X,EAAAA,EAAAA,KA1Ie,IASxB,IATyB,SAC7B6X,EAD6B,UAE7B3V,EAF6B,OAG7B4V,EAH6B,OAI7BC,EAJ6B,UAK7BC,EAL6B,UAM7BC,EAN6B,UAO7BC,EAP6B,MAQ7BC,GACI,EACJ,MAAMC,EAAiBT,GAAaK,IAA2CA,GACxEK,EAAYC,IAAiB9U,EAAAA,EAAAA,KAAkB,IAC/C+U,EAAUC,IAAehV,EAAAA,EAAAA,IAAoB,CAClDiV,GAAIR,EAAWS,GAAIR,EAAW1G,EAAG,EAAGC,EAAG,KAGlCkH,EAAYC,IAAiBpV,EAAAA,EAAAA,IAAmBkU,IAGjDmB,GAAgB5S,EAAAA,EAAAA,IAAuB,MAGvC6S,GAAkB7S,EAAAA,EAAAA,IAAuB,MA8F/C,OA5FAxC,EAAAA,EAAAA,KAAU,KACR,MAAMsV,EAAeX,GAAkBO,EAAW,GAC5CK,EAAWf,GAAaU,EAAW,GACnCM,EAAWf,GAAaS,EAAW,GAEnCO,EAAgB,IAAIP,GACtBA,EAAW,KAAOI,IACpBG,EAAc,GAAKH,GAAgBG,EAAc,GACjDA,EAAc,GAAKH,GAAgBG,EAAc,IAE/CP,EAAW,KAAOK,IACpBE,EAAc,GAAKF,GAEjBL,EAAW,KAAOM,IACpBC,EAAc,GAAKD,IAGhBE,EAAAA,GAAAA,IAAqBR,EAAYO,IACpCN,EApEN,SAAiCQ,EAAkBT,EAAsBU,GACvE,MAAMC,EAAQD,GAAWA,EAAQpb,cAAc,kCAC/C,IAAKob,IAAYC,EACf,OAAOX,EAET,MAAMY,EAAcF,EAAQzS,wBACtB4S,EAAYF,EAAM1S,wBAElB6S,EAAeD,EAAU9S,MAAQ0S,EAAYT,EAAW,GACxDe,EAAgBF,EAAU5V,OAASwV,EAAYT,EAAW,GAC1DgB,GAAWJ,EAAY7S,MAAQ+S,GAAe,EAAId,EAAW,GAC7DiB,GAAWL,EAAY3V,OAAS8V,GAAgB,EAAIf,EAAW,GAYrE,OAXIY,EAAY7S,OAAS6S,EAAY7S,MAAQkR,GAAiB+B,EAC5DhB,EAAW,IAAMgB,EAAUJ,EAAY7S,MAAQkR,GACtC6B,GAAeA,EAAcE,EAAU/B,KAChDe,EAAW,IAAMc,EAAcE,EAAU/B,IAEvC2B,EAAY3V,QAAU2V,EAAY3V,OAASgU,GAAiBgC,EAC9DjB,EAAW,IAAMiB,EAAUL,EAAY3V,OAASgU,GACvC8B,GAAgBA,EAAeE,EAAUhC,KAClDe,EAAW,IAAMe,EAAeE,EAAUhC,IAGrCe,EA6CWkB,CAAwBlB,EAAW,GAAIO,EAAeL,EAAcpS,YAGnF,CAACwR,EAAWC,EAAWE,KAE1B3U,EAAAA,EAAAA,KAAU,KACHsU,GACHa,EAAclB,MAEf,CAACK,KAEJtU,EAAAA,EAAAA,KAAU,KACJqV,EAAgBrS,UAClBqS,EAAgBrS,QAAQrH,MAAM0a,UAAa,UAASnB,EAAWoB,iBAEhE,CAACjC,EAAQa,IA2DRb,EACKD,EAIP,0BACEnQ,IAAKmR,EACL3W,UAAY,eAAcA,GAAa,KACvC8X,YAjEqB1V,IACvB,IAAKyT,EACH,OAGFzT,EAAEC,kBACFD,EAAEqH,iBAEF,MAEMsO,EAAyB,CAC7BxB,GAHcE,EAAW,GAIzBD,GAHcC,EAAW,GAIzBnH,EAAGlN,EAAEsO,MACLnB,EAAGnN,EAAEqO,OAEP6F,EAAYyB,GACZ3B,GAAc,GAEVO,EAAcpS,SAChBoS,EAAcpS,QAAQrJ,UAAUC,IAAI,SA8CpC6c,UA1CkB,KACpB5B,GAAc,GAEVO,EAAcpS,SAChBoS,EAAcpS,QAAQrJ,UAAUmJ,OAAO,QAGrC4R,GACFA,EAAMQ,EAAW,GAAIA,EAAW,KAmChC7M,YArBqBxH,IACvB,GAAI+T,EAAY,CACd,MAAMa,EAZV,SAA0B1H,EAAWC,GACnC,MAAMyH,EAAgB,IAAIP,GACpBwB,EAAS5B,EAAS/G,EAAIA,EACtB4I,EAAS7B,EAAS9G,EAAIA,EAI5B,OAHAyH,EAAc,GAAKX,EAASE,GAAK0B,EACjCjB,EAAc,GAAKX,EAASG,GAAK0B,EAE1BlB,EAKiBmB,CAAiB/V,EAAEsO,MAAOtO,EAAEqO,OAClDiG,EAAcM,GAEVJ,EAAgBrS,UAClBqS,EAAgBrS,QAAQrH,MAAM0a,UAAa,UAASnB,EAAWoB,kBAiBjE,0BACErS,IAAKoR,EACL5W,UAAU,iBAET2V,O,yBC5KT,MAyDA,IAAe5X,EAAAA,EAAAA,KACb,CAACC,EAAD,KAAyD,IAAhD,OAAEyM,EAAF,UAAUE,EAAV,SAAqBlM,GAA2B,EACvD,GAAIA,GAAYgM,EACd,MAAO,CACL2N,QAAQC,EAAAA,EAAAA,IAAS5N,IAAUQ,EAAAA,EAAAA,IAAWjN,EAAQyM,IAAUS,EAAAA,EAAAA,IAAWlN,EAAQyM,IAI/E,IAAKE,IAAcF,EACjB,MAAO,GAGT,MAAMrN,GAAU0N,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,GAElD,MAAO,CACLvN,QAAAA,EACAgb,OAAQhb,IAAWkb,EAAAA,EAAAA,IAAata,EAAQZ,MAhB9C,EAvD8C,IAMxC,IANyC,OAC7CqN,EAD6C,UAE7CE,EAF6C,OAG7CyN,EAH6C,SAI7C3Z,EAJ6C,QAK7CrB,GACI,EACJ,MAAM,iBACJmb,EADI,aAEJC,EAFI,eAGJC,IACE1Z,EAAAA,EAAAA,MAEE2Z,GAAqBrZ,EAAAA,EAAAA,KAAY,KACrCkZ,IAEInY,EAAAA,GACF8D,YAAW,KACTuU,GAAe,EAAO,CAAEE,gBAAgB,IACxCH,EAAa,CAAE/N,OAAAA,EAAQE,UAAAA,MArBJ,KAwBrB6N,EAAa,CAAE/N,OAAAA,EAAQE,UAAAA,MAExB,CAACF,EAAQ+N,EAAcC,EAAgB9N,EAAW4N,IAE/CjZ,GAAOC,EAAAA,EAAAA,KAEb,IAAK6Y,IAAYhb,IAAYqB,EAC3B,OAGF,MAAMma,GAAcC,EAAAA,EAAAA,IAAevZ,EAAM8Y,GAEzC,OACE,0BAAKpY,UAAU,aAAaE,QAASwY,IAClCL,EAAAA,EAAAA,IAASD,EAAO5b,IACf,mBAACsc,GAAA,EAAD,CAAQtP,IAAK4O,EAAO5b,GAAIsD,KAAK,SAASiZ,KAAMX,IAE5C,mBAACU,GAAA,EAAD,CAAQtP,IAAK4O,EAAO5b,GAAIsD,KAAK,SAASkZ,KAAMZ,IAE9C,0BAAKpY,UAAU,QACb,0BAAKA,UAAU,QAAQsC,IAAI,QACxBsW,IAAeK,EAAAA,GAAAA,GAAWL,IAE7B,0BAAK5Y,UAAU,OAAOsC,IAAI,QACvB7D,EACGa,EAAK,gCACL4Z,EAAAA,EAAAA,IAAoB5Z,EAAsB,IAAhBlC,EAAS+b,MAAa,SCtE9D,GAN6C,IAA4B,IAA3B,SAAExD,KAAavK,GAAY,EACvE,OAAIzE,EAAAA,GAAqBgP,GAAS,GAAM,EAAM,GAEvC,mBAACyD,EAAA,EAAehO,EAAQuK,ICmHjC,IAAe7X,EAAAA,EAAAA,KApGoB,IAA+B,IAA9B,QAAEub,EAAF,aAAWC,GAAmB,EAChE,MAAM,qBAAEhR,IAAyBE,EAAAA,EAAAA,GAAkB6Q,GAC7CE,GAAcC,EAAAA,EAAAA,GAAqBH,GAEnCI,GAAW1V,EAAAA,EAAAA,IAAyB,OACnC+R,EAAW4D,IAAgBpY,EAAAA,EAAAA,IAAS,GACrC0C,GAAYD,EAAAA,EAAAA,KAAgB,IAElCxC,EAAAA,EAAAA,KAAU,KACJ8X,IAAYE,GACdG,EAZmB,OAcpB,CAACL,EAASE,IAEb,MAYMvU,GAAkB3F,EAAAA,EAAAA,KAAY,KAClC2E,EAAUO,SAAU,IACnB,IAEGU,GAAiB5F,EAAAA,EAAAA,KAAY,KACjC2E,EAAUO,SAAU,EACF,IAAduR,GACFwD,EAAaxD,GAAY9R,EAAUO,WAEpC,CAAC+U,EAAcxD,KAMlBvU,EAAAA,EAAAA,KAAU,KACR+X,EAAaxD,GAAY9R,EAAUO,WAClC,CAACuR,EAAWwD,IAEf,MAAMha,GAAOC,EAAAA,EAAAA,KAEPS,GAAYmC,EAAAA,EAAAA,GAChB,eACAmG,GAGF,OACE,0BAAKtI,UAAWA,GACd,mBAACJ,EAAA,EAAD,CACE+Z,SA3DsB,IA2DZ7D,EACVhW,KAAK,OACLC,MAAM,oBACNI,UAAWb,EAAK,WAChBU,UAAU,WACV0F,QAAStF,EAAAA,GACTF,QA/CgB,KAChBuZ,EAASlV,SACXmV,EAAahZ,KAAKoE,IApBM,EAoBcgR,EAAY,OA+ChD,wBAAG9V,UAAU,mBAEf,mBAACJ,EAAA,EAAD,CACE+Z,SAvEsB,IAuEZ7D,EACVhW,KAAK,OACLC,MAAM,oBACNI,UAAU,UACVH,UAAU,UACV0F,QAAStF,EAAAA,GACTF,QApDe,KACfuZ,EAASlV,SACXmV,EAAahZ,KAAKqE,IA3BM,EA2Bc+Q,EAAY,OAoDhD,wBAAG9V,UAAU,kBAEf,0BAAKA,UAAU,YACb,0BAAKA,UAAU,kBACb,0BACEA,UAAU,kBACV9C,MAAQ,UAnFK,IAmFK4Y,EAAY,QAEhC,4BACEtQ,IAAKiU,EACL1U,IAxFkB,EAyFlBD,IA1FkB,EA2FlB8U,KAAK,MACL5J,MAAO8F,EACP+D,KAAK,QACL7Z,UAAU,iBACV8Z,SArDoB1X,IAC5BsX,EAAahZ,KAAKqE,IA3CQ,EA2CYrE,KAAKoE,IAAIiV,OAAO3X,EAAE6G,OAAO+G,OA1CrC,MA+FlB8H,YAAa9S,EACbgT,UAAW/S,UClCjB4J,GAAqB,IA2d3B,IAAe/Q,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,OACJyM,EADI,SAEJC,EAFI,UAGJC,EAHI,cAIJC,EAJI,kBAKJC,EALI,OAMJ/P,GACEkD,EAAOgc,aACL,eACJ1O,GACEtN,EAAOic,SAASC,MAEpB,GAAIpf,IAAWe,EAAAA,GAAAA,aAAgC,CAC7C,IAAM4O,IAAUE,EACd,MAAO,CAAEW,eAAAA,GAGX,MAAMlO,GAAU0N,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,GAClD,OAAKvN,EAIE,CACLqN,OAAAA,EACAE,UAAAA,EACAI,SAAU3N,EAAQ2N,SAClBjQ,OAAAA,EACAsC,QAAAA,EACAkO,eAAAA,GATO,CAAEA,eAAAA,GAab,GAAIV,EAGF,MAAO,CACLD,WAAY,EACZI,SAAUH,EACVI,aALaC,EAAAA,EAAAA,IAAWjN,EAAQ4M,KAAkBM,EAAAA,EAAAA,IAAWlN,EAAQ4M,GAMrEC,kBAAmBA,GAAqB,EACxCS,eAAAA,EACAxQ,OAAAA,GAIJ,KAAM2P,GAAUC,GAAYC,GAC1B,MAAO,CAAEW,eAAAA,GAGX,IAAIlO,EAWA+c,EAOAC,EAXJ,GALEhd,EADEtC,GAAU,CAACe,EAAAA,GAAAA,eAAkCA,EAAAA,GAAAA,iBAAmCY,SAAS3B,IACjFqQ,EAAAA,EAAAA,IAAuBnN,EAAQyM,EAAQE,IAEvCG,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,IAGzCvN,EACH,MAAO,CAAEkO,eAAAA,GAYX,GANE6O,EADErf,GAAU,CAACe,EAAAA,GAAAA,eAAkCA,EAAAA,GAAAA,iBAAmCY,SAAS3B,IAC5Euf,EAAAA,EAAAA,IAAwBrc,EAAQyM,IAEhC6P,EAAAA,EAAAA,IAAmBtc,EAAQyM,GAIxC3P,IAAWe,EAAAA,GAAAA,QAA4Bf,IAAWe,EAAAA,GAAAA,MACpDue,GAAgBG,EAAAA,EAAAA,IAAkBvc,EAAQyM,EAAQC,KAAa8P,EAAAA,EAAAA,IAAgBxc,EAAQyM,EAAQC,QAC1F,GAAI5P,IAAWe,EAAAA,GAAAA,YAA+B,CACnD,MAAM4e,GAAgBC,EAAAA,EAAAA,IAAyB1c,IACzC,SAAE2c,GAAcF,GAAiBA,EAAcG,eAAiBH,EAAcG,cAAcC,OAAU,GAC5GT,EAAgBO,EAGlB,MAAO,CACLlQ,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAI,SAAU3N,EAAQ2N,SAClBjQ,OAAAA,EACAsC,QAAAA,EACA+c,aAAAA,EACAC,cAAAA,EACA9O,eAAAA,KAxFcvN,EAzdgB,IAY9B,IAZ+B,OACnC0M,EADmC,SAEnCC,EAFmC,UAGnCC,EAHmC,SAInCI,EAJmC,OAKnCjQ,EALmC,YAMnCkQ,EANmC,kBAOnCH,EAPmC,QAQnCzN,EARmC,aASnC+c,EATmC,cAUnCC,EAVmC,eAWnC9O,GACI,EACJ,MAAM,gBACJwP,EADI,iBAEJvC,EAFI,gBAGJwC,EAHI,aAIJvC,EAJI,eAKJC,IACE1Z,EAAAA,EAAAA,MAEEY,EAASuH,QAAQ8D,GAAeL,GAEhC2B,EAAoBxR,IAAWe,EAAAA,GAAAA,YAC/B0Q,EAAezR,IAAWe,EAAAA,GAAAA,aAG1B6P,EAAQtO,GAAUuO,EAAAA,EAAAA,IAAgBvO,QAAW6C,EAC7CsH,EAAQnK,GAAUwO,EAAAA,EAAAA,IAAgBxO,QAAW6C,EAC7C4L,EAAezO,GAAU0O,EAAAA,EAAAA,IAAuB1O,QAAW6C,EAC3D8L,EAAe3O,GAAU4O,EAAAA,EAAAA,IAAuB5O,QAAW6C,EAC3DgM,KAAkB7O,IAAU8O,EAAAA,EAAAA,IAAuB9O,GACnD+O,KAAkB/O,IAAUgP,EAAAA,EAAAA,IAAuBhP,GACnDkB,GAAU4I,QAAQK,GAASwE,GAAgBI,KAC3C,MAAElG,IAAUsB,GAASwE,GAAgB,GACrCM,GAAUnF,SAAS5I,KAAYoN,GAASG,GAAgBI,KACxDxN,GAAWyI,QAAQ8D,GAGnBgQ,GAAkBnP,GAAgBE,EAAepB,OAAY1K,EAE7Dgb,IAAaxb,EAAAA,EAAAA,KAAQ,IAClBub,GACH,CAACA,KACDE,EAAAA,EAAAA,IAAuBf,GAAgB,GAAIC,GAAiB,GAAI9N,IACnE,CAAC0O,GAAiBb,EAAcC,EAAe9N,IAE5C6O,GAA4BxQ,EAAYsQ,GAAWG,QAAQzQ,IAAc,EACzE0Q,GAAwC,IAA9BF,KAAkE,IAA/BA,GAC7CG,GAASH,KAA8BF,GAAWvd,OAAS,IAAoC,IAA/Byd,GAGhEI,IAAexX,EAAAA,EAAAA,MACfyX,IAAehC,EAAAA,EAAAA,GAAgCzO,IACjDpL,GAAY6b,IAAgBA,KAAiBzQ,GAAawQ,GAAahX,UACzEgX,GAAahX,QAAU4W,IAEzB,MAAMM,GAAiBnQ,GAAkB,IAAM3E,EAAAA,GAAe,WAAa,OACrE+U,GAAqC,IAAnBpQ,EAAuB,aAAe,OACxDkB,GAAsC,IAAnBlB,GAGlBqQ,GAAgBC,KAAqBta,EAAAA,EAAAA,KAAS,IAC9C/C,GAAUsd,KAAeva,EAAAA,EAAAA,KAAkB,IAC3CwU,GAAW4D,KAAgBpY,EAAAA,EAAAA,IAAiB,IAC5C6P,GAAU2K,KAAexa,EAAAA,EAAAA,IAAS,CACvCgO,EAAG,EACHC,EAAG,IAIL,SAAS9C,GAAaC,GACpB,GAAIjO,SAAkCwB,IAAtB4K,EAAiC,CAC/C,MAAM,OAAE8B,GAAW3B,EACnB,OAAO2B,GAAUA,EAAO9B,GACnB,QAAO8B,EAAO9B,GAAmBrO,aAClCoQ,EAAAA,EAAAA,IAAkB5B,EAAc0B,EAAS,MAAQ,UAGvD,OAAOtP,IAAW+B,EAAAA,EAAAA,IAAoB/B,EAASsP,EAAS,aAAe,iBAGzE,MAAMG,IAAmBC,EAAAA,EAAAA,GACvB1P,IAAYkP,GAAqBC,KAAiBpN,EAAAA,EAAAA,IAAoB/B,EAAS,kBAC/E6C,EACA8M,EAAAA,GAAAA,aACA9M,EACAuM,IAAoBqC,IAEhB7B,GAAmBP,KACnBQ,IAAiBH,EAAAA,EAAAA,GACrBE,QACA/M,EACA8M,EAAAA,GAAAA,aACA9M,EACAuM,IAAoBqC,KAEdxQ,UAAW6O,KAAqBhO,EAAAA,EAAAA,GACtCuN,IAAa,QACbxM,EACA7C,IAAW+P,EAAAA,EAAAA,IAAsB/P,EAAS,mBAC1C6C,EACAuM,IAAoBqC,IAGhBzB,GAAgB1B,GAASnE,GAAUmE,GAASnE,GAAQ8F,aAAUpN,EACpE,IAAIqN,IAAkBhP,KAAY8O,IAAgBF,KAAsBD,IAAkBJ,GAC1F,MAAMU,IAAeC,EAAAA,EAAAA,IAAaF,IAAiBlQ,IAAWqQ,EAAAA,EAAAA,IAA4BrQ,IACrFkQ,IAAiBxS,IAAWe,EAAAA,GAAAA,eAC/ByR,GAAgBC,IAGlB,MAAM/O,GAAWpB,GACb2e,EAAAA,EAAAA,IAAmB3e,GACnBqB,GACG,SAAQuM,EAAaxO,MAAMqO,aAC5B5K,EAEN,IAAI2N,GACAxQ,EACE6O,IAAmBE,GACrByB,IAAaC,EAAAA,EAAAA,IAAmBzQ,GAAU0Q,UACjCpC,GAASG,EAClB+B,IAAaG,EAAAA,EAAAA,IAAwBrC,GAASG,IACrCtE,GAASwE,KAClB6B,IAAaI,EAAAA,EAAAA,IAAoBzG,GAASwE,IAG5C6B,GAAaK,EAAAA,IAGf1M,EAAAA,EAAAA,KAAU,KACHnB,EAAAA,IAILpF,SAASoJ,KAAKlJ,UAAU8gB,OAAO,uBAAwBrc,KACtD,CAACA,IAEJ,MAAMkQ,IAAcC,EAAAA,EAAAA,MACpBvO,EAAAA,EAAAA,KAAU,KACR,MAAM0a,EAAMla,OAAOma,WAAWC,EAAAA,IAO9B,MANoC,mBAAzBF,EAAIja,iBACbia,EAAIja,iBAAiB,SAAU6N,IACK,mBAApBoM,EAAIG,aACpBH,EAAIG,YAAYvM,IAGX,KACkC,mBAA5BoM,EAAIha,oBACbga,EAAIha,oBAAoB,SAAU4N,IACK,mBAAvBoM,EAAII,gBACpBJ,EAAII,eAAexM,OAGtB,CAACA,KAEJ,MAAMyM,IAAc9C,EAAAA,EAAAA,GAAoCpc,GAClDmf,IAAa/C,EAAAA,EAAAA,GAAY1e,GACzB0hB,IAAkBhD,EAAAA,EAAAA,GAA2CxO,GAC7DyR,IAAoBjD,EAAAA,EAAAA,GAAYlM,IAChCc,GAAYhR,GAAUiR,EAAAA,EAAAA,GAAkBjR,QAAW6C,EACnDqO,GAAYpH,QAAQkH,KAE1B7M,EAAAA,EAAAA,KAAU,KACJiL,IAAoB7M,IAAW2c,KAAgBE,MACjDE,EAAAA,EAAAA,IAA4B7N,GAAqB8N,EAAAA,IdzOhD,SACLrO,EACAxT,EACAwS,EACAM,EACAtP,EACAlB,GAEA,MAAQK,QAASmf,GAAczf,EAASrC,EAAQsC,GAChD,IAAKwf,EACH,OAGF,MAAQpY,MAAOqY,GAAgBC,EAAAA,EAAAA,OAE7BtY,MAAOuY,EAAgBrb,OAAQsb,IAC7BC,EAAAA,EAAAA,IAAkC3O,EAAWhQ,IACzCkG,MAAO0Y,EAASxb,OAAQyb,IAAaC,EAAAA,EAAAA,IAC3CL,EAAgBC,EAAiBpP,EAAWpJ,MAAOoJ,EAAWlM,QAE1D2b,GAAUR,EAAcK,GAAW,EACnCI,EAyPR,SAAsBhP,GACpB,MAAM2N,EAAMla,OAAOma,WAAWC,EAAAA,IAC9B,IAAIoB,EAAe,MAKnB,OAJIjP,IAAc3H,EAAAA,KAChB4W,GAAgBtB,EAAIuB,QAAU,KAAQ,OAGjCD,EAAe3b,EAAAA,GAhQR6b,CAAanP,IAAc0O,EAAkBG,GAAY,EAEvE,IACEpI,IAAK2I,EAASjZ,KAAMkZ,EAAUnZ,MAAOoZ,EAAWlc,OAAQmc,GACtDjB,EAAUlY,wBAEd,GAAI,CACF7I,EAAAA,GAAAA,YACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,eACAA,EAAAA,GAAAA,cACAY,SAAS3B,GAAS,CAClB,MAAMgjB,EAiMV,SAAiBC,EAAmBC,EAAoBjJ,EAAatQ,EAAcD,EAAe9C,GAChG,GAAIqc,IAAcC,EAAY,CAC5B,MAAMle,EAAOY,KAAKoE,IAAIN,EAAO9C,IAAWqc,EAAYC,GACpDvZ,IAAS3E,EAAO0E,GAAS,EACzBuQ,IAAQjV,EAAO4B,GAAU,EACzB8C,EAAQ1E,EACR4B,EAAS5B,OACJ,GAAIie,EAAYC,EAAY,CACjC,MAAMC,EAAWzZ,EAEjBC,KADAD,EAAQ9C,GAAUqc,EAAYC,IACbC,GAAY,OACxB,GAAID,EAAaD,EAAW,CACjC,MAAMG,EAAYxc,EAElBqT,KADArT,EAAS8C,GAASwZ,EAAaD,IACdG,GAAa,EAGhC,MAAO,CACLnJ,IAAAA,EAAKtQ,KAAAA,EAAMD,MAAAA,EAAO9C,OAAAA,GAnNAyc,CAAQjB,EAASC,EAAUO,EAASC,EAAUC,EAAWC,GAC3EH,EAAUI,EAAU/I,IACpB4I,EAAWG,EAAUrZ,KACrBmZ,EAAYE,EAAUtZ,MACtBqZ,EAAaC,EAAUpc,OAGzB,MAAM0c,EAAkBT,EAAWC,EAAY,GAAMP,EAASH,EAAU,GAClEmB,EAAkBX,EAAUG,EAAa,GAAMP,EAAQH,EAAW,GAClEmB,EAAaV,EAAYV,EACzBqB,EAAaV,EAAaV,EAE1BpiB,EAAQH,EAAY0S,GAAiBsP,GAC3C/f,EAAY9B,EAAO,CACjBga,IAAM,GAAEuI,MACR7Y,KAAO,GAAE4Y,MACT7Y,MAAQ,GAAE0Y,MACVxb,OAAS,GAAEyb,MACXvF,UAAY,eAAcwG,QAAqBC,iBAA8BC,MAAeC,OAE9F5gB,EAAW5C,EAAOD,GAElBE,SAASoJ,KAAKlJ,UAAUC,IAAI,mBAE5BqjB,uBAAsB,KACpBxjB,SAASoJ,KAAKxI,YAAYb,GAE1ByjB,uBAAsB,KACpBzjB,EAAMmC,MAAM0a,UAAY,GAyS9B,SAAoB7c,GACjBA,EAAM6C,WAA2BV,MAAMW,UAAY,UACpD9C,EAAMG,UAAUmJ,OAAO,kBAAmB,UA1StCoa,CAAW1jB,GAEXmJ,YAAW,KACTsa,uBAAsB,KAChBxjB,SAASoJ,KAAKsa,SAAS3jB,IACzBC,SAASoJ,KAAKua,YAAY5jB,GAE5BC,SAASoJ,KAAKlJ,UAAUmJ,OAAO,wBAvEd,IAyEGsY,EAAAA,UcmKxBiC,CAAetQ,GAAWxT,EAASwS,GAAgBM,GAAYtP,GAASlB,IAGtEoP,KAAqB7M,IAAW2c,IAAeE,OACjDE,EAAAA,EAAAA,IAA4B7N,GAAqB8N,EAAAA,IdlKhD,SAAwB7hB,EAA2BwS,EAAuBlQ,GAC/E,MAAM,UAAElB,EAAWuB,QAASohB,GAAY1hB,EAASrC,EAAQsC,GACzD,IAAKyhB,EACH,OAGF,MAAMjC,EAAY5hB,SAAS8jB,eAAe,eAAgB/iB,cACxD,kEAEF,IAAK6gB,IAAciC,EACjB,OAGF,MACE9J,IAAK2I,EAASjZ,KAAMkZ,EAAUnZ,MAAOoZ,EAAWlc,OAAQmc,GACtDjB,EAAUlY,yBAEZqQ,IAAKgK,EAAWta,KAAM4Y,EAAQ7Y,MAAO0Y,EAASxb,OAAQyb,GACpD0B,EAAQna,wBAEZ,IAAI4Y,EAAQyB,EACZ,IAuJF,SAA6BC,GAC3B,GAAyB,SAArBA,EAAG9hB,MAAM+hB,QACX,OAAO,EAGT,MAAMC,EAAOF,EAAGta,yBACRhD,OAAQyd,GAAiBrC,EAAAA,EAAAA,MAEjC,OAAQoC,EAAKnK,KAAOoK,GAAmBD,EAAKnK,IAAMmK,EAAKxd,QAAW,EA/J7D0d,CAAoBljB,GAAY,CACnC,MAAQwF,OAAQyd,GAAiBrC,EAAAA,EAAAA,MACjCQ,EAAQyB,EAAYrB,GAAWP,EAAWgC,EAG5C,MAAMf,EAAkBT,EAAWC,EAAY,GAAMP,EAASH,EAAU,GAClEmB,EAAkBX,EAAUG,EAAa,GAAMP,EAAQH,EAAW,GACxE,IAAImB,EAAaV,EAAYV,EACzBqB,EAAaV,EAAaV,EAE9B,MAAMkC,EACJ,CAACxjB,EAAAA,GAAAA,OAA0BA,EAAAA,GAAAA,iBAAmCY,SAAS3B,KACnEmB,EAA2BC,EAAW2iB,IAE1C,CAAChjB,EAAAA,GAAAA,MAAyBA,EAAAA,GAAAA,gBAAkCY,SAAS3B,KACjEmB,EAA2BC,EAAW2iB,GAGxC,CACFhjB,EAAAA,GAAAA,YACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,eACAA,EAAAA,GAAAA,cACAY,SAAS3B,KACLwjB,EAAaC,EACfD,EAAaC,EACJA,EAAaD,IACtBC,EAAaD,IAIjB,MAAMgB,EAAgBtkB,SAASukB,uBAAuB,SAAS,GAEzDxkB,EAAQukB,GAAiB1kB,EAAY0S,GAAiBuR,EAAS/jB,GAChEwkB,GACHziB,EAAY9B,EAAO,CACjBga,IAAM,GAAEuI,MACR7Y,KAAO,GAAE4Y,MACT7Y,MAAQ,GAAE0Y,MACVxb,OAAS,GAAEyb,MACXvF,UAAY,eAAcwG,QAAqBC,iBAA8BC,MAAeC,OAIhGC,uBAAsB,KACpB,GAAIc,EAAe,CACjB,MAAM,IACJvK,EADI,KAEJtQ,EAFI,MAGJD,EAHI,OAIJ9C,GACE4d,EAAc5a,wBAIlB7H,EAAY9B,EAAO,CACjBykB,WAAY,OACZzK,IAAM,GAAEuI,MACR7Y,KAAO,GAAE4Y,MACToC,gBAAiB,WACjB7H,UAAY,eAAcnT,EAAO4Y,QAAatI,EAAMuI,iBARvC9Y,EAAQ0Y,MACRxb,EAASyb,KAQtB3Y,MAAQ,GAAE0Y,MACVxb,OAAS,GAAEyb,QAGfniB,SAASoJ,KAAKlJ,UAAUC,IAAI,mBACvBmkB,GAAetkB,SAASoJ,KAAKxI,YAAYb,GAE9CyjB,uBAAsB,KAChBc,IACFA,EAAcpiB,MAAMsiB,WAAa,IAGnCzkB,EAAMmC,MAAM0a,UAAY,GAEpByH,IACFtkB,EAAMmC,MAAMwiB,QAAU,KAGxB/hB,EAAW5C,EAAOD,GAElBoJ,YAAW,KACTsa,uBAAsB,KAChBxjB,SAASoJ,KAAKsa,SAAS3jB,IACzBC,SAASoJ,KAAKua,YAAY5jB,GAE5BC,SAASoJ,KAAKlJ,UAAUmJ,OAAO,wBAzLd,IA2LGsY,EAAAA,UcsDxBgD,CAAepD,GAAaE,GAAoBH,SAAerc,MAEhE,CACDuM,GAAkB7M,EAAQ7E,EAAQyhB,GAAYnf,EAASkf,GAAaE,GACpElP,GAAemP,GAAmB7O,GAAYtP,GAASgQ,MAGzD/M,EAAAA,EAAAA,KAAU,KACR,IAAIqe,EAUJ,OARIrhB,GACFqd,IAAkB,GAElBgE,EAAQ7d,OAAOmC,YAAW,KACxB0X,IAAkB,KACjB/M,IAGE,KACD+Q,GACF7d,OAAOoC,aAAayb,MAGvB,CAACrhB,KAEJ,MAAMshB,GAAY,KAChBhE,IAAY,GACZnC,GAAa,GACboC,GAAY,CACVxM,EAAG,EACHC,EAAG,KAIDuQ,IAAmBzgB,EAAAA,EAAAA,KAAY,KACnCwc,IAAatd,IACbmb,GAAcnb,GAAiB,EAAN,KACrBA,IACFud,GAAY,CACVxM,EAAG,EACHC,EAAG,MAGN,CAAChR,KAEEwhB,IAAkB1gB,EAAAA,EAAAA,KAAY,SAAC2gB,GAAwC,IAAzBC,EAAyB,wDAC3EvG,GAAasG,GACC,IAAVA,GAAeC,GACjBJ,OAED,IAEGK,IAAQ7gB,EAAAA,EAAAA,KAAY,KACxBkZ,IACAsH,OACC,CAACtH,IAEE4H,IAAoB9gB,EAAAA,EAAAA,KAAY,KACpC6gB,KAEI9f,EAAAA,GACF8D,YAAW,KACTuU,GAAe,EAAO,CAAEE,gBAAgB,IACxCH,EAAa,CAAE/N,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,MAChCkE,IAEH2J,EAAa,CAAE/N,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,MAElC,CAACuV,GAAOzV,EAAQC,EAAU8N,EAAcC,EAAgB9N,IAErDyV,IAAgB/gB,EAAAA,EAAAA,KAAY,KAChC0b,EAAgB,CACdsF,WAAY5V,EACZwQ,WAAY,CAACtQ,KAEfkV,OACC,CAAC9E,EAAiBtQ,EAAQE,IAEvBsE,IAAgB5P,EAAAA,EAAAA,KAAa7C,GAAgBse,EAAgB,CACjErQ,OAAAA,EACAC,SAAAA,EACAC,UAAWnO,EACX1B,OAAAA,GACC,CACDwlB,uBAAuB,KACrB,CAAC7V,EAAQqQ,EAAiBhgB,EAAQ4P,KAEtCnJ,EAAAA,EAAAA,KAAU,IAAO5B,GAAS4gB,EAAAA,EAAAA,IAAsB,KAC1ChiB,GACFshB,KAEAK,aAECjgB,GAAY,CAACigB,GAAOvgB,EAAQpB,MAEjCgD,EAAAA,EAAAA,KAAU,KACJjD,KAAY2H,KACdua,EAAAA,EAAAA,QAED,CAACva,GAAO3H,MAGXiD,EAAAA,EAAAA,KAAU,KACR,GAAK5B,EAML,OAFAmd,EAAAA,EAAAA,iBAEO,KACLA,EAAAA,EAAAA,mBAED,CAACnd,IAEJ,MAAMqP,IAAe3P,EAAAA,EAAAA,KAAY,CAACohB,EAAiB7O,KACjD,IAAK6O,EAAQ,OACb,MAAMC,EAAQzF,GAAWG,QAAQqF,GACjC,OAAoB,IAAf7O,GAAoB8O,EAAQ,GAAqB,IAAd9O,GAAmB8O,EAAQzF,GAAWvd,OAAS,EAC9Eud,GAAWyF,EAAQ9O,QAD5B,IAIC,CAACqJ,KAEE9F,GAAgBnG,GAAarE,EAAW,GACxCyK,GAAoBpG,GAAarE,GAAY,GAE7CgW,IAAYthB,EAAAA,EAAAA,KAAY,CAACiQ,EAAWC,KACxCuM,GAAY,CACVxM,EAAAA,EACAC,EAAAA,MAED,IAEGjQ,IAAOC,EAAAA,EAAAA,KAoDb,SAASqhB,KACP,OAAOniB,GACL,mBAAC,GAAD,CACE+K,IAAKwB,EAAaxO,GAClBiO,OAAQO,EAAaxO,GACrBiC,UAAQ,IAGV,mBAAC,GAAD,CACE+K,IAAKmB,EACLF,OAAQA,EACRE,UAAWA,IAKjB,OAlEAkW,EAAAA,EAAAA,IAAelhB,EAAQ4Y,EAAkBuC,EAAiB,CACxDrQ,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACA7P,OAAAA,EACA8P,cAAeI,GAAeA,EAAYxO,MAG5C+E,EAAAA,EAAAA,KAAU,KACR,GAAK5B,EAoBL,OAFA3E,SAASgH,iBAAiB,UAAW8e,GAAe,GAE7C,KACL9lB,SAASiH,oBAAoB,UAAW6e,GAAe,IAjBzD,SAASA,EAAc1e,GACrB,OAAQA,EAAEoH,KACR,IAAK,OACL,IAAK,YACHyF,GAAcmG,IACd,MAEF,IAAK,QACL,IAAK,aACHnG,GAAckG,QAUnB,CAACxV,EAAQwV,GAAeC,GAAmBnG,MAE9C1N,EAAAA,EAAAA,KAAU,KACR,GAAIhD,IAAYoI,EAAAA,GAAc,OAC9B,MAAM7J,EAAU9B,SAASe,cAA8B,6BACvD,IAAKe,EACH,OAGF,MAAMikB,EAAqB9a,KAAUW,EAAAA,GAErC,OAAO1B,EAAAA,EAAAA,IAAcpI,EAAS,CAE5BwV,wBAA0B,8EAA6EyO,EAAwC,GAAnB,kBAC5H7gB,QAASggB,OAEV,CAACA,GAAOja,GAAO1H,GAAUoM,IAmB1B,mBAACqW,EAAA,EAAD,CACExkB,GAAG,cACHwD,UAAWzB,GAAW,SAAW,GACjCoB,OAAQA,IAEP,IACC,sCACE,0BAAKK,UAAU,oBAAoBsC,IAAKhD,GAAK2hB,MAAQ,WAAQhhB,GAC1DG,EAAAA,IACC,mBAACR,EAAA,EAAD,CACEI,UAAU,qBACVH,OAAK,EACLC,KAAK,UACLC,MAAM,oBACNI,UAAWb,GAAK,SAChBY,QAASggB,IAET,wBAAGlgB,UAAU,gBAGjB,mBAACoZ,EAAA,EAAD,CAAY8H,UAAW3F,GAAahX,QAAU4c,KAAMzF,IACjDkF,IAEH,mBAAC,EAAD,CACEviB,UAAW6O,IAAoBD,GAC/B3O,QAASA,GACTC,SAAUA,GACVnB,QAASA,EACToB,SAAUA,GACVE,mBAAoBwhB,GACpBvhB,UAAWyhB,GACXxhB,aAAckhB,GACdrhB,SAAUA,MAGd,mBAAC,GAAD,CACEmX,QAAS+F,GACT9F,OAAQtX,GACRwX,UAAW5E,GAAS7B,EACpB0G,UAAW7E,GAAS5B,EACpBuG,UAAWA,GACXG,MAAO0K,IAEP,mBAAC,GAAD,CACEO,UAAW/F,GACXgG,KAAM1F,KAEJpQ,GACA,mBAAC,GAAD,CACEV,UAAWA,EACXqE,aAAcA,GACdvE,OAAQA,EACR4B,QAASA,GACTpG,MAAOA,GACPyE,SAAUA,EACVE,cAAeI,GAAeA,EAAYxO,GAC1CqO,kBAAmBA,EACnB/P,OAAQA,EACR6E,OAAQA,EACR2O,UAAWA,GACX/P,SAAUA,GACV8M,SAAUA,EACV/M,QAASA,GACTgN,eAAgBA,EAChBhF,QAAS4Z,GACTjR,cAAeA,GACf1D,cAAe4U,SAKrB9E,KAAY1U,EAAAA,IACZ,6BACEkT,KAAK,SACL7Z,UAAY,mBAAkB1B,KAAY2H,IAAS,WACnD,aAAY3G,GAAK,oBACjBgD,IAAKhD,GAAK2hB,MAAQ,WAAQhhB,EAC1BC,QAAS,IAAM+O,GAAcmG,OAG/BkG,KAAW3U,EAAAA,IACX,6BACEkT,KAAK,SACL7Z,UAAY,mBAAkB1B,KAAY2H,IAAS,WACnD,aAAY3G,GAAK,QACjBgD,IAAKhD,GAAK2hB,MAAQ,WAAQhhB,EAC1BC,QAAS,IAAM+O,GAAckG,MAGjC,mBAAC,GAAD,CACEkE,QAAS9a,GACT+a,aAAcyG,Y,uIChgB1B,MAiGA,IAAejiB,EAAAA,EAAAA,KAjGwB,IAYjC,IAZkC,OACtC6B,EADsC,cAEtCyhB,EAFsC,cAGtCC,EAHsC,UAItCC,EAJsC,OAKtCC,EALsC,kBAMtCC,EANsC,SAOtCC,EAPsC,eAQtCC,EARsC,mBAStCC,EATsC,QAUtCrb,EAVsC,oBAWtCsb,GACI,EACJ,MAAMtiB,GAAOC,EAAAA,EAAAA,MACNsiB,EAAaC,IAAWC,EAAAA,GAAAA,GAAkBN,EAAUJ,EAAena,QAAQqa,IAE5ES,GAAc3iB,EAAAA,EAAAA,KAAY,KAC9BqiB,EAAe,MACd,CAACA,KACJO,EAAAA,GAAAA,GAAoBX,EAAW3hB,EAAQqiB,GAGvC,MAAM7S,GAAepL,EAAAA,EAAAA,IAAuB,MACtCme,GAAqB7iB,EAAAA,EAAAA,KAAa+C,IACtCsf,EAAetf,EAAE+G,cAAc6G,SAC9B,CAAC0R,IACEZ,GAAgBqB,EAAAA,GAAAA,GAA0BhT,EAAcxP,GAAS+gB,IACjEmB,GAAeA,EAAYnkB,OAAS,GACtCikB,EAAmBE,GAAuB,IAAXnB,EAAe,EAAIA,MAEnD,oBAAoB,GAEjB0B,EACJ,0BAAKpiB,UAAU,eAAesC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACtD,mBAACL,EAAA,EAAD,CACEC,OAAK,EACLE,MAAM,cACND,KAAK,UACLK,UAAWb,EAAK,SAChBY,QAASoG,GAET,wBAAGtG,UAAU,gBAEf,mBAACqiB,GAAA,EAAD,CACE7c,IAAK8b,EACLtR,MAAOuR,EACPzH,SAAUoI,EACVI,UAAWxB,EACXyB,YAAaf,KAKbgB,EAAiBnB,EAAejG,QAAQyG,EAAa,IAE3D,OACE,mBAACY,GAAA,EAAD,CACE9iB,OAAQA,EACRK,UAAU,mBACV0iB,OAAQN,EACR9b,QAASA,EACTsb,oBAAqBA,GAEpBC,MAAAA,GAAAA,EAAankB,OACZ,mBAACilB,GAAA,EAAD,CACEnd,IAAK2J,EACLnP,UAAU,4BACV4iB,MAAOf,EACPgB,WAAYf,EACZgB,yBAAuB,EACvBC,UAAW1B,EAAe3jB,OAASslB,EAAAA,GACnCV,UAAWxB,GAEVe,EAAYoB,KAAI,CAACzmB,EAAI0mB,IACpB,mBAACC,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,4CACV9C,MAAQ,SAAQslB,EAAiBU,GAAKF,EAAAA,QACtC9iB,QAAS,IAAMyhB,EAAmBnlB,KAEjC6b,EAAAA,EAAAA,IAAS7b,GACR,mBAAC4mB,GAAA,EAAD,CAAiBC,OAAQ7mB,IAAO4kB,EAAgB9hB,EAAK,0BAAuBW,EAAWqjB,OAAQ9mB,IAE/F,mBAAC+mB,GAAA,EAAD,CAAe9Y,OAAQjO,QAK7BqlB,IAAgBA,EAAYnkB,OAC9B,wBAAGsC,UAAU,cAAcV,EAAK,+BAEhC,mBAACkkB,GAAA,EAAD,UCfR,IAAe1lB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MACEylB,OACEC,KAAMC,EADD,QAELC,EAFK,iBAGLC,GAJE,cAMJzC,GACEpjB,EAEJ,MAAO,CACL2lB,UAAAA,EACAG,cAAeF,EAAQG,OACvBC,gBAAiBJ,EAAQK,SACzBC,UAAWL,EAAiBE,OAC5BI,WAAU,UAAEnmB,EAAOomB,mBAAT,aAAE,EAAoBC,QAChCjD,cAAAA,KAjBcrjB,EAhF6B,IAQ3C,IAR4C,UAChD4lB,EADgD,cAEhDG,EAFgD,gBAGhDE,EAHgD,UAIhDE,EAJgD,WAKhDC,EALgD,cAMhD/C,EANgD,OAOhDzhB,GACI,EACJ,MAAM,iBACJ2kB,EADI,gBAEJC,IACExlB,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNgiB,EAAQiD,IAAaljB,EAAAA,EAAAA,IAAS,IAE/BggB,GAAYvd,EAAAA,EAAAA,IAAyB,OAEpCsV,EAASoL,EAAaC,IAAiBC,EAAAA,GAAAA,MAC9CpjB,EAAAA,EAAAA,KAAU,KACJ5B,GACF8kB,MAED,CAAC9kB,EAAQ8kB,IAEZ,MAAMG,GAAoBnlB,EAAAA,EAAAA,KAAQ,KAChC,IAAKE,EACH,OAGF,IAAIklB,EAAcX,GAAa,GAC3B9C,IACFyD,GAAcC,EAAAA,GAAAA,IAAO,CAAC1D,KAAkByD,KAG1C,MAAME,EAAU,IACVjB,GAAiB,MACjBE,GAAmB,IACvBzC,QAAQ/kB,IACR,MAAMwc,EAAO2K,EAAUnnB,GAEvB,OAAOwc,IAAQgM,EAAAA,EAAAA,IAAiBhM,EAAMiM,EAAAA,OAIlCC,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAEpC,OAAO2B,EAAAA,EAAAA,KAAYP,EAAAA,GAAAA,IAAO,KACrBQ,EAAAA,EAAAA,IAAkBhmB,EAAMylB,EAASpB,EAAWpC,EAAQH,MACnD+C,GAAaoB,EAAAA,EAAAA,IAAkBpB,EAAYe,EAAW3D,GAAU,KAClEoC,OAAW1jB,EAAW4kB,KACzB,CAACf,EAAeE,EAAiBL,EAAWQ,EAAY/C,EAAeG,EAAQ5hB,EAAQL,EAAM4kB,IAE1FsB,GAAmBnmB,EAAAA,EAAAA,KAAaikB,IACpCgB,EAAiB,CAAE9nB,GAAI8mB,MACtB,CAACgB,IAEEmB,GAA6BC,EAAAA,GAAAA,GAAiBd,GAAmB,GAEvE,GAAKjlB,GAAW0Z,EAIhB,OACE,mBAAC,GAAD,CACE+H,cAAeA,EACfzhB,OAAQA,EACR0hB,cAAeoE,EACfnE,UAAWA,EACXE,kBAAmBliB,EAAK,aACxBiiB,OAAQA,EACRG,eAAgB8C,EAChB7C,mBAAoB6D,EACpBlf,QAASie,EACT3C,oBAAqB8C,Q,eC2D3B,SAASiB,GAAeC,GACtB,OAAIA,EAAMC,WACD,mBAGJD,EAAME,YAIJ,uBAHE,WAMX,UAAehoB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB+nB,EAAAA,GAAAA,IAAK/nB,EAAQ,CAAC,aADpBD,EA5JY,IAAiB,IAAhB,QAAEioB,GAAc,EAC/C,MAAM,cACJC,EADI,yBAEJC,EAFI,YAGJC,EAHI,iBAIJC,IACErnB,EAAAA,EAAAA,OACGsnB,EAAaC,EAAWC,IAAc5B,EAAAA,GAAAA,KAEvCrlB,GAAOC,EAAAA,EAAAA,KAoHSinB,IAAAA,EA1CQC,EAyBTb,EA3FrB,IANArkB,EAAAA,EAAAA,KAAU,KACJykB,EAAQtoB,OAAS,GACnB4oB,MAED,CAACN,EAASM,IAERN,EAAQtoB,OAwHb,OACE,0BAAKlB,GAAG,WACL0K,QAAQ8e,EAAQtoB,UAbf,SADgB8oB,EAcuBR,EAAQA,EAAQtoB,OAAS,IAxGhDgpB,CAAAA,IACpB,MAAM,KACJC,EADI,MACEC,EADF,MACSC,EADT,kBACgBC,EADhB,UACmCC,EADnC,MAC8Crb,EAD9C,gBACqDsb,GACvDN,EAYEO,EACF3nB,EADqBynB,EAChB,cACA,UADeD,EAAmB,KAGrCI,EAAuB5nB,EAAZynB,EAAiB,cAAsB,aAClDI,EACF7nB,EADsBynB,EACjB,sCAA8C,qCAEvD,OACE,mBAACtE,GAAA,EAAD,CACE9iB,OAAQ0mB,EACR/f,QAASigB,EACTvmB,UAAU,QACV0iB,OAAQ0E,EAAmBR,EAAOlb,GAClCkW,oBAAqBqE,QAEEhmB,IAAtB6mB,GAAmC,wBAAG9mB,UAAU,cAAcinB,GAC9DJ,GAAS,wBAAG7mB,UAAU,gBAAeiZ,EAAAA,GAAAA,GAAW4N,EAAO,CAAC,QACxDG,GACC,wBAAGhnB,UAAU,cAEPV,EADHynB,EACQ,iDACA,iDAGb,mBAACnnB,EAAA,EAAD,CAAQynB,QAAM,EAACrnB,UAAU,wBAAwBE,QAnC7B,KACtBgmB,EAAyB,CACvBS,KAAAA,IAEFP,EAAiB,CACfhpB,QAAqBkC,EAAZynB,EAAiB,sCAA8C,uCAE1ER,MA6BKS,EAAkBG,EAAoBD,GAEzC,mBAACtnB,EAAA,EAAD,CAAQynB,QAAM,EAACrnB,UAAU,wBAAwBE,QAASqmB,GAAajnB,EAAK,aAiDvEgoB,CAAad,GAGlB,gBAAiBA,GA/COC,EAgDED,EAvC5B,mBAAC/D,GAAA,EAAD,CACE9iB,OAAQ0mB,EACR/f,QAASigB,EACTvmB,UAAU,UACV4mB,MAAOtnB,EAAK,4BACZsiB,oBAAqBqE,GAEpB3mB,EAAK,mCACN,8BACE,mBAACM,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAjBjC,KACpBimB,EAAY,CACVoB,SAASxB,EAAAA,GAAAA,IAAKU,EAAgB,CAAC,YAAa,WAAY,kBAE1DF,MAa8EjnB,EAAK,OAC/E,mBAACM,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASqmB,GAAajnB,EAAK,eAM/DsmB,EA0BAY,EAxBjB,mBAAC/D,GAAA,EAAD,CACE9iB,OAAQ0mB,EACR/f,QAASigB,EACT3E,oBAAqBqE,EACrBjmB,UAAU,QACV4mB,MAAOjB,GAAeC,IAErBA,EAAME,aAAc0B,EAAAA,GAAAA,IAAqB5B,IAAS3M,EAAAA,GAAAA,GAAW2M,EAAMxoB,QAAU,CAAC,QAAS,OACxF,8BACE,mBAACwC,EAAA,EAAD,CAAQynB,QAAM,EAACnnB,QAASqmB,GAAajnB,EAAK,YAlGlD,SAAS8nB,EAAmBR,EAAelb,GACzC,OACE,0BAAK1L,UAAU,gBACZ0L,GAAS,mBAACoN,GAAA,EAAD,CAAQhZ,KAAK,QAAQ4L,MAAOA,IACtC,0BAAK1L,UAAU,gBACZiZ,EAAAA,GAAAA,GAAW2N,IAEd,mBAAChnB,EAAA,EAAD,CAAQC,OAAK,EAACE,MAAM,cAAcD,KAAK,UAAUK,UAAWb,EAAK,SAAUY,QAASqmB,GAClF,wBAAGvmB,UAAU,sB,eCtCvB,MAmBA,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB+nB,EAAAA,GAAAA,IAAK/nB,EAAQ,CAAC,mBADpBD,EAnBkB,IAAuB,IAAtB,cAAE0pB,GAAoB,EAC3D,MAAM,oBAAEC,IAAwB3oB,EAAAA,EAAAA,MAEhC,GAAK0oB,EAAc/pB,OAInB,OACE,0BAAKlB,GAAG,iBACLirB,EAAcxE,KAAI,QAAC,QAAE7lB,EAAF,QAAWuqB,GAAZ,SACjB,mBAACC,GAAA,EAAD,CACExqB,SAAS6b,EAAAA,GAAAA,GAAW7b,EAAS,CAAC,QAAS,KAAM,QAAS,oBACtDyqB,UAAW,IAAMH,EAAoB,CAAEC,QAAAA,c,0BCZjD,MA4BA,IAAe7pB,EAAAA,EAAAA,KA5BqB,IAAa,IAAZ,IAAEkI,GAAU,EAC/C,MAAM,oBAAE8hB,IAAwB/oB,EAAAA,EAAAA,MAE1BO,GAAOC,EAAAA,EAAAA,KAEPwoB,GAAa1oB,EAAAA,EAAAA,KAAY,KAC7B0C,OAAOimB,MAAKC,EAAAA,GAAAA,GAAejiB,IAC3B8hB,EAAoB,CAAE9hB,SAAK/F,MAC1B,CAAC6nB,EAAqB9hB,IAEnBkiB,GAAgB7oB,EAAAA,EAAAA,KAAY,KAChCyoB,EAAoB,CAAE9hB,SAAK/F,MAC1B,CAAC6nB,IAEEK,GAAezC,EAAAA,GAAAA,GAAiB1f,GAEtC,OACE,mBAACoiB,GAAA,EAAD,CACEzoB,OAAQuH,QAAQlB,GAChBM,QAAS4hB,EACTtB,MAAOtnB,EAAK,gBACZ8O,WAAW6K,EAAAA,GAAAA,GAAW3Z,EAAK,gBAAiB6oB,GAAe,CAAC,UAC5DE,aAAc/oB,EAAK,gBACnBgpB,eAAgBP,OCtBhBQ,GAAgB,aAkBhBC,GAAkB,CACtB,eACA,eACA,eACA,eACA,eACA,eACA,gBAkUF,SAASC,GAAcC,EAAcC,EAAeC,EAAaC,EAAgBC,GAC/E,MAAMC,EAAc,IAAIxX,KAAKmX,EAAMC,EAAOC,GACpCI,EAAeH,IAAWI,EAAAA,EAAAA,IAAYJ,GACtCK,EAAeJ,IAAWG,EAAAA,EAAAA,IAAYH,GAE5C,SAAII,GAAgBH,EAAcG,OAEvBF,GAAgBD,EAAcC,GAO3C,SAASG,GAAgBnZ,GACvB,OAAOoZ,OAAOpZ,GAAOqZ,SAAS,EAAG,KAGnC,SAASC,GAAUZ,EAAcC,EAAeC,GAC9C,MAAQ,GAAEF,KAAQC,EAAQ,KAAKC,IAcjC,UAAe9qB,EAAAA,EAAAA,KAhWqB,IAa9B,IAb+B,WACnCyrB,EADmC,MAEnCC,EAFmC,MAGnCC,EAHmC,aAInCC,EAJmC,WAKnCC,EALmC,OAMnChqB,EANmC,eAOnCiqB,EAPmC,kBAQnCC,EARmC,kBASnCC,EATmC,QAUnCxjB,EAVmC,SAWnCyjB,EAXmC,oBAYnCC,GACI,EACJ,MAAM1qB,GAAOC,EAAAA,EAAAA,KACPiS,EAAM,IAAID,KAEVsX,GAAUppB,EAAAA,EAAAA,KAAQ,IAClBiqB,IAAiBF,EAAc,IAAIjY,KAChC,IAAIA,KAAK7Q,KAAKoE,IAAI0kB,GA9CP,OA+CjB,CAACE,EAAcF,IACZV,GAAUrpB,EAAAA,EAAAA,KAAQ,IAClBkqB,IAAeF,EAAc,IAAIlY,KAC9B,IAAIA,KAAK7Q,KAAKqE,IAAI0kB,GAASlB,GAAeA,MAChD,CAACoB,EAAYF,IAEVQ,GAAqBxqB,EAAAA,EAAAA,KAAQ,IAAO8pB,EAAa,IAAIhY,KAAKgY,GAAc,IAAIhY,MAAS,CAACgY,IACtFW,GAAa1Q,EAAAA,EAAAA,GAAY7Z,IACxBwqB,EAAoBC,EAAwBC,IAA4B1F,EAAAA,GAAAA,IAAQ,IAEhF2F,EAAcC,IAAmBjpB,EAAAA,EAAAA,IAAe2oB,IAChDO,EAAqBC,IAA0BnpB,EAAAA,EAAAA,IACpD,IAAIiQ,KAAK+Y,EAAaI,cAAeJ,EAAaK,WAAY,KAEzDC,EAAeC,IAAoBvpB,EAAAA,EAAAA,IACxC6nB,GAAgBc,EAAmBa,cAE9BC,EAAiBC,IAAsB1pB,EAAAA,EAAAA,IAC5C6nB,GAAgBc,EAAmBgB,eAG/BlC,EAAcO,GAAUgB,EAAaI,cAAeJ,EAAaK,WAAYL,EAAaY,WAC1FC,EAAcX,EAAoBE,cAClCU,EAAeZ,EAAoBG,YAEzCppB,EAAAA,EAAAA,KAAU,MACH2oB,GAAcvqB,IACjB4qB,EAAgBN,GAChBQ,EAAuB,IAAIlZ,KAAK0Y,EAAmBS,cAAeT,EAAmBU,WAAY,IAC7Ff,IACFiB,EAAiB1B,GAAgBc,EAAmBa,aACpDE,EAAmB7B,GAAgBc,EAAmBgB,mBAGzD,CAAChB,EAAoBtqB,EAAQuqB,EAAYN,KAE5CroB,EAAAA,EAAAA,KAAU,KACJmoB,IAAiBS,GAAsBG,EAAae,UAAYxC,EAAQwC,YAC1Ed,EAAgB1B,GAChBgC,EAAiB1B,GAAgBN,EAAQiC,aACzCE,EAAmB7B,GAAgBN,EAAQoC,kBAE5C,CAACvB,EAAcS,EAAoBtB,EAASyB,KAE/C/oB,EAAAA,EAAAA,KAAU,KACJooB,IAAeQ,GAAsBG,EAAae,UAAYvC,EAAQuC,YACxEd,EAAgBzB,GAChB+B,EAAiB1B,GAAgBL,EAAQgC,aACzCE,EAAmB7B,GAAgBL,EAAQmC,kBAE5C,CAACvB,EAAcC,EAAYQ,EAAoBrB,EAASD,EAASyB,KAEpE/oB,EAAAA,EAAAA,KAAU,KACR,GAAIgoB,EAAY,CACd,MAAM+B,EAAkB,IAAI/Z,KAAKgY,GACjCgB,EAAgBe,GAChBT,EAAiB1B,GAAgBmC,EAAgBR,aACjDE,EAAmB7B,GAAgBmC,EAAgBL,kBAEpD,CAAC1B,IAEJ,MAAMgC,EAA0B5B,GAAcwB,GAAe3Z,EAAIkZ,eAAiBU,GAAgB5Z,EAAImZ,YAChG7B,GAAWqC,GAAerC,EAAQ4B,eAAiBU,GAAgBtC,EAAQ6B,WAC3Ea,EAAyB9B,GAAgByB,GAAe3Z,EAAIkZ,eAAiBU,GAAgB5Z,EAAImZ,YAEjG,cAAEc,EAAF,iBAAiBC,EAAjB,cAAmCC,IAAkBlsB,EAAAA,EAAAA,KAAQ,IA0MrE,SAA2BipB,EAAcC,GACvC,MAAM8C,EAA0B,GAC1BC,EAA6B,GAC7BC,EAA0B,GAE1BxS,EAAO,IAAI5H,KACjB4H,EAAKyS,QAAQ,GACbzS,EAAK0S,SAASlD,GACdxP,EAAK2S,YAAYpD,GACjB,MAAMqD,EAAW5S,EAAK6S,SAChBC,EAAuB,IAAI1a,KAAKmX,EAAMC,EAAO,GAAGuC,UAEtD,IAAK,IAAIhI,EAAI,EAAGA,EAAI6I,EAAU7I,IAC5BuI,EAAcS,KAAKD,EAAuBF,EAAW7I,EAAI,GAG3D,KAAO/J,EAAKwR,aAAehC,GAAO,CAChC,MAAMwD,EAAWhT,EAAK+R,UACtBQ,EAAiBQ,KAAKC,GACtBhT,EAAKyS,QAAQO,EAAW,GAG1B,MAAMC,GAAoBV,EAAiBhuB,OAAS+tB,EAAc/tB,QAAU,EAC5E,GAAI0uB,EAAmB,EACrB,IAAK,IAAIlJ,EAAI,EAAGA,GAAK,EAAIkJ,EAAkBlJ,IACzCyI,EAAcO,KAAKhJ,GAIvB,MAAO,CAAEuI,cAAAA,EAAeC,iBAAAA,EAAkBC,cAAAA,GAtOxCU,CAAkBlB,EAAaC,IAC9B,CAACA,EAAcD,IAEZmB,GAAc7sB,EAAAA,EAAAA,KAAQ,IACnBoqB,GA2PX,SAA2BvqB,EAAc6Z,GACvC,MAAMyP,GAAM2D,EAAAA,EAAAA,IAAmBpT,EAAM7Z,EAAKktB,MAG1C,OAAI5D,KAFU2D,EAAAA,EAAAA,IAAmB,IAAIhb,KAAQjS,EAAKktB,MAGzCltB,EAAK,0CAA0CmtB,EAAAA,EAAAA,IAAWntB,EAAM6Z,IAGlE7Z,EAAK,sCAAuC,CAACspB,GAAK6D,EAAAA,EAAAA,IAAWntB,EAAM6Z,KAnQ5CuT,CAAkBptB,EAAMgrB,IACnD,CAAChrB,EAAMgrB,EAAcT,IAmClB8C,GAAoBttB,EAAAA,EAAAA,KAAa+C,IACrC,MAAM4N,EAAQ5N,EAAE6G,OAAO+G,MAAM4c,QAAQ,UAAW,IAChD,IAAK5c,EAAMtS,OAGT,OAFAmtB,EAAiB,SACjBzoB,EAAE6G,OAAO+G,MAAQ,IAInB,MAAM6c,EAAQnsB,KAAKoE,IAAI,EAAGpE,KAAKqE,IAAIgV,OAAO/J,GAAQ,KAE5CmJ,EAAO,IAAI5H,KAAK+Y,EAAae,WACnClS,EAAK2T,SAASD,GACdtC,EAAgBpR,GAEhB,MAAM4T,EAAW5D,GAAgB0D,GACjChC,EAAiBkC,GACjB3qB,EAAE6G,OAAO+G,MAAQ+c,IAChB,CAACzC,IAEE0C,GAAsB3tB,EAAAA,EAAAA,KAAa+C,IACvC,MAAM4N,EAAQ5N,EAAE6G,OAAO+G,MAAM4c,QAAQ,UAAW,IAChD,IAAK5c,EAAMtS,OAGT,OAFAstB,EAAmB,SACnB5oB,EAAE6G,OAAO+G,MAAQ,IAInB,MAAMid,EAAUvsB,KAAKoE,IAAI,EAAGpE,KAAKqE,IAAIgV,OAAO/J,GAAQ,KAE9CmJ,EAAO,IAAI5H,KAAK+Y,EAAae,WACnClS,EAAK+T,WAAWD,GAChB1C,EAAgBpR,GAEhB,MAAMgU,EAAahE,GAAgB8D,GACnCjC,EAAmBmC,GACnB/qB,EAAE6G,OAAO+G,MAAQmd,IAChB,CAAC7C,IA4BJ,OACE,mBAAC7H,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACTtG,UAAU,iBAEV,0BAAKA,UAAU,aACb,0BAAKA,UAAU,kBACb,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAASoG,GAET,wBAAGtG,UAAU,gBAGf,6BACGV,EAAM,YAAW8rB,EAAe,KAChC,IACAD,GAGH,mBAACvrB,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACN4Z,SAAU6R,EACVtrB,QAAUsrB,OAA2CvrB,EA7H/D,WACEwqB,GAAwB2C,IACtB,MAAMC,EAAW,IAAI9b,KAAK6b,GAG1B,OAFAC,EAASxB,SAASwB,EAAS1C,WAAa,GAEjC0C,OA0HD,wBAAGrtB,UAAU,mBAGf,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACN4Z,SAAU4R,EACVrrB,QAAUqrB,OAA2CtrB,EA9H/D,WACEwqB,GAAwB2C,IACtB,MAAMC,EAAW,IAAI9b,KAAK6b,GAG1B,OAFAC,EAASxB,SAASwB,EAAS1C,WAAa,GAEjC0C,OA2HD,wBAAGrtB,UAAU,iBAKnB,0BAAKA,UAAU,oBACb,0BAAKA,UAAU,iBACZwoB,GAAgBvF,KAAK2F,GACpB,0BAAK5oB,UAAU,4BACb,+BAAOV,EAAKspB,OAGf6C,EAAcxI,KAAKkJ,GAClB,0BAAKnsB,UAAU,uBAAsB,+BAAOmsB,MAE7CT,EAAiBzI,KAAKkJ,GACrB,0BACEmB,KAAK,SACLC,SAAU,EACVrtB,QAAS,KAAMstB,OA1IDrU,EA0IkBgT,OAzI1C5B,GAAiB6C,IACf,MAAMC,EAAW,IAAI9b,KAAK6b,GAK1B,OAJAC,EAASzB,QAAQzS,GACjBkU,EAASxB,SAAST,GAClBiC,EAASvB,YAAYX,GAEdkC,KAPX,IAA0BlU,GA2IdnZ,WAAWmC,EAAAA,EAAAA,GACT,aACAsmB,GACE0C,EAAaC,EAAce,EAAUtD,EAASC,GAE5C,WACGqD,EAAW,YAAc,GAChCpD,IAAgBO,GAAU6B,EAAaC,EAAce,IAAa,aAGnEjlB,QAAQilB,IACP,+BAAOA,MAIZR,EAAc1I,KAAKkJ,GAClB,0BAAKnsB,UAAU,uBAAsB,+BAAOmsB,QAKjDvC,GAzGD,0BAAK5pB,UAAU,cACb,4BACE6Z,KAAK,OACL7Z,UAAU,eACVytB,UAAU,UACVzd,MAAO4a,EACP9Q,SAAU6S,EACVe,QAAStD,EACTuD,OAAQtD,IARZ,IAWE,4BACExQ,KAAK,OACL7Z,UAAU,eACVytB,UAAU,UACVzd,MAAO+a,EACPjR,SAAUkT,EACVU,QAAStD,EACTuD,OAAQtD,KAyFZ,0BAAKrqB,UAAU,UACb,mBAACJ,EAAA,EAAD,CAAQM,QAxJd,WACE6pB,EAASO,KAwJFgC,GAEFxC,GACC,mBAAClqB,EAAA,EAAD,CAAQM,QAAS8pB,EAAqB3C,QAAM,GACzCyC,QC3Rb,IAAehsB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CAAEurB,WAAYvrB,EAAO4vB,6BAFZ7vB,EAxB+B,IAE7C,IAF8C,OAClD4B,EADkD,WAC1C4pB,GACJ,EACJ,MAAM,qBAAEsE,EAAF,qBAAwBC,IAAyB/uB,EAAAA,EAAAA,MAEjDgvB,GAAmB1uB,EAAAA,EAAAA,KAAa8Z,IACpC0U,EAAqB,CAAEG,UAAW7U,EAAK8U,UAAY,MACnDH,MACC,CAACA,EAAsBD,IAEpBvuB,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAAC,GAAD,CACEI,OAAQA,EACR4pB,WAAYA,EACZI,YAAU,EACVE,kBAAmBvqB,EAAK,cACxBgH,QAASwnB,EACT/D,SAAUgE,QC4EhB,IAAejwB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAiD,IAAxC,QAAEZ,EAAF,WAAW8wB,GAA6B,EAC/C,MAAM,SAAExjB,IAAayjB,EAAAA,EAAAA,IAAyBnwB,IAAW,IACnD,gBAAEowB,GAAqB1jB,IAAY2jB,EAAAA,EAAAA,IAA4BrwB,EAAQZ,EAASsN,IAAc,GAC9FsO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQZ,EAAQqN,QAQxC,MAAO,CACL2jB,iBAAkBF,GAAcE,EAChCE,YATkBtV,IAAQX,EAAAA,EAAAA,IAASW,EAAKxc,KACtC+xB,EAAAA,EAAAA,KAAuBtjB,EAAAA,EAAAA,IAAWjN,GAAQwwB,EAAAA,EAAAA,IAAqBxV,UAC/D/Y,EAQFwuB,6BANmCzV,IAAQ0V,EAAAA,EAAAA,IAAiB1V,KAAUoV,EAOtEO,iBANuB3V,IAAQ4V,EAAAA,EAAAA,IAAiB5V,MAVlCjb,EAtEkC,IAUhD,IAViD,OACrD4B,EADqD,WAErDuuB,EAFqD,QAGrD9wB,EAHqD,MAIrDyxB,EAJqD,gBAKrDT,EALqD,YAMrDE,EANqD,6BAOrDG,EAPqD,iBAQrDE,EARqD,QASrDroB,GACI,EACJ,MAAM,eACJwoB,EADI,wBAEJC,IACEhwB,EAAAA,EAAAA,MAEEiwB,GAA4B3vB,EAAAA,EAAAA,KAAY,KAC5C,MAAM4b,EAAa4T,MAAAA,GAAAA,EAAOI,SACtBJ,EAAMI,SAAShM,KAAI,QAAC,GAAEzmB,GAAH,SAAYA,KAC/B,CAACY,EAAQZ,IACbsyB,EAAe,CAAE7T,WAAAA,EAAYiU,oBAAoB,IACjD5oB,MACC,CAACwoB,EAAgB1xB,EAAQZ,GAAI8J,EAASuoB,IAEnCM,GAA6B9vB,EAAAA,EAAAA,KAAY,KAC7C,MAAM4b,EAAa4T,MAAAA,GAAAA,EAAOI,SACtBJ,EAAMI,SAAShM,KAAI,QAAC,GAAEzmB,GAAH,SAAYA,KAC/B,CAACY,EAAQZ,IACT0xB,EACFa,EAAwB,CAAE9T,WAAAA,IAE1B6T,EAAe,CACb7T,WAAAA,EACAiU,oBAAoB,IAGxB5oB,MACC,CAACuoB,EAAOzxB,EAAQZ,GAAI0xB,EAAY5nB,EAASyoB,EAAyBD,IAE/DxvB,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACkjB,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACT8oB,QAASzvB,IAAWyuB,EAAkBe,OAA6BlvB,EACnED,UAAU,SACV4mB,MAAOtnB,EAAK,8BAEZ,4BAAIA,EAAK,kCACRmvB,GACC,4BAAInvB,EAAK,8BAA+B,EAAG,MAE5CqvB,GACC,4BAAIrvB,EAAK,+BAAgC,EAAG,MAE7C8uB,GACC,mBAACxuB,EAAA,EAAD,CAAQG,MAAM,SAASC,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAAS8uB,GACtEV,IAAerV,EAAAA,GAAAA,GAAW3Z,EAAK,iCAAkCgvB,KAChEA,GAAehvB,EAAK,2CAG1B,mBAACM,EAAA,EAAD,CAAQG,MAAM,SAASC,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASivB,GACtE7vB,EAAK8uB,EAAkB,gCAAkC,WAE5D,mBAACxuB,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASoG,GAAUhH,EAAK,gBCN/E,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAM4kB,GAAgBhX,EAAAA,EAAAA,IAAS5N,GACzB6kB,GAAiBC,EAAAA,EAAAA,IAAqBvxB,EAAQyM,GAC9CuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAC1Bsc,EAAY7f,QAAQ8R,KAASwW,EAAAA,EAAAA,IAAcxW,GAC3CyW,EAAUvoB,QAAQ8R,KAAS0V,EAAAA,EAAAA,IAAiB1V,GAC5C0W,EAAexoB,QAAQ8R,KAAS4V,EAAAA,EAAAA,IAAiB5V,GAMvD,MAAO,CACLqW,cAAAA,EACAC,eAAAA,EACAvI,UAAAA,EACA0I,QAAAA,EACAC,aAAAA,EACAC,aAXoBN,IAAkBC,GAAmBI,GAAgBD,EAYzEnB,YAXkBtV,IAAQX,EAAAA,EAAAA,IAASW,EAAKxc,KACtC+xB,EAAAA,EAAAA,KAAuBtjB,EAAAA,EAAAA,IAAWjN,GAAQwwB,EAAAA,EAAAA,IAAqBxV,UAC/D/Y,KAXYlC,EAhE+B,IAU7C,IAV8C,OAClD4B,EADkD,UAElDgL,EAFkD,OAGlDF,EAHkD,UAIlDsc,EAJkD,QAKlD0I,EALkD,aAMlDC,EANkD,aAOlDC,EAPkD,YAQlDrB,EARkD,QASlDhoB,GACI,EACJ,MAAM,WAAEspB,IAAe7wB,EAAAA,EAAAA,MAEjB8wB,GAAyBxwB,EAAAA,EAAAA,KAAY,KACzCuwB,EAAW,CACTnlB,OAAAA,EAAQE,UAAAA,EAAWmlB,SAAS,IAE9BxpB,MACC,CAACspB,EAAYnlB,EAAQE,EAAWrE,IAE7BypB,GAAmB1wB,EAAAA,EAAAA,KAAY,KACnCuwB,EAAW,CACTnlB,OAAAA,EAAQE,UAAAA,EAAWmlB,SAAS,EAAOE,WAAW,EAAMC,UAAU,IAEhE3pB,MACC,CAACmE,EAAQE,EAAWrE,EAASspB,IAE1BtwB,GAAOC,EAAAA,EAAAA,KAcb,OACE,mBAACkjB,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACTtG,UAAU,MACV4mB,MAAOtnB,EAAK,yBAEZ,4BAjBOA,EADLynB,EACU,yBAGV0I,GAAWC,EACD,kBAGF,wBAWV,mBAAC9vB,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAAS6vB,GACvDzwB,EAAK,cAEPqwB,GACC,mBAAC/vB,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAAS2vB,GACvDvB,GACGrV,EAAAA,GAAAA,GAAW3Z,EAAK,8BAA+BgvB,IAC/ChvB,EAAK,qDAGb,mBAACM,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASoG,GAAUhH,EAAK,gBCvD/E,IAAexB,EAAAA,EAAAA,KAxB6B,IAKtC,IALuC,OAC3C6B,EAD2C,oBAE3CuwB,EAAsB,EAFqB,QAG3C5pB,EAH2C,QAI3C6pB,GACI,EACJ,MAAM7wB,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACkjB,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACTtG,UAAU,YACV4mB,MAAOtnB,EAAK,+BAEZ,4BAAIA,EAAK,oCAAqC4wB,EAAqB,MACnE,mBAACtwB,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASiwB,GACvD7wB,EAAK,gBAER,mBAACM,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASoG,GAAUhH,EAAK,e,cCA/E,MA4EA,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAwC,IAA/B,WAAEkwB,GAA6B,EACtC,MAAQjT,WAAYmV,GAAuBpyB,EAAOqyB,kBAAoB,IAChE,gBAAEjC,IAAoBkC,EAAAA,EAAAA,IAAgCtyB,GACtDgb,GAAOuX,EAAAA,EAAAA,IAAkBvyB,GAQ/B,MAAO,CACLoyB,mBAAAA,EACAhC,iBAAkBF,GAAcE,EAChCE,YAVkBtV,IAAQX,EAAAA,EAAAA,IAASW,EAAKxc,KACtC+xB,EAAAA,EAAAA,KAAuBtjB,EAAAA,EAAAA,IAAWjN,GAAQwwB,EAAAA,EAAAA,IAAqBxV,UAC/D/Y,EASFwuB,6BAPmCzV,IAAQ0V,EAAAA,EAAAA,IAAiB1V,KAAUoV,EAQtEO,iBAPuB3V,IAAQ4V,EAAAA,EAAAA,IAAiB5V,MAVlCjb,EA5E0C,IASxD,IATyD,OAC7D4B,EAD6D,WAE7DuuB,EAF6D,mBAG7DkC,EAH6D,gBAI7DhC,EAJ6D,YAK7DE,EAL6D,6BAM7DG,EAN6D,iBAO7DE,EAP6D,QAQ7DroB,GACI,EACJ,MAAM,eACJwoB,EADI,wBAEJC,EAFI,sBAGJyB,IACEzxB,EAAAA,EAAAA,MAEEmrB,GAAa1Q,EAAAA,EAAAA,GAAY7Z,GAEzBqvB,GAA4B3vB,EAAAA,EAAAA,KAAY,KAC5CiH,IACAwoB,EAAe,CAAE7T,WAAYmV,EAAoBlB,oBAAoB,MACpE,CAACJ,EAAgBsB,EAAoB9pB,IAElC6oB,GAA6B9vB,EAAAA,EAAAA,KAAY,KACzC6uB,EACFa,EAAwB,CAAE9T,WAAYmV,IAEtCtB,EAAe,CAAE7T,WAAYmV,EAAoBlB,oBAAoB,IAGvE5oB,MACC,CAAC4nB,EAAY5nB,EAASyoB,EAAyBqB,EAAoBtB,IAEhExvB,GAAOC,EAAAA,EAAAA,KASb,IANAgC,EAAAA,EAAAA,KAAU,MACH5B,GAAUuqB,GACbsG,MAED,CAACA,EAAuB7wB,EAAQuqB,IAE9BkG,EAIL,OACE,mBAAC3N,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACT8oB,QAAShB,OAAkBnuB,EAAYkvB,EACvCnvB,UAAU,SACV4mB,MAAOtnB,EAAK,oCAEZ,4BAAIA,EAAK,gCACRmvB,GACC,2GAEDE,GACC,gFAEDP,GACC,mBAACxuB,EAAA,EAAD,CAAQG,MAAM,SAASC,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAAS8uB,GACtEV,GACGrV,EAAAA,GAAAA,GAAW3Z,EAAK,6BAA8BgvB,IAC9ChvB,EAAK,2CAGb,mBAACM,EAAA,EAAD,CAAQG,MAAM,SAASC,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASivB,GACtE7vB,EAAK8uB,EAAkB,gCAAkC,WAE5D,mBAACxuB,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASoG,GAAUhH,EAAK,gB,eCnF/E,MAqEA,IAAexB,EAAAA,EAAAA,KArE0B,IAInC,IAJoC,OACxC6B,EADwC,WAExCsb,EAFwC,QAGxC3U,GACI,EACJ,MAAM,eACJmqB,EADI,sBAEJD,IACEzxB,EAAAA,EAAAA,OAEG2xB,EAAgBC,IAAqBrvB,EAAAA,EAAAA,IAA0B,SAC/DsvB,EAAaC,IAAkBvvB,EAAAA,EAAAA,IAAS,IAEzCwvB,EAAe,KACnBL,EAAe,CAAExV,WAAAA,EAAY8V,OAAQL,EAAgBE,YAAAA,IACrDJ,IACAlqB,KAGI0qB,GAAqB3xB,EAAAA,EAAAA,KAAa2Q,IACtC2gB,EAAkB3gB,KACjB,IAEGihB,GAA0B5xB,EAAAA,EAAAA,KAAa+C,IAC3CyuB,EAAezuB,EAAE6G,OAAO+G,SACvB,IAEG1Q,GAAOC,EAAAA,EAAAA,KAEP2xB,EAA8D,CAClE,CAAElhB,MAAO,OAAQmhB,MAAO7xB,EAAK,2BAC7B,CAAE0Q,MAAO,WAAYmhB,MAAO7xB,EAAK,+BACjC,CAAE0Q,MAAO,cAAemhB,MAAO7xB,EAAK,kCACpC,CAAE0Q,MAAO,aAAcmhB,MAAO7xB,EAAK,kCACnC,CAAE0Q,MAAO,YAAamhB,MAAO7xB,EAAK,+BAClC,CAAE0Q,MAAO,QAASmhB,MAAO7xB,EAAK,6BAGhC,GAAK2b,EAIL,OACE,mBAACwH,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACT8oB,QAASzvB,EAASmxB,OAAe7wB,EACjCD,UAAU,SACV4mB,MAAOtnB,EAAK,6BAEZ,mBAAC8xB,GAAA,EAAD,CACEjQ,KAAK,iBACLkQ,QAASH,EACTpX,SAAUkX,EACVM,SAAUZ,IAEZ,mBAACrO,GAAA,EAAD,CACE8O,MAAO7xB,EAAK,iCACZ0Q,MAAO4gB,EACP9W,SAAUmX,IAEZ,mBAACrxB,EAAA,EAAD,CAAQG,MAAM,SAASC,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAAS4wB,GACtExxB,EAAK,sBAER,mBAACM,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASoG,GAAUhH,EAAK,eCyE/E,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQ6b,KAAM0X,EAAR,OAAyB9mB,IAAW0jB,EAAAA,EAAAA,IAAyBnwB,IAAW,IACxE,UAAEwzB,IAAclB,EAAAA,EAAAA,IAAgCtyB,GAChDyzB,GAAYC,EAAAA,EAAAA,IAAgC1zB,GAC5C2zB,GAAcC,EAAAA,EAAAA,IAAkC5zB,IAC9Cid,WAAYmV,GAAuBpyB,EAAOqyB,kBAAoB,GAChEwB,IAAsBpnB,IAASqnB,EAAAA,EAAAA,IAA0B9zB,EAAQyM,EAAQ2lB,GAE/E,MAAO,CACLlC,WAAgC,cAApBqD,EACZQ,uBAAuBC,EAAAA,EAAAA,IAA4Bh0B,GACnDi0B,kBAAmBT,EACnBU,kBAAmBT,EACnBU,oBAAqBR,EACrBvB,mBAAAA,EACAyB,oBAAAA,KAhBc9zB,EAnHoC,IAWlD,IAXmD,QACvDq0B,EADuD,SAEvD/mB,EAFuD,gBAGvDkmB,EAHuD,WAIvDrD,EAJuD,sBAKvD6D,EALuD,kBAMvDE,EANuD,kBAOvDC,EAPuD,oBAQvDC,EARuD,oBASvDN,EATuD,mBAUvDzB,GACI,EACJ,MAAM,sBACJI,EADI,mCAEJ6B,EAFI,yBAGJC,IACEvzB,EAAAA,EAAAA,OAEGwzB,EAAmBC,EAAiBC,IAAoB9N,EAAAA,GAAAA,MACxD+N,EAAmBC,EAAiBC,IAAoBjO,EAAAA,GAAAA,MAE/DpjB,EAAAA,EAAAA,KAAU,KACD8J,GAAaknB,GAAsBG,OAMtCzyB,GALA4yB,EAAAA,GAAAA,GAAyB,CACzBC,YAAaN,EACbO,SAAUP,EACVQ,MAAOxC,KAGV,CAACnlB,EAAUknB,EAAmBG,EAAmBF,EAAiBhC,IAErE,MAAMyC,GAAiB5zB,EAAAA,EAAAA,KAAY,KACjCizB,IACA9B,MACC,CAAC8B,EAA0B9B,IAExB0C,GAA4B1Z,EAAAA,EAAAA,GAAYuY,QAAyB9xB,GAAW,GAC5EkzB,EAAiC9nB,EAAW0mB,EAAwBmB,EAEpE5zB,GAAOC,EAAAA,EAAAA,KAEP6zB,EAAyB9zB,EAAK,kCAAmC6zB,EAAgC,KAEjGnzB,GAAYmC,EAAAA,EAAAA,GAChB,uBACAiwB,GAAW,gBACX/mB,GAAY,SAGRgoB,EAAe,CACnB5yB,EAAc0wB,EAAejxB,EAA4ByZ,EAAoB2Z,IAG3E,0BACEhG,KAAK,SACLC,SAAU,EACVvtB,WAAWmC,EAAAA,EAAAA,GACT,OACAwX,GAAY,WACZ2Z,GAAe,eAEjBpzB,QAAUyZ,OAAqB1Z,EAAVC,EACrB0mB,MAAOuK,GAEP,wBAAGnxB,UAAY,QAAOS,OAK5B,OACE,0BAAKT,UAAWA,GACd,0BAAKA,UAAU,8BACb,mBAACJ,EAAA,EAAD,CACEG,MAAM,cACNF,OAAK,EACLK,QAASswB,EACTrwB,UAAU,oBAEV,wBAAGH,UAAU,gBAEf,2BAAMA,UAAU,6BAA6B4mB,MAAOwM,GACjDA,GAGFlsB,QAAQ6qB,IACP,0BAAK/xB,UAAU,gCACQ,cAApBuxB,GACC8B,EACE,UAAW/zB,EAAK,4BAA6B+yB,EAAoCR,GAGpFK,GACCmB,EAAa,OAAQ/zB,EAAK,+BAAgCqzB,GAE3DR,GACCkB,EAAa,WAAY/zB,EAAK,sBAAuB2zB,EAAgBpB,GAEtEwB,EAAa,SAAU/zB,EAAK,gCAAiCkzB,GAAkBP,GAAmB,KAIzG,mBAAC,GAAD,CACEtyB,OAAQ4yB,EACRrE,WAAYA,EACZ5nB,QAASmsB,IAEX,mBAAC,GAAD,CACE9yB,OAAQ+yB,EACRpsB,QAASssB,EACT3X,WAAYmV,SCjFpB,IAAetyB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MAAM,OAAEyM,EAAF,UAAUE,GAAc3M,EAAOu1B,aAAe,GACpD,OAAK9oB,GAAWE,EAIT,CACL6oB,UAAS,WAAE1oB,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,UAApC,aAAE,EAA8C8oB,eAJlD,KAJO11B,EAlD2B,IAGzC,IAH0C,OAC9C4B,EAD8C,UAE9C6zB,GACI,EACJ,MAAM,SACJE,EADI,iBAEJC,IACE50B,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,KAEPq0B,GAAcv0B,EAAAA,EAAAA,KAAaikB,IAC/BqQ,IAEAzvB,YAAW,KACTwvB,EAAS,CAAEl3B,GAAI8mB,MAjBY,OAmB5B,CAACqQ,EAAkBD,IAEhBG,GAAqBnO,EAAAA,GAAAA,GAAiB8N,GAAW,GAEvD,OACE,mBAAC/Q,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASqtB,EACT3zB,UAAU,SACV4mB,MAAM,gCAEN,0BAAKtkB,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC5B4zB,GAAsBA,EAAmB5Q,KAAKK,GAC7C,mBAACH,GAAA,EAAD,CACE3Z,IAAK8Z,EACLtjB,UAAU,6CACVE,QAAS,IAAM0zB,EAAYtQ,IAE3B,mBAACF,GAAA,EAAD,CAAiBE,OAAQA,EAAQwQ,kBAAgB,QAIvD,mBAACl0B,EAAA,EAAD,CACEI,UAAU,wBACVqnB,QAAM,EACNnnB,QAASyzB,GAERr0B,EAAK,e,0BCtCd,MAiKA,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,OAAEyM,EAAF,UAAUE,GAAc3M,EAAO+1B,cAAgB,GAC/C32B,EAAUqN,GAAUE,GAAYG,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,QAAa1K,EAErF,MAAO,CACLwK,OAAAA,EACAE,UAAAA,EACAqpB,UAAW52B,MAAAA,OAAF,EAAEA,EAAS42B,UACpBC,SAAU72B,MAAAA,OAAF,EAAEA,EAAS62B,SACnBR,cAAer2B,MAAAA,OAAF,EAAEA,EAASq2B,iBAVV11B,EAtJgC,IAO9C,IAP+C,OACnD4B,EADmD,SAEnDs0B,EAFmD,UAGnDD,EAHmD,OAInDvpB,EAJmD,UAKnDE,EALmD,cAMnD8oB,GACI,EACJ,MAAM,aACJS,EADI,sBAEJC,EAFI,SAGJT,IACE30B,EAAAA,EAAAA,MAGEmmB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAE9BpkB,GAAOC,EAAAA,EAAAA,MACN60B,EAAWC,EAAcC,IAAe3P,EAAAA,GAAAA,IAAQ,IAChD4P,EAAWC,IAAgBlzB,EAAAA,EAAAA,SAA6BrB,GACzDw0B,EAAiBR,GAAYD,GAAaC,EAASS,OA/BnB,IAgCjCV,EAAUW,QAAQj3B,OAAS,EAC1Bk3B,GAAY7wB,EAAAA,EAAAA,OAElBxC,EAAAA,EAAAA,KAAU,KACJ6yB,IAAcz0B,IAChB20B,IACAE,OAAav0B,MAEd,CAACm0B,EAAWz0B,EAAQ20B,IAEvB,MAAMO,GAA0Bx1B,EAAAA,EAAAA,KAAY,KACtCu1B,EAAUrwB,SACZmvB,EAAS,CAAEl3B,GAAIo4B,EAAUrwB,UAE3B4vB,MACC,CAACA,EAAuBT,IAErBoB,GAAcz1B,EAAAA,EAAAA,KAAY,KAC9Bg1B,MACC,CAACA,IAEET,GAAcv0B,EAAAA,EAAAA,KAAaikB,IAC/BsR,EAAUrwB,QAAU+e,EACpBwR,MACC,CAACA,IAEEC,GAAiB11B,EAAAA,EAAAA,KAAY,KACjC60B,EAAa,CACXzpB,OAAAA,EACAE,UAAAA,MAED,CAACF,EAAQypB,EAAcvpB,IAEpBqqB,GAAev1B,EAAAA,EAAAA,KAAQ,IACpBw0B,MAAAA,GAAAA,EAAUD,WAAYlP,EAAAA,GAAAA,IAAOmP,EAASD,UAAU/Q,KAAKgS,GAAMA,EAAEC,YAAa,IAChF,CAACjB,MAAAA,OAAD,EAACA,EAAUD,YAER3P,GAAU5kB,EAAAA,EAAAA,KAAQ,IAClB80B,EACKN,MAAAA,OAAP,EAAOA,EAAUD,UAAUzS,QAAQ0T,GAAMA,EAAEC,WAAaX,IAAWtR,KAAKgS,GAAMA,EAAE3R,UAE3EwB,EAAAA,GAAAA,KAAOmP,MAAAA,OAAA,EAAAA,EAAUD,UAAU/Q,KAAKgS,GAAMA,EAAE3R,SAAQ6R,OAAO1B,GAAiB,MAAO,KACrF,CAACc,EAAWN,MAAAA,OAAZ,EAAYA,EAAUD,UAAWP,KAE7B5R,EAAaC,IAAWC,EAAAA,GAAAA,GAC7BgT,EAAgB1Q,EAAS4P,QAAoCh0B,IAAxBg0B,EAASmB,YAOhD,OAJA7zB,EAAAA,EAAAA,KAAU,KACRugB,MAAAA,GAAAA,EAAU,CAAElQ,UAAWyjB,EAAAA,GAAAA,cACtB,CAACvT,IAGF,mBAACW,GAAA,EAAD,CACE9iB,OAAQA,IAAWy0B,EACnB9tB,QAASwuB,EACT90B,UAAU,0BACV4mB,MAAOtnB,EAAK,aACZsiB,oBAAqBiT,GAEpBJ,GACC,0BAAKz0B,UAAU,aACb,mBAACJ,EAAA,EAAD,CACEI,WAAWmC,EAAAA,EAAAA,IAAgBoyB,GAAa,UACxCz0B,KAAK,OACL4F,QAAM,EACNxF,QAAS,IAAMs0B,OAAav0B,IAE5B,wBAAGD,UAAU,0BACZi0B,MAAAA,OAAA,EAAAA,EAAUS,SAASY,EAAAA,GAAAA,IAAqBrB,EAASS,QAEnDM,EAAa/R,KAAKiS,IAAa,MAC9B,MAAMR,EAAQV,MAAAA,GAAH,UAAGA,EAAWW,QAAQY,MAAMN,GAAMA,EAAEC,WAAaA,WAAjD,aAAG,EAAyDR,MACvE,OACE,mBAAC90B,EAAA,EAAD,CACEI,WAAWmC,EAAAA,EAAAA,GAAeoyB,IAAcW,GAAY,UACpDp1B,KAAK,OACL4F,QAAM,EACNxF,QAAS,IAAMs0B,EAAaU,IAE5B,mBAACM,GAAA,EAAD,CAAqBN,SAAUA,EAAUl1B,UAAU,0BAClD00B,IAASY,EAAAA,GAAAA,IAAqBZ,QAOzC,0BAAKpyB,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC5B4hB,MAAAA,GAAAA,EAAankB,OACZ,mBAACilB,GAAA,EAAD,CACE3iB,UAAU,6BACV4iB,MAAOf,EACPgB,WAAYf,GAEXD,MAAAA,OALH,EAKGA,EAAaoB,KACXK,IAAW,MACV,MAAMvK,EAAOmM,EAAU5B,GACjBmS,GAAWC,EAAAA,EAAAA,IAAgB3c,GAC3Bmc,EAAWjB,MAAAA,GAAH,UAAGA,EAAUD,UAAUuB,MAAMN,GAAMA,EAAE3R,SAAWA,WAAhD,aAAG,EAAsD4R,SACvE,OACE,mBAAC/R,GAAA,EAAD,CACE3Z,IAAK8Z,EACLtjB,UAAU,yCACVE,QAAS,IAAM0zB,EAAYtQ,IAE3B,mBAACxK,GAAA,EAAD,CAAQC,KAAMA,EAAMjZ,KAAK,WACzB,0BAAKE,UAAU,SACb,yBAAIsC,IAAI,QAAQmzB,IAAYxc,EAAAA,GAAAA,GAAWwc,KAExCP,GAAY,mBAACM,GAAA,EAAD,CAAqBx1B,UAAU,sBAAsBk1B,SAAUA,SAMpF,mBAAC1R,GAAA,EAAD,OAEN,mBAAC5jB,EAAA,EAAD,CACEI,UAAU,wBACVqnB,QAAM,EACNnnB,QAASi0B,GAER70B,EAAK,e,0BCxJd,MAgGA,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoD,IAA3C,uBAAE23B,GAAyC,EAClD,MAAMC,OAA2D31B,IAA1C01B,EAAuBC,iBACzCC,EAAAA,EAAAA,IAA0B73B,EAAQ23B,EAAuBC,gBAC9D,MAAO,CACLE,kBAAmBF,EAAiBA,EAAep5B,QAAKyD,EACxD81B,sBAAuBH,GAAkBD,EAAuBC,gBAC7D54B,OAAOg5B,KAAKC,GAAAA,GAAyBx5B,SAASk5B,EAAuBC,gBACpED,EAAuBC,oBAAiB31B,KAR9BlC,EA5FyC,IAIvD,IAJwD,kBAC5D+3B,EAD4D,qBAE5DC,EAF4D,uBAG5DJ,GACI,EACJ,MAAM,2BAAEO,IAA+Bn3B,EAAAA,EAAAA,OAEhCo3B,EAAUC,IAAezR,EAAAA,GAAAA,IAAQ,IACjC0R,EAAWC,IAAgB3R,EAAAA,GAAAA,IAAQ,GACpC4R,GAAaxyB,EAAAA,EAAAA,MAEbyyB,GAAOn3B,EAAAA,EAAAA,KAAY,KACvB+2B,IACIG,EAAWhyB,SACbJ,aAAaoyB,EAAWhyB,SAE1BL,YAAW,KACTgyB,EAA2B,CAAE15B,GAAIm5B,EAAuBn5B,OArB9B,OAuB3B,CAACm5B,EAAuBn5B,GAAI45B,EAAaF,IAEtCO,GAAwBp3B,EAAAA,EAAAA,KAAa+C,IAAe,MACpD,UAAEA,EAAE6G,cAAJ,OAAC,EAA2B1M,QAAQ,mBACtCi6B,MAED,CAACA,KAEJj1B,EAAAA,EAAAA,KAAU,KACRvG,SAASgH,iBAAiB,aAAcy0B,GACxCz7B,SAASgH,iBAAiB,YAAay0B,GACvCz7B,SAASgH,iBAAiB,YAAay0B,GACvCz7B,SAASgH,iBAAiB,QAASy0B,GAE5B,KACLz7B,SAASiH,oBAAoB,aAAcw0B,GAC3Cz7B,SAASiH,oBAAoB,YAAaw0B,GAC1Cz7B,SAASiH,oBAAoB,YAAaw0B,GAC1Cz7B,SAASiH,oBAAoB,QAASw0B,MAEvC,CAACA,KAEJtvB,EAAAA,EAAAA,KAAgB,KACd,MAAMuvB,GAA6Bha,EAAAA,EAAAA,MAEnC6Z,EAAWhyB,QAAUL,YAAW,KAC9BsyB,IACAE,MAjDmB,OAmDpB,CAACF,IAEJ,MAAMG,GAAsB7pB,EAAAA,EAAAA,GAAU,UAASgpB,KAAsBA,EAAmB/oB,EAAAA,GAAAA,SAEjF6pB,EAA0BC,IAA+Bv1B,EAAAA,EAAAA,MAShE,IARAC,EAAAA,EAAAA,KAAU,KACJw0B,IACFe,EAAAA,GAAAA,GAAiBf,GAA8DgB,MAAMC,IACnFH,EAA4BG,QAG/B,CAACjB,KAECJ,EAAuBsB,UAC1B,OAGF,MAAMznB,GAASmmB,EAAuBsB,WAAa,GAnEjC,IAqElB,OACE,0BACEj3B,WAAWmC,EAAAA,EAAAA,GACT,4BACAg0B,GAAY,SACZE,GAAa,UACbV,EAAuBuB,YAAc,YAEvCh6B,MAAQ,YAAWsS,iBAAqBmmB,EAAuBrmB,mBAAmBqmB,EAAuBpmB,QAEzG,mBAAC4nB,GAAA,EAAD,CACE3tB,IAAM,UAASssB,IACft5B,GAAK,UAASs5B,IACdh2B,KAlFY,IAmFZs3B,cAAeR,GAA4BD,EAC3CU,KAAMhB,EACNiB,QAASC,EAAAA,GAAa,QAAMt3B,EAC5BqgB,uBAAqB,EACrBkX,QAAM,EACNC,OAAQnB,S,oCCvHhB,MAwBA,GAvBEoB,IAGA,MAAMC,GAAY5zB,EAAAA,EAAAA,IAAuB,MAEnC+c,GAAgBzhB,EAAAA,EAAAA,KAAa+C,IACnB,UAAVA,EAAEoH,KACYmuB,EAAUpzB,UAAYvJ,SAAS48B,eAG/CF,MAED,CAACA,IAQJ,OANAn2B,EAAAA,EAAAA,KAAU,KACRQ,OAAOC,iBAAiB,UAAW8e,GAAe,GAE3C,IAAM/e,OAAOE,oBAAoB,UAAW6e,GAAe,KACjE,CAACA,IAEG6W,G,wBCYT,MA2DA,IAAe75B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAC1BotB,EAAoB7e,IAAQwV,EAAAA,EAAAA,IAAqBxV,GAOvD,MAAO,CACLA,KAAAA,EACAD,KARW8e,GAAoB5sB,EAAAA,EAAAA,IAAWjN,EAAQ65B,QAAqB53B,EASvE63B,UAReC,EAAAA,EAAAA,IAAmB/5B,EAAQyM,GAS1CutB,QARchf,GACZif,EAAAA,EAAAA,IAAkBjf,GAAMkf,EAAAA,EAAAA,IAAqBl6B,IAASm6B,EAAAA,EAAAA,IAAuBn6B,SAC7EiC,EAOFm4B,gBAAiBlxB,QAAO,UAAClJ,EAAOq6B,YAAYC,kBAApB,aAAC,EAA+B56B,WAf1CK,EA3DoC,IASlD,IATmD,OACvD0M,EADuD,aAEvD8tB,EAFuD,QAGvDr4B,EAHuD,KAIvD8Y,EAJuD,KAKvDD,EALuD,SAMvD+e,EANuD,QAOvDE,EAPuD,gBAQvDI,GACI,EACJ,MAAO7F,EAAmBC,EAAiBC,IAAoB9N,EAAAA,GAAAA,MACxD6T,EAAuBC,EAAqBC,IAAwB/T,EAAAA,GAAAA,KAErEgU,GAAiBC,EAAAA,GAAAA,GAAsB,CAC3C5f,KAAAA,EACAD,KAAAA,EACA+e,SAAAA,EACAE,QAAAA,EACAI,gBAAAA,EACAS,aAAcrG,EACdsG,uBAAwBL,IACvB,GAEG7E,EAAc,KAClB1zB,EAAQuK,IAGJktB,EAAYoB,GAAmBnF,GAErC,GAAK5a,EAIL,OACE,mBAACmK,GAAA,EAAD,CACEnjB,UAAU,oCACVE,QAAS0zB,EACT+E,eAAgBA,EAChBhB,UAAWA,IAEVtf,EAAAA,EAAAA,IAAS5N,GACR,mBAAC2Y,GAAA,EAAD,CAAiBE,OAAQ7Y,EAAQ8tB,aAAcA,EAAcS,WAAW,UAExE,mBAACzV,GAAA,EAAD,CAAe9Y,OAAQA,EAAQ8tB,aAAcA,EAAcS,WAAW,UAExE,mBAACC,GAAA,EAAD,CACEt5B,OAAQ4yB,EACRjsB,QAASmsB,EACTzZ,KAAMA,IAER,mBAAC,KAAD,CACErZ,OAAQ64B,EACRlyB,QAASoyB,EACTjuB,OAAQA,S,eC3DhB,MAGMyuB,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GA8EnD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQqmB,QAAS+U,GAAep7B,EAAOq7B,SACjCnU,EAAYlnB,EAAOonB,MAAM1B,MACzB,qBAAE4V,GAAyBt7B,EAAOu7B,aAExC,MAAO,CACLH,WAAAA,EACAlU,UAAAA,EACAoU,qBAAAA,KATcv7B,EA5E8B,IAG5C,IAH6C,WACjDq7B,EADiD,UACrClU,EADqC,qBAC1BoU,EAD0B,QAEjDE,GACI,EACJ,MAAM,aACJC,EADI,gBACUC,EADV,SAC2BhG,EAD3B,uBAEJiG,EAFI,wBAEoBC,IACtB76B,EAAAA,EAAAA,MAGE86B,GAAc91B,EAAAA,EAAAA,IAAuB,OAI3CxC,EAAAA,EAAAA,KAAU,KACR23B,IAAa,KACXO,IAEAC,SAED,CAACD,EAAcC,KAElBI,EAAAA,GAAAA,GAAoBD,EAAYt1B,SAAU60B,GAE1C,MAAMxF,GAAcv0B,EAAAA,EAAAA,KAAa7C,IAC/Bk3B,EAAS,CAAEl3B,GAAAA,EAAIu9B,sBAAsB,IACrCP,IACAt1B,YAAW,KACTy1B,EAAuB,CAAEn9B,GAAAA,MAjCC,OAmC3B,CAACk3B,EAAUiG,EAAwBH,IAEhCl6B,GAAOC,EAAAA,EAAAA,KAEb,OACE,0BAAKS,UAAU,gCACZo5B,GACC,0BAAKp5B,UAAU,oBAAoBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC3D,0BAAKuF,IAAKq0B,EAAa75B,UAAU,0BAC9Bo5B,EAAWnW,KAAKK,GACf,0BAAKtjB,UAAU,gBAAgBE,QAAS,IAAM0zB,EAAYtQ,GAAShhB,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC3F,mBAAC6Y,GAAA,EAAD,CAAQC,KAAMmM,EAAU5B,KACxB,0BAAKtjB,UAAU,kBAAiBiZ,EAAAA,GAAAA,IAAWsV,EAAAA,EAAAA,IAAuBrJ,EAAU5B,KA9C/E,WAoDNgW,GACC,0BAAKt5B,UAAU,uBACb,yBAAIA,UAAU,2CAA2CsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAChFX,EAAK,UAEN,mBAACM,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNI,UAAU,qBACVD,QAAS05B,EACT3Y,MAAO3hB,EAAK2hB,OAEZ,wBAAGjhB,UAAU,iBAGhBs5B,EAAqBrW,KAAKzmB,GACzB,mBAAC,GAAD,CACEiO,OAAQjO,EACR0D,QAAS0zB,Y,0BCuBvB,UAAe91B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAChC,IAAKuO,EACH,MAAO,GAGT,MAAM6e,GAAoBrJ,EAAAA,EAAAA,IAAqBxV,GAE/C,MAAO,CACLA,KAAAA,EACAghB,aAAch8B,EAAOg8B,gBACjBnC,GAAqB,CAAEoC,iBAAiBhvB,EAAAA,EAAAA,IAAWjN,EAAQ65B,OAZjD95B,EA9E2B,IAOzC,IAP0C,QAC9CX,EAD8C,YAE9C88B,EAF8C,OAG9CzvB,EAH8C,KAI9CuO,EAJ8C,gBAK9CihB,EAL8C,aAM9CD,GACI,EACJ,MAAM,aAAExhB,IAAiBzZ,EAAAA,EAAAA,MAEnBo7B,GAAiB1sB,EAAAA,EAAAA,IAA4BrQ,GAC7Cg9B,GAAettB,EAAAA,EAAAA,IAAS3N,EAAAA,EAAAA,IAAoB/B,EAAS,UACrDi9B,EAAenzB,SAAQozB,EAAAA,EAAAA,IAAqBl9B,IAE5Cw2B,GAAcv0B,EAAAA,EAAAA,KAAY,KAC9BmZ,EAAa,CAAE/N,OAAAA,EAAQE,UAAWvN,EAAQZ,OACzC,CAACiO,EAAQ+N,EAAcpb,EAAQZ,KAE5B8C,GAAOC,EAAAA,EAAAA,KAEPo4B,EAAYoB,GAAmBnF,GAErC,GAAK5a,EAIL,OACE,mBAACmK,GAAA,EAAD,CACEnjB,UAAU,kCACV0F,QAAStF,EAAAA,GACTF,QAAS0zB,EACT+D,UAAWA,GAEX,mBAAC7e,GAAA,EAAD,CACEE,KAAMA,EACND,KAAMkhB,EACNM,gBAAiBN,MAAAA,OAAF,EAAEA,EAAiBO,OAClCR,aAAcA,IAEhB,0BAAKh6B,UAAU,QACb,0BAAKA,UAAU,YACb,0BAAKA,UAAU,SACb,yBAAIsC,IAAI,SAAQ2W,EAAAA,GAAAA,IAAWwhB,EAAAA,EAAAA,GAAan7B,EAAM0Z,EAAMihB,KACnDjhB,EAAK0hB,YAAc,mBAACC,GAAA,EAAD,OAEtB,0BAAK36B,UAAU,gBACb,mBAAC46B,GAAA,EAAD,CAAM56B,UAAU,SACb66B,EAAAA,EAAAA,IAAoBv7B,EAAqB,IAAflC,EAAQ+b,SAKzC,0BAAKnZ,UAAU,YACb,0BAAKA,UAAU,UAAUsC,IAAI,QASvC,SACEhD,EAAclC,EAAqBiQ,EAAkB6sB,EAAsBG,GAE3E,OAAKhtB,EAKH,2BAAMrN,UAAU,iBACd,0BAAKvE,IAAK4R,EAASuB,IAAI,GAAG5O,UAAWq6B,EAAe,aAAUp6B,KAC7D2L,EAAAA,EAAAA,IAAgBxO,IAAY,wBAAG4C,UAAU,eACzC86B,EAAAA,EAAAA,GAAqBx7B,EAAMlC,GAAS,EAAM88B,KAPtCY,EAAAA,EAAAA,GAAqBx7B,EAAMlC,OAAS6C,EAAWi6B,GAZ7Ca,CAAcz7B,EAAMlC,EAASg9B,GAAgBD,EAAgBD,EAAaG,WC5CvF,IAAev8B,EAAAA,EAAAA,KA5CmB,IAE5B,IAF6B,WACjCk9B,EADiC,SACrBtD,GACR,EACJ,MAAMuD,GAAcx7B,EAAAA,EAAAA,KAAQ,IAmB9B,SAAgCu7B,GAE9B,GADgBA,EAAWE,MAAM,0BACpB,CACX,MAAM/hB,EAAO,IAAI5H,KAAKypB,GACtB,MAAO,CAAC,CAAE7hB,KAAAA,EAAMlY,MAAMsrB,EAAAA,EAAAA,IAAmBpT,KAG3C,MAAMgiB,EAAa,GACbC,EAAc,IAAI7pB,KAClB4Z,EAAciQ,EAAY1Q,cAC1B2Q,EAAaD,EAAY/P,UAAa,IAAI9Z,KAAM,GAAE4Z,KAAe6P,KAAe3P,UAClFF,EACAA,EAAc,EAElB,IAAK,IAAIjI,EAAI,EAAGA,EA3CO,EA2CeA,IAAK,CACzC,MAAM/J,EAAO,IAAI5H,KAAM,GAAE8pB,EAAanY,KAAK8X,KAC3CG,EAAWjP,KAAK,CAAE/S,KAAAA,EAAMlY,MAAMsrB,EAAAA,EAAAA,IAAmBpT,KAGnD,OAAOgiB,EAtC2BG,CAAuBN,IAAa,CAACA,IACvE,OACE,8BAASh7B,UAAU,6CAChBi7B,EAAYhY,KAAI,IAAoB,IAAnB,KAAE9J,EAAF,KAAQlY,GAAW,EACnC,OACE,0BACEf,QAAS,IAAMw3B,EAASve,GACxBnZ,UAAU,YACVwJ,IAAKvI,GAEL,wBAAGjB,UAAU,kBACb,+BAAOiB,W,0BCwBnB,MAGMi4B,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GA+NjD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MAAQ0lB,KAAMC,GAAc3lB,EAAOylB,OAE3BY,QAASkX,GAAoBv9B,EAAOomB,aAAe,GAE3D,IAAKmX,EACH,MAAO,CACL5X,UAAAA,GAIJ,MAAM,cACJvC,EADI,SACW6N,EADX,aACqB+K,GACvBh8B,GACE,eACJw9B,EADI,cACYC,EADZ,aAC2BC,EAD3B,cACyC9gB,GAC3C5c,EAAOu7B,cACHxU,QAAS4W,EAAetX,QAASuX,GAAkBH,GAAiB,IACpE1W,QAAS8W,EAAcxX,QAASyX,GAAiBJ,GAAgB,IACjEK,SAAUC,GAA2B/M,EAG7C,MAAO,CACL7N,cAAAA,EACAma,gBAAAA,EACAM,aAAAA,EACAC,aAAAA,EACAH,cAAAA,EACAC,cAAAA,EACAjhB,SATeC,MAAAA,GAAH,UAAGA,EAAe3Z,YAAlB,aAAG,EAAqB0Z,SAUpCqhB,uBAAAA,EACArY,UAAAA,EACA6X,eAAAA,EACAxB,aAAAA,KAlCcj8B,EA7N2B,IAKzC,IAL0C,YAC9Cm8B,EAD8C,WACjCc,EADiC,gBACrBiB,EADqB,cACJ7a,EADI,gBAE9Cma,EAF8C,aAE7BM,EAF6B,aAEfC,EAFe,cAEDH,EAFC,cAEcC,EAFd,SAG9CjhB,EAH8C,uBAGpCqhB,EAHoC,UAGZrY,EAHY,eAGD6X,EAHC,aAGexB,EAHf,QAI9CR,EAJ8C,mBAIrC0C,GACL,EACJ,MAAM,SACJxI,EADI,uBACMiG,EADN,qBAC8BwC,EAD9B,sBACoDC,IACtDr9B,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAEN88B,EAAqBC,IAA0Bh7B,EAAAA,EAAAA,KAAkB,IACjEi7B,EAAsBC,IAA2Bl7B,EAAAA,EAAAA,KAAkB,GAEpEyzB,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFooB,GAAgBpoB,IAAcyjB,EAAAA,GAAAA,WAChC6D,IAAa,KACXiD,EAAqB,CACnBtiB,KAAM,OACN4iB,MAAOvC,SAIZ,CAACF,EAAcmC,EAAsBjC,IAElCwC,GAAkBr9B,EAAAA,EAAAA,KACrB7C,IACCk3B,EAAS,CAAEl3B,GAAAA,EAAIu9B,sBAAsB,IAEjCv9B,IAAO4kB,GACTuY,EAAuB,CAAEn9B,GAAAA,IAGtB4D,EAAAA,IACHo5B,MAGJ,CAACpY,EAAesS,EAAUiG,EAAwBH,IAG9CmD,GAAwBt9B,EAAAA,EAAAA,KAAa7C,IACzC4/B,EAAsB,CAAE5/B,GAAAA,MACvB,CAAC4/B,IAEEV,GAAej8B,EAAAA,EAAAA,KAAQ,KAC3B,IAAKy6B,GAAgBA,EAAY0C,WAAW,MAAQ1C,EAAYx8B,OAAS,EACvE,OAAOm/B,GAAAA,EAGT,MAAMC,EAAmB,IACnB1b,EAAgB,CAACA,GAAiB,MAClCma,GAAmB,IAGnBrW,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAC9BqZ,GAAkBxX,EAAAA,EAAAA,IACtBuX,EAAkB5X,EAAWgV,EAAa9Y,EAAe9hB,EAAK,kBAGhE,MAAO,KACF+lB,EAAAA,EAAAA,KAAYP,EAAAA,GAAAA,IAAO,IAChBiY,GAAmB,MACnBlB,GAAgB,MAChBC,GAAgB,KAClBnY,OAAW1jB,EAAWmhB,EAAgB,CAACA,QAAiBnhB,MAE7D,CAACi6B,EAAa9Y,EAAema,EAAiBj8B,EAAMu8B,EAAcC,EAAcnY,IAE7E8X,GAAgBh8B,EAAAA,EAAAA,KAAQ,KACvBy6B,GAAeA,EAAYx8B,OA3EO,IA2EyCi+B,IAAkBC,EACzFiB,GAAAA,GAGFxX,EAAAA,EAAAA,KACLP,EAAAA,GAAAA,IAAO,IAAI6W,KAAkBC,IAC7BjY,GACA,IAED,CAACA,EAAWgY,EAAeC,EAAe1B,IAEvC8C,GAAgBv9B,EAAAA,EAAAA,KAAQ,KACtBy6B,GAAgBc,IAAgBrgB,GAAgC,IAApBA,EAASjd,OAIpDid,EACJsI,KAAKzmB,IAAO,MACX,MAAOiO,EAAQE,GAAanO,EAAGygC,MAAM,KAErC,OAAOjB,MAAAA,GAAP,UAAOA,EAAyBvxB,UAAhC,aAAO,EAAkCiZ,KAAK3J,OAAOpP,OAEtD4W,OAAmBra,SACnBg2B,MAAK,CAACC,EAAGC,IAAMA,EAAEjkB,KAAOgkB,EAAEhkB,OAVpB0jB,GAAAA,GAWR,CAACliB,EAAUqhB,EAAwB9B,EAAac,IAE7CqC,GAA2Bh+B,EAAAA,EAAAA,KAAY,KAC3Ci9B,GAAwBD,KACvB,CAACA,IAEEiB,GAA4Bj+B,EAAAA,EAAAA,KAAY,KAC5Cm9B,GAAyBD,KACxB,CAACA,IAmBEgB,EAAe/B,IAAmBA,EAAe/X,QAAU+X,EAAevM,WAC1EyM,EAAah+B,SAAW+9B,EAAc/9B,SAAWs/B,EAAct/B,OAErE,OAAKw8B,GAAgBc,EAKnB,mBAACrY,GAAA,EAAD,CACE3iB,UAAU,2BACV4iB,MAAOoa,EACPna,WAAYkS,EAEZyI,sBAAoB,EACpBC,YAAU,GAETxB,GACC,0BAAKj8B,UAAU,4CACb,mBAAC,GAAD,CACEg7B,WAAYiB,EACZvE,SAAUwE,KAIfqB,GACC,mBAACG,GAAA,EAAD,CACEz8B,KAAM3B,EAAK,6BACXsxB,YAAatxB,EAAK,0CAGrB4H,QAAQw0B,EAAah+B,SACpB,0BAAKsC,UAAU,2CAA2CsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjFy7B,EAAazY,KAAKzmB,GACjB,mBAACmhC,GAAA,EAAD,CACEC,aAAcphC,EACd0D,QAASy8B,EACTkB,SAAUrhC,OAKjB0K,QAAQw0B,EAAah+B,SACpB,0BAAKsC,UAAU,kBACb,yBAAIA,UAAU,kBAAkBsC,IAAKhD,EAAK2hB,MAAQ,YAAShhB,GACxDy7B,EAAah+B,OAzKK,GA0KjB,mBAACk9B,GAAA,EAAD,CAAM16B,QAASm9B,GACZ/9B,EAAK+8B,EAAsB,2BAA6B,6BAG5D/8B,EAAK,oCAEPo8B,EAAazY,KAAI,CAACzmB,EAAIkkB,KACrB,GAAK2b,KAAuB3b,GAjLT,GAqLnB,OACE,mBAAC,GAAD,CACEjW,OAAQjO,EACR0D,QAASw8B,QAMlBx1B,QAAQu0B,EAAc/9B,SACrB,0BAAKsC,UAAU,kBACb,yBAAIA,UAAU,kBAAkBsC,IAAKhD,EAAK2hB,MAAQ,YAAShhB,GACxDw7B,EAAc/9B,OAjMI,GAkMjB,mBAACk9B,GAAA,EAAD,CAAM16B,QAASo9B,GACZh+B,EAAKi9B,EAAuB,2BAA6B,6BAG7Dj9B,EAAK,mCAEPm8B,EAAcxY,KAAI,CAACzmB,EAAIkkB,KACtB,GAAK6b,KAAwB7b,GAzMV,GA6MnB,OACE,mBAAC,GAAD,CACEjW,OAAQjO,EACR+7B,cAAY,EACZr4B,QAASw8B,QAMlBx1B,QAAQ81B,EAAct/B,SACrB,0BAAKsC,UAAU,kBACb,yBAAIA,UAAU,kBAAkBsC,IAAKhD,EAAK2hB,MAAQ,YAAShhB,GAAYX,EAAK,mBAC3E09B,EAAc/Z,KA9GvB,SAA4B7lB,GAC1B,MAAM6D,GAAO65B,EAAAA,EAAAA,GAAqBx7B,EAAMlC,GAClC4b,EAAO2K,EAAUvmB,EAAQqN,QAE/B,GAAKxJ,GAAS+X,EAId,OACE,mBAAC,GAAD,CACEvO,OAAQrN,EAAQqN,OAChBrN,QAASA,EACT88B,YAAaA,SASV,mBAAC,GAAD,CAAgBV,QAASA,QClJ9BN,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GA0FjD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQ0lB,KAAMC,GAAc3lB,EAAOylB,OAC7B,cAAErC,EAAe6N,UAAY8M,SAAUC,GAAvC,aAAiEhC,GAAiBh8B,GAClF,eAAEw9B,EAAF,cAAkB5gB,GAAkB5c,EAAOu7B,cAE3C,SAAE5e,IAAcC,MAAAA,OAAD,EAACA,EAAe3Z,OAAS,GAE9C,MAAO,CACLmgB,cAAAA,EACAzG,SAAAA,EACAqhB,uBAAAA,EACArY,UAAAA,EACA6X,eAAAA,EACAxB,aAAAA,KAdcj8B,EAxFkC,IAUhD,IAViD,YACrDm8B,EADqD,cAErD9Y,EAFqD,gBAGrD6a,EAHqD,SAIrDthB,EAJqD,uBAKrDqhB,EALqD,UAMrDrY,EANqD,eAOrD6X,EAPqD,aAQrDxB,EARqD,mBASrDkC,GACI,EACJ,MAAM,qBAAEC,IAAyBp9B,EAAAA,EAAAA,MAE3BO,GAAOC,EAAAA,EAAAA,KACPw1B,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFooB,GAAgBpoB,IAAcyjB,EAAAA,GAAAA,WAChC6D,IAAa,KACXiD,EAAqB,CACnBtiB,KAAM,OACN4iB,MAAOvC,EACPzvB,OAAQ2W,SAIb,CAACA,EAAe4Y,EAAcmC,EAAsBjC,IAEjD8C,GAAgBv9B,EAAAA,EAAAA,KAAQ,IACvBkb,GAAgC,IAApBA,EAASjd,OAInBid,EACJsI,KAAKzmB,IAAO,MACX,MAAOiO,EAAQE,GAAanO,EAAGygC,MAAM,KAErC,OAAOjB,MAAAA,GAAP,UAAOA,EAAyBvxB,UAAhC,aAAO,EAAkCiZ,KAAK3J,OAAOpP,OAEtD4W,OAAmBra,SACnBg2B,MAAK,CAACC,EAAGC,IAAMA,EAAEjkB,KAAOgkB,EAAEhkB,OAVpB0jB,GAAAA,GAWR,CAACliB,EAAUqhB,IAmBRuB,EAAe/B,IAAmBA,EAAe/X,QAAU+X,EAAevM,WAAa+N,EAAct/B,OAE3G,OACE,0BAAKsC,UAAU,cACb,mBAAC2iB,GAAA,EAAD,CACE3iB,UAAU,yCACV4iB,MAAOoa,EACPna,WAAYkS,EACZ0I,YAAU,GAETxB,GACC,0BAAKj8B,UAAU,4CACb,mBAAC,GAAD,CACEg7B,WAAYiB,EACZvE,SAAUwE,KAIfqB,GACC,mBAACG,GAAA,EAAD,CACEz8B,KAAM3B,EAAK,6BACXsxB,YAAatxB,EAAK,0CAGrB09B,EAAc/Z,KAzCrB,SAA4B7lB,GAC1B,MAAM6D,GAAO65B,EAAAA,EAAAA,GAAqBx7B,EAAMlC,GAClC4b,EAAO2K,EAAUvmB,EAAQqN,QAE/B,GAAKxJ,GAAS+X,EAId,OACE,mBAAC,GAAD,CACEvO,OAAQrN,EAAQqN,OAChBrN,QAASA,EACT88B,YAAaA,aCpEd,SAAS4D,GAAsBjkB,GACpC,MAAO,CAAC7b,EAAqBoN,KAAe,QAC1C,MAAQsY,KAAMC,GAAc3lB,EAAOylB,OAC3BC,KAAMwB,GAAclnB,EAAOonB,OAC7B,eACJoW,EADI,cACY5gB,EADZ,OAC2BnQ,GAC7BzM,EAAOu7B,aAKLwE,EAAuB,UAATlkB,EAAmBA,EAAQzO,MAAAA,GAAAA,EAAO4yB,QAAU,QAAU,SAElEjC,SAAUC,GAA2Bh+B,EAAOixB,SAC9CtU,EAAWC,MAAAA,GAAH,UAAGA,EAAgBmjB,UAAnB,aAAG,EAA8BpjB,SAEzCsjB,EAAkBjgC,EAAOigC,gBAAgBlC,SAE/C,MAAO,CACLmC,OAAOC,EAAAA,EAAAA,IAAYngC,GACnBogC,eAAwBn+B,IAAb0a,KACL6gB,GAAiBt0B,QAAQs0B,EAAe/X,OAAS+X,EAAevM,UACtEtL,UAAAA,EACAuB,UAAAA,EACA8W,uBAAAA,EACArhB,SAAAA,EACA0jB,aAAc5zB,EACdwzB,gBAAAA,EACAK,gBAAiB7zB,EAAM,WAAGS,EAAAA,EAAAA,IAAWlN,EAAQyM,UAAtB,aAAG,EAA4BtM,iBAAc8B,EACpE+5B,aAAch8B,EAAOg8B,e,qCCxB3B,MAAMuE,GAAe,QAGfrF,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GAqHjD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClB+/B,GAAsBS,IADJxgC,EAnH4B,IAQ1C,IAR2C,YAC/Cm8B,EAD+C,aAE/CmE,EAF+C,UAG/CD,EAH+C,uBAI/CpC,EAJ+C,SAK/CrhB,EAL+C,aAM/Cqf,EAN+C,gBAO/CsE,GACI,EACJ,MAAM,qBACJnC,EADI,gBAEJrhB,IACE/b,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCzE,GAAOC,EAAAA,EAAAA,MAELi/B,QAASC,IAAgCC,EAAAA,GAAAA,IAAwB,CACvEC,QAASxvB,EACTyvB,WAzB0B,MA4BtB7J,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFooB,GAAgBpoB,IAAcyjB,EAAAA,GAAAA,WAChC6D,IAAa,KACXiD,EAAqB,CACnBtiB,KAAM0kB,GACN9B,MAAOvC,EACPzvB,OAAQ4zB,SAIb,CAACrE,EAAcmC,EAAsBjC,EAAamE,IAE/CrB,GAAgBv9B,EAAAA,EAAAA,KAAQ,IACvBkb,GAAaqhB,EAIXrhB,EAASsI,KAAKzmB,IAAO,MAC1B,MAAOiO,EAAQE,GAAanO,EAAGygC,MAAM,KAErC,iBAAOjB,EAAuBvxB,UAA9B,aAAO,EAAgCiZ,KAAK3J,OAAOpP,OAClD4W,OAAOra,SAPD21B,GAAAA,GAQR,CAACb,EAAwBrhB,IAEtBkkB,GAAoBx/B,EAAAA,EAAAA,KAAY,CAACsL,EAAmBF,KACxDqQ,EAAgB,CACdrQ,OAAAA,EACAE,UAAAA,EACA7P,OAAQe,EAAAA,GAAAA,iBAET,CAACif,IA6BEgkB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EACpFa,EAAcH,GAAqBnkB,GAAYA,EAASjd,OAAS,IAAMw8B,EACvEgF,EAAgBJ,GAAqBnkB,GAAYA,EAASjd,OAAS,GAAKw8B,EAExEh4B,GAAaC,EAAAA,EAAAA,GACjB,+BACA+8B,GAAiB,aAGnB,OACE,0BAAK15B,IAAK2J,EAAcnP,UAAU,cAChC,mBAAC2iB,GAAA,EAAD,CACE3iB,UAAWkC,EACX0gB,MAAOoa,EACPmC,aAAejF,EAAyB,YAAX,SAC7BrX,WAAYkS,EACZ0I,YAAU,IAERqB,GAAqB,mBAACtb,GAAA,EAAD,MACtBsb,KAAuBnkB,GAAgC,IAApBA,EAASjd,SAC3C,mBAACggC,GAAA,EAAD,CACEz8B,KAAM3B,EAAK,6BACXsxB,YAAatxB,EAAK,0CAGrB2/B,GAlDH,0BAAKj/B,UAAU,aAAasC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACnD+8B,EAAc/Z,KAAK7lB,GAClB,mBAACgiC,GAAA,EAAD,CACE51B,IAAKpM,EAAQZ,GACb6iC,SAAS,eACTjiC,QAASA,EACTe,YAAamgC,GAAmBlhC,EAAQe,YACxCmhC,oBAAqBb,EACrBv+B,QAAS2+B,OA2CZK,GAnCElC,EAAc/Z,KAAK7lB,GACxB,mBAAC,GAAD,CACEoM,IAAKpM,EAAQZ,GACbiO,OAAQrN,EAAQqN,OAChBrN,QAASA,Y,wBCnFjB,MAAMmhC,GAAe,QAGfrF,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GA2GjD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClB+/B,GAAsBS,IADJxgC,EAzG2B,IAUzC,IAV0C,YAC9Cm8B,EAD8C,aAE9CmE,EAF8C,UAG9CD,EAH8C,UAI9Cza,EAJ8C,UAK9CuB,EAL8C,uBAM9C8W,EAN8C,SAO9CrhB,EAP8C,aAQ9Cqf,EAR8C,gBAS9CsE,GACI,EACJ,MAAM,qBACJnC,EADI,aAEJ3jB,IACEzZ,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCzE,GAAOC,EAAAA,EAAAA,MAELi/B,QAASC,IAAgCC,EAAAA,GAAAA,IAAwB,CACvEC,QAASxvB,EACTyvB,WA3B0B,MA8BtB7J,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFooB,GAAgBpoB,IAAcyjB,EAAAA,GAAAA,WAChC6D,IAAa,KACXiD,EAAqB,CACnBtiB,KAAM0kB,GACN9B,MAAOvC,EACPzvB,OAAQ4zB,SAIb,CAACrE,EAAcmC,EAAsBjC,EAAamE,IAE/CrB,GAAgBv9B,EAAAA,EAAAA,KAAQ,IACvBkb,GAAaqhB,EAIXrhB,EAASsI,KAAKzmB,IAAO,MAC1B,MAAOiO,EAAQE,GAAanO,EAAGygC,MAAM,KAErC,iBAAOjB,EAAuBvxB,UAA9B,aAAO,EAAgCiZ,KAAK3J,OAAOpP,OAClD4W,OAAOra,SAPD21B,GAAAA,GAQR,CAACb,EAAwBrhB,IAEtB4kB,GAAqBlgC,EAAAA,EAAAA,KAAY,CAACsL,EAAmBF,KACzD+N,EAAa,CAAE/N,OAAAA,EAAQE,UAAAA,MACtB,CAAC6N,IA8BEsmB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EAE1F,OACE,0BAAK54B,IAAK2J,EAAcnP,UAAU,cAChC,mBAAC2iB,GAAA,EAAD,CACE3iB,UAAU,8CACV4iB,MAAOoa,EACPna,WAAYkS,EACZ0I,YAAU,IAERqB,GAAqB,mBAACtb,GAAA,EAAD,MACtBsb,KAAuBnkB,GAAgC,IAApBA,EAASjd,SAC3C,mBAACggC,GAAA,EAAD,CACEz8B,KAAM3B,EAAK,6BACXsxB,YAAatxB,EAAK,0CAGrBw/B,GAAqBnkB,GAAYA,EAASjd,OAAS,GA5CjDs/B,EAAc/Z,KAAI,CAAC7lB,EAASsjB,KACjC,MAAM8e,EAAkC,IAAV9e,IACzB+e,EAAAA,EAAAA,IAAYriC,EAAQ+b,SAAUsmB,EAAAA,EAAAA,IAAYzC,EAActc,EAAQ,GAAGvH,MACxE,OACE,0BACEnZ,UAAU,sBACVsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,EAC1BuJ,IAAKpM,EAAQZ,IAEZgjC,GACC,wBAAGx/B,UAAU,kBAAkBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,IACtDy/B,EAAAA,EAAAA,IAAmBpgC,EAAM,IAAIiS,KAAoB,IAAfnU,EAAQ+b,QAG/C,mBAACwmB,GAAA,EAAD,CACEn2B,IAAKpM,EAAQZ,GACbY,QAASA,EACTwb,aAAagnB,EAAAA,GAAAA,GAActgC,EAAMlC,EAASumB,EAAWuB,GACrD/mB,YAAamgC,GAAmBlhC,EAAQe,YACxCmhC,oBAAqBb,EACrBoB,eAAgBN,c,eC9E5B,MAAMhB,GAAe,YAGfrF,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GA4GjD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClB+/B,GAAsBS,IADJxgC,EA1G2B,IAUzC,IAV0C,YAC9Cm8B,EAD8C,aAE9CmE,EAF8C,UAG9CD,EAH8C,UAI9Cza,EAJ8C,UAK9CuB,EAL8C,uBAM9C8W,EAN8C,SAO9CrhB,EAP8C,gBAQ9CsjB,EAR8C,aAS9CjE,GACI,EACJ,MAAM,qBACJmC,EADI,aAEJ3jB,IACEzZ,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCzE,GAAOC,EAAAA,EAAAA,MAELi/B,QAASC,IAAgCC,EAAAA,GAAAA,IAAwB,CACvEC,QAASxvB,EACTyvB,WA3B0B,MA8BtB7J,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFooB,GAAgBpoB,IAAcyjB,EAAAA,GAAAA,WAChC6D,IAAa,KACXiD,EAAqB,CACnBtiB,KAAM0kB,GACN9B,MAAOvC,EACPzvB,OAAQ4zB,SAIb,CAACrE,EAAcmC,EAAsBjC,EAAamE,IAE/CrB,GAAgBv9B,EAAAA,EAAAA,KAAQ,IACvBkb,GAAaqhB,EAIXrhB,EAASsI,KAAKzmB,IAAO,MAC1B,MAAOiO,EAAQE,GAAanO,EAAGygC,MAAM,KAC/B7/B,EAAO,UAAG4+B,EAAuBvxB,UAA1B,aAAG,EAAgCiZ,KAAK3J,OAAOpP,IAE5D,OAAOvN,IAAWyQ,EAAAA,EAAAA,IAAmBzQ,GAAWA,OAAU6C,KACzDshB,OAAOra,SARD21B,GAAAA,GASR,CAACb,EAAwBrhB,IAEtB4kB,GAAqBlgC,EAAAA,EAAAA,KAAY,CAACsL,EAAmBF,KACzD+N,EAAa,CAAE/N,OAAAA,EAAQE,UAAAA,MACtB,CAAC6N,IA8BEsmB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EAE1F,OACE,0BAAK54B,IAAK2J,EAAcnP,UAAU,cAChC,mBAAC2iB,GAAA,EAAD,CACE3iB,UAAU,8CACV4iB,MAAOoa,EACPna,WAAYkS,EACZ0I,YAAU,IAERqB,GAAqB,mBAACtb,GAAA,EAAD,MACtBsb,KAAuBnkB,GAAgC,IAApBA,EAASjd,SAC3C,mBAACggC,GAAA,EAAD,CACEz8B,KAAM3B,EAAK,6BACXsxB,YAAatxB,EAAK,0CAGrBw/B,GAAqBnkB,GAAYA,EAASjd,OAAS,GA5CjDs/B,EAAc/Z,KAAI,CAAC7lB,EAASsjB,KAAU,MAC3C,MAAM8e,EAAkC,IAAV9e,IACzB+e,EAAAA,EAAAA,IAAYriC,EAAQ+b,SAAUsmB,EAAAA,EAAAA,IAAYzC,EAActc,EAAQ,GAAGvH,MACxE,OACE,0BACEnZ,UAAU,sBACVwJ,IAAKpM,EAAQZ,IAEZgjC,GACC,wBAAGx/B,UAAU,oBAAmB0/B,EAAAA,EAAAA,IAAmBpgC,EAAM,IAAIiS,KAAoB,IAAfnU,EAAQ+b,QAE5E,mBAAC2mB,GAAA,EAAD,CACE1iC,QAASA,EACT2iC,UAAQ,EACRC,SAAU5iC,EAAQ+b,KAClB8mB,SAAO,EACP7nB,QAAQwnB,EAAAA,GAAAA,GAActgC,EAAMlC,EAASumB,EAAWuB,GAChDllB,UAAU,cACV/B,cAAa,UAAEggC,EAAgB7gC,EAAQqN,eAA1B,aAAE,EAAiChO,SAASW,EAAQZ,IACjE8iC,oBAAqBb,EACrByB,YAAaX,c,eCnFzB,MAAMrG,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GA8GjD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClB+/B,GAAsB,SADJ//B,EA5G4B,IAY1C,IAZ2C,MAC/CmgC,EAD+C,QAE/CF,EAF+C,YAG/C9D,EAH+C,aAI/CmE,EAJ+C,UAK/CD,EAL+C,UAM/Cza,EAN+C,UAO/CuB,EAP+C,uBAQ/C8W,EAR+C,SAS/CrhB,EAT+C,aAU/Cqf,EAV+C,gBAW/CiE,GACI,EACJ,MAAM,qBACJ9B,EADI,aAEJ3jB,EAFI,gBAGJ2nB,IACEphC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,KACPw+B,EAAcC,EAAU,QAAU,QAClCjJ,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFooB,GAAgBpoB,IAAcyjB,EAAAA,GAAAA,WAChC6D,IAAa,KACXiD,EAAqB,CACnBtiB,KAAMkkB,EACNtB,MAAOvC,EACPzvB,OAAQ4zB,SAIb,CAACN,EAAa/D,EAAcmC,EAAsBjC,EAAamE,IAE5DrB,GAAgBv9B,EAAAA,EAAAA,KAAQ,IACvBkb,GAAaqhB,EAIXrhB,EAASsI,KAAKzmB,IAAO,MAC1B,MAAOiO,EAAQE,GAAanO,EAAGygC,MAAM,KAErC,iBAAOjB,EAAuBvxB,UAA9B,aAAO,EAAgCiZ,KAAK3J,OAAOpP,OAClD4W,OAAOra,SAPD21B,GAAAA,GAQR,CAACb,EAAwBrhB,IAEtB4kB,GAAqBlgC,EAAAA,EAAAA,KAAY,CAACsL,EAAmBF,KACzD+N,EAAa,CAAE/N,OAAAA,EAAQE,UAAAA,MACtB,CAAC6N,IAEE4nB,GAAkB/gC,EAAAA,EAAAA,KAAY,CAACsL,EAAmBF,KACtD01B,EAAgB,CAAE11B,OAAAA,EAAQE,UAAAA,MACzB,CAACw1B,IAkCErB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EAE1F,OACE,0BAAKp+B,UAAU,cACb,mBAAC2iB,GAAA,EAAD,CACE3iB,UAAU,8CACV4iB,MAAOoa,EACPna,WAAYkS,EACZ0I,YAAU,IAERqB,GAAqB,mBAACtb,GAAA,EAAD,MACtBsb,KAAuBnkB,GAAgC,IAApBA,EAASjd,SAC3C,mBAACggC,GAAA,EAAD,CACEz8B,KAAM3B,EAAK,6BACXsxB,YAAatxB,EAAK,0CAGrBw/B,GAAqBnkB,GAAYA,EAASjd,OAAS,GAhDjDs/B,EAAc/Z,KAAI,CAAC7lB,EAASsjB,KAAU,MAC3C,MAAM8e,EAAkC,IAAV9e,IACzB+e,EAAAA,EAAAA,IAAYriC,EAAQ+b,SAAUsmB,EAAAA,EAAAA,IAAYzC,EAActc,EAAQ,GAAGvH,MACxE,OACE,0BACEnZ,UAAU,sBACVwJ,IAAKpM,EAAQZ,IAEZgjC,GACC,wBAAGx/B,UAAU,kBAAkBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,IACtDy/B,EAAAA,EAAAA,IAAmBpgC,EAAM,IAAIiS,KAAoB,IAAfnU,EAAQ+b,QAG/C,mBAACknB,GAAA,EAAD,CACE72B,IAAKpM,EAAQZ,GACb0hC,MAAOA,EACP9gC,QAASA,EACTtC,OAAQwlC,EAAAA,GAAAA,OACR1nB,aAAagnB,EAAAA,GAAAA,GAActgC,EAAMlC,EAASumB,EAAWuB,GACrD/L,KAAM/b,EAAQ+b,KACd6gB,aAAcA,EACdh6B,UAAU,cACVkK,OAAQk2B,EACRF,YAAaX,EACbthC,cAAa,UAAEggC,EAAgB7gC,EAAQqN,eAA1B,aAAE,EAAiChO,SAASW,EAAQZ,gBCvEvE+jC,GAAO,CACX,CAAE1mB,KAAM2mB,EAAAA,GAAAA,SAA8B5Z,MAAO,uBAC7C,CAAE/M,KAAM2mB,EAAAA,GAAAA,MAA2B5Z,MAAO,mBAC1C,CAAE/M,KAAM2mB,EAAAA,GAAAA,MAA2B5Z,MAAO,mBAC1C,CAAE/M,KAAM2mB,EAAAA,GAAAA,MAA2B5Z,MAAO,mBAC1C,CAAE/M,KAAM2mB,EAAAA,GAAAA,MAA2B5Z,MAAO,mBAC1C,CAAE/M,KAAM2mB,EAAAA,GAAAA,MAA2B5Z,MAAO,oBAGtC6Z,GAAY,CAChB,CAAE5mB,KAAM2mB,EAAAA,GAAAA,SAA8B5Z,MAAO,mBAC1C2Z,GAAKG,MAAM,IAGVC,GAA0B3jC,OAAOg5B,KAAKwK,EAAAA,IAAqB9iC,OAAS,EA+F1E,IAAeI,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,eAAE4iC,EAAF,OAAkBn2B,GAAWzM,EAAOu7B,aAE1C,MAAO,CAAEqH,eAAAA,EAAgBn2B,OAAAA,KAJT1M,EA7F0B,IAOxC,IAPyC,YAC7Cm8B,EAD6C,WAE7Cc,EAF6C,SAG7C3vB,EAH6C,eAI7Cu1B,EAAiBJ,EAAAA,GAAAA,SAJ4B,OAK7C/1B,EAL6C,QAM7C+uB,GACI,EACJ,MAAM,uBACJqH,EADI,oBAEJC,IACE/hC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNwhC,EAAWC,IAAgB1/B,EAAAA,EAAAA,IAASs/B,GACrC3E,GAAkBx8B,EAAAA,EAAAA,KAAQ,KAAMwhC,EAAAA,EAAAA,IAAgB/G,IAAc,CAACA,IAE/DgH,GAAkB7hC,EAAAA,EAAAA,KAAaqhB,IACnC,MAAMygB,EAAMZ,GAAK7f,GACjBmgB,EAAuB,CAAExvB,QAAS8vB,EAAItnB,OACtCmnB,EAAatgB,KACZ,CAACmgB,IAEEO,GAAyB/hC,EAAAA,EAAAA,KAAa2Q,IAC1C8wB,EAAoB,CAAE3nB,KAAMnJ,EAAMqb,UAAY,QAC7C,CAACyV,KAEJjgB,EAAAA,EAAAA,IAAexV,EAAUmuB,OAASv5B,OAAWA,GAAW,GAGxD,MAAMkP,GAAepL,EAAAA,EAAAA,IAAuB,MACtC+c,GAAgBqB,EAAAA,GAAAA,GAA0BhT,EAAc9D,OAAUpL,EAAW,oBAAoB,GAEvG,OACE,0BAAKD,UAAU,aAAawF,IAAK2J,EAAcmT,UAAWxB,GACxD,mBAACugB,GAAA,EAAD,CAASN,UAAWA,EAAWO,KAAM72B,EAASg2B,GAAYF,GAAMgB,YAAaL,IAC7E,mBAAC9nB,EAAA,EAAD,CACE+H,KAAM7hB,EAAK2hB,MAAQ,sBAAwB,kBAC3CugB,YAAab,GACbzf,UAAW0f,IAEV,KACC,OAAQA,GACN,KAAKJ,EAAAA,GAAAA,SACH,OAAI/1B,EAEA,mBAAC,GAAD,CACEyvB,YAAaA,EACb+B,gBAAiBA,EACjBzC,QAASA,EACT0C,mBAAoBkF,IAKxB,mBAAC,GAAD,CACElH,YAAaA,EACbc,WAAYA,EACZiB,gBAAiBA,EACjBzC,QAASA,EACT0C,mBAAoBkF,IAG1B,KAAKZ,EAAAA,GAAAA,MACH,OAAO,mBAAC,GAAD,CAActG,YAAaA,IACpC,KAAKsG,EAAAA,GAAAA,MACH,OAAO,mBAAC,GAAD,CAAatG,YAAaA,IACnC,KAAKsG,EAAAA,GAAAA,MACH,OAAO,mBAAC,GAAD,CAAatG,YAAaA,IACnC,KAAKsG,EAAAA,GAAAA,MACH,OACE,mBAAC,GAAD,CACEh3B,IAAI,QACJ0wB,YAAaA,IAGnB,KAAKsG,EAAAA,GAAAA,MACH,OACE,mBAAC,GAAD,CACEh3B,IAAI,QACJw0B,SAAO,EACP9D,YAAaA,IAGnB,QACE,gB,eC1Hd,MAAMuH,GAA4B,CAChCC,gBAAiB,GACjBC,SAAU,GACVC,KAAM,GACNC,MAAO,IAGHC,GAAuD,CAC3DC,EACAC,KAEA,OAAQA,EAAOnoB,MACb,IAAK,qBACH,MAAO,IACFkoB,EACHL,gBAAiBM,EAAOC,SAG5B,IAAK,cACH,MAAO,IACFF,EACHJ,SAAUK,EAAOC,SAGrB,IAAK,UACH,MAAO,IACFF,EACHH,KAAMI,EAAOC,SAGjB,IAAK,WACH,MAAO,IACFF,EACHF,MAAOG,EAAOC,SAGlB,IAAK,QACH,OAAOR,GAET,QACE,OAAOM,ICoNb,IAAejkC,EAAAA,EAAAA,KAnPsB,IAM/B,IANgC,cACpCokC,EADoC,eAEpCC,EAFoC,QAGpC3I,EAHoC,aAIpC4I,EAJoC,eAKpCC,GACI,EACJ,MAAM,QACJC,EADI,iBAEJC,IACExjC,EAAAA,EAAAA,OAEGyjC,EAAqBC,IAA0BnhC,EAAAA,EAAAA,KAAS,IACxDohC,EAA0BC,IAA+BrhC,EAAAA,EAAAA,KAAS,GAEnEshC,GAA0BvjC,EAAAA,EAAAA,KAAY,KAC1CojC,GAAuB,KACtB,IAEGI,GAA2BxjC,EAAAA,EAAAA,KAAY,KAC3CojC,GAAuB,KACtB,IAEGK,GAA+BzjC,EAAAA,EAAAA,KAAY,KAC/CsjC,GAA4B,KAC3B,IAEGI,GAAgC1jC,EAAAA,EAAAA,KAAY,KAChDsjC,GAA4B,KAC3B,IAEGK,GAAuB3jC,EAAAA,EAAAA,KAAY,KACvCwjC,IACAP,MACC,CAACO,EAA0BP,IAExBW,GAA4B5jC,EAAAA,EAAAA,KAAY,KAC5C0jC,IACAR,EAAiB,CAAE/lC,GAAI2lC,IACvB3I,MACC,CAAC2I,EAAgBY,EAA+BR,EAAkB/I,IAE/D0J,GAAsEzjC,EAAAA,EAAAA,KAAQ,IAC3E,QAAC,UAAEC,EAAF,OAAaC,GAAd,SACL,mBAACC,EAAA,EAAD,CACEC,OAAK,EACL6F,QAAStF,EAAAA,GACTN,KAAK,UACLC,MAAM,cACNC,UAAWL,EAAS,SAAW,GAC/BO,QAASR,EACTS,UAAU,gBAEV,wBAAGH,UAAU,iBAGhB,IAEGV,GAAOC,EAAAA,EAAAA,KAyJb,OACE,0BAAKS,UAAU,eACb,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAASs5B,EACTr5B,UAAWb,EAAK,mBAEhB,wBAAGU,UAAU,qBAhKnB,WACE,OAAQkiC,GACN,KAAKiB,EAAAA,GAAAA,YACH,OAAO,6BAAK7jC,EAAK,6BACnB,KAAK6jC,EAAAA,GAAAA,QACH,OAAO,6BAAK7jC,EAAK,YACnB,KAAK6jC,EAAAA,GAAAA,cACH,OAAO,6BAAK7jC,EAAK,qBACnB,KAAK6jC,EAAAA,GAAAA,cACH,OAAO,6BAAK7jC,EAAK,kBACnB,KAAK6jC,EAAAA,GAAAA,YACH,OAAO,6BAAK7jC,EAAK,iBACnB,KAAK6jC,EAAAA,GAAAA,QACH,OAAO,6BAAK7jC,EAAK,oBACnB,KAAK6jC,EAAAA,GAAAA,SACH,OAAO,6BAAK7jC,EAAK,aAEnB,KAAK6jC,EAAAA,GAAAA,sBACH,OAAO,6BAAK7jC,EAAK,mBACnB,KAAK6jC,EAAAA,GAAAA,2BACH,OAAO,6BAAK7jC,EAAK,aAEnB,KAAK6jC,EAAAA,GAAAA,mBACH,OAAO,6BAAK7jC,EAAK,iBACnB,KAAK6jC,EAAAA,GAAAA,gBACH,OAAO,6BAAK7jC,EAAK,oBACnB,KAAK6jC,EAAAA,GAAAA,oBACH,OAAO,6BAAK7jC,EAAK,yBACnB,KAAK6jC,EAAAA,GAAAA,kBACH,OAAO,6BAAK7jC,EAAK,oBACnB,KAAK6jC,EAAAA,GAAAA,kBACH,OAAO,6BAAK7jC,EAAK,2BACnB,KAAK6jC,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,iCACH,OAAO,6BAAK7jC,EAAK,oBACnB,KAAK6jC,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,8BACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,gCACL,KAAKA,EAAAA,GAAAA,gCACH,OAAO,6BAAK7jC,EAAK,mBAEnB,KAAK6jC,EAAAA,GAAAA,sBACH,OAAO,6BAAK7jC,EAAK,kBACnB,KAAK6jC,EAAAA,GAAAA,oBACH,OAAO,6BAAK7jC,EAAK,iBAEnB,KAAK6jC,EAAAA,GAAAA,cACL,KAAKA,EAAAA,GAAAA,aACH,OAAO,6BAAK7jC,EAAK,wBACnB,KAAK6jC,EAAAA,GAAAA,iBACL,KAAKA,EAAAA,GAAAA,uBACL,KAAKA,EAAAA,GAAAA,2BACH,OAAO,6BAAK7jC,EAAK,+BACnB,KAAK6jC,EAAAA,GAAAA,wBACH,OAAO,6BAAK7jC,EAAK,0BACnB,KAAK6jC,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,wBACH,OAAO,6BAAK7jC,EAAK,iBACnB,KAAK6jC,EAAAA,GAAAA,sBACL,KAAKA,EAAAA,GAAAA,mBACH,OAAO,6BAAK7jC,EAAK,uBACnB,KAAK6jC,EAAAA,GAAAA,0BACL,KAAKA,EAAAA,GAAAA,uBACH,OAAO,oDACT,KAAKA,EAAAA,GAAAA,qBACH,OAAO,6BAAK7jC,EAAK,mCACnB,KAAK6jC,EAAAA,GAAAA,2BACL,KAAKA,EAAAA,GAAAA,aACL,KAAKA,EAAAA,GAAAA,kCACH,OAAO,6BAAK7jC,EAAK,+BAEnB,KAAK6jC,EAAAA,GAAAA,QACH,OAAO,6BAAK7jC,EAAK,YACnB,KAAK6jC,EAAAA,GAAAA,oBACH,OAAO,6BAAK7jC,EAAK,cACnB,KAAK6jC,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,8BACH,OACE,0BAAKnjC,UAAU,wBACb,6BAAKV,EAAK,eAET6iC,GACC,mBAAC9hC,EAAA,EAAD,CACEL,UAAU,qBACVM,QAAS4iC,EACT3iC,UAAU,SAEV,mBAACC,EAAA,EAAD,CAAUC,KAAK,SAAS6yB,aAAW,EAACpzB,QAAS4iC,GAC1CxjC,EAAK,aAMlB,KAAK6jC,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,0BAAKnjC,UAAU,wBACXkiC,IAAkBiB,EAAAA,GAAAA,sBACfjB,IAAkBiB,EAAAA,GAAAA,iCACnB,6BAAK7jC,EAAK,kBAEV,6BAAKA,EAAK,kBAGd,mBAACM,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNC,UAAU,gBACVE,QAASkiC,EACTjiC,UAAWb,EAAK,sBAEhB,wBAAGU,UAAU,iBAKrB,QACE,OACE,0BAAKA,UAAU,wBACb,6BAAKV,EAAK,aAEV,mBAACM,EAAA,EAAD,CACEC,OAAK,EACL6F,QAAStF,EAAAA,GACTN,KAAK,UACLC,MAAM,cACNG,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,aAC9BhjC,UAAWb,EAAK,6BAEhB,wBAAGU,UAAU,eAEf,mBAACK,EAAA,EAAD,CACEL,UAAU,qBACVM,QAAS4iC,EACT3iC,UAAU,SAEV,mBAACC,EAAA,EAAD,CAAUC,KAAK,SAASP,QAAS0iC,GAA0BtjC,EAAK,mBAkBvE8jC,GACD,mBAAChb,GAAA,EAAD,CACEzoB,OAAQ6iC,EACRl8B,QAASu8B,EACT5hC,KAAM3B,EAAK,mBACX+oB,aAAc/oB,EAAK,0BACnBgpB,eAAgB0a,EAChBK,sBAAoB,IAEtB,mBAACjb,GAAA,EAAD,CACEzoB,OAAQ+iC,EACRp8B,QAASy8B,EACT9hC,KAAM3B,EAAK,qBACX+oB,aAAc/oB,EAAK,UACnBgpB,eAAgB2a,EAChBI,sBAAoB,Q,wBC3O5B,MA4EA,IAAevlC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,cAAEojB,EAAF,aAAiB4Y,GAAiBh8B,EAExC,MAAO,CACLslC,YAAaliB,GAAgBnW,EAAAA,EAAAA,IAAWjN,EAAQojB,QAAiBnhB,EACjE+5B,aAAAA,KANcj8B,EA5E4B,IAM1C,IAN2C,SAC/CsN,EAD+C,eAE/Cg3B,EAF+C,QAG/C7I,EAH+C,YAI/C8J,EAJ+C,aAK/CtJ,GACI,EACJ,MAAM,kBAAEuJ,IAAsBxkC,EAAAA,EAAAA,MAExBO,GAAOC,EAAAA,EAAAA,KACPikC,EAAYF,MAAAA,OAAH,EAAGA,EAAa9mC,GAU/B,OARA+E,EAAAA,EAAAA,KAAU,KACJiiC,GAAaxJ,GACfuJ,EAAkB,CAAEC,UAAAA,MAErB,CAACxJ,EAAcwJ,EAAWD,KAE7B1iB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,MAGhD,0BAAKnjC,UAAU,kCACb,0BAAKA,UAAU,sBACZsjC,GACC,mBAACG,GAAA,EAAD,CACEngB,OAAQggB,EAAY9mC,GACpBknC,eAAa,IAGhBJ,GACC,mBAACK,GAAA,EAAD,CACE/F,aAAc0F,EAAY9mC,GAC1BknC,eAAa,IAGjB,mBAACvgB,GAAA,EAAD,CACE1iB,KAAK,WACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,UAE7B7jC,EAAK,2CAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,SACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,gBAE7B7jC,EAAK,kBAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,OACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,UAE7B7jC,EAAK,oBAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,OACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,cAE7B7jC,EAAK,iBAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,SACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,UAE7B7jC,EAAK,YAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,WACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,WAE7B7jC,EAAK,mB,yBC3EhB,MAEMskC,GAAc,gBACdC,GAAoB,sBACpBC,GAAiB,oBAEjBC,IAA+BryB,EAAAA,EAAAA,KAAUynB,GAAOA,KAAM,KAAK,GAkFjE,IAAer7B,EAAAA,EAAAA,KA1E2B,IAOpC,IAPqC,gBACzCkmC,EADyC,OAEzCC,EAFyC,UAGzC7F,EAHyC,oBAIzC8F,EAJyC,cAKzCC,EALyC,SAMzCrqB,GACI,EACJ,MAAOsqB,EAAUC,IAAe/iC,EAAAA,EAAAA,IAAS0iC,GAAmB,IAEtD1kC,GAAOC,EAAAA,EAAAA,KACP+kC,EAAaL,EAAS,SAAW,WACjC9S,EAAiB7xB,EAAT2kC,EAAc,oBAA4B,aAEjDM,EAAiBC,IAAiB/kC,EAAAA,EAAAA,KAAQ,IAC1C2kC,EAAS1mC,OAIV0mC,EAAS1mC,OAjCW,EAkCf,MAACuC,EAAY,GAAEkxB,kBAEpBiT,EAAS1mC,OAnCW,GAoCf,MAACuC,EAAY,GAAEkxB,iBAEnB2S,GAAeW,KAAKL,QAIGnkC,IAAxBikC,EACK,GAIF,CACLA,EAAsB5kC,EAAM,GAAEglC,aAAuB,iBAAcrkC,GAC3C,IAAxBikC,EAAgC5kC,EAAM,GAAEglC,eAAqBrkC,GAVtD,MAACA,EAAY,GAAEkxB,iCAVf,IAsBR,CAACiT,EAAUF,EAAqB5kC,EAAMglC,EAAYnT,KAErD5vB,EAAAA,EAAAA,KAAU,KACR8iC,EAAYL,GAAmB,MAC9B,CAACC,EAAQD,IAEZ,MAAMU,GAAuBrlC,EAAAA,EAAAA,KAAa+C,IACxC,MAAMuiC,EAAcviC,EAAE6G,OAAO+G,MAAM40B,OAAOhY,QAAQiX,GAAmB,IACrEQ,EAAYM,GACZviC,EAAE6G,OAAO+G,MAAS,GAAEi0B,EAASL,GAAc,KAAKe,IAEhD,MAAME,EAvDV,SAAyBT,GACvB,OAAOA,EAAS1mC,QATU,GAUrB0mC,EAAS1mC,QATY,IAUrBomC,GAAeW,KAAKL,GAoDPU,CAAgBH,GAE5BE,GACFd,IAA6B,KAC3BI,EAAc,CAAEC,SAAUO,OAI1B7qB,GACFA,IAAS+qB,GAAUF,KAEpB,CAACV,EAAQE,EAAerqB,IAE3B,OACE,mBAACuI,GAAA,EAAD,CACErS,MAAQ,GAAEi0B,EAASL,GAAc,KAAKQ,IACtCtqB,SAAU4qB,EACVvT,MAAOA,EACPvL,MAAO4e,EACPO,QAASR,EACTS,SAAU5G,OC/DVlF,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GAI7C8L,GAA2B,iCAC3BC,GAAqB,wCAiN3B,IAAepnC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,cAAEojB,GAAkBpjB,GACpB,SAAE8C,EAAF,oBAAYojC,GAAwBlmC,EAAOmnC,aAAe,GAC1D7B,EAAcliB,GAAgBnW,EAAAA,EAAAA,IAAWjN,EAAQojB,QAAiBnhB,EAExE,IAAKqjC,EACH,MAAO,CACLxiC,SAAAA,EACAojC,oBAAAA,GAIJ,MACEkB,UAAWC,EACXC,SAAUC,EACVnB,SAAUJ,EAHN,SAIJwB,GACElC,GACImC,IAAKC,GAAeF,GAAY,GAGxC,MAAO,CACLG,mBAHwB/4B,EAAAA,EAAAA,IAAkB02B,GAI1C+B,iBAAAA,EACAE,gBAAAA,EACAG,WAAAA,EACA1B,gBAAAA,EACAljC,SAAAA,EACAojC,oBAAAA,KA7BcnmC,EA/MmC,IAWjD,IAXkD,SACtDsN,EADsD,eAEtDg3B,EAFsD,QAGtD7I,EAHsD,kBAItDmM,EAJsD,iBAKtDN,EALsD,gBAMtDE,EANsD,WAOtDG,EAPsD,gBAQtD1B,EARsD,SAStDljC,EATsD,oBAUtDojC,GACI,EACJ,MAAM,gBACJ0B,EADI,cAEJC,EAFI,cAGJ1B,IACEplC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAENumC,EAAmBC,IAAwBzkC,EAAAA,EAAAA,KAAS,IACpD0kC,EAAwBC,IAA6B3kC,EAAAA,EAAAA,KAAS,IAC9DskB,EAAOsgB,IAAY5kC,EAAAA,EAAAA,OAEnBoK,EAAOy6B,IAAY7kC,EAAAA,EAAAA,OACnB8jC,EAAWgB,IAAgB9kC,EAAAA,EAAAA,IAAS+jC,GAAoB,KACxDC,EAAUe,IAAe/kC,EAAAA,EAAAA,IAASikC,GAAmB,KACrDE,EAAKa,IAAUhlC,EAAAA,EAAAA,IAASokC,GAAc,KACtCtB,EAAUC,IAAe/iC,EAAAA,EAAAA,IAAyB0iC,GAAmB,IAEtEuC,GAAuBz5B,EAAAA,EAAAA,GAAS64B,GAAmB,EAAO54B,EAAAA,GAAAA,SAE1DqxB,EAAYt9B,IAAa0lC,EAAAA,GAAAA,WACzBC,GAA+B,IAAbrC,EAElBsC,GAAoBjnC,EAAAA,EAAAA,KAAQ,KAC5BgnC,IAIGv/B,QAAQwE,IAAUs6B,IAAkD,IAAxB9B,IAClD,CAACx4B,EAAOs6B,EAAwBS,EAAiBvC,KAEpDrjB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,cAIlD5hC,EAAAA,EAAAA,KAAU,KACR23B,IAAa,KACX0M,SAED,CAACA,KAEJrkC,EAAAA,EAAAA,KAAU,KACR4kC,OAASlmC,KACR,CAACsmC,KAEJhlC,EAAAA,EAAAA,KAAU,KACR6kC,EAAaf,GAAoB,IACjCgB,EAAYd,GAAmB,IAC/Be,EAAOZ,GAAc,MACpB,CAACL,EAAkBE,EAAiBG,KAEvCnkC,EAAAA,EAAAA,KAAU,KACR8iC,EAAYL,GAAmB,MAC9B,CAACA,KAEJziC,EAAAA,EAAAA,KAAU,KACJT,IAAa0lC,EAAAA,GAAAA,WACfP,GAA0B,GAC1BF,GAAqB,GACrBG,OAASjmC,MAEV,CAACa,IAEJ,MAAM6lC,GAAoBtnC,EAAAA,EAAAA,KAAaunC,IACrCT,EAASS,KACR,IAEGC,GAAwBxnC,EAAAA,EAAAA,KAAa+C,IACzCgkC,EAAahkC,EAAE6G,OAAO+G,OACtBi2B,GAA0B,KACzB,IAEGa,GAAuBznC,EAAAA,EAAAA,KAAa+C,IACxCikC,EAAYjkC,EAAE6G,OAAO+G,OACrBi2B,GAA0B,KACzB,IAEGc,GAAkB1nC,EAAAA,EAAAA,KAAa+C,IACnCkkC,EAAOlkC,EAAE6G,OAAO+G,OAChBi2B,GAA0B,KACzB,IAEGvB,GAAuBrlC,EAAAA,EAAAA,KAAa2Q,IACxCq0B,EAAYr0B,GACZ+1B,GAAqB,KACpB,IAEGiB,GAAoB3nC,EAAAA,EAAAA,KAAY,KACpC,MAAM4nC,EAAmB7B,EAAUR,OAC7BsC,EAAkB5B,EAASV,OAC3BuC,EAAa1B,EAAIb,OAElBqC,EAAiBvpC,OAKlBypC,EAAWzpC,OAlHI,GAmHjBwoC,EAAShB,IAIXW,EAAc,CACZn6B,MAAAA,KACIs6B,GAA0B,CAC5BZ,UAAW6B,EACX3B,SAAU4B,EACVzB,IAAK0B,MAEHrB,GAAqB,CACvB1B,SAAAA,KAjBF8B,EAASjB,MAoBV,CACDv5B,EACA05B,EAAWE,EAAUG,EAAKO,EAC1B5B,EAAU0B,EACVD,IAGF,OACE,0BAAK7lC,UAAU,wBACb,0BAAKA,UAAU,kCACb,0BAAKA,UAAU,yBACb,mBAAConC,GAAA,EAAD,CACEb,qBAAsBA,EACtBzsB,SAAU6sB,EACV/f,MAAM,0BACNjN,SAAUykB,IAEZ,mBAAC/b,GAAA,EAAD,CACErS,MAAOo1B,EACPtrB,SAAU+sB,EACV1V,MAAO7xB,EAAK,aACZqa,SAAUykB,EACVxY,MAAOA,IAAUqf,GAA2Brf,OAAQ3lB,IAEtD,mBAACoiB,GAAA,EAAD,CACErS,MAAOs1B,EACPxrB,SAAUgtB,EACV3V,MAAO7xB,EAAK,YACZqa,SAAUykB,IAEZ,mBAAC/b,GAAA,EAAD,CACErS,MAAOy1B,EACP3rB,SAAUitB,EACV5V,MAAO7xB,EAAK,WACZqa,SAAUykB,EACVxY,MAAOA,IAAUsf,GAAqBtf,OAAQ3lB,IAGhD,wBAAGD,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,IAChEgZ,EAAAA,GAAAA,GAAW3Z,EAAK,0BAA2B,CAAC,KAAM,sBAIvD,0BAAKU,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,aAEhF,mBAAC+nC,GAAD,CACErD,gBAAiBI,GAAY,GAC7BhG,UAAWA,EACX8F,oBAAqBA,EACrBC,cAAeA,EACfrqB,SAAU4qB,IAGZ,wBAAG1kC,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,IAChEgZ,EAAAA,GAAAA,GAAW3Z,EAAK,gBAAiB,CAAC,KAAM,qBAE1C8kC,GACC,wBAAGpkC,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAChEX,EAAK,qBAAqB,8BAC3B,2BAAMU,UAAU,iBAAhB,gBAA8CokC,MAMtD,mBAACkD,GAAA,EAAD,CACEjuB,QAASqtB,EACTxmC,QAAS8mC,EACTrtB,SAAUykB,EACVj+B,UAAU,gBAETi+B,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,qB,0BCjNvB,MAsIA,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ+nB,EAAAA,GAAAA,IAAK/nB,EAAOic,SAASC,MAAO,CACjC,+BACA,iCACA,2BACA,6BACA,+BACA,iCACA,2BACA,6BACA,8BACA,gCACA,0BACA,4BACA,kBACA,oBACA,2BAjBcnc,EAtImC,IAmBjD,IAnBkD,SACtDsN,EADsD,eAEtDg3B,EAFsD,QAGtD7I,EAHsD,6BAItD+N,EAJsD,+BAKtDC,EALsD,yBAMtDC,EANsD,2BAOtDC,EAPsD,6BAQtDC,EARsD,+BAStDC,EATsD,yBAUtDC,EAVsD,2BAWtDC,EAXsD,4BAYtDC,EAZsD,8BAatDC,EAbsD,wBActDC,EAdsD,0BAetDC,EAfsD,gBAgBtDC,EAhBsD,kBAiBtDC,EAjBsD,sBAkBtDC,GACI,EACJ,MAAM,iBAAEC,IAAqBvpC,EAAAA,EAAAA,MAEvBO,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAElD,MAAMoF,GAAyBlpC,EAAAA,EAAAA,KAAa2Q,GACnC1Q,EAAK,4BAA6BA,EAAK,cAAe8pB,OAAOof,EAAAA,GAAgCx4B,IAAS,OAC5G,CAAC1Q,IAEEmpC,GAAuBppC,EAAAA,EAAAA,KAAa2Q,IACxCs4B,EAAiB,CAAED,sBAAuBG,EAAAA,GAAgCx4B,OACzE,CAACs4B,IAmBJ,SAASI,EACP9hB,EACApd,EACAm/B,EACAC,EACAC,EACAC,GAEA,OACE,0BAAK9oC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAY2mB,GAE3E,mBAACmiB,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,iCACZ0pC,QAASL,EACTM,QAAUC,GAAcZ,EAAiB,CAAE,CAAE,cAAa9+B,iBAAoB0/B,MAEhF,mBAACH,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,qCACZ0pC,QAASJ,EACTK,QAAUC,GAAcZ,EAAiB,CAAE,CAAE,cAAa9+B,mBAAsB0/B,MAElF,mBAACH,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,mCACZ0pC,QAASH,EACTI,QAAUC,GAAcZ,EAAiB,CAAE,CAAE,cAAa9+B,aAAgB0/B,MAE5E,mBAACH,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,iCACZ0pC,QAASF,EACTG,QAAUC,GAAcZ,EAAiB,CAAE,CAAE,cAAa9+B,eAAkB0/B,MAGrE,SAAR1/B,GAlDP,WACE,MAAMwG,EAAQw4B,EAAAA,GAAAA,QAAwCH,GAEtD,OACE,0BAAKroC,UAAU,QACb,mBAACmpC,GAAA,EAAD,CACEhY,MAAO7xB,EAAK,2BACZyF,IAAK,EACLD,IAAK,EACLkL,OAAkB,IAAXA,EAAeA,EAAQ,EAC9Bo5B,YAAab,EACbzuB,SAAU2uB,KAuCOY,IAKzB,OACE,0BAAKrpC,UAAU,kCACZ0oC,EACCppC,EAAK,2BACL,QACAioC,EACAC,EACAC,EACAC,GAEDgB,EACCppC,EAAK,2BACL,QACAqoC,EACAC,EACAC,EACAC,GAEDY,EACC,sBACA,OACAX,EACAC,EACAC,EACAC,GAGF,0BAAKloC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,kBAEhF,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,YACZ0pC,QAASb,EACTc,QAAUC,GAAcZ,EAAiB,CAAEH,gBAAiBe,MAE9D,mBAACH,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,kCACZ0pC,QAASZ,EACTa,QAAUC,GAAcZ,EAAiB,CAAEF,kBAAmBc,Y,eCjIxE,MAAMI,IAAiCxnC,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GAqLrE,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEs6B,WAAYiR,EACZ7lB,KAAM8lB,EACNC,YAAaC,GACX1rC,EAAOq6B,YAEX,MAAO,CACLkR,iBAAAA,EACAC,YAAAA,EACAE,uBAAAA,KAXc3rC,EAjLmC,IASjD,IATkD,SACtDsN,EADsD,eAEtDs+B,EAFsD,aAGtDC,EAHsD,eAItDvH,EAJsD,QAKtD7I,EALsD,iBAMtD+P,EANsD,YAOtDC,EAPsD,uBAQtDE,GACI,EACJ,MAAM,2BACJG,EADI,cAEJC,EAFI,WAGJC,IACEhrC,EAAAA,EAAAA,OAEGq4B,EAAe4S,IAAoB1oC,EAAAA,EAAAA,OACnC2oC,EAAmBC,IAAwB5oC,EAAAA,EAAAA,KAAS,GACrD6oC,GAAsB9qC,EAAAA,EAAAA,KAAY,IAAM6qC,GAAqB,IAAO,KAE1E3oC,EAAAA,EAAAA,KAAU,KACH61B,IACHN,EAAAA,GAAAA,GAAiB,cAAcC,KAAKiT,KAErC,CAAC5S,KAIJ71B,EAAAA,EAAAA,KAAU,KACR+nC,IAA+B,KAC7BO,SAED,CAACA,IAEJ,MAAMO,GAAqB/qC,EAAAA,EAAAA,KAAY,KACjCrC,OAAOg5B,KAAKwT,GAAa9rC,QArCL,GAsCtBqsC,EAAW,CACT/S,KAAM,CACJ55B,QAAS,0BACT0oB,aAAa,KAOnB6jB,MACC,CAACH,EAAaO,EAAYJ,IAEvBrqC,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAElD,MAAMkH,GAAuBC,EAAAA,GAAAA,MACvBC,GAAc9qC,EAAAA,EAAAA,KAAQ,KAC1B,GAAK8pC,EAIL,OAAOA,EAAiBtmB,KAAKzmB,IAC3B,MAAMguC,EAAShB,EAAYhtC,GAE3B,MAAO,CACLA,GAAIguC,EAAOhuC,GACXoqB,MAAO4jB,EAAO5jB,MACd6jB,UAAUC,EAAAA,EAAAA,IAAyBprC,EAAMkrC,EAAQH,EAAqBG,EAAOhuC,WAGhF,CAAC+sC,EAAkBC,EAAalqC,EAAM+qC,IAEnCM,GAAoCtrC,EAAAA,EAAAA,KAAamrC,IACjDxtC,OAAOg5B,KAAKwT,GAAa9rC,QAzEL,GA0EtBqsC,EAAW,CACT/S,KAAM,CACJ55B,QAAS,0BACT0oB,aAAa,KAOnBgkB,EAAc,CAAEU,OAAAA,MACf,CAAChB,EAAaM,EAAeC,IAEhC,OACE,0BAAK/pC,UAAU,kCACb,0BAAKA,UAAU,2BACb,0BAAKA,UAAU,yBACZo3B,GACC,mBAACD,GAAA,EAAD,CACE36B,GAAG,sBACHsD,KAAM8qC,EAAAA,GACNxT,cAAeA,EACfC,KAAM4S,EACNzS,QAAM,EACNC,OAAQ0S,KAKd,wBAAGnqC,UAAU,iCAAiCsC,IAAI,QAC/ChD,EAAK,wBAGR,mBAACM,EAAA,EAAD,CAEEI,UAAU,iBACVD,MAAM,UACND,KAAK,UACL+qC,MAAI,EACJC,OAAK,EACL5qC,QAASkqC,EACTnpB,MAAO3hB,EAAK2hB,OAEZ,wBAAGjhB,UAAU,aACZV,EAAK,qBAIV,0BAAKU,UAAU,sBACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,YAEpFirC,MAAAA,GAAAA,EAAa7sC,OAAS6sC,EAAYtnB,KAAKunB,GACtC,mBAACrnB,GAAA,EAAD,CACEnjB,UAAU,eACV+qC,QAAM,EACNC,WAAS,EACT9qC,QAAS,IAAM0pC,EAAaJ,EAAYgB,EAAOhuC,MAE/C,2BAAMwD,UAAU,SAASwqC,EAAO5jB,OAChC,2BAAM5mB,UAAU,YAAYwqC,EAAOC,aAElCF,IAAgBA,EAAY7sC,OAC/B,wBAAGsC,UAAU,iCAAiCsC,IAAI,QAAlD,4BAGE,mBAACkhB,GAAA,EAAD,OAGJkmB,GAA0BxiC,QAAQwiC,EAAuBhsC,SACzD,0BAAKsC,UAAU,sBACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjEX,EAAK,sBAGPoqC,EAAuBzmB,KAAKunB,GAC3B,mBAACrnB,GAAA,EAAD,CACEnjB,UAAU,OACV+qC,QAAM,EACN7qC,QAAS,IAAMyqC,EAAkCH,IAEjD,0BAAKxqC,UAAU,qCACb,0BAAKA,UAAU,kBACb,2BAAMA,UAAU,SAASwqC,EAAO5jB,OAChC,2BAAM5mB,UAAU,YAAYwqC,EAAO5Z,cAGrC,mBAAChxB,EAAA,EAAD,CACEI,UAAU,OACVD,MAAM,UACND,KAAK,OACL+qC,MAAI,EACJC,OAAK,EACL7pB,MAAO3hB,EAAK2hB,OAEX3hB,EAAK,kB,eC7LxB,MAyBA,GAzBqC,IAM/B,IANgC,MACpCo1B,EADoC,SAEpCuW,EAFoC,eAGpCC,EAHoC,UAIpC9M,EAJoC,QAKpCl+B,GACI,EACJ,MAAMZ,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACK,EAAA,EAAD,CACEI,UAAU,iBACVD,MAAM,cACND,KAAK,UACLunB,QAAM,EACN+W,UAAWA,EACXnd,MAAO3hB,EAAK2hB,MACZ/gB,QAASA,GAET,wBAAGF,UAAU,cATf,QAUQ00B,EAVR,SAUqBA,EAAQ,EAAIwW,GAAmB,GAAED,KAAcA,ICclEE,GAAiB,0CACjBC,GAAiB,8BAwPvB,IAAettC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,QAAE4lB,GAAY5lB,EAAOylB,MAE3B,MAAO,CACL4nB,oBAAqBznB,EAAQG,OAC7BunB,sBAAuB1nB,EAAQK,YANjBlmB,EAtPmC,IAWjD,IAXkD,MACtDgkC,EADsD,SAEtDwJ,EAFsD,mBAGtDC,EAHsD,mBAItDC,EAJsD,SAKtDpgC,EALsD,eAMtDg3B,EANsD,QAOtD7I,EAPsD,OAQtDkS,EARsD,oBAStDL,EATsD,sBAUtDC,GACI,EACJ,MAAM,eACJK,EADI,cAEJ7B,IACE/qC,EAAAA,EAAAA,OAEGq4B,EAAe4S,IAAoB1oC,EAAAA,EAAAA,OACnC2oC,EAAmBC,IAAwB5oC,EAAAA,EAAAA,KAAS,GACrD6oC,GAAsB9qC,EAAAA,EAAAA,KAAY,IAAM6qC,GAAqB,IAAO,KAEnE0B,EAA6BC,IAAkCvqC,EAAAA,EAAAA,KAAS,IACxEwqC,EAA6BC,IAAkCzqC,EAAAA,EAAAA,KAAS,IAG7E0qC,gBAAiBC,EACjBC,kBAAmBC,IACjBC,EAAAA,GAAAA,IAAkBrK,EAAO,aAE3BiK,gBAAiBK,EACjBH,kBAAmBI,IACjBF,EAAAA,GAAAA,IAAkBrK,EAAO,aAE7BxgC,EAAAA,EAAAA,KAAU,KACH61B,IACHN,EAAAA,GAAAA,GAAiB,cAAcC,KAAKiT,KAErC,CAAC5S,KAEJ71B,EAAAA,EAAAA,KAAU,KACRsqC,GAA+B,GAC/BE,GAA+B,KAC9B,CAAChK,EAAMwK,WAEV,MAAOC,EAAwBC,IAA0BhtC,EAAAA,EAAAA,KAAQ,KAC/D,MAAMitC,EAAoB,IAAIC,IAAI,IAC5BtB,GAAuB,MACvBC,GAAyB,KAGzBsB,GAAwBC,EAAAA,GAAAA,IAAwBZ,EAAiBS,GACjEI,GAAwBD,EAAAA,GAAAA,IAAwBR,EAAiBK,GAEvE,MAAO,CACLd,EACIgB,EACAA,EAAsBlM,MAAM,EA7DV,EA6DmCyL,EAAkBzuC,QAC3EouC,EACIgB,EACAA,EAAsBpM,MAAM,EAhEV,EAgEmC4L,EAAkB5uC,WAE5E,CACD2uC,EAAiBJ,EAAiBE,EAAmBG,EACrDR,EAA6BF,EAC7BP,EAAqBC,IAGjBhsC,GAAOC,EAAAA,EAAAA,KA0Db,SAASwtC,EAAYC,GACnB,MAAMd,EAA6B,aAATc,EAAsBb,EAAoBG,EAC9DW,EAA0B,aAATD,EAAsBR,EAAyBC,EAEhES,EAAsB,aAATF,EAAsBpB,EAA8BE,EAEjEqB,GADsB,aAATH,EAAsBf,EAAkBI,GACzB3uC,OAASwuC,EAAkBxuC,OAASuvC,EAAevvC,OAC/E0vC,EAAwB,aAATJ,EACjB,IAAMnB,GAA+B,GACrC,IAAME,GAA+B,GAEzC,OACE,sCACGG,EAAkBjpB,KAAKzZ,GAnC9B,SAAwBA,EAAawjC,GACnC,MAAMK,EAAoB,aAATL,EACbM,GAAAA,GAAAA,MAAyB,QAAG9jC,IAAK+jC,GAAR,SAAsBA,IAAY/jC,KAC3DgkC,GAAAA,GAAAA,MAAyB,QAAGhkC,IAAK+jC,GAAR,SAAsBA,IAAY/jC,KAE/D,GAAK6jC,EAIL,OACE,mBAAClqB,GAAA,EAAD,CACE3Z,IAAK6jC,EAAS7jC,IACdxJ,UAAU,kCACVS,KAAM4sC,EAAS5sC,KACfsqC,QAAM,EACN0C,UAAQ,GAEPnuC,EAAK+tC,EAASzmB,QAkBiB8mB,CAAelkC,EAAKwjC,KACnDC,EAAehqB,KAAKzmB,GACnB,mBAAC2mB,GAAA,EAAD,CACEnjB,UAAU,kCACV+qC,QAAM,EACN0C,UAAQ,IAEPp1B,EAAAA,EAAAA,IAAS7b,GACR,mBAAC4mB,GAAA,EAAD,CAAiB4V,WAAW,QAAQ1V,OAAQ9mB,IAE5C,mBAAC+mB,GAAA,EAAD,CAAeyV,WAAW,QAAQvuB,OAAQjO,QAI7C0wC,GAAcC,EAAiB,GAChC,mBAAC,GAAD,CACEzY,MAAOyY,EACPlC,SAAS,OACT/qC,QAASktC,KAOnB,OA9FAvsB,EAAAA,EAAAA,IAAexV,EAAUqgC,EAAQrJ,EAA+B,SAAfN,EAAMiL,KACnD7J,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,qBA6FF,0BAAKnjC,UAAU,wBACb,0BAAKA,UAAU,kCACb,0BAAKA,UAAU,2BACb,0BAAKA,UAAU,yBACZo3B,GACC,mBAACD,GAAA,EAAD,CACE36B,GAAG,sBACHsD,KAAM8qC,EAAAA,GACNxT,cAAeA,EACfC,KAAM4S,GAAqB7gB,OAAO2Y,EAAMwK,UACxC/U,QAAM,EACNC,OAAQ0S,KAKE,WAAfpI,EAAMiL,MACL,wBAAGhtC,UAAU,iCAAiCsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACrEX,EAAK,sBAIV,mBAAC+iB,GAAA,EAAD,CACEriB,UAAU,OACVmxB,MAAO7xB,EAAK,kBACZ0Q,MAAO+xB,EAAMyI,OAAO5jB,MACpB9M,SArHV,SAAsBtH,GACpB,MAAM,cAAErJ,GAAkBqJ,EAC1B+4B,EAAS,CAAE1xB,KAAM,WAAYooB,QAAS94B,EAAc6G,MAAM40B,UAoHlDhf,MAAOmc,EAAMnc,OAASmc,EAAMnc,QAAUulB,GAAiBA,QAAiBlrC,KAI5E,0BAAKD,UAAU,gCACZ+hC,EAAMnc,OAASmc,EAAMnc,QAAUwlB,IAC9B,wBAAGprC,UAAU,8CAA8CsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAClFX,EAAKyiC,EAAMnc,QAIhB,yBAAI5lB,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,kBAErF,mBAAC6jB,GAAA,EAAD,CACEnjB,UAAU,gDACVS,KAAK,MACLP,QAASsrC,GAERlsC,EAAK,mBAGPytC,EAAY,aAGf,0BAAK/sC,UAAU,gCACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,kBAErF,mBAAC6jB,GAAA,EAAD,CACEnjB,UAAU,gDACVS,KAAK,MACLP,QAASurC,GAERnsC,EAAK,mBAGPytC,EAAY,cAIjB,mBAACzF,GAAA,EAAD,CACEjuB,QAASnS,QAAQ66B,EAAM4L,WACvBh0B,SAAUooB,EAAM3D,UAChBl+B,QA3JN,WACE,MAAM,MAAE0mB,GAAUmb,EAAMyI,OAEnB5jB,EAKAqlB,EAAgBvuC,QAAWV,OAAOg5B,KAAKmW,GAAmBzuC,QAK/D6tC,EAAS,CAAE1xB,KAAM,eAAgBooB,SAAS,IACvB,SAAfF,EAAMiL,KACRrB,EAAe,CAAEnvC,GAAIulC,EAAMwK,SAAUqB,aAAc7L,EAAMyI,SAEzDV,EAAc,CAAEU,OAAQzI,EAAMyI,SAGhCtmC,YAAW,KACTs1B,MA1GiB,MA8FjB+R,EAAS,CAAE1xB,KAAM,WAAYooB,QAASmJ,KALtCG,EAAS,CAAE1xB,KAAM,WAAYooB,QAASkJ,MAwJpChrC,UAA0B,SAAf4hC,EAAMiL,KAAkB,eAAiB,iBAEnDjL,EAAM3D,UACL,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,qBC7EvB,IAAelC,EAAAA,EAAAA,KA5KkC,IAS3C,IAT4C,KAChDkvC,EADgD,QAEhDjoB,EAFgD,YAGhD8oB,EAHgD,kBAIhD3B,EAJgD,YAKhD4B,EALgD,oBAMhDC,EANgD,0BAOhDC,EAPgD,eAQhDtsB,GACI,EAEJ,MAAMjI,GAAW1V,EAAAA,EAAAA,IAAyB,MACpCkqC,EAAqB,aAATjB,EAAsBM,GAAAA,GAAsBE,GAAAA,GACxDU,EAAiBL,EAAYnwC,OAASwuC,EAAkBxuC,OAhBzC,GAiBfywC,EAAcN,EAAYnwC,QAlBhB,KAoBhB6D,EAAAA,EAAAA,KAAU,KACR2C,YAAW,KACTsa,uBAAsB,KACpB/E,EAASlV,QAAS6pC,aAzBH,OA4BlB,IAEH,MAAMC,GAAkBhvC,EAAAA,EAAAA,KAAa7C,IACnC,MAAM8xC,EAAiB,IAAIT,GACvBS,EAAe7xC,SAASD,GAC1B8xC,EAAeC,OAAOD,EAAelzB,QAAQ5e,GAAK,GAElD8xC,EAAepiB,KAAK1vB,GAEtBuxC,EAAoBO,KACnB,CAACT,EAAaE,IAEXS,GAAsBnvC,EAAAA,EAAAA,KAAamK,IACvC,MAAMilC,EAAuB,IAAIvC,GAC7BuC,EAAqBhyC,SAAS+M,GAChCilC,EAAqBF,OAAOE,EAAqBrzB,QAAQ5R,GAAM,GAE/DilC,EAAqBviB,KAAK1iB,GAE5BwkC,EAA0BS,KACzB,CAACvC,EAAmB8B,IAEjB9rB,GAAqB7iB,EAAAA,EAAAA,KAAa+C,IACtC,MAAM,MAAE4N,GAAU5N,EAAE+G,cACpBuY,EAAe1R,KACd,CAAC0R,IAEEpiB,GAAOC,EAAAA,EAAAA,MAgENsiB,EAAaC,IAAWC,EAAAA,GAAAA,QAAkB9hB,EAAW8kB,EAAS7d,QAAQ4mC,IAE7E,OACE,0BAAK9tC,UAAU,qCACb,0BAAKA,UAAU,+BACZksC,EAAkBjpB,KAnEzB,SAAgCzZ,GAC9B,MAAMklC,EAAeT,EAAU1Y,MAAK,QAAG/rB,IAAK+jC,GAAR,SAAsB/jC,IAAQ+jC,KAClE,GAAKmB,EAIL,OACE,mBAAC/Q,GAAA,EAAD,CACEl9B,KAAMiuC,EAAajuC,KACnBmmB,MAAOtnB,EAAKovC,EAAa9nB,OACzB+nB,YAAaT,EACbU,UAAQ,EACR1uC,QAASsuC,EACT3Q,SAAU6Q,EAAallC,SAuDtBqkC,EAAY5qB,KAAI,CAACzmB,EAAI0mB,IACpB,mBAACya,GAAA,EAAD,CACEC,aAAcphC,EACdmyC,YAAaT,GAAkBhrB,EAAI2qB,EAAYnwC,OA5H3B,EA6HpBkxC,UAAQ,EACR1uC,QAASmuC,EACTxQ,SAAUrhC,MAGZ2xC,EAQA,wBAAGnuC,UAAU,oBAAoBsC,IAAI,QACjC,6CARJ,mBAAC+f,GAAA,EAAD,CACE7c,IAAKiU,EACLzJ,MAAO89B,EACPh0B,SAAUoI,EACVK,YAAajjB,EAAK,aAQxB,mBAACqjB,GAAA,EAAD,CACE3iB,UAAU,4BACVm/B,aAAa,aACbvc,MAAOf,EACPgB,WAAYf,KAETD,IAAgBA,EAAYnkB,QAAUmkB,EAAYplB,SAASsoB,EAAQ,MACpE,sCACE,yBAAIvb,IAAI,UAAUxJ,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC1EX,EAAK,oBAEP2uC,EAAUhrB,KAnFrB,SAAwBpJ,GACtB,OACE,mBAACsJ,GAAA,EAAD,CACE3Z,IAAKqQ,EAAKrQ,IACVxJ,UAAU,sDACVE,QAAS,IAAMsuC,EAAoB30B,EAAKrQ,KACxC9D,QAAM,GAEN,wBAAG1F,UAAY,QAAO6Z,EAAKpZ,SAC3B,yBAAIT,UAAU,YAAYsC,IAAI,QAAQhD,EAAKua,EAAK+M,QAChD,mBAACmiB,GAAA,EAAD,CACE5X,MAAM,GACN6X,QAASkD,EAAkBzvC,SAASod,EAAKrQ,KACzC3J,OAAK,QAuEH,0BAAK2J,IAAI,UAAUxJ,UAAU,wBAC7B,yBAAIwJ,IAAI,UAAUxJ,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC1EX,EAAK,iBAKXuiB,MAAAA,GAAAA,EAAankB,OACZmkB,EAAYoB,KAzEpB,SAAoBzmB,GAClB,MAAMqyC,EAAahB,EAAYpxC,SAASD,GAExC,OACE,mBAAC2mB,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,iDACVE,QAAS,IAAMmuC,EAAgB7xC,GAC/BkJ,QAAM,EACNiU,UAAWk1B,GAAcV,IAExB91B,EAAAA,EAAAA,IAAS7b,GACR,mBAAC4mB,GAAA,EAAD,CAAiBE,OAAQ9mB,IAEzB,mBAAC+mB,GAAA,EAAD,CAAe9Y,OAAQjO,EAAIsyC,cAAY,IAEzC,mBAAC/F,GAAA,EAAD,CACE5X,MAAM,GACN6X,QAAS6F,EACThvC,OAAK,QAuDHgiB,IAAgBA,EAAYnkB,OAC9B,wBAAGsC,UAAU,aAAawJ,IAAI,cAA9B,yBAEA,mBAACga,GAAA,EAAD,CAASha,IAAI,iBChFvB,IAAe1L,EAAAA,EAAAA,KAhGkC,IAO3C,IAP4C,KAChDkvC,EADgD,MAEhDjL,EAFgD,SAGhDwJ,EAHgD,SAIhDlgC,EAJgD,eAKhDg3B,EALgD,QAMhD7I,GACI,EACJ,MAAM,WAAEuV,GAAehN,GACjB,gBAAEiK,EAAF,kBAAmBE,IAAsBE,EAAAA,GAAAA,IAAkBrK,EAAOiL,GAAM,GAExE1tC,GAAOC,EAAAA,EAAAA,KAEPyvC,GAAsBC,EAAAA,GAAAA,IAA8BC,EAAAA,IACpDC,GAA2BF,EAAAA,GAAAA,IAA8BG,EAAAA,IAEzDC,GAAe5vC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMkkB,GAAYwB,EAAAA,EAAAA,MAAY1B,MAAMC,KAE9BqB,EAAU,IAAIiqB,GAAuB,MAAOG,GAA4B,IAC9E,OAAOrqB,EAAAA,GAAAA,IAAO,IACTknB,MACA1mB,EAAAA,EAAAA,IAAkBhmB,EAAMylB,EAASpB,EAAWorB,OAEhD,CAACC,EAAqBG,EAA0BnD,EAAiB1sC,EAAMyvC,IAEpE7sB,GAAqB7iB,EAAAA,EAAAA,KAAaiwC,IACtC/D,EAAS,CACP1xB,KAAM,gBACNooB,QAASqN,MAEV,CAAC/D,IAEEgE,GAA0BlwC,EAAAA,EAAAA,KAAamwC,IAEzCjE,EADW,aAATyB,EACO,CACPnzB,KAAM,oBACNooB,QAAS,IAAKF,EAAM0N,eAAgBxD,gBAAiBuD,IAG9C,CACP31B,KAAM,oBACNooB,QAAS,IAAKF,EAAM2N,eAAgBrD,gBAAiBmD,OAGxD,CAACxC,EAAMjL,EAAOwJ,IAEXoE,GAAgCtwC,EAAAA,EAAAA,KAAa22B,IACjD,MAAM4Z,EAAsC,GAC5C5Z,EAAK6Z,SAASrmC,IACZomC,EAAWpmC,IAAO,KAIlB+hC,EADW,aAATyB,EACO,CACPnzB,KAAM,oBACNooB,QAAS,CACPgK,gBAAiBD,KACd4D,IAIE,CACP/1B,KAAM,oBACNooB,QAAS,CACPoK,gBAAiBL,KACd4D,OAIR,CAAC5C,EAAMhB,EAAiBT,IAO3B,OALA1qB,EAAAA,EAAAA,IACExV,EAAUmuB,EAAS6I,EACV,aAAT2K,EAAsB7J,EAAAA,GAAAA,qBAAuCA,EAAAA,GAAAA,sBAG1DkM,EAKH,mBAAC,GAAD,CACErC,KAAMA,EACNjoB,QAASsqB,EACTxB,YAAa7B,EACbE,kBAAmBA,EACnB4B,YAAaiB,EACbhB,oBAAqBwB,EACrBvB,0BAA2B2B,EAC3BjuB,eAAgBQ,IAZX,mBAACsB,GAAA,EAAD,SCwCX,IAAe1lB,EAAAA,EAAAA,KA9HuB,IAQhC,IARiC,cACrCokC,EADqC,YAErC4N,EAFqC,MAGrC/N,EAHqC,SAIrCwJ,EAJqC,SAKrClgC,EALqC,eAMrCg3B,EANqC,QAOrC7I,GACI,EACJ,MAAMuW,GAAc1wC,EAAAA,EAAAA,KAAY,KAE5B6iC,IAAkBiB,EAAAA,GAAAA,qBACfjB,IAAkBiB,EAAAA,GAAAA,mBAClBjB,IAAkBiB,EAAAA,GAAAA,+BAErBj/B,YAAW,KACTqnC,EAAS,CAAE1xB,KAAM,YA5BG,KAiCtBqoB,IAAkBiB,EAAAA,GAAAA,sBACfjB,IAAkBiB,EAAAA,GAAAA,qBAUvB3J,IARqB,WAAfuI,EAAMiL,KACR3K,EAAec,EAAAA,GAAAA,qBAEfd,EAAec,EAAAA,GAAAA,qBAMlB,CACDpB,EAAMiL,KAAMzB,EACZrJ,EAAe1I,EAAS6I,IAGpB+H,GAAqB/qC,EAAAA,EAAAA,KAAY,KACrCksC,EAAS,CAAE1xB,KAAM,UACjBwoB,EAAec,EAAAA,GAAAA,uBACd,CAACd,EAAgBkJ,IAEdyE,GAAmB3wC,EAAAA,EAAAA,KAAamrC,IACpCe,EAAS,CAAE1xB,KAAM,aAAcooB,QAASuI,IACxCnI,EAAec,EAAAA,GAAAA,qBACd,CAACoI,EAAUlJ,IAER4N,GAAyB5wC,EAAAA,EAAAA,KAAY,KACzCksC,EAAS,CAAE1xB,KAAM,uBACjBwoB,EAAeH,IAAkBiB,EAAAA,GAAAA,8BAC7BA,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,wBACH,CAACjB,EAAeqJ,EAAUlJ,IAEvB6N,GAAyB7wC,EAAAA,EAAAA,KAAY,KACzCksC,EAAS,CAAE1xB,KAAM,uBACjBwoB,EAAeH,IAAkBiB,EAAAA,GAAAA,8BAC7BA,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,wBACH,CAACjB,EAAeqJ,EAAUlJ,IAE7B,OAAQH,GACN,KAAKiB,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEwG,eAAgBS,EAChBR,aAAcoG,EACd3N,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAGf,KAAK2J,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,8BACH,OACE,mBAAC,GAAD,CACEpB,MAAOA,EACPwJ,SAAUA,EACVC,mBAAoByE,EACpBxE,mBAAoByE,EACpB1W,QAASuW,EACT1N,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXpE,OAAQlS,IAGd,KAAK2J,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACE6J,KAAK,WACLjL,MAAOA,EACPwJ,SAAUA,EACV/R,QAASuW,EACT1N,eAAgBA,EAChBh3B,SAAUA,IAGhB,KAAK83B,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACE6J,KAAK,WACLjL,MAAOA,EACPwJ,SAAUA,EACV/R,QAASuW,EACT1N,eAAgBA,EAChBh3B,SAAUA,IAIhB,QACE,W,wBC/HN,MAmCA,IAAevN,EAAAA,EAAAA,KAnC+B,IAIxC,IAJyC,KAC7CgC,EAAOqwC,EAAAA,GADsC,WAE7CC,EAF6C,oBAG7C9Q,GACI,EAEJ,MAAM95B,GAAMzB,EAAAA,EAAAA,IAAuB,MAE7BssC,GAAiBC,EAAAA,GAAAA,IAAkB9qC,EAAK85B,GAExCiR,EAAa,aAAYH,EAAW5zC,KACpCg0C,GAAa1jC,EAAAA,EAAAA,GAASyjC,GAAYF,EAAgBtjC,EAAAA,GAAAA,QAClDzE,GAAuBmoC,EAAAA,GAAAA,GAAmBD,GAE1CE,GAAejxC,EAAAA,EAAAA,KAAQ,KAC3B,IAAI+wC,EAEJ,OAAOG,EAAAA,GAAAA,IAAgBP,EAAWxpB,MAAO,KACxC,CAAC4pB,EAAYJ,EAAWxpB,QAE3B,OACE,0BAAKphB,IAAKA,EAAKxF,UAAU,qBACtB0wC,EACAF,GACC,mBAACrZ,GAAA,EAAD,CACE36B,GAAI+zC,EACJzwC,KAAMA,EACNs3B,cAAeoZ,EACfxwC,UAAWsI,QCLrB,IAAexK,EAAAA,EAAAA,KA1BuB,IAAyC,IAAxC,WAAEsyC,EAAF,oBAAc9Q,GAA0B,EAE7E,MAAM95B,GAAMzB,EAAAA,EAAAA,IAAuB,MAE7BssC,GAAiBC,EAAAA,GAAAA,IAAkB9qC,EAAK85B,GAExCjhC,GAAYyO,EAAAA,EAAAA,GAASsjC,EAAWQ,cAAiB,aAAYR,EAAW5zC,MAAO6zC,GAC/E/nC,GAAuBmoC,EAAAA,GAAAA,GAAmBpyC,GAC1C4H,EAAQmqC,EAAWS,OAEnBH,GAAejxC,EAAAA,EAAAA,KAAQ,KAC3B,GAAKwG,IAAU6qC,EAAAA,KAAuBzyC,EAAW,OAAOsyC,EAAAA,GAAAA,IAAgBP,EAAWxpB,MAAO,KACzF,CAAC3gB,EAAO5H,EAAW+xC,EAAWxpB,QAEjC,OACE,0BAAKphB,IAAKA,EAAKxF,UAAU,qBACtB0wC,EACAzqC,EACC,4BAAOxK,IAAK4C,EAAW2B,UAAWsI,EAAsB0B,MAAI,EAACF,UAAQ,IAErE,0BAAKrO,IAAK4C,EAAW2B,UAAWsI,EAAsBsG,IAAI,S,eCdlE,MAmEA,IAAe9Q,EAAAA,EAAAA,KAnE0B,IAInC,UAJoC,WACxCsyC,EADwC,oBAExC9Q,EAFwC,QAGxCp/B,GACI,EACJ,MAAMZ,GAAOC,EAAAA,EAAAA,KAEb,IAAK6wC,IAAeA,EAAWW,SAC7B,OAGF,MAAMC,EAAY,UAAGZ,EAAWW,gBAAd,aAAG,EAAsB,GAE3C,OAAIX,EAAWQ,eAAiBI,EAE5B,mBAAC7tB,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,qBACVytC,UAAWuD,EACX9wC,QAAS,IAAM8wC,GAAgB9wC,EAAQ8wC,IAEvC,mBAACpxC,EAAA,EAAD,CACEO,UAAWiwC,EAAWxpB,MACtB7mB,MAAM,cACNkhB,MAAO3hB,EAAK2hB,OAEXmvB,EAAWa,SACV,mBAAC,GAAD,CACEnxC,KAAMoxC,EAAAA,GACNd,WAAYA,EACZ9Q,oBAAqBA,IAGvB,mBAAC,GAAD,CACE8Q,WAAYA,EACZ9Q,oBAAqBA,KAI3B,0BAAKt/B,UAAU,uBACb,0BAAKA,UAAU,SAASowC,EAAWxpB,OACnC,0BAAK5mB,UAAU,YAAYV,EAAK,2BAA4B8wC,EAAW1b,MAAO,QAMlF,mBAACvR,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,qBACVE,QAAS,IAAMA,EAAQ8wC,IAEvB,mBAACG,GAAA,EAAD,CACEC,QAASJ,EACTlxC,KAAMoxC,EAAAA,GACNtqB,MAAOwpB,EAAWxpB,MAClB0Y,oBAAqBA,IAEvB,0BAAKt/B,UAAU,uBACb,0BAAKA,UAAU,SAASowC,EAAWxpB,OACnC,0BAAK5mB,UAAU,YAAYV,EAAK,2BAA4B8wC,EAAW1b,MAAO,W,eCvCxF,MAAM2c,GAA0B,CAC9B,mBACA,gBACA,iBAGIC,GAAsC,CAAC,CAC3CngB,MAAO,UACPnhB,MAAO,OACN,CACDmhB,MAAO,UACPnhB,MAAO,QAsLT,IAAelS,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MAAO,KACF+nB,EAAAA,GAAAA,IAAK/nB,EAAOic,SAASC,MAAO,CAC7B,kBACA,iBACA,sBACA,wBACA,qBACA,qBACA,qBACA,eAEFq3B,cAAevzC,EAAO+yC,SAASS,MAAMC,OACrCC,gBAAiB1zC,EAAO+yC,SAASY,SACjCC,gBAAe,UAAE5zC,EAAO6zC,iBAAT,aAAE,EAAkBD,mBAfrB7zC,EAnL+B,IAa7C,IAb8C,SAClDsN,EADkD,eAElDg3B,EAFkD,QAGlD7I,EAHkD,cAIlD+X,EAJkD,gBAKlDG,EALkD,gBAMlDE,EANkD,gBAOlDE,EAPkD,eAQlDxmC,EARkD,oBASlDymC,EATkD,sBAUlDC,EAVkD,mBAWlDC,EAXkD,WAYlDC,GACI,EACJ,MAAM,iBACJ5J,IACEvpC,EAAAA,EAAAA,MAGEozC,GAAqBpuC,EAAAA,EAAAA,IAAuB,OAC1Cy6B,QAAS4T,IAAiC1T,EAAAA,GAAAA,IAAwB,CAAEC,QAASwT,KAC9E9rB,EAAaC,EAAWC,IAAc5B,EAAAA,GAAAA,MACtCysB,EAASiB,IAAc/wC,EAAAA,EAAAA,MAExBhC,GAAOC,EAAAA,EAAAA,KAEP+yC,EAAyB3rC,EAAAA,QAO3B1G,EAP0C,CAC5C,CAAE+P,MAAO,QAASmhB,MAAO7xB,EAAK,2BAA4BizC,SAAU,6BACpE,CACEviC,MAAO,aACPmhB,MAAO7xB,EAAKkzC,EAAAA,GAAY,6BAA+B,+BACvDD,SAAU,sBAIRE,GAA6BpzC,EAAAA,EAAAA,KAAaqzC,IAC9CrB,GAAwBxB,SAAQ,CAAC8C,EAAGzvB,KAClCloB,SAASoJ,KAAKlJ,UAAU8gB,OAAQ,mBAAkBkH,IAAKwvB,IAAaxvB,MAGtEolB,EAAiB,CAAEh9B,eAAgBonC,MAClC,CAACpK,IAEEsK,GAA8BvzC,EAAAA,EAAAA,KAAawzC,IAC/C73C,SAAS83C,gBAAgB51C,MAAM61C,YAC7B,uBAAyB,GAAEryC,KAAKoE,IAAI+tC,EAASjsC,EAAAA,GAAS,GAAK,SAE7D5L,SAAS83C,gBAAgB51C,MAAM61C,YAAY,wBAA0B,GAAEryC,KAAKoC,MAAgB,OAAV+vC,QAClF73C,SAAS83C,gBAAgB51C,MAAM61C,YAAY,sBAAwB,GAAEF,OACrE73C,SAAS83C,gBAAgBE,aAAa,yBAA0BH,EAAQh7B,YAExEywB,EAAiB,CAAEwJ,gBAAiBe,MACnC,CAACvK,IAEE2K,GAAyB5zC,EAAAA,EAAAA,KAAa6zC,IAC1C5K,EAAiB,CAAE4J,WAAYgB,IAC/B5K,EAAiB,CAAE6K,0BAA0B,KAE7CC,EAAAA,GAAAA,IAAcF,KACb,CAAC5K,IAEE+K,GAAwBh0C,EAAAA,EAAAA,KAAa2Q,IACzCqiC,EAAWriC,GACXsW,MACC,CAACA,IAEEgtB,EAAc/B,GAAiBA,EAActuB,KAAKzmB,IAAe,MACrE,QAAOk1C,MAAAA,GAAA,UAAAA,EAAkBl1C,UAAlB,UAAuB+2C,gBAAgB7B,EAAgBl1C,MAC7D+kB,OAAsBra,SAIzB,OAFA2Z,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAGhD,0BAAKnjC,UAAU,kCACb,0BAAKA,UAAU,sBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,aAEhF,mBAAC6pC,GAAA,EAAD,CACEhY,MAAO7xB,EAAK,YACZyF,IAAK,GACLD,IAAK,GACLkL,MAAO8hC,EACPh4B,SAAU84B,IAGZ,mBAACzvB,GAAA,EAAD,CACE1iB,KAAK,QACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,wBAE7B7jC,EAAK,oBAIV,0BAAKU,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAA/D,eAGA,mBAACmxB,GAAA,EAAD,CACEjQ,KAAK,aACLkQ,QAASigB,GACThgB,SAAU4gB,EACVp4B,SAAUm5B,KAId,0BAAKjzC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAA/D,mBAGA,wBAAGD,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAnE,yCAIA,mBAACkpC,GAAA,EAAD,CACE9X,QAASggB,GACTrhC,MAAO1E,EACPwO,SAAU24B,KAIbH,GACC,0BAAKtyC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,uBAEhF,mBAAC8xB,GAAA,EAAD,CACEjQ,KAAK,yBACLkQ,QAASihB,EACTx4B,SAAW9J,GAAUs4B,EAAiB,CAAEyJ,oBAAqB/hC,IAC7DshB,SAAUygB,KAKhB,0BAAK/xC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,qBAE/EsyC,GACC,mBAACzuB,GAAA,EAAD,CACEnjB,UAAU,0BACVE,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,gBAE9B,mBAAC3N,GAAA,EAAD,CAAqBN,SAAU0c,IAC/B,0BAAK5xC,UAAU,SAASV,EAAK,sBAIjC,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,mBACZ0pC,QAASgJ,EACT/I,QAAUC,GAAcZ,EAAiB,CAAE0J,sBAAuB9I,MAEpE,mBAACH,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,wBACZ0pC,QAASiJ,EACThJ,QAAUC,GAAcZ,EAAiB,CAAE2J,mBAAoB/I,MAGjE,0BAAKlpC,UAAU,OAAOwF,IAAK2sC,GACxBmB,GAAeA,EAAYrwB,KAAKmtB,GAC/B,mBAAC,GAAD,CACE5mC,IAAK4mC,EAAW5zC,GAChB4zC,WAAYA,EACZ9Q,oBAAqB8S,EACrBlyC,QAASmzC,OAIdjC,GACC,mBAAC,KAAD,CACEzxC,OAAQ0mB,EACRmtB,YAAapC,EACb9qC,QAASigB,UCrOrB,IAAIktB,GAEG,SAASC,KAAsF,IAAhEC,EAAgE,uDAAvD,IAAK/iC,EAAkD,uCAApBgjC,EAAoB,wDAC/FH,KACHA,GAAez4C,SAASC,cAAc,SACtCw4C,GAAaT,aAAa,OAAQ,SAGpCS,GAAaT,aAAa,SAAUW,GAEhCC,EACFH,GAAaI,gBAAgB,YAE7BJ,GAAaT,aAAa,WAAY,YAIxCS,GAAaK,SAAW,KACxBL,GAAazjC,MAAQ,GACrByjC,GAAaK,SAAWljC,EAExB6iC,GAAaM,Q,eCPR,SAASC,GAAQC,GACtB,MAAO,CACLC,SAASD,EAAME,UAAU,EAAG,GAAI,IAChCD,SAASD,EAAME,UAAU,EAAG,GAAI,IAChCD,SAASD,EAAME,UAAU,EAAG,GAAI,KAS7B,SAASC,GAAQH,GACtB,MAAMI,EAAKJ,EAAM,GAAGp8B,SAAS,IACvBy8B,EAAKL,EAAM,GAAGp8B,SAAS,IACvB08B,EAAKN,EAAM,GAAGp8B,SAAS,IAC7B,OAAqB,GAAbw8B,EAAG32C,OAAc,IAAM22C,EAAKA,IAAoB,GAAbC,EAAG52C,OAAc,IAAM42C,EAAKA,IAAoB,GAAbC,EAAG72C,OAAc,IAAM62C,EAAKA,GAcrG,SAASC,GAAT,GAAgF,IAA9DC,EAAGC,EAAGtX,GAAwD,EACrFqX,GAAK,IACLC,GAAK,IACLtX,GAAK,IAEL,IACInqB,EAAY0hC,EADZ7vC,EAAMpE,KAAKoE,IAAI2vC,EAAGC,EAAGtX,GAAIr4B,EAAMrE,KAAKqE,IAAI0vC,EAAGC,EAAGtX,GACvBwX,EAAY9vC,EAEnCsoB,EAAItoB,EAAMC,EAGd,GAFA4vC,EAAW,GAAP7vC,EAAW,EAAIsoB,EAAItoB,EAEnBA,GAAOC,EACTkO,EAAI,MACC,CACL,OAAQnO,GACN,KAAK2vC,EACHxhC,GAAKyhC,EAAItX,GAAKhQ,GAAKsnB,EAAItX,EAAI,EAAI,GAC/B,MACF,KAAKsX,EACHzhC,GAAKmqB,EAAIqX,GAAKrnB,EAAI,EAClB,MACF,KAAKgQ,EACHnqB,GAAKwhC,EAAIC,GAAKtnB,EAAI,EAItBna,GAAK,EAGP,MAAO,CAACA,EAAG0hC,EAAGC,GAcT,SAASC,GAAT,GAAgF,IACjFJ,EAAYC,EAAYtX,GADLnqB,EAAG0hC,EAAGC,GAAwD,EAGjF1xB,EAAIxiB,KAAKoC,MAAU,EAAJmQ,GACf6hC,EAAQ,EAAJ7hC,EAAQiQ,EACZ6xB,EAAIH,GAAK,EAAID,GACbK,EAAIJ,GAAK,EAAIE,EAAIH,GACjBM,EAAIL,GAAK,GAAK,EAAIE,GAAKH,GAE3B,OAAQzxB,EAAI,GACV,KAAK,EACHuxB,EAAIG,EACJF,EAAIO,EACJ7X,EAAI2X,EACJ,MACF,KAAK,EACHN,EAAIO,EACJN,EAAIE,EACJxX,EAAI2X,EACJ,MACF,KAAK,EACHN,EAAIM,EACJL,EAAIE,EACJxX,EAAI6X,EACJ,MACF,KAAK,EACHR,EAAIM,EACJL,EAAIM,EACJ5X,EAAIwX,EACJ,MACF,KAAK,EACHH,EAAIQ,EACJP,EAAIK,EACJ3X,EAAIwX,EACJ,MACF,KAAK,EACHH,EAAIG,EACJF,EAAIK,EACJ3X,EAAI4X,EAIR,MAAO,CACLt0C,KAAKb,MAAU,IAAJ40C,GACX/zC,KAAKb,MAAU,IAAJ60C,GACXh0C,KAAKb,MAAU,IAAJu9B,IAuDR,SAAS8X,GAAgBC,GAC9B,IAAKC,EAAKC,EAAYrlC,GAASwkC,GAAQW,GAOvC,OALAE,EAAa30C,KAAKqE,IAAI,EAAGswC,EAAa,IAAO,IAAO,EAAIA,IACxDrlC,EAAQA,EAAQ,GACZtP,KAAKoE,IAAI,EAAW,IAARkL,GACZtP,KAAKoE,IAAI,EAAGpE,KAAKqE,IAAI,EAAG,EAAY,IAARiL,IAExB,QAAa,IAANolC,MAA2B,IAAbC,OAA8B,IAARrlC,U,0BCzKrD,MAiFA,IAAelS,EAAAA,EAAAA,KAjFqB,IAK9B,UAL+B,UACnCw3C,EADmC,MAEnCpX,EAFmC,WAGnC2Q,EAHmC,QAInC3uC,GACI,EACJ,MAAM,KAAEq1C,EAAF,SAAQv6C,GAAas6C,EACrBE,EAAkB,YAAWx6C,EAASwB,KACtC4Q,EAAepS,EAASiS,eACxBA,GAAiBH,EAAAA,EAAAA,GAAU,GAAE0oC,YAC7BC,GAAWC,EAAAA,GAAAA,GAAa,UAAC16C,EAAS26C,iBAAV,aAAC,EAAoBC,QAAS1uC,QAAQ+F,IAAiB,IAC/E,qBAAE3E,IAAyBE,EAAAA,EAAAA,GAC/BtB,QAAQ+F,GAAkBG,QAC1BnN,OACAA,EACA,SAEK41C,EAAeC,IAAoBx0C,EAAAA,EAAAA,KAAS,IAEjDjD,UAAW03C,EADP,aACkB/2C,IACpBE,EAAAA,EAAAA,GAAyBs2C,GAAiBK,GACxCG,GAAiD,KAA/Bx8B,EAAAA,EAAAA,GAAYq8B,IAC5BztC,aAAcC,EAAqBC,qBAAsBC,IAAsBC,EAAAA,EAAAA,GACpFqtC,IAAkBE,GAAcR,IAASU,EAAAA,QAC1Ch2C,EACA+1C,EACA,QAGIE,GAAcnyC,EAAAA,EAAAA,MACpBmyC,EAAY3xC,QAAU25B,EAEtB,MAAMiY,GAAe92C,EAAAA,EAAAA,KAAY,KAC/B,WACE,MAAM+2C,QAAaC,EAAAA,GAAAA,IAAUN,SACvBO,GAASC,KAAKC,EAAAA,GAAsBN,EAAY3xC,QAAU6xC,GAChEl2C,EAAQq1C,IAHV,KAKC,CAACQ,EAAW71C,EAASq1C,KAExBh0C,EAAAA,EAAAA,KAAU,KACJw0C,GACFI,MAED,CAACJ,EAAWI,IAEf,MAAMviB,GAAcv0B,EAAAA,EAAAA,KAAY,KAC1B02C,EACFI,IAEAL,GAAkBW,IAAeA,MAElC,CAACV,EAAWI,IAETn2C,GAAYmC,EAAAA,EAAAA,GAChB,gBACA0sC,GAAc,YAGhB,OACE,0BAAK7uC,UAAWA,EAAWE,QAAS0zB,GAClC,0BAAK5zB,UAAU,eACb,6BACEwF,IAAKiwC,EACLz1C,UAAU,cAEZ,0BACEvE,IAAKwR,GAAkBG,EACvBpN,WAAWmC,EAAAA,EAAAA,GAAe,aAAcmG,GACxCsG,IAAI,KAELvG,GACC,0BAAKrI,WAAWmC,EAAAA,EAAAA,GAAe,oBAAqBoG,IAClD,mBAAC1H,EAAA,EAAD,CAAiBC,SAAU9B,EAAckB,QAAS0zB,UC9DxDsF,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GA6HnD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMkgC,GAAQC,EAAAA,EAAAA,IAAYngC,IACpB,WAAE04C,EAAF,UAAcC,GAAc34C,EAAOic,SAAS28B,OAAO1Y,IAAU,IAC7D,iBAAE2Y,GAAqB74C,EAAOic,SAEpC,MAAO,CACLy8B,WAAAA,EACAC,UAAAA,EACAE,iBAAAA,EACA3Y,MAAAA,KAVcngC,EA3HyC,IAQvD,IARwD,SAC5DsN,EAD4D,eAE5Dg3B,EAF4D,QAG5D7I,EAH4D,WAI5Dkd,EAJ4D,UAK5DC,EAL4D,iBAM5DE,EAN4D,MAO5D3Y,GACI,EACJ,MAAM,eACJ4Y,EADI,gBAEJC,EAFI,iBAGJC,IACEj4C,EAAAA,EAAAA,MAEEk4C,GAAWlzC,EAAAA,EAAAA,MACjBkzC,EAAS1yC,QAAU25B,GAGnB38B,EAAAA,EAAAA,KAAU,KACR23B,IAAa,KACX4d,SAED,CAACA,IAEJ,MAAMI,GAAmB73C,EAAAA,EAAAA,KAAa+C,IACpC,MAAM,MAAE+0C,GAAU/0C,EAAE6G,OAEhBkuC,GAASA,EAAMz5C,OAAS,GAC1Bq5C,EAAgBI,EAAM,MAEvB,CAACJ,IAEEK,GAAwB/3C,EAAAA,EAAAA,KAAY,KACxCq0C,GAtCoB,aAsCmBwD,GAAkB,KACxD,CAACA,IAEEG,GAAiBh4C,EAAAA,EAAAA,KAAY,KACjCgjC,EAAec,EAAAA,GAAAA,8BACd,CAACd,IAEEiV,GAAuBj4C,EAAAA,EAAAA,KAAY,KACvC23C,EAAiB,CACf9Y,MAAAA,EACAwY,gBAAYz2C,EACZs3C,qBAAiBt3C,EACjB02C,WAAW,EACXa,aAAwB,SAAVtZ,EAAmBuZ,EAAAA,GAA2BC,EAAAA,MAE7D,CAACV,EAAkB9Y,IAEhByZ,GAAwBt4C,EAAAA,EAAAA,KAAak2C,IACzCyB,EAAiB,CAAE9Y,MAAO+Y,EAAS1yC,QAASmyC,WAAYnB,IACxD,MAAMqC,EAAmBf,GAAoBA,EAAiBthB,MAAM+f,GAAcA,EAAUC,OAASA,IACjGqC,MAAAA,GAAAA,EAAkB58C,SAAS26C,WF2C5BkC,eAA+B7xC,GAEpC,MACM8xC,EAAuC,CAAC,EAAG,EAAG,GACpD,IAAI9gB,EACAxyB,EACA9C,EAEAhE,EADAwlB,GAAK,EAEL60B,EAAgC,CAAC,EAAG,EAAG,GACvCrjB,EAAQ,EAEZ,MAAMsjB,EAASh9C,SAASC,cAAc,UAChCg9C,EAAUD,EAAOE,YAAcF,EAAOE,WAAW,MACvD,IAAKD,EACH,OAAOH,EAGT,MAAM1gC,QAAc+gC,EAAAA,GAAAA,IAAanyC,GACjCtE,EAAS0V,EAAMghC,eAAiBhhC,EAAMxa,cAAgBwa,EAAM1V,OAC5D8C,EAAQ4S,EAAMihC,cAAgBjhC,EAAMkhC,aAAelhC,EAAM5S,MACzDwzC,EAAOt2C,OAASA,EAChBs2C,EAAOxzC,MAAQA,EAEfyzC,EAAQM,UAAUnhC,EAAO,EAAG,GAE5B,IACE4f,EAAOihB,EAAQO,aAAa,EAAG,EAAGh0C,EAAO9C,GACzC,MAAOU,GACP,OAAO01C,EAMT,IAHAp6C,EAASs5B,EAAKA,KAAKt5B,QAGXwlB,GAAKu1B,IAAiB/6C,KAC1Bg3B,EACFqjB,EAAI,IAAM/gB,EAAKA,KAAK9T,GACpB60B,EAAI,IAAM/gB,EAAKA,KAAK9T,EAAI,GACxB60B,EAAI,IAAM/gB,EAAKA,KAAK9T,EAAI,GAO1B,OAJA60B,EAAI,GAAKr3C,KAAKoC,MAAMi1C,EAAI,GAAKrjB,GAC7BqjB,EAAI,GAAKr3C,KAAKoC,MAAMi1C,EAAI,GAAKrjB,GAC7BqjB,EAAI,GAAKr3C,KAAKoC,MAAMi1C,EAAI,GAAKrjB,GAEtBqjB,EExFHW,CAAgBd,EAAiB58C,SAAS26C,UAAUC,SACjD7e,MAAMh3B,IACL,MAAMy3C,EAAetC,GAAgBn1C,GAC/Bo1C,EAAY,IAAGf,GAAQr0C,KAC7Bi3C,EAAiB,CAAE9Y,MAAO+Y,EAAS1yC,QAASgzC,gBAAiBpC,EAAUqC,aAAAA,SAG5E,CAACX,EAAkBG,IAEhB2B,GAA4Bt5C,EAAAA,EAAAA,KAAa+C,IAC7C40C,EAAiB,CAAE9Y,MAAO+Y,EAAS1yC,QAASoyC,UAAWv0C,EAAE6G,OAAO+/B,YAC/D,CAACgO,IAEE13C,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,uBAElD,MAAMyV,GAAc/B,MAAAA,OAAA,EAAAA,EAAmB,KAAMA,EAAiB,GAAGtB,OAASU,EAAAA,GAE1E,OACE,0BAAKj2C,UAAU,4DACb,0BAAKA,UAAU,sBACb,mBAACmjB,GAAA,EAAD,CACE1iB,KAAK,aACLT,UAAU,OACV2Z,SAAUi/B,EACV14C,QAASk3C,GAER93C,EAAK,gBAGR,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,WACLT,UAAU,OACVE,QAASm3C,GAER/3C,EAAK,aAGR,mBAAC6jB,GAAA,EAAD,CAAU1iB,KAAK,WAAWP,QAASo3C,GAChCh4C,EAAK,yBAGR,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,qBACZ0pC,QAAS9hC,QAAQyvC,GACjB78B,SAAU6+B,KAIb9B,EACC,0BAAK72C,UAAU,uBACZ62C,EAAiB5zB,KAAKqyB,GACrB,mBAAC,GAAD,CACEA,UAAWA,EACXpX,MAAOA,EACP2Q,WAAY6H,IAAepB,EAAUC,KACrCr1C,QAASy3C,OAKf,mBAACn0B,GAAA,EAAD,WC/GFq1B,GAAcrE,GAAQR,GAAQ,WAC9B8E,GAAoB,CACxB,UAAW,UAAW,UAAW,UAAW,UAAW,UACvD,UAAW,UAAW,UAAW,UAAW,UAAW,WA0MzD,SAASC,GAAcC,EAA+BC,GACpD,MAAO,CACLC,cAAe,CACbx4C,KAAKb,MAAOm5C,EAAI,IAAOC,EAAME,UAAU30C,MAAQ,IAC/C9D,KAAKb,OAAO,EAAIm5C,EAAI,KAAOC,EAAME,UAAUz3C,OAAS,KAEtD03C,YAAa14C,KAAKb,MAAMm5C,EAAI,IAAMC,EAAMI,QAAQ70C,MAAQ,KAI5D,SAAS80C,GAAT,EAEEL,GAC0B,IAF1B,cAAEC,EAAF,YAAiBE,GAES,EAC1B,MAAO,CACLA,GAAeH,EAAMI,QAAQ70C,MAAQ,GACrC00C,EAAc,IAAMD,EAAME,UAAU30C,MAAQ,GAC5C,EAAI00C,EAAc,IAAMD,EAAME,UAAUz3C,OAAS,IA8ErD,UAAe5D,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMkgC,GAAQC,EAAAA,EAAAA,IAAYngC,IACpB,gBAAEu5C,GAAoBv5C,EAAOic,SAAS28B,OAAO1Y,IAAU,GAC7D,MAAO,CACLqZ,gBAAAA,EACArZ,MAAAA,KANcngC,EAtSyC,IAMvD,IANwD,SAC5DsN,EAD4D,eAE5Dg3B,EAF4D,QAG5D7I,EAH4D,MAI5D0E,EAJ4D,gBAK5DqZ,GACI,EACJ,MAAM,iBAAEP,IAAqBj4C,EAAAA,EAAAA,MAEvBk4C,GAAWlzC,EAAAA,EAAAA,MACjBkzC,EAAS1yC,QAAU25B,EAEnB,MAAM/uB,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCw1C,GAAiBx1C,EAAAA,EAAAA,IAAuB,MAExCy1C,GAAez1C,EAAAA,EAAAA,IAAuB,MACtC01C,GAAgB11C,EAAAA,EAAAA,KAAO,IAEtBi1C,EAAKU,IAAUp4C,EAAAA,EAAAA,IA8KxB,SAAuBi2C,GACrB,OAAOA,GAAmBA,EAAgB3a,WAAW,KACjD4X,GAAQR,GAAQuD,EAAgB3qB,QAAQ,IAAK,MAC7CisB,GAjL2Bc,CAAcpC,IAEvCqC,GAAS71C,EAAAA,EAAAA,IAAOi1C,IACtBz3C,EAAAA,EAAAA,KAAU,KACRq4C,EAAOr1C,QAAUy0C,IAChB,CAACA,IAEJ,MAAO7iC,EAAY0jC,EAAgBC,IAAoBn1B,EAAAA,GAAAA,MAChDo1B,EAAUC,IAAe14C,EAAAA,EAAAA,IAAS,KAClC24C,EAAUC,IAAe54C,EAAAA,EAAAA,IAAS,IAEnC64C,GAAWp2C,EAAAA,EAAAA,MACXq2C,GAAcr2C,EAAAA,EAAAA,OAGpBxC,EAAAA,EAAAA,KAAU,KAER,MAAM43C,EAAY,CAChBkB,WAAYd,EAAeh1C,QAAS81C,eACjCt0B,EAAAA,GAAAA,IAAKwzB,EAAeh1C,QAASG,wBAAyB,CAAC,MAAO,QAAS,YAEtE20C,EAAU,CACdgB,WAAYb,EAAaj1C,QAAS81C,eAC/Bt0B,EAAAA,GAAAA,IAAKyzB,EAAaj1C,QAASG,wBAAyB,CAAC,WAK1D,SAAS41C,EAAgBl4C,GACvB,MAAM82C,EAAgB,CACpBx4C,KAAKqE,IAAIrE,KAAKoE,IAAI,EAAG1C,EAAEsO,MAASyoC,EAAUkB,YAAalB,EAAU30C,MAAQ,GACzE9D,KAAKqE,IAAIrE,KAAKoE,IAAI,EAAG1C,EAAEqO,MAAS0oC,EAAUpkC,IAAM5F,EAAa5K,QAAS5H,WAAYw8C,EAAUz3C,OAAS,KAGjG,YAAE03C,GAAgBL,GAAca,EAAOr1C,QAAS41C,EAAS51C,SAK/D,OAHAm1C,EAAOJ,GAAc,CAAEJ,cAAAA,EAAeE,YAAAA,GAAee,EAAS51C,UAC9Ds1C,KAEO,EAYT,SAASU,EAAcn4C,GACrB,MAAM,cAAE82C,GAAkBH,GAAca,EAAOr1C,QAAS41C,EAAS51C,SAC3D60C,EAAc14C,KAAKqE,IAAIrE,KAAKoE,IAAI,EAAG1C,EAAEsO,MAAS2oC,EAAQgB,YAAahB,EAAQ70C,MAAQ,GAKzF,OAHAk1C,EAAOJ,GAAc,CAAEJ,cAAAA,EAAeE,YAAAA,GAAee,EAAS51C,UAC9Ds1C,KAEO,EAhCTM,EAAS51C,QAAU,CAAE40C,UAAAA,EAAWE,QAAAA,IAgBhCn0C,EAAAA,EAAAA,IAAcq0C,EAAeh1C,QAAU,CACrCY,UAAWm1C,EACXj1C,OAAQi1C,EACRl1C,UAAW00C,EACX55C,QAAS45C,EACTU,wBAAyB,kCACzBC,YAAY,KAadv1C,EAAAA,EAAAA,IAAcs0C,EAAaj1C,QAAU,CACnCY,UAAWo1C,EACXl1C,OAAQk1C,EACRn1C,UAAW00C,EACX55C,QAAS45C,EACTU,wBAAyB,kCACzBC,YAAY,MAEb,CAACZ,EAAgBC,IAEpB,MAAM,cAAEZ,EAAgB,CAAC,EAAG,GAAtB,YAA0BE,EAAc,GAAMe,EAAS51C,QAAUw0C,GAAcC,EAAKmB,EAAS51C,SAAW,GACxGm2C,EAAMtG,GAAQS,GAAQmE,IACtB5D,EAAM4D,EAAI,GACV2B,EAASvG,GAAQS,GAAQ,CAACO,EAAK,EAAG,MAGxC7zC,EAAAA,EAAAA,KAAU,KACR,MAAMw2C,EAAMlD,GAAQmE,GACdj5C,EAAS,IAAGq0C,GAAQ2D,KAK1B,GAHAiC,EAAYjC,EAAIztC,KAAK,OACrB4vC,EAAYn6C,IAEP05C,EAAcl1C,QAAS,CAC1B,MAAMizC,EAAetC,GAAgB6C,GACrCf,EAAiB,CACf9Y,MAAO+Y,EAAS1yC,QAChBmyC,gBAAYz2C,EACZs3C,gBAAiBx3C,EACjBy3C,aAAAA,IAGJiC,EAAcl1C,SAAU,IACvB,CAACy0C,EAAKhC,KAGTz1C,EAAAA,EAAAA,KAAU,MAwGZ,SACEy2C,EACA5C,EACAgF,EACAD,GAEA,IAAIS,EACA3nC,EACA4nC,EAECT,EAAY71C,SAAY41C,EAAS51C,SAWpCq2C,EAAIT,EAAS51C,QAAQ40C,UAAU30C,MAC/ByO,EAAIknC,EAAS51C,QAAQ40C,UAAUz3C,OAC/Bm5C,EAAMT,EAAY71C,UAXlBq2C,EAAI5C,EAAOM,YACXrlC,EAAI+kC,EAAOp7C,aACXi+C,EAAM7C,EAAOE,WAAW,MAExBF,EAAOxzC,MAAQo2C,EACf5C,EAAOt2C,OAASuR,EAEhBmnC,EAAY71C,QAAUs2C,GAOxB,MAAMC,EAAUD,EAAKE,gBAAgBH,EAAG3nC,GAClC+nC,EAASF,EAAQ9jB,KACjBikB,EAAMpG,GAAQ,CAACO,EAAK,EAAG,IAE7B,IAAI10B,EAAQ,EAEZ,IAAK,IAAInR,EAAI,EAAGA,EAAI0D,EAAG1D,IAAK,CAC1B,MAAM2rC,EAAO,EAAI3rC,GAAK0D,EAAI,GACpBkoC,EAAK,CAAC,IAAMD,EAAM,IAAMA,EAAM,IAAMA,GACpCE,EAAK,CAACH,EAAI,GAAKC,EAAMD,EAAI,GAAKC,EAAMD,EAAI,GAAKC,GACnD,IAAK,IAAI5rC,EAAI,EAAGA,EAAIsrC,EAAGtrC,IAAK,CAC1B,MAAM+rC,EAAO/rC,GAAKsrC,EAAI,GACtBI,EAAOt6B,KAAWy6B,EAAG,IAAMC,EAAG,GAAKD,EAAG,IAAME,EAC5CL,EAAOt6B,KAAWy6B,EAAG,IAAMC,EAAG,GAAKD,EAAG,IAAME,EAC5CL,EAAOt6B,KAAWy6B,EAAG,IAAMC,EAAG,GAAKD,EAAG,IAAME,EAC5CL,EAAOt6B,KAAW,KAItBm6B,EAAKS,aAAaR,EAAS,EAAG,GApJ5BS,CAAUhC,EAAeh1C,QAAS3G,WAAiCw3C,EAAKgF,EAAaD,KACpF,CAAC/E,KAGJ7zC,EAAAA,EAAAA,KAAU,MAmJZ,SAAiBy2C,GACf,MAAM4C,EAAI5C,EAAOM,YAEjBN,EAAOxzC,MAAQo2C,EACf5C,EAAOt2C,OAFG,EAGV,MAAMm5C,EAAM7C,EAAOE,WAAW,MAExB4C,EAAUD,EAAIE,gBAAgBH,EAL1B,GAMJI,EAASF,EAAQ9jB,KAEvB,IAAItW,EAAQ,EAEZ,IAAK,IAAIpR,EAAI,EAAGA,EAAIsrC,EAAGtrC,IAAK,CAC1B,MACMyoC,EAAMlD,GAAQ,CADRvlC,GAAKsrC,EAAI,GACK,EAAG,IAE7BI,EAAOt6B,KAAWq3B,EAAI,GACtBiD,EAAOt6B,KAAWq3B,EAAI,GACtBiD,EAAOt6B,KAAWq3B,EAAI,GAEtBiD,EAAOt6B,KAAW,IAGpBm6B,EAAIS,aAAaR,EAAS,EAAG,GAzK3BU,CAAQhC,EAAaj1C,QAAS3G,cAC7B,IAEH,MAAM69C,GAAkBp8C,EAAAA,EAAAA,KAAa+C,IACnC,MAAMs5C,EAAWt5C,EAAE+G,cAAc6G,MAAM4c,QAAQ,WAAY,IAAI8T,MAAM,EAAG,IAExE,GAAIgb,EAASxgB,MAAM,mCAAoC,CACrD,MAAM6c,EAAM2D,EAASze,MAAM,KAAKha,KAAK04B,GAAY5hC,OAAO4hC,EAAQ/W,UAChE8U,EAAOlF,GAAQuD,IAGjB31C,EAAE+G,cAAc6G,MAAQ0rC,IACvB,IAEGE,GAAkBv8C,EAAAA,EAAAA,KAAa+C,IACnC,MAAMy5C,EAAWz5C,EAAE+G,cAAc6G,MAAM4c,QAAQ,gBAAiB,IAAI8T,MAAM,EAAG,GAEzEmb,EAAS3gB,MAAM,uBACjBwe,EAAOlF,GAAQR,GAAQ6H,EAASjvB,QAAQ,IAAK,OAG/CxqB,EAAE+G,cAAc6G,MAAQ6rC,IACvB,IAEGC,GAA6Bz8C,EAAAA,EAAAA,KAAa+C,IAC9Cs3C,EAAOlF,GAAQR,GAAQ5xC,EAAE+G,cAAc4yC,QAAQh8C,MAAO6sB,QAAQ,IAAK,SAClE,IAEG5sB,GAAYmC,EAAAA,EAAAA,GAChB,gEACAgU,GAAc,eAKhB,OAFA0K,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,4BAGhD,0BAAK39B,IAAK2J,EAAcnP,UAAWA,GACjC,0BAAKA,UAAU,sBACb,0BAAKwF,IAAK+zC,EAAgBv5C,UAAU,gBAClC,kCACA,0BACEA,UAAU,SACV9C,MAAQ,wBAAuBg8C,EAAc,SAASA,EAAc,6BAA6BwB,QAGrG,0BAAKl1C,IAAKg0C,EAAcx5C,UAAU,cAChC,kCACA,0BACEA,UAAU,SACV9C,MAAQ,yBAAwBk8C,4BAAsCuB,QAG1E,0BAAK36C,UAAU,SACb,mBAACqiB,GAAA,EAAD,CAAWrS,MAAOiqC,EAAU9oB,MAAM,MAAMrX,SAAU8hC,IAClD,mBAACv5B,GAAA,EAAD,CAAWrS,MAAO+pC,EAAU5oB,MAAM,MAAMrX,SAAU2hC,MAGtD,0BAAKz7C,UAAU,qBACZ84C,GAAkB71B,KAAKljB,GACtB,0BACEC,UAAWD,IAAW,IAAG26C,IAAQ,cAAWz6C,EAC5C,aAAYF,EACZ7C,MAAQ,qBAAoB6C,KAC5BG,QAAS47C,Y,eC1MrB,MAyLA,IAAeh+C,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLg+C,6BAA8B90C,QAAQlJ,EAAOic,SAASC,MAAM8hC,8BAC5DC,8BAA+B/0C,QAAQlJ,EAAOic,SAASC,MAAM+hC,+BAC7DC,sBAAuBh1C,QAAQlJ,EAAOic,SAASC,MAAMgiC,uBACrDC,uBAAwBj1C,QAAQlJ,EAAOic,SAASC,MAAMiiC,wBACtDC,0BAA2Bl1C,QAAQlJ,EAAOic,SAASC,MAAMkiC,2BACzDC,2BAA4Bn1C,QAAQlJ,EAAOic,SAASC,MAAMmiC,4BAC1DC,8BAA+Bp1C,QAAQlJ,EAAOic,SAASC,MAAMoiC,+BAC7DC,oBAAqBv+C,EAAOic,SAASC,MAAMqiC,oBAC3CC,qBAAsBx+C,EAAOic,SAASC,MAAMsiC,qBAC5CC,wBAAyBz+C,EAAOic,SAASC,MAAMuiC,2BAZjC1+C,EAzLqC,IAcnD,IAdoD,SACxDsN,EADwD,eAExDg3B,EAFwD,QAGxD7I,EAHwD,6BAIxDwiB,EAJwD,8BAKxDC,EALwD,sBAMxDC,EANwD,uBAOxDC,EAPwD,0BAQxDC,EARwD,2BASxDC,EATwD,8BAUxDC,EAVwD,qBAWxDE,EAXwD,oBAYxDD,EAZwD,wBAaxDE,GACI,EACJ,MAAM,yBACJC,EADI,gCAEJC,EAFI,2BAGJC,EAHI,8BAIJC,IACE99C,EAAAA,EAAAA,OAEJwC,EAAAA,EAAAA,KAAU,KACRm7C,MACC,CAACA,IAEJ,MAAMI,GAAe3sC,EAAAA,EAAAA,GAAY,KAAK,GAEhC4sC,GAAuB19C,EAAAA,EAAAA,KAAY,CACvC+C,EACA46C,EACAC,KAEA,MAAMC,EAA+B,YAAbF,GACnBhB,IACc,UAAbgB,EAAuBd,EAAwBE,GAC/Ce,EAAyC,YAAbH,EAC9Bf,EACc,UAAbe,EAAuBb,EAAyBE,EAErDO,EAA2B,CACzBI,SAAAA,KACgB,WAAZC,GAAwB,CAAEhtB,UAAW7tB,EAAE6G,OAAO+/B,QAASoU,mBAAoBD,MAC/D,iBAAZF,GAA8B,CAAEG,mBAAoBh7C,EAAE6G,OAAO+/B,QAAS/Y,SAAUitB,OAErF,CACDb,EAA4BD,EAC5BD,EAAwBD,EACxBD,EAA+BD,EAC/BY,IAGIS,GAAkCh+C,EAAAA,EAAAA,KAAa+C,IACnDu6C,EAAgC,CAC9B1sB,UAAW7tB,EAAE6G,OAAO+/B,YAErB,CAAC2T,IAEEr9C,GAAOC,EAAAA,EAAAA,KAIb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,eAGhD,0BAAKnjC,UAAU,kCACb,0BAAKA,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAA/D,qBAGA,mBAAC8oC,GAAA,EAAD,CACE5X,MAAM,oBAENohB,SAAUjzC,EAAKi9C,EAAsB,gCAAkC,kCACvEvT,QAASuT,EACTziC,SAAW1X,IACTy6C,EAA8B,CAAEN,oBAAqBn6C,EAAE6G,OAAO+/B,aAGlE,mBAACD,GAAA,EAAD,CACE5X,MAAM,wBACNxX,UAAW4iC,EAEXhK,SAAUjzC,EAAKk9C,EAAuB,gCAAkC,kCACxExT,QAASwT,EACT1iC,SAAW1X,IACTy6C,EAA8B,CAAEL,qBAAsBp6C,EAAE6G,OAAO+/B,aAGnE,0BAAKhpC,UAAU,wBACb,mBAACmpC,GAAA,EAAD,CACEhY,MAAM,QACNpsB,IAAK,EACLD,IAAK,GACLkL,MAAOysC,EACP3iC,SAAWwjC,IACTT,EAA8B,CAAEJ,wBAAyBa,IACzDR,GAAa,KAAMS,EAAAA,GAAAA,SAAgBt9C,EAAWq9C,UAKtD,0BAAKt9C,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC5DX,EAAK,6BAGR,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,gCAEZizC,SAAUjzC,EAAK08C,EAA+B,gCAAkC,kCAChFhT,QAASgT,EACTliC,SAAW1X,IACT26C,EAAqB36C,EAAG,UAAW,aAGvC,mBAAC2mC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,kBACZqa,UAAWqiC,EAEXzJ,SAAUjzC,EAAK28C,EAAgC,gCAAkC,kCACjFjT,QAASiT,EACTniC,SAAW1X,IACT26C,EAAqB36C,EAAG,UAAW,oBAKzC,0BAAKpC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,iBAEhF,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,0BACZizC,SAAUjzC,EAAK48C,EAAwB,gCAAkC,kCACzElT,QAASkT,EACTpiC,SAAW1X,IACT26C,EAAqB36C,EAAG,QAAS,aAGrC,mBAAC2mC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,kBACZqa,UAAWuiC,EACX3J,SAAUjzC,EAAK68C,EAAyB,gCAAkC,kCAC1EnT,QAASmT,EACTriC,SAAW1X,IACT26C,EAAqB36C,EAAG,QAAS,oBAKvC,0BAAKpC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,mBAEhF,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,4BAEZizC,SAAUjzC,EAAK88C,EAA4B,gCAAkC,kCAC7EpT,QAASoT,EACTtiC,SAAW1X,IACT26C,EAAqB36C,EAAG,YAAa,aAGzC,mBAAC2mC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,kBACZqa,UAAWyiC,EAEX7J,SAAUjzC,EAAK+8C,EAA6B,gCAAkC,kCAC9ErT,QAASqT,EACTviC,SAAW1X,IACT26C,EAAqB36C,EAAG,YAAa,oBAK3C,0BAAKpC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,eAEhF,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,iBACZ0pC,QAASsT,EACTxiC,SAAUujC,UCHpB,IAAev/C,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,cACtB,MACEic,UACEC,OAAO,YAAEsjC,EAAF,mBAAeC,EAAf,mBAAmCC,GADlC,QAERC,GAHE,QAKJC,EALI,eAMJC,GACE7/C,EAEJ,MAAO,CACLw/C,YAAAA,EACAM,aAAcF,EAAQG,WACtBC,cAAeH,EAAengD,OAC9B+/C,mBAAAA,EACAC,mBAAAA,EACAO,6BAA4B,UAAEN,EAAQO,mBAAV,aAAE,EAAqBC,WACnDC,0BAAyB,UAAET,EAAQU,gBAAV,aAAE,EAAkBF,WAC7CG,8BAA6B,UAAEX,EAAQY,oBAAV,aAAE,EAAsBJ,WACrDK,4BAA2B,UAAEb,EAAQc,gBAAV,aAAE,EAAkBN,WAC/CO,4BAA2B,UAAEf,EAAQgB,kBAAV,aAAE,EAAoBR,cArBnCpgD,EApL+B,IAe7C,IAf8C,SAClDsN,EADkD,eAElDg3B,EAFkD,QAGlD7I,EAHkD,YAIlDgkB,EAJkD,aAKlDM,EALkD,cAMlDE,EANkD,mBAOlDP,EAPkD,mBAQlDC,EARkD,6BASlDO,EATkD,0BAUlDG,EAVkD,8BAWlDE,EAXkD,4BAYlDE,EAZkD,4BAalDE,GAEI,EACJ,MAAM,oBACJE,EADI,oBAEJC,EAFI,mBAGJC,EAHI,oBAIJC,EAJI,sBAKJC,IACEjgD,EAAAA,EAAAA,OAEJwC,EAAAA,EAAAA,KAAU,KACRs9C,IACAC,IACAF,IACAG,MACC,CAACF,EAAqBC,EAAoBF,EAAqBG,IAElE,MAAMz/C,GAAOC,EAAAA,EAAAA,KAIb,SAAS0/C,EAAmBd,GAC1B,OAAQA,GACN,IAAK,YACH,OAAO7+C,EAAK,gBAEd,IAAK,WACH,OAAOA,EAAK,eAEd,IAAK,SACH,OAAOA,EAAK,cAMlB,OAjBAuhB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAkBhD,0BAAKnjC,UAAU,kCACb,0BAAKA,UAAU,sBACb,mBAACmjB,GAAA,EAAD,CACE1iB,KAAK,cACLsqC,QAAM,EACN7qC,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,sBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,iBAC7Bw+C,EAAe,GACd,2BAAM99C,UAAU,WAAWsC,IAAI,QAC5BhD,EAAK,QAASw+C,MAKvB,mBAAC36B,GAAA,EAAD,CACE1iB,KAAK,OACLsqC,QAAM,EACN7qC,QAAS,IAAMmiC,EACbmb,EAAcra,EAAAA,GAAAA,aAA+BA,EAAAA,GAAAA,gBAG/C,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,wBAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5BhD,EAAKk+C,EAAc,aAAe,kBAIzC,mBAACr6B,GAAA,EAAD,CACE1iB,KAAK,kBACLsqC,QAAM,EACN7qC,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,wBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,kBAC7B0+C,EAAgB,GACf,2BAAMh+C,UAAU,WAAWsC,IAAI,QACV,IAAlB07C,EAAsB,YAAe,GAAEA,iBAOlD,0BAAKh+C,UAAU,iBACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,iBAErF,mBAAC6jB,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,UACVE,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,qBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,sBAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5B28C,EAAmBhB,MAI1B,mBAAC96B,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,UACVE,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,kBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,kBAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5B28C,EAAmBb,MAI1B,mBAACj7B,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,UACVE,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,sBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,6BAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5B28C,EAAmBX,MAI1B,mBAACn7B,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,UACVE,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,oBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,yBAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5B28C,EAAmBT,MAI1B,mBAACr7B,GAAA,EAAD,CACE4nB,QAAM,EACN/qC,UAAU,UACVE,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,oBAE9B,0BAAKnjC,UAAU,uBACb,2BAAMA,UAAU,SAASV,EAAK,gBAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5B28C,EAAmBP,OAM3BhB,GACC,0BAAK19C,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC5DX,EAAK,iCAER,mBAACypC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,4CACZizC,SAAUjzC,EAAK,gCACf0pC,QAAS9hC,QAAQu2C,GACjB9jC,UAAW+jC,EACXzU,QAAS+V,UChHrB,IAAelhD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLkhD,UAAWlhD,EAAOic,SAASC,MAAMglC,UACjCC,SAAUnhD,EAAOic,SAASC,MAAMilC,YAJlBphD,EAnEgC,IAM9C,IAN+C,SACnDsN,EADmD,eAEnDg3B,EAFmD,QAGnD7I,EAHmD,UAInD0lB,EAJmD,SAKnDC,GACI,EACJ,MAAM,cACJC,EADI,iBAEJ9W,IACEvpC,EAAAA,EAAAA,OAEGsgD,EAAkBC,IAAuBh+C,EAAAA,EAAAA,IAAiB69C,IAC1D/gB,EAAWmhB,EAAeC,IAAmB76B,EAAAA,GAAAA,MAGpDpjB,EAAAA,EAAAA,KAAU,KACR69C,MACC,CAACA,IAEJ,MAAMK,GAAepgD,EAAAA,EAAAA,KAAaqgD,IAChCJ,EAAoBI,GACpBH,KAEKI,EAAAA,GAAAA,IAAYD,GAAsB,KACrCF,IAEAlX,EAAiB,CAAE6W,SAAUO,SAE9B,CAACH,EAAeC,EAAiBlX,IAE9BjX,GAAU5xB,EAAAA,EAAAA,KAAQ,IACfy/C,EAsBX,SAAsBA,GACpB,MAAMU,GAAmB79C,OAAO89C,UAAUV,UAAY,MAAMW,cACtDC,EAAgBH,EAAgBI,OAAO,EAAG,GAEhD,OAAOd,EAAUj8B,KAAI,QAAC,SAAEy8B,EAAF,WAAYO,EAAZ,KAAwB9+B,GAAzB,QAAqC,CACxDnR,MAAO0vC,EACPvuB,MAAO8uB,EACP1N,SAAUpxB,MACR+b,MAAMC,IACDyiB,GAAoBziB,EAAEntB,QAAU4vC,GAAmBziB,EAAEntB,QAAU+vC,EAAsB,GAAJ,IA/BrEG,CAAahB,QAAaj/C,GAC5C,CAACi/C,IAIJ,OAFAr+B,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,UAGhD,0BAAKnjC,UAAU,kEACZqxB,EACC,mBAACD,GAAA,EAAD,CACEjQ,KAAK,yBACLkQ,QAASA,EACTC,SAAU+tB,EACVc,cAAe/hB,EAAYihB,OAAmBp/C,EAC9C6Z,SAAU2lC,IAGZ,mBAACj8B,GAAA,EAAD,WCrED,SAAS48B,GAAcC,GAC5B,OAAQA,GACN,KAAKld,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,iCACH,MAAO,cACT,KAAKA,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,8BACH,MAAO,WACT,KAAKA,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,kCACH,MAAO,eACT,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,gCACH,MAAO,WACT,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,gCACH,MAAO,cCKb,MAqLA,IAAerlC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAC9BsiD,GADG,OAAED,GAAyB,EAGlC,MACE58B,OAASC,KAAMC,GACf1J,UAAU,QAAE0jC,IACV3/C,EAEJ,OAAQqiD,GACN,KAAKld,EAAAA,GAAAA,mBACHmd,EAAkB3C,EAAQO,YAC1B,MAEF,KAAK/a,EAAAA,GAAAA,gBACHmd,EAAkB3C,EAAQU,SAC1B,MAEF,KAAKlb,EAAAA,GAAAA,oBACHmd,EAAkB3C,EAAQY,aAC1B,MAEF,KAAKpb,EAAAA,GAAAA,kBACHmd,EAAkB3C,EAAQc,SAC1B,MAEF,KAAKtb,EAAAA,GAAAA,kBACHmd,EAAkB3C,EAAQgB,WAI9B,OAAK2B,EAIE,IACFA,EACH38B,UAAAA,GALO,KAhCO5lB,EArLyC,IAWvD,IAXwD,OAC5DsiD,EAD4D,SAE5Dh1C,EAF4D,eAG5Dg3B,EAH4D,QAI5D7I,EAJ4D,WAK5D2kB,EAL4D,aAM5DoC,EAN4D,aAO5DC,EAP4D,aAQ5DC,EAR4D,aAS5DC,EAT4D,UAU5D/8B,GACI,EACJ,MAAM,qBAAEg9B,IAAyB5hD,EAAAA,EAAAA,MAE3BO,GAAOC,EAAAA,EAAAA,KAEPqhD,GAAoBnhD,EAAAA,EAAAA,KAAQ,KAChC,OAAQ4gD,GACN,KAAKld,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACH,MAAO,CACL,CAAEnzB,MAAO,YAAamhB,MAAO7xB,EAAK,iBAClC,CAAE0Q,MAAO,WAAYmhB,MAAO7xB,EAAK,iBAGrC,QACE,MAAO,CACL,CAAE0Q,MAAO,YAAamhB,MAAO7xB,EAAK,iBAClC,CAAE0Q,MAAO,WAAYmhB,MAAO7xB,EAAK,gBACjC,CAAE0Q,MAAO,SAAUmhB,MAAO7xB,EAAK,kBAGpC,CAACA,EAAM+gD,IAEJQ,EAAiB,CACrBC,iBAAiC,WAAf3C,EAClB4C,kBAAkC,cAAf5C,GAGf6C,EAAaZ,GAAcC,GAE3BY,GAAaxhD,EAAAA,EAAAA,KAAQ,KACzB,OAAQ4gD,GACN,KAAKld,EAAAA,GAAAA,mBACH,OAAO7jC,EAAK,qBACd,KAAK6jC,EAAAA,GAAAA,gBACH,OAAO7jC,EAAK,iBACd,KAAK6jC,EAAAA,GAAAA,oBACH,OAAO7jC,EAAK,4BACd,KAAK6jC,EAAAA,GAAAA,kBACH,OAAO7jC,EAAK,wBACd,KAAK6jC,EAAAA,GAAAA,kBACH,OAAO7jC,EAAK,eACd,QACE,UAEH,CAACA,EAAM+gD,KAEVx/B,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBge,GAElD,MAAMa,GAAkBzhD,EAAAA,EAAAA,KAAQ,KAC9B,GAAQ4gD,IACDld,EAAAA,GAAAA,gBACH,OAAO7jC,EAAK,gBAIf,CAACA,EAAM+gD,IAEJc,EAAwB,MAC5B,OAAQd,GACN,KAAKld,EAAAA,GAAAA,mBACH,OAAOA,EAAAA,GAAAA,kCACT,KAAKA,EAAAA,GAAAA,gBACH,OAAOA,EAAAA,GAAAA,+BACT,KAAKA,EAAAA,GAAAA,oBACH,OAAOA,EAAAA,GAAAA,mCACT,KAAKA,EAAAA,GAAAA,kBACH,OAAOA,EAAAA,GAAAA,iCACT,QACE,OAAOA,EAAAA,GAAAA,mCAXiB,GAexBie,EAAuB,MAC3B,OAAQf,GACN,KAAKld,EAAAA,GAAAA,mBACH,OAAOA,EAAAA,GAAAA,iCACT,KAAKA,EAAAA,GAAAA,gBACH,OAAOA,EAAAA,GAAAA,8BACT,KAAKA,EAAAA,GAAAA,oBACH,OAAOA,EAAAA,GAAAA,kCACT,KAAKA,EAAAA,GAAAA,kBACH,OAAOA,EAAAA,GAAAA,gCACT,QACE,OAAOA,EAAAA,GAAAA,kCAXgB,GAevBke,GAAe5hD,EAAAA,EAAAA,KAAQ,IACtB8gD,GAAiBC,GAAiB78B,EAIhC68B,EAAac,QAAO,CAACC,EAAQ92C,IAC3B82C,GAAU59B,EAAUlZ,GAAUkZ,EAAUlZ,GAAQ+2C,aAAgB,IACtEjB,EAAa7iD,QALP,GAMR,CAAC8iD,EAAcD,EAAc58B,IAE1B89B,GAAahiD,EAAAA,EAAAA,KAAQ,IACpBghD,GAAiBC,GAAiB/8B,EAIhC+8B,EAAaY,QAAO,CAACC,EAAQ92C,IAC3B82C,GAAU59B,EAAUlZ,GAAUkZ,EAAUlZ,GAAQ+2C,aAAgB,IACtEf,EAAa/iD,QALP,GAMR,CAACgjD,EAAcD,EAAc98B,IAE1B+9B,GAAyBriD,EAAAA,EAAAA,KAAa2Q,IAC1C2wC,EAAqB,CACnBK,WAAAA,EACA7C,WAAYnuC,MAEb,CAACgxC,EAAYL,IAEhB,OACE,0BAAK3gD,UAAU,kCACb,0BAAKA,UAAU,iBACb,yBAAIA,UAAU,uBAAuBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYghD,GAE3E,mBAAC7vB,GAAA,EAAD,CACEjQ,KAAO,cAAa6/B,IACpB3vB,QAASuvB,EACT9mC,SAAU4nC,EACVpwB,SAAU6sB,IAGX+C,GACC,wBAAGlhD,UAAU,mCAAmCsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYihD,IAI1F,0BAAKlhD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAAYX,EAAK,sBAEpFuhD,EAAeE,mBACd,mBAAC59B,GAAA,EAAD,CACE4nB,QAAM,EACNtqC,KAAK,WACLP,QAAS,KACPmiC,EAAe8e,KAGjB,0BAAKnhD,UAAU,iCACZqhD,EAAe,GAAK,2BAAMrhD,UAAU,OAAOsC,IAAI,QAA3B,IAAoC++C,GACzD,2BAAMrhD,UAAU,SAASV,EAAK,oBAC9B,2BAAMU,UAAU,YAAYV,EAAK,wBAItCuhD,EAAeC,kBACd,mBAAC39B,GAAA,EAAD,CACE4nB,QAAM,EACNtqC,KAAK,cACLP,QAAS,KACPmiC,EAAe+e,KAGjB,0BAAKphD,UAAU,iCACZyhD,EAAa,GAAK,2BAAMzhD,UAAU,OAAOsC,IAAI,QAA3B,IAA0Cm/C,GAC7D,2BAAMzhD,UAAU,SAASV,EAAK,mBAC9B,2BAAMU,UAAU,YAAYV,EAAK,8BCrD/C,SAASqiD,GAAYC,GACnB,MAAO,CAACA,EAAQC,OAAQD,EAAQE,SAASvgC,OAAOra,SAASoD,KAAK,MAGhE,SAASy3C,GAAqBH,GAC5B,MAAQ,GAAEA,EAAQI,cAAcJ,EAAQI,YAAc,KAAO,MAAMJ,EAAQK,YAAYL,EAAQM,gBAGjG,UAAepkD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACL6/C,eAAgB7/C,EAAO6/C,kBAHT9/C,EAjI6C,IAK3D,IAL4D,SAChEsN,EADgE,eAEhEg3B,EAFgE,QAGhE7I,EAHgE,eAIhEqkB,GACI,EACJ,MAAM,mBACJiB,EADI,uBAEJqD,EAFI,2BAGJC,IACErjD,EAAAA,EAAAA,OAEGsjD,EAAiCC,EAA+BC,IAAkC59B,EAAAA,GAAAA,MACzGpjB,EAAAA,EAAAA,KAAU,KACRu9C,MACC,CAACA,IAEJ,MAAM0D,GAA8BnjD,EAAAA,EAAAA,KAAasnB,IAC/Cw7B,EAAuB,CAAEx7B,KAAAA,MACxB,CAACw7B,IAEEM,GAA6BpjD,EAAAA,EAAAA,KAAY,KAC7CkjD,IACAH,MACC,CAACG,EAAgCH,IAE9BM,GAAiBjjD,EAAAA,EAAAA,KAAQ,IACtBo+C,EAAetoB,MAAMqsB,GAAYA,EAAQe,aAC/C,CAAC9E,IAEE+E,GAAgBnjD,EAAAA,EAAAA,KAAQ,IACrBo+C,EAAet8B,QAAQqgC,IAAaA,EAAQe,aAClD,CAAC9E,IAEEv+C,GAAOC,EAAAA,EAAAA,KAqEb,OAnEAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,uBAoEhD,0BAAKnjC,UAAU,kCACZ0iD,IAnEyBd,EAmEcc,EAjExC,0BAAK1iD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjEX,EAAK,gCAGR,mBAAC6jB,GAAA,EAAD,CAAU4nB,QAAM,EAAC0C,UAAQ,EAACztC,UAAU,WAClC,0BAAKA,UAAU,sBAAsBsC,IAAI,QACvC,2BAAMtC,UAAU,QAAQsC,IAAI,QAAQs/C,EAAQiB,SAC5C,2BAAM7iD,UAAU,wBAAwB+hD,GAAqBH,IAC7D,2BAAM5hD,UAAU,YAAY4hD,EAAQkB,GAApC,MAA2CnB,GAAYC,MAI3D,mBAACz+B,GAAA,EAAD,CACEnjB,UAAU,2BACVS,KAAK,OACLiF,QAAM,EACNqlC,QAAM,EACN7qC,QAASoiD,GAERhjD,EAAK,2BA8CTsjD,IAxCwBG,EAwCaH,EAtCtC,0BAAK5iD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjEX,EAAK,kBAGPyjD,EAAS9/B,KAKhB,SAAuB2+B,GACrB,OACE,mBAACz+B,GAAA,EAAD,CACE3Z,IAAKo4C,EAAQj7B,KACbjhB,QAAM,EACNqlC,QAAM,EACNpS,eAAgB,CAAC,CACf/R,MAAO,YACPnmB,KAAM,OACNuiD,QAAS,KACPR,EAA4BZ,EAAQj7B,SAGxC3mB,UAAU,WAEV,0BAAKA,UAAU,gCAAgCsC,IAAI,QACjD,2BAAMtC,UAAU,SAAQ66B,EAAAA,EAAAA,IAAoBv7B,EAA2B,IAArBsiD,EAAQqB,aAC1D,2BAAMjjD,UAAU,SAAS4hD,EAAQiB,SACjC,2BAAM7iD,UAAU,wBAAwB+hD,GAAqBH,IAC7D,2BAAM5hD,UAAU,YAAY4hD,EAAQkB,GAApC,MAA2CnB,GAAYC,WAU1DgB,GACC,mBAACx6B,GAAA,EAAD,CACEzoB,OAAQ0iD,EACR/7C,QAASi8C,EACTthD,KAAK,yDACLonB,aAAa,+BACbC,eAAgBm6B,EAChBpf,sBAAoB,KAhD5B,IAA6B0f,EA5BCnB,M,eCtChC,MAiEA,IAAe9jD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEonB,OACE1B,KAAMwB,GAER04B,SACEpO,IAAK0T,GALH,YAOJ9+B,EAPI,cAQJhD,GACEpjB,EAEJ,MAAO,CACLknB,UAAAA,EACAg+B,WAAAA,EACA/+B,WAAYC,MAAAA,OAAF,EAAEA,EAAaC,QACzBkX,gBAAiBv9B,EAAOmlD,WAAWrnB,aACnC1a,cAAAA,KAlBcrjB,EAjE8B,IAQ5C,IAR6C,UACjDmnB,EADiD,WAEjDg+B,EAFiD,WAGjD/+B,EAHiD,gBAIjDoX,EAJiD,cAKjDna,EALiD,OAMjDzhB,EANiD,QAOjD2G,GACI,EACJ,MAAM,gBACJozB,EADI,mBAEJ0pB,EAFI,aAGJC,IACEtkD,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNgiB,EAAQiD,IAAaljB,EAAAA,EAAAA,IAAS,IAE/BggB,GAAYvd,EAAAA,EAAAA,IAAyB,OAE3CxC,EAAAA,EAAAA,KAAU,KACR6hD,EAAmB,CAAE3mB,MAAOlb,MAC3B,CAACA,EAAQ6hC,IAEZ,MAAME,GAAqB7jD,EAAAA,EAAAA,KAAQ,KACjC,MAAM8jD,GAAsBz+B,EAAAA,GAAAA,IAAO,IAC7BX,GAAc,MACdoX,GAAmB,IACvBha,QAAQiiC,GACDA,IAAcpiC,IAAkB8hC,EAAWzmD,SAAS+mD,MAG7D,OAAOj+B,EAAAA,EAAAA,IAAkBg+B,EAAqBr+B,EAAW3D,GACtD2b,MAAK,CAACumB,EAASC,KACd,MAAMte,GAAY1P,EAAAA,EAAAA,IAAgBxQ,EAAUu+B,KAAa,GACnDE,GAAajuB,EAAAA,EAAAA,IAAgBxQ,EAAUw+B,KAAc,GAE3D,OAAOte,EAAUwe,cAAcD,QAElC,CAACT,EAAY/+B,EAAY/C,EAAeG,EAAQga,EAAiBrW,IAE9D2+B,GAAmBxkD,EAAAA,EAAAA,KAAaikB,IACpC,MAAQ9mB,GAAIgnD,EAAN,WAAiBM,GAAe5+B,EAAU5B,IAAW,GACtDkgC,GAAcM,IAGnBT,EAAa,CAAEG,UAAAA,EAAWM,WAAAA,IAC1Bx9C,OACC,CAAC+8C,EAAc/8C,EAAS4e,IAE3B,OACE,mBAAC,GAAD,CACEvlB,OAAQA,EACR0hB,cAAeiiC,EACfhiC,UAAWA,EACXE,kBAAmBliB,EAAK,0BACxBiiB,OAAQA,EACRG,eAAgB8C,EAChB/C,SAAUiY,EACV/X,mBAAoBkiC,EACpBv9C,QAASA,QC+Cf,IAAexI,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEylB,OACEC,KAAMqgC,GAER3+B,OACE1B,KAAMsgC,GAERpG,SAAS,IACPpO,GAEFyU,aACEC,WAAYC,IAEZnmD,EAEJ,MAAO,CACL+lD,WAAAA,EACAC,WAAAA,EACAd,WAAY1T,EACZ2U,cAAAA,KArBcpmD,EA/F2C,IAQzD,IAR0D,SAC9DsN,EAD8D,eAE9Dg3B,EAF8D,QAG9D7I,EAH8D,WAI9DuqB,EAJ8D,WAK9DC,EAL8D,WAM9Dd,EAN8D,cAO9DiB,GACI,EACJ,MAAM,eAAEC,IAAmBrlD,EAAAA,EAAAA,MAErBO,GAAOC,EAAAA,EAAAA,MACN8kD,EAAsBC,EAAoBC,IAAuB5/B,EAAAA,GAAAA,KAClE6/B,GAAqBnlD,EAAAA,EAAAA,KAAamkD,IACtCY,EAAe,CAAEZ,UAAAA,MAChB,CAACY,IA2CJ,OAzCAvjC,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,qBA0ChD,0BAAKnjC,UAAU,wBACb,0BAAKA,UAAU,oCACb,0BAAKA,UAAU,iBACb,wBAAGA,UAAU,6CAA6CsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjFX,EAAK,sBAIV,0BAAKU,UAAU,2BACZkjD,MAAAA,GAAAA,EAAYxlD,OACX,0BAAKsC,UAAU,oBACZkjD,EAAYjgC,KAAI,CAACugC,EAAWtgC,IAnDzC,SAAuBsgC,EAAmBtgC,EAAWV,GACnD,MAAMiiC,GAAYpsC,EAAAA,EAAAA,IAASmrC,GACrBzqC,EAAO0rC,EAAYT,EAAWR,QAAavjD,EAC3C+Y,EAAQyrC,OAAoCxkD,EAAxB8jD,EAAWP,GAE/BxjD,GAAYmC,EAAAA,EAAAA,GAChB,wDACAsiD,EAAY,UAAY,SAG1B,OACE,mBAACthC,GAAA,EAAD,CACE3Z,IAAKg6C,EACLxjD,UAAWA,EACX0F,QAAM,EACNqlC,QAAM,EACNpS,eAAgB,CAAC,CACf/R,MAAO,UACPnmB,KAAM,SACNuiD,QAAS,KACPwB,EAAmBhB,MAGvBtmD,MAAQ,SA4B6D,EA5BpCgmB,GAAKF,EAAAA,SAEtC,mBAAClK,GAAA,EAAD,CAAQhZ,KAAK,SAASiZ,KAAMA,EAAMC,KAAMA,IACxC,0BAAKhZ,UAAU,eAAesC,IAAI,QAChC,yBAAIA,IAAI,SAAQ2W,EAAAA,GAAAA,IAAYwrC,GAAY/uB,EAAAA,EAAAA,IAAgB3c,IAAQ0hB,EAAAA,EAAAA,GAAan7B,EAAM0Z,KAAW,MAC7FD,MAAAA,OAAA,EAAAA,EAAMmlC,cACL,0BAAKl+C,UAAU,gBAAgBsC,IAAI,SAAQoiD,EAAAA,GAAAA,IAA0BP,EAAeprC,EAAKmlC,cAE1FnlC,IAASA,EAAKmlC,aAAenlC,EAAKqrB,UACjC,0BAAKpkC,UAAU,mBAAmBsC,IAAI,QAAtC,IAA+CyW,EAAKqrB,YAmBfugB,CAAcnB,EAAWtgC,MAE5DggC,IAAeA,EAAWxlD,OAC5B,0BAAKsC,UAAU,aAAasC,IAAI,QAAQhD,EAAK,cAE7C,mBAACkkB,GAAA,EAAD,CAASha,IAAI,cAKnB,mBAAC89B,GAAA,EAAD,CACEjuB,SAAO,EACPnZ,QAASokD,EACTnkD,UAAWb,EAAK,iBAEhB,wBAAGU,UAAU,cAEf,mBAAC,GAAD,CACEL,OAAQ0kD,EACR/9C,QAASi+C,S,eCvGjB,MAyCA,IAAezmD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL4mD,eAAeC,EAAAA,EAAAA,IAAoB7mD,EAAQ,SAF3BD,EAzCoC,IAElD,IAFmD,SACvDsN,EADuD,QAC7CmuB,EAD6C,cACpCorB,EADoC,eACrBviB,GAC9B,EACJ,MAAM/iC,GAAOC,EAAAA,EAAAA,KAIb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,cAGhD,0BAAKnjC,UAAU,yCACb,0BAAKA,UAAU,2BACb,mBAAC8kD,GAAA,EAAD,CAAe1T,QAASwT,EAAe9kD,KAAK,UAE5C,wBAAGE,UAAU,iCAAiCsC,IAAI,SAC/C2W,EAAAA,GAAAA,GAAW3Z,EAAK,uBAAwB,CAAC,SAI9C,0BAAKU,UAAU,gCACb,mBAACmjB,GAAA,EAAD,CACE1iB,KAAK,OACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,6BAE7B7jC,EAAK,mBAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,eACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,eAE7B7jC,EAAK,oBAER,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,QACLP,QAAS,IAAMmiC,EAAec,EAAAA,GAAAA,oCAE7B7jC,EAAK,2B,0BC/BhB,MA6DA,IAAexB,EAAAA,EAAAA,KA3D6B,IAatC,IAbuC,OAC3CuiD,EAD2C,SAE3Ch1C,EAF2C,eAG3Cg3B,EAH2C,QAI3C7I,EAJ2C,MAK3C5T,EAL2C,UAM3CwY,EAN2C,iBAO3C2mB,EAP2C,YAQ3CxiC,EAAc,mBAR6B,KAS3Cqf,EAT2C,YAU3CtV,EAV2C,WAW3C04B,EAX2C,SAY3Cj7B,GACI,EACJ,MAAOk7B,EAAiBC,IAAsB5jD,EAAAA,EAAAA,IAAiB,KACxD6jD,EAAoBC,IAAyB9jD,EAAAA,EAAAA,KAAS,GAEvD+jD,GAAehmD,EAAAA,EAAAA,KAAaimD,IAC5BP,GAAoBO,IAAgBP,EACtCG,EArBuB,6BAuBvBn7B,EAASu7B,KAEV,CAACv7B,EAAUg7B,IAERQ,GAAmBlmD,EAAAA,EAAAA,KAAY,KAC/B2lD,GACFA,IAEFE,EAAmB,MAClB,CAACF,IAEE1lD,GAAOC,EAAAA,EAAAA,KAIb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBge,GAGhD,0BAAKrgD,UAAU,yCACb,0BAAKA,UAAU,2BACb,mBAACwlD,GAAA,EAAD,CAAgBC,OAAK,EAACC,kBAAmBP,KAG3C,0BAAKnlD,UAAU,gCACb,mBAAC2lD,GAAA,EAAD,CACE//B,MAAOq/B,GAAmBr/B,EAC1Bgc,KAAMA,EACNrf,YAAaA,EACb+J,YAAaA,GAAehtB,EAAK,QACjC0lD,WAAYO,EACZnnB,UAAWA,EACXsnB,kBAAmBP,EACnBS,2BAA4BR,EAC5Br7B,SAAUs7B,SCjCpB,IAAevnD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL4mD,eAAeC,EAAAA,EAAAA,IAAoB7mD,EAAQ,SAF3BD,EAxBkC,IAEhD,IAFiD,SACrDsN,EADqD,eAC3Cg3B,EAD2C,QAC3B7I,EAD2B,cAClBorB,EADkB,QACHiB,GAC9C,EACJ,MAAMvmD,GAAOC,EAAAA,EAAAA,KAIb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,eAGhD,0BAAKnjC,UAAU,yCACb,0BAAKA,UAAU,2BACb,mBAAC8kD,GAAA,EAAD,CAAe1T,QAASwT,EAAe9kD,KAAK,UAE5C,wBAAGE,UAAU,iCAAiCsC,IAAI,QAC/ChD,EAAK,+BAIV,0BAAKU,UAAU,gCACb,mBAACJ,EAAA,EAAD,CAAQM,QAAS2lD,GAAUvmD,EAAK,uCCHlCwmD,GAAyB1lD,EAAAA,GAA0B,IAAM,IA8H/D,IAAetC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAqB,CAACC,EAAD,KAAsB,IAAb,KAAEyC,GAAW,EAC7D,MAAO,CACLmkD,eAAeC,EAAAA,EAAAA,IAAoB7mD,EAAiB,UAATyC,EAAmB,KAAO,SAFrD1C,EA5H0C,IAaxD,IAbyD,cAC7D6mD,EAD6D,KAE7D/qC,EAAO,OAFsD,UAG7DukB,EAH6D,MAI7DxY,EAJ6D,YAK7DrD,EAL6D,cAM7DwjC,EAN6D,WAO7Df,EAP6D,SAQ7Dj7B,EAR6D,SAS7D1e,EAT6D,eAU7Dg3B,EAV6D,QAW7D7I,EAX6D,OAY7D6mB,GACI,EAEJ,MAAM5mC,GAAW1V,EAAAA,EAAAA,IAAyB,OAEnCiM,EAAOg2C,IAAY1kD,EAAAA,EAAAA,IAAiB,KACpC2kD,EAAgBC,EAAoBC,IAAwBxhC,EAAAA,GAAAA,IAAQ,IAE3EpjB,EAAAA,EAAAA,KAAU,KACHoF,EAAAA,IACHzC,YAAW,KACTuV,EAASlV,QAAS6pC,UACjB0X,MAEJ,IAEH,MA2BMxmD,GAAOC,EAAAA,EAAAA,KAIb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBge,GAGhD,0BAAKrgD,UAAU,yCACb,0BAAKA,UAAU,2BACb,mBAAC8kD,GAAA,EAAD,CAAe1T,QAASwT,EAAe9kD,KAAK,WAG9C,0BAAKE,UAAU,gCACb,2BAAMgiC,OAAO,GAAGjY,SA9BA3nB,IACpBA,EAAEqH,iBAEGgQ,EAASlV,SAIdwlB,EAAS/Z,KAwBH,mBAACqS,GAAA,EAAD,CACE7c,IAAKiU,EACLzJ,MAAOA,EACPyd,UAAW5T,EACXsX,MAAO5O,EACPqD,MAAOA,EACP9L,SA7CiB1X,IACrBwjB,GAASo/B,GACXA,IAGFgB,EAAS5jD,EAAE6G,OAAO+G,UA2CXA,EACC,mBAACpQ,EAAA,EAAD,CAAQia,KAAK,SAASukB,UAAWA,EAAW14B,QAAM,GAAEpG,EAAK,aAEzD,mBAACM,EAAA,EAAD,CACEynB,QAAM,EACN+W,UAAWA,EACX14B,QAAM,EACNxF,QAAS6lD,EAAgBG,EArClB,KACjBn8B,MAsCWzqB,EAAK,mBAIXymD,GACC,mBAACtjC,GAAA,EAAD,CACEziB,UAAU,SACVL,OAAQsmD,EACRr/B,MAAOtnB,EAAK,wBACZgH,QAAS6/C,IAERltC,EAAAA,GAAAA,GAAW3Z,EAAK,4BAA6B,CAAC,KAAM,oBACrD,0BAAKU,UAAU,kBACb,mBAACJ,EAAA,EAAD,CACEG,MAAM,SACN2F,QAAM,EACN2hB,QAAM,EACNrnB,UAAU,wBACVE,QArDY,KACxBimD,IACAp8B,MAqDazqB,EAAK,kBAER,mBAACM,EAAA,EAAD,CACEG,MAAM,UACN2F,QAAM,EACN2hB,QAAM,EACNrnB,UAAU,wBACVE,QAASimD,GAER7mD,EAAK,mBCxGtB,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL4mD,eAAeC,EAAAA,EAAAA,IAAoB7mD,EAAQ,SAF3BD,EA5B4C,IAE1D,IAF2D,SAC/DsN,EAD+D,QACrDmuB,EADqD,cAC5CorB,EAD4C,eAC7BviB,GAC9B,EACJ,MAAM/iC,GAAOC,EAAAA,EAAAA,KAQb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,sBAGhD,0BAAKnjC,UAAU,yCACb,0BAAKA,UAAU,2BACb,mBAAC8kD,GAAA,EAAD,CAAe1T,QAASwT,EAAe9kD,KAAK,UAE5C,wBAAGE,UAAU,iCAAiCsC,IAAI,QAC/ChD,EAAK,wCAIV,0BAAKU,UAAU,gCACb,mBAACJ,EAAA,EAAD,CAAQM,QAjBM,KAClBmiC,EAAec,EAAAA,GAAAA,WAgBoB7jC,EAAK,oDCZtCwmD,GAAyB1lD,EAAAA,GAA0B,IAAM,IAmE/D,IAAetC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL4mD,eAAeC,EAAAA,EAAAA,IAAoB7mD,EAAQ,MAC3CooD,WAAYpoD,EAAOqoD,cAAcC,0BAHjBvoD,EAjEsC,IAWpD,IAXqD,cACzD6mD,EADyD,WAEzDwB,EAFyD,UAGzDhoB,EAHyD,MAIzDxY,EAJyD,WAKzDo/B,EALyD,SAMzDj7B,EANyD,SAOzD1e,EAPyD,eAQzDg3B,EARyD,QASzD7I,EATyD,OAUzD6mB,GACI,EAEJ,MAAM5mC,GAAW1V,EAAAA,EAAAA,IAAyB,OAEnCiM,EAAOg2C,IAAY1kD,EAAAA,EAAAA,IAAiB,KAE3CC,EAAAA,EAAAA,KAAU,KACHoF,EAAAA,IACHzC,YAAW,KACTuV,EAASlV,QAAS6pC,UACjB0X,MAEJ,IAEH,MAAMxmD,GAAOC,EAAAA,EAAAA,KAmBb,OAjBAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBge,GAkBhD,0BAAKrgD,UAAU,yCACb,0BAAKA,UAAU,2BACb,mBAAC8kD,GAAA,EAAD,CAAe1T,QAASwT,EAAe9kD,KAAK,WAG9C,0BAAKE,UAAU,gCACb,mBAACqiB,GAAA,EAAD,CACErS,MAAOA,EACPxK,IAAKiU,EACLgU,UAAU,UACV0D,MAAO7xB,EAAK,iBACZsmB,MAAOA,EACP9L,SA5BmB1X,IACrBwjB,GAASo/B,GACXA,IAGF,MAAMuB,EAAWnkD,EAAE6G,OAAO+G,MAAM0wB,MAAM,EAAG0lB,GAErCG,EAAS7oD,SAAW0oD,GACtBr8B,EAASw8B,GAGXP,EAASO,GACTnkD,EAAE6G,OAAO+G,MAAQu2C,KAkBZnoB,GAAa,mBAAC5a,GAAA,EAAD,YCkVtB,IAAe1lB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAD,IAA8BA,EAAOqoD,iBADnBtoD,EAlZ6B,IAY3C,IAZ4C,cAChDmkC,EADgD,YAEhD4N,EAFgD,MAGhD/N,EAHgD,KAIhDH,EAJgD,UAKhDxD,EALgD,MAMhDxY,EANgD,uBAOhD0gC,EAPgD,SAQhD/a,EARgD,SAShDlgC,EATgD,eAUhDg3B,EAVgD,QAWhD7I,GACI,EACJ,MAAM,eACJgtB,EADI,cAEJC,EAFI,gBAGJC,EAHI,oBAIJC,EAJI,sBAKJC,EALI,cAMJC,IACE9nD,EAAAA,EAAAA,OAEJwC,EAAAA,EAAAA,KAAU,KACJ+kD,IACEpkB,IAAkBiB,EAAAA,GAAAA,sBACpBd,EAAec,EAAAA,GAAAA,2BACNjB,IAAkBiB,EAAAA,GAAAA,oBAC3Bd,EAAec,EAAAA,GAAAA,2BAGlB,CAACjB,EAAeG,EAAgBikB,IAEnC,MAAMQ,GAAoBznD,EAAAA,EAAAA,KAAY,KACpCksC,EAAS,CAAE1xB,KAAM,UACjBwoB,EAAec,EAAAA,GAAAA,oBACd,CAACoI,EAAUlJ,IAER0kB,GAAoB1nD,EAAAA,EAAAA,KAAa2Q,IACrCu7B,EAAS,CAAE1xB,KAAM,cAAeooB,QAASjyB,IACzCqyB,EAAec,EAAAA,GAAAA,2BACd,CAACoI,EAAUlJ,IAER2kB,GAA2B3nD,EAAAA,EAAAA,KAAY,KAC3CgjC,EAAec,EAAAA,GAAAA,wBACd,CAACd,IAEE4kB,GAAwB5nD,EAAAA,EAAAA,KAAa2Q,IACzCu7B,EAAS,CAAE1xB,KAAM,UAAWooB,QAASjyB,IACrCqyB,EAAec,EAAAA,GAAAA,yBACd,CAACoI,EAAUlJ,IAER6kB,GAAyB7nD,EAAAA,EAAAA,KAAa2Q,IAC1Cu7B,EAAS,CAAE1xB,KAAM,WAAYooB,QAASjyB,IACtCw2C,EAAe,IACVzkB,EACHF,MAAO7xB,EACPm3C,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,2BAGlB,CAACoI,EAAUlJ,EAAgBN,EAAOykB,IAE/BY,GAA8B/nD,EAAAA,EAAAA,KAAa2Q,IAC/Cu7B,EAAS,CAAE1xB,KAAM,qBAAsBooB,QAASjyB,IAChDy2C,EAAc,CACZ/kB,gBAAiB1xB,EACjBm3C,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,6BAGlB,CAACsjB,EAAelb,EAAUlJ,IAEvBglB,GAA0BhoD,EAAAA,EAAAA,KAAa2Q,IAC3Cu7B,EAAS,CAAE1xB,KAAM,cAAeooB,QAASjyB,IACzCqyB,EAAec,EAAAA,GAAAA,8BACd,CAACoI,EAAUlJ,IAERilB,GAA8BjoD,EAAAA,EAAAA,KAAY,KAC9CgjC,EAAec,EAAAA,GAAAA,2BACd,CAACd,IAEEklB,GAA2BloD,EAAAA,EAAAA,KAAa2Q,IAC5Cu7B,EAAS,CAAE1xB,KAAM,UAAWooB,QAASjyB,IACrCw2C,EAAe,IACVzkB,EACHH,KAAM5xB,EACNm3C,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,2BAGlB,CAACoI,EAAUlJ,EAAgBN,EAAOykB,IAE/BgB,GAAgBnoD,EAAAA,EAAAA,KAAa2Q,IACjC62C,EAAc,CACZnlB,gBAAiB1xB,EACjBm3C,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,cAGlB,CAAC0jB,EAAexkB,IAEbolB,GAAqCpoD,EAAAA,EAAAA,KAAa2Q,IACtDu7B,EAAS,CAAE1xB,KAAM,qBAAsBooB,QAASjyB,IAChDy2C,EAAc,CACZ/kB,gBAAiB1xB,EACjBm3C,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,yBAGlB,CAACsjB,EAAelb,EAAUlJ,IAEvBqlB,GAAsBroD,EAAAA,EAAAA,KAAa2Q,IACvCu7B,EAAS,CAAE1xB,KAAM,WAAYooB,QAASjyB,IACtC22C,EAAoB,IACf5kB,EACHF,MAAO7xB,EACPm3C,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,2BAGlB,CAACoI,EAAUlJ,EAAgBN,EAAO4kB,IAE/BgB,GAAkBtoD,EAAAA,EAAAA,KAAamtB,IACnCo6B,EAAsB,CAAEp6B,KAAAA,MACvB,CAACo6B,IAEEtnD,GAAOC,EAAAA,EAAAA,KAEb,OAAQ2iC,GACN,KAAKiB,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CACE0iB,QAASiB,EACTzkB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,iBACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,iBACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR3f,YAAajjB,EAAK,uBAClBgtB,YAAahtB,EAAK,YAClByqB,SAAUg9B,EACV1kB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,wBACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR6iB,iBAAkBhjB,EAAMJ,SACxBpf,YAAajjB,EAAK,yBAClBgtB,YAAahtB,EAAK,YAClByqB,SAAUi9B,EACV3kB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,qBACH,OACE,mBAAC,GAAD,CACE1iC,KAAK,OACL8hB,YAAajjB,EAAK,2BAClByqB,SAAUk9B,EACV5G,OAAQne,EACRG,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,sBACH,OACE,mBAAC,GAAD,CACE1iC,KAAK,QACLoZ,KAAK,QACLukB,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZnkC,YAAajjB,EAAK,sBAClBymD,eAAa,EACbh8B,SAAUm9B,EACV7G,OAAQne,EACRG,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,0BACH,OACE,mBAAC,GAAD,CACE/E,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZ38B,SAAU49B,EACVtH,OAAQne,EACRG,eAAgBA,EAChBh3B,SAAUA,GAAYykC,IAAgB3M,EAAAA,GAAAA,qBACtC3J,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,qBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAUA,EACVmuB,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,kCACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,2BACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR9D,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZ9kB,KAAMA,EACN7X,SAAUq9B,EACV/kB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,uBACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR3f,YAAajjB,EAAK,+BAClByqB,SAAUs9B,EACVhlB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,2BACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR6iB,iBAAkBhjB,EAAMJ,SACxBpf,YAAajjB,EAAK,yBAClByqB,SAAUu9B,EACVjlB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,wBACH,OACE,mBAAC,GAAD,CACE/E,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZjmD,KAAK,OACL8hB,YAAajjB,EAAK,2BAClByqB,SAAUw9B,EACVllB,eAAgBA,EAChBh3B,SAAUA,GAAYykC,IAAgB3M,EAAAA,GAAAA,qBACtC3J,QAASA,EACT6mB,OAAQne,IAId,KAAKiB,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACE/E,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZ9kB,KAAMA,EACN7X,SAAUy9B,EACVnlB,eAAgBA,EAChBh3B,SAAUA,EACVmuB,QAASA,EACT6mB,OAAQne,IAId,KAAKiB,EAAAA,GAAAA,kCACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR9D,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZ9kB,KAAMA,EACN7X,SAAU09B,EACVplB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,mBACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACRzhC,KAAK,QACLoZ,KAAK,QACL0I,YAAajjB,EAAK,sBAClByqB,SAAU29B,EACVrlB,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB83B,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,sBACA1mC,SAASqzC,GACXtW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,uBACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACR9D,UAAWA,EACXxY,MAAOA,EACPo/B,WAAY0B,EACZ38B,SAAU49B,EACVtlB,eAAgBA,EAChBh3B,SAAUA,GAAYykC,IAAgB3M,EAAAA,GAAAA,qBACtC3J,QAASA,IAIf,QACE,Y,eCtTN,SAASouB,GAA0B5pD,EAAqBqiD,GACtD,MAAM,QAAE1C,GAAY3/C,EAAOic,SAC3B,OAAQomC,GACN,KAAKld,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,iCACH,OAAOwa,EAAQO,YACjB,KAAK/a,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,8BACH,OAAOwa,EAAQU,SACjB,KAAKlb,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,kCACH,OAAOwa,EAAQY,aACjB,KAAKpb,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,gCACH,OAAOwa,EAAQc,SACjB,KAAKtb,EAAAA,GAAAA,gCACL,KAAKA,EAAAA,GAAAA,iCACH,OAAOwa,EAAQgB,YAMrB,UAAe7gD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEqiD,GAAyB,EAClC,MAAO,CACLj/B,cAAepjB,EAAOojB,cACtBnH,SAAU2tC,GAA0B5pD,EAAQqiD,MAJ9BtiD,EA7GsD,IAQpE,IARqE,YACzE8pD,EADyE,OAEzExH,EAFyE,SAGzEh1C,EAHyE,eAIzEg3B,EAJyE,QAKzE7I,EALyE,cAMzEpY,EANyE,SAOzEnH,GACI,EACJ,MAAM,mBAAE6tC,IAAuB/oD,EAAAA,EAAAA,MAEzBO,GAAOC,EAAAA,EAAAA,KAEPwoD,GAAqBtoD,EAAAA,EAAAA,KAAQ,IAC5Bwa,EAID4tC,EACK,IAAI5tC,EAASsmC,gBAAiBtmC,EAASumC,cAEvC,IAAIvmC,EAASwmC,gBAAiBxmC,EAASymC,cANvC,IAQR,CAACmH,EAAa5tC,KACVigB,EAAa8tB,IAAkB1mD,EAAAA,EAAAA,IAAiB,KAChD2mD,EAAeC,IAAoB5mD,EAAAA,EAAAA,KAAkB,IACrD6mD,EAAuBC,IAA4B9mD,EAAAA,EAAAA,IAAmBymD,GAEvE/Y,GAAsBC,EAAAA,GAAAA,IAA8BC,EAAAA,IACpDC,GAA2BF,EAAAA,GAAAA,IAA8BG,EAAAA,IACzDC,GAAe5vC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMkkB,GAAYwB,EAAAA,EAAAA,MAAY1B,MAAMC,KAE9BqB,GAAUD,EAAAA,GAAAA,IAAO,IAAIkqB,GAAuB,MAAOG,GAA4B,KAClF5tB,QAAQ9W,IACP,MAAMuO,EAAO2K,EAAUlZ,GACvB,OAAOuO,KAAUX,EAAAA,EAAAA,IAASW,EAAKxc,KAAOwc,EAAKxc,KAAO4kB,IAAkBinC,EAAAA,EAAAA,IAAYrvC,OAGpF,OAAO8L,EAAAA,GAAAA,IAAO,IACTijC,MACAziC,EAAAA,EAAAA,IAAkBhmB,EAAMylB,EAASpB,EAAWuW,OAEhD,CAAC8U,EAAqBG,EAA0B4Y,EAAoBzoD,EAAM46B,EAAa9Y,IAEpFknC,GAAiCjpD,EAAAA,EAAAA,KAAa2Q,IAClDo4C,EAAyBp4C,GACzBk4C,GAAiB,KAChB,IAEG7C,GAAehmD,EAAAA,EAAAA,KAAY,KAC/ByoD,EAAmB,CACjB9G,WAAYZ,GAAcC,GAC1BwH,YAAa3gD,QAAQ2gD,GACrBU,YAAaJ,IAGf9lB,EAAec,EAAAA,GAAAA,WACd,CAAC0kB,EAAaM,EAAuB9lB,EAAgBge,EAAQyH,IAIhE,OAFAjnC,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBge,GAGhD,0BAAKrgD,UAAU,wBACb,mBAACwoD,GAAA,EAAD,CACEC,QAASpZ,GAAgB,GACzBxB,YAAasa,EACbra,YAAa5T,EACb1Y,kBAAiCliB,EAAduoD,EAAmB,6BAAqC,6BAC3Ea,cAAc,0BACd3a,oBAAqBua,EACrB5mC,eAAgBsmC,IAGlB,mBAAC1gB,GAAA,EAAD,CACEjuB,QAAS4uC,EACT/nD,QAASmlD,EACTllD,UAAyBb,EAAduoD,EAAmB,uBAA+B,wBAE7D,wBAAG7nD,UAAU,2BCzDrB,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,mBAAE2qD,EAAF,UAAsB9W,GAAc7zC,EAE1C,MAAO,CACL2qD,mBAAAA,EACAC,iBAAkB/W,MAAAA,OAAF,EAAEA,EAAWD,mBANf7zC,EAjCqC,IAMnD,IANoD,SACxDsN,EADwD,QAExDmuB,EAFwD,eAGxD6I,EAHwD,mBAIxDsmB,EAJwD,iBAKxDC,GACI,EACJ,MAAM,mBAAEC,IAAuB9pD,EAAAA,EAAAA,OAC/B8hB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAElD,MAAM9R,GAAUs3B,MAAAA,OAAA,EAAAA,EAAoBpnC,QAAQ0T,IAAOA,EAAE6zB,aAAY7lC,KAAKgS,IAC7D,CACL9D,MAAO,sCAAE,mBAACqE,GAAA,EAAD,CAAqBN,SAAUD,EAAEC,WAAaD,EAAErO,OACzD5W,MAAOilB,EAAEC,eAEP,GAEAuqB,GAAepgD,EAAAA,EAAAA,KAAa61B,IAChC2zB,EAAmB,CAAE3zB,SAAAA,MACpB,CAAC2zB,IAEJ,OACE,0BAAK7oD,UAAU,wEACb,mBAACoxB,GAAA,EAAD,CACEjQ,KAAK,0BACLkQ,QAASA,EACTC,SAAUs3B,EACV9uC,SAAU2lC,SCpBZ9e,GAA0B3jC,OAAOg5B,KAAKmN,EAAAA,IAAiBzlC,OAAS,EAGhEqrD,GAAiB,CACrB5lB,EAAAA,GAAAA,cACAA,EAAAA,GAAAA,iBACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,kCACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,wBAGI6lB,GAAkB,CACtB7lB,EAAAA,GAAAA,QACAA,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,8BACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,kCAGI8lB,GAAkB,CACtB9lB,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,uBAGI+lB,GAA+B,CACnC/lB,EAAAA,GAAAA,kCACAA,EAAAA,GAAAA,kCAGIgmB,GAAkC,CACtChmB,EAAAA,GAAAA,+BACAA,EAAAA,GAAAA,+BAGIimB,GAAgC,CACpCjmB,EAAAA,GAAAA,mCACAA,EAAAA,GAAAA,mCAGIkmB,GAA6B,CACjClmB,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,iCAGImmB,GAA8B,CAClCnmB,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,iCAsRF,IAAerlC,EAAAA,EAAAA,KAzQgB,IAQzB,IAR0B,SAC9BuN,EAD8B,cAE9B62B,EAF8B,aAG9BqnB,EAH8B,gBAI9BC,EAJ8B,eAK9BnnB,EAL8B,QAM9B7I,EAN8B,qBAO9BiwB,GACI,EACJ,MAAOC,EAAYC,ItCpDZC,EAAAA,GAAAA,GAAW9nB,GAAcL,IsCsD1BsO,GAAc1wC,EAAAA,EAAAA,KAAY,KAE5B6iC,IAAkBiB,EAAAA,GAAAA,qBACfjB,IAAkBiB,EAAAA,GAAAA,mBAClBjB,IAAkBiB,EAAAA,GAAAA,+BAErBj/B,YAAW,KACTslD,EAAgB,CAAE3vC,KAAM,YA1FJ,KA+FtBqoB,IAAkBiB,EAAAA,GAAAA,sBACfjB,IAAkBiB,EAAAA,GAAAA,qBAUvB3J,IAR4B,WAAtB+vB,EAAavc,KACf3K,EAAec,EAAAA,GAAAA,qBAEfd,EAAec,EAAAA,GAAAA,qBAMlB,CACDomB,EAAavc,KAAMwc,EACnBtnB,EAAe1I,EAAS6I,IAGpBwnB,GAAmBxqD,EAAAA,EAAAA,KAAY,KACnCmqD,EAAgB,CAAE3vC,KAAM,gBACxBk2B,MACC,CAACyZ,EAAiBzZ,IAmMrB,SAAS+Z,EAAqBC,EAAyBC,EAAiBC,GACtE,OACE,sCACE,mBAAC,GAAD,CACE/nB,cAAeA,EACf1I,QAASuW,EACT3N,aAAcynB,EACdxnB,eAAgBA,EAChBF,eAAgBonB,EAAahd,WAzMrC,SAAqCwd,EAAyB1J,GAC5D,MAAM6J,EAA+C,CACnD,CAAC/mB,EAAAA,GAAAA,oBAAqC+lB,GAA6BzsD,SAAS4jD,GAC5E,CAACld,EAAAA,GAAAA,iBAAkCgmB,GAAgC1sD,SAAS4jD,GAC5E,CAACld,EAAAA,GAAAA,qBAAsCimB,GAA8B3sD,SAAS4jD,GAC9E,CAACld,EAAAA,GAAAA,mBAAoCkmB,GAA2B5sD,SAAS4jD,GACzE,CAACld,EAAAA,GAAAA,mBAAoCmmB,GAA4B7sD,SAAS4jD,IAGtE8J,EAAgBpB,GAAetsD,SAAS4jD,GACxC+J,EAAkBpB,GAAgBvsD,SAAS4jD,GAC3CgK,EAAkBpB,GAAgBxsD,SAAS4jD,IAC5C8J,GACAntD,OAAOg5B,KAAKk0B,GAAqBztD,SAAS4jD,EAAOxoC,aACjD7a,OAAOstD,OAAOJ,GAAqB30B,MAAM/rB,IAAgB,IAARA,IAEtD,OAAQ04B,GACN,KAAKiB,EAAAA,GAAAA,KACH,OACE,mBAAC,GAAD,CAAcd,eAAgBA,EAAgBh3B,SAAUA,EAAUmuB,QAASuW,IAE/E,KAAK5M,EAAAA,GAAAA,YACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAUA,GAAY0+C,EACtBvwB,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAU0+C,GACP1J,IAAWld,EAAAA,GAAAA,4BACXkd,IAAWld,EAAAA,GAAAA,uBACXkd,IAAWld,EAAAA,GAAAA,eACXknB,GAAmBD,EACtB5wB,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CAAuBd,eAAgBA,EAAgBh3B,SAAU0+C,EAAgBvwB,QAASuW,IAE9F,KAAK5M,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CAAuBd,eAAgBA,EAAgBh3B,SAAU0+C,EAAgBvwB,QAASuW,IAE9F,KAAK5M,EAAAA,GAAAA,YACH,OACE,mBAAC,GAAD,CAAqBd,eAAgBA,EAAgBh3B,SAAU0+C,EAAgBvwB,QAASuW,IAE5F,KAAK5M,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAU0+C,GAAkBM,GAAmBF,EAC/C3wB,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,SACH,OACE,mBAAC,GAAD,CAAkBd,eAAgBA,EAAgBh3B,SAAU0+C,EAAgBvwB,QAASuW,IAEzF,KAAK5M,EAAAA,GAAAA,sBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAU0+C,GAAkB1J,IAAWld,EAAAA,GAAAA,2BACvC3J,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,2BACH,OACE,mBAAConB,GAAD,CACEloB,eAAgBA,EAChBh3B,SAAU0+C,EACVvwB,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,sBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAU0+C,EACVvwB,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,oBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChBh3B,SAAU0+C,EACVvwB,QAASuW,IAGf,KAAK5M,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,kBACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACRG,eAAgBA,EAChBh3B,SAAU0+C,GAAkBG,EAAoBhoB,GAChD1I,QAASuW,IAIf,KAAK5M,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACE0kB,aAAW,EACXxH,OAAQne,EACRG,eAAgBA,EAChBh3B,SAAU0+C,GAAkBG,EAAoBhoB,GAChD1I,QAASuW,IAIf,KAAK5M,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,8BACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,gCACL,KAAKA,EAAAA,GAAAA,gCACH,OACE,mBAAC,GAAD,CACEkd,OAAQne,EACRG,eAAgBA,EAChBh3B,SAAU0+C,EACVvwB,QAASuW,IAIf,KAAK5M,EAAAA,GAAAA,QACL,KAAKA,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,8BACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACEjB,cAAeA,EACf4N,YAAauQ,EACbte,MAAOwnB,EACPhe,SAAUie,EACVn+C,SAAU0+C,EACV1nB,eAAgBA,EAChB7I,QAASuW,IAIf,KAAK5M,EAAAA,GAAAA,cACL,KAAKA,EAAAA,GAAAA,iBACL,KAAKA,EAAAA,GAAAA,wBACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,sBACL,KAAKA,EAAAA,GAAAA,0BACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,aACL,KAAKA,EAAAA,GAAAA,2BACL,KAAKA,EAAAA,GAAAA,uBACL,KAAKA,EAAAA,GAAAA,2BACL,KAAKA,EAAAA,GAAAA,wBACL,KAAKA,EAAAA,GAAAA,aACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,uBACH,OACE,mBAAC,GAAD,CACEjB,cAAeA,EACfH,MAAO2nB,EACPne,SAAUoe,EACV7Z,YAAauQ,EACbh1C,SAAU0+C,EACV1nB,eAAgBA,EAChB7I,QAASuW,IAIf,QACE,QAcCya,CAA4BT,EAAgBE,IAKnD,OACE,mBAAC7wC,EAAA,EAAD,CACE5c,GAAG,WACH2kB,KAAMsoC,EAAuB,OAASgB,EAAAA,GACtCvpC,UAAWghB,EACXV,YAAab,IAEZmpB,MC3UD5wB,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GAkEnD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQqmB,QAASF,GAAenmB,EAAOomB,aAAe,IAC9CV,KAAMwB,EAAWwlC,aAAcC,GAAqB3sD,EAAOonB,MAEnE,MAAO,CACLF,UAAAA,EACAylC,iBAAAA,EACAxmC,WAAAA,EACAymC,iBAAkB5sD,EAAO4sD,oBATX7sD,EAhE2B,IAQzC,IAR0C,SAC9CsN,EAD8C,OAE9CkW,EAF8C,UAG9C2D,EAH8C,iBAI9CylC,EAJ8C,WAK9CxmC,EAL8C,iBAM9CymC,EAN8C,QAO9CpxB,GACI,EACJ,MAAM,gBACJE,EADI,SAEJhG,IACE30B,EAAAA,EAAAA,OAIJwC,EAAAA,EAAAA,KAAU,KACR23B,IAAa,KACXQ,WAIJ7Y,EAAAA,EAAAA,IAAexV,EAAUmuB,GAEzB,MAAM5F,GAAcv0B,EAAAA,EAAAA,KAAa7C,IAC/Bk3B,EAAS,CAAEl3B,GAAAA,EAAIu9B,sBAAsB,MACpC,CAACrG,IAEE9P,GAAUnkB,EAAAA,EAAAA,KAAQ,KACtB,IAAK0kB,EACH,OAGF,MAAM0mC,GAActlC,EAAAA,EAAAA,IAAkBpB,EAAYe,EAAW3D,GAE7D,OAAOupC,EAAAA,EAAAA,IAAYD,EAAa3lC,EAAWylC,OAAkB1qD,EAAW2qD,KACvE,CAACzmC,EAAY5C,EAAQ2D,EAAWylC,EAAkBC,KAE9C/oC,EAAaC,IAAWC,EAAAA,GAAAA,QAAkB9hB,EAAW2jB,EAAS1c,QAAQqa,IAE7E,OACE,mBAACoB,GAAA,EAAD,CAAgBC,MAAOf,EAAagB,WAAYf,EAAS9hB,UAAU,2BAChE6hB,MAAAA,GAAAA,EAAankB,OACZmkB,EAAYoB,KAAKzmB,GACf,mBAAC2mB,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,sBACVE,QAAS,IAAM0zB,EAAYp3B,GAC3BkJ,QAAStF,EAAAA,IAET,mBAACgjB,GAAA,EAAD,CAAiBE,OAAQ9mB,EAAIknC,eAAa,EAAC1K,WAAW,aAGxDnX,IAAgBA,EAAYnkB,OAC9B,wBAAGsC,UAAU,aAAawJ,IAAI,aAAalH,IAAI,QAC5Cif,EAAO7jB,OAAS,mCAAqC,0BAGxD,mBAAC8lB,GAAA,EAAD,CAASha,IAAI,iBCxDf0vB,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GA0GnD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQqmB,QAASkX,GAAoBv9B,EAAOomB,aAAe,IACnDV,KAAMC,GAAc3lB,EAAOylB,OAGjCgZ,MAAOvC,EADH,eAEJsB,EAFI,cAGJC,EAHI,aAIJC,GACE19B,EAAOu7B,cACHlV,QAASuX,GAAkBH,GAAiB,IAC5CpX,QAASyX,GAAiBJ,GAAgB,GAElD,MAAO,CACL/X,UAAAA,EACA4X,gBAAAA,EACArB,YAAAA,EACA6wB,YAAavvB,MAAAA,OAAF,EAAEA,EAAgB/X,MAC7BmY,cAAAA,EACAE,aAAAA,KApBc/9B,EAxG4B,IAa1C,IAb2C,UAC/CgpB,EAD+C,SAE/C1b,EAF+C,kBAG/C2/C,EAH+C,0BAI/CC,EAJ+C,WAK/CC,EAL+C,QAM/C1xB,EAN+C,UAO/C7V,EAP+C,gBAQ/C4X,EAR+C,YAS/CrB,EAT+C,YAU/C6wB,EAV+C,aAW/CjvB,EAX+C,cAY/CF,GACI,EACJ,MAAM,gBACJlC,EADI,qBAEJyxB,IACEpsD,EAAAA,EAAAA,OAIJwC,EAAAA,EAAAA,KAAU,KACR23B,IAAa,KACXQ,UAIJ,MAAMp6B,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAUmuB,GAEzB,MAAMtX,GAAqB7iB,EAAAA,EAAAA,KAAao9B,IACtC0uB,EAAqB,CAAE1uB,MAAAA,MACtB,CAAC0uB,IAEE9b,GAAe5vC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMylB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAC9BqZ,EAAkBxB,GAAkBhW,EAAAA,EAAAA,IAAkBgW,EAAiBrW,EAAWgV,GAAe,GAEvG,OAAO7U,EAAAA,EAAAA,KACLP,EAAAA,GAAAA,IAAO,IACFiY,KACCjB,GAAgB,MAChBF,GAAiB,KACpBra,QAAQiiC,IACT,MAAMzqC,EAAOmM,EAAUs+B,GACvB,OAAKzqC,IAIGA,EAAKyhB,SAAWzhB,EAAKqyC,uBAAwBC,EAAAA,EAAAA,IAAUtyC,OAEjE4K,GACA,EACAqnC,KAED,CAACzvB,EAAiB5X,EAAWuW,EAAa4B,EAAcF,EAAeovB,IAEpEM,GAAiBjsD,EAAAA,EAAAA,KAAY,MAC7B2rD,EAAkBttD,QAAUqpB,KAC9BokC,EAAqB,CAAE1uB,MAAO,KAC9ByuB,OAED,CAACF,EAAkBttD,OAAQqpB,EAAWokC,EAAsBD,IAE/D,OACE,0BAAKlrD,UAAU,kBACb,0BAAKA,UAAU,eACb,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAASs5B,EACTr5B,UAAU,uBAEV,wBAAGH,UAAU,qBAEf,6BAAKV,EAAK,qBAEZ,0BAAKU,UAAU,wBACb,mBAACwoD,GAAA,EAAD,CACEC,QAASpZ,EACTxB,YAAamd,EACbld,YAAa5T,EACb1Y,kBAAmBliB,EAAK,iBACxBopD,cAAc,0BACdtqB,UAAW2sB,EACXhd,oBAAqBkd,EACrBvpC,eAAgBQ,IAGlB,mBAAColB,GAAA,EAAD,CACEjuB,QAASnS,QAAQ8jD,EAAkBttD,QAAUqpB,GAC7C7mB,QAASorD,EACTnrD,UAAW4mB,EAAY,2BAA6B,0BAEpD,wBAAG/mB,UAAU,4BCyDvB,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACE8C,SAAUyqD,EACV3lC,MAAO4lC,GACLxtD,EAAOytD,cAAgB,GAE3B,MAAO,CACLF,iBAAAA,EACAC,cAAAA,KATcztD,EA9J6B,IAO3C,IAP4C,UAChDgpB,EADgD,SAEhD1b,EAFgD,UAGhDmoB,EAHgD,QAIhDgG,EAJgD,iBAKhD+xB,EALgD,cAMhDC,GACI,EACJ,MAAM,gBACJE,EADI,cAEJC,IACE5sD,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAUmuB,GAEzB,MAAO5S,EAAOglC,IAAYtqD,EAAAA,EAAAA,IAAS,KAC5BulB,EAAOglC,IAAYvqD,EAAAA,EAAAA,IAAS,KAC5BoK,EAAOy6B,IAAY7kC,EAAAA,EAAAA,OACnBskB,EAAOsgB,IAAY5kC,EAAAA,EAAAA,MAEpBwqD,EAAsB,4BACtBC,EAAyB,+BACzBC,EAAwB,mDAExB5tB,EAAYmtB,IAAqBU,EAAAA,GAAAA,WAEjCC,GAAoB7sD,EAAAA,EAAAA,KAAa+C,IACrC,MAAM,MAAE4N,GAAU5N,EAAE+G,cACdo9C,EAAWv2C,EAAM4c,QAAQ,OAAQ,IAEvCg/B,EAASrF,GAELA,IAAav2C,IACf5N,EAAE+G,cAAc6G,MAAQu2C,KAEzB,IAEGt1B,GAA0B5xB,EAAAA,EAAAA,KAAa+C,IAC3CypD,EAASzpD,EAAE+G,cAAc6G,SACxB,IAEGm8C,GAAoB9sD,EAAAA,EAAAA,KAAY,KAC/BunB,EAAMlpB,OAKP81B,EAAU91B,OAnDgB,IAoD5BwoC,EAAS8lB,GAIXN,EAAgB,CACd9kC,MAAAA,EACAlb,MAAAA,EACA8nB,UAAAA,IAZA0S,EAAS4lB,KAcV,CAACllC,EAAO4M,EAAWk4B,EAAiBhgD,EAAOogD,EAAqBE,IAE7DI,GAAsB/sD,EAAAA,EAAAA,KAAY,KACjCunB,EAAMlpB,OAKXiuD,EAAc,CACZ/kC,MAAAA,EACAC,MAAAA,EACAnb,MAAAA,EACA8nB,UAAAA,IARA0S,EAAS6lB,KAUV,CAACnlC,EAAO+kC,EAAe9kC,EAAOnb,EAAO8nB,EAAWu4B,KAEnDxqD,EAAAA,EAAAA,KAAU,KACJgqD,IAAqBU,EAAAA,GAAAA,UACvBzyB,GAAQ,KAET,CAAC+xB,EAAkB/xB,IAEtB,MAAM6yB,EAAiBb,GAAiBlsD,EAAKksD,KAC3C5lC,IAAUkmC,GAAuBlmC,IAAUmmC,EACvCnmC,OACA3lB,GAGN,OACE,0BAAKD,UAAU,WACb,0BAAKA,UAAU,eACb,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAAS,IAAMs5B,IACfr5B,UAAU,8BAEV,wBAAGH,UAAU,qBAEf,6BAAKV,EAAKynB,EAAY,aAAe,cAEvC,0BAAK/mB,UAAU,wBACb,mBAAConC,GAAA,EAAD,CACEttB,SAAUqsB,EACVvf,MAAOtnB,EAAK,cAEd,mBAAC+iB,GAAA,EAAD,CACErS,MAAO4W,EACP9M,SAAUoyC,EACV/6B,MAAO7xB,EAAKynB,EAAY,mBAAqB,aAC7CnB,MAAOA,IAAUkmC,GAAuBlmC,IAAUmmC,EAAyBnmC,OAAQ3lB,IAEpF8mB,GACC,sCACE,mBAAC1E,GAAA,EAAD,CACErS,MAAO6W,EACP/M,SAAUmX,EACVE,MAAO7xB,EAAK,oCAEd,wBAAGU,UAAU,QAAQV,EAAK,qBAI7B+sD,GACC,wBAAGrsD,UAAU,SAASqsD,GAGvB74B,EAAU91B,OAAS,GAClB,sCACE,yBAAIsC,UAAU,wBAAwBV,EAAK,6BAA8Bk0B,EAAU91B,OAAQ,MAE3F,0BAAKsC,UAAU,mCACZwzB,EAAUvQ,KAAKzmB,GACd,mBAAC2mB,GAAA,EAAD,CAAUsqB,UAAQ,EAACztC,UAAU,uBAC3B,mBAACojB,GAAA,EAAD,CAAiBE,OAAQ9mB,UAQrC,mBAAC8qC,GAAA,EAAD,CACEjuB,QAA0B,IAAjBuN,EAAMlpB,OACfwC,QAAS6mB,EAAYqlC,EAAsBD,EAC3CxyC,SAAUykB,EACVj+B,UAAW4mB,EAAYznB,EAAK,8BAAgC,gBAE3D8+B,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,2BClKjBssD,GAAetvD,OAAOg5B,KAAKu2B,EAAAA,IAAmB7uD,OAAS,EAsD7D,IAAeI,EAAAA,EAAAA,KApDe,IAMxB,IANyB,SAC7BuN,EAD6B,UAE7B0b,GAAY,EAFiB,QAG7B1V,EAH6B,gBAI7Bm7C,EAJ6B,QAK7BhzB,GACI,EACJ,MAAOizB,EAAkBC,IAAuBprD,EAAAA,EAAAA,IAAmB,IAE7DgqD,GAAiBjsD,EAAAA,EAAAA,KAAY,KACjCmtD,EAAgBzlC,EAAYwlC,EAAAA,GAAAA,gBAAoCA,EAAAA,GAAAA,iBAC/D,CAACxlC,EAAWylC,IAEf,OACE,mBAACpzC,EAAA,EAAD,CACE5c,GAAG,UACH2kB,KAAMspC,EAAAA,GACNjpB,YAAa8qB,GACbprC,UAAW7P,IAETs7C,IACA,OAAQt7C,GACN,KAAKk7C,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CACExlC,UAAWA,EACX1b,SAAUA,EACV2/C,kBAAmByB,EACnBxB,0BAA2ByB,EAC3BxB,WAAYI,EACZ9xB,QAASA,IAGf,KAAK+yB,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CACExlC,UAAWA,EACX1b,SAAUshD,GAAgBthD,EAC1BmoB,UAAWi5B,EACXjzB,QAASA,IAGf,QACE,c,eCpDZ,MAwBA,IAAe17B,EAAAA,EAAAA,KAxBqB,IAA4C,IAA3C,SAAEuN,EAAF,QAAYmuB,EAAZ,gBAAqBgzB,GAAsB,EAC9E,MAAMltD,GAAOC,EAAAA,EAAAA,KAIb,OAFAshB,EAAAA,EAAAA,IAAexV,EAAUmuB,EAASgzB,EAAiBD,EAAAA,GAAAA,UAGjD,0BAAKvsD,UAAU,iBACb,0BAAKA,UAAU,eACb,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAASs5B,EACTr5B,UAAU,uBAEV,wBAAGH,UAAU,qBAEf,6BAAKV,EAAK,mBAEZ,mBAACstD,GAAA,EAAD,CAAUC,WAAW,WAAWxhD,SAAUA,Q,eCXhD,MAuEA,IAAevN,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQ0lB,KAAM8lB,EAAalR,WAAYw0B,GAAqB9uD,EAAOq6B,YAEnE,MAAO,CACLmR,YAAAA,EACAsjB,iBAAAA,KANc/uD,EAvE+B,IAO7C,IAP8C,OAClD4B,EADkD,OAElD8K,EAFkD,YAGlD++B,EAHkD,iBAIlDsjB,EAJkD,QAKlDxmD,EALkD,oBAMlDsb,GACI,EACJ,MAAM,gBAAEmrC,IAAoBhuD,EAAAA,EAAAA,MAEtBO,GAAOC,EAAAA,EAAAA,KAEPytD,GAA2BvtD,EAAAA,EAAAA,KAAQ,IAClC+pC,EAIExsC,OAAOg5B,KAAKwT,GAAa8X,QAAO,CAACC,EAAQhV,KAC9C,MAAM,gBAAEN,EAAF,cAAmBghB,GAAkBzjB,EAAYzvB,OAAOwyB,IAK9D,OAJIN,EAAgBxvC,SAASgO,IAAWwiD,MAAAA,GAAAA,EAAexwD,SAASgO,KAC9D82C,EAAOr1B,KAAKqgB,GAGPgV,IACN,IAVM,IAWR,CAAC92C,EAAQ++B,KAEL0jB,EAAmBC,IAAwB7rD,EAAAA,EAAAA,IAAmB0rD,GAE/DI,GAAU3tD,EAAAA,EAAAA,KAAQ,KACfqtD,MAAAA,OAAA,EAAAA,EAAkB7pC,KAAKspB,IAAD,CAC3Bpb,MAAOqY,EAAcA,EAAY+C,GAAU3lB,MAAQ,GACnD5W,MAAOoZ,OAAOmjB,SACT,IACN,CAACugB,EAAkBtjB,IAEhB6b,GAAehmD,EAAAA,EAAAA,KAAY,KAC/B,MAAMguD,EAAcL,EAAyBzrC,QAAQ/kB,IAAQ0wD,EAAkBzwD,SAASD,KAAKymB,IAAIlJ,QAC3FuzC,EAAWJ,EAAkB3rC,QAAQ/kB,IAAQwwD,EAAyBvwD,SAASD,KAAKymB,IAAIlJ,QAE9FgzC,EAAgB,CAAEtiD,OAAAA,EAAQ4iD,YAAAA,EAAaC,SAAAA,IACvChnD,MACC,CAACmE,EAAQsiD,EAAiBC,EAA0B1mD,EAAS4mD,IAEhE,GAAK1jB,GAAgBsjB,EAIrB,OACE,mBAACrqC,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASA,EACTsb,oBAAqBA,EACrBwN,QAASi2B,EACTrlD,UAAU,SACV4mB,MAAOtnB,EAAK,gBAEZ,mBAACiuD,GAAA,EAAD,CACEl8B,QAAS+7B,EACT97B,SAAU47B,EACVpzC,SAAUqzC,EACVttD,OAAK,IAEP,mBAACD,EAAA,EAAD,CAAQG,MAAM,UAAUC,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASmlD,GACvE/lD,EAAK,gBAER,mBAACM,EAAA,EAAD,CAAQI,UAAU,wBAAwBqnB,QAAM,EAACnnB,QAASoG,GAAUhH,EAAK,gB,yBCV/E,SAASkuD,GAAaC,GACpB,OAAIA,EACK,4BAEF,wBCrFT,IAAIC,GACAp7C,GAEJ,MAAMq7C,GAAwC,CAC5CC,MAAM,EACNC,WAAW,EACXC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,WAAW,EACXC,OAAO,EACPC,YAAY,EACZ,KAAK,EACLC,QAAQ,EACRC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,GAkBMC,GAAarsD,GAChB,mBAAoBA,EAAIA,EAAEssD,eAAe,GAAGC,QAAU,EAG1DllD,GAAkBrH,IACtB,MAAM8V,EAAS,WAAY9V,EAAIA,EAAE8V,OAASu2C,GAAUrsD,GAEpD,IACGsrD,KAEGA,GAAahvC,SAAStc,EAAE6G,SAExBykD,GAAa/wD,WAAa,GAAKub,GAAU,GAEzCw1C,GAAa/wD,WAAc+wD,GAAakB,aAAelB,GAAa9wD,cAAiBsb,GAAU,EACnG,CACA,GAAI5F,IAA4BlQ,EAAE6G,OAAuB1M,QAAQ+V,IAA0B,OAC3FlQ,EAAEqH,mBAIN,SAASolD,GAA4BzsD,GAC/BurD,GAAavrD,EAAEoH,OArCrB,SAAmBP,GACjB,KAAKA,GAAYA,aAAkB6lD,aAAc,OAAO,EACxD,MAAMhyD,EAAUmM,EACV8lD,EAAUjyD,EAAQiyD,QAAQjP,cAChC,GAAgB,aAAZiP,EAAwB,OAAO,EACnC,GAAgB,UAAZA,EAAqB,OAAO,EAChC,MAAMl1C,EAAO/c,EAAQkyD,aAAa,QAClC,QAAKn1C,GACc,CACjB,OAAQ,WAAY,SAAU,QAAS,MAAO,MAC9C,SAAU,OAAQ,WAAY,iBAAkB,OAAQ,QAAS,QAEjDuB,QAAQvB,EAAKimC,gBAAkB,EAyBrBmP,CAAU7sD,EAAE6G,SACtC7G,EAAEqH,iBAIC,SAASylD,GAAiBlwC,EAAyBmwC,GACxDzB,GAAe1uC,EACf1M,GAA0B68C,EAE1Bn0D,SAASgH,iBAAiB,QAASyH,GAAgB,CAAE2lD,SAAS,IAC9Dp0D,SAASgH,iBAAiB,YAAayH,GAAgB,CAAE2lD,SAAS,IAClEp0D,SAASq0D,UAAYR,GAGhB,SAASS,KACd5B,QAAeztD,EACfqS,QAA0BrS,EAC1BjF,SAASiH,oBAAoB,QAASwH,IACtCzO,SAASiH,oBAAoB,YAAawH,IAE1CzO,SAASq0D,UAAY,K,0BC9DvB,MASME,IAAKC,EAAAA,EAAAA,GAAuB,4BAwDlC,IAAe1xD,EAAAA,EAAAA,KAtDgC,IAAyD,UAAxD,SAAEo3B,EAAF,aAAYu6B,EAAZ,eAA0BC,EAA1B,QAA0CC,GAAc,EAEtG,MAAMxgD,GAAepL,EAAAA,EAAAA,IAAuB,MAEtC1F,GAAYyO,EAAAA,EAAAA,GAAU,WAAD,UAAWooB,EAAS06B,uBAApB,aAAW,EAA0BpzD,MAAOmzD,EAAS5iD,EAAAA,GAAAA,SAEzE8iD,EAAaC,EAAUC,IAAcprC,EAAAA,GAAAA,MACrCslB,EAAmB+lB,IAAuBrrC,EAAAA,GAAAA,KAE3CsrC,EAAuB/oD,QAAQyoD,GAAWtxD,IACxCiK,qBAAsB4nD,IAAuB1nD,EAAAA,EAAAA,GAAkBynD,IAC/D7nD,aAAc+nD,EAAoB7nD,qBAAsB8nD,IAAqB5nD,EAAAA,EAAAA,IAClFmnD,IAAY1lB,OAAmBhqC,GAAW,GAU7C,OACE,0BACED,UAAWuvD,GAAG,KACdrvD,QAVJ,WACE,IAAKiP,EAAa5K,QAAS,OAC3B,MAAM,EAAE+K,EAAF,EAAKC,GAAMJ,EAAa5K,QAAQG,wBAEtCgrD,EAAex6B,EAASA,SAAU5lB,EAAGC,IAOnC/J,IAAK2J,EACLkhD,aAAcV,EAAUG,OAAW7vD,GAElCkwD,GACC,0BACEnwD,UAAWuvD,GACT,SACAI,EAAU,CAACS,QAAoBnwD,GAEjC/C,MAAQ,2BAAyC,GAAhBuyD,SAGpCQ,GACC,mBAAC94B,GAAA,EAAD,CACE36B,GAAK,UAAS04B,EAASA,WACvBl1B,UAAWuvD,GAAG,WAAY,CAACW,IAC3B94B,cAAe/4B,EACfg5B,KAAMw4B,EACNr4B,QAAM,EACN13B,KAxDY,GAyDZ23B,OAAQu4B,EACR7lD,QAAS4lD,QCnDbR,IAAKC,EAAAA,EAAAA,GAAuB,oBAsDlC,IAAe1xD,EAAAA,EAAAA,KApDwB,IAMjC,IANkC,mBACtC6qD,EADsC,iBAEtC2H,EAFsC,eAGtCZ,EAHsC,UAItCjL,EAJsC,QAKtCkL,GACI,EAEJ,MAAMY,GAAiBxsD,EAAAA,EAAAA,IAAuB,OACvCysD,EAA2BC,IAA0B9rC,EAAAA,GAAAA,IAAQ,IACpEmV,EAAAA,GAAAA,GAAoBy2B,EAAehsD,SAAUisD,IAE7CrpD,EAAAA,EAAAA,KAAgB,KACdspD,MACC,CAACA,IAEJ,MAAMC,EAAetuD,IACdmuD,IACU,WAAYnuD,EAAIA,EAAE8V,OAASu2C,GAAUrsD,KAGlDA,EAAEqH,kBAIN,IAAMg7C,GAAc6L,MAAAA,GAAAA,EAAkB5yD,SAAYirD,EAElD,OACE,0BAAK3oD,UAAWuvD,GAAG,KAAMoB,eAAgBD,EAAaE,YAAaF,GACjE,0BAAK1wD,UAAWuvD,GAAG,gBACnB,0BAAKvvD,UAAWuvD,GAAG,kBACnB,0BAAKvvD,UAAWuvD,GAAG,kBACjB,0BAAKvvD,UAAWuvD,GAAG,QAAS,CAAC,iBAAkB/pD,IAAK+qD,GACjD5H,MAAAA,OADH,EACGA,EAAoB1lC,KAAI,CAACiS,EAAUhS,KAClC,IAAIgS,EAAS4zB,aACNrE,GAAe6L,GAAqBA,EAAiB7zD,SAASy4B,EAASA,WAC9E,OACE,mBAAC,GAAD,CACE1rB,IAAK0rB,EAASA,SACdu6B,aAAcvsC,EACdysC,QAASA,EACTD,eAAgBA,EAChBx6B,SAAUA,aCoN1B,IAAep3B,EAAAA,EAAAA,KA3M0B,IA+CnC,gBA/CoC,mBACxC6qD,EADwC,OAExChpD,EAFwC,QAGxCvC,EAHwC,UAIxCqnD,EAJwC,iBAKxC6L,EALwC,OAMxCO,EANwC,WAOxCC,EAPwC,cAQxCC,EARwC,SASxCC,EATwC,QAUxCC,EAVwC,OAWxCC,EAXwC,SAYxCC,EAZwC,UAaxC3/B,EAbwC,UAcxCC,EAdwC,WAexC2/B,EAfwC,eAgBxCC,EAhBwC,iBAiBxCC,EAjBwC,QAkBxCC,EAlBwC,YAmBxCC,EAnBwC,UAoBxCC,EApBwC,YAqBxC9/B,EArBwC,cAsBxC1zB,EAtBwC,cAuBxCyzD,EAvBwC,sBAwBxCC,EAxBwC,kBAyBxCC,EAzBwC,oBA0BxCC,EA1BwC,kBA2BxCC,EA3BwC,QA4BxCC,EA5BwC,OA6BxCC,EA7BwC,MA8BxCC,EA9BwC,QA+BxC9hC,EA/BwC,UAgCxCxxB,EAhCwC,SAiCxCo0B,EAjCwC,SAkCxCm/B,EAlCwC,cAmCxCC,EAnCwC,gBAoCxCC,EApCwC,SAqCxC16B,EArCwC,OAsCxC26B,EAtCwC,aAuCxCC,EAvCwC,QAwCxChsD,EAxCwC,oBAyCxCsb,EAzCwC,WA0CxC2wC,EA1CwC,WA2CxCC,GA3CwC,aA4CxCC,GA5CwC,eA6CxCC,GA7CwC,eA8CxChD,IACI,EAEJ,MAAMiD,IAAU5uD,EAAAA,EAAAA,IAAuB,MAEjC6uD,IAAgB7uD,EAAAA,EAAAA,IAAuB,MACvC8uD,GJ5GD,SACLz1D,EAAqB01D,EAA0BP,GAE/C,MAAMlhC,EAAwB,GACxBpwB,GAAO8xD,EAAAA,EAAAA,IAAe31D,GACtBsO,GAAQC,EAAAA,EAAAA,IAAgBvO,MACvB4O,EAAAA,EAAAA,IAAuB5O,QAA6C6C,GAAlC6L,EAAAA,EAAAA,IAAuB1O,IAC1DmzC,GAAYpxC,EAAAA,EAAAA,IAAoB/B,EAAS,UACzC41D,EAAmBtnD,IAAU6kC,IAAa0iB,EAAAA,EAAAA,IAAuB71D,KAAa81D,GAAAA,GAC9EC,EAAYpxD,OAAOqxD,eAgBzB,GAdIJ,GACF3hC,EAAQnF,KAAK,CACXiF,MAAO,yBACP6xB,QAAS,KACPqQ,QAAQC,QAAQ/iB,EAAYgjB,GAAAA,GAAkBhjB,EAAWxjC,EAAAA,GAAAA,SAA0BrB,EAAO2B,SACvF0pB,KAAKy8B,GAAAA,IAEJV,GACFA,OAMJ7xD,EAAM,OAER,MAAMwsD,EAAevmD,SACnBisD,MAAAA,GAAA,UAAAA,EAAWM,kBAAX,eAAuBC,aACnBP,EAAUM,WAAWC,WAA2Bn3D,QAAQ,4BACD,KAAxD42D,EAAUt7C,WAAW+U,QAAQ,kBAAmB,KAGrDyE,EAAQnF,KAAK,CACXiF,MAAOq8B,GAAaC,GACpBzK,QAAS,KACP,MAAM2Q,EAAgBlG,GAAgB0F,EAAYA,EAAUt7C,YAAa+7C,EAAAA,EAAAA,IAA2Bx2D,IACpGy2D,EAAAA,GAAAA,IAAoBF,GAEhBb,GACFA,OAmBR,OAbIP,GACFlhC,EAAQnF,KAAK,CACXiF,MAAO,gCACP6xB,QAAS,KACPuP,IAEIO,GACFA,OAMDzhC,EIiDayiC,CAAsB12D,EAASkJ,EAASkrD,EAAce,OAAatyD,GACjF8zD,KAAetP,GAAc6L,MAAAA,GAAAA,EAAkB5yD,QAC/Cs2D,GAAgBnC,IAAwBkC,IAEvCpE,GAASsE,GAAaC,KAAiBvvC,EAAAA,GAAAA,KAExCwvC,IAAoB90D,EAAAA,EAAAA,KAAY,IAC7BrE,SAASe,cAAe,kEAAiEqB,EAAQZ,SACvG,CAACY,EAAQZ,KAEN43D,IAAiB/0D,EAAAA,EAAAA,KACrB,IAAMrE,SAASe,cAAc,8CAC7B,IAGIs4D,IAAiBh1D,EAAAA,EAAAA,KACrB,IAAMrE,SAASe,cAAc,gCAC7B,IAGIu4D,IAAYj1D,EAAAA,EAAAA,KAAY,KAAM,MAClC,MAAMk1D,EAA0Bn0D,EAAAA,KAAuB,UACjDpF,SAASe,cAA2B,+BADa,aAClD,EAA+Da,eAAiB,EAC/E43D,EAAgBx5D,SAASe,cAA2B,gCACpD04D,GAAuBr0D,EAAAA,KAA4Bm0D,IAClDn0D,EAAAA,KAA2Bo0D,MAAAA,OAA5B,EAA4BA,EAAet5D,UAAUwjB,SAAS,kBAC/D81C,MAAAA,OAFsB,EAEtBA,EAAe53D,eAAiB,EAErC,MAAO,CACL83D,cArFkB,GAsFlBC,gBAAkB35D,SAASe,cAA2B,iBAAmBa,aACzEg4D,YAAaZ,GAtFiB,QAsF6B/zD,EAC3D40D,eAAgBJ,EAAoBF,KAErC,CAACP,KAEEc,IAAuBz1D,EAAAA,EAAAA,KAAY,KACvCqwD,QAAezvD,EAAW,EAAG,KAC5B,CAACyvD,MAEJnuD,EAAAA,EAAAA,KAAU,KACH5B,EAKLuE,YAAW,KACT+vD,OArGqB,KAgGrBC,OAOD,CAACv0D,EAAQs0D,GAAaC,KAEzB,MAAM,UACJ3zD,GADI,UACOw0D,GADP,iBACkBC,GADlB,iBACoCC,GADpC,MACsD/3D,GADtD,UAC6Dg4D,GAD7D,WACwEC,KAC1EC,EAAAA,GAAAA,GAAuBvE,EAAQsD,GAAmBC,GAAgBC,GAAgBC,KAEtF/yD,EAAAA,EAAAA,KAAU,KACR2tD,GAAiBiG,GAAavC,GAAcruD,aAAUtE,EAAW,qBAE1DqvD,KACN,CAAC6F,KAEJ,MAAM71D,IAAOC,EAAAA,EAAAA,KAEb,OACE,mBAAC81D,GAAA,EAAD,CACE7vD,IAAKmtD,GACLhzD,OAAQA,EACRq1D,iBAAkBA,GAClBC,iBAAkBA,GAClB10D,UAAWA,GACXw0D,UAAWA,GACX73D,MAAOA,GACPo4D,YAAaJ,GACbl1D,WAAWmC,EAAAA,EAAAA,GACT,qBAAsB,QAAS6xD,IAAiB,kBAElD1tD,QAASA,EACTsb,oBAAqBA,GAEpBiwC,GACC,mBAAC,GAAD,CACEvB,iBAAkBA,EAClBZ,eAAgBA,GAChBjL,UAAWA,EACXkE,mBAAoBA,EACpBgH,QAASA,KAIb,0BACE3vD,UAAU,mCACV9C,MAAOg4D,GACP1vD,IAAKotD,IAEJhB,GAAqB,mBAACpxD,EAAA,EAAD,CAAUC,KAAK,YAAYP,QAAS40D,IAApC,mBACrBhE,GAAc,mBAACtwD,EAAA,EAAD,CAAUC,KAAK,eAAeP,QAASmyD,GAAS/yD,GAAK,wBACnEyxD,GACC,mBAACvwD,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASoyD,GAAehzD,GAAK,4BAExD0xD,GAAY,mBAACxwD,EAAA,EAAD,CAAUC,KAAK,QAAQP,QAAS6xD,GAAUzyD,GAAK,UAC3D2xD,GAAW,mBAACzwD,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAAS8xD,GAAS1yD,GAAK,SACxD+xD,GACC,mBAAC7wD,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASiyD,GAAgB7yD,GAAK,mBAEzDgyD,GACC,mBAAC9wD,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASkyD,GAAkB9yD,GAAK,iCAE3DiyD,GAAWsB,GAAY5vC,KAAKoO,GAC3B,mBAAC7wB,EAAA,EAAD,CAAUgJ,IAAK6nB,EAAQF,MAAO1wB,KAAK,OAAOP,QAASmxB,EAAQ2xB,SAAU1jD,GAAK+xB,EAAQF,UAEnF+/B,GAAU,mBAAC1wD,EAAA,EAAD,CAAUC,KAAK,MAAMP,QAAS+xD,GAAQ3yD,GAAK,cACrD6xD,GAAY,mBAAC3wD,EAAA,EAAD,CAAUC,KAAK,QAAQP,QAASiwB,GAAU7wB,GAAK,gBAC3DqyB,GACC,mBAACnxB,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASsyD,IAChBlzD,GAAhBrB,EAAqB,8BAAsC,uBAG/DmzD,GAAc,mBAAC5wD,EAAA,EAAD,CAAUC,KAAK,UAAUP,QAASvB,GAAYW,GAAK,YACjEmyD,GAAa,mBAACjxD,EAAA,EAAD,CAAUC,KAAK,SAASP,QAASw3B,GAAWp4B,GAAK,kBAC9DmyB,GAAa,mBAACjxB,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAASgyD,GAAW5yD,GAAK,4BAC3DoyD,GAAiBC,IACjB,mBAACnxD,EAAA,EAAD,CACEC,KAAMkxD,EAAwB,YAAc,QAC5CzxD,QAASyxD,EAAwBe,GAAiBD,GAClD94C,WAAWg4C,GAAyB,UAACv0D,EAAQq2B,qBAAT,OAAC,EAAuB/1B,SAE3Di0D,GAAqB,UAAIv0D,EAAQ62B,gBAAZ,OAAI,EAAkBS,MAC1Cg9B,GAAa,UAAIt0D,EAAQq2B,qBAAZ,OAAI,EAAuB/1B,OACpC4B,GAAK,yCAA0C,CAAClC,EAAQ62B,SAASS,MAAOt3B,EAAQq2B,cAAc/1B,SAC9F4B,GAAK,4BAA6BlC,EAAQ62B,SAASS,MAAO,KAE9D,UAAAt3B,EAAQq2B,qBAAR,SAAuB/1B,OACnB4B,GAAK,+BAAgClC,EAAQq2B,cAAc/1B,OAAQ,KACnE4B,GAAK,mCAEX,0BAAKU,UAAU,WACZ8xD,MAAAA,OADH,EACGA,EAAmB7uC,KAAKlK,GACvB,mBAACD,GAAA,EAAD,CACEhZ,KAAK,QACLiZ,KAAMA,QAMfyY,GAAa,mBAAChxB,EAAA,EAAD,CAAU8yB,aAAW,EAAC7yB,KAAK,SAASP,QAAS6yB,GAAWzzB,GAAK,gBC/O7Ei2D,GAAa,EAAI3zD,EAAAA,GAqXvB,IAAe9D,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAsD,cAA7C,QAAEZ,EAAF,gBAAWm0B,GAAkC,EACpD,MAAM,SAAE7mB,IAAayjB,EAAAA,EAAAA,IAAyBnwB,IAAW,GACnDigC,GAAkBu3B,EAAAA,EAAAA,IAAwBx3D,EAAQZ,EAAQqN,QAC1DuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQZ,EAAQqN,SAClC,gBAAEgrD,EAAF,qBAAmBC,GAAyB13D,EAAO6zC,WAAa,IAChE,UACJ8jB,EADI,SAEJ3E,EAFI,OAGJE,EAHI,SAIJC,EAJI,UAKJ3/B,EALI,UAMJC,EANI,QAOJw/B,EAPI,WAQJG,EARI,eASJC,EATI,iBAUJC,EAVI,QAWJC,EAXI,YAYJC,EAZI,UAaJC,EAbI,YAcJ9/B,GACGjnB,IAAY2jB,EAAAA,EAAAA,IAA4BrwB,EAAQZ,EAASsN,IAAc,GACtEotB,EAA+B,WAApBvG,EACXqkC,EAAkC,cAApBrkC,EACdxK,EAAY/N,IAAQwW,EAAAA,EAAAA,IAAcxW,GAClC68C,GAAUC,EAAAA,EAAAA,IAAe14D,GACzBs0D,EAAgBxqD,QAAQ8R,GACzB08C,GACAD,IACApN,EAAAA,EAAAA,IAAYrvC,KACZ+8C,EAAAA,EAAAA,IAAa34D,KACZw4D,GACD58C,EAAKwoC,cACLxoC,EAAKwoC,aAAekU,GACpBt4D,EAAQ+b,KAAO5H,KAAKC,MAAQ,IAAOikD,GAClChR,EAAYzrC,IAAQX,EAAAA,EAAAA,IAASW,EAAKxc,IAClCw5D,GAAWC,EAAAA,EAAAA,IAAgB74D,GAC3Bu0D,GAAyBkE,IAAY9uC,IAAc6uC,IAAgBI,IAAavR,GAAarnD,EAAQ42B,aACrGkiC,EAAAA,EAAAA,IAAkB94D,EAAQ42B,YAAc52B,EAAQ42B,UAAUmiC,WAC1DvE,EAAoBnN,IAAS,UAAIrnD,EAAQ42B,iBAAZ,iBAAI,EAAmBW,eAAvB,aAAI,EAA4ByhC,MAAMnhC,GAAMA,EAAEohC,YAC3El4D,GAAcC,EAAAA,EAAAA,IAAyBJ,EAAQZ,GAErD,MAAO,CACLurD,mBAAoB3qD,EAAO2qD,mBAC3BgN,UAAAA,EACA7E,WAAY8E,EACZ7E,cAAe6E,EACf5E,UAAWl5B,IAAa89B,GAAe5E,EACvCE,QAAS0E,GAAe1E,EACxBC,UAAWyE,GAAezE,EAC1B3/B,UAAAA,EACAC,UAAAA,EACAw/B,SAAUn5B,GAAYm5B,EACtBG,YAAajzD,IAAgBy3D,GAAexE,EAC5CC,gBAAiBuE,GAAevE,EAChCC,kBAAmBsE,GAAetE,EAClCC,SAAUpzD,GAAeozD,EACzBC,aAAcrzD,IAAgBy3D,GAAepE,EAC7CC,UAAAA,EACA9/B,aAAcxzB,GAAewzB,EAC7BsM,gBAAAA,EACAyzB,cAAAA,EACApB,iBAAkBt3C,MAAAA,GAAF,UAAEA,EAAMwsB,gBAAR,aAAE,EAAgB8qB,iBAClC7L,UAAAA,EACA6R,YAAapvD,QAAQ8R,MAAAA,OAAD,EAACA,EAAMwsB,UAC3BmsB,sBAAAA,EACAE,qBAAsBgE,IAAYG,IAAaJ,IAAe58C,MAAAA,OAAA,EAAAA,EAAMxc,MAAO+5D,EAAAA,GAC3E3E,kBAAAA,KAnEc7zD,EA5UoC,IAkClD,UAlCmD,mBACvD4qD,EADuD,OAEvDhpD,EAFuD,gBAGvD4xB,EAHuD,aAIvDilC,EAJuD,QAKvDp5D,EALuD,MAMvDyxB,EANuD,OAOvDgiC,EAPuD,QAQvDvqD,EARuD,oBASvDsb,EATuD,UAUvD+zC,EAVuD,WAWvD7E,EAXuD,YAYvDwF,EAZuD,cAavDvF,EAbuD,SAcvDC,EAduD,OAevDE,EAfuD,SAgBvDC,EAhBuD,UAiBvD3/B,EAjBuD,UAkBvDC,EAlBuD,sBAmBvDkgC,EAnBuD,oBAoBvDE,EApBuD,kBAqBvDD,EArBuD,QAsBvDX,EAtBuD,iBAuBvDX,EAvBuD,UAwBvD7L,EAxBuD,WAyBvD2M,EAzBuD,eA0BvDC,EA1BuD,iBA2BvDC,EA3BuD,QA4BvDC,EA5BuD,YA6BvDC,EA7BuD,UA8BvDC,EA9BuD,YA+BvD9/B,EA/BuD,gBAgCvDsM,EAhCuD,cAiCvDyzB,GACI,EACJ,MAAM,gBACJ+E,EADI,aAEJC,EAFI,WAGJ9mC,EAHI,gBAIJ7U,EAJI,YAKJ47C,EALI,cAMJC,EANI,uBAOJC,EAPI,sBAQJC,EARI,kBASJC,EATI,qBAUJl4D,EAVI,2BAWJC,EAXI,WAYJk4D,EAZI,gBAaJC,EAbI,aAcJC,EAdI,qBAeJC,GAfI,aAgBJC,GAhBI,aAiBJljC,KACEn1B,EAAAA,EAAAA,OAEE,qBAAEuJ,KAAyBE,EAAAA,EAAAA,GAAkB7I,EAAQiiB,OAAqB3hB,GAAW,IACpFo3D,GAAYC,KAAiBh2D,EAAAA,EAAAA,KAAS,IACtCixB,GAAmBglC,KAAwBj2D,EAAAA,EAAAA,KAAS,IACpDoxB,GAAmB8kC,KAAwBl2D,EAAAA,EAAAA,KAAS,IACpDm2D,GAAgBC,KAAqBp2D,EAAAA,EAAAA,KAAS,IAC9Cq2D,GAAgBC,GAAcC,KAAiBlzC,EAAAA,GAAAA,MAEtDpjB,EAAAA,EAAAA,KAAU,KACJmwD,GAAiB/xD,GACnBq3D,EAAW,CAAEvsD,OAAQrN,EAAQqN,OAAQE,UAAWvN,EAAQZ,OAEzD,CAACw6D,EAAYr3D,EAAQvC,EAAQqN,OAAQrN,EAAQZ,GAAIk1D,KAEpDnwD,EAAAA,EAAAA,KAAU,KACJowD,GAAyBhyD,GAC3Bu0B,GAAa,CAAEzpB,OAAQrN,EAAQqN,OAAQE,UAAWvN,EAAQZ,OAE3D,CAACm1D,EAAuBhyD,EAAQu0B,GAAc92B,EAAQqN,OAAQrN,EAAQZ,MAEzE+E,EAAAA,EAAAA,KAAU,KACH+0D,GAAgB7R,IAAa9kD,GAChCy3D,GAAa,CAAE3sD,OAAQrN,EAAQqN,WAEhC,CAAC6rD,EAAa32D,EAAQ8kD,EAAW2S,GAAch6D,EAAQqN,SAE1D,MAAMqnD,IAAoBryD,EAAAA,EAAAA,KAAQ,KAAM,UACtC,aAAIrC,EAAQ42B,iBAAZ,iBAAI,EAAmB8jC,uBAAvB,OAAI,EAAoCp6D,OAAQ,SAE9C,MAAMwnB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAEpC,iBAAOtmB,EAAQ42B,iBAAf,iBAAO,EAAmB8jC,uBAA1B,aAAO,EAAoCp3B,MAAM,EAAG,GAAGzd,KAAI,QAAC,OAAEK,GAAH,SAAgB4B,EAAU5B,MAAS/B,OAAOra,SAGvG,IAAK9J,EAAQq2B,cACX,OAIF,MAAMvO,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KACpC,iBAAOtmB,EAAQq2B,qBAAf,aAAO,EAAuBiN,MAAM,EAAG,GAAGzd,KAAKzmB,GAAO0oB,EAAU1oB,KAAK+kB,OAAOra,WAC3E,WAAC9J,EAAQ42B,iBAAT,aAAC,EAAmB8jC,gBAAiB16D,EAAQq2B,gBAE1Cx1B,GAAgB4wB,EAAQA,EAAMI,SAASmnC,MAAM2B,GAAQ95B,EAAgBxhC,SAASs7D,EAAIv7D,MACpFyhC,EAAgBxhC,SAASW,EAAQZ,IAE/Bq8B,IAAex5B,EAAAA,EAAAA,KAAY,KAC/Bi4D,IAAc,GACdC,IAAqB,KACpB,IAEGzmC,IAAezxB,EAAAA,EAAAA,KAAY,KAC/Bi4D,IAAc,GACdE,IAAqB,KACpB,IAEGQ,IAAY34D,EAAAA,EAAAA,KAAY,KAC5Bi4D,IAAc,GACdhxD,MACC,CAACA,IAEEmsB,IAAmBpzB,EAAAA,EAAAA,KAAY,KACnCk4D,IAAqB,GACrBjxD,MACC,CAACA,IAEEssB,IAAmBvzB,EAAAA,EAAAA,KAAY,KACnCm4D,IAAqB,GACrBlxD,MACC,CAACA,IAEE2xD,IAAgB54D,EAAAA,EAAAA,KAAY,KAChCq4D,IAAkB,GAClBpxD,MACC,CAACA,IAEE4xD,IAAsB74D,EAAAA,EAAAA,KAAY,KACtCw4D,KACAvxD,MACC,CAACuxD,GAAevxD,IAEb6xD,IAAc94D,EAAAA,EAAAA,KAAY,KAC9Bo3D,EAAgB,CAAE9rD,UAAWvN,EAAQZ,KACrCw7D,OACC,CAACvB,EAAiBr5D,EAAQZ,GAAIw7D,KAE3BI,IAAa/4D,EAAAA,EAAAA,KAAY,KAC7Bq3D,EAAa,CAAE/rD,UAAWvN,EAAQZ,KAClCw7D,OACC,CAACtB,EAAct5D,EAAQZ,GAAIw7D,KAExBK,IAAYh5D,EAAAA,EAAAA,KAAY,KAC5Bi4D,IAAc,GACdI,IAAkB,KACjB,IAEGY,IAAcj5D,EAAAA,EAAAA,KAAY,KAC9BuwB,EAAW,CAAEjlB,UAAWvN,EAAQZ,GAAIszB,SAAS,IAC7CkoC,OACC,CAACpoC,EAAYxyB,EAAQZ,GAAIw7D,KAEtB53C,IAAgB/gB,EAAAA,EAAAA,KAAY,KAEhC,GADA24D,KACInpC,MAAAA,GAAAA,EAAOI,SAAU,CACnB,MAAMhU,EAAa4T,EAAMI,SAAShM,KAAI,QAAC,GAAEzmB,GAAH,SAAYA,KAClDue,EAAgB,CAAEsF,WAAYjjB,EAAQqN,OAAQwQ,WAAAA,SAE9CF,EAAgB,CAAEsF,WAAYjjB,EAAQqN,OAAQwQ,WAAY,CAAC7d,EAAQZ,QAEpE,CAACue,EAAiB3d,EAAS46D,GAAWnpC,IAEnC0pC,IAAoBl5D,EAAAA,EAAAA,KAAY,KACpC24D,KACArB,EAAY,CAAEvlB,QAASh0C,EAAQiU,QAAQ+/B,YACtC,CAAC4mB,GAAW56D,EAAQiU,QAAQ+/B,QAASulB,IAElC6B,IAAsBn5D,EAAAA,EAAAA,KAAY,KACtC24D,KACApB,EAAc,CAAExlB,QAASh0C,EAAQiU,QAAQ+/B,YACxC,CAAC4mB,GAAW56D,EAAQiU,QAAQ+/B,QAASwlB,IAElC6B,IAAsBp5D,EAAAA,EAAAA,KAAY,KACtC,MAAMq5D,EAAS7pC,MAAAA,GAAAA,EAAOI,SAClB,CACAtkB,UAAWvN,EAAQZ,GACnBm8D,gBAAiB9pC,EAAMI,SAAShM,KAAI,QAAC,GAAEzmB,GAAH,SAAYA,KAChDo8D,WAAW,GAEX,CAAEjuD,UAAWvN,EAAQZ,GAAIo8D,WAAW,GAExC/B,EAAuB6B,GACvBV,OACC,CAACA,GAAW56D,EAAQZ,GAAIq6D,EAAwBhoC,IAE7CgqC,IAA6Bx5D,EAAAA,EAAAA,KAAY,KAC7Cy3D,EAAsB,CAAErsD,OAAQrN,EAAQqN,OAAQjO,GAAIY,EAAQZ,KAC5Dw7D,OACC,CAACA,GAAW56D,EAAQqN,OAAQrN,EAAQZ,GAAIs6D,IAErCgC,IAAqBz5D,EAAAA,EAAAA,KAAY,KACrCi4D,IAAc,GACdM,OACC,CAACA,KAEEmB,IAAwB15D,EAAAA,EAAAA,KAAY,KACxC24D,KACAf,EAAgB,CAAExsD,OAAQrN,EAAQqN,OAAQE,UAAWvN,EAAQZ,OAC5D,CAACw7D,GAAW56D,EAAQqN,OAAQrN,EAAQZ,GAAIy6D,IAErC+B,IAA6B35D,EAAAA,EAAAA,KAAY,KAC7C24D,KACAb,GAAqB,CAAE1sD,OAAQrN,EAAQqN,OAAQE,UAAWvN,EAAQZ,OACjE,CAACw7D,GAAWb,GAAsB/5D,EAAQqN,OAAQrN,EAAQZ,KAEvDy8D,IAA0B55D,EAAAA,EAAAA,KAAa8Z,IAC3C49C,EAAkB,CAChBtsD,OAAQrN,EAAQqN,OAChBE,UAAWvN,EAAQZ,GACnB08D,YAAax4D,KAAKb,MAAMsZ,EAAKkS,UAAY,SAE1C,CAACjuB,EAAQqN,OAAQrN,EAAQZ,GAAIu6D,IAE1BoC,IAAiB95D,EAAAA,EAAAA,KAAY,MACjCw0D,EAAAA,GAAAA,IAAqB,gBAAe2C,GAAiB,KAAIp5D,EAAQqN,OAAOmiB,QAAQ,IAAK,SAASxvB,EAAQZ,MACtGw7D,OACC,CAACxB,EAAcwB,GAAW56D,EAAQqN,OAAQrN,EAAQZ,KAE/C4C,IAAsBC,EAAAA,EAAAA,KAAY,OACrCwvB,MAAAA,OAAA,EAAAA,EAAOI,WAAY,CAAC7xB,IAAUyyC,SAASkoB,IAClC95D,GACFa,EAA2B,CAAE1B,QAAS26D,IAEtCl5D,EAAqB,CAAEzB,QAAS26D,OAGpCC,OACC,CAACnpC,EAAOzxB,EAAS46D,GAAW/5D,GAAea,EAA4BD,IAEpEu6D,IAAqB/5D,EAAAA,EAAAA,KAAY,CAAC61B,EAA8B5lB,EAAWC,KAC/E2nD,EAAa,CACXzsD,OAAQrN,EAAQqN,OAAQE,UAAWvN,EAAQZ,GAAI04B,SAAAA,EAAU5lB,EAAAA,EAAGC,EAAAA,EAAG0nB,UAAWs+B,KAE5EyC,OACC,CAACA,GAAW56D,EAAQqN,OAAQrN,EAAQZ,GAAI06D,IAErCmC,IAAmB55D,EAAAA,EAAAA,KAAQ,KAAOovB,EAAQA,EAAMI,SAAW,CAAC7xB,IAAU6lB,KAAI,QAAC,GAAEzmB,GAAH,SAAYA,MAAK,CAACqyB,EAAOzxB,IAEzG,GAAIu4D,EAGF,YAFAqC,KAKF,MAAMsB,GAAmB,IAAI/nD,KAG7B,OAFA+nD,GAAiBxtC,YAAYwtC,GAAiB5uC,cAAgB,GAG5D,0BAAK1qB,WAAWmC,EAAAA,EAAAA,GAAe,uBAAwBmG,KACrD,mBAAC,GAAD,CACEqgD,mBAAoBA,EACpBvrD,QAASA,EACTqnD,UAAWA,EACX9kD,OAAQ03D,GACR/G,iBAAkBA,EAClBO,OAAQA,EACRc,sBAAuBA,EACvBE,oBAAqBA,EACrBD,kBAAmBA,EACnBd,WAAYA,EACZC,cAAeA,EACfC,SAAUA,EACVx/B,UAAWA,EACXC,UAAWA,EACXy/B,OAAQA,EACRC,SAAUA,EACVF,QAASA,EACTG,WAAYA,EACZC,eAAgBA,EAChBC,iBAAkBA,EAClBC,QAASA,EACTC,YAAaA,EACbC,UAAWA,EACX9/B,YAAaA,EACb+/B,cAAeA,EACfzzD,cAAeA,GACf6zD,kBAAmBA,GACnBC,QAASoG,GACTnG,OAAQoG,GACRnG,MAAOoG,GACPloC,QAASmoC,GACT35D,UAAWyhB,GACX2S,SAAU8F,GACVq5B,SAAUphC,GACVqhC,cAAeoG,GACfnG,gBAAiBoG,GACjB9gC,SAAU+gC,GACVpG,OAAQwG,GACRvG,aAAcwG,GACdxyD,QAAS0xD,GACTzF,WAAY4G,GACZ3G,WAAYpzD,GACZqzD,aAAcsG,GACdrJ,eAAgB0J,GAChB1G,eAAgBsG,KAElB,mBAAC,GAAD,CACEr5D,OAAQ4yB,GACRrE,WAAgC,cAApBqD,EACZjrB,QAASmsB,GACT5D,MAAOA,EACPzxB,QAASA,IAEX,mBAAC,GAAD,CACEuC,OAAQ+yB,GACRpsB,QAASssB,GACT3X,WAAYo+C,KAEd,mBAAC,GAAD,CACE15D,OAAQ83D,GACR9sD,UAAWvN,EAAQZ,GACnBiO,OAAQrN,EAAQqN,OAChBnE,QAAS2xD,KAEVlH,GACC,mBAAC,GAAD,CACEpxD,OAAQg4D,GACR/tC,gBAAc,EACdL,WAA2B,IAAfnsB,EAAQ+b,KACpBsQ,OAAO8vC,EAAAA,EAAAA,IAAcD,IACrB5vC,cAAY,EACZpjB,QAAS4xD,GACTnuC,SAAUkvC,UCxQpB,IAAen7D,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA8D,IAArD,YAAEw1C,EAAF,oBAAegmB,GAAsC,EAC5D,MAAMC,GAAqBtrC,EAAAA,EAAAA,IAAyBnwB,IAC9C,OAAEyM,EAAF,SAAUC,GAAa+uD,GAAsB,GAC7CzgD,EAAOvO,IAAUS,EAAAA,EAAAA,IAAWlN,EAAQyM,GACpCivD,EAAc1gD,GAAO2gD,EAAAA,EAAAA,IAA4B3gD,QAAQ/Y,EAK/D,MAAO,CACL25D,gBALsB1yD,QACtB8R,GAAQtO,IAAYsa,EAAAA,EAAAA,IAAiBhM,EAAMtO,KAAagvD,MAAAA,OAAxD,EAAwDA,EAAaE,kBAKrExpB,WAAYoD,GACRqmB,EAAAA,EAAAA,IAAiB77D,EAAQw1C,EAAYsmB,cACrCN,GACEO,EAAAA,EAAAA,IAA4B/7D,EAAQw7D,QACpCv5D,KAhBQlC,EAlG+B,IAO7C,IAP8C,OAClD4B,EADkD,YAElD6zC,EAFkD,oBAGlDgmB,EAHkD,WAIlDppB,EAJkD,gBAKlDwpB,EALkD,QAMlDtzD,GACI,EACJ,MAAM,aACJ0zD,EADI,iBAEJC,EAFI,YAGJ9zC,IACEpnB,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,MACtCzE,GAAOC,EAAAA,EAAAA,MAGXi/B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAASxvB,EAAcyvB,WAtBzB,IAsB4Ds7B,YAAav6D,KAErG4B,EAAAA,EAAAA,KAAU,KACR,GAAI5B,EACF,GAAI6zC,EAAa,CACf,MAAM,aAAEsmB,EAAF,qBAAgBK,GAAyB3mB,EAC/CwmB,EAAa,CACXF,aAAAA,EACAK,qBAAAA,SAEOX,GACTQ,EAAa,CACXR,oBAAAA,MAIL,CAAC75D,EAAQ6zC,EAAawmB,EAAcR,IAEvC,MAAMrjB,GAAe92C,EAAAA,EAAAA,KAAa+xC,IAChCA,EAAU,IACLA,EACHgpB,qBAAqB,GAGvBj0C,EAAY,CAAEirB,QAAAA,IACd9qC,MACC,CAACA,EAAS6f,IAEPk0C,GAAoBh7D,EAAAA,EAAAA,KAAY,KAChC+wC,IACF6pB,EAAiB,CAAEH,aAAc1pB,EAAW5zC,KAC5C8J,OAED,CAACA,EAAS8pC,EAAY6pB,IAEzB,OACE,mBAACx3C,GAAA,EAAD,CACEziB,UAAU,kBACVL,OAAQA,EACR2G,QAASA,EACTg0D,gBAAc,EACd1zC,MAAOwpB,GAAan3B,EAAAA,GAAAA,GAAWm3B,EAAWxpB,MAAO,CAAC,QAAS,UAAYtnB,EAAK,uBAE3E8wC,MAAAA,GAAAA,EAAYW,SACX,sCACE,0BAAKvrC,IAAK2J,EAAcnP,UAAU,0BAC/BowC,EAAWW,SAAS9tB,KAAKmuB,GACxB,mBAACD,GAAA,EAAD,CACEC,QAASA,EACTtxC,KAAMy6D,EAAAA,GACNj7B,oBAAqBA,EACrBp/B,QAAS05D,EAAkBzjB,OAAel2C,EAC1C49B,SAAUuT,OAIhB,0BAAKpxC,UAAU,kBACb,mBAACJ,EAAA,EAAD,CACEE,KAAK,UACLgrC,OAAK,EACL/qC,MAAOqwC,EAAWmD,cAAgB,SAAW,UAC7CrzC,QAASm6D,GAER/6D,EACC8wC,EAAWmD,cAAgB,iCAAmC,8BAC9DnD,EAAW1b,MACX,QAMR,mBAAClR,GAAA,EAAD,W,eCxER,MA2OA,IAAe1lB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAChC,IAAKuO,GAAQA,EAAKwhD,aAChB,MAAO,GAET,MAAM/V,GAAYpsC,EAAAA,EAAAA,IAASW,EAAKxc,IAC1Buc,EAAO0rC,GAAYx5C,EAAAA,EAAAA,IAAWjN,EAAQyM,QAAUxK,EAChDw6D,EAAgB1hD,IAAQ2hD,EAAAA,EAAAA,IAAiB3hD,GAE/C,MAAO,CACLC,KAAAA,EACAgf,SAASC,EAAAA,EAAAA,IAAkBjf,GAAMkf,EAAAA,EAAAA,IAAqBl6B,IAASm6B,EAAAA,EAAAA,IAAuBn6B,IACtFymD,UAAAA,EACAgW,cAAAA,EACAE,eAAeC,EAAAA,EAAAA,IAAiB5hD,GAChC6hD,cAAe3zD,QAAQ8R,MAAAA,GAAD,UAACA,EAAMwsB,gBAAP,aAAC,EAAgBs1B,iBAhBzB/8D,EA3OmC,IAyBjD,IAzBkD,OACtD0M,EADsD,OAEtD9K,EAFsD,iBAGtDo7D,EAHsD,OAItDlK,EAJsD,UAKtD9pC,EALsD,YAMtDi0C,EANsD,cAOtDC,EAPsD,aAQtDC,EARsD,UAStDC,EATsD,QAUtDC,EAVsD,QAWtDC,EAXsD,SAYtDC,EAZsD,kBAatDC,EAbsD,mBActDC,EAdsD,KAetDxiD,EAfsD,UAgBtDyrC,EAhBsD,QAiBtDzsB,EAjBsD,cAkBtD2iC,EAlBsD,cAmBtDE,EAnBsD,cAoBtDJ,EApBsD,mBAqBtDgB,EArBsD,cAsBtDC,EAtBsD,QAuBtDp1D,EAvBsD,oBAwBtDsb,GACI,EACJ,MAAM,qBACJ+5C,EADI,uBAEJC,EAFI,eAGJC,EAHI,WAIJC,EAJI,cAKJC,EALI,gBAMJC,EANI,eAOJC,EAPI,WAQJC,EARI,wBASJC,IACEp9D,EAAAA,EAAAA,OAEGs4D,EAAYC,IAAiBh2D,EAAAA,EAAAA,KAAS,IACtCixB,EAAmBglC,IAAwBj2D,EAAAA,EAAAA,KAAS,IACrD,EAAEgO,EAAF,EAAKC,GAAMshD,GAEjBroD,EAAAA,EAAAA,GAAkB7I,EAAQiiB,OAAqB3hB,GAAW,GAE1D,MAAM44B,GAAex5B,EAAAA,EAAAA,KAAY,KAC/Bi4D,GAAc,GACdC,GAAqB,KACpB,IAEGS,GAAY34D,EAAAA,EAAAA,KAAY,KAC5Bi4D,GAAc,GACdhxD,MACC,CAACA,IAEEmsB,GAAmBpzB,EAAAA,EAAAA,KAAY,KACnCk4D,GAAqB,GACrBjxD,MACC,CAACA,IAEE81D,GAAiB/8D,EAAAA,EAAAA,KAAY,KACjCw8D,EAAe,CAAEQ,QAAS,aACzB,CAACR,IAEES,GAAmBj9D,EAAAA,EAAAA,KAAY,KACnCy8D,EAAW,CAAErxD,OAAAA,MACZ,CAACA,EAAQqxD,IAENS,GAAwBl9D,EAAAA,EAAAA,KAAY,KACxCs8D,EAAqB,CAAElxD,OAAAA,EAAQutB,SAAUA,IACzCggC,MACC,CAACvtD,EAAQutD,EAAWhgC,EAAS2jC,IAE1Ba,GAA4Bn9D,EAAAA,EAAAA,KAAY,KACxCm8D,EAEFQ,EAAgB,CACdvxD,OAAAA,IAGFsxD,EAAc,CACZtxD,OAAAA,IAGJutD,MACC,CAACA,EAAWwD,EAAoB/wD,EAAQsxD,EAAeC,IAEpDS,GAAwBp9D,EAAAA,EAAAA,KAAY,KACxC48D,EAAe,CAAEz/D,GAAIiO,IACrButD,MACC,CAACvtD,EAAQutD,EAAWiE,IAEjBS,IAAwBr9D,EAAAA,EAAAA,KAAY,KACxC68D,EAAW,CAAE54C,OAAQ7Y,IACrButD,MACC,CAACkE,EAAYzxD,EAAQutD,IAElB2E,IAAkBt9D,EAAAA,EAAAA,KAAY,KAClCo8D,IACAzD,MACC,CAACA,EAAWyD,IAETmB,IAAav9D,EAAAA,EAAAA,KAAY,KAC7B88D,IACAnE,MACC,CAACA,EAAWmE,IAETU,IAAex9D,EAAAA,EAAAA,KAAY,KAC/Bq8D,IACA1D,MACC,CAACA,EAAW0D,IAEToB,IAAuBz9D,EAAAA,EAAAA,KAAY,KACvCu8D,IACA5D,MACC,CAACA,EAAW4D,KAEfr6D,EAAAA,EAAAA,KAAU,KACR2tD,KAEOI,KACN,IAEH,MAAMhwD,IAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACw9D,GAAA,EAAD,KACE,0BAAK/8D,UAAU,uBACb,mBAACq1D,GAAA,EAAD,CACE11D,OAAQ03D,EACR92D,UAAU,QACVrD,MAAQ,SAAQoS,YAAYC,OAC5BjJ,QAAS0xD,GAER+C,GAAoBC,GACnB,mBAACx6D,EAAA,EAAD,CACEC,KAAK,OACLP,QAASk8D,GAER98D,GAAK,aAGTy7D,GAAoBE,GACnB,mBAACz6D,EAAA,EAAD,CACEC,KAAK,OACLP,QAASo8D,GAERh9D,GAAK,eAGTy7D,GAAoBG,GACnB,mBAAC16D,EAAA,EAAD,CACEC,KAAMsmB,EAAY,UAAY,QAC9B7mB,QAASy8D,IAERr9D,GAAKynB,EAAY,qBAAuB,qBAG5C0zC,GACC,mBAACj6D,EAAA,EAAD,CACEC,KAAK,WACLP,QAASw8D,IAERp9D,GAAK,eAGTc,EAAAA,IAA2Bg7D,GAC1B,mBAAC56D,EAAA,EAAD,CACEC,KAAK,QACLP,QAAS08D,IAERt9D,GAAK,SAGTc,EAAAA,IAA2B+6D,GAC1B,mBAAC36D,EAAA,EAAD,CACEC,KAAK,SACLP,QAAS28D,IAERv9D,GAAK,WAGT+7D,GACC,mBAAC76D,EAAA,EAAD,CACEC,KAAMu3B,EAAU,SAAW,OAC3B93B,QAASq8D,GAERj9D,GAAK04B,EAAU,cAAgB,eAGlCujC,GAAqBC,IACrB,mBAACh7D,EAAA,EAAD,CACEC,KAAK,aACLP,QAASs8D,GAERl9D,GAAKk8D,EAAqB,gBAAkB,sBAGhDX,GACC,mBAACr6D,EAAA,EAAD,CACEC,KAAMsmB,EAAY,WAAa,UAC/B7mB,QAASu8D,GAERn9D,GAAKynB,EAAY,iBAAmB,6BAGzC,mBAACvmB,EAAA,EAAD,CACEC,KAAK,SACLP,QAAS48D,IAERx9D,GAAK,yBAEPg8D,GACC,mBAAC96D,EAAA,EAAD,CACE8yB,aAAW,EACX7yB,KAAK,SACLP,QAAS24B,GAERv5B,GAAKmlD,EACF,iBACCkW,EAAgB,0BAA6B5zC,EAAY,eAAiB,sBAIpF/N,GACC,mBAACigB,GAAA,EAAD,CACEt5B,OAAQ4yB,EACRjsB,QAASmsB,EACTzZ,KAAMA,U,eC/PlB,MAAMgkD,IAAwBtrD,EAAAA,EAAAA,KAAUynB,GAAOA,KAAM,KAAK,GAyK1D,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMgb,GAAOuX,EAAAA,EAAAA,IAAkBvyB,GAC/B,IAAKgb,EACH,MAAO,GAGT,MAAM,MAAEyjB,EAAF,QAAS9H,IAAYsoC,EAAAA,EAAAA,IAAwBj/D,IAAW,IACxD,WAAE+/C,EAAF,SAAcpjC,GAAaga,GAAW,GAE5C,MAAO,CACL3b,KAAAA,EACAyjB,MAAAA,EACAshB,WAAAA,EACApjC,SAAAA,EACAuiD,sBAAuBh2D,QAAQlJ,EAAO4vB,8BAfxB7vB,EAvKuB,IAOrC,IAPsC,SAC1CsN,EAD0C,KAE1C2N,EAF0C,MAG1CyjB,EAH0C,WAI1CshB,EAJ0C,SAK1CpjC,EAL0C,sBAM1CuiD,GACI,EACJ,MAAM,wBACJC,EADI,wBAEJC,EAFI,aAGJ5kD,EAHI,qBAIJ6kD,EAJI,oBAKJC,IACEv+D,EAAAA,EAAAA,MAGE0a,GAAW1V,EAAAA,EAAAA,IAAyB,OACnCw5D,EAAcC,IAAmBl8D,EAAAA,EAAAA,IAAS,IAGjDC,EAAAA,EAAAA,KAAU,KACR,MAAM,eAAEk8D,GAAmB17D,OAC3B,IAAK07D,EACH,OAGF,MAAMC,EAAS1iE,SAAS8jB,eAAe,QACjCjd,EAAe,KACnB,MAAM,cAAE+1B,GAAkB58B,SAC1B,GAAI48B,GAAkBA,IAAkBne,EAASlV,QAAU,CACzD,MAAM,QAAEo5D,EAAF,OAAWj8D,GAAW+7D,EAC5BC,EAAOxgE,MAAM0a,UAAa,cAAa+lD,OACvCD,EAAOxgE,MAAMwE,OAAU,GAAEA,MACzB1G,SAAS83C,gBAAgBn2C,UAAYghE,OAErCD,EAAOxgE,MAAM0a,UAAY,GACzB8lD,EAAOxgE,MAAMwE,OAAS,IAM1B,OAFA+7D,EAAez7D,iBAAiB,SAAUH,GAEnC,KACL47D,EAAex7D,oBAAoB,SAAUJ,MAE9C,KAGHN,EAAAA,EAAAA,KAAU,KACJyX,MAAAA,GAAAA,EAAMxc,IAANwc,MAAY2B,GAAAA,EAAUjd,QACxB8a,EAAa,CAAE/N,OAAQuO,EAAKxc,GAAImO,UAAWgQ,EAAS,KACpD6iD,EAAgB,IAEhBA,GAAiB,KAElB,CAACxkD,MAAAA,OAAD,EAACA,EAAMxc,GAAIgc,EAAcmC,KAG5BpZ,EAAAA,EAAAA,KAAU,KACRq8D,MAAM5rD,KAAKhX,SAASwC,iBAAmC,UAAUqyC,SAASguB,IACxEA,EAAMlkD,SAAWzS,QAAQmE,GAAYwyD,IAAUpkD,EAASlV,YAG1Dq5D,MAAM5rD,KAAKhX,SAASwC,iBAAiC,yBAAyBqyC,SAASiuB,IACrFA,EAAIC,gBAAkB1yD,EAAW,QAAU,YAE5C,CAACA,KAGJ9J,EAAAA,EAAAA,KAAU,KACH8J,GACHoO,EAASlV,QAASy5D,SAEnB,CAAC3yD,KAEJlE,EAAAA,EAAAA,KAAgB,KACMnM,SAASe,cAAgC,uBACjDiiE,SACX,CAACd,IAEJ,MAAMe,GAAiC5+D,EAAAA,EAAAA,KAAa6+D,IAClDf,EAAwB,CAAE1gC,MAAOyhC,IAE7BA,EAASxgE,QACXs/D,GAAsBI,KAEvB,CAACA,EAAyBD,IAEvBgB,GAAW9+D,EAAAA,EAAAA,KAAY,KAC3B,GAAI2Z,GAAQ2B,EAAU,CACpB,MAAMyjD,EAAgBb,EAAe,EACrC/kD,EAAa,CAAE/N,OAAQuO,EAAKxc,GAAImO,UAAWgQ,EAASyjD,KACpDZ,EAAgBY,MAEjB,CAACplD,EAAMukD,EAAc/kD,EAAcmC,IAEhC0jD,GAAah/D,EAAAA,EAAAA,KAAY,KAC7B,GAAI2Z,GAAQ2B,EAAU,CACpB,MAAMyjD,EAAgBb,EAAe,EACrC/kD,EAAa,CAAE/N,OAAQuO,EAAKxc,GAAImO,UAAWgQ,EAASyjD,KACpDZ,EAAgBY,MAEjB,CAACplD,EAAMukD,EAAc/kD,EAAcmC,IAEtC,OACE,0BAAKne,GAAG,eAAewD,UAAWqL,EAAW,SAAW,IACtD,0BAAKrL,UAAU,UACb,mBAACJ,EAAA,EAAD,CACEE,KAAK,UACLD,OAAK,EACLE,MAAM,cACNG,QAASm9D,GAET,wBAAGr9D,UAAU,qBAEf,mBAACs+D,GAAA,EAAD,CACE94D,IAAKiU,EACLzJ,MAAOysB,EACP3iB,SAAUmkD,KAGd,0BAAKj+D,UAAU,UACb,0BAAKA,UAAU,WACZy8B,EACC9hB,MAAAA,GAAAA,EAAUjd,OACP,GAAE6/D,EAAe,QAAQxf,IACxBpjC,IAAaA,EAASjd,OACxB,aAEA,GAGF,mBAACkC,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAAS,IAAMo9D,EAAoB,CAAE/zC,YAAYgwC,EAAAA,EAAAA,IAAchoD,KAAKC,SACpErR,UAAU,2BAEV,wBAAGH,UAAU,oBAInB,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAASi+D,EACTxkD,UAAWgB,IAAaA,EAASjd,QAAU6/D,IAAiB5iD,EAASjd,OAAS,GAE9E,wBAAGsC,UAAU,aAEf,mBAACJ,EAAA,EAAD,CACEC,OAAK,EACLC,KAAK,UACLC,MAAM,cACNG,QAASm+D,EACT1kD,UAAWgB,IAAaA,EAASjd,QAA2B,IAAjB6/D,GAE3C,wBAAGv9D,UAAU,qB,qEC/LR,SAASu+D,GACtBriE,EACAsiE,GAKA,IAJAC,EAIA,uDAJS,EACTC,EAGA,wDAFAC,EAEA,wDADAC,EACA,wDACA,MAAMC,EAAa3iE,EAAU0iE,EAAe,aAAe,aACrDE,EAAaD,EAAa3iE,EAAU0iE,EAAe,cAAgB,gBACnEG,EAA4C,iBAAvBP,EACvBtiE,EAAUsB,iBAA8BghE,GACxCA,GACE,OAAE9gE,GAAWqhE,EACbC,EAA2B,GACjC,IAAIC,GAAU,EAEd,IAAK,IAAI/7C,EAAI,EAAGA,EAAIxlB,EAAQwlB,IAAK,CAC/B,MAAMpmB,EAAUiiE,EAAY77C,GACtB3O,EAAKzX,EAAQ8hE,EAAe,aAAe,aAC3CM,EAAK3qD,EAAKzX,EAAQ8hE,EAAe,cAAgB,gBAKvD,GAJkBD,EACdO,GAAML,EAAaJ,GAAUS,GAAMJ,EAAaL,EAChDlqD,GAAMuqD,EAAaL,GAAUS,GAAML,EAAaJ,EAGlDO,EAAe9yC,KAAKhJ,GACpB+7C,GAAU,OACL,GAAIA,IAAYP,EACrB,MAIJ,MAAO,CAAEK,YAAAA,EAAaC,eAAAA,GCzBxB,SARA,SAAwB9iE,EAAwBY,GAA4C,IAAtB8hE,EAAsB,wDAC1F,MAAMC,EAAa3iE,EAAU0iE,EAAe,aAAe,aACrDE,EAAaD,EAAa3iE,EAAU0iE,EAAe,cAAgB,gBACnErqD,EAAKzX,EAAQ8hE,EAAe,aAAe,aAC3CM,EAAK3qD,EAAKzX,EAAQ8hE,EAAe,cAAgB,gBACvD,OAAOrqD,EAAKsqD,GAAcK,EAAKJ,G,cCElB,SAASK,GAAsBC,EAAkB1+C,EAAevR,GAC7E,MAAMjT,EAAYiT,EAAa5K,QAC/B,IAAKrI,GAAawkB,EAAQ,EACxB,OAEF,MAAM,eAAEs+C,EAAF,YAAkBD,GAAgBR,GACtCriE,EACAkjE,EAVoB,GAYpB,GACA,GAGF,IAAKL,EAAYrhE,SAAWqhE,EAAYr+C,GACtC,OAEF,MAAM2+C,EAAQL,EAAe,GAC7B,IAAKA,EAAeviE,SAASikB,IACvBA,IAAU2+C,IAAUC,GAAepjE,EAAW6iE,EAAYM,IAAU,CACxE,MAAM/1D,EAAWoX,EAAQs+C,EAAeA,EAAethE,OAAS,GAAK,QAAU,OAC/E6hE,EAAAA,GAAAA,GAAiBrjE,EAAW6iE,EAAYr+C,GAAQpX,EAtB9B,K,eCDf,SAASk2D,GAAT,GAoBJ,IApBmC,SACpCn0D,EADoC,aAEpCuzD,EAFoC,iCAGpCa,EAHoC,6BAIpCC,EAJoC,kBAKpCC,EALoC,MAMpC/8C,EANoC,kBAOpCg9C,EAPoC,SAQpCloC,EARoC,QASpCpxB,GAWC,EACD,MAAOu5D,EAAmBC,IAAwBx+D,EAAAA,EAAAA,KAAU,GAEtDy+D,GAAmB1gE,EAAAA,EAAAA,KAAa2gE,GAC/Bp9C,GAIEq9C,EAAAA,GAAAA,GAAcr9C,EAAMllB,OAAQsiE,IAHzB,GAIT,CAACp9C,IAEEs9C,GAAiB7gE,EAAAA,EAAAA,KAAY,CAAC2Q,EAAe5N,KACjDA,EAAEqH,iBACFq2D,GAAsBp/C,GAAWq/C,EAAiBr/C,EAAQ1Q,OACzD,CAAC8vD,EAAsBC,IAEpBI,GAAmB9gE,EAAAA,EAAAA,KAAa+C,IACpC,GAAIwgB,GAASA,EAAMllB,QAAUmiE,GAAqB,EAAG,CACnD,MAAMO,EAAOx9C,EAAMi9C,GACfO,IACFh+D,EAAEqH,iBACFiuB,EAAS0oC,OAGZ,CAACx9C,EAAO8U,EAAUmoC,IAEfQ,GAAyBz9C,GAASi9C,EAAoBj9C,EAAMllB,OAAS,EAmB3E,OAlBA6D,EAAAA,EAAAA,KAAU,KACHk+D,IAAoCY,GACvCP,EAAqBJ,GAAgC,EAAI,KAE1D,CAACW,EAAuBX,EAA8BD,KAEzDl+D,EAAAA,EAAAA,KAAU,IAAO8J,GAAWwnB,EAAAA,GAAAA,GAAyB,CACnDG,MAAO1sB,EACPg6D,KAAMX,GAAqBf,OAAe3+D,EAAamC,GAAqB89D,GAAgB,EAAG99D,GAC/Fm+D,OAAQZ,GAAqBf,OAAe3+D,EAAamC,GAAqB89D,EAAe,EAAG99D,GAChGo+D,OAAQb,IAAsBf,OAAe3+D,EAAamC,GAAqB89D,GAAgB,EAAG99D,GAClGq+D,QAASd,IAAsBf,OAAe3+D,EAAamC,GAAqB89D,EAAe,EAAG99D,GAClGs+D,MAAOd,EAAoBO,OAAmBlgE,EAC9CmvB,QAAS+wC,SACNlgE,GAAY,CACf0/D,EAAmBO,EAAgBC,EAAkB90D,EAAUuzD,EAAct4D,EAASs5D,IAGjFC,EC5CT,MAmFA,IAAe/hE,EAAAA,EAAAA,KAnFsB,IAK/B,IALgC,OACpC6B,EADoC,QAEpC2G,EAFoC,iBAGpCq6D,EAHoC,cAIpCC,GACI,EAEJ,MAAMzxD,GAAepL,EAAAA,EAAAA,IAAuB,OACtC,aAAEqE,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB7I,OAAQM,OAAWA,GAAW,GAEzF4gE,GAAmBxhE,EAAAA,EAAAA,KAAY,SAACikB,GAAuC,IAAvBw9C,EAAuB,wDAE3E,MAAM57C,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAC9B3K,EAAOmM,EAAU5B,GAClBvK,GAIL4nD,EAAiB5nD,EAAM+nD,KACtB,CAACH,IAEEI,GAAsB1hE,EAAAA,EAAAA,KAAa2hE,IACvCH,EAAiBG,EAAOxkE,IAAI,KAC3B,CAACqkE,IAEEI,EAAuBzB,GAAsB,CACjDn0D,SAAU1L,EACVijB,MAAOg+C,EACPlpC,SAAUqpC,EACVnB,mBAAmB,EACnBH,kCAAkC,EAClCn5D,QAAAA,KAGF/E,EAAAA,EAAAA,KAAU,KACR49D,GAAsB,uBAAwB8B,EAAsB9xD,KACnE,CAAC8xD,KAEJ1/D,EAAAA,EAAAA,KAAU,KACJq/D,IAAkBA,EAAcljE,QAClC4I,MAED,CAACs6D,EAAet6D,IAEnB,MAAM46D,GAAkB1nD,EAAAA,EAAAA,GACtBonD,MAAAA,GAAAA,EAAeljE,OACXkjE,OACA3gE,EACJmI,GAEI+4D,EAAsBP,IAAkBA,EAAcljE,OACxDwjE,EACAN,EAEJ,IAAKx4D,GAAiB+4D,IAAwBA,EAAoBzjE,OAChE,OAGF,MAAMsC,GAAYmC,EAAAA,EAAAA,GAChB,gDACAmG,GAGF,OACE,0BAAKtI,UAAWA,EAAWwF,IAAK2J,GAC7BgyD,MAAAA,OADH,EACGA,EAAqBl+C,KAAI,CAAC,EAAQvC,KAAT,IAAC,GAAElkB,GAAH,SACxB,mBAAC2mB,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,kCACVE,QAAS,IAAM2gE,EAAiBrkE,GAChC4xC,MAAO6yB,IAAyBvgD,GAEhC,mBAAC0C,GAAA,EAAD,CACEE,OAAQ9mB,EACRw8B,WAAW,QACXT,cAAY,Y,eCpDxB,MA0NA,IAAez6B,EAAAA,EAAAA,KAxNuB,IAgBhC,IAhBiC,OACrC2M,EADqC,SAErCC,EAFqC,YAGrC02D,EAHqC,QAIrCC,EAJqC,QAKrC1R,EALqC,cAMrCvuC,EANqC,iBAOrCkgD,EAPqC,aAQrCC,EARqC,kBASrCC,EATqC,cAUrCC,EAVqC,eAWrCC,EAXqC,gBAYrCC,EAZqC,OAarCtP,EAbqC,aAcrCuP,EAdqC,QAerCC,GACI,EACJ,MAAMC,GAAaC,EAAAA,GAAAA,GAAYV,GACzBW,GAAiBj+D,EAAAA,EAAAA,MACjBk+D,GAAkBzoD,EAAAA,EAAAA,GAAY4nD,GAC9Bc,EAAuBd,EAAY1jE,OAAS0jE,EAAca,EAC1DtiE,EAASuH,QAAQk6D,EAAY1jE,SAC5BykE,EAAWC,EAAaC,IAAiB19C,EAAAA,GAAAA,KAC1C29C,EAAUp7D,QAAQg7D,GAAwBA,EAAqBK,OAAOplC,GAAMA,EAAEqlC,SAC9EljE,GAAOC,EAAAA,EAAAA,MAEP,qBACJkjE,EADI,oBACkBC,EADlB,cACuCC,EADvC,qBACsDC,IACxDC,EAAAA,GAAAA,GACFljE,EACAmiE,EACAH,EACAmB,EAAAA,GACAxB,OACArhE,EACAmhB,IAEI,mBACJ2hD,EADI,kBACgBC,EADhB,eACmCC,EADnC,YACmDC,IACrDC,EAAAA,GAAAA,GACFxjE,EACAmiE,EACAP,EACAuB,EAAAA,GACAnB,EACAH,EACAC,GACC9R,IAGHpuD,EAAAA,EAAAA,KAAU,IAAO5B,GAAS4gB,EAAAA,EAAAA,GAAsBshD,QAAW5hE,GAAY,CAACN,EAAQkiE,IAEhF,MAAMuB,GAAkB/jE,EAAAA,EAAAA,KAAY,KAC9BM,GACF0yD,MAED,CAAC1yD,EAAQ0yD,IAsBNgR,GAAkBhkE,EAAAA,EAAAA,KAAa+C,IACnCA,EAAEqH,iBACF44D,IAEA,MAAQiB,cAAc,MAAEnsB,IAAY/0C,EAEpC,GAAI+0C,MAAAA,GAAAA,EAAOz5C,OAAQ,CACjB,MAAM6lE,EAAWjB,EACb1E,MAAM5rD,KAAKmlC,GAAO51B,QAAQiiD,GACnBA,EAAK3pD,MAAQ4pD,EAAAA,GAAAA,IAA+BD,EAAK3pD,QAExD+jD,MAAM5rD,KAAKmlC,GAEfyqB,EAAa2B,EAAUjB,MAExB,CAACA,EAASV,EAAcS,IAY3B,IAAKH,EACH,OAGF,MAAMwB,EAAexB,EAAqBK,OAAOplC,GAAMwmC,EAAAA,GAAAA,IAAkCxmC,EAAEymC,YACrFC,EAAe3B,EAAqBK,OAAOplC,GAAM2mC,EAAAA,GAAAA,IAAkC3mC,EAAEymC,YACrFG,EAAe7B,EAAqBK,OAAOplC,GAAMA,EAAEymC,SAAShnC,WAAW,YAE7E,IAAIhW,EAAQ,GAkCZ,OAhCEA,EAAQtnB,EADNokE,EACW,0BACJG,EACI,0BACJE,EACI,0BAEA,yBAN2B7B,EAAqBxkE,OAAQ,KAiCrE,mBAAC+kB,GAAA,EAAD,CACE9iB,OAAQA,EACR2G,QAASu7D,EACTn/C,OA3BJ,WACE,GAAKw/C,EAIL,OACE,0BAAKliE,UAAU,yBAAyBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAChE,mBAACL,EAAA,EAAD,CAAQC,OAAK,EAACE,MAAM,cAAcD,KAAK,UAAUK,UAAU,qBAAqBD,QAAS2hE,GACvF,wBAAG7hE,UAAU,gBAEf,0BAAKA,UAAU,eAAe4mB,GAC9B,mBAAChnB,EAAA,EAAD,CACEG,MAAM,UACND,KAAK,UACLE,UAAU,sBACVE,QAASkjE,GAER9jE,EAAK,UAUF0kE,GACRhkE,UAAY,oBAAkBmiE,EAAY,UAAY,KAEtD,0BACEniE,UAAU,cACVikE,YAAa7B,EACb8B,OAAQb,EACRc,WA/DN,SAAwB/hE,GACtBA,EAAEqH,iBACFrH,EAAEC,kBAEE2/D,EAAez9D,UACjBxC,OAAOoC,aAAa69D,EAAez9D,SACnCy9D,EAAez9D,aAAUtE,IA0DvBmkE,YArGmBhiE,IACvB,MAAQiiE,cAAeC,EAAUr7D,OAAQs7D,GAAeniE,EAGnDmiE,EAA8B/mD,QAAQ,kBAAoB8mD,IAC7DtC,EAAez9D,QAAUxC,OAAOmC,WAAWm+D,EAjEnB,MAqEtBkC,GAAeA,EAA2BhoE,QAAQ,8BAIlD+nE,GACFliE,EAAEC,kBAGJggE,MAqFI,0BAAyB/iE,EAAK,4BAA6B,KAE1DgjE,EACC,0BAAKtiE,UAAU,+BACZkiE,EAAqBj/C,KAAKuhD,GACzBA,EAAWZ,SAAShnC,WAAW,UAC3B,0BAAKnhC,IAAK+oE,EAAWn3D,QAASuB,IAAI,KAClC,4BAAOnT,IAAK+oE,EAAWn3D,QAASvD,UAAQ,EAACG,OAAK,EAACD,MAAI,OAI3D,0BAAKhK,UAAU,kCACZkiE,EAAqBj/C,KAAKuhD,GACzB,mBAACC,GAAA,EAAD,CACEtjD,KAAMqjD,EAAWE,SACjBC,WAAWC,EAAAA,GAAAA,IAAiBJ,EAAWE,SAAUF,EAAWZ,UAC5DiB,YAAaL,EAAWv3D,eACxBnN,KAAM0kE,EAAW1kE,KACjBmgC,SAAO,OAMf,0BAAKjgC,UAAU,8BACb,mBAAC,GAAD,CACEL,OAAQ8iE,EACRn8D,QAASo8D,EACT/B,iBAAkBgC,EAClB/B,cAAegC,IAEjB,mBAAC,KAAD,CACEjjE,OAAQojE,EACR+B,OAAQ7B,EACR38D,QAAS08D,EACT+B,cAAe7B,EACfxB,eAAgBA,IAElB,mBAACsD,GAAA,EAAD,CACExoE,GAAG,qBACHiO,OAAQA,EACRC,SAAUA,EACVu6D,wBAAsB,EACtBC,KAAM7D,EACN8D,gBAAiBrC,EAAAA,GACjBvgD,YAAajjB,EAAK,WAClB8S,SAAUuvD,EACVtP,OAAQA,EACR+S,aAAcl+D,QAAQyoD,GAAWyR,EAAY1jE,gB,eCzOzD,MAqUA,IAAeI,EAAAA,EAAAA,KA/TiB,IAAiC,IAAhC,OAAE6B,EAAF,OAAU0yD,EAAV,QAAkBwP,GAAc,EAE/D,MAAMwD,GAAmBthE,EAAAA,EAAAA,IAAyB,MAE5CuhE,GAAiBvhE,EAAAA,EAAAA,IAAuB,MAExCwhE,GAAcxhE,EAAAA,EAAAA,IAAuB,OAEpCyhE,EAAUC,IAAenkE,EAAAA,EAAAA,IAAiB,KAC1C+vB,EAASq0C,IAAcpkE,EAAAA,EAAAA,IAAmB,CAAC,MAC3CqkE,EAAaC,IAAkBtkE,EAAAA,EAAAA,KAAS,IACxCukE,EAAmBC,IAAwBxkE,EAAAA,EAAAA,KAAS,IACpDykE,EAAYC,IAAiB1kE,EAAAA,EAAAA,KAAS,IACtC2kE,EAAUC,IAAe5kE,EAAAA,EAAAA,OACzB6kE,EAAeC,IAAoB9kE,EAAAA,EAAAA,OACnC+kE,EAAWC,IAAgBhlE,EAAAA,EAAAA,KAAkB,GAE9ChC,GAAOC,EAAAA,EAAAA,KAEPgnE,GAAalnE,EAAAA,EAAAA,KAAamG,IAC1B7F,GAAU6F,EAAIjB,SAChBiB,EAAIjB,QAAQ6pC,UAEb,CAACzuC,KAEJ4B,EAAAA,EAAAA,KAAU,IAAO5B,GAAS4gB,EAAAA,EAAAA,GAAsBshD,QAAW5hE,GAAY,CAACN,EAAQkiE,KAChFtgE,EAAAA,EAAAA,KAAU,KACH5B,IACH8lE,EAAY,IACZC,EAAW,CAAC,KACZE,GAAe,GACfE,GAAqB,GACrBE,GAAc,GACdE,EAAY,IACZE,EAAiB,IACjBE,GAAa,MAEd,CAAC3mE,KAEJ4B,EAAAA,EAAAA,KAAU,IAAMglE,EAAWlB,IAAmB,CAACkB,EAAY5mE,KAE3DwH,EAAAA,EAAAA,KAAgB,KACd,MAAMq/D,EAAajB,EAAYhhE,QAE3BiiE,GAAcP,IAAaO,EAAWC,YACxCD,EAAWC,UAAYR,KAExB,CAACA,IAEJ,MAAMS,GAAernE,EAAAA,EAAAA,KAAY,WAA+B,IAA9BsnE,EAA8B,uDAAP,GACvDjB,EAAW,IAAIiB,EAAY,KAC3BnoD,uBAAsB,KACpB,MAAMooD,EAAOtB,EAAe/gE,QACvBqiE,IAILA,EAAK1rE,UAAU8gB,OAAO,YAAa4qD,EAAKhY,aA/DtB,KAgElBgY,EAAKC,SAAS,CAAE9xD,IAAK6xD,EAAKhY,aAAckY,SAAU,iBAEnD,IAEGC,GAAe1nE,EAAAA,EAAAA,KAAY,KAE/B,GADAinE,GAAa,IACR3mE,EACH,OAGF,MAAMqnE,EAAkBxB,EAAS5gC,OAAOuP,UAAU,EAvE1B,KAwElB8yB,EAAiB51C,EAAQpO,KAAKikD,GAAMA,EAAEtiC,OAAOuP,UAAU,EAzEvC,OAyE8D5yB,QAAQ2lD,GAAMA,EAAExpE,SAEpG,IAAKspE,GAAmBC,EAAevpE,OAAS,EAY9C,OAXA+nE,EAAYuB,GACRC,EAAevpE,OACbupE,EAAevpE,OAAS,EAC1BgpE,EAAaO,GAEbvB,EAAWuB,GAGbP,SAEFJ,GAAa,GAIf,GAAIP,KAAgBI,IAAkBc,EAAeltD,OAAOosD,KAE1D,YADAG,GAAa,GAIf,MAOMrkC,EAAsB,CAC1BklC,QAAS,CACP3B,SAAUwB,EACVI,QAVYH,EACbhkD,KAAI,CAAChiB,EAAMyf,KAAP,CACHzf,KAAMA,EAAK2jC,OACXyiC,OAAQj+C,OAAO1I,MACX0I,OAAO1I,KAAWylD,GAAiB,CAAEmB,SAAS,WAO7C3B,GAAe,CAAE4B,UAAU,MAC5B1B,GAAqB,CAAE2B,gBAAgB,MACvCzB,GAAc,CAAE0B,MAAM,KAI9B,GAAI1B,EAAY,CACd,MAAM,KAAE9kE,EAAF,SAAQymE,GAAczB,IAAY0B,EAAAA,GAAAA,GAAkB1B,EAAS9xB,UAAU,EA/GvD,OA+GoF,GAE1GlS,EAAQwlC,KAAO,CACbG,eAAgB,CAACzB,MACbllE,GAAQ,CAAEglE,SAAUhlE,MACpBymE,GAAY,CAAEG,iBAAkBH,IAIxCrV,EAAOpwB,KACN,CACDtiC,EACA6lE,EACAn0C,EACA00C,EACAI,EACAR,EACAE,EACAxT,EACAqU,EACAT,IAGI6B,GAAezoE,EAAAA,EAAAA,KAAY,CAACqhB,EAAezf,KAC/C,MAAM0lE,EAAa,IAAIt1C,GACvBs1C,EAAWjmD,GAASzf,EAChB0lE,EAAWA,EAAWjpE,OAAS,GAAGknC,OAAOlnC,QAAUipE,EAAWjpE,OA5I5C,GA6IpBgpE,EAAaC,GAEbjB,EAAWiB,KAEZ,CAACt1C,EAASq1C,IAEPqB,GAAe1oE,EAAAA,EAAAA,KAAaqhB,IAChC,MAAMimD,EAAa,IAAIt1C,GACvBs1C,EAAWp4B,OAAO7tB,EAAO,GACzBglD,EAAWiB,GACXnoD,uBAAsB,KACf8mD,EAAe/gE,SAIpB+gE,EAAe/gE,QAAQrJ,UAAU8gB,OAAO,YAAaspD,EAAe/gE,QAAQqqD,aA7J1D,UA+JnB,CAACv9B,IAEE22C,GAA4B3oE,EAAAA,EAAAA,KAAaknD,IAC7C6f,EAAiB7f,KAChB,CAAC6f,IAEE6B,GAA0B5oE,EAAAA,EAAAA,KAAa+C,IAC3CwjE,EAAexjE,EAAE6G,OAAO+/B,WACvB,IAEGk/B,GAA8B7oE,EAAAA,EAAAA,KAAa+C,IAC/C0jE,EAAqB1jE,EAAE6G,OAAO+/B,WAC7B,IAEGm/B,GAAuB9oE,EAAAA,EAAAA,KAAa+C,IACxC4jE,EAAc5jE,EAAE6G,OAAO+/B,WACtB,IAEGo/B,GAAiB/oE,EAAAA,EAAAA,KAAa+C,IAChB,KAAdA,EAAEimE,SACJtB,MAED,CAACA,IAEEuB,GAAmBjpE,EAAAA,EAAAA,KAAY,KACnC,GAAIgnE,IAAcb,EAAS5gC,OAAOlnC,OAChC,OAAO4B,EAAK,+BAIb,CAAC+mE,EAAW/mE,EAAMkmE,IAEf+C,GAAkBlpE,EAAAA,EAAAA,KAAaqhB,IACnC,MAAMumD,EAAiB51C,EAAQpO,KAAKikD,GAAMA,EAAEtiC,SAAQrjB,QAAQ2lD,GAAMA,EAAExpE,SACpE,GAAI2oE,GAAaY,EAAevpE,OAAS,IAAM2zB,EAAQ3Q,GAAOkkB,OAAOlnC,OACnE,OAAO4B,EAAK,8BAGb,CAAC+mE,EAAW/mE,EAAM+xB,IAqBrB,SAASm3C,IACP,OAAOn3C,EAAQpO,KAAI,CAACokD,EAAQ3mD,IAC1B,0BAAK1gB,UAAU,kBACb,mBAACqiB,GAAA,EAAD,CACE8O,MAAOzQ,IAAU2Q,EAAQ3zB,OAAS,GA7NlB,KA6NuB2zB,EAAQ3zB,OAC3C4B,EAAK,cACLA,EAAK,wBACTsmB,MAAO2iD,EAAgB7nD,GACvB1Q,MAAOq3D,EACPvtD,SAAW1X,GAAM0lE,EAAapnD,EAAOte,EAAE+G,cAAc6G,OACrDy4D,WAAYL,IAEb1nD,IAAU2Q,EAAQ3zB,OAAS,GAC1B,mBAACkC,EAAA,EAAD,CACEI,UAAU,uBACVH,OAAK,EACLE,MAAM,cACND,KAAK,UACLK,UAAWb,EAAK,UAChBY,QAAS,IAAM6nE,EAAarnD,IAE5B,wBAAG1gB,UAAU,mBAoBvB,OACE,mBAACyiB,GAAA,EAAD,CAAO9iB,OAAQA,EAAQ2G,QAASu7D,EAASn/C,OA3DvC,0BAAK1iB,UAAU,0BACb,mBAACJ,EAAA,EAAD,CAAQC,OAAK,EAACE,MAAM,cAAcD,KAAK,UAAUK,UAAU,uBAAuBD,QAAS2hE,GACzF,wBAAG7hE,UAAU,gBAEf,0BAAKA,UAAU,eAAeV,EAAK,YACnC,mBAACM,EAAA,EAAD,CACEG,MAAM,UACND,KAAK,UACLE,UAAU,sBACVE,QAAS6mE,GAERznE,EAAK,YAgDqDU,UAAU,aACzE,mBAACqiB,GAAA,EAAD,CACE7c,IAAK6/D,EACLl0C,MAAO7xB,EAAK,gBACZ0Q,MAAOw1D,EACP5/C,MAAO0iD,IACPxuD,SAAW1X,GAAMqjE,EAAYrjE,EAAE+G,cAAc6G,OAC7Cy4D,WAAYL,IAEd,0BAAKpoE,UAAU,oBAEf,0BAAKA,UAAU,6BAA6BwF,IAAK8/D,GAC/C,yBAAItlE,UAAU,kBAAkBV,EAAK,gBAEpC+mE,GAvBP,WACE,MAAMY,EAAiB51C,EAAQpO,KAAKikD,GAAMA,EAAEtiC,SAAQrjB,QAAQ2lD,GAAMA,EAAExpE,SAEpE,OAAOqoE,KAAgBI,IAAkBc,EAAeltD,OAAOosD,MAC7D,wBAAGnmE,UAAU,SAASV,EAAK,6BAmBXopE,GACb3C,EACC,mBAAC30C,GAAA,EAAD,CACEjQ,KAAK,gBACLkQ,QA/BDm3C,IACJvlD,KAAI,CAACkO,EAAOzQ,KAAR,CAAqB1Q,MAAOoZ,OAAO1I,GAAQyQ,MAAAA,EAAOw3C,OAAQjoD,IAAU2Q,EAAQ3zB,OAAS,MA+BpFoc,SAAUkuD,IAGZQ,KAKJ,0BAAKxoE,UAAU,oBAEf,0BAAKA,UAAU,aACb,mBAAC+oC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,iBACZ0pC,QAAS28B,EACT7rD,SAAUmuD,IAEZ,mBAACl/B,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,gBACZ0pC,QAAS68B,EACTlsD,SAAUosD,EACVjsD,SAAUouD,IAEZ,mBAACn/B,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,YACZ0pC,QAAS+8B,EACTpsD,SAAUksD,EACV/rD,SAAUquD,IAEXpC,GACC,sCACE,yBAAI/lE,UAAU,kBAAkBV,EAAK,6BACrC,0BACEkG,IAAK+/D,EACLvlE,UAAU,eACV+9D,iBAAe,EACfz7D,IAAI,OACJwX,SAAW1X,GAAM8jE,EAAY9jE,EAAE+G,cAAcs9D,aAE/C,0BAAKzmE,UAAU,QAAQV,EAAK,qC,qCC1UxC,MAmBA,IAAexB,EAAAA,EAAAA,KAnBmB,IAA+B,IAA9B,MAAE8qE,EAAF,MAASx6B,EAAT,QAAgBluC,GAAc,EAC/D,MAAM0zB,GAAcv0B,EAAAA,EAAAA,KAAa+C,IAE/BA,EAAEqH,iBAEFvJ,EAAQ0oE,EAAMC,OAAQD,EAAMpsE,MAC3B,CAACosE,EAAO1oE,IAEX,OACE,0BACEF,UAAY,gBAAcouC,EAAQ,QAAU,IAC5Ct2B,YAAa8b,EACbhN,MAAQ,IAAGgiD,EAAME,MAAM,OAEtBC,EAAAA,GAAqBH,EAAMC,OAAS,0BAAKptE,IAAM,kBAAiBmtE,EAAMxxD,YAAaxI,IAAI,GAAGo6D,QAAQ,aCsDzG,IAAelrE,EAAAA,EAAAA,KAvDqB,IAE9B,IAF+B,SACnCmrE,EADmC,MACzBvoD,EADyB,UAClBwoD,EADkB,oBACP5pC,EADO,aACcl3B,EADd,cAC4B28D,GAC3D,EAEJ,MAAMv/D,GAAMzB,EAAAA,EAAAA,IAAuB,OAEnColE,EAAAA,GAAAA,IAAe3jE,EAAK85B,GAEpB,MAAMh3B,GAAuBmoC,EAAAA,GAAAA,GAAmBroC,GAE1C9I,GAAOC,EAAAA,EAAAA,KAEP6pE,EAAehpE,EAAAA,GACjBM,KAAKoC,OAAOga,EAAAA,EAAAA,MAAiBtY,MAzBF,GAyBhB,IA3BiB,EA6B1B9C,EAAS,GAAAhB,KAAK2oE,KAAKJ,EAASnE,OAAOpnE,OAAS0rE,GAElD,OACE,0BACE5jE,IAAKA,EACLgE,IAAKy/D,EAASzsE,GACdA,GAAK,kBAAiBkkB,IACtB1gB,UAAU,cAEV,wBAAGA,UAAU,kBAAkBsC,IAAI,QAChChD,EAAqB,WAAhB2pE,EAASzsE,GAAkB,iBAAoB,QAAOkkB,MAE9D,0BACE1gB,WAAWmC,EAAAA,EAAAA,GAAe,uBAAwBmG,GAClDpL,MAAQ,WAAUwE,OAClBY,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAEzBmI,GAAgB6gE,EAASnE,OAAO7hD,KAAK9B,IACpC,MAAMynD,EAAQM,EAAU/nD,GAExB,IAAKynD,EACH,OAIF,MAAMU,EAAiB,OAAQV,EAAQA,EAAQA,EAAM,GAErD,OACE,mBAAC,GAAD,CACEp/D,IAAK8/D,EAAe9sE,GACpBosE,MAAOU,EACPppE,QAAS6kE,YChCjBwE,GAA4C,CAChDC,OAAQ,cACRC,OAAQ,aACRC,OAAQ,eACRC,MAAO,YACPC,SAAU,aACVC,OAAQ,WACRC,QAAS,YACTC,QAAS,gBACTC,MAAO,aAUHC,GAAmC,GAEzC,IAAIC,GACAC,GACAC,GAuKJ,UAAetsE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB+nB,EAAAA,GAAAA,IAAK/nB,EAAQ,CAAC,kBADpBD,EArK2B,IAEzC,IAF0C,UAC9CiC,EAD8C,cACnC+kE,EADmC,aACpBxD,GACtB,EAEJ,MAAMpyD,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCsmE,GAAYtmE,EAAAA,EAAAA,IAAuB,OAElCumE,EAAYC,IAAiBjpE,EAAAA,EAAAA,OAC7BwjE,EAAQ0F,IAAalpE,EAAAA,EAAAA,OACrBmpE,EAAqBC,IAA0BppE,EAAAA,EAAAA,IAAS,IAEvDk9B,QAASc,IAAwBZ,EAAAA,GAAAA,IAAwB,CAC/DC,QAASxvB,EACTyvB,WAtB0B,MAuBxB+rC,IACFA,EAAQ96B,SAAS+6B,IACf,MAAM,GAAEpuE,GAAOouE,EAAM3hE,OACrB,IAAKzM,IAAOA,EAAGogC,WAAW,mBACxB,OAGF,MAAMlc,EAAQ3G,OAAOvd,EAAGowB,QAAQ,kBAAmB,KACnDq9C,GAAsBvpD,GAASkqD,EAAMv6B,kBAGvC,MAAMw6B,EAA0BZ,GAC7BhnD,KAAI,CAACotB,EAAgB3vB,KAAjB,CAA8BA,MAAAA,EAAO2vB,eAAAA,MACzC9uB,QAAO,QAAC,eAAE8uB,GAAH,SAAwBA,KAE7Bw6B,EAAwBntE,QAI7BgtE,EAAuBG,EAAwBnqE,KAAKoC,MAAM+nE,EAAwBntE,OAAS,IAAIgjB,WAGjGoZ,EAAAA,GAAAA,GAAoBuwC,EAAU9lE,SAAUnE,EAAAA,KAGxCmB,EAAAA,EAAAA,KAAU,KACR,IAAK+oE,EACH,OAGF,MAAM5nD,EAAS2nD,EAAU9lE,QACzB,IAAKme,EACH,OAGF,MAAMooD,EA3DkB,GA2DRL,EAA4C/nD,EAAO41B,YAAc,EAAIyyB,IAErFC,EAAAA,GAAAA,GAA2BtoD,EAAQooD,KAClC,CAACR,EAAYG,IAEhB,MAAMnrE,GAAOC,EAAAA,EAAAA,KAEP0rE,GAAgBxrE,EAAAA,EAAAA,KAAQ,KAC5B,IAAK6qE,EACH,OAAOztC,GAAAA,EAET,MAAMquC,EAAkB,IAAIZ,GAS5B,OARI/I,MAAAA,GAAAA,EAAc7jE,QAChBwtE,EAAgBC,QAAQ,CACtB3uE,GAAI,SACJ2kB,KAAM7hB,EAAK,kBACXwlE,OAAQvD,IAIL2J,IACN,CAACZ,EAAYhrE,EAAMiiE,KAGtBhgE,EAAAA,EAAAA,KAAU,KACR2C,YAAW,KACT,MAAMknE,EAAO,KACXb,EAAcH,GAAUE,YAExBE,EAAUJ,GAAUtF,SAGlBsF,GACFgB,IAuERvzB,iBAQE,OAPKqyB,KACHA,GAAmB,mCACnBC,UAAsBD,IAAkBmB,QAExCjB,IAAYkB,EAAAA,GAAAA,IAAgBnB,KAGvBD,GA7EDqB,GACGx0C,KAAKq0C,KAnGa,OAsGxB,IAEH,MAAMI,GAAiBnsE,EAAAA,EAAAA,KAAaqhB,IAClCgqD,EAAuBhqD,GACvB,MAAM+qD,EAAazwE,SAAS8jB,eAAgB,kBAAiB4B,MAC7D6+C,EAAAA,GAAAA,GAAiBpwD,EAAa5K,QAAUknE,EAAY,QAxGnC,GADU,OA0G1B,IAEGC,GAAoBrsE,EAAAA,EAAAA,KAAY,CAACupE,EAAeznD,KACpD4jD,EAAc6D,EAAOznD,KACpB,CAAC4jD,IAEEjmC,GAAoBC,EAAAA,GAAAA,GAAkB,GAAI4sC,EAAAA,IAmB1CC,GAAqBzpE,EAAAA,EAAAA,GAAe,cAAenC,GAEzD,OAAK8kE,GAAWhmC,EASd,0BAAK9+B,UAAW4rE,GACd,0BAAKpmE,IAAK6kE,EAAWrqE,UAAU,qBAAqBsC,IAAKhD,EAAK2hB,MAAQ,MAAQ,IAC3EgqD,EAAchoD,KA9BrB,SAA8BgmD,EAA6BvoD,GACzD,MAAMjgB,EAAO8oE,GAAkBN,EAASzsE,IAExC,OAAOiE,GACL,mBAACb,EAAA,EAAD,CACEI,UAAY,sBAAoB0gB,IAAU+pD,EAAsB,YAAc,IAC9E5qE,OAAK,EACLgsE,OAAK,EACL9rE,MAAM,cACNG,QAAS,IAAMsrE,EAAe9qD,GAC9BvgB,UAAW8oE,EAAS9nD,MAEpB,wBAAGnhB,UAAWS,SAoBhB,0BACE+E,IAAK2J,EACLnP,WAAWmC,EAAAA,EAAAA,GAAe,gCAAiCwE,EAAAA,GAAe,eAAiB,kBAE1FskE,EAAchoD,KAAI,CAACgmD,EAAU/lD,IAC5B,mBAAC,GAAD,CACE+lD,SAAUA,EACVvoD,MAAOwC,EACPgmD,UAAWpE,EACXxlC,oBAAqBA,EACrBl3B,aAAcqiE,GAAuBvnD,EAAI,GAAKunD,GAAuBvnD,EAAI,EACzE6hD,cAAe2G,QAtBrB,0BAAK1rE,UAAW4rE,GACd,mBAACpoD,GAAA,EAAD,W,eCtKR,MACMsoD,GAAiB1rE,EAAAA,GAA0B,EAAI,GAqDrD,IAAetC,EAAAA,EAAAA,KAlDkB,IAQ3B,IAR4B,WAChCsyC,EADgC,YAEhC27B,EAFgC,MAGhCrrD,EAHgC,oBAIhC4e,EAJgC,aAKhCl3B,EALgC,gBAMhC4jE,EANgC,gBAOhCC,GACI,EAEJ,MAAMzmE,GAAMzB,EAAAA,EAAAA,IAAuB,OAEnColE,EAAAA,GAAAA,IAAe3jE,EAAK85B,GAEpB,MAAMh3B,GAAuBmoC,EAAAA,GAAAA,GAAmBroC,GAE1C8jE,EAAiB9rE,EAAAA,GACnBM,KAAKoC,OAAOga,EAAAA,EAAAA,MAAiBtY,MAnBF,IAmBuC2nE,EAAAA,EAAsBL,KArB1D,EAuB5BpqE,EAAShB,KAAK2oE,KAAKj5B,EAAW1b,MAAQw3C,IAAmBC,EAAAA,EAAsBL,IAErF,OACE,0BACEtmE,IAAKA,EACLgE,IAAK4mC,EAAW5zC,GAChBA,GAAK,eAAckkB,IACnB1gB,UAAU,cAEV,wBAAGA,UAAU,mBAAmBowC,EAAWxpB,OAC3C,0BACE5mB,WAAWmC,EAAAA,EAAAA,GAAe,uBAAwBmG,GAClDpL,MAAQ,WAAUwE,QAEjB0G,GAAgBgoC,EAAWW,UAAYX,EAAWW,SAAS9tB,KAAKmuB,GAC/D,mBAACD,GAAA,EAAD,CACE3nC,IAAK4nC,EAAQ50C,GACb40C,QAASA,EACTtxC,KAAMqsE,EAAAA,EACN7sC,oBAAqBA,EACrB8sC,WAAYL,EACZ7rE,QAAS8rE,EACTnuC,SAAUuT,EACVi7B,cAAiC,aAAlBj8B,EAAW5zC,GAAoByvE,OAAkBhsE,WCnBtEqsE,GAAqC,GAoO3C,IAAexuE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,SACJ2zC,EADI,MAEJH,EAFI,OAGJg4B,EAHI,SAIJ+C,GACEvuE,EAAO+yC,SAEX,MAAO,CACLy7B,eAAgBhD,EAAOz4B,SACvB07B,iBAAkBF,EAASx7B,SAC3BW,gBAAiBC,EACjB+6B,YAAal7B,EAAMC,OACnBk7B,WAAY3uE,EAAOic,SAASC,MAAM+3B,sBAdpBl0C,EAlO6B,IAY3C,IAZ4C,OAChD0M,EADgD,SAEhDC,EAFgD,UAGhD1K,EAHgD,YAIhD+rE,EAJgD,gBAKhDnS,EALgD,eAMhD4S,EANgD,iBAOhDC,EAPgD,YAQhDC,EARgD,gBAShDh7B,EATgD,WAUhDi7B,EAVgD,gBAWhDX,GACI,EACJ,MAAM,mBACJY,EADI,iBAEJC,EAFI,cAGJjW,IACE73D,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCsmE,GAAYtmE,EAAAA,EAAAA,IAAuB,OAClC+oE,EAAgBC,IAAqBzrE,EAAAA,EAAAA,IAAiB,GACvD0rE,GAAoBC,EAAAA,GAAAA,GAAqBxiE,EAAQC,IAE/C8zB,QAASc,IAAwBZ,EAAAA,GAAAA,IAAwB,CAC/DC,QAASxvB,EACTyvB,WAhCkC,MAiChC+rC,IACFA,EAAQ96B,SAAS+6B,IACf,MAAM,GAAEpuE,GAAOouE,EAAM3hE,OACrB,IAAKzM,IAAOA,EAAGogC,WAAW,gBACxB,OAGF,MAAMlc,EAAQ3G,OAAOvd,EAAGowB,QAAQ,eAAgB,KAChD0/C,GAAwB5rD,GAASkqD,EAAMv6B,kBAGzC,MAAMw6B,EAA0ByB,GAC7BrpD,KAAI,CAACotB,EAAgB3vB,KAAjB,CAA8BA,MAAAA,EAAO2vB,eAAAA,MACzC9uB,QAAO,QAAC,eAAE8uB,GAAH,SAAwBA,KAE7Bw6B,EAAwBntE,QAI7BqvE,EAAkBlC,EAAwBnqE,KAAKoC,MAAM+nE,EAAwBntE,OAAS,IAAIgjB,WAEpF8d,QAAS4T,IAAiC1T,EAAAA,GAAAA,IAAwB,CAAEC,QAAS0rC,IAE/E/qE,GAAOC,EAAAA,EAAAA,KAEP2tE,EAAiBhmE,QAAQwlE,GAEzBS,GAAU1tE,EAAAA,EAAAA,KAAQ,IACjBitE,EAIE,CACL,CACElwE,GAAI,SACJoqB,MAAOtnB,EAAK,kBACZyxC,SAAUy7B,EACV93C,MAAO83C,EAAe9uE,QAExB,CACElB,GAAI,WACJoqB,MAAOtnB,EAAK,oBACZyxC,SAAU07B,EACV/3C,MAAO+3C,EAAiB/uE,WAEvBgvE,EAAYzpD,KAAKzmB,GAAOk1C,EAAgBl1C,KAAK+kB,OAAOra,UAhBhD21B,GAAAA,GAkBR,CAAC6vC,EAAaptE,EAAMktE,EAAgBC,EAAkB/6B,IAEnD07B,GAAkB3tE,EAAAA,EAAAA,KAAQ,IAC9BytE,GAC4D,IAAzDC,EAAQ5rD,QAAQ8rD,IAAD,uBAASA,EAAIt8B,gBAAb,aAAS,EAAcrzC,UAAQA,QAChD,CAACyvE,EAASD,KAEb3rE,EAAAA,EAAAA,KAAU,KACJwqE,IACFa,IACAI,EAAkB,CAAEnzD,KAAM,qBAE3B,CAACkyD,EAAaa,EAAoBI,KAErClzC,EAAAA,GAAAA,GAAoBuwC,EAAU9lE,UAG9BhD,EAAAA,EAAAA,KAAU,KACR,IAAK2rE,EACH,OAGF,MAAMxqD,EAAS2nD,EAAU9lE,QACzB,IAAKme,EACH,OAGF,MAAMooD,EA5GkB,GA4GRgC,GAAwCpqD,EAAO41B,YAAc,EAAIyyB,KAEjFC,EAAAA,GAAAA,GAA2BtoD,EAAQooD,KAClC,CAACoC,EAAgBJ,IAEpB,MAAMjT,GAAmBx6D,EAAAA,EAAAA,KAAaqhB,IACpCqsD,EAAkBrsD,GAClB,MAAM4sD,EAAetyE,SAAS8jB,eAAgB,eAAc4B,MAC5D6+C,EAAAA,GAAAA,GAAiBpwD,EAAa5K,QAAU+oE,EAAc,aAASrtE,EArHpC,OAsH1B,IAEGstE,GAAsBluE,EAAAA,EAAAA,KAAa+xC,IACvC46B,EAAgB56B,GAChBy7B,EAAiB,CAAEz7B,QAAAA,MAClB,CAACy7B,EAAkBb,IAEhBwB,GAAsBnuE,EAAAA,EAAAA,KAAa+xC,IACvCwlB,EAAc,CAAExlB,QAAAA,MACf,CAACwlB,IAEE7tD,GAAkB1J,EAAAA,EAAAA,KAAY,KAClC2tE,EAAkB,CAAEnzD,KAAM,oBACzB,CAACmzD,IAEEluC,GAAoBC,EAAAA,GAAAA,GAAkB,GAAIC,EAAAA,GAqD1CyuC,GAAgBtrE,EAAAA,EAAAA,GAAe,gBAAiBnC,GAEtD,OAAKktE,GAAmBpuC,IAAqBsuC,GAAoBxT,EAe/D,0BAAK55D,UAAWytE,GACd,0BACEjoE,IAAK6kE,EACLrqE,UAAU,kDAETmtE,EAAQlqD,KAzEf,SAAqBmtB,EAAgC1vB,GAAe,MAClE,MAAMswB,EAAY,UAAGZ,EAAWW,gBAAd,aAAG,EAAsB,GACrC28B,GAAkBvrE,EAAAA,EAAAA,GACtB,uCACAue,IAAUosD,GAAkB,aAG9B,MAAsB,WAAlB18B,EAAW5zC,IAAqC,aAAlB4zC,EAAW5zC,IAAqB4zC,EAAWQ,eAAiBI,EAE1F,mBAACpxC,EAAA,EAAD,CACE4J,IAAK4mC,EAAW5zC,GAChBwD,UAAW0tE,EACXvtE,UAAWiwC,EAAWxpB,MACtB/mB,OAAK,EACLgsE,MAAyB,WAAlBz7B,EAAW5zC,IAAqC,aAAlB4zC,EAAW5zC,GAChDuD,MAAM,cACNG,QAAS,IAAM25D,EAAiBn5C,IAEb,WAAlB0vB,EAAW5zC,GACV,wBAAGwD,UAAU,gBACO,aAAlBowC,EAAW5zC,GACb,wBAAGwD,UAAU,kBACXowC,EAAWa,SACb,mBAAC,GAAD,CACEb,WAAYA,EACZ9Q,oBAAqB8S,IAGvB,mBAAC,GAAD,CACEhC,WAAYA,EACZ9Q,oBAAqB8S,KAO3B,mBAACjB,GAAA,EAAD,CACE3nC,IAAK4mC,EAAW5zC,GAChB40C,QAASJ,EACTlxC,KAAMqwC,EAAAA,GACNvpB,MAAOwpB,EAAWxpB,MAClB5mB,UAAW0tE,EACXpuC,oBAAqB8S,EACrBlyC,QAAS25D,EACTh8B,SAAUnd,QA8Bd,0BACElb,IAAK2J,EACLvF,YAAab,EACb/I,WAAWmC,EAAAA,EAAAA,GAAe,kCAAmCwE,EAAAA,GAAe,eAAiB,kBAE5FwmE,EAAQlqD,KAAI,CAACmtB,EAAYltB,IACxB,mBAAC,GAAD,CACE1Z,IAAK4mC,EAAW5zC,GAChB4zC,WAAYA,EACZ27B,YAAa7kE,QAAQylE,GAAcZ,GACnCrrD,MAAOwC,EACPoc,oBAAqBA,EACrBl3B,aAAc0kE,GAAkB5pD,EAAI,GAAK4pD,GAAkB5pD,EAAI,EAC/D8oD,gBAAiBuB,EACjBtB,gBAAiBuB,QAlCvB,0BAAKxtE,UAAWytE,GACZ7T,EAEEwT,EACF,0BAAKptE,UAAU,mBAAmBV,EAAK,eAEvC,mBAACkkB,GAAA,EAAD,MAJA,0BAAKxjB,UAAU,mBAAmBV,EAAK,wC,iOCpNjD,MAgFA,IAAexB,EAAAA,EAAAA,KAhFiB,IAE1B,YAF2B,IAC/B6vE,EAD+B,oBAC1BruC,EAD0B,WACL46B,EADK,UACOl6D,EADP,QACkBE,GAC7C,EAEJ,MAAMsF,GAAMzB,EAAAA,EAAAA,IAAuB,MAE7B0C,GAAW1C,EAAAA,EAAAA,IAAyB,MAEpC6sC,EAAe1pC,QAAO,UAACymE,EAAIh4B,iBAAL,aAAC,EAAeC,SACtCJ,EAAkB,MAAKm4B,EAAInxE,KAE3BuvE,GADiBz7B,EAAAA,GAAAA,IAAkB9qC,EAAK85B,KACP46B,EACjCjtD,GAAiBH,EAAAA,EAAAA,GAAU,GAAE0oC,YAA0Bu2B,EAAah/D,EAAAA,GAAAA,SACpE0oC,GAAWC,EAAAA,GAAAA,GAAa,UAACi4B,EAAIh4B,iBAAL,aAAC,EAAeC,QAAS1uC,QAAQ+F,IACzD2gE,GAAY9gE,EAAAA,EAAAA,GAAS0oC,GAAiBu2B,EAAah/D,EAAAA,GAAAA,SACnD8gE,EAAoB3mE,QAAQ6kE,GAAe6B,IAC3C,WAAE3lE,EAAF,kBAAcC,IAAsBC,EAAAA,EAAAA,IAAa,GACjDE,EAAsB0jE,IAAgB9jE,EACtC6lE,EAAe/B,GAAe9jE,GAEpCa,EAAAA,EAAAA,GAAgBrC,EAAU,CAAConE,IAE3B,MAAMj6C,GAAcv0B,EAAAA,EAAAA,KAClB,IAAMa,EAAQ,IACTytE,EACHtgE,QAASugE,KAEX,CAAC1tE,EAASytE,EAAKC,IAGXH,GAAgBtrE,EAAAA,EAAAA,GACpB,YACAwrE,EAAInpE,OAASmpE,EAAIjsE,QAAUisE,EAAInpE,MAAQmpE,EAAIjsE,OAAS,WAAa,aACjE8zC,EACAx1C,GAGF,OACE,0BACEwF,IAAKA,EACLxF,UAAWytE,EACX31D,YAAai2D,GAAAA,EACb7tE,QAAS0zB,GAERgd,GACC,6BACEprC,IAAKiwC,EACLz1C,UAAU,YAEV9C,MAAO4wE,EAAe,sBAAmB7tE,IAG5CgN,IAAmB6gE,GAClB,0BACEryE,IAAKwR,EACL2B,IAAI,GACJ5O,UAAU,YAGb6tE,GACC,+BACEroE,IAAKiB,EACLqD,UAAQ,EACRE,MAAI,EACJC,OAAK,EACLF,aAAW,EACXikE,QAAQ,QAEJ9lE,GAEJ,6BAAQzM,IAAKmyE,KAGhBvlE,GACC,mBAACqG,EAAA,EAAD,CAAS3O,MAAOkN,GAAkB2jC,EAAe,QAAU,cCnBnE,IAAe9yC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLiwE,UAAWjwE,EAAOkwE,KAAKC,MAAMD,QAHfnwE,EAlDyB,IAMvC,IANwC,UAC5CiC,EAD4C,YAE5C+rE,EAF4C,YAG5CqC,EAH4C,UAI5CH,EAJ4C,YAK5CI,GACI,EACJ,MAAM,cAAEC,IAAkBvvE,EAAAA,EAAAA,MAGpBoQ,GAAepL,EAAAA,EAAAA,IAAuB,OAG1Cy6B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAASxvB,EAAco/D,WAhBzB,OAkB5BhtE,EAAAA,EAAAA,KAAU,KACJwqE,GACFuC,MAED,CAACvC,EAAauC,IAEjB,MAAMxvC,GAAoBC,EAAAA,GAAAA,GAAkB,GAAIC,EAAAA,GAEhD,OACE,0BACEx5B,IAAK2J,EACLnP,WAAWmC,EAAAA,EAAAA,GAAe,YAAanC,EAAW2G,EAAAA,GAAe,eAAiB,kBAEhFynE,EAEEtvC,GAAqBmvC,GAAaA,EAAUvwE,OAC9CuwE,EAAUhrD,KAAK0qD,GACb,mBAAC,GAAD,CACEnkE,IAAKmkE,EAAInxE,GACTmxE,IAAKA,EACLruC,oBAAqBA,EACrB46B,YAAa6R,EACb7rE,QAASmuE,MAGXvvC,GAAqBmvC,EACvB,0BAAKjuE,UAAU,mBAAf,kBAEA,mBAACwjB,GAAA,EAAD,MAdA,0BAAKxjB,UAAU,mBAAf,kDChDD,IAAKwuE,I,SAAAA,GAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,KAAAA,GAAAA,O,CAAAA,KAAAA,GAAAA,KAQL,MAAMC,GAAyBzxE,OAAOstD,OAAOkkB,IACjDjtD,QAAQvR,GAA4C,iBAAVA,IAEvC0+D,GAAwB,CAC5B,CAACF,GAAeG,OAAQ,aACxB,CAACH,GAAeI,UAAW,gBAC3B,CAACJ,GAAeK,MAAO,aAkEzB,IAAe/wE,EAAAA,EAAAA,KA/DwB,IAEjC,IAFkC,UACtCijC,EADsC,YAC3BQ,EAD2B,eACdutC,EADc,aACEC,GACpC,EACJ,MAAMzvE,GAAOC,EAAAA,EAAAA,KAEb,SAASyvE,EAAgB7tC,GACvB,OACE,mBAACvhC,EAAA,EAAD,CACEI,UAAY,sBAAoB+gC,IAAcI,EAAM,YAAc,IAClEjhC,QAAS,IAAMqhC,EAAYJ,GAC3BhhC,UAAWsuE,GAAuBttC,GAClCthC,OAAK,EACLgsE,OAAK,EACL9rE,MAAM,eAEN,wBAAGC,UAAW0uE,GAAsBvtC,MAK1C,MAAM8tC,GAAmB5vE,EAAAA,EAAAA,KAAY,KACnC0vE,EAAahuC,IAAcytC,GAAeI,SAAW,WAAa,UACjE,CAAC7tC,EAAWguC,IAMf,OACE,0BAAK/uE,UAAU,oBAAoBE,QALrC,SAAyBsS,GACvBA,EAAMnQ,mBAIuDC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACpF8gC,IAAcytC,GAAeG,OAC5B,mBAAC/uE,EAAA,EAAD,CACEI,UAAU,uBACVG,UAAW4gC,IAAcytC,GAAeI,SAAW,kBAAoB,cACvE/uE,OAAK,EACLgsE,OAAK,EACL9rE,MAAM,cACNG,QAAS+uE,GAET,wBAAGjvE,UAAU,iBAIhBgvE,EAAgBR,GAAeG,OAC/BK,EAAgBR,GAAeI,UAC/BI,EAAgBR,GAAeK,MAE/B9tC,IAAcytC,GAAeG,OAC5B,mBAAC/uE,EAAA,EAAD,CACEI,UAAU,uBACVE,QAAS4uE,EACT3uE,UAAU,gBACVN,OAAK,EACLgsE,OAAK,EACL9rE,MAAM,eAEN,wBAAGC,UAAU,0BCvCvB,IAAI6vD,IAAc,EAElB,MA+LA,IAAe/xD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLkxE,kBAAmBlxE,EAAOkxE,qBAHZnxE,EA/L0B,IAexC,IAfyC,OAC7C0M,EAD6C,SAE7CC,EAF6C,OAG7C/K,EAH6C,gBAI7Ci6D,EAJ6C,YAK7CwU,EAL6C,kBAM7Cc,EAN6C,OAO7Cz3C,EAP6C,QAQ7CnxB,EAR6C,cAS7Cy+D,EAT6C,gBAU7CiH,EAV6C,YAW7CqC,EAX6C,eAY7CS,EAZ6C,aAa7CC,EAb6C,eAc7CrN,GACI,EACJ,MAAO3gC,EAAWC,IAAgB1/B,EAAAA,EAAAA,IAAiB,IAC5CigE,EAAc4N,IAAmB7tE,EAAAA,EAAAA,IAAmB,KAEpD8tE,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe3vE,EAAQ2G,OAASrG,EAAWG,EAAAA,KAClF,aAAEgI,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB7I,EAAQ2G,GAAS,GAAO,IAEpFupD,IAAelwD,IAClBkwD,IAAc,IAGhBtuD,EAAAA,EAAAA,KAAU,KACRk2B,MACC,CAACA,KAEJtwB,EAAAA,EAAAA,KAAgB,KACd,GAAK/G,EAAAA,GASL,OALIT,IACF3E,SAASoJ,KAAKlJ,UAAUC,IAAI,iCAC5BH,SAASoJ,KAAKlJ,UAAUC,IAAI,wBAGvB,KACDwE,IACF4vE,EAAAA,EAAAA,KAAQ,KACNv0E,SAASoJ,KAAKlJ,UAAUmJ,OAAO,uBAC/BH,YAAW,KACTlJ,SAASoJ,KAAKlJ,UAAUmJ,OAAO,mCArEhB,WA0EtB,CAAC1E,IAEJ,MAAM6vE,GAAkBzrE,EAAAA,EAAAA,IAAOw9D,GAC/BiO,EAAgBjrE,QAAUg9D,GAC1BhgE,EAAAA,EAAAA,KAAU,KACHiuE,EAAgBjrE,QAAQ7G,SAI7B8xE,EAAgBjrE,QAAQsrC,SAAS1uB,IAC/BugD,EAAe,CAAEkH,MAAOznD,OAG1BguD,EAAgB,OACf,CAACxvE,EAAQohC,EAAW2gC,IAEvB,MAAMgK,GAAoBrsE,EAAAA,EAAAA,KAAY,CAACupE,EAAeznD,KACpDguD,GAAiBrK,GACR,IAAIA,EAAQ3jD,KAGrB4jD,EAAc6D,KACb,CAAC7D,IAEElI,GAAex9D,EAAAA,EAAAA,KAAawa,IAChCvT,IACAyoE,EAAal1D,KACZ,CAACvT,EAASyoE,IAEPxB,GAAsBluE,EAAAA,EAAAA,KAAa+xC,IACvC46B,EAAgB56B,GAAS,KACxB,CAAC46B,IAEE1sE,GAAOC,EAAAA,EAAAA,KAEb,SAASkwE,EAAcpkE,EAAmB2+C,GACxC,OAAQjpB,GACN,KAAKytC,GAAeG,MAClB,OACE,mBAAC,GAAD,CACE3uE,UAAU,aACV+kE,cAAe2G,IAGrB,KAAK8C,GAAeI,SAClB,OACE,mBAAC,GAAD,CACE5uE,UAAU,aACV+rE,cAAanS,GAAkBj6D,IAAW0L,GAAY2+C,GACtD4P,gBAAiBA,EACjBoS,gBAAiBuB,EACjB9iE,OAAQA,EACRC,SAAUA,IAGhB,KAAK8jE,GAAeK,KAClB,OACE,mBAAC,GAAD,CACE7uE,UAAU,aACV+rE,cAAaqC,GAAczuE,IAAW0L,GAAY2+C,GAClDokB,YAAaA,EACbC,YAAaA,KAYvB,MAAMh9D,EACJ,sCACE,0BAAKrR,UAAU,kBAAkBE,QANrC,SAAyBsS,GACvBA,EAAMnQ,oBAMDwtD,IACC,mBAACz2C,EAAA,EAAD,CAAY+H,KAAK,QAAQD,UAAW6f,EAAWS,YAAaitC,GAAuB/wE,QAChF+xE,IAINrvE,EAAAA,IACC,mBAACR,EAAA,EAAD,CACEC,OAAK,EACLgsE,OAAK,EACL9rE,MAAM,cACNI,UAAWb,EAAK,SAChBU,UAAU,sBACVF,KAAK,OACLI,QAASoG,GAET,wBAAGtG,UAAU,gBAGjB,mBAAC,GAAD,CACE+gC,UAAWA,EACXQ,YAAaP,EACb8tC,eAAgBA,EAChBC,aAAclS,KAKpB,GAAIz8D,EAAAA,GAAyB,CAC3B,IAAKgI,EACH,OAGF,MAAMpI,GAAYmC,EAAAA,EAAAA,GAChB,yBACAmG,GACC4mE,GAAqB,sBAGxB,OACE,mBAACnS,GAAA,EAAD,KACE,0BAAK/8D,UAAWA,GACbqR,IAMT,OACE,mBAACgkD,GAAA,EAAD,CACE11D,OAAQA,EACRY,UAAU,OACVw0D,UAAU,SACVzuD,QAASA,EACTtG,UAAU,aACV4hB,oBAAqBtb,EACrB+pD,aAAe1pD,EAAAA,QAAkC1G,EAAnBmvE,EAC9BM,aAAe/oE,EAAAA,QAAkC1G,EAAnBovE,EAC9BM,mBAAoBhpE,EAAAA,IAEnB0K,OCxJP,IAAevT,EAAAA,EAAAA,KA7DkB,IAE3B,IAF4B,OAChC6B,EADgC,eACxBiwE,EADwB,eACRC,EADQ,aACQC,EADR,aACsBC,EADtB,QACoCzpE,GAChE,EACJ,MAAO8oE,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe3vE,EAAQ2G,GAE9D4wC,GAAmB73C,EAAAA,EAAAA,KAAY,CAAC+C,EAAUkgE,KAC9C,MAAM,MAAEnrB,GAAU/0C,EAAE6G,OAEhBkuC,GAASA,EAAMz5C,OAAS,GAC1BoyE,EAAalS,MAAM5rD,KAAKmlC,GAAQmrB,KAEjC,CAACwN,IAEEE,GAAoB3wE,EAAAA,EAAAA,KAAY,KACpCq0C,GACEkqB,MAAM5rD,KAAKyxD,EAAAA,IAA4Bn5D,KAAK,MAC3ClI,GAAM80C,EAAiB90C,GAAG,OAE5B,CAAC80C,IAEE+4B,GAAuB5wE,EAAAA,EAAAA,KAAY,KACvCq0C,GAAsB,KAAMtxC,GAAM80C,EAAiB90C,GAAG,OACrD,CAAC80C,IAEE53C,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAAC81D,GAAA,EAAD,CACE11D,OAAQA,EACRuwE,WAAS,EACT3vE,UAAU,QACVw0D,UAAU,SACVzuD,QAASA,EACTtG,UAAU,mBACV4hB,oBAAqBtb,EACrB+pD,aAAe1pD,EAAAA,QAAkC1G,EAAnBmvE,EAC9BM,aAAe/oE,EAAAA,QAAkC1G,EAAnBovE,EAC9BM,mBAAoBhpE,EAAAA,KAMlBipE,GACA,mBAACpvE,EAAA,EAAD,CAAUR,UAAU,iBAAiB2Z,UAAQ,GAA7C,uDAEDi2D,GACC,sCACE,mBAACpvE,EAAA,EAAD,CAAUC,KAAK,QAAQP,QAAS8vE,GAC7B1wE,EAAK,gCAER,mBAACkB,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAAS+vE,GAAuB3wE,EAAK,oBAGlEuwE,GACC,mBAACrvE,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAAS6vE,GAAezwE,EAAK,aC/B3D,IAAexB,EAAAA,EAAAA,KA1BkB,IAM3B,IAN4B,WAChCqyE,EADgC,MAEhC/hC,EAFgC,WAGhCgiC,EAHgC,IAIhCC,EAJgC,QAKhCnwE,GACI,EACJ,OACE,mBAACijB,GAAA,EAAD,CACE3Z,IAAK4mE,EAAW/T,QAChBr8D,WAAWmC,EAAAA,EAAAA,GAAe,6CAA8CguE,GAAc,eACtFnlC,WAAS,EACT9qC,QAAS,IAAMA,EAAQkwE,GACvBhiC,MAAOA,GAEN+hC,GACC,mBAACr3D,GAAA,EAAD,CAAQhZ,KAAK,QAAQiZ,KAAMs3D,IAE7B,0BAAKrwE,UAAU,iBACb,2BAAMA,UAAU,SAAhB,IAA0BowE,EAAW/T,SACrC,2BAAMr8D,UAAU,aAAYiZ,EAAAA,GAAAA,GAAWm3D,EAAWx/C,mBCyD1D,IAAe9yB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAD,CACEknB,UAAWlnB,EAAOonB,MAAM1B,QAFR3lB,EApEiC,IAO/C,IAPgD,UACpDmnB,EADoD,OAEpDvlB,EAFoD,aAGpD44B,EAHoD,YAIpD+3C,EAJoD,QAKpDpwE,EALoD,QAMpDoG,GACI,EACJ,MAAM,eAAEu1D,IAAmB98D,EAAAA,EAAAA,MAGrBoQ,GAAepL,EAAAA,EAAAA,IAAuB,OACtC,aAAEqE,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB7I,OAAQM,OAAWA,GAAW,GAEzFswE,GAAoBlxE,EAAAA,EAAAA,KAAY,IAAuC,IAAtC,MAAEmxE,EAAF,QAASnU,GAA6B,EAC3E,MAAMgU,EAAMnrD,EAAUsrD,GACtB3U,EAAe,CACbQ,QAAU,IAAGA,IAAU9jC,GAAgB83C,EAAO,IAAGA,EAAIjsC,WAAa,KAClEosC,MAAAA,IAEFtwE,MACC,CAACA,EAAS27D,EAAgB32C,EAAWqT,IAElCk4C,EAAuBjR,GAAsB,CACjDn0D,SAAU1L,EACVijB,MAAO0tD,EACP54C,SAAU64C,EACVjqE,QAAAA,KAGF/E,EAAAA,EAAAA,KAAU,KACJ+uE,IAAgBA,EAAY5yE,QAC9B4I,MAED,CAACgqE,EAAahqE,KAEjB/E,EAAAA,EAAAA,KAAU,KACR49D,GAAsB,uBAAwBsR,EAAsBthE,KACnE,CAACshE,IAEJ,MAAMC,GAAel3D,EAAAA,EAAAA,GAAY82D,GAAeA,EAAY5yE,OAAS4yE,OAAcrwE,EAAWmI,GACxFuoE,EAAmBL,IAAgBA,EAAY5yE,OAASgzE,EAAeJ,EAE7E,IAAKloE,GAAiBuoE,IAAqBA,EAAiBjzE,OAC1D,OAGF,MAAMsC,GAAYmC,EAAAA,EAAAA,GAChB,mDACAmG,GAGF,OACE,0BAAKtI,UAAWA,EAAWwF,IAAK2J,GAC7BwhE,GAAoBA,EAAiB1tD,KAAI,CAAC2tD,EAAgBlwD,IACzD,mBAAC,GAAD,CACElX,IAAM,GAAEonE,EAAeJ,SAASI,EAAevU,UAC/C+T,WAAYQ,EACZP,IAAKnrD,EAAU0rD,EAAeJ,OAC9BL,YAAU,EACVjwE,QAASqwE,EACTniC,MAAOqiC,IAAyB/vD,WCjC1C,IAAe5iB,EAAAA,EAAAA,KAtCsB,IAE/B,IAFgC,OACpC6B,EADoC,YAC5B2wE,EAD4B,QACfhqE,GACjB,EACJ,MAAM,eAAEu1D,IAAmB98D,EAAAA,EAAAA,OAEpBqwE,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe3vE,EAAQ2G,OAASrG,EAAWG,EAAAA,IAElFwzB,GAAcv0B,EAAAA,EAAAA,KAAa+wE,IAC/BvU,EAAe,CACbQ,QAAU,IAAG+T,EAAW/T,UACxBmU,MAAOJ,EAAWI,QAEpBlqE,MACC,CAACA,EAASu1D,IAEb,OACE,mBAACxG,GAAA,EAAD,CACE11D,OAAQA,EACRY,UAAU,OACVw0D,UAAU,SACVzuD,QAASA,EACTtG,UAAU,iBACV4hB,oBAAqBtb,EACrB+pD,aAAe1pD,EAAAA,QAAkC1G,EAAnBmvE,EAC9BM,aAAe/oE,EAAAA,QAAkC1G,EAAnBovE,EAC9BM,mBAAoBhpE,EAAAA,IAEnB2pE,EAAYrtD,KAAKmtD,GAChB,mBAAC,GAAD,CACE5mE,IAAK4mE,EAAW/T,QAChB+T,WAAYA,EACZlwE,QAAS0zB,UCkDnB,IAAe91B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,SAAE+yC,GAAa/yC,EAAO+yC,SAAS8/B,SAErC,MAAO,CAAE9/B,SAAAA,KAJOhzC,EAlE8B,IAM5C,IAN6C,OACjD0M,EADiD,SAEjDC,EAFiD,OAGjD/K,EAHiD,gBAIjDqsE,EAJiD,SAKjDj7B,GACI,EACJ,MAAM,sBAAE+/B,IAA0B/xE,EAAAA,EAAAA,MAG5BoQ,GAAepL,EAAAA,EAAAA,IAAuB,OACtC,aAAEqE,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB7I,OAAQM,OAAWA,GAAW,GACzF8wE,GAAev3D,EAAAA,EAAAA,GAAYu3B,GAAU,GACrCigC,EAAoBjgC,GAAYggC,EAChC/D,GAAoBC,EAAAA,GAAAA,GAAqBxiE,EAAQC,IAGrD8zB,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAASxvB,EAAcyvB,WApBzB,OAsB5Br9B,EAAAA,EAAAA,KAAU,IAAO5B,GAAS4gB,EAAAA,EAAAA,GAAsBuwD,QAAyB7wE,GAAY,CAACN,EAAQmxE,IAE9F,MAYM9wE,GAAYmC,EAAAA,EAAAA,GAChB,gDACAmG,IACE0oE,MAAAA,GAAAA,EAAmBtzE,SAAW,UAGlC,OACE,0BACE8H,IAAK2J,EACLnP,UAAWA,EACXqwD,aAAe1pD,EAAAA,QAAkC1G,EAtB5B,KACvBjF,SAASoJ,KAAKlJ,UAAUC,IAAI,cAsB1Bu0E,aAAe/oE,EAAAA,QAAkC1G,EAf5B,KACvBjF,SAASoJ,KAAKlJ,UAAUmJ,OAAO,cAe7BuF,YApBoB,KACtBojE,EAAkB,CAAEnzD,KAAM,oBAqBvBzR,GAAgB4oE,EACfA,EAAkB/tD,KAAKmuB,GACrB,mBAACD,GAAA,EAAD,CACE3nC,IAAK4nC,EAAQ50C,GACb40C,QAASA,EACTtxC,KAAMqsE,EAAAA,EACN7sC,oBAAqBA,EACrBp/B,QAAS8rE,EACTnuC,SAAUuT,MAGZhpC,EACF,mBAACob,GAAA,EAAD,WACEvjB,OClDV,IAAenC,EAAAA,EAAAA,KA1BsB,IAE/B,IAFgC,OACpC6B,EADoC,aAC5BsxE,EAD4B,eACdC,EADc,QACE5qE,EADF,oBACWsb,GAC3C,EACJ,MAAOwtD,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe3vE,EAAQ2G,GAE9DhH,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAAC81D,GAAA,EAAD,CACE11D,OAAQA,EACRuwE,WAAS,EACT3vE,UAAU,QACVw0D,UAAU,SACV/0D,UAAU,iBACVsG,QAASA,EACTsb,oBAAqBA,EACrByuC,aAAe1pD,EAAAA,QAAkC1G,EAAnBmvE,EAC9BM,aAAe/oE,EAAAA,QAAkC1G,EAAnBovE,EAC9BM,mBAAoBhpE,EAAAA,IAEnBsqE,GAAgB,mBAACzwE,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAAS+wE,GAAe3xE,EAAK,qBACnE4xE,GAAkB,mBAAC1wE,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASgxE,GAAiB5xE,EAAK,wB,qCCkBlF,MAsEA,IAAexB,EAAAA,EAAAA,KAtEoB,IAM7B,IAN8B,OAClC6B,EADkC,OAElCmlE,EAFkC,QAGlCx+D,EAHkC,cAIlCy+D,EAJkC,eAKlCrD,GACI,EAEJ,MAAMvyD,GAAepL,EAAAA,EAAAA,IAAuB,OACtC,aAAEqE,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB7I,OAAQM,OAAWA,GAAW,GACzFkxE,GAAsBC,EAAAA,GAAAA,GAAuBtM,EAAOpnE,OAASonE,OAAS7kE,EAhDvD,MAgDqF,GAEpGoxE,GAAoBhyE,EAAAA,EAAAA,KAAaupE,IACrC7D,EAAc6D,EAAMC,QACpBnH,EAAe,CAAEkH,MAAOA,EAAMpsE,OAC7B,CAACklE,EAAgBqD,IAEdnxC,GAAcv0B,EAAAA,EAAAA,KAAY,CAACwpE,EAAgBrsE,KAC/CuoE,EAAc8D,GACdnH,EAAe,CAAEkH,MAAOpsE,MACvB,CAACklE,EAAgBqD,IAEduM,EAAgB9R,GAAsB,CAC1Cn0D,SAAU1L,EACVi/D,cAAc,EACdh8C,MAAOkiD,EACPptC,SAAU25C,EACV/qE,QAAAA,KAGF/E,EAAAA,EAAAA,KAAU,MAlEZ,SAAwBmf,EAAevR,GACrC,MAAMjT,EAAYiT,EAAa5K,QAC/B,IAAKrI,EACH,OAGF,MAAM,eAAE8iE,EAAF,YAAkBD,GAAgBR,GACtCriE,EACA,eAZoB,GAcpB,GACA,GACA,GAGF,IAAK6iE,EAAYrhE,SAAWqhE,EAAYr+C,GACtC,OAEF,MAAM2+C,EAAQL,EAAe,GAC7B,IAAKA,EAAeviE,SAASikB,IACvBA,IAAU2+C,IAAUC,GAAepjE,EAAW6iE,EAAYM,IAAQ,GAAQ,CAC9E,MACMyL,EAAuB,UADZpqD,EAAQs+C,EAAeA,EAAethE,OAAS,GAAK,QAAU,OAxBxD,GAyBgBgjB,EAA6B,GAEpEsqD,EAAAA,GAAAA,GAA2B9uE,EAAW4uE,IA2CtCyG,CAAeD,EAAeniE,KAC7B,CAACmiE,IAEJ,MAQMtxE,GAAYmC,EAAAA,EAAAA,GAChB,gDACAmG,GAGF,OACE,0BACE9C,IAAK2J,EACLnP,UAAWA,EACXqwD,aAAe1pD,EAAAA,QAAkC1G,EAjB5B,KACvBjF,SAASoJ,KAAKlJ,UAAUC,IAAI,cAiB1Bu0E,aAAe/oE,EAAAA,QAAkC1G,EAd5B,KACvBjF,SAASoJ,KAAKlJ,UAAUmJ,OAAO,eAe5B+D,GAAgB+oE,EACfA,EAAWluD,KAAI,CAAC2lD,EAAOloD,IACrB,mBAAC,GAAD,CACElX,IAAKo/D,EAAMpsE,GACXosE,MAAOA,EACPx6B,MAAOkjC,IAAkB5wD,EACzBxgB,QAAS0zB,MAGXxrB,EACF,mBAACob,GAAA,EAAD,WACEvjB,MC5DV,IAAenC,EAAAA,EAAAA,KAxCkB,IAQ3B,IAR4B,MAChC8oB,EADgC,YAEhCgK,EAFgC,UAGhC+kB,EAHgC,SAIhC67B,EAJgC,MAKhCpjC,EALgC,qBAMhC9lC,EAAuB,GANS,QAOhCpI,GACI,EACAmR,EAA8B,GAElC,MAAMogE,GAAmB3kE,EAAAA,EAAAA,GAAS6oC,EAAa,eAAcA,EAAU3vC,WAAQ/F,GAW/E,OAVAuxE,EAAWA,GAAYC,EAEnBD,EACFngE,EACE,0BAAK5V,IAAK+1E,EAAUxxE,UAAWsI,EAAsBsG,IAAI,GAAG8iE,SAAS,QAAQp2E,UAAU,UAEhFsrB,IACTvV,GAAUs/B,EAAAA,GAAAA,IAAgB/pB,EAAO,IAIjC,mBAACzD,GAAA,EAAD,CACEirB,MAAOA,EACPpuC,UAAU,iCACV8X,YAAai2D,GAAAA,EACb7tE,QAASA,GAET,2BAAMF,UAAU,SACM,iBAAZqR,GAAuB4H,EAAAA,GAAAA,GAAW5H,GAAWA,GAEvD,0BAAKrR,UAAU,iBACZ4mB,GAAU,0BAAK5mB,UAAU,SAAS4mB,GAClCgK,GAAgB,0BAAK5wB,UAAU,eAAe4wB,QCavD,IAAe9yB,EAAAA,EAAAA,KAjDmB,IAE5B,UACA4N,EACAiqC,EACAg8B,GAL6B,MACjCvjC,EADiC,aAC1BwjC,EAD0B,aACZC,EADY,QACE3xE,GAC/B,EAKA,UAAW2xE,IACbnmE,EAAQmmE,EAAanmE,OAGnB,cAAemmE,IACjBl8B,EAAYk8B,EAAal8B,WAEvB,iBAAkBk8B,GAAgBD,IACpCD,EAAeE,EAAaF,cAG9B,MAAMF,GAAmB3kE,EAAAA,EAAAA,GAAS6kE,EAAgB,eAAcA,EAAa3rE,WAAQ/F,GAC/Em6B,GAAettB,EAAAA,EAAAA,GAASpB,GAAU,QAAOA,EAAMlP,aAC/C8L,GAAuBmoC,EAAAA,GAAAA,GAAmBrW,GAE1CxG,GAAcv0B,EAAAA,EAAAA,KAAY,KAC9Ba,EAAQ2xE,KACP,CAACA,EAAc3xE,IAEA,QAAlB,GAAI0xE,EACF,OACE,0BAAK5xE,UAAU,kCAAkCE,QAAS0zB,GACxD,0BAAKn4B,KAAK,UAACiQ,SAAD,iBAAC,EAAOiqC,iBAAR,aAAC,EAAkBC,UAAY67B,EAAkB7iE,IAAI,KAC/D,0BAAKnT,IAAK2+B,EAAcp6B,WAAWmC,EAAAA,EAAAA,GAAe,aAAcmG,GAAuBsG,IAAI,MAKjG,MAAM,MAAEgY,EAAF,YAASgK,GAAgBihD,EAE/B,OACE,mBAAC,GAAD,CACEzjC,MAAOA,EACPojC,SAAUp3C,IAA0B,QAAT,EAAAub,SAAA,eAAWC,UAAW67B,EACjDnpE,qBAAsBA,EACtBse,MAAOA,EACPgK,YAAaA,EACb1wB,QAAS0zB,OCjCf,IAAe91B,EAAAA,EAAAA,KApBqB,IAAsC,IAArC,MAAEswC,EAAF,aAASyjC,EAAT,QAAuB3xE,GAAc,EACxE,MAAM,MACJ0mB,EADI,IACG5gB,EADH,YACQ4qB,EADR,aACqB+gD,GACvBE,EAEEj+C,GAAcv0B,EAAAA,EAAAA,KAAY,KAC9Ba,EAAQ2xE,KACP,CAACA,EAAc3xE,IAElB,OACE,mBAAC,GAAD,CACEkuC,MAAOA,EACPuH,UAAWg8B,EACX/qD,MAAOA,GAAS5gB,EAChB4qB,YAAaA,EACb1wB,QAAS0zB,OCYf,IAAe91B,EAAAA,EAAAA,KAvBiB,IAE1B,IAF2B,aAC/B+zE,EAD+B,oBACjBvyC,EADiB,QACIp/B,GAC/B,EACJ,MAAM,IAAEytE,GAAQkE,EAEVj+C,GAAcv0B,EAAAA,EAAAA,KAAY,KAC9Ba,EAAQ2xE,KACP,CAACA,EAAc3xE,IAElB,GAAKytE,EAIL,OACE,mBAAC,GAAD,CACEA,IAAKA,EACLruC,oBAAqBA,EACrBt/B,UAAU,sBACVE,QAAS0zB,OCCf,IAAe91B,EAAAA,EAAAA,KApBqB,IAAoD,IAAnD,aAAE+zE,EAAF,oBAAgBvyC,EAAhB,QAAqCp/B,GAAc,EACtF,MAAM,QAAEkxC,GAAYygC,EAEpB,GAAKzgC,EAIL,OACE,mBAACD,GAAA,EAAD,CACEC,QAASA,EACTtxC,KAAMgyE,EAAAA,GACNxyC,oBAAqBA,EACrB1Y,MAAOwqB,EAAQw3B,MACf5oE,UAAU,sBACVE,QAASA,EACT29B,SAAUg0C,OCHV34C,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAK,GAyKjD,IAAer7B,EAAAA,EAAAA,KA5JwB,IASjC,IATkC,OACtC6B,EADsC,MAEtC6wE,EAFsC,UAGtCuB,EAHsC,iBAItCC,EAJsC,SAKtCC,EALsC,SAMtCxwD,EANsC,QAOtCnb,EAPsC,eAQtC4rE,GACI,EACJ,MAAM,SACJx+C,EADI,SAEJy+C,IACEpzE,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,OACtC,aAAEqE,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB7I,OAAQM,OAAWA,GAAW,IAE7Fu+B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAC1BC,QAASxvB,EACTo/D,WApC6B,IAqC7BrU,YAAav6D,IAGTo1B,GAAiB11B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuS,GAAkD,EAClFA,IAAcyjB,EAAAA,GAAAA,WAChB6D,GAAazX,KAEd,CAACA,IAEE6vD,EAAgB9R,GAAsB,CAC1Cn0D,SAAU1L,EACV+/D,6BAA8BqS,EAC9BpS,kBAAmBoS,EACnBnvD,MAAOovD,EACPt6C,SAAUw6C,EACV5rE,QAAAA,KAGF/E,EAAAA,EAAAA,KAAU,KACR49D,GAAsB,uBAAwBmS,EAAeniE,KAC5D,CAACmiE,IAEJ,MAAMc,GAAe/yE,EAAAA,EAAAA,KAAY,KAC/Bq0B,EAAS,CAAEl3B,GAAIg0E,IACf2B,EAAS,CAAE3B,MAAAA,EAAOv8B,MAAOg+B,EAAUI,eAClC,CAAC7B,EAAO98C,EAAUy+C,EAAUF,IAEzBK,GAAuB94D,EAAAA,EAAAA,GAC3Bw4D,MAAAA,GAAAA,EAAkBt0E,OACds0E,OACA/xE,EACJmI,GAEImqE,EAA2BP,IAAqBA,EAAiBt0E,OACnE40E,EACAN,EAEJ,IAAK5pE,KAAkBmqE,MAAAA,GAAAA,EAA0B70E,QAAUu0E,GACzD,OAGF,MAAMjyE,GAAYmC,EAAAA,EAAAA,GAChB,oCACAwE,EAAAA,GAAe,eAAiB,gBAChCorE,GAAa,UACbzpE,GAwEF,OACE,mBAACqa,GAAA,EAAD,CACEnd,IAAK2J,EACLnP,UAAWA,EACX4iB,MAAO2vD,EACPpzC,aAAa,uBACb1B,YAAU,EACV5a,WAAYkS,EACZy9C,cAAe,KAEdP,GA7ED,mBAAC9uD,GAAA,EAAD,CAAUzd,QAAM,EAAC1F,UAAU,wBAAwBE,QAASkyE,GAC1D,2BAAMpyE,UAAU,SAASiyE,EAAUhxE,QA6EpCsxE,MAAAA,OAAA,EAAAA,EAA0B70E,SAvEtB60E,EAA0BtvD,KAAI,CAACwvD,EAAiB/xD,KACrD,OAAQ+xD,EAAgB54D,MACtB,IAAK,MACH,OACE,mBAAC,GAAD,CACErQ,IAAKipE,EAAgBj2E,GACrBq1E,aAAcY,EACdnzC,oBAAqBA,EACrBp/B,QAASgyE,IAIf,IAAK,QACH,OACE,mBAAC,GAAD,CACE1oE,IAAKipE,EAAgBj2E,GACrBo1E,aAAcG,EACdF,aAAcY,EACdvyE,QAASgyE,IAIf,IAAK,UACH,OACE,mBAAC,GAAD,CACE1oE,IAAKipE,EAAgBj2E,GACrBq1E,aAAcY,EACdnzC,oBAAqBA,EACrBp/B,QAASgyE,IAIf,IAAK,QACL,IAAK,OACL,IAAK,OACH,OACE,mBAAC,GAAD,CACE1oE,IAAKipE,EAAgBj2E,GACrB4xC,MAAOkjC,IAAkB5wD,EACzBmxD,aAAcY,EACdvyE,QAASgyE,IAGf,IAAK,UACL,IAAK,QACH,OACE,mBAAC,GAAD,CACE1oE,IAAKipE,EAAgBj2E,GACrB4xC,MAAOkjC,IAAkB5wD,EACzBmxD,aAAcY,EACdvyE,QAASgyE,IAIf,QACE,eCnDV,IAAep0E,EAAAA,EAAAA,KAhGkB,IAM3B,IAN4B,OAChC6B,EADgC,QAEhC2G,EAFgC,OAGhCmE,EAHgC,iBAIhCioE,EAJgC,UAKhCC,GACI,EACJ,MAAM,kBAAEC,IAAsB7zE,EAAAA,EAAAA,MAGxBmmB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAC9BC,GAAYwB,EAAAA,EAAAA,MAAY1B,MAAMC,KAE9BpkB,GAAOC,EAAAA,EAAAA,KAEP4P,GAAepL,EAAAA,EAAAA,IAAuB,OAErCqrE,EAAkBC,EAAkBwD,IAAmBvD,EAAAA,GAAAA,GAAe3vE,EAAQ2G,OAASrG,IAE9FsB,EAAAA,EAAAA,KAAU,KACJ5B,GACFkzE,MAED,CAAClzE,EAAQkzE,IAEZ,MAAMhS,GAAmBxhE,EAAAA,EAAAA,KAAa7C,IACpC8J,IACAssE,EAAkB,CAAEnoE,OAAAA,EAAQqoE,SAAUt2E,MACrC,CAACiO,EAAQnE,EAASssE,IAEfG,EAAsBvT,GAAsB,CAChDn0D,SAAU1L,EACVijB,MAAO+vD,EACPj7C,SAAUmpC,EACVjB,mBAAmB,EACnBH,kCAAkC,EAClCn5D,QAAAA,IAaF,OAVA/E,EAAAA,EAAAA,KAAU,KACR49D,GAAsB,uBAAwB4T,EAAqB5jE,KAClE,CAAC4jE,KAEJxxE,EAAAA,EAAAA,KAAU,KACJoxE,IAAcA,EAAUj1E,QAC1B4I,MAED,CAACqsE,EAAWrsE,IAGb,mBAAC+uD,GAAA,EAAD,CACE11D,OAAQA,EACRY,UAAU,OACVw0D,UAAU,SACVzuD,QAASA,EACTtG,UAAU,aACV4hB,oBAAqBtb,EACrB+pD,aAAe1pD,EAAAA,QAAkC1G,EAAnBmvE,EAC9BM,aAAe/oE,EAAAA,QAAkC1G,EAAnBovE,EAC9BM,mBAAoBhpE,EAAAA,IAEpB,0BAAK3G,UAAU,gBAAgBsC,IAAI,QAAQhD,EAAK,uBAC/C4lB,GAAavB,IAAagvD,MAAAA,OAA1B,EAA0BA,EAAW1vD,KAAI,CAACzmB,EAAIkkB,KAC7C,MAAM3H,GAAOV,EAAAA,EAAAA,IAAS7b,GAAM0oB,EAAU1oB,QAAMyD,EACtC+Y,EAAQD,OAAuB9Y,EAAhB0jB,EAAUnnB,GACzBi5B,EAAW1c,GAAO2c,EAAAA,EAAAA,IAAgB3c,GAAQC,MAAAA,OAA3B,EAA2BA,EAAM4N,MAEtD,OACE,mBAACzD,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,yDACVE,QAAS,IAAM2gE,EAAiBrkE,GAChC4xC,MAAO2kC,IAAwBryD,GAE/B,mBAAC5H,GAAA,EAAD,CACEhZ,KAAK,QACLiZ,KAAMA,EACNC,KAAMA,EACNhZ,WAAWmC,EAAAA,EAAAA,GAAeuwE,IAAqBl2E,GAAM,cAEvD,0BAAKwD,UAAU,QACb,0BAAKA,UAAU,SACb,yBAAIsC,IAAI,QAAQmzB,IAAYxc,EAAAA,GAAAA,GAAWwc,KAEzC,2BAAMz1B,UAAU,YAAY+Y,EACxBzZ,EAAK,4BACLA,EAAK,cAAe0Z,MAAAA,OAAhB,EAAgBA,EAAMwoC,aAAc,gB,eClE1D,MA4HA,IAAe1jD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAC1BuoE,EAAeh6D,IAAQsB,EAAAA,EAAAA,IAAmBtc,EAAQgb,EAAKxc,IAC7D,IAAKwc,IAASg6D,EACZ,MAAO,GAGT,MAAM,MAAEv2C,EAAF,QAAS9H,IAAYsoC,EAAAA,EAAAA,IAAwBj/D,IAAW,IACxD,WAAE+/C,EAAF,SAAcpjC,GAAaga,GAAW,GAE5C,MAAO,CACL3b,KAAAA,EACAg6D,aAAAA,EACAv2C,MAAAA,EACAshB,WAAAA,EACApjC,SAAAA,KAhBc5c,EA5H2B,IAUzC,IAV0C,OAC9C0M,EAD8C,SAE9CC,EAF8C,QAG9CpE,EAH8C,SAI9C+E,EAJ8C,KAK9C2N,EAL8C,aAM9Cg6D,EAN8C,MAO9Cv2C,EAP8C,WAQ9CshB,EAR8C,SAS9CpjC,GACI,EACJ,MAAM,wBACJyiD,EADI,aAEJ5kD,IACEzZ,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCzE,GAAOC,EAAAA,EAAAA,MACbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAOub,EAAaC,IAAWC,EAAAA,GAAAA,GAAkBq7C,EAAyBziD,GAEpEs4D,GAAkBxzE,EAAAA,EAAAA,KAAQ,IACzBg9B,GAAU5a,MAAAA,GAAAA,EAAankB,QAAWs1E,EAIhCnxD,EAAYoB,KAAKzmB,IACtB,MAAMY,EAAU41E,EAAax2E,GAC7B,IAAKY,EACH,OAGF,MAAM81E,EAAa91E,EAAQ2N,UAAWE,EAAAA,EAAAA,KAAWka,EAAAA,EAAAA,MAAa/nB,EAAQ2N,eAAY9K,EAElF,IAAIkzE,EACJ,GAAIn6D,IAAQwW,EAAAA,EAAAA,IAAcxW,GACxBm6D,EAAan6D,OACR,GAAI5b,EAAQg2E,YAAa,CAC9B,MAAM,cAAEC,EAAF,WAAiBhzD,GAAejjB,EAAQg2E,YAC9CD,EAAaE,GAAiBhzD,GAAanV,EAAAA,EAAAA,KAAWia,EAAAA,EAAAA,MAAa9E,QAAcpgB,OAEjFkzE,EAAa/1E,EAAQ2N,UAAWG,EAAAA,EAAAA,KAAWia,EAAAA,EAAAA,MAAa/nB,EAAQ2N,eAAY9K,EAG9E,MAAO,CACL7C,QAAAA,EACA81E,WAAAA,EACAC,WAAAA,EACAjzE,QAAS,IAAMsY,EAAa,CAAE/N,OAAAA,EAAQC,SAAAA,EAAUC,UAAWnO,QAE5D+kB,OAAOra,SA3BD21B,GAAAA,GA4BR,CAACJ,EAAO5a,EAAamxD,EAAch6D,EAAMR,EAAc/N,EAAQC,IAE5DoW,GAAgBqB,EAAAA,GAAAA,GAA0BhT,GAAc,GAAOuR,IACnE,MAAM4yD,EAAcL,MAAAA,OAAH,EAAGA,GAA6B,IAAXvyD,EAAe,EAAIA,GACrD4yD,GACFA,EAAYpzE,YAEb,oBAAoB,GAkCjBqzE,GAAU1xD,MAAAA,OAAA,EAAAA,EAAc,OAAOlH,MAAAA,OAArB,EAAqBA,EAAW,IAEhD,OACE,mBAACgI,GAAA,EAAD,CACEnd,IAAK2J,EACLnP,UAAU,4BACV4iB,MAAOqwD,EACPO,iBAAkB,EAClB3wD,WAAYf,EACZQ,UAAWxB,GAEVyyD,GACC,wBAAG/pE,IAAI,cAAcxJ,UAAU,cAAcsC,IAAI,QAC7Cm6B,EAEkB,IAAfshB,GAAqBk1B,EAAgBv1E,OAEvB,IAAfqgD,EACF,kBAEC,GAAGk1B,EAAgBv1E,SAAWqgD,GAAck1B,EAAgBv1E,yBAJ7D4B,EAAK,yBAFLA,EAAK,gCAUV2zE,EAAgBhwD,KAxDM,IAOrB,IAPsB,QAC1B7lB,EAD0B,WACjB81E,EADiB,WACLC,EADK,QACOjzE,GAM7B,EACJ,MAAM0mB,EAAQusD,GAAa14C,EAAAA,EAAAA,GAAan7B,EAAM6zE,IAAcz9C,EAAAA,EAAAA,IAAgBw9C,GACtEjyE,GAAO65B,EAAAA,EAAAA,GAAqBx7B,EAAMlC,OAAS6C,EAAWw8B,GAE5D,OACE,mBAACtZ,GAAA,EAAD,CACE3Z,IAAKpM,EAAQZ,GACbi3E,eAAgBr2E,EAAQ+b,KACxBnZ,UAAU,gDACVE,QAASA,GAET,mBAAC4Y,GAAA,EAAD,CAAQE,KAAMm6D,EAAYp6D,KAAMm6D,IAChC,0BAAKlzE,UAAU,QACb,0BAAKA,UAAU,SACb,yBAAIsC,IAAI,QAAQskB,IAAS3N,EAAAA,GAAAA,GAAW2N,IACpC,mBAAC8sD,GAAA,EAAD,CAAiBt2E,QAASA,KAE5B,0BAAK4C,UAAU,WAAWsC,IAAI,QAC3BrB,a,eCzGb,MAuFA,IAAenD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA0C,IAAjC,aAAE87D,GAA+B,EACxC,MAAO,CACLuT,KAAKxT,EAAAA,EAAAA,IAAiB77D,EAAQ87D,GAC9B6S,YAAYgH,EAAAA,EAAAA,IAAyB31E,MAJvBD,EArFgC,IAG9C,IAH+C,aACnD+7D,EADmD,oBACrCx6B,EADqC,IAChB+tC,EADgB,WACXV,EADW,gBAEnDiH,EAFmD,cAElCC,GACb,EACJ,MAAM,aAAE7Z,EAAF,iBAAgBC,IAAqBl7D,EAAAA,EAAAA,MAErCO,GAAOC,EAAAA,EAAAA,KACPu0E,EAAUzG,GAAOnmE,QAAQmmE,EAAI95B,eAC7BwgC,EAAoB7sE,QAAQmmE,MAAAA,OAAD,EAACA,EAAKt8B,WAEhC1qB,EAAaC,EAAWC,IAAc5B,EAAAA,GAAAA,MAE7CqvD,EAAAA,GAAAA,IAAY,KACVH,EAAcxtD,KACb,CAACA,EAAawtD,IAEjB,MAAM7C,GAAoBvxE,EAAAA,EAAAA,KAAQ,KAChC,IAAK4tE,EACH,MAAO,GAGT,MAAM4G,GAAmB5G,EAAI6G,QAAU,IAAIjxD,KAAI,QAAC,GAAEzmB,GAAH,SAAYA,KACrD23E,EAAgB9G,EAAIt8B,SAAWs8B,EAAIt8B,SAASxvB,QAAO,QAAC,GAAE/kB,GAAH,SAAay3E,EAAgBx3E,SAASD,MAAO,GAEtG,MAAO,IAAK6wE,EAAI6G,QAAU,MAAQC,GAAezzC,MAAM,EA1B/B,KA2BvB,CAAC2sC,KAEJ9rE,EAAAA,EAAAA,KAAU,MAEHwyE,GAAqB/C,EAAkBtzE,OA/BpB,GAgCtBs8D,EAAa,CAAEF,aAAAA,MAEhB,CAACia,EAAmB/C,EAAkBtzE,OAAQs8D,EAAcF,IAE/D,MAAMsa,GAAiB/0E,EAAAA,EAAAA,KAAY,KACjC46D,EAAiB,CAAEH,aAAAA,MAClB,CAACG,EAAkBH,IAEtB,IAAKuT,EACH,OAGF,MAAMgH,EAAoBrD,EAAkBtzE,OAAS,EAErD,OACE,0BAAK8L,IAAK6jE,EAAI7wE,GAAIwD,UAAU,cAAcsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAClE,0BAAKD,UAAU,sBACb,0BAAKA,UAAU,iBACb,yBAAIA,UAAU,QAAQsC,IAAI,QAAQ+qE,EAAIzmD,OACtC,wBAAG5mB,UAAU,QAAQsC,IAAI,QAAQhD,EAAK,WAAY+tE,EAAI34C,MAAO,OAE/D,mBAAC90B,EAAA,EAAD,CACEI,UAAW8zE,EAAU,gBAAa7zE,EAClCF,MAAM,UACND,KAAK,OACL+qC,MAAI,EACJC,OAAK,EACL5qC,QAASk0E,GAER90E,EAAKw0E,EAAU,qBAAuB,sBAG3C,0BAAK9zE,UAAU,qBACXq0E,GAAqB,mBAAC3lE,EAAA,EAAD,MACtB2lE,GAAqBrD,EAAkB/tD,KAAKmuB,GAC3C,mBAACD,GAAA,EAAD,CACEC,QAASA,EACTtxC,KAAMw0E,EAAAA,GACNh1C,oBAAqBA,EACrB8sC,WAAYO,GAActmD,GAAeutD,EACzC1zE,QAASomB,OAId+tD,GACC,mBAAC,KAAD,CACE10E,OAAQ0mB,EACRmtB,YAAaw9B,EAAkB,GAC/B1qE,QAASigB,SClFb2S,IAAep3B,EAAAA,EAAAA,KAAUq3B,GAAOA,KAAM,KAAO,GA2EnD,IAAer7B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMyc,GAAgB85D,EAAAA,EAAAA,IAA2Bv2E,IAC3C,MAAEy+B,EAAF,UAAS+3C,GAAc/5D,GAAiB,IACxC,SAAEg6D,GAAaz2E,EAAO+yC,SAE5B,MAAO,CACLtU,MAAAA,EACAi4C,YAAaD,EAAShjC,OACtB+iC,UAAAA,KATcz2E,EAzE6B,IAM3C,IAN4C,QAChDuI,EADgD,SAEhD+E,EAFgD,MAGhDoxB,EAHgD,YAIhDi4C,EAJgD,UAKhDF,GACI,EACJ,MAAM,qBAAEG,IAAyB51E,EAAAA,EAAAA,MAG3BoQ,GAAepL,EAAAA,EAAAA,IAAuB,MAEtCzE,GAAOC,EAAAA,EAAAA,MAEN8mB,EAAauuD,IAAkBtzE,EAAAA,EAAAA,KAAS,IAG7Ck9B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAASxvB,EAAcyvB,WAtBzB,MAsE5B,OA5CAr9B,EAAAA,EAAAA,KAAU,KACR23B,IAAa,KACXy7C,WAIJ9zD,EAAAA,EAAAA,IAAexV,EAAU/E,GAuCvB,0BAAKd,IAAK2J,EAAcnP,UAAU,8BAA8BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GArC5F,WACE,QAAcA,IAAVw8B,EAIJ,OAAKA,GAASi4C,EACLA,EAAYzxD,KAAKzmB,GACtB,mBAAC,GAAD,CACEgN,IAAKhN,EACLs9D,aAAct9D,EACd8iC,oBAAqBA,EACrBs0C,gBAAiBvtD,EACjBwtD,cAAee,MAKjBJ,EACGA,EAAU92E,OAIR82E,EAAUvxD,KAAKzmB,GACpB,mBAAC,GAAD,CACEgN,IAAKhN,EACLs9D,aAAct9D,EACd8iC,oBAAqBA,EACrBs0C,gBAAiBvtD,EACjBwtD,cAAee,MATV,wBAAG50E,UAAU,cAAcsC,IAAI,QAA/B,kBAcJ,mBAACkhB,GAAA,EAAD,MAKJisD,QCyBP,IAAe3xE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMyc,GAAgBo6D,EAAAA,EAAAA,IAAuB72E,IACvC,MAAEy+B,EAAF,QAAS9H,GAAYla,GAAiB,IACtC,OAAEhQ,IAAW0jB,EAAAA,EAAAA,IAAyBnwB,IAAW,GACjDgb,EAAOvO,GAASS,EAAAA,EAAAA,IAAWlN,EAAQyM,QAAUxK,EAGnD,MAAO,CACLw8B,MAAAA,EACA9H,QAAAA,EACA3b,KAAAA,EACA87D,cANoB97D,GAAO+7D,EAAAA,EAAAA,IAAoB/2E,EAAQgb,QAAQ/Y,KANjDlC,EAnFyB,IAOvC,IAPwC,QAC5CuI,EAD4C,SAE5C+E,EAF4C,MAG5CoxB,EAH4C,QAI5C9H,EAJ4C,KAK5C3b,EAL4C,cAM5C87D,GACI,EACJ,MAAM,eACJE,EADI,YAEJ7uD,EAFI,kBAGJ8uD,IACEl2E,EAAAA,EAAAA,MAGEoQ,GAAepL,EAAAA,EAAAA,IAAuB,OAG1Cy6B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAASxvB,EAAco/D,WArBzB,OAuBtB,YAAEH,IAAgBzU,EAAAA,EAAAA,IAA4B3gD,EAAM87D,GAEpDI,GAAiB71E,EAAAA,EAAAA,KAAasuE,IAC9BS,GACFjoD,EAAY,CAAEwnD,IAAAA,IAGZhnE,EAAAA,IACFsuE,EAAkB,CAAEx4C,WAAOx8B,MAE5B,CAACmuE,EAAajoD,EAAa8uD,IAExB31E,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GA6BzB,MAAM6uE,EAAajuE,aAAkBjH,IAAVw8B,GAAuB9H,GAAWA,EAAQj3B,QAErE,OACE,0BAAKsC,UAAU,YAAYsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACnD,mBAAC0iB,GAAA,EAAD,CACEnd,IAAK2J,EACLnP,WAAWmC,EAAAA,EAAAA,GAAe,8BAA+BgzE,GAAc,QACvEvyD,MAAO+R,EACPwK,aAAa,aACbq0C,iBA5EkB,GA6ElB/1C,YAAU,EACV5a,WAAYmyD,GAtClB,WACE,QAAc/0E,IAAVw8B,EAIJ,OAAK9H,EAMAA,EAAQj3B,OAMNi3B,EAAQ1R,KAAK0qD,GAClB,mBAAC,GAAD,CACEnkE,IAAKmkE,EAAInxE,GACTmxE,IAAKA,EACLruC,oBAAqBA,EACrBp/B,QAASg1E,MATT,wBAAGl1E,UAAU,cAAcsC,IAAI,QAAQhD,EAAK,gBAN5C,mBAACkkB,GAAA,EAAD,MAiCCisD,SCcT,IAAe3xE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA8C,IAArC,OAAEo3E,GAAmC,EAC5C,MAAM,OAAEC,EAAF,QAAUC,GAAYt3E,EAAOu3E,YAEnC,MAAO,CACLF,OAAQA,MAAAA,OAAF,EAAEA,EAASD,EAAO/N,QACxBv1D,QAASwjE,MAAAA,OAAD,EAACA,EAAUF,EAAO/N,UAAY,MANxBtpE,EA/FiC,IAQ/C,IARgD,KACpDib,EADoD,QAEpD5b,EAFoD,OAGpDg4E,EAHoD,WAIpDI,EAJoD,YAKpDC,EALoD,OAMpDJ,EANoD,OAOpDvjE,GACI,EACJ,MAAM,sBACJ4jE,EADI,SAEJhiD,EAFI,iBAGJiiD,IACE52E,EAAAA,EAAAA,MAEE62E,GAAkBp8D,EAAAA,EAAAA,GAAoBg8D,EAAWK,cAChDz3C,EAAW03C,IAAgBx0E,EAAAA,EAAAA,KAAkB,GAC9Cy0E,EAAkB7uE,QAAQmuE,IAC1B,OAAEhO,EAAF,KAAUpmE,GAASm0E,EACnB91E,GAAOC,EAAAA,EAAAA,MAEbgC,EAAAA,EAAAA,KAAU,KAEHw0E,GAAmBH,IAAoBJ,EAAWK,aACrDH,EAAsB,CACpB18D,KAAAA,EAAMrO,UAAWvN,EAAQZ,GAAI6qE,OAAAA,EAAQv1D,OAAAA,EAAQkkE,MA5B/B,EA4BqDC,mBAAmB,MAIzF,CAACT,EAAWK,YAAaE,IAE5B,MAAMG,GAAsB72E,EAAAA,EAAAA,KAAY,KACtCy2E,GAAa,GACbJ,EAAsB,CACpB18D,KAAAA,EAAMrO,UAAWvN,EAAQZ,GAAI6qE,OAAAA,EAAQv1D,OAAAA,EAAQkkE,MApC3B,OAsCnB,CAACh9D,EAAM08D,EAAuBt4E,EAAQZ,GAAIsV,EAAQu1D,KAErD9lE,EAAAA,EAAAA,KAAU,KACRu0E,GAAa,KACZ,CAACT,IAEJ,MAAMc,GAAoB92E,EAAAA,EAAAA,KAAa7C,IACrCk3B,EAAS,CAAEl3B,GAAAA,IACXm5E,MACC,CAACA,EAAkBjiD,IAetB,OACE,0BAAK1zB,UAAU,qBACb,0BAAKA,UAAU,eACZq1E,EACGA,EAAOpyD,KAAKzmB,GACZ,mBAAC2mB,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,sBACVE,QAAS,IAAMi2E,EAAkB35E,IAEjC,mBAAC4mB,GAAA,EAAD,CACE4V,WAAW,OACX1V,OAAQ9mB,EACRknC,eAAa,EACb5P,kBAAgB,OAIpB,mBAACtQ,GAAA,EAAD,MACH6xD,GAhCP,WACE,MAAMe,EAAkBZ,EAAWK,YAAcR,EAAQ33E,OAEzD,OAAO83E,EAAWK,YArDA,GAqD+BO,EAAkB,GACjE,mBAAC,GAAD,CACE1hD,MAAO0hD,EACPnrC,SAAS,QACT7M,UAAWA,EACXl+B,QAASg2E,IAwBEG,IAEb,0BAAKr2E,UAAU,cAAcsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACrD,2BAAMD,UAAU,eAAesC,IAAI,QAAQrB,GAC3C,2BAAMjB,UAAU,iBAAiBsC,IAAKhD,EAAK2hB,MAAQ,YAAShhB,IAQ7C+P,EAPEwlE,EAAWK,aAOES,EAPWb,GAQhC,GAAMzlE,EAAQsmE,EAAS,KAAKtzE,UAAY,GATjD,OAQR,IAAuBgN,EAAesmE,MC5DtC,IAAex4E,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEu3E,aAAa,OAAE9qE,EAAF,UAAUE,GADnB,aAEJqvB,GACEh8B,EAEJ,OAAKyM,GAAWE,EAOT,CACLqO,MAJW9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAK9BrN,SAJc0N,EAAAA,EAAAA,IAAkB9M,EAAQyM,EAAQE,GAKhDqvB,aAAAA,GATO,KAROj8B,EAzC2B,IAMzC,IAN0C,QAC9CuI,EAD8C,SAE9C+E,EAF8C,KAG9C2N,EAH8C,QAI9C5b,EAJ8C,aAK9C48B,GACI,EACJ,MAAM16B,GAAOC,EAAAA,EAAAA,KAGb,IAFAshB,EAAAA,EAAAA,IAAexV,EAAU/E,IAEpBlJ,IAAY4b,EACf,OAAO,mBAACwK,GAAA,EAAD,MAGT,MAAM,QAAE2jD,EAAF,QAAWxyC,IAAY4hD,EAAAA,EAAAA,IAAen5E,GAC5C,IAAKu3B,EAAQA,QACX,OAGF,MAAM6hD,GAAkBC,EAAAA,GAAAA,IAAqB9hD,EAAQA,QAAS,UAE9D,OACE,0BAAK30B,UAAU,cAAcsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACrD,yBAAID,UAAU,gBAAgBsC,IAAI,SAAQ2W,EAAAA,GAAAA,GAAWkuD,EAAQ3B,SAAU,CAAC,QAAS,QACjF,0BAAKxlE,UAAU,mCACZg6B,GAAgBmtC,EAAQC,QAAQnkD,KAAKmyD,GACpC,mBAAC,GAAD,CACE5rE,IAAM,GAAEpM,EAAQZ,MAAM44E,EAAO/N,SAC7BruD,KAAMA,EACN5b,QAASA,EACTg4E,OAAQA,EACRI,WAAYgB,EAAgBpB,EAAO/N,QACnCoO,YAAa9gD,EAAQ8gD,iBAGvBz7C,GAAgB,mBAACxW,GAAA,EAAD,YCvBpByhB,GAA2B,4BA+JjC,IAAennC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEslB,GAAyB,EAClC,MAAMvK,GAAO9N,EAAAA,EAAAA,IAAWjN,EAAQslB,GAC1BtK,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQslB,IAC1B,SAAExiB,GAAa9C,EAAO04E,WAG5B,MAAO,CACL39D,KAAAA,EAAMjY,SAAAA,EAAUk3B,SAHFC,EAAAA,EAAAA,IAAkBjf,GAAMkf,EAAAA,EAAAA,IAAqBl6B,IAASm6B,EAAAA,EAAAA,IAAuBn6B,OAL7ED,EA7J0B,IAOxC,IAPyC,OAC7CulB,EAD6C,KAE7CvK,EAF6C,SAG7CjY,EAH6C,QAI7Ck3B,EAJ6C,QAK7C1xB,EAL6C,SAM7C+E,GACI,EACJ,MAAM,cACJsrE,EADI,cAEJC,EAFI,gBAGJC,IACE93E,EAAAA,EAAAA,OAEG+3E,EAAoBC,EAAkBC,IAAqBryD,EAAAA,GAAAA,MAC3DqhB,EAAwBC,IAA6B3kC,EAAAA,EAAAA,KAAS,IAC9DskB,EAAOsgB,IAAY5kC,EAAAA,EAAAA,MACpBhC,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAM++B,EAAmBtsB,GAAQA,EAAKqsB,WAAmB,GACnDG,EAAkBxsB,GAAQA,EAAKusB,UAAkB,IAEhDF,EAAWgB,IAAgB9kC,EAAAA,EAAAA,IAAS+jC,IACpCC,EAAUe,IAAe/kC,EAAAA,EAAAA,IAASikC,IAClC0xC,EAAwBC,IAA6B51E,EAAAA,EAAAA,KAAU02B,IAEtEz2B,EAAAA,EAAAA,KAAU,KACR21E,GAA2Bl/C,KAC1B,CAACA,KAEJz2B,EAAAA,EAAAA,KAAU,KACR0kC,GAA0B,GAC1B+wC,MACC,CAACA,EAAmB1zD,KAEvB/hB,EAAAA,EAAAA,KAAU,KACR6kC,EAAaf,GACbgB,EAAYd,KACX,CAACF,EAAkBE,EAAiBxsB,KAEvCxX,EAAAA,EAAAA,KAAU,KACJT,IAAaq2E,EAAAA,GAAAA,WACflxC,GAA0B,GAC1BC,OAASjmC,GACT+2E,OAED,CAACA,EAAmBl2E,IAEvB,MAAM+lC,GAAwBxnC,EAAAA,EAAAA,KAAa+C,IACzCgkC,EAAahkC,EAAE6G,OAAO+G,OACtBi2B,GAA0B,KACzB,IAEGa,GAAuBznC,EAAAA,EAAAA,KAAa+C,IACxCikC,EAAYjkC,EAAE6G,OAAO+G,OACrBi2B,GAA0B,KACzB,IAEGmxC,GAA2B/3E,EAAAA,EAAAA,KAAa+C,IAC5C80E,EAA0B90E,EAAE6G,OAAO+/B,SACnC/C,GAA0B,KACzB,IAEGe,GAAoB3nC,EAAAA,EAAAA,KAAY,KACpC,MAAM4nC,EAAmB7B,EAAUR,OAC7BsC,EAAkB5B,EAASV,OAE5BqC,EAAiBvpC,QACpBwoC,EAASjB,IAGX0xC,EAAc,CACZrzD,OAAAA,EACA0U,SAAUi/C,EACV7xC,UAAW6B,EACX3B,SAAU4B,MAEX,CAAC9B,EAAWE,EAAUqxC,EAAerzD,EAAQ2zD,IAE1CI,GAAsBh4E,EAAAA,EAAAA,KAAY,KACtCu3E,EAAc,CAAEtzD,OAAAA,IAChB0zD,IACAH,MACC,CAACG,EAAmBH,EAAiBD,EAAetzD,IAEvD,IAAKvK,EACH,OAGF,MAAMqlB,EAAYt9B,IAAaq2E,EAAAA,GAAAA,WAE/B,OACE,0BAAKn3E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACojB,GAAA,EAAD,CACEE,OAAQvK,EAAKvc,GACbw8B,WAAW,QACX3V,OAAO,gBACPi0D,cAAY,IAEd,mBAACj1D,GAAA,EAAD,CACE7lB,GAAG,kBACH20B,MAAO7xB,EAAK,iCACZwa,SAAU+sB,EACV72B,MAAOo1B,EACPxf,MAAOA,IAAUqf,GAA2Brf,OAAQ3lB,IAEtD,mBAACoiB,GAAA,EAAD,CACE7lB,GAAG,iBACH20B,MAAO7xB,EAAK,gCACZwa,SAAUgtB,EACV92B,MAAOs1B,IAET,0BAAKtlC,UAAU,gCACb,mBAAC+oC,GAAA,EAAD,CACEC,QAASiuC,EACT9lD,MAAO7xB,EAAK,iBACZizC,SAAUjzC,EAAK23E,EACX,gCACA,kCACJn9D,SAAUs9D,MAIhB,0BAAKp3E,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAU1iB,KAAK,SAASiF,QAAM,EAAC4tB,aAAW,EAACpzB,QAAS62E,GACjDz3E,EAAK,oBAIZ,mBAACgoC,GAAA,EAAD,CACEjuB,QAAS2sB,EACT9lC,QAAS8mC,EACTrtB,SAAUykB,EACVj+B,UAAWb,EAAK,SAEf8+B,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,gBAGjB,mBAACooB,GAAA,EAAD,CACEzoB,OAAQm3E,EACRxwE,QAAS0wE,EACT/1E,KAAM3B,EAAK,2BACX+oB,aAAc/oB,EAAK,iBACnBgpB,eAAgB+uD,EAChBh0C,sBAAoB,SC9ItBk0C,GAAoB,6BAsV1B,IAAez5E,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,YAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IAC1B,SAAE3J,GAAa9C,EAAO04E,WACtBc,EAAmBtwE,QAAO,UAAC8R,EAAKwsB,gBAAN,aAAC,EAAes1B,cAC1C2c,GAAe/oD,EAAAA,EAAAA,IAAiB1V,IAChC,QAAE0+D,GAAY15E,EAAO04E,WAAW36C,SAAStxB,IAAW,GAE1D,MAAO,CACLuO,KAAAA,EACAlY,SAAAA,EACA22E,aAAAA,EACAD,iBAAAA,EACAG,cAAeF,EAAez+D,EAAK4+D,WAAYC,EAAAA,EAAAA,IAAiB7+D,EAAM,cACtE8+D,YAAaL,EAAez+D,EAAK4+D,WAAYC,EAAAA,EAAAA,IAAiB7+D,EAAM,YACpE++D,UAAWN,EAAez+D,EAAK4+D,WAAYC,EAAAA,EAAAA,IAAiB7+D,EAAM,eAClEg/D,gBAAiBN,EACjB19C,aAAch8B,EAAOg8B,aACrBi+C,wBAAuB,UAAEj6E,EAAO2qD,0BAAT,aAAE,EAA2BpnC,QAAQ0T,IAAOA,EAAE6zB,aAAYprD,UAlBnEK,EAhV2B,IAezC,oBAf0C,OAC9C0M,EAD8C,KAE9CuO,EAF8C,SAG9ClY,EAH8C,aAI9C22E,EAJ8C,iBAK9CD,EAL8C,cAM9CG,EAN8C,YAO9CG,EAP8C,UAQ9CC,EAR8C,eAS9C11C,EAT8C,QAU9C/7B,EAV8C,SAW9C+E,EAX8C,gBAY9C2sE,EAZ8C,aAa9Ch+C,EAb8C,wBAc9Ci+C,GACI,EACJ,MAAM,uBACJC,EADI,WAEJC,EAFI,WAGJC,EAHI,aAIJC,EAJI,cAKJC,EALI,gBAMJzB,EANI,SAOJnjD,EAPI,wBAQJ6kD,EARI,qBASJC,IACEz5E,EAAAA,EAAAA,OAEG+3E,EAAoBC,EAAkBC,IAAqBryD,EAAAA,GAAAA,KAC5D8zD,EAAez/D,EAAK4N,MACpB8xD,EAAe1/D,EAAKwsB,UAAYxsB,EAAKwsB,SAAS3e,OAAe,IAE5Dmf,EAAwBC,IAA6B3kC,EAAAA,EAAAA,KAAS,IAC9DslB,EAAOglC,IAAYtqD,EAAAA,EAAAA,IAASm3E,GAAgB,KAC5C5xD,EAAOglC,IAAYvqD,EAAAA,EAAAA,IAASo3E,IAC5BhtE,EAAOy6B,IAAY7kC,EAAAA,EAAAA,OACnBskB,EAAOsgB,IAAY5kC,EAAAA,EAAAA,MACpBq3E,IAAY/rE,EAAAA,EAAAA,IAAkBoM,GAC9ButB,IAAuBz5B,EAAAA,EAAAA,GAAS6rE,IAAW,EAAO5rE,EAAAA,GAAAA,SAClD6rE,GAAgB5/D,EAAKorB,UAAYozC,EACjCl4E,IAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,IAEzB/E,EAAAA,EAAAA,KAAU,KACJy4B,GAAgB+9C,IAClBQ,EAAwB,CAAE9tE,OAAAA,IAC1B8tE,EAAwB,CAAE9tE,OAAAA,EAAQouE,WAAW,IAC7CL,EAAqB,CAAE/tE,OAAAA,OAExB,CAACA,EAAQ8tE,EAAyBv+C,EAAc+9C,EAAWS,KAE9Dj3E,EAAAA,EAAAA,KAAU,KACJT,IAAaq2E,EAAAA,GAAAA,WACflxC,GAA0B,GAC1BC,OAASjmC,MAEV,CAACa,IAEJ,MAAMg4E,IAAsBz5E,EAAAA,EAAAA,KAAY,KACtCgjC,EAAe02C,EAAAA,GAAAA,mBACd,CAAC12C,IAEE22C,IAAwB35E,EAAAA,EAAAA,KAAY,KACxCgjC,EAAe02C,EAAAA,GAAAA,cACd,CAAC12C,IAEE42C,IAAuB55E,EAAAA,EAAAA,KAAY,KACvCgjC,EAAe02C,EAAAA,GAAAA,aACd,CAAC12C,IAEE62C,IAAyB75E,EAAAA,EAAAA,KAAY,KACzCgjC,EAAe02C,EAAAA,GAAAA,oBACd,CAAC12C,IAEE82C,IAA4B95E,EAAAA,EAAAA,KAAY,KAC5CgjC,EAAe02C,EAAAA,GAAAA,sBACd,CAAC12C,IAUE+2C,IAAiB/5E,EAAAA,EAAAA,KAAamkE,IAClCr9B,EAASq9B,GACTv9B,GAA0B,KACzB,IAEGimB,IAAoB7sD,EAAAA,EAAAA,KAAa+C,IACrCwpD,EAASxpD,EAAE6G,OAAO+G,OAClBi2B,GAA0B,KACzB,IAEGozC,IAAoBh6E,EAAAA,EAAAA,KAAa+C,IACrCypD,EAASzpD,EAAE6G,OAAO+G,OAClBi2B,GAA0B,KACzB,IAEGqzC,IAAoBj6E,EAAAA,EAAAA,KAAY,KACpC,MAAMk6E,EAAe3yD,EAAMge,OACrB40C,EAAe3yD,EAAM+d,OAEtB20C,EAAa77E,OAKlBy6E,EAAW,CACT1tE,OAAAA,EACAmc,MAAO2yD,EACP1yD,MAAO2yD,EACP9tE,MAAAA,IARAw6B,EAASqxC,MAUV,CAAC1wD,EAAOpc,EAAQiB,EAAOkb,EAAOuxD,IAE3BsB,IAAqBp6E,EAAAA,EAAAA,KAAY,KACrCgjC,EAAe02C,EAAAA,GAAAA,gBACd,CAAC12C,IAEEq3C,IAAyBr6E,EAAAA,EAAAA,KAAY,KACzC,IAAK2Z,EAAKwsB,SACR,OAGF,MAAM,mBAAEm0C,GAAuB3gE,EAAKwsB,SAEpC0yC,EAAuB,CAAEztE,OAAQuO,EAAKxc,GAAIo9E,WAAYD,MACrD,CAAC3gE,EAAMk/D,IAEJ2B,IAAwB,UAAA7gE,EAAKwsB,gBAAL,mBAAe8qB,wBAAf,eAAiC5yD,SAAU,EAEnEo8E,IAA0Br6E,EAAAA,EAAAA,KAAQ,KACtC,IAAKuZ,EAAK+gE,oBACR,OAAO,EAGT,IAAIh8B,EAAa,CACf,eACA,YACA,aACA,YACA,aACA,cACA,eACAx8B,QACC/X,IAASwP,EAAK+gE,oBAAqBvwE,KACpC9L,OAEF,MAAM,aAAEs8E,EAAF,SAAgBC,GAAajhE,EAAK+gE,oBAOxC,OAJKC,GAAiBC,IACpBl8B,GAAc,GAGTA,IACN,CAAC/kC,IAEEkhE,IAAc,UAAClhE,EAAKwsB,gBAAN,iBAAC,EAAe20C,oBAAhB,aAAC,EAA6Bz8E,SAAW,EAEvD08E,IAAoB/6E,EAAAA,EAAAA,KAAY,KAChCo4E,EACFW,EAAW,CAAE3tE,OAAQuO,EAAKxc,KAChBwc,EAAK4+D,UAGfU,EAAc,CAAE7tE,OAAQuO,EAAKxc,KAF7B67E,EAAa,CAAE5tE,OAAQuO,EAAKxc,KAI9Bw6E,IACAH,IACAnjD,EAAS,CAAEl3B,QAAIyD,MACd,CACDw3E,EAAcz+D,EAAK4+D,UAAW5+D,EAAKxc,GACnCw6E,EAAmBH,EAAiBwB,EAAcC,EAAeF,EAAY1kD,IAG/E,GAAI1a,EAAKwhD,aACP,OAGF,MAAMp8B,GAAYt9B,IAAaq2E,EAAAA,GAAAA,WAE/B,OACE,0BAAKn3E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAAConC,GAAA,EAAD,CACEb,qBAAsBA,GACtBzsB,SAAUs/D,GACVz/D,UAAWg+D,IAEb,mBAACt1D,GAAA,EAAD,CACE7lB,GAAG,cACH20B,MAAO7xB,GAAK,aACZwa,SAAUoyC,GACVl8C,MAAO4W,EACPhB,MAAOA,IAAU2xD,GAAoB3xD,OAAQ3lB,EAC7C0Z,UAAWg+D,IAEb,mBAACt1D,GAAA,EAAD,CACE7lB,GAAG,cACHwD,UAAU,OACVmxB,MAAO7xB,GAAK,0BACZwa,SAAUu/D,GACVrpE,MAAO6W,EACPlN,UAAWg+D,IAEZ3+D,EAAK4+D,WACJ,mBAACz0D,GAAA,EAAD,CAAU1iB,KAAK,OAAOuqC,WAAS,EAAC9qC,QAAS44E,IACvC,2BAAM94E,UAAU,SAASV,GAAK,cAC9B,2BAAMU,UAAU,YAAYgZ,EAAKorB,SAAW9kC,GAAK,cAAgBA,GAAK,iBAGzEk4E,GACC,mBAACr0D,GAAA,EAAD,CACE1iB,KAAK,UACLuqC,WAAS,EACT9qC,QAAS84E,IAET,2BAAMh5E,UAAU,SAASV,GAAK,kBAC9B,2BAAMU,UAAU,YAAYV,GAAK,sBAGrC,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,cACLuqC,WAAS,EACT9qC,QAASg5E,GACTv/D,UAAWm+D,GAEX,2BAAM93E,UAAU,SAASV,GAAK,uBAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5Bw3E,GADH,IA5OoB,IAiPtB,mBAAC32D,GAAA,EAAD,CACE1iB,KAAK,YACLuqC,WAAS,EACT9qC,QAAS+4E,GACTt/D,UAAWg+D,GAEX,2BAAM33E,UAAU,SAASV,GAAK,cAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5Bu3E,GADH,IAC2B5B,IAG7B,mBAAC90D,GAAA,EAAD,CACE1iB,KAAK,QACLuqC,WAAS,EACT9qC,QAASi5E,IAET,2BAAMn5E,UAAU,SAASV,GAAK,0BAC9B,2BAAMU,UAAU,aAAYq6E,EAAAA,GAAAA,IAAcH,MAE3CnC,GACC,mBAAC50D,GAAA,EAAD,CACE1iB,KAAK,OACLP,QAtLe,KACzBmiC,EAAe02C,EAAAA,GAAAA,UAsLL/tC,WAAS,EACTrxB,UAAWq+D,GAEX,2BAAMh4E,UAAU,SAASV,GAAK,0BAC9B,2BAAMU,UAAU,YACbg4E,GAAkBqC,EAAAA,GAAAA,IAAcrC,EAAgBt6E,QAAU4B,GAAK,aAIrE4H,QAAO,UAAC8R,EAAKshE,oBAAN,aAAC,EAAmB58E,SAC1B,mBAACylB,GAAA,EAAD,CACE1iB,KAAK,kBACLP,QA/LgB,KAC1BmiC,EAAe02C,EAAAA,GAAAA,eA+LL/tC,WAAS,GAET,2BAAMhrC,UAAU,SAASV,GAAK,mBAC9B,2BAAMU,UAAU,aACbq6E,EAAAA,GAAAA,IAAcrhE,EAAKshE,aAAc58E,WAK1C,0BAAKsC,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAU1iB,KAAK,QAAQuqC,WAAS,EAAC9qC,QAASu5E,IACxC,2BAAMz5E,UAAU,SAASV,GAAK,iBAC9B,2BAAMU,UAAU,aAAYq6E,EAAAA,GAAAA,IAAa,UAACrhE,EAAKwoC,oBAAN,QAAsB,MAG/Do3B,IAAiB5/D,EAAKwsB,UACtB,0BAAKxlC,UAAU,gCACb,mBAAC+oC,GAAA,EAAD,CACEC,SAAUhwB,EAAKwsB,SAASm0C,mBACxBxoD,MAAO7xB,GAAK,eACZwa,SAAU4/D,GACV//D,UAAWm+D,MAKnB,0BAAK93E,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAU1iB,KAAK,SAASiF,QAAM,EAAC4tB,aAAW,EAACpzB,QAAS62E,GACjDz3E,GAAK,iBAIZ,mBAACgoC,GAAA,EAAD,CACEjuB,QAAS2sB,EACT9lC,QAASo5E,GACT3/D,SAAUykB,GACVj+B,UAAWb,GAAK,SAEf8+B,GACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,gBAGjB,mBAACooB,GAAA,EAAD,CACEzoB,OAAQm3E,EACRxwE,QAAS0wE,EACT5oE,WAAW6K,EAAAA,GAAAA,GACTw+D,IAAiBz+D,EAAK4+D,UAClBt4E,GAAK,2BACLA,GAAK,oCAAqC0Z,EAAK4N,OACnD,CAAC,KAAM,oBAETyB,aAAcovD,IAAiBz+D,EAAK4+D,UAAYt4E,GAAK,cAAgBA,GAAK,qBAC1EgpB,eAAgB8xD,GAChB/2C,sBAAoB,SCxF5B,IAAevlC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAGlC,MAAO,CAAEuO,MAFI9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAEjB2W,cAAepjB,EAAOojB,iBAJrBrjB,EAlPsC,IAOpD,IAPqD,eACzDskC,EADyD,mBAEzDk4C,EAFyD,KAGzDvhE,EAHyD,cAIzDoI,EAJyD,QAKzD9a,EALyD,SAMzD+E,GACI,EACJ,MAAM,8BAAEmvE,IAAkCz7E,EAAAA,EAAAA,OAEnC07E,EAAaC,IAAkBp5E,EAAAA,EAAAA,IAA8B,KAC7Dq5E,EAAuBC,IAA4Bt5E,EAAAA,EAAAA,KAAS,IAC5D88B,EAAW03C,IAAgBx0E,EAAAA,EAAAA,KAAS,GACrChC,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAMu0E,GAA0Bx7E,EAAAA,EAAAA,KAAY,KAC1CgjC,EAAe02C,EAAAA,GAAAA,qBACd,CAAC12C,IAEEy4C,GAA0Bz7E,EAAAA,EAAAA,KAAY,KAC1CgjC,EAAe02C,EAAAA,GAAAA,8BACd,CAAC12C,IAEE04C,GAA6B17E,EAAAA,EAAAA,KAAa2hE,IAC9CuZ,EAAmBvZ,EAAO19C,OAAQ09C,EAAOga,mBAAqB55D,GAC9DihB,EAAe02C,EAAAA,GAAAA,wBACd,CAAC33D,EAAem5D,EAAoBl4C,KAEvC9gC,EAAAA,EAAAA,KAAU,KACRm5E,GAAgB1hE,MAAAA,OAAD,EAACA,EAAM+gE,sBAAwB,IAC9Ca,GAAyB,GACzB12E,YAAW,KACT4xE,GAAa,KA3D0B,OA6DxC,CAAC98D,IAEJ,MAAMiiE,GAAyB57E,EAAAA,EAAAA,KAAa+C,IAC1C,MAAM,KAAE+e,GAAS/e,EAAE6G,OAEnB,SAASiyE,EAA0BlrE,GACjC,OAAOA,QAAQ/P,EAGjBy6E,GAAgB3lC,IAAD,IACVA,EACH,CAAC5zB,GAAO+5D,EAA0BnmC,EAAE5zB,OACvB,iBAATA,GAA2B,CAC7B84D,SAAUiB,EAA0BnmC,EAAE5zB,SAG1Cy5D,GAAyB,KACxB,IAEGO,GAAwB97E,EAAAA,EAAAA,KAAY,KACnC2Z,IAIL88D,GAAa,GACb0E,EAA8B,CAAE/vE,OAAQuO,EAAKxc,GAAI4+E,aAAcX,OAC9D,CAACzhE,EAAMyhE,EAAaD,IAEjBa,GAAoB57E,EAAAA,EAAAA,KAAQ,IAC3BuZ,GAASA,EAAKwsB,UAAaxsB,EAAKwsB,SAAS81C,cAIvCtiE,EAAKwsB,SAAS81C,cAAc59E,OAH1B,GAIR,CAACsb,IAEEuiE,GAAmB97E,EAAAA,EAAAA,KAAQ,IAC1BuZ,GAASA,EAAKwsB,UAAaxsB,EAAKwsB,SAASg2C,QAIvCxiE,EAAKwsB,SAASg2C,QAAQj6D,QAAO,QAAC,aAAE65D,GAAH,SAAsBl0E,QAAQk0E,MAHzD,IAIR,CAACpiE,IAEEyiE,GAAsBp8E,EAAAA,EAAAA,KAAa2hE,IACvC,MAAM,aAAEoa,GAAiBpa,EACzB,IAAKoa,IAAiBpiE,EACpB,OAGF,MAAM,oBAAE+gE,GAAwB/gE,EAEhC,OAAOhc,OAAOg5B,KAAKolD,GAAc95B,QAAO,CAACC,EAAQ/3C,KAC/C,IACG4xE,EAAa5xE,IACVuwE,MAAAA,GAAAA,EAAsBvwE,IACf,eAARA,GAAgC,iBAARA,GAAkC,cAARA,EAErD,OAAO+3C,EAGT,MAAMm6B,EAxHZ,SAAqClyE,GACnC,OAAQA,GACN,IAAK,eACH,MAAO,yBACT,IAAK,YACH,MAAO,8BACT,IAAK,eACH,MAAO,iCACT,IAAK,aACH,MAAO,+BACT,IAAK,YACH,MAAO,8BACT,IAAK,aACH,MAAO,+BACT,IAAK,cACH,MAAO,8BACT,IAAK,cACH,MAAO,8BACT,QACE,QAqGgBmyE,CAA4BnyE,GAE5C,IAAKkyE,EACH,OAAOn6B,EAGT,MAAMq6B,EAAmBt8E,EAAKo8E,GAE9B,MAAQ,GAAEn6B,IAAUA,EAAO7jD,OAA6B,KAAIk+E,IAAxBA,MACnC,MACF,CAAC5iE,EAAM1Z,IAEV,OACE,0BAAKU,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,yBAAIA,UAAU,kBAAkBsC,IAAI,QAAQhD,EAAK,6BAEjD,0BAAKU,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,eACL6nB,SAAUyxC,EAAYoB,aACtB1qD,MAAO7xB,EAAK,wBACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,YACL6nB,SAAUyxC,EAAYsB,UACtB5qD,MAAO7xB,EAAK,6BACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,eACL6nB,SAAUyxC,EAAYT,eAAiBS,EAAYR,SACnD9oD,MAAO7xB,EAAK,gCACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,YACL6nB,SAAUyxC,EAAYuB,UACtB7qD,MAAO7xB,EAAK,6BACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAUyxC,EAAYwB,WACtB9qD,MAAO7xB,EAAK,8BACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,cACL6nB,SAAUyxC,EAAYyB,YACtB/qD,MAAO7xB,EAAK,+BACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,cACL6nB,SAAUyxC,EAAY0B,YACtBhrD,MAAO7xB,EAAK,+BACZw8E,UAAQ,EACRhiE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAUyxC,EAAY2B,WACtBjrD,MAAO7xB,EAAK,8BACZw8E,UAAQ,EACRhiE,SAAUmhE,MAKhB,0BAAKj7E,UAAU,WACb,mBAACmjB,GAAA,EAAD,CACE1iB,KAAK,cACLuqC,WAAS,EACTD,QAAM,EACN7qC,QAAS26E,GAET,2BAAM76E,UAAU,SAASV,EAAK,wBAC9B,2BAAMU,UAAU,YAAYq7E,KAIhC,0BAAKr7E,UAAU,WACb,yBAAIA,UAAU,kBAAkBsC,IAAI,QAAQhD,EAAK,sBAEjD,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,WACLP,QAAS46E,GAERx7E,EAAK,wBAGPi8E,EAAiBt4D,KAAK+9C,GACrB,mBAAC79C,GAAA,EAAD,CACE3Z,IAAKw3D,EAAO19C,OACZtjB,UAAU,wCACVE,QAAS,IAAM66E,EAA2B/Z,IAE1C,mBAAC59C,GAAA,EAAD,CACEE,OAAQ09C,EAAO19C,OACfD,OAAQo4D,EAAoBza,UAOtC,mBAAC15B,GAAA,EAAD,CACEjuB,QAASshE,EACTz6E,QAASi7E,EACTh7E,UAAWb,EAAK,QAChBqa,SAAUykB,GAETA,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,qBC1NvB,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,cAAEojB,GAAkBpjB,EAE1B,MAAO,CAAEojB,cAAAA,KAJOrjB,EAnDoC,IAKlD,UALmD,KACvDib,EADuD,cAEvDoI,EAFuD,OAGvDzhB,EAHuD,QAIvD2G,GACI,EACJ,MAAM,gBACJ+1E,EADI,iBAEJC,IACEv9E,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNgiB,EAAQiD,IAAaljB,EAAAA,EAAAA,IAAS,IAE/BggB,GAAYvd,EAAAA,EAAAA,IAAyB,MAErCw4E,GAAU98E,EAAAA,EAAAA,KAAQ,KAAM,MAC5B,MAAM+8E,IAAsB,UAAAxjE,EAAKwsB,gBAAL,eAAeg2C,UAAW,IACnDl6B,QAAO,CAACm7B,EAAezb,KACjBA,EAAO0b,SAAY1b,EAAO2b,SAAW3b,EAAO19C,SAAWlC,GAC1Dq7D,EAAIvwD,KAAK80C,EAAO19C,QAEXm5D,IACN,IAGCv3D,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAEpC,OAAO6B,EAAAA,EAAAA,IAAkBi3D,EAAoBt3D,EAAW3D,KACvD,WAACvI,EAAKwsB,gBAAN,aAAC,EAAeg2C,QAASp6D,EAAeG,IAErCsiC,GAAmBxkD,EAAAA,EAAAA,KAAaikB,IACpCg5D,EAAiB,CAAE7xE,OAAQuO,EAAKxc,GAAI8mB,OAAAA,IACpChd,MACC,CAAC0S,EAAKxc,GAAI8/E,EAAkBh2E,IAE/B,OACE,mBAAC,GAAD,CACE3G,OAAQA,EACR0hB,cAAek7D,EACfj7D,UAAWA,EACXE,kBAAmBliB,EAAK,oBACxBiiB,OAAQA,EACRG,eAAgB8C,EAChB/C,SAAU46D,EACV16D,mBAAoBkiC,EACpBv9C,QAASA,QCuDf,IAAexI,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IACxBiZ,KAAMwB,GAAclnB,EAAOonB,MAGnC,MAAO,CAAEpM,KAAAA,EAAMkM,UAAAA,EAAW03D,iBAFD5jE,KAAS6+D,EAAAA,EAAAA,IAAiB7+D,EAAM,aAAeA,EAAK4+D,cAJ7D75E,EA7FuC,IAMrD,IANsD,KAC1Dib,EAD0D,UAE1DkM,EAF0D,iBAG1D03D,EAH0D,QAI1Dt2E,EAJ0D,SAK1D+E,GACI,EACJ,MAAM,6BAAEwxE,IAAiC99E,EAAAA,EAAAA,MAEnCO,GAAOC,EAAAA,EAAAA,MACNu9E,EAAuBC,EAAqBC,IAAwBr4D,EAAAA,GAAAA,MAE3E9D,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAM22E,GAAiBx9E,EAAAA,EAAAA,KAAQ,IACxBuZ,GAASA,EAAKwsB,UAAaxsB,EAAKwsB,SAAS81C,cAIvCtiE,EAAKwsB,SAAS81C,cAHZ,IAIR,CAACtiE,IAEEkkE,GAAe79E,EAAAA,EAAAA,KAAa2hE,IAChC,IAAKA,EAAOmc,eACV,OAGF,MAAMC,EAAel4D,EAAU87C,EAAOmc,gBACtC,OAAKC,EAIE99E,EAAK,iBAAiBo2B,EAAAA,EAAAA,IAAgB0nD,SAJ7C,IAKC,CAAC99E,EAAM4lB,IAEJm4D,GAAoBh+E,EAAAA,EAAAA,KAAa2hE,IACrC,GAAKhoD,EAIL,MAAO,CAAC,CACN4N,MAAOtnB,EAAK,WACZmB,KAAM,SACN6yB,aAAa,EACb0vB,QAAS,IAAM65B,EAA6B,CAC1CpyE,OAAQuO,EAAKxc,GACb8mB,OAAQ09C,EAAO19C,OACf83D,aAAc,SAGjB,CAAC97E,EAAM0Z,EAAM6jE,IAEhB,OACE,0BAAK78E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,UAAUsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjD,wBAAGD,UAAU,cAAcV,EAAK,oBAE/B29E,EAAeh6D,KAAK+9C,GACnB,mBAAC79C,GAAA,EAAD,CACE3Z,IAAKw3D,EAAO19C,OACZtjB,UAAU,sBACV0F,QAAM,EACNizB,eAAgB0kD,EAAkBrc,IAElC,mBAAC59C,GAAA,EAAD,CACEE,OAAQ09C,EAAO19C,OACfD,OAAQ65D,EAAalc,QAI1B4b,GACC,mBAACt1C,GAAA,EAAD,CACEjuB,SAAO,EACPnZ,QAAS68E,EACT58E,UAAWb,EAAK,0CAEhB,wBAAGU,UAAU,0BAGhBgZ,GAAQ4jE,GACP,mBAAC,GAAD,CACE5jE,KAAMA,EACNrZ,OAAQm9E,EACRx2E,QAAS02E,WCrEjBM,GAAsB,+BAoR5B,IAAex/E,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IAC1B,SAAE3J,GAAa9C,EAAO04E,WACtB6G,EAAoBr2E,QAAQ8R,MAAAA,OAAD,EAACA,EAAMukE,oBAClC,QAAE7F,GAAY15E,EAAO04E,WAAW36C,SAAStxB,IAAW,GAE1D,MAAO,CACLuO,KAAAA,EACAlY,SAAAA,EACAy8E,kBAAAA,EACA5F,eAAeE,EAAAA,EAAAA,IAAiB7+D,EAAM,cACtC++D,WAAWF,EAAAA,EAAAA,IAAiB7+D,EAAM,eAClCghB,aAAch8B,EAAOg8B,aACrBg+C,gBAAiBN,EACjBO,wBAAuB,UAAEj6E,EAAO2qD,0BAAT,aAAE,EAA2BpnC,QAAQ0T,IAAOA,EAAE6zB,aAAYprD,UAfnEK,EAlR6B,IAa3C,sBAb4C,OAChD0M,EADgD,KAEhDuO,EAFgD,SAGhDlY,EAHgD,kBAIhDy8E,EAJgD,cAKhD5F,EALgD,UAMhDI,EANgD,gBAOhDC,EAPgD,aAQhDh+C,EARgD,wBAShDi+C,EATgD,eAUhD51C,EAVgD,QAWhD/7B,EAXgD,SAYhD+E,GACI,EACJ,MAAM,WACJ8sE,EADI,iBAEJqF,EAFI,gBAGJ3G,EAHI,aAIJwB,EAJI,cAKJC,EALI,SAMJ5kD,EANI,wBAOJ6kD,EAPI,qBAQJC,IACEz5E,EAAAA,EAAAA,MAEE05E,EAAez/D,GAAQA,EAAK4N,OAAe,GAC3C8xD,EAAe1/D,MAAAA,GAAAA,EAAMwsB,UAAYxsB,EAAKwsB,SAAS3e,OAAe,GAC9Dg0C,EAAgB7hD,MAAAA,GAAH,UAAGA,EAAMwsB,gBAAT,aAAG,EAAgBs1B,cAE/Bgc,EAAoBC,EAAkBC,IAAqBryD,EAAAA,GAAAA,MAC3DqhB,EAAwBC,IAA6B3kC,EAAAA,EAAAA,KAAS,IAC9DslB,EAAOglC,IAAYtqD,EAAAA,EAAAA,IAASm3E,IAC5B5xD,EAAOglC,IAAYvqD,EAAAA,EAAAA,IAASo3E,IAC5BhtE,EAAOy6B,IAAY7kC,EAAAA,EAAAA,OACnBskB,EAAOsgB,IAAY5kC,EAAAA,EAAAA,MACpBq3E,EAAY3/D,IAAQpM,EAAAA,EAAAA,IAAkBoM,GACtCutB,IAAuBz5B,EAAAA,EAAAA,GAAS6rE,GAAW,EAAO5rE,EAAAA,GAAAA,SAClDzN,IAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,IAEzB/E,EAAAA,EAAAA,KAAU,KACJy4B,IACFu+C,EAAwB,CAAE9tE,OAAAA,IAC1B8tE,EAAwB,CAAE9tE,OAAAA,EAAQouE,WAAW,IAC7CL,EAAqB,CAAE/tE,OAAAA,OAExB,CAACA,EAAQ8tE,EAAyBv+C,EAAcw+C,KAEnDj3E,EAAAA,EAAAA,KAAU,KACJT,IAAaq2E,EAAAA,GAAAA,WACflxC,GAA0B,GAC1BC,OAASjmC,MAEV,CAACa,IAEJ,MAAMo5E,IAAelhE,MAAAA,GAAD,UAACA,EAAMwsB,gBAAP,iBAAC,EAAgB20C,oBAAjB,aAAC,EAA8Bz8E,SAAW,EAExDo7E,IAAsBz5E,EAAAA,EAAAA,KAAY,KACtCgjC,EAAe02C,EAAAA,GAAAA,mBACd,CAAC12C,IAEE22C,IAAwB35E,EAAAA,EAAAA,KAAY,KACxCgjC,EAAe02C,EAAAA,GAAAA,cACd,CAAC12C,IAEE42C,IAAuB55E,EAAAA,EAAAA,KAAY,KACvCgjC,EAAe02C,EAAAA,GAAAA,aACd,CAAC12C,IAEE82C,IAA4B95E,EAAAA,EAAAA,KAAY,KAC5CgjC,EAAe02C,EAAAA,GAAAA,sBACd,CAAC12C,IAUE+2C,IAAiB/5E,EAAAA,EAAAA,KAAamkE,IAClCr9B,EAASq9B,GACTv9B,GAA0B,KACzB,IAEGimB,IAAoB7sD,EAAAA,EAAAA,KAAa+C,IACrCwpD,EAASxpD,EAAE6G,OAAO+G,OAClBi2B,GAA0B,KACzB,IAEGozC,IAAoBh6E,EAAAA,EAAAA,KAAa+C,IACrCypD,EAASzpD,EAAE6G,OAAO+G,OAClBi2B,GAA0B,KACzB,IAEGw3C,IAAsBp+E,EAAAA,EAAAA,KAAY,KACtC,MAAMk6E,EAAe3yD,EAAMge,OACrB40C,EAAe3yD,EAAM+d,OAEtB20C,EAAa77E,OAKlBy6E,EAAW,CACT1tE,OAAAA,EACAmc,MAAO2yD,EACP1yD,MAAO2yD,EACP9tE,MAAAA,IARAw6B,EAASo3C,MAUV,CAACz2D,EAAOpc,EAAQiB,EAAOkb,EAAOuxD,IAE3BuF,IAAyBr+E,EAAAA,EAAAA,KAAY,KACzCm+E,EAAiB,CAAE/yE,OAAAA,EAAQmvE,WAAY2D,MACtC,CAAC9yE,EAAQ8yE,EAAmBC,IAEzBG,IAAyBt+E,EAAAA,EAAAA,KAAY,KACzCgjC,EAAe02C,EAAAA,GAAAA,sBACd,CAAC12C,IAEEu7C,IAAsBv+E,EAAAA,EAAAA,KAAY,KAClC2Z,EAAK4+D,UACPU,EAAc,CAAE7tE,OAAQuO,EAAKxc,KAE7B67E,EAAa,CAAE5tE,OAAQuO,EAAKxc,KAG9Bw6E,IACAH,IACAnjD,EAAS,CAAEl3B,QAAIyD,MACd,CAAC+Y,EAAK4+D,UAAW5+D,EAAKxc,GAAIw6E,EAAmBH,EAAiBwB,EAAcC,EAAe5kD,IAExFmmD,IAAwB,UAAA7gE,EAAKwsB,gBAAL,mBAAe8qB,wBAAf,eAAiC5yD,SAAU,EAEzE,GAAIsb,EAAKwhD,aACP,OAGF,MAAMp8B,GAAYt9B,IAAaq2E,EAAAA,GAAAA,WAE/B,OACE,0BAAKn3E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAAConC,GAAA,EAAD,CACEb,qBAAsBA,GACtBzsB,SAAUs/D,GACVz/D,UAAWg+D,IAEb,mBAACt1D,GAAA,EAAD,CACE7lB,GAAG,gBACH20B,MAAO7xB,GAAK,oBACZwa,SAAUoyC,GACVl8C,MAAO4W,EACPhB,MAAOA,IAAU03D,GAAsB13D,OAAQ3lB,EAC/C0Z,UAAWg+D,IAEb,mBAACt1D,GAAA,EAAD,CACE7lB,GAAG,gBACHwD,UAAU,OACVmxB,MAAO7xB,GAAK,0BACZwa,SAAUu/D,GACVrpE,MAAO6W,EACPlN,UAAWg+D,IAEZ3+D,EAAK4+D,WACJ,mBAACz0D,GAAA,EAAD,CAAU1iB,KAAK,OAAOuqC,WAAS,EAAC9qC,QAAS44E,IACvC,2BAAM94E,UAAU,SAASV,GAAK,gBAC9B,2BAAMU,UAAU,YAAYgZ,EAAKorB,SAAW9kC,GAAK,cAAgBA,GAAK,iBAG1E,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,UACLuqC,WAAS,EACT9qC,QAAS84E,GACTr/D,UAAWg+D,GAEX,2BAAM33E,UAAU,SAASV,GAAK,eAC9B,2BAAMU,UAAU,YAA4BV,GAAhBu7D,EAAqB,mBAA2B,SAE9E,mBAAC13C,GAAA,EAAD,CACE1iB,KAAK,QACLuqC,WAAS,EACT9qC,QAASi5E,IAET,2BAAMn5E,UAAU,SAASV,GAAK,0BAC9B,2BAAMU,UAAU,YAAYk6E,KAE7BnC,GACC,mBAAC50D,GAAA,EAAD,CACE1iB,KAAK,OACLP,QAvHe,KACzBmiC,EAAe02C,EAAAA,GAAAA,UAuHL/tC,WAAS,EACTrxB,UAAWq+D,GAEX,2BAAMh4E,UAAU,SAASV,GAAK,0BAC9B,2BAAMU,UAAU,YACbg4E,GAAkBqC,EAAAA,GAAAA,IAAcrC,EAAgBt6E,QAAU4B,GAAK,aAIrE4H,QAAO,UAAC8R,EAAKshE,oBAAN,aAAC,EAAmB58E,SAC1B,mBAACylB,GAAA,EAAD,CACE1iB,KAAK,kBACLP,QAhIgB,KAC1BmiC,EAAe02C,EAAAA,GAAAA,eAgIL/tC,WAAS,GAET,2BAAMhrC,UAAU,SAASV,GAAK,sBAC9B,2BAAMU,UAAU,aACbq6E,EAAAA,GAAAA,IAAcrhE,EAAKshE,aAAc58E,UAIxC,mBAACylB,GAAA,EAAD,CACE1iB,KAAK,YACLuqC,WAAS,EACT9qC,QAAS+4E,GACTt/D,UAAWg+D,GAEX,2BAAM33E,UAAU,SAASV,GAAK,cAC9B,2BAAMU,UAAU,WAAWsC,IAAI,QAC5Bu3E,GADH,IAC2B5B,IAG7B,0BAAKj4E,UAAU,gCACb,mBAAC+oC,GAAA,EAAD,CACEC,QAASu0C,EACTpsD,MAAO7xB,GAAK,uBACZwa,SAAU4jE,OAIhB,0BAAK19E,UAAU,WACb,mBAACmjB,GAAA,EAAD,CACE1iB,KAAK,QACLuqC,WAAS,EACT9qC,QAASy9E,IAET,2BAAM39E,UAAU,QAAQsC,IAAI,QAAQhD,GAAK,uBACzC,2BAAMU,UAAU,WAAWsC,IAAI,QAAQhD,GAAK,cAAD,UAAgB0Z,EAAKwoC,oBAArB,QAAqC,EAAG,QAGvF,0BAAKxhD,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAU1iB,KAAK,SAASiF,QAAM,EAAC4tB,aAAW,EAACpzB,QAAS62E,GACjD/9D,EAAK4+D,UAAYt4E,GAAK,iBAAmBA,GAAK,mBAIrD,mBAACgoC,GAAA,EAAD,CACEjuB,QAAS2sB,EACT9lC,QAASu9E,GACT9jE,SAAUykB,GACVj+B,UAAWb,GAAK,SAEf8+B,GACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,gBAGjB,mBAACooB,GAAA,EAAD,CACEzoB,OAAQm3E,EACRxwE,QAAS0wE,EACT/1E,KAAM+X,EAAK4+D,UAAYt4E,GAAK,sBAAwBA,GAAK,qBACzD+oB,aAAcrP,EAAK4+D,UAAYt4E,GAAK,iBAAmBA,GAAK,gBAC5DgpB,eAAgBs1D,GAChBv6C,sBAAoB,S,aCpR5B,MAgKA,IAAevlC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IAC1B,oBAAEy5B,IAAwB25C,EAAAA,EAAAA,IAAiB7/E,EAAQyM,GAEzD,MAAO,CACLuO,KAAAA,EACA+N,WAAWyI,EAAAA,EAAAA,IAAcxW,GACzBlY,SAAU9C,EAAO04E,WAAW51E,SAC5BojC,oBAAAA,EACA/lC,YAAa6a,MAAAA,OAAF,EAAEA,EAAM7a,eAVLJ,EAhKqC,IAQnD,UARoD,KACxDib,EADwD,QAExD1S,EAFwD,SAGxD+E,EAHwD,UAIxD0b,EAJwD,SAKxDjmB,EALwD,oBAMxDojC,EANwD,YAOxD/lC,GACI,EACJ,MAAM,gBACJ2/E,EADI,iBAEJC,EAFI,kBAGJC,EAHI,kBAIJC,IACEl/E,EAAAA,EAAAA,MAEEwoE,EAAWrgE,QAAQ8R,EAAKorB,UACxB85C,EAAW,UAAGllE,EAAKwsB,gBAAR,aAAG,EAAe24C,YAE5BC,EAAaC,IAAkB/8E,EAAAA,EAAAA,IAAsBimE,EAAW,SAAW,YAC3EnjC,EAAUC,IAAe/iC,EAAAA,EAAAA,OACzBg9E,EAA2BC,EAAyBC,IAA4B75D,EAAAA,GAAAA,KAEjF85D,EAAYv3E,QACC,WAAhBk3E,GAA4Bh6C,GAAYF,GACrB,YAAhBk6C,GAA6B7W,IAGnC1mD,EAAAA,EAAAA,IAAexV,EAAU/E,IAEzB/E,EAAAA,EAAAA,KAAU,KACJ68E,IAAgBF,GAClBF,MAED,CAACI,EAAaF,EAAaF,IAE9B,MAAMU,GAAqBr/E,EAAAA,EAAAA,KAAa2Q,IACtCquE,EAAeruE,KACd,IAEG2uE,GAA+Bt/E,EAAAA,EAAAA,KAAa2Q,IAChDiuE,EAAkB,CAChBxzE,OAAQuO,EAAKxc,GACb2B,YAAuB,cAAV6R,MAEd,CAACgJ,EAAKxc,GAAIyhF,IAEPW,GAAav/E,EAAAA,EAAAA,KAAY,KAC7B0+E,EAAiB,CAAE35C,SAA0B,WAAhBg6C,EAA2Bh6C,EAAW,OAClE,CAACg6C,EAAaL,EAAkB35C,IAE7By6C,GAA0Bx/E,EAAAA,EAAAA,KAAY,KAC1Cm/E,IACAR,MACC,CAACQ,EAA0BR,IAExB1+E,GAAOC,EAAAA,EAAAA,KACPu/E,EAAc/3D,EAAY,UAAY,OACtCg4D,EAAch4D,EAAY,UAAY,QAEtCsK,EAAU,CACd,CAAErhB,MAAO,UAAWmhB,MAAO7xB,EAAM,GAAEw/E,YAAuBvsC,SAAUjzC,EAAM,GAAEw/E,iBAC5E,CAAE9uE,MAAO,SAAUmhB,MAAO7xB,EAAM,GAAEw/E,WAAsBvsC,SAAUjzC,EAAM,GAAEw/E,iBAGtEE,EAAoB,CAAC,CACzBhvE,MAAO,UACPmhB,MAAO7xB,EAAK,yCACX,CACD0Q,MAAO,YACPmhB,MAAO7xB,EAAK,2CAGR8+B,EAAYt9B,IAAaq2E,EAAAA,GAAAA,WAE/B,OACE,0BAAKn3E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,UAAUsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjD,yBAAID,UAAU,mBAAmBV,EAAM,GAAEy/E,UACzC,mBAAC3tD,GAAA,EAAD,CACEE,SAAU8sD,EACVj9D,KAAK,eACLkQ,QAASA,EACTvX,SAAU4kE,KAGG,YAAhBN,EACC,0BAAKp+E,UAAU,UAAUsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAChDi+E,EACC,sCACE,mBAACe,GAAA,EAAD,CAAUj5E,IAAKk4E,EAAal+E,UAAU,aAAaiB,KAAMi9E,IACzD,wBAAGl+E,UAAU,eAAesC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACnDX,EAAM,GAAEw/E,qBAGX,mBAAC37D,GAAA,EAAD,CAAU1iB,KAAK,SAASiF,QAAM,EAAC4tB,aAAW,EAACpzB,QAASq+E,GACjDj/E,EAAK,eAER,mBAAC8oB,GAAA,EAAD,CACEzoB,OAAQ2+E,EACRh4E,QAASk4E,EACTv9E,KAAM3B,EAAK,eACX+oB,aAAc/oB,EAAK,gBACnBgpB,eAAgBu2D,EAChBx7C,sBAAoB,KAIxB,mBAAC7f,GAAA,EAAD,OAIJ,0BAAKxjB,UAAU,qBACb,mBAACqnC,GAAD,CACEpD,QAAM,EACND,gBAAiBhrB,EAAKorB,SACtBhG,UAAWA,EACX8F,oBAAqBA,EACrBC,cAAe25C,EACfhkE,SAAUuqB,IAEZ,wBAAGrkC,UAAU,eAAesC,IAAI,QAC7BhD,EAAM,GAAEy/E,qCAIf,0BAAK/+E,UAAU,UAAUsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjD,yBAAID,UAAU,mBACXV,EAAKynB,EAAY,4CAA8C,4CAElE,mBAACqK,GAAA,EAAD,CACEE,SAAUnzB,EAAc,YAAc,UACtCgjB,KAAK,kBACLkQ,QAAS2tD,EACTllE,SAAU6kE,IAEZ,wBAAG3+E,UAAU,gBAEPV,EADHynB,EACQ,2CACA,6CAIf,mBAACugB,GAAA,EAAD,CACEjuB,QAASolE,EACT9kE,SAAUykB,EACVj+B,UAAWb,EAAK,QAChBY,QAAS0+E,GAERxgD,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,qBCqEvB,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IAC1B,iBAAEy0E,EAAkBx7D,KAAMqgC,GAAe/lD,EAAOylB,MAKtD,MAAO,CACLzK,KAAAA,EACA+qC,WAAAA,EACAm7B,iBAAAA,EACAC,WARiBnmE,MAAAA,GAAA,UAAAA,EAAMwsB,gBAAN,SAAgBs1B,cAC/B5vD,EAAAA,EAAAA,IAAWlN,EAAQgb,EAAKwsB,SAASs1B,mBACjC76D,EAOF8mB,UAAW/N,IAAQwW,EAAAA,EAAAA,IAAcxW,MAbnBjb,EA9NgC,IAU9C,IAV+C,KACnDib,EADmD,QAEnD1S,EAFmD,SAGnD+E,EAHmD,OAInDZ,EAJmD,WAKnDs5C,EALmD,WAMnDo7B,EANmD,iBAOnDD,EAPmD,UAQnDn4D,EARmD,eASnDsb,GACI,EACJ,MAAM,wBACJ+8C,EADI,oBAEJC,EAFI,sBAGJC,IACEvgF,EAAAA,EAAAA,OAEGwgF,EAAeC,IAAoBl+E,EAAAA,EAAAA,OACnC81B,EAAe4S,IAAoB1oC,EAAAA,EAAAA,OACnC2oC,EAAmBC,IAAwB5oC,EAAAA,EAAAA,KAAS,GACrD6oC,GAAsB9qC,EAAAA,EAAAA,KAAY,IAAM6qC,GAAqB,IAAO,KACnEu1C,EAAgCC,EAA8BC,IAAiCh7D,EAAAA,GAAAA,MAC/Fi7D,EAA8BC,EAA4BC,IAA+Bn7D,EAAAA,GAAAA,KAC1FrlB,GAAOC,EAAAA,EAAAA,KACPu7D,EAAeqkB,MAAAA,OAAH,EAAGA,EAAY3iF,IAEjCqkB,EAAAA,EAAAA,IAAexV,EAAU/E,IAEzB/E,EAAAA,EAAAA,KAAU,KACR69E,MACC,CAACA,KAEJ79E,EAAAA,EAAAA,KAAU,KACH61B,IACHN,EAAAA,GAAAA,GAAiB,oBAAoBC,KAAKiT,KAE3C,CAAC5S,IAEJ,MAAM2oD,GAA4B1gF,EAAAA,EAAAA,KAAY,KAC5CsgF,IACAL,EAAsB,CAAEU,UAAWj5D,EAAYtc,EAASqwD,IACnD/zC,GACHsb,EAAe02C,EAAAA,GAAAA,WAEhB,CAAC4G,EAA+BL,EAAuBv4D,EAAWtc,EAAQqwD,EAAcz4B,IAErF49C,GAA0B5gF,EAAAA,EAAAA,KAAY,KAC1CygF,IACAT,EAAoB,CAAEW,UAAWv1E,EAAQA,OAAQ80E,MAChD,CAACO,EAA6BT,EAAqB50E,EAAQ80E,IAqJ9D,OACE,0BAAKv/E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,gBACZo3B,GACC,mBAACD,GAAA,EAAD,CACE36B,GAAG,wBACHsD,KAAMogF,EAAAA,GACN9oD,cAAeA,EACfC,KAAM4S,EACNzS,QAAM,EACNC,OAAQ0S,KAIbg1C,GA7FL,8BACE,mBAACh8D,GAAA,EAAD,CACEnjB,UAAU,sBACVytC,UAAQ,GAER,mBAAClqB,GAAA,EAAD,CAAe9Y,OAAQ00E,EAAY3iF,MAErC,mBAAC2mB,GAAA,EAAD,CACE1iB,KAAK,SACLiF,QAAM,EACN4tB,aAAW,EACXpzB,QAASw/E,GAERpgF,EAAKynB,EAAY,wBAA0B,4BAE9C,mBAACqB,GAAA,EAAD,CACEzoB,OAAQ8/E,EACRn5E,QAASq5E,EACTj9D,OAjFJ,0BAAK1iB,UAAU,gBACb,mBAAC8Y,GAAA,EAAD,CACEhZ,KAAK,OACLkZ,KAAMmmE,IAER,0BAAKn/E,UAAU,eACZV,EAAKynB,EAAY,wBAA0B,6BA4E5C3Y,WAAW6K,EAAAA,GAAAA,GACT3Z,EAAKynB,EAAY,+BAAiC,6BAA8Bo4D,EAAYv4D,OAC5F,CAAC,KAAM,oBAETyB,aAAc/oB,EAAKynB,EAAY,wBAA0B,2BACzDuB,eAAgBy3D,EAChB18C,sBAAoB,MAqElB87C,GA7DN,8BACE,wBAAGn/E,UAAU,eAAesC,IAAI,QAAQhD,EAAK,0BAE7C,0BAAK6gF,eAAa,GAChB,mBAACh9D,GAAA,EAAD,CACE3Z,IAAI,eACJ/I,KAAK,QACLiF,QAAM,EACN+tE,cAAe,EACfzzE,UAAU,mBAETV,EAAK,0BAEP4/E,EACCA,EAAiBj8D,KAAI,CAACzmB,EAAI0mB,IACxB,mBAACC,GAAA,EAAD,CACE3Z,IAAKhN,EACLi3E,cAAevwD,EAAI,EACnBljB,UAAU,kCACVE,QAAS,KAzHrBs/E,EA0HgChjF,GAzHhCqjF,MA4HY,mBAACt8D,GAAA,EAAD,CAAe9Y,OAAQjO,OAI3B,mBAACkhC,GAAA,EAAD,CAAcl0B,IAAI,gBAAgBiqE,cAAe,EAAGxyE,KAAK,gCAG7D,wBAAGjB,UAAU,yBAAyBsC,IAAI,QAAQhD,EAAK,2BACvD,mBAAC8oB,GAAA,EAAD,CACEzoB,OAAQigF,EACRt5E,QAASw5E,EACTp9D,OAtHR,WACE,MAAM09D,EAAcr8B,EAAWw7B,GAE/B,GAAKa,EAIL,OACE,0BAAKpgF,UAAU,gBACb,mBAAC8Y,GAAA,EAAD,CACEhZ,KAAK,OACLkZ,KAAMonE,IAER,0BAAKpgF,UAAU,eACZV,EAAK,uCAwGE+gF,GACRjyE,UAnGR,WACE,MAAMgyE,EAAcr8B,EAAWw7B,GAE/B,GAAKa,EAIL,OAAIA,EAAYE,gBACPrnE,EAAAA,GAAAA,GACJ,yBAAwBmnE,EAAYx5D,sCAAsC5N,EAAM4N,WACjF,CAAC,KAAM,qBAQJ3N,EAAAA,GAAAA,GAEJ,yBAAwBmnE,EAAYx5D,sCAAsC5N,EAAM4N,kFACjF,CAAC,KAAM,oBA8EQ25D,GACXl4D,aAAc/oB,EAAK,uBACnBgpB,eAAgB23D,EAChBO,mBAAiB,YC2B3B,IAAe1iF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA6D,IAApD,OAAEyM,EAAF,wBAAUg2E,GAA0C,EAC3D,MAAMznE,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAGhC,MAAO,CAAEuO,KAAAA,EAAM0nE,sBAFe1nE,EAAK4+D,WAAa6I,MAHhC1iF,EAhO0C,IAOxD,IAPyD,KAC7Dib,EAD6D,qBAE7D2nE,EAF6D,eAG7Dt+C,EAH6D,oBAI7Dq+C,EAJ6D,QAK7Dp6E,EAL6D,SAM7D+E,GACI,EACJ,MAAM,6BAAEwxE,IAAiC99E,EAAAA,EAAAA,OAElC07E,EAAaC,IAAkBp5E,EAAAA,EAAAA,IAA8B,KAC7Dq5E,EAAuBC,IAA4Bt5E,EAAAA,EAAAA,KAAS,IAC5D88B,EAAW03C,IAAgBx0E,EAAAA,EAAAA,KAAS,IACpCs/E,EAA6BC,EAA2BC,IAA8Bn8D,EAAAA,GAAAA,KACvFrlB,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAMy6E,GAAqBthF,EAAAA,EAAAA,KAAQ,KACjC,GAAKuZ,GAASA,EAAKwsB,UAAaxsB,EAAKwsB,SAASg2C,QAI9C,OAAOxiE,EAAKwsB,SAASg2C,QAAQjmD,MAAK,QAAC,OAAEjS,GAAH,SAAgBA,IAAWq9D,OAC5D,CAAC3nE,EAAM2nE,KAEVp/E,EAAAA,EAAAA,KAAU,KACJyX,MAAAA,GAAAA,EAAMwsB,UAAYm7C,IAAyBI,GAC7C1+C,EAAe02C,EAAAA,GAAAA,oBAEhB,CAAC//D,EAAMqpB,EAAgB0+C,EAAoBJ,KAE9Cp/E,EAAAA,EAAAA,KAAU,KACRm5E,GAAgBqG,MAAAA,OAAD,EAACA,EAAoB3F,gBAAkBpiE,MAAAA,OAAvC,EAAuCA,EAAM+gE,sBAAwB,IACpFa,GAAyB,GACzB9E,GAAa,KACZ,CAAC98D,EAAM+nE,IAEV,MAAM9F,GAAyB57E,EAAAA,EAAAA,KAAa+C,IAC1C,MAAM,KAAE+e,GAAS/e,EAAE6G,OAEnB,SAASiyE,EAA0BlrE,GACjC,OAAOA,QAAQ/P,EAGjBy6E,GAAgB3lC,IAAD,IACVA,EACH,CAAC5zB,GAAO+5D,EAA0BnmC,EAAE5zB,OACvB,iBAATA,GAA2B,CAC7B84D,SAAUiB,EAA0BnmC,EAAE5zB,SAG1Cy5D,GAAyB,KACxB,IAEGO,GAAwB97E,EAAAA,EAAAA,KAAY,KACnC2Z,GAAS2nE,IAId7K,GAAa,GACb+G,EAA6B,CAC3BpyE,OAAQuO,EAAKxc,GACb8mB,OAAQq9D,EACRvF,aAAcX,OAEf,CAACzhE,EAAM2nE,EAAsBlG,EAAaoC,IAEvCmE,GAAqB3hF,EAAAA,EAAAA,KAAY,KAChC2Z,GAAS2nE,GAId9D,EAA6B,CAC3BpyE,OAAQuO,EAAKxc,GACb8mB,OAAQq9D,EACRvF,aAAc,CACZ6F,cAAc,OAGjB,CAACjoE,EAAM2nE,EAAsB9D,IAE1BqE,GAAuB7hF,EAAAA,EAAAA,KAAamK,KACpCk3E,MAIC1nE,IAASA,EAAK+gE,sBAIZ/gE,EAAK+gE,oBAAoBvwE,IAC/B,CAACwP,EAAM0nE,IAEV,GAAKK,EAIL,OACE,0BAAK/gF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAUsqB,UAAQ,EAACztC,UAAU,uBAC3B,mBAACojB,GAAA,EAAD,CAAiBE,OAAQy9D,EAAmBz9D,UAG9C,yBAAItjB,UAAU,uBAAuBsC,IAAI,QAAQhD,EAAK,0BAEtD,0BAAKU,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,eACL6nB,SAAUyxC,EAAYoB,aACtB1qD,MAAO7xB,EAAK,wBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,gBAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,YACL6nB,SAAUyxC,EAAYsB,UACtB5qD,MAAO7xB,EAAK,6BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,aAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,eACL6nB,SAAUyxC,EAAYT,eAAiBS,EAAYR,SACnD9oD,MAAO7xB,EAAK,gCACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,gBAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,YACL6nB,SAAUyxC,EAAYuB,UACtB7qD,MAAO7xB,EAAK,6BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,aAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAUyxC,EAAYwB,WACtB9qD,MAAO7xB,EAAK,8BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,cAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,cACL6nB,SAAUyxC,EAAYyB,YACtB/qD,MAAO7xB,EAAK,+BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,eAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,cACL6nB,SAAUyxC,EAAY0B,YACtBhrD,MAAO7xB,EAAK,+BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,eAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAUyxC,EAAY2B,WACtBjrD,MAAO7xB,EAAK,8BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,cAC/BpnE,SAAUmhE,OAKdyF,GACA,0BAAK1gF,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAU1iB,KAAK,cAAciF,QAAM,EAAC4tB,aAAW,EAACpzB,QAAS2gF,GACtDvhF,EAAK,4BAMd,mBAACgoC,GAAA,EAAD,CACEjuB,QAASshE,EACTz6E,QAASi7E,EACTh7E,UAAWb,EAAK,QAChBqa,SAAUykB,GAETA,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,gBAIjB,mBAACooB,GAAA,EAAD,CACEzoB,OAAQihF,EACRt6E,QAASw6E,EACT7/E,KAAK,oEACLonB,aAAa,SACbC,eAAgB04D,EAChB39C,sBAAoB,SCnH5B,IAAevlC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAEhC,MAAO,CACLuO,KAAAA,EACAoI,cAAepjB,EAAOojB,cACtB2F,WAAWyI,EAAAA,EAAAA,IAAcxW,MAPXjb,EA1GwC,IAQtD,IARuD,KAC3Dib,EAD2D,UAE3D+N,EAF2D,cAG3D3F,EAH2D,eAI3DihB,EAJ2D,mBAK3Dk4C,EAL2D,QAM3Dj0E,EAN2D,SAO3D+E,GACI,EACJ,MAAM/L,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAMzB,MAAM6zE,GAAe16E,EAAAA,EAAAA,KAAQ,IACtBuZ,EAAKwsB,UAAaxsB,EAAKwsB,SAAS20C,aAI9BnhE,EAAKwsB,SAAS20C,aAAaj9C,MAAK,CAACC,EAAGC,IACrCD,EAAEw/C,SACI,EACCv/C,EAAEu/C,QACJ,EAGF,IAVA,IAYR,CAAC3jE,IAEEmoE,GAAyB9hF,EAAAA,EAAAA,KAAa2hE,IAC1CuZ,EAAmBvZ,EAAO19C,OAAQ09C,EAAOga,mBAAqB55D,GAC9DihB,EAAe02C,EAAAA,GAAAA,mBACd,CAAC33D,EAAem5D,EAAoBl4C,IAEjC++C,GAAsB/hF,EAAAA,EAAAA,KAAY,KACtCgjC,EAAe02C,EAAAA,GAAAA,kBACd,CAAC12C,IAEEg/C,GAAkBhiF,EAAAA,EAAAA,KAAa2hE,IACnC,GAAIA,EAAO2b,QACT,OAAOr9E,EAAK,kBAId,MAAM4lB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAC9B49D,EAAiBtgB,EAAOga,iBAAmB91D,EAAU87C,EAAOga,uBAAoB/6E,EAEtF,OAAIqhF,EACKhiF,EAAK,uBAAuBo2B,EAAAA,EAAAA,IAAgB4rD,IAG9ChiF,EAAK,kBACX,CAACA,IAEJ,OACE,0BAAKU,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACmjB,GAAA,EAAD,CACE1iB,KAAK,SACLuqC,WAAS,EACT9qC,QApDV,WACEmiC,EAAe02C,EAAAA,GAAAA,sBAqDP,2BAAM/4E,UAAU,SAASV,EAAK,aAC9B,2BAAMU,UAAU,YAAYV,EAAKynB,EAAY,4BAA8B,yBAI/E,0BAAK/mB,UAAU,UAAUsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjD,wBAAGD,UAAU,aAAasC,IAAI,QAC3BykB,EACG,8DACA,6DAGLozD,EAAal3D,KAAK+9C,GACjB,mBAAC79C,GAAA,EAAD,CACE3Z,IAAKw3D,EAAO19C,OACZtjB,UAAU,sBACVE,QAAS,IAAMihF,EAAuBngB,IAEtC,mBAAC59C,GAAA,EAAD,CACEE,OAAQ09C,EAAO19C,OACfD,OAAQg+D,EAAgBrgB,GACxBt9B,eAAa,OAKnB,mBAAC4D,GAAA,EAAD,CACEjuB,SAAO,EACPnZ,QAASkhF,EACTjhF,UAAWb,EAAK,oCAEhB,wBAAGU,UAAU,iCCqBzB,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAGlC,MAAO,CAAEuO,MAFI9N,EAAAA,EAAAA,IAAWlN,EAAQyM,MAFhB1M,EA9HwC,IAAiC,IAAhC,KAAEib,EAAF,QAAQ1S,EAAR,SAAiB+E,GAAe,EAC3F,MAAM/L,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAM6zE,GAAe16E,EAAAA,EAAAA,KAAQ,IACtBuZ,GAASA,EAAKwsB,UAAaxsB,EAAKwsB,SAAS20C,aAIvCnhE,EAAKwsB,SAAS20C,aAAaj9C,MAAK,CAACC,EAAGC,IACrCD,EAAEw/C,SACI,EACCv/C,EAAEu/C,QACJ,EAGF,IAVA,IAYR,CAAC3jE,IAEEqoE,GAAkBhiF,EAAAA,EAAAA,KAAa2hE,GAC/BA,EAAO2b,QACFr9E,EAAK,kBAGPA,EAAK,iBACX,CAACA,IAEJ,OACE,0BAAKU,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,0BAA0BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjE,yBAAID,UAAU,kBAAkBsC,IAAI,QAApC,WAEA,0BAAKtC,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,qBACZwa,cAAU7Z,KAGd,0BAAKD,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,2BACZwa,cAAU7Z,KAGd,0BAAKD,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,4BACZwa,cAAU7Z,KAGd,0BAAKD,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,6BACZwa,cAAU7Z,KAGd,0BAAKD,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,iCACZwa,cAAU7Z,KAGd,0BAAKD,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,gCACZwa,cAAU7Z,KAGd,0BAAKD,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,gCACZwa,cAAU7Z,MAKhB,0BAAKD,UAAU,0BAA0BsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GACjE,yBAAID,UAAU,kBAAkBsC,IAAI,QAAQhD,EAAK,6BAEjD,0BAAKU,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,SAAS,EACT7X,MAAO7xB,EAAK,qBACZwa,cAAU7Z,KAIbk6E,EAAal3D,KAAK+9C,GACjB,mBAAC79C,GAAA,EAAD,CACE3Z,IAAKw3D,EAAO19C,OACZtjB,UAAU,uCACVE,aAASD,EACTyF,QAAM,GAEN,mBAACqjC,GAAA,EAAD,CAAU5X,MAAM,GAAG6X,SAAS,IAC5B,mBAAC5lB,GAAA,EAAD,CACEE,OAAQ09C,EAAO19C,OACfD,OAAQg+D,EAAgBrgB,GACxBt9B,eAAa,cCgO7B,IAAe5lC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA6D,IAApD,OAAEyM,EAAF,wBAAUg2E,GAA0C,EAC3D,MAAMznE,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IACxBiZ,KAAMwB,GAAclnB,EAAOonB,OAC7B,cAAEhE,GAAkBpjB,EAI1B,MAAO,CACLgb,KAAAA,EACAkM,UAAAA,EACA9D,cAAAA,EACA2F,WAPgByI,EAAAA,EAAAA,IAAcxW,GAQ9B0nE,sBAP4B1nE,EAAK4+D,WAAa6I,GAQ9Cc,cAAevoE,EAAKwoE,eAdNzjF,EAjUsC,IAYpD,UAZqD,WACzD0jF,EADyD,eAEzDC,EAFyD,cAGzDH,EAHyD,eAIzDl/C,EAJyD,KAKzDrpB,EALyD,UAMzDkM,EANyD,cAOzD9D,EAPyD,UAQzD2F,EARyD,oBASzD25D,EATyD,QAUzDp6E,EAVyD,SAWzD+E,GACI,EACJ,MAAM,gBAAEs2E,IAAoB5iF,EAAAA,EAAAA,OAErB07E,EAAaC,IAAkBp5E,EAAAA,EAAAA,IAA6B,KAC5DqsC,EAAWi0C,IAAgBtgF,EAAAA,EAAAA,IAAS4F,QAAQu6E,KAC5CrjD,EAAW03C,IAAgBx0E,EAAAA,EAAAA,KAAS,IACpCugF,EAAiCC,EAA+BC,IAAkCp9D,EAAAA,GAAAA,MAClGq9D,EAAaC,IAAkB3gF,EAAAA,EAAAA,IAAS,IACzChC,GAAOC,EAAAA,EAAAA,MAEbshB,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAMy6E,GAAqBthF,EAAAA,EAAAA,KAAQ,KAAM,QACvC,MAAMyiF,EAAmB,UAAGlpE,EAAKwsB,gBAAR,iBAAG,EAAe20C,oBAAlB,aAAG,EAA6B5kD,MAAK,QAAC,OAAEjS,GAAH,SAAgBA,IAAWo+D,KAIzF,IAAID,IAAeS,GAAwBR,EAA3C,CAIA,GAAID,EAAY,CACd,MAAM1oE,GAAOoM,EAAAA,EAAAA,MAAYC,MAAM1B,KAAKg+D,GAEpC,OAAO3oE,EAAO,CACZuK,OAAQvK,EAAKvc,GACbglF,YAAaD,EACbS,YAAa1iF,EAAK,gBAClBq9E,SAAS,EACT3B,sBAAkB/6E,QAChBA,EAGN,OAAOiiF,KACN,WAAClpE,EAAKwsB,gBAAN,aAAC,EAAe20C,aAAcoH,EAAeE,EAAYniF,EAAMoiF,KAElEngF,EAAAA,EAAAA,KAAU,KACJyX,MAAAA,GAAAA,EAAMwsB,UAAYk8C,IAAmBX,GACvC1+C,EAAe02C,EAAAA,GAAAA,sBAEhB,CAAC//D,EAAMqpB,EAAgB0+C,EAAoBW,KAE9CngF,EAAAA,EAAAA,KAAU,KACRm5E,GAAeqG,MAAAA,OAAA,EAAAA,EAAoBS,cAAe,IAClDS,IAAgBlB,MAAAA,OAAA,EAAAA,EAAoBiB,cAAe,IAAIhiC,OAAO,EA1DlC,KA2D5B4hC,EAAa16E,QAAQu6E,IACrB3L,GAAa,KACZ,CAACyL,EAAeE,EAAYV,IAE/B,MAAM9F,GAAyB57E,EAAAA,EAAAA,KAAa+C,IAC1C,MAAM,KAAE+e,GAAS/e,EAAE6G,OAMnByxE,GAAgB3lC,IAAD,UACVA,EACH,CAAC5zB,IANgCnR,EAMC+kC,EAAE5zB,IAL7BnR,QAAQ/P,IADjB,IAAmC+P,KAQnC4xE,GAAa,KACZ,IAEGzG,GAAwB97E,EAAAA,EAAAA,KAAY,KACnCqiF,IAIL5L,GAAa,GACb6L,EAAgB,CACdl3E,OAAQuO,EAAKxc,GACb8mB,OAAQo+D,EACRF,YAAa/G,EACbuH,YAAAA,OAED,CAACN,EAAgBC,EAAiB3oE,EAAKxc,GAAIi+E,EAAauH,IAErDG,GAAqB9iF,EAAAA,EAAAA,KAAY,KAChCqiF,IAILC,EAAgB,CACdl3E,OAAQuO,EAAKxc,GACb8mB,OAAQo+D,EACRF,YAAa,KAEfO,OACC,CAAC/oE,EAAKxc,GAAIulF,EAAgCL,EAAgBC,IAEvDT,GAAuB7hF,EAAAA,EAAAA,KAAamK,MACpCklB,EAAAA,EAAAA,IAAiB1V,KAIjB0nE,GAAwB1nE,EAAKwoE,aAIzBxoE,EAAKwoE,YAAah4E,KACzB,CAACwP,EAAM0nE,IAEJ0B,GAAe3iF,EAAAA,EAAAA,KAAQ,KAC3B,GAAIgiF,IAAeV,EACjB,OAGF,GAAIA,EAAmBpE,QACrB,OAAOr9E,EAAK,kBAGd,MAAMgiF,EAAiBP,EAAmB/F,iBACtC91D,EAAU67D,EAAmB/F,uBAC7B/6E,EAEJ,OAAIqhF,EACKhiF,EAAK,uBAAuBo2B,EAAAA,EAAAA,IAAgB4rD,IAG9ChiF,EAAK,kBACX,CAACmiF,EAAYV,EAAoB77D,EAAW5lB,IAEzC+iF,GAA0BhjF,EAAAA,EAAAA,KAAa+C,IAC3C,MAAM,MAAE4N,GAAU5N,EAAE6G,OACpBg5E,EAAejyE,GACf4xE,GAAa,KACZ,IAEH,GAAKb,EAIL,OACE,0BAAK/gF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACmjB,GAAA,EAAD,CAAUsqB,UAAQ,EAACztC,UAAU,uBAC3B,mBAACojB,GAAA,EAAD,CACEE,OAAQy9D,EAAmBz9D,OAC3BD,OAAQ++D,EACR1+C,eAAa,KAIjB,yBAAI1jC,UAAU,uBAAuBsC,IAAI,QAAQhD,EAAK,uBAEtD,0BAAKU,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,QAAS9hC,QAAQuzE,EAAY2B,YAC7BjrD,MAAO7xB,EAAKynB,EAAY,6BAA+B,4BACvD+0D,UAAQ,EACRniE,SAAUunE,EAAqB,cAC/BpnE,SAAUmhE,KAGbl0D,GACC,0BAAK/mB,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,eACL6nB,QAAS9hC,QAAQuzE,EAAY6H,cAC7BnxD,MAAO7xB,EAAK,yBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,gBAC/BpnE,SAAUmhE,KAIfl0D,GACC,0BAAK/mB,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,eACL6nB,QAAS9hC,QAAQuzE,EAAY8H,cAC7BpxD,MAAO7xB,EAAK,yBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,gBAC/BpnE,SAAUmhE,KAIhB,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,iBACL6nB,QAAS9hC,QAAQuzE,EAAY3rD,gBAC7BqC,MAAO7xB,EAAKynB,EAAY,0BAA4B,gCACpD+0D,UAAQ,EACRniE,SAAUunE,EAAqB,kBAC/BpnE,SAAUmhE,MAGZl0D,GACA,0BAAK/mB,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,WACL6nB,QAAS9hC,QAAQuzE,EAAY+H,UAC7BrxD,MAAO7xB,EAAK,qBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,YAC/BpnE,SAAUmhE,KAIhB,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,cACL6nB,QAAS9hC,QAAQuzE,EAAYyB,aAC7B/qD,MAAO7xB,EAAK,qBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,eAC/BpnE,SAAUmhE,MAGZl0D,GACA,0BAAK/mB,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,cACL6nB,QAAS9hC,QAAQuzE,EAAY0B,aAC7BhrD,MAAO7xB,EAAK,wBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,eAC/BpnE,SAAUmhE,KAIhB,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,YACL6nB,QAAS9hC,QAAQuzE,EAAYgI,WAC7BtxD,MAAO7xB,EAAK,sBACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,aAC/BpnE,SAAUmhE,KAGd,0BAAKj7E,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,aACL6nB,QAAS9hC,QAAQuzE,EAAYiI,YAC7BvxD,MAAO7xB,EAAK,2BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,cAC/BpnE,SAAUmhE,MAGZl0D,GACA,0BAAK/mB,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,YACL6nB,QAAS9hC,QAAQuzE,EAAYkI,WAC7BxxD,MAAO7xB,EAAK,4BACZw8E,UAAQ,EACRniE,SAAUunE,EAAqB,aAC/BpnE,SAAUmhE,KAKfyF,GACC,wBAAG1gF,UAAU,oBAAoBsC,IAAI,QAClChD,EAAK,kCAIRynB,GACA,mBAAC1E,GAAA,EAAD,CACE7lB,GAAG,cACH20B,MAAO7xB,EAAK,iBACZwa,SAAUuoE,EACVryE,MAAOgyE,EACProE,SAAU+mE,EACVkC,UA5RkB,KAgSrBxhE,IAAkBsgE,IAAmBhB,IAAwBe,GAC5D,mBAACt+D,GAAA,EAAD,CAAU1iB,KAAK,SAASiF,QAAM,EAAC4tB,aAAW,EAACpzB,QAAS4hF,GACjDxiF,EAAK,2BAMd,mBAACgoC,GAAA,EAAD,CACEjuB,QAASs0B,EACTztC,QAASi7E,EACTh7E,UAAWb,EAAK,QAChBqa,SAAUykB,GAETA,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,iBAIfyhF,GACA,mBAACr5D,GAAA,EAAD,CACEzoB,OAAQkiF,EACRv7E,QAASy7E,EACT9gF,KAAK,+CACLonB,aAAc/oB,EAAK,yBACnBgpB,eAAgB65D,EAChB9+C,sBAAoB,SClK9B,IAAevlC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,YAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IACxBigD,aAAcC,GAAqB3sD,EAAOonB,MAC5Co2D,EAAUxiE,MAAAA,GAAH,UAAGA,EAAMwsB,gBAAT,aAAG,EAAgBg2C,QAC1BrB,EAAenhE,MAAAA,GAAH,UAAGA,EAAMwsB,gBAAT,aAAG,EAAgB20C,aAC/BpzD,EAAY/N,IAAQwW,EAAAA,EAAAA,IAAcxW,IAChCqL,QAASkX,GAAoBv9B,EAAOomB,aAAe,IAGzDqY,MAAOvC,EADH,eAEJsB,EAFI,cAGJI,EAHI,aAIJE,GACE99B,EAAOmlD,WAEX,MAAO,CACLq4B,QAAAA,EACArB,aAAAA,EACAxvB,iBAAAA,EACA5jC,UAAAA,EACAwU,gBAAAA,EACArB,YAAAA,EACA6wB,YAAavvB,EACbI,cAAAA,EACAE,aAAAA,EACA8uB,iBAAkB5sD,EAAO4sD,oBA1BX7sD,EApJkC,IAgBhD,IAhBiD,SACrD8kF,EADqD,QAErDrH,EAFqD,aAGrDrB,EAHqD,iBAIrDxvB,EAJqD,UAKrD5jC,EALqD,SAMrD1b,EANqD,cAOrDuwB,EAPqD,gBAQrDL,EARqD,aASrDO,EATqD,YAUrDivB,EAVqD,YAWrD7wB,EAXqD,iBAYrD0wB,EAZqD,QAarDtkD,EAbqD,eAcrD+7B,EAdqD,mBAerDk4C,GACI,EACJ,MAAM,SAAE7mD,EAAF,mBAAY0vB,EAAZ,gBAAgC1pB,IAAoB36B,EAAAA,EAAAA,MACpDO,GAAOC,EAAAA,EAAAA,KAEPka,GAAW1V,EAAAA,EAAAA,IAAyB,MAEpCoL,GAAepL,EAAAA,EAAAA,IAAuB,MAEtC++E,GAAWrjF,EAAAA,EAAAA,KAAQ,IAChBojF,IAAW1I,MAAAA,OAAA,EAAAA,EAAcl3D,KAAI,QAAC,OAAEK,GAAH,SAAgBA,OAAgB,IACnE,CAAC62D,EAAc0I,IAEZrvD,GAAY/zB,EAAAA,EAAAA,KAAQ,KAExB,MAAMylB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KACpC,IAAK83D,IAAYt2D,EACf,MAAO,GAGT,MAAMb,GAAUymC,EAAAA,EAAAA,IACd0wB,EAAQv4D,KAAI,QAAC,OAAEK,GAAH,SAAgBA,KAC5B4B,EACAylC,OACA1qD,EACA2qD,GAGF,OAAOi4B,EAAWx+D,EAAQ9C,QAAQ+B,IAAYw/D,EAASrmF,SAAS6mB,KAAWe,IAC1E,CAACm3D,EAAS7wB,EAAkBC,EAAkBi4B,EAAUC,IAErDzzC,GAAe5vC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMylB,GAAYC,EAAAA,EAAAA,MAAYC,MAAM1B,KAC9BC,GAAYwB,EAAAA,EAAAA,MAAY1B,MAAMC,KAC9Bq/D,EAAyB77E,QAAQgzB,GACjC8oD,EAAaD,EAEdxnD,GAAkBhW,EAAAA,EAAAA,IAAkBgW,EAAiBrW,EAAWgV,GAAe,GADhF1G,EAGJ,OAAOnO,EAAAA,EAAAA,KACLP,EAAAA,GAAAA,IAAO,IACFk+D,KACCD,GAAyBjnD,GAAqB,MAC9CinD,GAAyBnnD,GAAsB,KAClDra,QAAQiiC,IACT,MAAMzqC,EAAOmM,EAAUs+B,GACvB,OAAKzqC,IAIGgO,GAAahO,EAAKqyC,uBAAwBC,EAAAA,EAAAA,IAAUtyC,OACrD8pE,IAAaC,EAASrmF,SAAS+mD,OAExC7/B,GACA,KAED,CAAC6P,EAAW+H,EAAiBrB,EAAa4B,EAAcF,EAAe7U,EAAW87D,EAAUC,KAExFjhE,EAAaC,IAAWC,EAAAA,GAAAA,GAAkB2X,EAAiB2V,EAAcnoC,QAAQgzB,IAElFi8C,GAAoB92E,EAAAA,EAAAA,KAAa7C,IACjCqmF,GACFtI,EAAoB/9E,GAAI,GACxB6lC,EAAgB02C,EAAAA,GAAAA,qBAEhBrlD,EAAS,CAAEl3B,GAAAA,MAEZ,CAACqmF,EAAUtI,EAAoBl4C,EAAgB3O,IAE5CxR,GAAqB7iB,EAAAA,EAAAA,KAAa+C,IACtCghD,EAAmB,CAAE3mB,MAAOr6B,EAAE6G,OAAO+G,UACpC,CAACozC,IACEtiC,GAAgBqB,EAAAA,GAAAA,GAA0BhT,EAAc9D,GAAWqV,IACnEmB,GAAeA,EAAYnkB,OAAS,GACtCy4E,EAAkBt0D,GAAuB,IAAXnB,EAAe,EAAIA,MAElD,oBAAoB,GAiBvB,OAfAG,EAAAA,EAAAA,IAAexV,EAAU/E,GAgBvB,0BAAKtG,UAAU,cACZ6iF,GAbD,0BAAK7iF,UAAU,qBAAqBsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAC5D,mBAACoiB,GAAA,EAAD,CACE7c,IAAKiU,EACLzJ,MAAOkqB,EACPpgB,SAAUoI,EACVK,YAAajjB,EAAK,aAStB,0BAAKU,UAAU,iBACb,0BAAKA,UAAU,WACZ6hB,MAAAA,GAAAA,EAAankB,OACZ,mBAACilB,GAAA,EAAD,CACE3iB,UAAU,4BACV4iB,MAAOysB,EACPxsB,WAAYf,EACZmhE,gBAAiB/7E,QAAQgzB,GACzB10B,IAAK2J,EACLmT,UAAWxB,GAEVe,EAAYoB,KAAKzmB,GAChB,mBAAC2mB,GAAA,EAAD,CACE3Z,IAAKhN,EACLwD,UAAU,kCACVE,QAAS,IAAMi2E,EAAkB35E,IAEjC,mBAAC4mB,GAAA,EAAD,CAAiBE,OAAQ9mB,EAAIknC,eAAa,QAI7CqnB,IAAelpC,GAAgBA,EAAYnkB,OAO9C,mBAAC8lB,GAAA,EAAD,MANA,mBAACka,GAAA,EAAD,CACE+1C,cAAe,EACfjqE,IAAI,gBACJvI,KAAM8lB,EAAY,uBAAyB,4BC5FzD,IAAejpB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,IACxBiZ,KAAMwB,EAAWwlC,aAAcC,GAAqB3sD,EAAOonB,MAInE,MAAO,CACLo2D,QAJcxiE,MAAAA,GAAH,UAAGA,EAAMwsB,gBAAT,aAAG,EAAgBg2C,QAK9Bt2D,UAAAA,EACAylC,iBAAAA,EACA5jC,UANgB/N,IAAQwW,EAAAA,EAAAA,IAAcxW,GAOtC4xC,iBAAkB5sD,EAAO4sD,oBAZX7sD,EA5DgD,IAU9D,IAV+D,UACnEmnB,EADmE,iBAEnEylC,EAFmE,QAGnE6wB,EAHmE,UAInEz0D,EAJmE,eAKnEsb,EALmE,mBAMnEk4C,EANmE,QAOnEj0E,EAPmE,SAQnE+E,EARmE,iBASnEu/C,GACI,GACJ/pC,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAMktB,GAAY/zB,EAAAA,EAAAA,KAAQ,KACxB,GAAK+7E,GAAYt2D,EAIjB,OAAO4lC,EAAAA,EAAAA,IACL0wB,EAAQj6D,QAAQy/C,IAAYA,EAAO2b,UAAS15D,KAAI,QAAC,OAAEK,GAAH,SAAgBA,KAChE4B,EACAylC,OACA1qD,EACA2qD,KAED,CAAC4wB,EAAS5wB,EAAkB1lC,EAAWylC,IAEpCowB,GAA6B17E,EAAAA,EAAAA,KAAa6jF,IAC9C3I,EAAmB2I,GACnB7gD,EAAe02C,EAAAA,GAAAA,wBACd,CAACwB,EAAoBl4C,IAExB,OACE,0BAAKriC,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,UAAUmgF,eAAa,GACnC3sD,EACCA,EAAUvQ,KAAI,CAACzmB,EAAI0mB,IACjB,mBAACC,GAAA,EAAD,CACE3Z,IAAKhN,EACLi3E,cAAevwD,EACfljB,UAAU,kCACVE,QAAS,IAAM66E,EAA2Bv+E,IAE1C,mBAAC4mB,GAAA,EAAD,CAAiBE,OAAQ9mB,EAAIknC,eAAa,OAI9C,mBAAChG,GAAA,EAAD,CACE+1C,cAAe,EACfjqE,IAAI,gBACJvI,KAAM8lB,EAAY,uBAAyB,4B,0BCpCzD,SAASo8D,GAAiBC,EAAuBC,GAC/C,MAAQC,YAAaC,EAAeC,MAAOC,EAAU,EAAGtqE,KAAMuqE,GAAWN,GACjEE,YAAaK,EAAeH,MAAOI,EAAU,EAAGzqE,KAAM0qE,GAAWR,EACzE,OAAIE,GAAiBI,EAAsB5pE,OAAOwpE,GAAiBxpE,OAAO4pE,GACtEF,GAAWG,EAAgBA,EAAUH,EAClCI,EAASH,EAGlB,MAgWA,IAAe5lF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAM,QAAEitE,EAAF,eAAWoM,GAAmB9lF,EAAO04E,WAAW36C,SAAStxB,GACzDuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAC1Bsc,EAAY/N,IAAQwW,EAAAA,EAAAA,IAAcxW,GAExC,MAAO,CACLg/D,gBAAiBN,EACjBqM,uBAAwBD,EACxB9qE,KAAAA,EACA4xC,iBAAkB5sD,EAAO4sD,iBACzB7jC,UAAAA,KAXchpB,EAhW6B,IAU3C,IAV4C,OAChD0M,EADgD,KAEhDuO,EAFgD,gBAGhDg/D,EAHgD,uBAIhD+L,EAJgD,SAKhD14E,EALgD,UAMhD0b,EANgD,iBAOhD6jC,EAPgD,QAQhDtkD,EARgD,eAShD+7B,GACI,EACJ,MAAM,yBACJ2hD,EADI,iBAEJ59D,EAFI,uBAGJ69D,EAHI,yBAIJC,EAJI,iCAKJC,EALI,oBAMJC,IACErlF,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAEN8kF,EAA6BC,EAA2BC,IAA8B5/D,EAAAA,GAAAA,MACtF6/D,EAAoBC,EAAkBC,IAAqB//D,EAAAA,GAAAA,MAC3DggE,EAAgBC,IAAqBtjF,EAAAA,EAAAA,OACrCw1E,EAAoBC,EAAkBC,IAAqBryD,EAAAA,GAAAA,MAC3DkgE,EAAgBC,IAAqBxjF,EAAAA,EAAAA,OAErC81B,EAAe4S,IAAoB1oC,EAAAA,EAAAA,OACnC2oC,EAAmBC,IAAwB5oC,EAAAA,EAAAA,KAAS,GACrD6oC,GAAsB9qC,EAAAA,EAAAA,KAAY,IAAM6qC,GAAqB,IAAO,KAE1E3oC,EAAAA,EAAAA,KAAU,KACH61B,IACHN,EAAAA,GAAAA,GAAiB,UAAUC,KAAKiT,KAEjC,CAAC5S,KAEJvW,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAMy+E,GAAuBtlF,EAAAA,EAAAA,KAAQ,KACnC,GAAKu4E,EACL,OAAOA,EACJ5hB,MAAK,QAAC,WAAE4uB,GAAH,SACJA,GAAeA,GAAaC,EAAAA,GAAAA,GAAcr6B,GAAoBs6B,EAAAA,GAAsB,SAEvF,CAAClN,EAAiBptB,IACf/6C,GAAcC,EAAAA,EAAAA,MACpBq1E,EAAAA,GAAAA,IAAY,KACVt1E,MACCk1E,EAAuB,SAAO9kF,GAEjC,MAAMmlF,EAAgBpN,MAAAA,OAAH,EAAGA,EAAiBziD,MAAK,QAAC,YAAE+tD,GAAH,SAAqBA,KAC3D+B,EAAoBrsE,MAAAA,GAAAA,EAAMorB,SAAY,QAAOprB,EAAKorB,WAAaghD,MAAAA,OAA3C,EAA2CA,EAAeE,KAC9EC,GAAkB9lF,EAAAA,EAAAA,KAAQ,KAC9B,MAAMi4E,EAAU1+D,MAAAA,GAAAA,EAAMorB,SAAW4zC,EAAkBA,MAAAA,OAAnC,EAAmCA,EAAiBz2D,QAAO,QAAC,YAAE+hE,GAAH,SAAsBA,KACjG,OAAO5L,MAAAA,OAAP,EAAOA,EAASx6C,KAAKimD,MACpB,CAACnqE,MAAAA,OAAD,EAACA,EAAMorB,SAAU4zC,IAOdwN,GAAenmF,EAAAA,EAAAA,KAAaqnB,IAChC,MAAM,KACJ4+D,EADI,MACE1+D,EADF,gBACSI,EADT,WAC0Bg+D,EAD1B,WACsCS,GACxC/+D,EACJu9D,EAAuB,CACrBx5E,OAAAA,EACA66E,KAAAA,EACA1+D,MAAAA,EACAI,gBAAAA,EACAg+D,WAAAA,EACAS,WAAAA,EACA5M,WAAW,MAEZ,CAACpuE,EAAQw5E,IAENyB,GAAcrmF,EAAAA,EAAAA,KAAaqnB,IAC/Bk+D,EAAkBl+D,GAClB+9D,MACC,CAACA,IAEEkB,IAAetmF,EAAAA,EAAAA,KAAY,KAC1BslF,IACLa,EAAab,GACbC,OAAkB3kF,GAClBykF,OACC,CAACA,EAAmBc,EAAcb,IAE/BiB,IAAuBvmF,EAAAA,EAAAA,KAAY,KACvCgjC,EAAe02C,EAAAA,GAAAA,cACd,CAAC12C,IAEEwjD,IAAsBxmF,EAAAA,EAAAA,KAAY,KAClC+lF,GACFM,EAAYN,KAEb,CAACM,EAAaN,IAEXU,IAAyBzmF,EAAAA,EAAAA,KAAY,KACzC8kF,EAAiC,CAAE15E,OAAAA,IACnC85E,MACC,CAAC95E,EAAQ85E,EAA4BJ,IAElC4B,IAAiB1mF,EAAAA,EAAAA,KAAaqnB,IAClC09D,EAAoB,CAAE35E,OAAAA,EAAQic,OAAAA,IAC9B2b,EAAe02C,EAAAA,GAAAA,cACd,CAACtuE,EAAQ43B,EAAgB+hD,IAEtB4B,IAAe3mF,EAAAA,EAAAA,KAAaqnB,IAChCw9D,EAAyB,CAAEz5E,OAAAA,EAAQ66E,KAAM5+D,EAAO4+D,SAC/C,CAAC76E,EAAQy5E,IAEN+B,IAAc5mF,EAAAA,EAAAA,KAAaqnB,IAC/Bo+D,EAAkBp+D,GAClBqwD,MACC,CAACA,IAEEl+C,IAAex5B,EAAAA,EAAAA,KAAY,KAC1BwlF,IACLmB,GAAanB,GACbC,OAAkB7kF,GAClB+2E,OACC,CAACA,EAAmBgP,GAAcnB,IAE/BqB,IAAW7mF,EAAAA,EAAAA,KAAaimF,KAC5BzxB,EAAAA,GAAAA,IAAoByxB,GACpBl/D,EAAiB,CACfhpB,QAASkC,EAAK,kBAEf,CAACA,EAAM8mB,IAEJ+/D,IAA2B9mF,EAAAA,EAAAA,KAAY,KAC3C6mF,GAASb,KACR,CAACa,GAAUb,IAERe,GAAoB1/D,IACxB,MAAM,MACJ88D,EAAQ,EADJ,WACOiC,EADP,WACmBT,EADnB,YAC+B1B,EAD/B,UAC4C+C,EAD5C,UACuDxN,GACzDnyD,EACJ,IAAIzlB,EAAO,GASX,GAPEA,GADG43E,GAAa4M,GAAcjC,EAAQiC,EAC/BnmF,EAAK,UAAWmmF,EAAajC,GAC3BA,EACFlkF,EAAK,eAAgBkkF,GAErBlkF,EAAK,eAGVu5E,EAEF,OADA53E,GAAS,MAAa3B,EAAK,aACpB2B,EAOT,GAJIolF,IACFplF,GAAS,MAAa3B,EAAK,eAAgB+mF,WAG1BpmF,IAAfwlF,GAA4BjC,IAAUiC,EACxCxkF,GAAS,MAAa3B,EAAK,2BACtB,GAAI0lF,EAAY,CACrB,MAAMsB,EAAwD,KAAhDtB,GAAaC,EAAAA,GAAAA,GAAcr6B,IACzC3pD,GAAS,MAEPA,GADEqlF,EAAO,EACDhnF,EAAK,wBAAwBinF,EAAAA,EAAAA,GAAgBjnF,EAAMgnF,IAEnDhnF,EAAK,2BAENgkF,IACTriF,GAAS,MAAa3B,EAAK,gBAG7B,OAAO2B,GAGHulF,GAAyB9/D,IAC7B,MAAM+/D,EAAU,GA8BhB,OA7BAA,EAAQv6D,KAAK,CACXtF,MAAOtnB,EAAK,QACZmB,KAAM,OACNuiD,QAAS,IAAMkjC,GAASx/D,EAAO4+D,QAG5B5+D,EAAO48D,aAAgB58D,EAAOmyD,WACjC4N,EAAQv6D,KAAK,CACXtF,MAAOtnB,EAAK,QACZmB,KAAM,OACNuiD,QAAS,IAlIKt8B,CAAAA,IAClBs9D,EAAyB,CAAEv5E,OAAAA,EAAQic,OAAAA,IACnC2b,EAAe02C,EAAAA,GAAAA,aAgII2N,CAAWhgE,KAIzBA,EAAOmyD,UAQV4N,EAAQv6D,KAAK,CACXtF,MAAOtnB,EAAK,cACZmB,KAAM,SACNuiD,QAAS,IAAMijC,GAAYv/D,GAC3B4M,aAAa,IAXfmzD,EAAQv6D,KAAK,CACXtF,MAAOtnB,EAAK,gBACZmB,KAAM,SACNuiD,QAAS,IAAM0iC,EAAYh/D,GAC3B4M,aAAa,IAUVmzD,GAGHE,IAAyElnF,EAAAA,EAAAA,KAAQ,IAC9E,QAAC,UAAEC,EAAF,OAAaC,GAAd,SACL,mBAACC,EAAA,EAAD,CACEC,OAAK,EACL6F,QAAStF,EAAAA,GACTN,KAAK,UACLC,MAAM,cACNC,UAAWL,EAAS,SAAW,GAC/BO,QAASR,EACTS,UAAU,WAEV,wBAAGH,UAAU,iBAGhB,IAEH,OACE,0BAAKA,UAAU,4BACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,gBACZo3B,GACC,mBAACD,GAAA,EAAD,CACE36B,GAAG,aACHsD,KAAM8mF,EAAAA,GACNxvD,cAAeA,EACfC,KAAM4S,EACNxS,OAAQ0S,KAId,wBAAGnqC,UAAU,cAA0BV,EAAZynB,EAAiB,yBAAiC,qBAE9Es+D,GACC,0BAAKrlF,UAAU,WACb,wBAAGA,UAAU,cACVgZ,MAAAA,GAAAA,EAAMorB,SAAW9kC,EAAK,cAAgBA,EAAK,oCAE9C,0BAAKU,UAAU,gBACb,4BACEA,UAAU,kCACVgQ,MAAOq1E,EACPrgD,UAAQ,EACR9kC,QAASimF,KAEX,mBAAC9lF,EAAA,EAAD,CACEL,UAAU,yBACVM,QAASqmF,GACTpmF,UAAU,SAEV,mBAACC,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAASimF,IAA2B7mF,EAAK,WAC7D0Z,MAAAA,GAAAA,EAAMorB,WACN,mBAAC5jC,EAAA,EAAD,CAAUC,KAAK,SAASP,QAAS2lF,GAAqBvyD,aAAW,GAAEh0B,EAAK,mBAI9E,mBAACM,EAAA,EAAD,CAAQM,QAASimF,IAA2B7mF,EAAK,cAGrD,0BAAKU,UAAU,UAAUmgF,eAAa,GACpC,mBAACvgF,EAAA,EAAD,CAAQynB,QAAM,EAAC7d,IAAI,SAASxJ,UAAU,cAAcE,QAAS0lF,IAC1DtmF,EAAK,oBAELimF,IAAoBA,EAAgB7nF,SAAW,mBAACggC,GAAA,EAAD,CAAcz8B,KAAK,iBAAiBuI,IAAI,YACzF+7E,MAAAA,OALH,EAKGA,EAAiBtiE,KAAKyD,GACrB,mBAACvD,GAAA,EAAD,CACE1iB,KAAK,OACLomF,cAAc,OACd77C,WAAS,EACT9qC,QAAS,IAAM6lF,GAAer/D,GAC9BiS,eAAgB6tD,GAAsB9/D,GACtCld,IAAKkd,EAAO4+D,MAEZ,2BAAMtlF,UAAU,sBAAsB0mB,EAAOE,OAASF,EAAO4+D,MAC7D,2BAAMtlF,UAAU,WAAWsC,IAAI,QAC5B8jF,GAAiB1/D,OAIxB,wBAAG1mB,UAAU,kBAAkBwJ,IAAI,cAAclK,EAAK,yBAEvDykF,GAA0B78E,QAAQ68E,EAAuBrmF,SACxD,0BAAKsC,UAAU,UAAUmgF,eAAa,GACpC,wBAAGngF,UAAU,aAAawJ,IAAI,SAASlK,EAAK,iBAC5C,mBAAC6jB,GAAA,EAAD,CACE1iB,KAAK,SACL6yB,aAAW,EACX9pB,IAAI,SACJtJ,QAASokF,GAET,2BAAMtkF,UAAU,SAASV,EAAK,2BAE/BykF,MAAAA,OAVH,EAUGA,EAAwB9gE,KAAKyD,GAC5B,mBAACvD,GAAA,EAAD,CACE1iB,KAAK,OACLomF,cAAc,OACd77C,WAAS,EACT9qC,QAAS,IAAM6lF,GAAer/D,GAC9BiS,eAAgB6tD,GAAsB9/D,GACtCld,IAAKkd,EAAO4+D,MAEZ,2BAAMtlF,UAAU,SAAS0mB,EAAOE,OAASF,EAAO4+D,MAChD,2BAAMtlF,UAAU,WAAWsC,IAAI,QAC5B8jF,GAAiB1/D,SAO9B,mBAAC0B,GAAA,EAAD,CACEzoB,OAAQ0kF,EACR/9E,QAASi+E,EACT39D,MAAOtnB,EAAK,yBACZ2B,KAAM3B,EAAK,4BACX+jC,sBAAoB,EACpBhb,aAAc/oB,EAAK,aACnBgpB,eAAgBw9D,KAElB,mBAAC19D,GAAA,EAAD,CACEzoB,OAAQ6kF,EACRl+E,QAASo+E,EACT99D,MAAOtnB,EAAK,cACZ2B,KAAM3B,EAAK,eACX+jC,sBAAoB,EACpBhb,aAAc/oB,EAAK,gBACnBgpB,eAAgBq9D,KAElB,mBAACv9D,GAAA,EAAD,CACEzoB,OAAQm3E,EACRxwE,QAAS0wE,EACTpwD,MAAOtnB,EAAK,cACZ2B,KAAM3B,EAAK,kBACX+jC,sBAAoB,EACpBhb,aAAc/oB,EAAK,UACnBgpB,eAAgBuQ,UC1XlBiuD,GAAuB,CAAC,EAAG,GAAI,KAC/BC,GAAsB,CAC1BC,KAAM,KACNp+D,IAAK,MACLq+D,KAAM,QAEFC,GAA6BH,GAAoBC,KA2OvD,IAAelpF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAM,cAAE08E,GAAkBnpF,EAAO04E,WAAW36C,SAAStxB,GAErD,MAAO,CACL08E,cAAAA,EACAv8B,iBAAkB5sD,EAAO4sD,oBANX7sD,EA7N4B,IAO1C,IAP2C,OAC/C0M,EAD+C,cAE/C08E,EAF+C,SAG/C97E,EAH+C,iBAI/Cu/C,EAJ+C,QAK/CtkD,EAL+C,eAM/C+7B,GACI,EACJ,MAAM,uBAAE4hD,EAAF,iBAA0BmD,IAAqBroF,EAAAA,EAAAA,MAE/CO,GAAOC,EAAAA,EAAAA,MACN8nF,EAAkBzvB,EAAcC,IAAiBlzC,EAAAA,GAAAA,MACjDqC,EAAiBsgE,IAAsBhmF,EAAAA,EAAAA,KAAS,IAChDslB,EAAOglC,IAAYtqD,EAAAA,EAAAA,IAAS,KAC5BimF,EAAkBC,IAAuBlmF,EAAAA,EAAAA,IAAiBiQ,KAAKC,MAAQ01E,KACvEO,EAAsBC,IAA2BpmF,EAAAA,EAAAA,IAAS,cAC1DqmF,EAAkBC,IAAuBtmF,EAAAA,EAAAA,IAA6B,KACtEumF,EAAqBC,IAA0BxmF,EAAAA,EAAAA,IAAS,MACxDymF,EAAiBC,IAAsB1mF,EAAAA,EAAAA,KAAS,IAEvDuf,EAAAA,EAAAA,IAAexV,EAAU/E,IAEzB0tE,EAAAA,GAAAA,IAAY,IAAwB,IAAtBiU,GAAsB,EAClC,GAAIA,IAAqBd,EACzB,GAAKA,EAOE,CACL,MACEvgE,MAAOshE,EADH,WACiBzC,EADjB,WAC6BT,EAAYh+D,gBAAiBmhE,GAC5DhB,EAMJ,GALIe,GAAct8B,EAASs8B,GACvBzC,IACFqC,EAAuBhB,GAAqBrqF,SAASgpF,GAAcA,EAAW5tE,WAAa,UAC3F+vE,EAAoBnC,IAElBT,EAAY,CACd,MAAMoD,GAAcnD,EAAAA,GAAAA,GAAcr6B,GAAoBs8B,GACtDQ,EAAwB,UACxBF,EAAwD,IAApC9mF,KAAKoE,IAAIkgF,EAAYoD,IAEvCD,GACFb,GAAmB,QArBrB17B,EAAS,IACT87B,EAAwB,aACxBI,EAAuB,KACvBN,EAAsD,KAAlCvC,EAAAA,GAAAA,GAAcr6B,GAA2Bs8B,IAC7DU,EAAoB,IACpBN,GAAmB,KAmBpB,CAACH,EAAev8B,IAEnB,MAAMy9B,GAAwBhpF,EAAAA,EAAAA,KAAa+C,IACzCklF,EAAmBllF,EAAE6G,OAAO+/B,WAC3B,IAEGkjB,GAAoB7sD,EAAAA,EAAAA,KAAa+C,IACrCwpD,EAASxpD,EAAE6G,OAAO+G,SACjB,IAEGs4E,GAA+BjpF,EAAAA,EAAAA,KAAa+C,IAChDwlF,EAAoB7tE,OAAOm6B,SAAS9xC,EAAE6G,OAAO+G,MAAO,OACnD,IAEGu4E,GAAyBlpF,EAAAA,EAAAA,KAAa8Z,IAC1CquE,EAAoBruE,EAAKkS,WACzBwsC,MACC,CAACA,IAEE2wB,GAAkBnpF,EAAAA,EAAAA,KAAY,KAClC2oF,GAAmB,GACnB,MAAMvC,EAAqC,WAAxBoC,EAAmCF,EAAmBE,EACzE,IAAI7C,EACJ,OAAQyC,GACN,IAAK,SACHzC,GAAaC,EAAAA,GAAAA,GAAcr6B,IAAqB28B,EAAmBh2E,KAAKC,OAAS,IACjF,MACF,IAAK,OACL,IAAK,MACL,IAAK,OACHwzE,GAAaC,EAAAA,GAAAA,GAAcr6B,GAAoBm8B,GAAoBU,GAAwB,IAC3F,MAEF,QACEzC,OAAa/kF,EAGbknF,EACFlD,EAAuB,CACrBqB,KAAM6B,EAAc7B,KACpB76E,OAAAA,EACAmc,MAAAA,EACAI,gBAAAA,EACAg+D,WAAAA,EACAS,WAAAA,IAGF2B,EAAiB,CACf38E,OAAAA,EACAmc,MAAAA,EACAI,gBAAAA,EACAg+D,WAAAA,EACAS,WAAAA,IAGJpjD,EAAe02C,EAAAA,GAAAA,WACd,CACDtuE,EAAQ88E,EAAkBI,EAAkB1D,EAAwBkD,EACpEC,EAAkBpgE,EAAiBygE,EAAsBI,EAAqBjhE,EAAOyb,EACrFuoB,IAGF,OACE,0BAAK5qD,UAAU,2BACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAAC+oC,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,qBACZizC,SAAUjzC,EAAK,gCACf0pC,QAAShiB,EACTlN,SAAUuuE,KAGd,0BAAKroF,UAAU,WACb,mBAACqiB,GAAA,EAAD,CACEriB,UAAU,YACVuiB,YAAajjB,EAAK,gBAClB0Q,MAAO4W,EACP9M,SAAUoyC,IAEZ,wBAAGlsD,UAAU,mBAAmBV,EAAK,kBAEvC,0BAAKU,UAAU,WACb,0BAAKA,UAAU,kBAAkBV,EAAK,kBACtC,mBAAC8xB,GAAA,EAAD,CACEjQ,KAAK,gBACLkQ,QAAS,CACP,CACErhB,MAAO,OACPmhB,MAAO7xB,EAAK,QAAS,IAEvB,CACE0Q,MAAO,MACPmhB,MAAO7xB,EAAK,OAAQ,IAEtB,CACE0Q,MAAO,OACPmhB,MAAO7xB,EAAK,QAAS,IAEvB,CACE0Q,MAAO,YACPmhB,MAAO7xB,EAAK,YAEd,CACE0Q,MAAO,SACPmhB,MAAO7xB,EAAK,oCAGhBwa,SAAU4tE,EACVp2D,SAAUm2D,IAEc,WAAzBA,GACC,mBAAC7nF,EAAA,EAAD,CAAQI,UAAU,eAAeqnB,QAAM,EAACnnB,QAAS03D,IAC9C6wB,EAAAA,EAAAA,IAAenpF,EAAMioF,GADxB,KAC4C96D,EAAAA,EAAAA,IAAWntB,EAAMioF,IAG/D,wBAAGvnF,UAAU,mBAAmBV,EAAK,oBAErC0nB,GACA,0BAAKhnB,UAAU,WACb,0BAAKA,UAAU,kBAAkBV,EAAK,sBACtC,mBAAC8xB,GAAA,EAAD,CACEjQ,KAAK,eACLkQ,QAAS,IACJy1D,GAAqB7jE,KAAKylE,IAAD,CAAU14E,MAAO04E,EAAE7wE,WAAYsZ,MAAOu3D,MAClE,CACE14E,MAAO,IACPmhB,MAAO7xB,EAAK,YAEd,CACE0Q,MAAO,SACPmhB,MAAO7xB,EAAK,mCAGhBwa,SAAUguE,EACVx2D,SAAUu2D,IAEa,WAAxBA,GACC,4BACE7nF,UAAU,2BACV6Z,KAAK,SACL9U,IAAI,IACJD,IAAI,QACJkL,MAAO23E,EACP7tE,SAAUwuE,IAGd,wBAAGtoF,UAAU,mBAAmBV,EAAK,mBAGzC,mBAACgoC,GAAA,EAAD,CACEjuB,SAAO,EACPnZ,QAASsoF,EACT7uE,SAAUouE,EACV5nF,UAA2Bb,EAAhB6nF,EAAqB,WAAmB,eAEnD,wBAAGnnF,UAAU,iBAGjB,mBAAC,GAAD,CACEL,OAAQ0nF,EACR39D,cAAY,EACZE,gBAAc,EACdtjB,QAASuxD,EACT9tC,SAAUw+D,EACVh/D,WAAYg+D,EACZ19D,kBAAmBvqB,EAAK,eCxIhC,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAEhC,MAAO,CACL6lD,iBAAgB,UAAEt3C,EAAKwsB,gBAAP,aAAE,EAAe8qB,iBACjC3H,mBAAoB3qD,EAAO2qD,mBAC3B3vC,KAAAA,KAPcjb,EA9F+B,IAM7C,IAN8C,mBAClD4qD,EADkD,iBAElD2H,EAFkD,KAGlDt3C,EAHkD,SAIlD3N,EAJkD,QAKlD/E,GACI,EACJ,MAAM,wBAAEqiF,IAA4B5pF,EAAAA,EAAAA,MAE9BO,GAAOC,EAAAA,EAAAA,MACNouC,EAAWi0C,IAAgBtgF,EAAAA,EAAAA,KAAS,IACpC88B,EAAW03C,IAAgBx0E,EAAAA,EAAAA,KAAS,IACpCsnF,EAAuBC,IAA4BvnF,EAAAA,EAAAA,IAASgvD,GAAoB,KAEvFzvC,EAAAA,EAAAA,IAAexV,EAAU/E,GAEzB,MAAMwiF,GAAsBzpF,EAAAA,EAAAA,KAAY,KACjC2Z,IACL88D,GAAa,GAEb6S,EAAwB,CACtBl+E,OAAQuO,EAAKxc,GACb8zD,iBAAkBs4B,OAEnB,CAAC5vE,EAAM4vE,EAAuBD,KAEjCpnF,EAAAA,EAAAA,KAAU,KACJ+uD,IACFwlB,GAAa,GACb8L,GAAa,GACbiH,EAAyBv4B,MAE1B,CAACA,IAEJ,MAAMy4B,GAAuB1pF,EAAAA,EAAAA,KAAa+C,IACxC,IAAK4W,IAAS2vC,EAAoB,OAElC,MAAM,KAAExnC,EAAF,QAAQ6nB,GAAY5mC,EAAE+G,cACtB6/E,EAA+B,QAAT7nE,EAAkB6nB,EAAU2f,EAAmB1lC,KAAKgS,GAAMA,EAAEC,WAAY,GAC9F8T,EAEA,IAAI4/C,EAAuBznE,GAD3BynE,EAAsBrnE,QAAQ0T,GAAMA,IAAM9T,IAGhD0nE,EAAyBG,GACzBpH,GAAa,KACZ,CAACj5B,EAAoB3vC,EAAM4vE,IAE9B,OACE,0BAAK5oF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAK,MACL6nB,SAAU4/C,GAAyBA,EAAsBlrF,OAAS,EAClEyzB,MAAO7xB,EAAK,mBACZwa,SAAUivE,KAGbpgC,MAAAA,OATH,EASGA,EAAoBpnC,QAAQ0T,IAAOA,EAAE6zB,aAAY7lC,KAAI,QAAC,SAAEiS,EAAF,MAAYtO,GAAb,SACpD,0BAAK5mB,UAAU,yBACb,mBAAC+oC,GAAA,EAAD,CACE5nB,KAAM+T,EACN8T,SAAU4/C,IAAyBA,MAAAA,OAA1B,EAA0BA,EAAuBnsF,SAASy4B,IACnEvb,SAA4C,KAAlCivE,MAAAA,OAAA,EAAAA,EAAuBlrF,QACjCyzB,MACE,0BAAKnxB,UAAU,YACb,mBAACw1B,GAAA,EAAD,CAAqBN,SAAUA,IAC9BtO,GAGL9M,SAAUivE,UAOpB,mBAACzhD,GAAA,EAAD,CACEjuB,QAASs0B,EACTztC,QAAS4oF,EACT3oF,UAAWb,EAAK,QAChBqa,SAAUykB,GAETA,EACC,mBAAC1vB,EAAA,EAAD,CAAS3O,MAAM,UAEf,wBAAGC,UAAU,qBC6DvB,IAAelC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAM,WAAEw+E,GAAejrF,EAAO04E,WAAW36C,SAAStxB,IAC5C,OAAEic,EAAF,UAAUwiE,EAAV,WAAqBC,GAAeF,GAAc,GAClDjwE,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAGhC,MAAO,CACLic,OAAAA,EACAwiE,UAAAA,EACAC,WAAAA,EACApiE,UANgB/N,IAAQwW,EAAAA,EAAAA,IAAcxW,GAOtC4xC,iBAAkB5sD,EAAO4sD,oBAZX7sD,EA7IgC,IAS9C,IAT+C,OACnD0M,EADmD,OAEnDic,EAFmD,UAGnDwiE,EAHmD,WAInDC,EAJmD,UAKnDpiE,EALmD,SAMnD1b,EANmD,iBAOnDu/C,EAPmD,QAQnDtkD,GACI,EACJ,MAAM,iBACJ8f,EADI,wBAEJgjE,EAFI,yBAGJC,EAHI,SAIJ31D,IACE30B,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACP,MACJikF,EAAQ,EADJ,WACOiC,EADP,KACmBH,EADnB,QACyBgE,GAC3B5iE,GAAU,GACRs+D,GAAat+D,MAAAA,OAAA,EAAAA,EAAQs+D,aAAsE,KAAvDt+D,EAAOs+D,YAAaC,EAAAA,GAAAA,GAAcr6B,IAA4Br5C,KAAKC,MACvG+3E,IAAc7iE,MAAAA,OAAA,EAAAA,EAAQs+D,aAAc,IAAKC,EAAAA,GAAAA,GAAcr6B,GAAqB,GAElFrpD,EAAAA,EAAAA,KAAU,KACJ+jF,IACF8D,EAAwB,CAAE3+E,OAAAA,EAAQ66E,KAAAA,IAClC+D,EAAyB,CAAE5+E,OAAAA,EAAQ66E,KAAAA,OAEpC,CAAC76E,EAAQ66E,EAAM8D,EAAyBC,IAE3C,MAAMG,GAAoBnqF,EAAAA,EAAAA,KAAY,MACpCw0D,EAAAA,GAAAA,IAAoBntC,EAAQ4+D,MAC5Bl/D,EAAiB,CACfhpB,QAASkC,EAAK,kBAEf,CAAConB,EAAQpnB,EAAM8mB,IAwDlB,OAtDAvF,EAAAA,EAAAA,IAAexV,EAAU/E,GAuDvB,0BAAKtG,UAAU,+BACb,0BAAKA,UAAU,kBACX0mB,GACA,wBAAG1mB,UAAU,cAAcV,EAAK,YAEjConB,GACC,sCACE,0BAAK1mB,UAAU,WACb,yBAAIA,UAAU,cAAc0mB,EAAOE,OAASF,EAAO4+D,MACnD,4BACEtlF,UAAU,eACVgQ,MAAO0W,EAAO4+D,KACdtgD,UAAQ,EACR9kC,QAASspF,IAEX,mBAAC5pF,EAAA,EAAD,CAAQI,UAAU,YAAYE,QAASspF,GAAoBlqF,EAAK,aAC/D0lF,GACC,wBAAGhlF,UAAU,cACVupF,EACGjqF,EAAK,eACLA,EAAK,gBAAkB,IAAEmpF,EAAAA,EAAAA,IAAenpF,EAAM0lF,OAAev4D,EAAAA,EAAAA,IAAWntB,EAAM0lF,QAIvFsE,GACC,0BAAKtpF,UAAU,WACb,4BAAIV,EAAK,mBACT,mBAAC6jB,GAAA,EAAD,CACEnjB,UAAU,6CACVE,QAAS,IAAMwzB,EAAS,CAAEl3B,GAAI8sF,KAE9B,mBAAClmE,GAAA,EAAD,CACEE,OAAQgmE,EACRjmE,QAAQnK,EAAAA,EAAAA,IAAoB5Z,EAAoB,IAAdonB,EAAOvN,MAAa,GACtDuqB,eAAa,MAvFP,MACtB,GAAKwlD,MAAAA,GAAAA,EAAWxrF,QAAZ,MAAsByrF,IAAAA,EAAYzrF,OACtC,OAAKwrF,EAEH,0BAAKlpF,UAAU,WACb,4BAAIkpF,EAAUxrF,OAAS4B,EAAK,eAAgBkkF,GAASlkF,EAAK,gBAC1D,wBAAGU,UAAU,eACTkpF,EAAUxrF,SACV+nF,EAAanmF,EAAK,4BAA6BmmF,EAAajC,GAASlkF,EAAK,mBAE3E4pF,EAAUjmE,KAAKwmE,GACd,mBAACtmE,GAAA,EAAD,CACEnjB,UAAU,6CACVE,QAAS,IAAMwzB,EAAS,CAAEl3B,GAAIitF,EAASnmE,UAEvC,mBAACF,GAAA,EAAD,CACEE,OAAQmmE,EAASnmE,OACjBD,QAAQnK,EAAAA,EAAAA,IAAoB5Z,EAAsB,IAAhBmqF,EAAStwE,MAAa,GACxDuqB,eAAa,SAhBF,mBAACh1B,EAAA,EAAD,OA0Fdg7E,GAjEc,MACvB,GAAIhjE,MAAAA,IAAAA,EAAQmyD,UAAZ,CACA,IAAKsQ,GAAcD,EAAW,OAAO,mBAACx6E,EAAA,EAAD,MACrC,GAAKy6E,MAAAA,GAAAA,EAAYzrF,OACjB,OACE,0BAAKsC,UAAU,WACb,4BAAgBV,EAAZynB,EAAiB,oBAA4B,mBACjD,wBAAG/mB,UAAU,cACVmpF,EAAWlmE,KAAK0mE,GACf,mBAACxmE,GAAA,EAAD,CACEnjB,UAAU,6CACVE,QAAS,IAAMwzB,EAAS,CAAEl3B,GAAImtF,EAAUrmE,UAExC,mBAACF,GAAA,EAAD,CACEE,OAAQqmE,EAAUrmE,OAClBD,QAAQnK,EAAAA,EAAAA,IAAoB5Z,EAAuB,IAAjBqqF,EAAUxwE,MAAa,GACzDuqB,eAAa,WAkDhBkmD,UC7Eb,IAAe9rF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEslB,GAAyB,EAGlC,MAAO,CACLvK,MAHW9N,EAAAA,EAAAA,IAAWjN,EAAQslB,GAI9BsnC,iBAAkB5sD,EAAO4sD,oBANX7sD,EA5D2B,IAQzC,IAR0C,OAC9CulB,EAD8C,MAE9CuD,EAF8C,KAG9C1N,EAH8C,UAI9C4N,EAJ8C,KAK9ChO,EAL8C,iBAM9C6xC,EAN8C,OAO9CngD,GACI,EACJ,MAAM,SAAEipB,EAAF,oBAAYm2D,IAAwB9qF,EAAAA,EAAAA,MAEpCoD,GAAiBqtD,EAAAA,EAAAA,GAAuB,eACxClwD,GAAOC,EAAAA,EAAAA,KAEPk2B,GAAWC,EAAAA,EAAAA,IAAgB3c,GAC3B+wE,EAAuD,KAA1C3wE,GAAO8rE,EAAAA,GAAAA,GAAcr6B,IAA4Br5C,KAAKC,MAEnEu4E,GAAaC,EAAAA,EAAAA,IAAQ,IAAIz4E,KAAKu4E,KAChCr9D,EAAAA,EAAAA,IAAWntB,EAAMwqF,IAAaG,EAAAA,EAAAA,IAAgB3qF,EAAMwqF,GAAW,GAAM,GAAO,GAM1EI,GAAsB7qF,EAAAA,EAAAA,KAAY,KACtCwqF,EAAoB,CAAEp/E,OAAAA,EAAQ6Y,OAAAA,EAAQ6mE,YAAY,MACjD,CAAC1/E,EAAQo/E,EAAqBvmE,IAE3B8mE,GAAsB/qF,EAAAA,EAAAA,KAAY,KACtCwqF,EAAoB,CAAEp/E,OAAAA,EAAQ6Y,OAAAA,EAAQ6mE,YAAY,MACjD,CAAC1/E,EAAQo/E,EAAqBvmE,IAEjC,OACE,0BAAKtjB,UAAWmC,EAAe,MAC7B,0BAAKnC,UAAWmC,EAAe,QAC7B,0BAAKnC,UAAWmC,EAAe,QAASjC,QAftB,KACtBwzB,EAAS,CAAEl3B,GAAI8mB,MAeT,mBAACxK,GAAA,EAAD,CACEtP,IAAK8Z,EACLxjB,KAAK,SACLiZ,KAAMA,IAER,0BAAK/Y,UAAWmC,EAAe,cAC7B,0BAAKnC,UAAWmC,EAAe,cAAeszB,GAC9C,0BAAKz1B,UAAWmC,EAAe,kBAAmB0kB,KAGtD,0BAAK7mB,UAAWmC,EAAe,SAAU4nF,IAE3C,0BAAK/pF,UAAWmC,EAAe,YAC7B,mBAACvC,EAAA,EAAD,CAAQI,UAAWmC,EAAe,UAAWjC,QAASgqF,GACvC5qF,EAAZynB,EAAiB,sBAA8B,sBAElD,mBAACnnB,EAAA,EAAD,CAAQI,UAAWmC,EAAe,UAAWklB,QAAM,EAACnnB,QAASkqF,GAC1D9qF,EAAK,yBCuDhB,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEyM,GAAyB,EAClC,MAAMuO,GAAO9N,EAAAA,EAAAA,IAAWlN,EAAQyM,GAEhC,MAAO,CACLuO,KAAAA,EACA4xC,iBAAkB5sD,EAAO4sD,iBACzB7jC,UAAW/N,IAAQwW,EAAAA,EAAAA,IAAcxW,MAPnBjb,EA1GkC,IAMhD,cANiD,KACrDib,EADqD,OAErDvO,EAFqD,SAGrDY,EAHqD,UAIrD0b,EAJqD,QAKrDzgB,GACI,EACJ,MAAM,wBAAE+jF,EAAF,qBAA2B7R,IAAyBz5E,EAAAA,EAAAA,OACnDurF,EAAuBC,EAAqBC,IAAwB7lE,EAAAA,GAAAA,MACpE8lE,EAAuBC,EAAqBC,IAAwBhmE,EAAAA,GAAAA,KAErErlB,GAAOC,EAAAA,EAAAA,MAEN63B,EAAe4S,IAAoB1oC,EAAAA,EAAAA,OACnC2oC,EAAmBC,IAAwB5oC,EAAAA,EAAAA,KAAS,GACrD6oC,GAAsB9qC,EAAAA,EAAAA,KAAY,IAAM6qC,GAAqB,IAAO,KAE1E3oC,EAAAA,EAAAA,KAAU,KACH61B,IACHN,EAAAA,GAAAA,GAAiB,eAAeC,KAAKiT,KAEtC,CAAC5S,KAEJvW,EAAAA,EAAAA,IAAexV,EAAU/E,IAEzB/E,EAAAA,EAAAA,KAAU,KACHyX,MAAAA,GAAAA,EAAMshE,eAAiBjiE,EAAAA,EAAAA,IAAS5N,IACnC+tE,EAAqB,CAAE/tE,OAAAA,MAExB,CAACuO,EAAMvO,EAAQ+tE,IAElB,MAAMoS,GAA0BvrF,EAAAA,EAAAA,KAAY,KAC1CgrF,EAAwB,CAAE5/E,OAAAA,EAAQ0/E,YAAY,IAC9CK,MACC,CAACH,EAAyB5/E,EAAQ+/E,IAE/BK,GAA0BxrF,EAAAA,EAAAA,KAAY,KAC1CgrF,EAAwB,CAAE5/E,OAAAA,EAAQ0/E,YAAY,IAC9CQ,MACC,CAACN,EAAyB5/E,EAAQkgF,IAErC,OACE,0BAAK3qF,UAAU,iCACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,gBACZo3B,GACC,mBAACD,GAAA,EAAD,CACE36B,GAAG,mBACHsD,KAAMgrF,EAAAA,GACN1zD,cAAeA,EACfC,KAAM4S,EACNxS,OAAQ0S,KAIbjjC,QAAQ8R,MAAAA,GAAD,UAACA,EAAMshE,oBAAP,aAAC,EAAoB58E,SAC3B,0BAAKsC,UAAU,gBACb,mBAACJ,EAAA,EAAD,CAAQI,UAAU,qBAAqBE,QAASqqF,GAAhD,cACA,mBAAC3qF,EAAA,EAAD,CAAQI,UAAU,qBAAqBE,QAASwqF,EAAqBrjE,QAAM,GAA3E,iBAIN,0BAAKrnB,UAAU,WACb,0BAAKA,UAAU,gBAAgBmgF,eAAa,GAC1C,wBAAG32E,IAAI,SACHwP,MAAAA,GAAAA,EAAMshE,aAAiCthE,EAAKshE,aAAa58E,OACvD4B,EAAK,eAAgB0Z,EAAKshE,aAAa58E,QAAU4B,EAAK,oBADnCA,EAAK,cAG5B0Z,MAAAA,GAAAA,EAAMshE,eACN,mBAAC5rE,EAAA,EAAD,CAASlF,IAAI,YAEiB,KAA/BwP,MAAAA,GAAA,UAAAA,EAAMshE,oBAAN,eAAoB58E,SACnB,wBAAGsC,UAAU,aAAawJ,IAAI,SACflK,EAAZynB,EAAiB,iCAAyC,gCAG9D/N,MAAAA,GAbH,UAaGA,EAAMshE,oBAbT,aAaG,EAAoBr3D,KAAI,QAAC,OAAEK,EAAF,MAAUuD,EAAV,KAAiB1N,GAAlB,SACvB,mBAAC,GAAD,CACEmK,OAAQA,EACRuD,MAAOA,EACP1N,KAAMA,EACN4N,UAAWA,EACXtc,OAAQA,EACRjB,IAAK8Z,SAKb,mBAAC8E,GAAA,EAAD,CACEzoB,OAAQ2qF,EACRhkF,QAASkkF,EACT5jE,MAAM,uBACN3lB,KAAK,gDACLqnB,eAAgBsiE,IAElB,mBAACxiE,GAAA,EAAD,CACEzoB,OAAQ8qF,EACRnkF,QAASqkF,EACT/jE,MAAM,uBACN3lB,KAAK,gDACLqnB,eAAgBuiE,SCqJxB,IAAe/sF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAGQ,CACL+sF,gBAHqBC,EAAAA,EAAAA,IAA4BhtF,MAFnCD,EAjP0B,IAUxC,IAVyC,OAC7C0M,EAD6C,cAE7Cy3B,EAF6C,qBAG7Cy+C,EAH6C,wBAI7CF,EAJ6C,eAK7Cp+C,EAL6C,mBAM7Ck4C,EAN6C,QAO7Cj0E,EAP6C,SAQ7C+E,EAR6C,eAS7C0/E,GACI,EACJ,OAAQ7oD,GACN,KAAK62C,EAAAA,GAAAA,QACH,OAAQgS,GACN,IAAK,OACH,OACE,mBAAC,GAAD,CACEvhF,IAAKiB,EACL6Y,OAAQ7Y,EACRnE,QAASA,EACT+E,SAAUA,IAGhB,IAAK,QACH,OACE,mBAAC,GAAD,CACE7B,IAAKiB,EACLA,OAAQA,EACR43B,eAAgBA,EAChB/7B,QAASA,EACT+E,SAAUA,GAAY,CACpB0tE,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,WACAA,EAAAA,GAAAA,iBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAt8E,SAASylC,KAGjB,IAAK,UACH,OACE,mBAAC,GAAD,CACE14B,IAAKiB,EACLA,OAAQA,EACR43B,eAAgBA,EAChB/7B,QAASA,EACT+E,SAAUA,GAAY,CACpB0tE,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,WACAA,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAt8E,SAASylC,KAKnB,MAGF,KAAK62C,EAAAA,GAAAA,gBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,WACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACR43B,eAAgBA,EAChBh3B,SAAUA,EACV/E,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,iBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACR43B,eAAgBA,EAChBk4C,mBAAoBA,EACpBlvE,SAAUA,GAAY,CACpB0tE,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,sBACAt8E,SAASylC,GACX57B,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,kBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,2BACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACR8vE,mBAAoBA,EACpBl4C,eAAgBA,EAChBh3B,SAAUA,GAAY,CACpB0tE,EAAAA,GAAAA,sBACAt8E,SAASylC,GACX57B,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,qBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRk2E,qBAAsBA,EACtBF,wBAAyBA,EACzBp+C,eAAgBA,EAChBh3B,SAAUA,EACV/E,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,mBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACR43B,eAAgBA,EAChBk4C,mBAAoBA,EACpBlvE,SAAUA,GAAY,CACpB0tE,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAt8E,SAASylC,GACX57B,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,mBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,gBACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRg3E,WAAYv/C,IAAkB62C,EAAAA,GAAAA,mBAC9B2I,eAAgBf,EAChBF,wBAAyBA,EACzBp+C,eAAgBA,EAChBh3B,SAAUA,EACV/E,QAASA,IAIf,KAAKyyE,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,IAGf,KAAKyyE,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,EACT+7B,eAAgBA,IAGtB,KAAK02C,EAAAA,GAAAA,WACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,EACT+7B,eAAgBA,IAGtB,KAAK02C,EAAAA,GAAAA,eACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRo4E,UAAQ,EACRx3E,SAAUA,EACV/E,QAASA,EACT+7B,eAAgBA,EAChBk4C,mBAAoBA,IAI1B,KAAKxB,EAAAA,GAAAA,UACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,IAGf,KAAKyyE,EAAAA,GAAAA,WACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,IAGf,KAAKyyE,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACEtuE,OAAQA,EACRY,SAAUA,EACV/E,QAASA,S,eClRnB,MAAM2kF,GAAO,8BACPC,GAAc,uBACdC,GAAc,uBAEb,IAAKC,I,SAAAA,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,WAAAA,GAAAA,a,CAAAA,KAAAA,GAAAA,KAMZ,MAAMC,GAAgC,CACpC,CAACD,GAASE,SAAU,GACpB,CAACF,GAASG,MAAO,OACjB,CAACH,GAASI,YAAa,cAGlB,SAASC,GAAeC,GAE7B,OADAA,EAAaA,EAAW9+D,QAAQ,MAAO,IACnCq+D,GAAKxmD,KAAKinD,GACLN,GAASG,KAEdL,GAAYzmD,KAAKinD,IAAeP,GAAY1mD,KAAKinD,GAC5CN,GAASI,WAEXJ,GAASE,QCvBlB,MA0OMK,GAAuC,GAChCC,GAA2B,oDAoCxC,GA/Qc,+8JA8OX3uD,MAAM,MACNha,KAAK4oE,IAQG,CACLrvF,GARSqvF,EAAI7rC,OAAO,EAAG,GAQnB8rC,KAPOD,EAAI7rC,OAAO,EAAG,GAOfxzB,KANE,IAAGq/D,EAAI3wD,MAAM,OAAQ,KAMjB/Z,KALL0qE,EAAI5uD,MAAM,OAAO,GAKN8uD,YAI5B,SAA8BC,GAC5B,IAAKA,EACH,OAAOJ,GAGT,MAAMK,EAAcD,EAAO,GAC3B,IAAIE,EAEJ,IAAKP,GAAaM,GAAc,CAC9B,MAAME,EAAoBF,EAAYhvD,MAAM,IAAIha,IAAIlJ,QACpDmyE,EAAoBC,EAAkB7qC,QAAO,CAACC,EAAQ7sB,EAAOxR,IACnD,GAAEq+B,WAAgB7sB,MAAUxR,EAAI,EAAI,IAAM,MACjD,IACHyoE,GAAaM,GAAe,IAAIG,OAAQ,GAAEF,IAAoB,MAAMG,OAAO,EAAIF,EAAkBzuF,WAGnG,OAAOiuF,GAAaM,GAvBEK,CADLT,EAAI3wD,MAAM,aCpNvBuG,GAA2B,CAC/B8qD,YAAa,GACbC,YAAa,GACbC,KAAM,GACN1qD,MAAO,GACP2qD,YAAa,GACbC,SAAU,GACVl3D,SAAU,GACVoM,MAAO,GACP+qD,MAAO,GACPC,SAAU,GACVnB,WAAY,GACZoB,WAAY,GACZC,OAAQ,GACRC,IAAK,GACLC,eAAgB,GAChBC,WAAY,GACZC,UAAU,EACVC,iBAAiB,EACjBC,WAAY,IAGRC,GAAgD,CAACvrD,EAAOC,KAC5D,OAAQA,EAAOnoB,MACb,IAAK,iBACH,MAAO,IACFkoB,EACHwqD,YAAavqD,EAAOC,QACpBorD,WAAY,IACPtrD,EAAMsrD,WACTd,iBAAatsF,IAGnB,IAAK,iBACH,MAAO,IACF8hC,EACHyqD,YAAaxqD,EAAOC,QACpBorD,WAAY,IACPtrD,EAAMsrD,WACTb,iBAAavsF,IAGnB,IAAK,aACH,MAAO,IACF8hC,EACH0qD,KAAMzqD,EAAOC,QACborD,WAAY,IACPtrD,EAAMsrD,WACTZ,UAAMxsF,IAGZ,IAAK,cACH,MAAO,IACF8hC,EACHA,MAAOC,EAAOC,QACdorD,WAAY,IACPtrD,EAAMsrD,WACTtrD,WAAO9hC,IAGb,IAAK,gBACH,MAAO,IACF8hC,EACH2qD,YAAa1qD,EAAOC,QACpBgrD,eAAgBM,GAAkBvrD,EAAOC,SACzCorD,WAAY,IACPtrD,EAAMsrD,WACTX,iBAAazsF,IAGnB,IAAK,iBACH,MAAO,IACF8hC,EACH4qD,SAAU3qD,EAAOC,QACjBorD,WAAY,IACPtrD,EAAMsrD,WACTV,cAAU1sF,IAGhB,IAAK,iBACH,MAAO,IACF8hC,EACHtM,SAAUuM,EAAOC,QACjBorD,WAAY,IACPtrD,EAAMsrD,WACT53D,cAAUx1B,IAGhB,IAAK,cACH,MAAO,IACF8hC,EACHF,MAAOG,EAAOC,QACdorD,WAAY,IACPtrD,EAAMsrD,WACTxrD,WAAO5hC,IAGb,IAAK,cACH,MAAO,IACF8hC,EACH6qD,MAAO5qD,EAAOC,QACdorD,WAAY,IACPtrD,EAAMsrD,WACTT,WAAO3sF,IAGb,IAAK,iBACH,MAAO,IAAK8hC,EAAO8qD,SAAU7qD,EAAOC,SACtC,IAAK,mBACH,MAAO,IACFF,EACH2pD,WAAY1pD,EAAOC,QACnBorD,WAAY,IACPtrD,EAAMsrD,WACT3B,gBAAYzrF,IAGlB,IAAK,mBACH,MAAO,IACF8hC,EACH+qD,WAAY9qD,EAAOC,QACnBorD,WAAY,IACPtrD,EAAMsrD,WACTP,gBAAY7sF,IAGlB,IAAK,mBACH,MAAO,IACF8hC,EACHgrD,OAAQ/qD,EAAOC,QACforD,WAAY,IACPtrD,EAAMsrD,WACTN,YAAQ9sF,IAGd,IAAK,gBACH,MAAO,IACF8hC,EACHirD,IAAKhrD,EAAOC,QACZorD,WAAY,IACPtrD,EAAMsrD,WACTL,SAAK/sF,IAGX,IAAK,uBACH,MAAO,IACF8hC,EACHkrD,eAAgBjrD,EAAOC,QACvBorD,WAAY,IACPtrD,EAAMsrD,WACTJ,oBAAgBhtF,IAGtB,IAAK,mBACH,MAAO,IACF8hC,EACHmrD,WAAYlrD,EAAOC,QACnBorD,WAAY,IACPtrD,EAAMsrD,WACTH,gBAAYjtF,IAGlB,IAAK,iBACH,MAAO,IAAK8hC,EAAOorD,SAAUnrD,EAAOC,SACtC,IAAK,wBACH,MAAO,IAAKF,EAAOqrD,gBAAiBprD,EAAOC,SAC7C,IAAK,iBACH,OAAID,EAAOC,QAAQyqD,YACV,IACF3qD,KACAC,EAAOC,QACVgrD,eAAgBM,GAAkBvrD,EAAOC,QAAQyqD,cAG9C,IAAK3qD,KAAUC,EAAOC,SAC/B,IAAK,gBACH,MAAO,IACFF,EACHsrD,WAAY,IACPtrD,EAAMsrD,cACNrrD,EAAOC,UAGhB,QACE,OAAOF,IAIb,SAASwrD,GAAkBC,GACzB,MAAM1rC,EAAUmC,GAAAA,MAAiB,QAAC,GAAEznD,GAAH,SAAYA,IAAOgxF,KACpD,OAAO1rC,EAAUA,EAAQ3gC,KAAO,GCvNnB,SAASssE,GACtBjoF,GACA,IADkCkoF,EAClC,uDAJuB,KAKvBnsF,EAAAA,EAAAA,KAAU,KACJoF,EAAAA,IAIJzC,YAAW,MACTqrE,EAAAA,EAAAA,KAAQ,KACF/pE,EAAIjB,SACNiB,EAAIjB,QAAQ6pC,aAGfs/C,KACF,CAACloF,EAAKkoF,ICNX,MAyCA,IAAe5vF,EAAAA,EAAAA,KAzCesN,IAC5B,MAAM,GACJ5O,EADI,MAEJwT,EAFI,MAGJmhB,EAHI,SAIJw8D,EAJI,MAKJ/nE,EALI,IAMJpgB,EANI,YAOJ+c,EAPI,SAQJzI,EARI,SASJnE,GACEvK,EACEwiF,EAAYhoE,GAASuL,EACrBs8C,GAAgBtrE,EAAAA,EAAAA,GACpB,cACA6N,GAAS,UACT4V,GAAS,QACTgoE,GAAa,aACbD,GAAY,aACZ,eAGF,OACE,0BAAK3tF,UAAWytE,GACd,6BACEztE,UAAU,eACVxD,GAAIA,EACJwT,MAAOA,GAAS,GAChB8J,SAAUA,EACVyI,YAAaA,GAAe4O,EAC5B3rB,IAAKA,GAEJmQ,GAEFi4E,GAAapxF,GACZ,4BAAOqxF,QAASrxF,GAAKoxF,OCsJ7B,IAAe9vF,EAAAA,EAAAA,KAlLoB,IAO7B,IAP8B,MAClCikC,EADkC,UAElC+rD,EAFkC,UAGlCC,EAHkC,SAIlCC,EAJkC,YAKlCC,EALkC,SAMlC1iD,GACI,EAEJ,MAAM9xB,GAAW1V,EAAAA,EAAAA,IAAyB,MAEpCmqF,GAAWnqF,EAAAA,EAAAA,IAAyB,MAEpCoqF,GAAmBpqF,EAAAA,EAAAA,IAA0B,OAEnDxC,EAAAA,EAAAA,KAAU,KACJ4sF,EAAiB5pF,SAChB4pF,EAAiB5pF,QAAQyL,QAAU+xB,EAAM2qD,cAC5CyB,EAAiB5pF,QAAQyL,MAAQ+xB,EAAM2qD,eAExC,CAAC3qD,EAAM2qD,cAEV,MAAMptF,GAAOC,EAAAA,EAAAA,KAEbkuF,GAAuBh0E,GAEvB,MAAM20E,GAAuB/uF,EAAAA,EAAAA,KAAa+C,IACxCmpC,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAAS7/B,EAAE6G,OAAO+G,UACpD,CAACu7B,IAEE8iD,GAAuBhvF,EAAAA,EAAAA,KAAa+C,IACxCmpC,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAAS7/B,EAAE6G,OAAO+G,UACpD,CAACu7B,IAEE+iD,GAAmBjvF,EAAAA,EAAAA,KAAa+C,IACpCmpC,EAAS,CAAE1xB,KAAM,aAAcooB,QAAS7/B,EAAE6G,OAAO+G,UAChD,CAACu7B,IAEEgjD,GAAoBlvF,EAAAA,EAAAA,KAAa+C,IACrCmpC,EAAS,CAAE1xB,KAAM,cAAeooB,QAAS7/B,EAAE6G,OAAO+G,UACjD,CAACu7B,IAEEijD,GAAsBnvF,EAAAA,EAAAA,KAAa+C,IACvCmpC,EAAS,CAAE1xB,KAAM,gBAAiBooB,QAAS7/B,EAAE6G,OAAO+G,UACnD,CAACu7B,IAEEkjD,GAAuBpvF,EAAAA,EAAAA,KAAa+C,IACxCmpC,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAAS7/B,EAAE6G,OAAO+G,UACpD,CAACu7B,IAEEmjD,GAAuBrvF,EAAAA,EAAAA,KAAa+C,IACxCmpC,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAAS7/B,EAAE6G,OAAO+G,UACpD,CAACu7B,IAEEojD,GAAoBtvF,EAAAA,EAAAA,KAAa+C,IACrCmpC,EAAS,CAAE1xB,KAAM,cAAeooB,QAAS7/B,EAAE6G,OAAO+G,UACjD,CAACu7B,IAEEqjD,GAAoBvvF,EAAAA,EAAAA,KAAa+C,IACrC,IAAI,MAAE4N,GAAU5N,EAAE6G,OAClB+G,EAAS,IAAGA,EAAM4c,QAAQ,MAAO,MAC7BshE,EAAS3pF,UACX2pF,EAAS3pF,QAAQyL,MAAQA,GAE3Bu7B,EAAS,CAAE1xB,KAAM,cAAeooB,QAASjyB,MACxC,CAACu7B,IAEEsjD,GAAuBxvF,EAAAA,EAAAA,KAAa+C,IACxCmpC,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAAS7/B,EAAE6G,OAAO+G,UACpD,CAACu7B,KAEE,WAAE8hD,GAAetrD,EACvB,OACE,0BAAK/hC,UAAU,gBACb,+BACGiuF,EACC,8BACE,6BAAK3uF,EAAK,2BACV,mBAAC+iB,GAAA,EAAD,CACE7c,IAAKiU,EACL0X,MAAM,oBACNrX,SAAUs0E,EACVp+E,MAAO+xB,EAAMwqD,YACb9+D,UAAU,OACV7H,MAAOynE,EAAWd,cAEpB,mBAAClqE,GAAA,EAAD,CACE8O,MAAM,oBACNrX,SAAUu0E,EACVr+E,MAAO+xB,EAAMyqD,YACb/+D,UAAU,OACV7H,MAAOynE,EAAWb,cAEpB,mBAACnqE,GAAA,EAAD,CACE8O,MAAM,OACNrX,SAAUw0E,EACVt+E,MAAO+xB,EAAM0qD,KACbh/D,UAAU,OACV7H,MAAOynE,EAAWZ,OAEpB,mBAACpqE,GAAA,EAAD,CACE8O,MAAM,QACNrX,SAAUy0E,EACVv+E,MAAO+xB,EAAMA,MACbtU,UAAU,OACV7H,MAAOynE,EAAWtrD,QAEpB,mBAAC,GAAD,CACE5Q,MAAM,UACN5O,YAAY,UACZzI,SAAU00E,EACVx+E,MAAO+xB,EAAM2qD,YACbiB,SAAUzmF,SAAQ,GAClB1K,GAAG,mBACHopB,MAAOynE,EAAWX,YAClBlnF,IAAK2oF,GAEJlqC,GAAAA,KAAgB,QAAC,KAAE9iC,EAAF,GAAQ3kB,GAAT,SACf,6BACEwT,MAAOxT,EACPwD,UAAU,eAETmhB,OAKP,mBAACkB,GAAA,EAAD,CACE8O,MAAM,YACNrX,SAAU20E,EACVz+E,MAAO+xB,EAAM4qD,SACbl/D,UAAU,OACV7H,MAAOynE,EAAWV,iBAGpB1sF,EACF+tF,GAAYF,GAAaC,EACzB,6BAAKzuF,EAAK,iCACRW,EACF+tF,GACA,mBAAC3rE,GAAA,EAAD,CACE8O,MAAM,YACNrX,SAAU40E,EACV1+E,MAAO+xB,EAAMtM,SACbhI,UAAU,OACV7H,MAAOynE,EAAW53D,WAGpBq4D,GACA,mBAACzrE,GAAA,EAAD,CACE8O,MAAM,QACNrX,SAAU60E,EACV3+E,MAAO+xB,EAAMF,MACbpU,UAAU,QACV7H,MAAOynE,EAAWxrD,QAGpBksD,GACA,mBAAC1rE,GAAA,EAAD,CACE8O,MAAM,eACNrX,SAAU80E,EACV5+E,MAAO+xB,EAAM6qD,MACbn/D,UAAU,MACV7H,MAAOynE,EAAWT,MAClBpnF,IAAK0oF,IAGT,mBAACnlD,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,uBACZizC,SAAUjzC,EAAK,2BACf0pC,QAAS9hC,QAAQ66B,EAAMorD,UACvBrzE,SAAU+0E,SCtIpB,IAAe/wF,EAAAA,EAAAA,KAxCgB,IAKzB,IAL0B,MAC9BikC,EAD8B,gBAE9B+sD,EAF8B,SAG9BC,EAH8B,SAI9BxjD,GACI,EACJ,MAAMjsC,GAAOC,EAAAA,EAAAA,MAEbgC,EAAAA,EAAAA,KAAU,KACHutF,IAAmB/sD,EAAM8qD,UAG9BthD,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAAS6sD,EAAgB,GAAGtyF,OAC9D,CAACsyF,EAAiB/sD,EAAM8qD,SAAUthD,IAErC,MAAMyjD,GAAuB3vF,EAAAA,EAAAA,KAAa2Q,IACxCu7B,EAAS,CAAE1xB,KAAM,iBAAkBooB,QAASjyB,MAC3C,CAACu7B,IAEEla,GAAU5xB,EAAAA,EAAAA,KAAQ,IAAOqvF,EAAgB7rE,KAAI,QAAGzmB,GAAIwT,EAAO4W,MAAOuK,EAApB,OAA2B89D,GAA5B,QAA0C,CAC3F99D,MAAAA,EACAohB,UAAU28C,EAAAA,GAAAA,GAAeD,EAAQF,EAAUzvF,EAAKktB,MAChDxc,MAAAA,OACI,CAAC8+E,EAAiBC,EAAUzvF,EAAKktB,OAEvC,OACE,0BAAKxsB,UAAU,YACb,+BACE,sDACA,mBAACoxB,GAAA,EAAD,CACEjQ,KAAK,mBACLkQ,QAASA,EACTvX,SAAUk1E,EACV19D,SAAUyQ,EAAM8qD,gBC6B1B,SAASsC,GACPzvC,EAAgC94B,EAAe5W,EAAe++E,GAC9D,IADiFK,EACjF,wDACA,OACE,0BAAKpvF,UAAY,oBAAkBovF,EAAO,uBAAyB,KACjE,0BAAKpvF,UAAU,SACX4mB,GAEJ,0BAAK5mB,UAAU,UACZkvF,EAAAA,GAAAA,GAAel/E,EAAO++E,EAAUrvC,KAMzC,SAAS2vC,GAAmB5uF,EAAcmmB,EAAeoQ,GACvD,OACE,0BAAKh3B,UAAU,sBACb,wBAAGA,UAAWS,GAAd,KACA,0BAAKT,UAAU,QACb,0BAAKA,UAAU,SACX4mB,GAEJ,wBAAG5mB,UAAU,QACTg3B,KAOZ,UAAel5B,EAAAA,EAAAA,KAnFgB,IAOzB,IAP0B,eAC9BwxF,EAD8B,OAE9BC,EAF8B,eAG9BC,EAH8B,aAI9BC,EAJ8B,SAK9BV,EAL8B,WAM9BW,GACI,EACJ,MAAMpwF,GAAOC,EAAAA,EAAAA,MAEP,SAAEowF,EAAF,MAAY/oE,EAAZ,KAAmB3lB,GAASquF,GAAkB,IAC9C,cACJM,EADI,gBAEJC,EAFI,gBAGJC,EAHI,KAIJ3uE,EAJI,MAKJyrE,EALI,eAMJmD,GACGN,GAAgB,GAErB,OACE,0BAAKzvF,UAAU,YACb,0BAAKA,UAAU,yBACZ2vF,GAAY,0BAAKl0F,IAAKk0F,EAAU/gF,IAAI,KACrC,0BAAK5O,UAAU,QACb,6BAAK4mB,GACL,4BAAI3lB,KAGR,0BAAKjB,UAAU,cACXuvF,GAAUA,EAAOtsE,KAAKm9C,GACtB+uB,GAAkB7vF,EAAKktB,KAAM4zC,EAAKjvC,MAAOivC,EAAK6uB,OAAQF,KAEtDS,GAAkBA,EAAevsE,KAAKm9C,GACtC+uB,GAAkB7vF,EAAKktB,KAAM4zC,EAAKjvC,MAAOivC,EAAK6uB,OAAQF,UAEvC9uF,IAAfyvF,GACAP,GAAkB7vF,EAAKktB,KAAMltB,EAAK,wBAAyBowF,EAAYX,GAAU,IAGrF,0BAAK/uF,UAAU,gBACZ4vF,GAAiBP,GAAmB,YAAaO,EAAe,kBAChEC,GAAmBR,GAAmB,kBAAmBQ,EAAiB,oBAC1EC,GAAmBT,GAAmB,gBAAiBS,EAAiB,oBACxE3uE,GAAQkuE,GAAmB,YAAaluE,EAAM,QAC9CyrE,GAASyC,GAAmB,aAAczC,EAAO,gBACjDmD,GAAkBV,GAAmB,aAAcU,EAAgB,wBC9B5E,IAAejyF,EAAAA,EAAAA,KA/BoB,IAAgC,IAA/B,MAAEkS,EAAF,MAAS4V,EAAT,SAAgB9L,GAAe,EAEjE,MAAMk2E,GAAiBjsF,EAAAA,EAAAA,IAAyB,MAE1C+c,GAAgBzhB,EAAAA,EAAAA,KAAa+C,IACjC,GAAc,cAAVA,EAAEoH,KAA0D,MAAnCwG,EAAMigF,OAAOjgF,EAAMtS,OAAS,GAAY,CACnE,MAAM6oD,EAAWv2C,EAAM0wB,MAAM,EAAG1wB,EAAMtS,OAAS,GAC3CsyF,EAAezrF,UACjByrF,EAAezrF,QAAQyL,MAAQu2C,MAGlC,CAACv2C,IAEEyvC,GAAepgD,EAAAA,EAAAA,KAAa+C,IAChC0X,EC9BG,SAA0B+jD,GAE/B,MAAMqyB,GADNryB,EAAQA,EAAMjxC,QAAQ,SAAU,IAAI8T,MAAM,EAAG,IACzBxF,MAAM,WAO1B,OANIg1D,MAAAA,GAAAA,EAAQ,IAAMn2E,OAAOm2E,EAAM,IAAM,KACnCA,EAAM,GAAK,MAETA,MAAAA,GAAAA,EAAQ,IAA0B,IAApBA,EAAM,GAAGxyF,SAAiBwyF,EAAM,KAChDA,EAAM,GAAK,IAENA,EAAQA,EAAM5lF,KAAK,KAAO,GDqBtB6lF,CAAiB/tF,EAAE6G,OAAO+G,UAClC,CAAC8J,IAEJ,OACE,mBAACuI,GAAA,EAAD,CACE8O,MAAM,cACN3rB,IAAKwqF,EACLl2E,SAAU2lC,EACVn9B,UAAWxB,EACX9Q,MAAOA,EACP4V,MAAOA,EACP6H,UAAU,UACVm1D,UAlCmB,O,0BEOzB,MAkDA,IAAe9kF,EAAAA,EAAAA,KA1CkB,IAAgC,IAA/B,MAAEkS,EAAF,MAAS4V,EAAT,SAAgB9L,GAAe,EAE/D,MAAMs2E,GAAgBrsF,EAAAA,EAAAA,IAAyB,MAE/C0pF,GAAuB2C,GAEvB,MAAOC,EAAUC,IAAehvF,EAAAA,EAAAA,IAAiB8pF,GAASE,UAC1D/pF,EAAAA,EAAAA,KAAU,KACR,MAAMgvF,EAAc9E,GAAez7E,GACnCsgF,EAAYC,KAEX,IAEH,MAAM9wC,GAAepgD,EAAAA,EAAAA,KAAa+C,IAChC,MAAMmkD,EDzBH,SAA0BsX,GAE/B,MAAMqyB,GADNryB,EAAQA,EAAMjxC,QAAQ,SAAU,KACZsO,MAAM,WAC1B,OAAOg1D,EAAQA,EAAM5lF,KAAK,KAAO,GCsBdkmF,CAAiBpuF,EAAE6G,OAAO+G,OACrCugF,EAAc9E,GAAerpF,EAAE6G,OAAO+G,OAC5CsgF,EAAYC,GACZz2E,EAASysC,GACL6pC,EAAc7rF,UAChB6rF,EAAc7rF,QAAQyL,MAAQu2C,KAE/B,CAACzsC,EAAUs2E,IAERK,EAqBR,SAAqBJ,GACnB,OAAQA,GACN,KAAKjF,GAASI,WACZ,OAAO,0BAAK/vF,IAAKi1F,GAAoB9hF,IAAI,KAC3C,KAAKw8E,GAASG,KACZ,OAAO,0BAAK9vF,IAAKk1F,GAAc/hF,IAAI,KACrC,QACE,QA5BagiF,CAAYP,GAE7B,OACE,0BAAKrwF,UAAU,aACb,2BAAMA,UAAU,cAAcywF,GAC9B,mBAACpuE,GAAA,EAAD,CACE7c,IAAK4qF,EACLj/D,MAAM,cACNrX,SAAU2lC,EACVzvC,MAAOA,EACPyd,UAAU,UACVztB,UAAWqwF,EAAW,iBAAmB,GACzCzqE,MAAOA,EACPg9D,UA5CuB,SC4I/B,IAAe9kF,EAAAA,EAAAA,KAlImB,IAO5B,IAP6B,MACjCikC,EADiC,mBAEjC8uD,EAFiC,mBAGjCC,EAHiC,YAIjCC,EAJiC,QAKjCC,EALiC,SAMjCzlD,GACI,EAEJ,MAAM4iD,GAAmBpqF,EAAAA,EAAAA,IAA0B,OAEnDxC,EAAAA,EAAAA,KAAU,KACJ4sF,EAAiB5pF,SAChB4pF,EAAiB5pF,QAAQyL,QAAU+xB,EAAMkrD,iBAC5CkB,EAAiB5pF,QAAQyL,MAAQ+xB,EAAMkrD,kBAExC,CAAClrD,EAAMkrD,iBAEV,MAAMgE,GAAyB5xF,EAAAA,EAAAA,KAAa2Q,IAC1Cu7B,EAAS,CAAE1xB,KAAM,mBAAoBooB,QAASjyB,MAC7C,CAACu7B,IAEE2lD,GAAyB7xF,EAAAA,EAAAA,KAAa+C,IAC1CmpC,EAAS,CAAE1xB,KAAM,mBAAoBooB,QAAS7/B,EAAE6G,OAAO+G,MAAMmhF,kBAC5D,CAAC5lD,IAEE6lD,GAAqB/xF,EAAAA,EAAAA,KAAa2Q,IACtCu7B,EAAS,CAAE1xB,KAAM,mBAAoBooB,QAASjyB,MAC7C,CAACu7B,IAEE8lD,GAAkBhyF,EAAAA,EAAAA,KAAa+C,IACnCmpC,EAAS,CAAE1xB,KAAM,gBAAiBooB,QAAS7/B,EAAE6G,OAAO+G,UACnD,CAACu7B,IAEEijD,GAAsBnvF,EAAAA,EAAAA,KAAa+C,IACvCmpC,EAAS,CAAE1xB,KAAM,uBAAwBooB,QAAS7/B,EAAE6G,OAAO+G,UAC1D,CAACu7B,IAEE+lD,GAA8BjyF,EAAAA,EAAAA,KAAa+C,IAC/CmpC,EAAS,CAAE1xB,KAAM,mBAAoBooB,QAAS7/B,EAAE6G,OAAO+G,UACtD,CAACu7B,IAEEgmD,GAA8BlyF,EAAAA,EAAAA,KAAa+C,IAC/CmpC,EAAS,CAAE1xB,KAAM,wBAAyBooB,QAAS7/B,EAAE6G,OAAO+G,UAC3D,CAACu7B,IAEEjsC,GAAOC,EAAAA,EAAAA,MAEP,WAAE8tF,EAAa,IAAOtrD,EAE5B,OACE,0BAAK/hC,UAAU,eACb,+BACE,6BAAKV,EAAK,qBACV,mBAAC,GAAD,CACEwa,SAAUm3E,EACVjhF,MAAO+xB,EAAM2pD,WACb9lE,MAAOynE,EAAW3B,aAElBoF,GACA,mBAACzuE,GAAA,EAAD,CACE8O,MAAM,eACNrX,SAAUo3E,EACVlhF,MAAO+xB,EAAM+qD,WACbr/D,UAAU,OACV7H,MAAOynE,EAAWP,aAGtB,8BAAS9sF,UAAU,iBACjB,mBAAC,GAAD,CACEgQ,MAAO+xB,EAAMgrD,OACbjzE,SAAUs3E,EACVxrE,MAAOynE,EAAWN,SAEpB,mBAAC1qE,GAAA,EAAD,CACE8O,MAAM,WACNrX,SAAUu3E,EACVrhF,MAAO+xB,EAAMirD,IACbv/D,UAAU,UACVm1D,UAAW,EACXh9D,MAAOynE,EAAWL,OAGpB+D,GAAeC,EACf,6BAAK1xF,EAAK,+BACRW,EACF8wF,GACA,mBAAC,GAAD,CACE5/D,MAAM,UACN5O,YAAY,UACZzI,SAAU00E,EACVx+E,MAAO+xB,EAAMkrD,eACbU,SAAUzmF,SAAQ,GAClB1K,GAAG,kBACHopB,MAAOynE,EAAWJ,eAClBznF,IAAK2oF,GAGHlqC,GAAAA,KAAgB,QAAC,KAAE9iC,GAAH,SACd,6BACEnR,MAAOmR,EACPnhB,UAAU,eAETmhB,OAMT6vE,GACA,mBAAC3uE,GAAA,EAAD,CACE8O,MAAM,YACNrX,SAAUw3E,EACVthF,MAAO+xB,EAAMmrD,WACbz/D,UAAU,OACV7H,MAAOynE,EAAWH,aAGpB2D,GACA,mBAAC9nD,GAAA,EAAD,CACE5X,MAAO7xB,EAAK,qCACZ0pC,QAASjH,EAAMqrD,gBACftzE,SAAUy3E,SC2MtB,IAAezzF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,KACJ4b,EADI,gBAEJk1E,EAFI,UAGJ0C,EAHI,mBAIJX,EAJI,QAKJY,EALI,eAMJnC,EANI,eAOJoC,EAPI,aAQJC,EARI,gBASJC,EATI,MAUJhsE,GACE5nB,EAAO6zF,QAELC,EAAkB5qF,QAAQuqF,KAAaC,GArVxB,WAqV0CA,KACzD,mBAAEZ,EAAF,YAAsBC,EAAtB,QAAmCC,GAAaW,GAAgB,IAChE,cACJI,EADI,eAEJC,EAFI,eAGJC,EAHI,yBAIJC,EAJI,SAKJC,EALI,gBAMJC,EANI,gBAOJC,EAPI,SAQJtD,EARI,OASJQ,GACGkC,GAAW,GAEhB,MAAO,CACL73E,KAAAA,EACAk1E,gBAAAA,EACA0C,UAAAA,EACAX,mBAAAA,EACAa,eAAAA,EACAE,gBAAAA,EACAG,cAAAA,EACAG,yBAAAA,EACAF,eAAAA,EACAC,eAAAA,EACAE,SAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACAtD,SAAAA,EACAQ,OAAAA,EACAuC,gBAAAA,EACAxC,eAAAA,EACAwB,mBAAAA,EACAC,YAAAA,EACAC,QAAAA,EACAprE,MAAAA,KAlDc7nB,EAzS0C,IAuBxD,IAvByD,OAC7D4B,EAD6D,QAE7D2G,EAF6D,KAG7DsT,EAH6D,gBAI7Dk1E,EAJ6D,UAK7D0C,EAL6D,mBAM7DX,EAN6D,cAO7DkB,EAP6D,yBAQ7DG,EAR6D,eAS7DF,EAT6D,eAU7DC,EAV6D,gBAW7DG,EAX6D,gBAY7DC,EAZ6D,SAa7DtD,EAb6D,gBAc7D6C,EAd6D,gBAe7DE,EAf6D,eAgB7DxC,EAhB6D,eAiB7DoC,EAjB6D,OAkB7DnC,EAlB6D,mBAmB7DuB,EAnB6D,YAoB7DC,EApB6D,QAqB7DC,EArB6D,MAsB7DprE,GACI,EACJ,MAAM,sBACJ0sE,EADI,gBAEJC,EAFI,eAGJC,EAHI,oBAIJC,EAJI,kBAKJC,IACE3zF,EAAAA,EAAAA,OAEG4zF,EAAcC,IV8IdhpC,EAAAA,GAAAA,GAAW0jC,GAAS7rD,KU7IpBrD,EAAW03C,IAAgBx0E,EAAAA,EAAAA,KAAS,GACrChC,GAAOC,EAAAA,EAAAA,MAEbgC,EAAAA,EAAAA,KAAU,MACJqY,GAAQgM,IACVkwD,GAAa,KAEd,CAACl8D,EAAMgM,KAEVrkB,EAAAA,EAAAA,KAAU,KACJqkB,MAAAA,GAAAA,EAAOitE,OACTD,EAAgB,CACd/4E,KAAM,gBACNooB,QAAS,CACP,CAACrc,EAAMitE,OAAQjtE,EAAMxoB,aAI1B,CAACwoB,EAAOgtE,KAEXrxF,EAAAA,EAAAA,KAAU,KACR,GAAIiwF,EAAW,CACb,MACErwE,KAAMsU,EADF,MACYm3D,EADZ,MACmB/qD,EADnB,gBAC0BiuD,GAC5B0B,EACJoB,EAAgB,CACd/4E,KAAM,iBACNooB,QAAS,CACPxM,SAAAA,EACAm3D,MAAOA,GAA6B,MAApBA,EAAMqD,OAAO,GACxB,IAAGrD,IACJA,EACJ/qD,MAAAA,KACIiuD,GAAmB,SAI5B,CAAC0B,EAAWoB,IAEf,MAAME,GAAwBzzF,EAAAA,EAAAA,KAAY,KACxCqzF,MACC,CAACA,IAEEhD,GAAajwF,EAAAA,EAAAA,KAAQ,IACrBma,IAASm5E,EAAAA,GAAAA,SACJ,EA2Rb,WAAoH,IAA7FxD,EAA6F,uDAA3E,GAAIT,EAAuE,uCAAxBkE,EAAwB,uCAClH,MAAMxD,EAAiBV,EACnBmE,GAAkBnE,EAAiBkE,GACnC,GACJ,IAAI1c,EAAQ,EACZ,MAAM4c,EAAc3D,EAAOp6D,OAAOq6D,GAAkB,IAIpD,OAHAlZ,EAAQ4c,EAAY5xC,QAAO,CAACm7B,EAAK0W,IACxB1W,EAAM0W,EAAIlE,QAChB3Y,GACIA,EAjSE8c,CAAc7D,EAAQT,EAAiB6D,EAAa9F,WAC1D,CAACjzE,EAAM+4E,EAAa9F,SAAU0C,EAAQT,IAEnCW,GAAehwF,EAAAA,EAAAA,KAAQ,KAC3B,GAAIma,IAASm5E,EAAAA,GAAAA,SAGb,OA6RJ,SAAyBhxD,EAAkB+sD,EAA+Ce,GACxF,MACMD,EAAiB,GZjZlB,SAA4BlE,GACjC,MAAM2E,EAAW5E,GAAeC,GAChC,OAAOL,GAAMgF,IAAuB,GY8YfgD,CAAmBtxD,EAAM2pD,gBACJ3pD,EAAM2pD,WAAWhrD,OAAO,KAC5DovD,EAAkB/tD,EAAMwqD,YACzB,GAAExqD,EAAMwqD,gBAAgBxqD,EAAM0qD,SAAS1qD,EAAM2qD,mBAC9CzsF,GACE,MAAE2sF,EAAOn3D,SAAUtU,GAAS4gB,EAC5BixD,EAAiBlE,EAAkBwE,GAAmBxE,EAAiB/sD,EAAM8qD,eAAY5sF,EAE/F,MAAO,CACL2vF,cAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACA3uE,KAAAA,EACAyrE,MAAAA,EACAmD,eAPqBiD,MAAAA,OAAH,EAAGA,EAAgBpsE,OArS9B2sE,CAAgBZ,EAAc7D,EAAiB4C,GAAkB,MACvE,CAAC93E,EAAM+4E,EAAc7D,EAAiB4C,IA2EnC8B,GAAkBn0F,EAAAA,EAAAA,KAAY,KAClC,MAAM,SAAE8tF,GAAawF,EACfc,EAkOV,SAAwBd,GACtB,MAAM,YACJpG,EADI,YAEJC,EAFI,KAGJC,EAHI,MAIJ1qD,EAJI,YAKJ2qD,EALI,SAMJC,EACAl3D,SAAUtU,EAPN,MAQJyrE,EARI,MASJ/qD,GACE8wD,EAWJ,MAAO,CACLxxE,KAAAA,EACAyrE,MAAAA,EACA/qD,MAAAA,EACAiuD,gBAbsB,CACtBvD,YAAAA,EACAC,YAAAA,EACAC,KAAAA,EACA1qD,MAAAA,EACA2qD,YAAAA,EACAC,SAAAA,IArPoB+G,CAAef,GACnCL,EAAsB,CAAEmB,YAAAA,EAAatG,SAAAA,MACpC,CAACmF,EAAuBK,IAErBgB,GAAkBt0F,EAAAA,EAAAA,KAAY,KAClC,MAAMu0F,EA2PV,SAAwBjB,GACtB,MAAM,WACJjH,EADI,WACQoB,EADR,OACoBC,EADpB,IAC4BC,EAD5B,eACiCC,EADjC,WACiDC,GACnDyF,GACGkB,EAAaC,GAAc/G,EAAO9vD,MAAM,KAW/C,MAAO,CACLjG,KAXW,CACX00D,WAAAA,EACAoB,WAAAA,EACA+G,YAAAA,EACAC,WAAAA,EACA9G,IAAAA,EACAlrC,QAASmrC,EACT8G,IAAK7G,IAvQe8G,CAAerB,GACnCF,EAAoB,CAClBmB,YAAAA,MAED,CAACnB,EAAqBE,IAEnBsB,GAAW50F,EAAAA,EAAAA,KAAY,KAC3BkzF,EAAgB,CACd2B,iBAAkBvB,EAAa9F,SAC/BO,gBAAiBuF,EAAavF,oBAE/B,CAACmF,EAAiBI,IAEfwB,GAAU90F,EAAAA,EAAAA,KAAa+0F,IAC3B5B,EAAe,CAAE54E,KAAMw6E,MACtB,CAAC5B,IAEEn4B,GAAoBh7D,EAAAA,EAAAA,KAAY,KAEpC,OADAy2E,GAAa,GACLl8D,GACN,KAAKm5E,EAAAA,GAAAA,aACH,OAAOS,IACT,KAAKT,EAAAA,GAAAA,SACH,OAAOoB,EAAQpB,EAAAA,GAAAA,aACjB,KAAKA,EAAAA,GAAAA,YACH,OAAOY,IACT,KAAKZ,EAAAA,GAAAA,SACH,OAAOkB,IACT,QACE,MAAO,UAGV,CAACr6E,EAAM45E,EAAiBW,EAASR,EAAiBM,IAE/C7xE,GAAc3iB,EAAAA,EAAAA,KAAQ,KAC1B,OAAQma,GACN,KAAKm5E,EAAAA,GAAAA,aACH,OAAOzzF,EAAK,uBACd,KAAKyzF,EAAAA,GAAAA,SACH,OAAOzzF,EAAK,yBACd,KAAKyzF,EAAAA,GAAAA,YACH,OAAOzzF,EAAK,mBACd,KAAKyzF,EAAAA,GAAAA,SACH,OAAOzzF,EAAK,mBACd,QACE,MAAO,MAEV,CAACsa,EAAMta,IAEJ+0F,GAAa50F,EAAAA,EAAAA,KAAQ,IACjBma,IACDm5E,EAAAA,GAAAA,SACIzzF,EAAK,qBAAqB4vF,EAAAA,GAAAA,GAAeQ,EAAYX,EAAUzvF,EAAKktB,OAEpEltB,EAAK,SAEf,CAACsa,EAAMta,EAAMyvF,EAAUW,IAE1B,OAAIoC,EAEA,mBAACrvE,GAAA,EAAD,CACEziB,UAAU,QACVL,OAAQA,EACR2G,QAASA,GAET,qGAC6E,8BAD7E,iDAIA,mBAAC1G,EAAA,EAAD,CACEynB,QAAM,EACNnnB,QAASoG,GAERhH,EAAK,QAOZ,mBAACmjB,GAAA,EAAD,CACEziB,UAAU,eACVL,OAAQA,EACR2G,QAASA,GAET,0BAAKtG,UAAU,SAASsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAChD,mBAACL,EAAA,EAAD,CACEI,UAAU,eACVD,MAAM,cACNF,OAAK,EACLC,KAAK,UACLI,QAASoG,EACTnG,UAAU,SAEV,wBAAGH,UAAU,gBAEf,6BAAKoiB,SAEGniB,IAAT2Z,EACC,mBAACR,EAAA,EAAD,CAAY+H,KAAK,QAAQD,UAAWtH,IACjC,IACC,0BAAK5Z,UAAU,yBA/JzB,SAA4Bs0F,GAC1B,OAAQA,GACN,KAAKvB,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACEhxD,MAAO4wD,EACPpnD,SAAUqnD,EACV3E,YAAa/mF,QAAQgrF,GACrBpE,UAAW5mF,QAAQ+qF,GAAkBI,GACrCtE,UAAW7mF,QAAQ8qF,GAAkBI,GACrCpE,SAAU9mF,QAAQ6qF,KAGxB,KAAKgB,EAAAA,GAAAA,SACH,OACE,mBAAC,GAAD,CACEhxD,MAAO4wD,EACPpnD,SAAUqnD,EACV9D,gBAAiBA,GAAmB,GACpCC,SAAUA,IAGhB,KAAKgE,EAAAA,GAAAA,YACH,OACE,mBAAC,GAAD,CACEhxD,MAAO4wD,EACPpnD,SAAUqnD,EACV/B,mBAAoB3pF,SAAS0qF,GAAmBf,GAChDC,mBAAoBA,EACpBC,YAAaA,EACbC,QAASA,IAGf,KAAK+B,EAAAA,GAAAA,SACH,OACE,mBAAC,GAAD,CACExD,OAAQA,EACRC,eAAgBmD,EAAa9F,UAAYiC,EACrCmE,GAAkBnE,EAAiB6D,EAAa9F,eAChD5sF,EACJyvF,WAAYA,EACZJ,eAAgBA,EAChBG,aAAcA,EACdV,SAAUA,IAGhB,QACE,QAiHOwF,CAAmB36E,MAK1B,0BAAK5Z,UAAU,iBACb,mBAAC0O,EAAA,EAAD,CAAS3O,MAAM,UAGnB,0BAAKC,UAAU,UACb,mBAACJ,EAAA,EAAD,CACEia,KAAK,SACL3Z,QAASm6D,EACT1gD,SAAUykB,EACVA,UAAWA,GAEVi2D,IAGJzuE,IAAUA,EAAMitE,OAzMrB,WACE,GAAKjtE,EAGL,OACE,mBAACnD,GAAA,EAAD,CACEziB,UAAU,QACVL,OAAQuH,QAAQ0e,GAChBtf,QAASwsF,GAET,6BAAKltE,EAAMgL,aAAe,SAC1B,4BAAIhL,EAAMgL,aAAe,SACzB,mBAAChxB,EAAA,EAAD,CACEynB,QAAM,EACNnnB,QAASwyF,GAERpzF,EAAK,QAyLgBk1F,QA4DhC,SAASlB,GAAmBxE,EAAmC2F,GAC7D,OAAO3F,EAAgBv5D,MAAK,QAAC,GAAE/4B,GAAH,SAAYA,IAAOi4F,KAGjD,SAASxB,GAAkBnE,EAAmCkE,GAC5D,MAAM3rB,EAASisB,GAAmBxE,EAAiBkE,GACnD,OAAO3rB,MAAAA,OAAP,EAAOA,EAAQkoB,OCrXjB,MA0DA,IAAezxF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,QAAE02F,GAAY12F,EAAO6zF,SACrB,SACJ9C,EADI,OAEJQ,EAFI,KAGJoF,EAHI,YAIJC,EAJI,iBAKJC,EALI,eAMJrF,EANI,eAOJO,EAPI,SAQJJ,EARI,KASJ1uF,EATI,MAUJ2lB,GACG8tE,GAAW,GAEhB,MAAO,CACL3F,SAAAA,EACAQ,OAAAA,EACAoF,KAAAA,EACAC,YAAAA,EACAC,iBAAAA,EACArF,eAAAA,EACAO,eAAAA,EACAJ,SAAAA,EACA1uF,KAAAA,EACA2lB,MAAAA,KA1Bc7oB,EA1D4B,IAa1C,IAb2C,OAC/C4B,EAD+C,QAE/C2G,EAF+C,OAG/CipF,EAH+C,eAI/CC,EAJ+C,YAK/CoF,EAL+C,SAM/C7F,EAN+C,KAO/C4F,EAP+C,SAQ/ChF,EAR+C,KAS/C1uF,EAT+C,MAU/C2lB,EAV+C,iBAW/CiuE,EAX+C,eAY/C9E,GACI,EACJ,MAAMzwF,GAAOC,EAAAA,EAAAA,KACPkwF,GAAehwF,EAAAA,EAAAA,KAAQ,IA0E/B,SAAyBmwF,EACvB+E,EAKA5E,GACA,IAAK4E,EACH,MAAO,CAAE/E,cAAAA,GAEX,MAAM,gBAAEE,GAAoB6E,EACtBG,EAAchF,MAAAA,GAAAA,EAAiBvD,YAChC,GAAEuD,EAAgBvD,gBAAgBuD,EAAgBrD,SAASqD,EAAgBpD,mBAC5EzsF,GACE,MAAE2sF,EAAF,KAASzrE,GAASwzE,EACxB,MAAO,CACL/E,cAAAA,EACAC,gBAAiB,SACjBC,gBAAiBgF,EACjB3zE,KAAAA,EACAyrE,MAAAA,EACAmD,eAAAA,GA9FOwD,CAAgBsB,EAAkBF,EAAM5E,IAC9C,CAAC4E,EAAM5E,EAAgB8E,IAE1B,OACE,mBAACpyE,GAAA,EAAD,CACEziB,UAAU,oCACVL,OAAQA,EACR2G,QAASA,GAET,8BACE,0BAAKtG,UAAU,SAASsC,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAChD,mBAACL,EAAA,EAAD,CACEI,UAAU,eACVD,MAAM,cACNF,OAAK,EACLC,KAAK,UACLI,QAASoG,EACTnG,UAAU,SAEV,wBAAGH,UAAU,gBAEf,iCAAMV,EAAK,kBAAX,MAEF,0BAAKU,UAAU,iCACb,mBAAC,GAAD,CACEuvF,OAAQA,EACRC,eAAgBA,EAChBE,WAAYkF,EACZtF,eAAgB,CACdK,SAAAA,EACA1uF,KAAAA,EACA2lB,MAAAA,GAEF6oE,aAAcA,EACdV,SAAUA,Y,+FC/DtB,MAAMjpC,EAAyB1lD,EAAAA,GAA0B,IAAM,IAuG/D,GAAetC,EAAAA,EAAAA,KArGoB,IAW7B,IAX8B,UAClCsgC,GAAY,EADsB,kBAElCsnB,EAFkC,MAGlC9/B,EAHkC,KAIlCgc,EAJkC,YAKlCrf,EAAc,WALoB,YAMlC+J,EAAc,OANoB,WAOlC04B,EAPkC,2BAQlCY,EARkC,cASlCmvC,EATkC,SAUlChrE,GACI,EAEJ,MAAMtQ,GAAW1V,EAAAA,EAAAA,IAAyB,MACpCzE,GAAOC,EAAAA,EAAAA,MAENoiC,EAAUqzD,IAAe1zF,EAAAA,EAAAA,IAAS,KAClC2zF,EAAWC,IAAgB5zF,EAAAA,EAAAA,KAAS,GAgD3C,OA9CAC,EAAAA,EAAAA,KAAU,KACHoF,EAAAA,IACHzC,YAAW,KACTuV,EAASlV,QAAS6pC,UACjB0X,KAEJ,KAEHvkD,EAAAA,EAAAA,KAAU,KACJqkB,GACFpH,uBAAsB,KACpB/E,EAASlV,QAAS6pC,QAClB30B,EAASlV,QAAS4wF,cAGrB,CAACvvE,IAgCF,2BAAMoc,OAAO,GAAGjY,SAblB,SAAsBvX,GACpBA,EAAM/I,iBAEF20B,GAIA62D,GACFlrE,EAAS4X,IAK6ByzD,aAAa,OACnD,0BACEp1F,WAAWmC,EAAAA,EAAAA,GAAe,6BAA8Bw/B,GAAY,UAAW/b,GAAS,SACxFtjB,IAAKhD,EAAK2hB,MAAQ,WAAQhhB,GAE1B,4BACEuF,IAAKiU,EACLzZ,UAAU,eACV6Z,KAAM6rC,EAAoB,OAAS,WACnClpD,GAAG,mBACHwT,MAAO2xB,GAAY,GACnByzD,aAAa,mBACbt7E,SA1CR,SAA0B1X,GACpBwjB,GACFo/B,IAGF,MAAM,OAAE/7C,GAAW7G,EACnB4yF,EAAY/rF,EAAO+G,OACnBklF,EAAajsF,EAAO+G,MAAMtS,QAAU23F,EAAAA,IAChCN,GACFA,EAAc9rF,EAAO+G,QAkCjB1N,IAAI,SAEN,gCAAQsjB,GAASgc,GAAQrf,GACzB,0BACEviB,UAAU,kBACVE,QAnCR,WACE0lD,GAA4BF,IAmCtBp4B,KAAK,SACLC,SAAU,EACV3G,MAAM,8BAEN,wBAAG5mB,UAAW0lD,EAAoB,WAAa,sBAGlDuvC,GACC,mBAAC,IAAD,CAAQp7E,KAAK,SAASnU,QAAM,EAAC04B,UAAWA,GACrC9R,Q,sFCxGX,MACMgpE,EAAuC,CAAC,EAAG,IAC3CC,EAAwC,CAAC,EAAG,IAC5CC,EAAsC,CAAC,GAAI,GAC3CC,EAAer1F,EAAAA,GAA0Bs1F,EAAAA,GAA2BC,EAAAA,GAsD1E,GAAe73F,EAAAA,EAAAA,KApDsB,IAAkC,IAAjC,kBAAE4nD,EAAF,MAAqBD,GAAY,EACrE,MAAOmwC,EAAiBC,IAAsBv0F,EAAAA,EAAAA,OACvCw0F,EAAgBC,IAAqBz0F,EAAAA,EAAAA,OACrC00F,EAAqBC,IAA0B30F,EAAAA,EAAAA,KAAS,IACxD40F,EAAaC,IAAkB70F,EAAAA,EAAAA,KAAS,IAE/CC,EAAAA,EAAAA,KAAU,KACHq0F,EAGH1xF,YAAW,IAAMiyF,GAAe,IAhBP,MAczBr/D,EAAAA,EAAAA,GAAiB,eAAeC,KAAK8+D,KAItC,CAACD,KAEJr0F,EAAAA,EAAAA,KAAU,KACHu0F,IACHh/D,EAAAA,EAAAA,GAAiB,cAAcC,KAAKg/D,KAErC,CAACD,IAEJ,MAAMM,GAAwB/2F,EAAAA,EAAAA,KAAY,IAAM42F,GAAuB,IAAO,IAE9E,OACE,0BAAKz5F,GAAG,SAASwD,UAAWylD,EAAQ,MAAQ,KACxCuwC,GACA,0BAAKh2F,UAAU,mBAEhB41F,GACC,mBAAC,IAAD,CACEp5F,GAAG,cACHsD,KAAM2lD,EAAQ4wC,EAAAA,GAAsBZ,EACpCz1F,UAAWk2F,EAAc,SAAW,QACpC9+D,cAAew+D,EACfU,YAAahB,EACb99D,QAAM,EACNC,OAAQ2+D,IAGXN,GACC,mBAAC,IAAD,CACEt5F,GAAG,aACHsD,KAAM2lD,EAAQ4wC,EAAAA,GAAsBZ,EACpCz1F,UAAWk2F,EAAc,QAAU,SACnC9+D,cAAe0+D,EACfQ,YAAa5wC,EAAoB6vC,EAAsBC,EACvDh+D,QAAM,S,kHCrDhB,MAAM++D,EAAiE,CACrE18E,KAAM,OACNyd,QAAS,EACT00D,OAAQ,OACRwK,QAAQ,EACR12F,KAAM,CAAE0E,MAAO,KAAM9C,OAAQ,OAI/B,IAAI+0F,EACAC,EAWAC,EAwCJ,MAwDA,GAAe74F,EAAAA,EAAAA,KAxDiB,IAA2C,IAA1C,KAAE0lE,EAAF,SAAQ1pD,EAAR,QAAkBxT,GAAwB,EACzE,MAAOswF,EAAgBC,IAAqBv1F,EAAAA,EAAAA,KAAS,IAErDC,EAAAA,EAAAA,KAAU,KACHiiE,IAIAozB,EA9CT/+C,eAA2Bi/C,GACzB,IACE,MAAMC,EAAgB/7F,SAAS8jB,eAAe,eAC9C,IAAKi4E,EACH,OAGF,MAAM,YAAEz+C,EAAF,aAAe17C,GAAiBm6F,EAEtCJ,EAAU,IAAIF,EAAQM,EAAe,CACnCC,YAAY,EACZC,SAAU,CACRzyF,MAAO8zC,EACP52C,OAAQ9E,GAEVs6F,SAAU,CACR1yF,MAAO8zC,EAAc,GACrB52C,OAAQ9E,EAAe,GACvBid,KAAM,YAIV,MAAM+7B,QAAgBuhD,EAAAA,EAAAA,IAAcL,SAC9BH,EAAQS,KAAK,CAAEpxF,IAAK4vC,IAC1B,MAAOyhD,GACHC,EAAAA,IAEFC,QAAQ3xE,MAAMyxE,IAyBhBG,CAAYh0B,GA/DhB3rB,iBAME,OALK6+C,IACHA,EAAiB,qDACjBD,SAAiBC,GAAgBrrB,SAG5BqrB,EAoDHe,GAAgB1gE,MAAK,IAAM8/D,GAAkB,QAM9C,CAACrzB,EAAMozB,IAEV,MAAMt3F,GAAOC,EAAAA,EAAAA,KAab,OACE,mBAACkjB,EAAA,EAAD,CACE9iB,OAAQuH,QAAQs8D,GAChBl9D,QAASA,EACTsgB,MAAM,qBACN5mB,UAAU,YACVs6D,gBAAc,GAEbs8B,EACC,0BAAKp6F,GAAG,gBAER,mBAACgnB,EAAA,EAAD,MAEF,mBAAC5jB,EAAA,EAAD,CACEI,UAAU,iBACVH,OAAK,EACLE,MAAM,UACNG,QA5BN23C,iBACE,IAAK8+C,EACH,OAGF,MAAMp1C,QAA8Bo1C,EAAQp1C,OAAOg1C,GAC7CmB,EAA+B,iBAAXn2C,EAAsBA,GAASo2C,EAAAA,EAAAA,IAAWp2C,EAAQ,cAE5EznC,EAAS49E,IAqBLv3F,UAAWb,EAAK,cAEhB,wBAAGU,UAAU,oBC5CrB,GAAelC,EAAAA,EAAAA,KAhEsB,IAK/B,IALgC,MACpC8oB,EAAQ,8BAD4B,SAEpCjN,EAFoC,qBAGpC4sB,EAHoC,SAIpCzsB,GACI,EACJ,MAAO89E,EAAcC,IAAmBv2F,EAAAA,EAAAA,OACjCw2F,EAAgBC,IAAqBz2F,EAAAA,EAAAA,IAA6BilC,IAEzEhlC,EAAAA,EAAAA,KAAU,KACRw2F,EAAkBxxD,KACjB,CAACA,IA2BJ,MAAMyxD,GAAiB71F,EAAAA,EAAAA,GACrB21F,GAAkB,SAClBn+E,GAAY,YAGd,OACE,0BAAK3Z,UAAU,kBACb,4BACEA,UAAWg4F,EACX1qE,KAAK,SACLC,SAAU,EACV3G,MAAOA,GAEP,4BACE/M,KAAK,OACLC,SAxCR,SAA0BtH,GACxB,MAAMvJ,EAASuJ,EAAMvJ,OAEhBA,GAAWA,EAAOkuC,OAAUluC,EAAOkuC,MAAM,KAI9C0gD,EAAgB5uF,EAAOkuC,MAAM,IAC7BluC,EAAO+G,MAAQ,KAiCT2jC,OAAO,0BAET,wBAAG3zC,UAAU,oBACZ83F,GAAkB,0BAAKr8F,IAAKq8F,EAAgBlpF,IAAI,YAEnD,mBAAC,EAAD,CAAW40D,KAAMo0B,EAActxF,QAzBnC,WACEuxF,OAAgB53F,IAwB4C6Z,SAnC9D,SAA0B49E,GACxBG,OAAgB53F,GAChB6Z,EAAS49E,GAELI,GACFG,IAAIC,gBAAgBJ,GAEtBC,EAAkBE,IAAIE,gBAAgBT,Y","sources":["webpack://telegram-t/./src/components/mediaViewer/helpers/ghostAnimation.ts","webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.tsx","webpack://telegram-t/./src/hooks/useFullscreen.ts","webpack://telegram-t/./src/components/mediaViewer/helpers/formatFileSize.ts","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.tsx","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.tsx","webpack://telegram-t/./src/hooks/useTimeout.ts","webpack://telegram-t/./src/components/mediaViewer/PanZoom.tsx","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.tsx","webpack://telegram-t/./src/components/mediaViewer/SlideTransition.tsx","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.tsx","webpack://telegram-t/./src/components/common/ChatOrUserPicker.tsx","webpack://telegram-t/./src/components/main/ForwardPicker.tsx","webpack://telegram-t/./src/components/main/Dialogs.tsx","webpack://telegram-t/./src/components/main/Notifications.tsx","webpack://telegram-t/./src/components/main/SafeLinkModal.tsx","webpack://telegram-t/./src/components/common/CalendarModal.tsx","webpack://telegram-t/./src/components/main/HistoryCalendar.tsx","webpack://telegram-t/./src/components/common/DeleteMessageModal.tsx","webpack://telegram-t/./src/components/common/PinMessageModal.tsx","webpack://telegram-t/./src/components/common/UnpinAllMessagesModal.tsx","webpack://telegram-t/./src/components/middle/DeleteSelectedMessageModal.tsx","webpack://telegram-t/./src/components/common/ReportMessageModal.tsx","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.tsx","webpack://telegram-t/./src/components/common/SeenByModal.tsx","webpack://telegram-t/./src/components/middle/ReactorListModal.tsx","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.tsx","webpack://telegram-t/./src/hooks/useSelectWithEnter.ts","webpack://telegram-t/./src/components/left/search/LeftSearchResultChat.tsx","webpack://telegram-t/./src/components/left/search/RecentContacts.tsx","webpack://telegram-t/./src/components/left/search/ChatMessage.tsx","webpack://telegram-t/./src/components/left/search/DateSuggest.tsx","webpack://telegram-t/./src/components/left/search/ChatResults.tsx","webpack://telegram-t/./src/components/left/search/ChatMessageResults.tsx","webpack://telegram-t/./src/components/left/search/helpers/createMapStateToProps.ts","webpack://telegram-t/./src/components/left/search/MediaResults.tsx","webpack://telegram-t/./src/components/left/search/LinkResults.tsx","webpack://telegram-t/./src/components/left/search/FileResults.tsx","webpack://telegram-t/./src/components/left/search/AudioResults.tsx","webpack://telegram-t/./src/components/left/search/LeftSearch.tsx","webpack://telegram-t/./src/hooks/reducers/useTwoFaReducer.ts","webpack://telegram-t/./src/components/left/settings/SettingsHeader.tsx","webpack://telegram-t/./src/components/left/settings/SettingsMain.tsx","webpack://telegram-t/./src/components/common/UsernameInput.tsx","webpack://telegram-t/./src/components/left/settings/SettingsEditProfile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsDataStorage.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersMain.tsx","webpack://telegram-t/./src/components/ui/ShowMoreButton.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersEdit.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatFilters.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCoverAnimated.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCover.tsx","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneral.tsx","webpack://telegram-t/./src/util/systemFilesDialog.ts","webpack://telegram-t/./src/util/colors.ts","webpack://telegram-t/./src/components/left/settings/WallpaperTile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.tsx","webpack://telegram-t/./src/components/left/settings/SettingsNotifications.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacy.tsx","webpack://telegram-t/./src/components/left/settings/SettingsLanguage.tsx","webpack://telegram-t/./src/components/left/settings/helper/privacy.ts","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibility.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyActiveSessions.tsx","webpack://telegram-t/./src/components/left/settings/BlockUserModal.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyBlockedUsers.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEnabled.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaPassword.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaStart.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaSkippableForm.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaCongratulations.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEmailCode.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFa.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibilityExceptionList.tsx","webpack://telegram-t/./src/components/left/settings/SettingsQuickReaction.tsx","webpack://telegram-t/./src/components/left/settings/Settings.tsx","webpack://telegram-t/./src/components/left/main/ContactList.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep1.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep2.tsx","webpack://telegram-t/./src/components/left/newChat/NewChat.tsx","webpack://telegram-t/./src/components/left/ArchivedChats.tsx","webpack://telegram-t/./src/components/left/ChatFolderModal.tsx","webpack://telegram-t/./src/components/middle/message/helpers/copyOptions.ts","webpack://telegram-t/./src/util/scrollLock.ts","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.tsx","webpack://telegram-t/./src/components/middle/message/ReactionSelector.tsx","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.tsx","webpack://telegram-t/./src/components/middle/message/ContextMenuContainer.tsx","webpack://telegram-t/./src/components/common/StickerSetModal.tsx","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.tsx","webpack://telegram-t/./src/components/middle/MobileSearch.tsx","webpack://telegram-t/./src/util/findInViewport.ts","webpack://telegram-t/./src/util/isFullyVisible.ts","webpack://telegram-t/./src/util/setTooltipItemVisible.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useKeyboardNavigation.ts","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.tsx","webpack://telegram-t/./src/components/middle/composer/PollModal.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiButton.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiCategory.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSet.tsx","webpack://telegram-t/./src/components/middle/composer/StickerPicker.tsx","webpack://telegram-t/./src/components/common/GifButton.tsx","webpack://telegram-t/./src/components/middle/composer/GifPicker.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenuFooter.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.tsx","webpack://telegram-t/./src/components/middle/composer/AttachMenu.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommand.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.tsx","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/ArticleResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/GifResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/StickerResult.tsx","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.tsx","webpack://telegram-t/./src/components/right/RightSearch.tsx","webpack://telegram-t/./src/components/right/StickerSetResult.tsx","webpack://telegram-t/./src/components/right/StickerSearch.tsx","webpack://telegram-t/./src/components/right/GifSearch.tsx","webpack://telegram-t/./src/components/right/PollAnswerResults.tsx","webpack://telegram-t/./src/components/right/PollResults.tsx","webpack://telegram-t/./src/components/right/management/ManageUser.tsx","webpack://telegram-t/./src/components/right/management/ManageGroup.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupPermissions.tsx","webpack://telegram-t/./src/components/right/management/RemoveGroupUserModal.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupRemovedUsers.tsx","webpack://telegram-t/./src/components/right/management/ManageChannel.tsx","webpack://telegram-t/./src/components/right/management/ManageChatPrivacyType.tsx","webpack://telegram-t/./src/components/right/management/ManageDiscussion.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissions.tsx","webpack://telegram-t/./src/components/right/management/ManageChatAdministrators.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupRecentActions.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupAdminRights.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupMembers.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissionsCreate.tsx","webpack://telegram-t/./src/components/right/management/ManageInvites.tsx","webpack://telegram-t/./src/components/right/management/ManageInvite.tsx","webpack://telegram-t/./src/components/right/management/ManageReactions.tsx","webpack://telegram-t/./src/components/right/management/ManageInviteInfo.tsx","webpack://telegram-t/./src/components/right/management/JoinRequest.tsx","webpack://telegram-t/./src/components/right/management/ManageJoinRequests.tsx","webpack://telegram-t/./src/components/right/management/Management.tsx","webpack://telegram-t/./src/components/common/helpers/detectCardType.ts","webpack://telegram-t/./src/util/countries.ts","webpack://telegram-t/./src/hooks/reducers/usePaymentReducer.ts","webpack://telegram-t/./src/hooks/useFocusAfterAnimation.tsx","webpack://telegram-t/./src/components/ui/Select.tsx","webpack://telegram-t/./src/components/payment/ShippingInfo.tsx","webpack://telegram-t/./src/components/payment/Shipping.tsx","webpack://telegram-t/./src/components/payment/Checkout.tsx","webpack://telegram-t/./src/components/payment/ExpiryInput.tsx","webpack://telegram-t/./src/components/middle/helpers/inputFormatters.ts","webpack://telegram-t/./src/components/payment/CardInput.tsx","webpack://telegram-t/./src/components/payment/PaymentInfo.tsx","webpack://telegram-t/./src/components/payment/PaymentModal.tsx","webpack://telegram-t/./src/components/payment/ReceiptModal.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx"],"sourcesContent":["import { ApiMessage, ApiDimensions } from '../../../api/types';\n\nimport { MediaViewerOrigin } from '../../../types';\n\nimport { ANIMATION_END_DELAY } from '../../../config';\nimport {\n calculateDimensions,\n getMediaViewerAvailableDimensions,\n MEDIA_VIEWER_MEDIA_QUERY,\n REM,\n} from '../../common/helpers/mediaDimensions';\nimport windowSize from '../../../util/windowSize';\nimport stopEvent from '../../../util/stopEvent';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\n\nconst ANIMATION_DURATION = 200;\n\nexport function animateOpening(\n hasFooter: boolean,\n origin: MediaViewerOrigin,\n bestImageData: string,\n dimensions: ApiDimensions,\n isVideo: boolean,\n message?: ApiMessage,\n) {\n const { mediaEl: fromImage } = getNodes(origin, message);\n if (!fromImage) {\n return;\n }\n\n const { width: windowWidth } = windowSize.get();\n const {\n width: availableWidth, height: availableHeight,\n } = getMediaViewerAvailableDimensions(hasFooter, isVideo);\n const { width: toWidth, height: toHeight } = calculateDimensions(\n availableWidth, availableHeight, dimensions.width, dimensions.height,\n );\n const toLeft = (windowWidth - toWidth) / 2;\n const toTop = getTopOffset(hasFooter) + (availableHeight - toHeight) / 2;\n\n let {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n const uncovered = uncover(toWidth, toHeight, fromTop, fromLeft, fromWidth, fromHeight);\n fromTop = uncovered.top;\n fromLeft = uncovered.left;\n fromWidth = uncovered.width;\n fromHeight = uncovered.height;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n const fromScaleX = fromWidth / toWidth;\n const fromScaleY = fromHeight / toHeight;\n\n const ghost = createGhost(bestImageData || fromImage);\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n applyShape(ghost, origin);\n\n document.body.classList.add('ghost-animating');\n\n requestAnimationFrame(() => {\n document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n ghost.style.transform = '';\n clearShape(ghost);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nexport function animateClosing(origin: MediaViewerOrigin, bestImageData: string, message?: ApiMessage) {\n const { container, mediaEl: toImage } = getNodes(origin, message);\n if (!toImage) {\n return;\n }\n\n const fromImage = document.getElementById('MediaViewer')!.querySelector(\n '.MediaViewerSlide--active img, .MediaViewerSlide--active video',\n );\n if (!fromImage || !toImage) {\n return;\n }\n\n const {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n const {\n top: targetTop, left: toLeft, width: toWidth, height: toHeight,\n } = toImage.getBoundingClientRect();\n\n let toTop = targetTop;\n if (!isElementInViewport(container)) {\n const { height: windowHeight } = windowSize.get();\n toTop = targetTop < fromTop ? -toHeight : windowHeight;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n let fromScaleX = fromWidth / toWidth;\n let fromScaleY = fromHeight / toHeight;\n\n const shouldFadeOut = (\n [MediaViewerOrigin.Inline, MediaViewerOrigin.ScheduledInline].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n ) || (\n [MediaViewerOrigin.Album, MediaViewerOrigin.ScheduledAlbum].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n );\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n if (fromScaleX > fromScaleY) {\n fromScaleX = fromScaleY;\n } else if (fromScaleY > fromScaleX) {\n fromScaleY = fromScaleX;\n }\n }\n\n const existingGhost = document.getElementsByClassName('ghost')[0] as HTMLDivElement;\n\n const ghost = existingGhost || createGhost(bestImageData || toImage, origin);\n if (!existingGhost) {\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n }\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n const {\n top,\n left,\n width,\n height,\n } = existingGhost.getBoundingClientRect();\n const scaleX = width / toWidth;\n const scaleY = height / toHeight;\n\n applyStyles(ghost, {\n transition: 'none',\n top: `${toTop}px`,\n left: `${toLeft}px`,\n transformOrigin: 'top left',\n transform: `translate3d(${left - toLeft}px, ${top - toTop}px, 0) scale(${scaleX}, ${scaleY})`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n });\n }\n document.body.classList.add('ghost-animating');\n if (!existingGhost) document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n existingGhost.style.transition = '';\n }\n\n ghost.style.transform = '';\n\n if (shouldFadeOut) {\n ghost.style.opacity = '0';\n }\n\n applyShape(ghost, origin);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nfunction createGhost(source: string | HTMLImageElement | HTMLVideoElement, origin?: MediaViewerOrigin) {\n const ghost = document.createElement('div');\n ghost.classList.add('ghost');\n\n const img = new Image();\n img.draggable = false;\n img.oncontextmenu = stopEvent;\n\n if (typeof source === 'string') {\n img.src = source;\n } else if (source instanceof HTMLVideoElement) {\n img.src = source.poster;\n } else {\n img.src = source.src;\n }\n\n ghost.appendChild(img);\n\n if (origin === MediaViewerOrigin.ProfileAvatar || origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('ProfileInfo');\n if (origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('self');\n }\n const profileInfo = document.querySelector(\n origin === MediaViewerOrigin.ProfileAvatar\n ? '#RightColumn .ProfileInfo .info'\n : '#Settings .ProfileInfo .info',\n );\n if (profileInfo) {\n ghost.appendChild(profileInfo.cloneNode(true));\n }\n }\n\n return ghost;\n}\n\nfunction uncover(realWidth: number, realHeight: number, top: number, left: number, width: number, height: number) {\n if (realWidth === realHeight) {\n const size = Math.max(width, height) * (realWidth / realHeight);\n left -= (size - width) / 2;\n top -= (size - height) / 2;\n width = size;\n height = size;\n } else if (realWidth > realHeight) {\n const srcWidth = width;\n width = height * (realWidth / realHeight);\n left -= (width - srcWidth) / 2;\n } else if (realHeight > realWidth) {\n const srcHeight = height;\n height = width * (realHeight / realWidth);\n top -= (height - srcHeight) / 2;\n }\n\n return {\n top, left, width, height,\n };\n}\n\nfunction isElementInViewport(el: HTMLElement) {\n if (el.style.display === 'none') {\n return false;\n }\n\n const rect = el.getBoundingClientRect();\n const { height: windowHeight } = windowSize.get();\n\n return (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n}\n\nfunction isMessageImageFullyVisible(container: HTMLElement, imageEl: HTMLElement) {\n const messageListElement = document.querySelector('.Transition__slide--active > .MessageList')!;\n let imgOffsetTop = container.offsetTop + imageEl.closest('.content-inner, .WebPage')!.offsetTop;\n if (container.id.includes('album-media-')) {\n imgOffsetTop += container.parentElement!.offsetTop + container.closest('.Message')!.offsetTop;\n }\n\n return imgOffsetTop > messageListElement.scrollTop\n && imgOffsetTop + imageEl.offsetHeight < messageListElement.scrollTop + messageListElement.offsetHeight;\n}\n\nfunction getTopOffset(hasFooter: boolean) {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n let topOffsetRem = 4.125;\n if (hasFooter && !IS_TOUCH_ENV) {\n topOffsetRem += mql.matches ? 0.875 : 2.125;\n }\n\n return topOffsetRem * REM;\n}\n\nfunction applyStyles(element: HTMLElement, styles: Record) {\n Object.assign(element.style, styles);\n}\n\nfunction getNodes(origin: MediaViewerOrigin, message?: ApiMessage) {\n let containerSelector;\n let mediaSelector;\n\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n containerSelector = `.Transition__slide--active > .MessageList #album-media-${message!.id}`;\n mediaSelector = '.full-media';\n break;\n\n case MediaViewerOrigin.SharedMedia:\n containerSelector = `#shared-media${message!.id}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.SearchResult:\n containerSelector = `#search-media${message!.id}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n containerSelector = '.MiddleHeader .Transition__slide--active .ChatInfo .Avatar';\n mediaSelector = 'img.avatar-media';\n break;\n\n case MediaViewerOrigin.SettingsAvatar:\n containerSelector = '#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = 'img.avatar-media';\n break;\n\n case MediaViewerOrigin.ProfileAvatar:\n containerSelector = '#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = 'img.avatar-media';\n break;\n\n case MediaViewerOrigin.ScheduledInline:\n case MediaViewerOrigin.Inline:\n default:\n containerSelector = `.Transition__slide--active > .MessageList #message${message!.id}`;\n mediaSelector = '.message-content .full-media, .message-content .thumbnail';\n }\n\n const container = document.querySelector(containerSelector)!;\n const mediaEls = container && container.querySelectorAll(mediaSelector);\n\n return {\n container,\n mediaEl: mediaEls?.[mediaEls.length - 1],\n };\n}\n\nfunction applyShape(ghost: HTMLDivElement, origin: MediaViewerOrigin) {\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n case MediaViewerOrigin.Inline:\n case MediaViewerOrigin.ScheduledInline:\n ghost.classList.add('rounded-corners');\n break;\n\n case MediaViewerOrigin.SharedMedia:\n case MediaViewerOrigin.SettingsAvatar:\n case MediaViewerOrigin.ProfileAvatar:\n case MediaViewerOrigin.SearchResult:\n (ghost.firstChild as HTMLElement).style.objectFit = 'cover';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n ghost.classList.add('circle');\n break;\n }\n}\n\nfunction clearShape(ghost: HTMLDivElement) {\n (ghost.firstChild as HTMLElement).style.objectFit = 'default';\n ghost.classList.remove('rounded-corners', 'circle');\n}\n","import React, {\n FC,\n memo,\n useCallback,\n useMemo,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getMessageMediaHash } from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport { selectIsDownloading, selectIsMessageProtected } from '../../modules/selectors';\n\nimport Button from '../ui/Button';\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './MediaViewerActions.scss';\n\ntype StateProps = {\n isDownloading: boolean;\n isProtected?: boolean;\n};\n\ntype OwnProps = {\n mediaData?: string;\n isVideo: boolean;\n isZoomed: boolean;\n message?: ApiMessage;\n fileName?: string;\n isAvatar?: boolean;\n onCloseMediaViewer: NoneToVoidFunction;\n onForward: NoneToVoidFunction;\n onZoomToggle: NoneToVoidFunction;\n};\n\nconst MediaViewerActions: FC = ({\n mediaData,\n isVideo,\n isZoomed,\n message,\n fileName,\n isAvatar,\n isDownloading,\n isProtected,\n onCloseMediaViewer,\n onForward,\n onZoomToggle,\n}) => {\n const {\n downloadMessageMedia,\n cancelMessageMediaDownload,\n } = getDispatch();\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n message && getMessageMediaHash(message, 'download'),\n !isDownloading,\n );\n\n const handleDownloadClick = useCallback(() => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message });\n } else {\n downloadMessageMedia({ message });\n }\n }, [cancelMessageMediaDownload, downloadMessageMedia, isDownloading, message]);\n\n const lang = useLang();\n\n const MenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n function renderDownloadButton() {\n if (isProtected) {\n return undefined;\n }\n\n return isVideo ? (\n \n {isDownloading ? (\n \n ) : (\n \n )}\n \n ) : (\n \n \n \n );\n }\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (isProtected) {\n return undefined;\n }\n\n return (\n
\n \n {!isAvatar && (\n \n {lang('Forward')}\n \n )}\n {isVideo ? (\n \n {isDownloading ? `${Math.round(downloadProgress * 100)}% Downloading...` : 'Download'}\n \n ) : (\n \n {lang('AccActionDownload')}\n \n )}\n \n {isDownloading && }\n
\n );\n }\n\n return (\n
\n {!isAvatar && !isProtected && (\n <>\n \n \n \n \n )}\n {renderDownloadButton()}\n \n \n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message }): StateProps => {\n const isDownloading = message ? selectIsDownloading(global, message) : false;\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n isDownloading,\n isProtected,\n };\n },\n)(MediaViewerActions));\n","import React, { FC, useEffect, useState } from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { throttle } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport { REM } from '../common/helpers/mediaDimensions';\n\nimport './MediaViewerFooter.scss';\n\nconst RESIZE_THROTTLE_MS = 500;\n\ntype OwnProps = {\n text: TextPart | TextPart[];\n onClick: () => void;\n isHidden?: boolean;\n isForVideo: boolean;\n};\n\nconst MediaViewerFooter: FC = ({\n text = '', isHidden, isForVideo, onClick,\n}) => {\n const [isMultiline, setIsMultiline] = useState(false);\n useEffect(() => {\n const footerContent = document.querySelector('.MediaViewerFooter .media-text') as HTMLDivElement | null;\n\n const checkIsMultiline = () => {\n const height = footerContent ? footerContent.clientHeight : 0;\n\n setIsMultiline(height > REM * 2);\n };\n\n // First run for initial detection of multiline footer text\n checkIsMultiline();\n\n const handleResize = throttle(checkIsMultiline, RESIZE_THROTTLE_MS, true);\n\n window.addEventListener('resize', handleResize, false);\n\n return () => {\n window.removeEventListener('resize', handleResize, false);\n };\n }, []);\n\n function stopEvent(e: React.MouseEvent) {\n if (text) {\n e.stopPropagation();\n }\n }\n\n const classNames = buildClassName(\n 'MediaViewerFooter',\n isForVideo && 'is-for-video',\n isHidden && 'is-hidden',\n );\n\n return (\n
\n {text && (\n
\n

{text}

\n
\n )}\n
\n );\n};\n\nexport default MediaViewerFooter;\n","import { useLayoutEffect, useState } from '../lib/teact/teact';\nimport { PLATFORM_ENV } from '../util/environment';\n\ntype RefType = {\n current: HTMLElement | null;\n};\n\ntype ReturnType = [boolean, () => void, () => void] | [false];\ntype CallbackType = (isPlayed: boolean) => void;\n\nconst prop = getBrowserFullscreenElementProp();\n\nexport default function useFullscreenStatus(elRef: RefType, setIsPlayed: CallbackType): ReturnType {\n const [isFullscreen, setIsFullscreen] = useState(Boolean(prop && document[prop]));\n\n const setFullscreen = () => {\n if (!elRef.current || !(prop || PLATFORM_ENV === 'iOS')) {\n return;\n }\n\n if (elRef.current.requestFullscreen) {\n elRef.current.requestFullscreen();\n } else if (elRef.current.webkitRequestFullscreen) {\n elRef.current.webkitRequestFullscreen();\n } else if (elRef.current.webkitEnterFullscreen) {\n elRef.current.webkitEnterFullscreen();\n } else if (elRef.current.mozRequestFullScreen) {\n elRef.current.mozRequestFullScreen();\n }\n\n setIsFullscreen(true);\n };\n\n const exitFullscreen = () => {\n if (!elRef.current) {\n return;\n }\n\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n\n setIsFullscreen(false);\n };\n\n useLayoutEffect(() => {\n const listener = () => { setIsFullscreen(Boolean(prop && document[prop])); };\n const listenerEnter = () => { setIsFullscreen(true); };\n const listenerExit = () => {\n setIsFullscreen(false);\n setIsPlayed(false);\n };\n const video = elRef.current;\n\n document.addEventListener('fullscreenchange', listener, false);\n document.addEventListener('webkitfullscreenchange', listener, false);\n document.addEventListener('mozfullscreenchange', listener, false);\n\n if (video) {\n video.addEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.addEventListener('webkitendfullscreen', listenerExit, false);\n }\n\n return () => {\n document.removeEventListener('fullscreenchange', listener, false);\n document.removeEventListener('webkitfullscreenchange', listener, false);\n document.removeEventListener('mozfullscreenchange', listener, false);\n if (video) {\n video.removeEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.removeEventListener('webkitendfullscreen', listenerExit, false);\n }\n };\n // eslint-disable-next-line\n }, []);\n\n if (!prop && PLATFORM_ENV !== 'iOS') {\n return [false];\n }\n\n return [isFullscreen, setFullscreen, exitFullscreen];\n}\n\nfunction getBrowserFullscreenElementProp() {\n if (typeof document.fullscreenElement !== 'undefined') {\n return 'fullscreenElement';\n } else if (typeof document.mozFullScreenElement !== 'undefined') {\n return 'mozFullScreenElement';\n } else if (typeof document.webkitFullscreenElement !== 'undefined') {\n return 'webkitFullscreenElement';\n }\n\n return '';\n}\n","const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];\n\nconst formatFileSize = (bytes: number) => {\n const number = bytes === 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));\n\n return `${(bytes / 1024 ** Math.floor(number)).toFixed(1)} ${units[number]}`;\n};\n\nexport default formatFileSize;\n","import React, {\n FC, useEffect, useRef, useCallback,\n} from '../../lib/teact/teact';\nimport buildClassName from '../../util/buildClassName';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { formatMediaDuration } from '../../util/dateFormat';\nimport formatFileSize from './helpers/formatFileSize';\nimport useLang from '../../hooks/useLang';\nimport { captureEvents } from '../../util/captureEvents';\n\nimport Button from '../ui/Button';\n\nimport './VideoPlayerControls.scss';\n\ntype IProps = {\n bufferedProgress: number;\n currentTime: number;\n duration: number;\n fileSize: number;\n isForceMobileVersion?: boolean;\n isPlayed: boolean;\n isFullscreenSupported: boolean;\n isFullscreen: boolean;\n onChangeFullscreen: (e: React.MouseEvent) => void;\n onPlayPause: (e: React.MouseEvent) => void;\n isVisible: boolean;\n setVisibility: (isVisible: boolean) => void;\n onSeek: (position: number) => void;\n};\n\nconst stopEvent = (e: React.MouseEvent) => {\n e.stopPropagation();\n};\n\nconst HIDE_CONTROLS_TIMEOUT_MS = 1500;\n\nconst VideoPlayerControls: FC = ({\n bufferedProgress,\n currentTime,\n duration,\n fileSize,\n isForceMobileVersion,\n isPlayed,\n isFullscreenSupported,\n isFullscreen,\n onChangeFullscreen,\n onPlayPause,\n isVisible,\n setVisibility,\n onSeek,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const seekerRef = useRef(null);\n const isSeeking = useRef(false);\n\n\n useEffect(() => {\n let timeout: number | undefined;\n if (!isVisible || !isPlayed) {\n if (timeout) window.clearTimeout(timeout);\n return;\n }\n timeout = window.setTimeout(() => {\n setVisibility(false);\n }, HIDE_CONTROLS_TIMEOUT_MS);\n return () => {\n if (timeout) window.clearTimeout(timeout);\n };\n }, [isPlayed, isVisible, setVisibility]);\n\n useEffect(() => {\n if (isVisible) {\n document.body.classList.add('video-controls-visible');\n } else {\n document.body.classList.remove('video-controls-visible');\n }\n return () => {\n document.body.classList.remove('video-controls-visible');\n };\n }, [isVisible]);\n\n const lang = useLang();\n\n const handleSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (isSeeking.current && seekerRef.current) {\n const {\n width,\n left,\n } = seekerRef.current.getBoundingClientRect();\n const clientX = e instanceof MouseEvent ? e.clientX : e.targetTouches[0].clientX;\n onSeek(Math.max(Math.min(duration * ((clientX - left) / width), duration), 0));\n }\n }, [duration, onSeek]);\n\n const handleStartSeek = useCallback((e: MouseEvent | TouchEvent) => {\n isSeeking.current = true;\n handleSeek(e);\n }, [handleSeek]);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n }, []);\n\n useEffect(() => {\n if (!seekerRef.current || !isVisible) return undefined;\n return captureEvents(seekerRef.current, {\n onCapture: handleStartSeek,\n onRelease: handleStopSeek,\n onClick: handleStopSeek,\n onDrag: handleSeek,\n });\n }, [isVisible, handleStartSeek, handleSeek, handleStopSeek]);\n\n\n return (\n \n {renderSeekLine(currentTime, duration, bufferedProgress, seekerRef)}\n \n \n \n {renderTime(currentTime, duration)}\n {bufferedProgress < 1 && renderFileSize(bufferedProgress, fileSize)}\n {isFullscreenSupported && (\n \n \n \n )}\n \n );\n};\n\nfunction renderTime(currentTime: number, duration: number) {\n return (\n
\n {`${formatMediaDuration(currentTime)} / ${formatMediaDuration(duration)}`}\n
\n );\n}\n\nfunction renderFileSize(loadedPercent: number, totalSize: number) {\n return (\n
\n {`${formatFileSize(totalSize * loadedPercent)} / ${formatFileSize(totalSize)}`}\n
\n );\n}\n\nfunction renderSeekLine(\n currentTime: number, duration: number, bufferedProgress: number, seekerRef: React.RefObject,\n) {\n const percentagePlayed = (currentTime / duration) * 100;\n const percentageBuffered = bufferedProgress * 100;\n\n return (\n
\n
\n \n \n
\n
\n );\n}\n\nexport default VideoPlayerControls;\n","import { ApiDimensions } from '../../api/types';\nimport useBuffering from '../../hooks/useBuffering';\nimport useFullscreenStatus from '../../hooks/useFullscreen';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport React, { FC, memo, useCallback, useEffect, useRef, useState } from '../../lib/teact/teact';\n\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport safePlay from '../../util/safePlay';\nimport Button from '../ui/Button';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './VideoPlayer.scss';\n\nimport VideoPlayerControls from './VideoPlayerControls';\n\ntype OwnProps = {\n url?: string;\n isGif?: boolean;\n posterData?: string;\n posterSize?: ApiDimensions;\n loadProgress?: number;\n fileSize: number;\n isMediaViewerOpen?: boolean;\n noPlay?: boolean;\n areControlsVisible: boolean;\n toggleControls: (isVisible: boolean) => void;\n onClose: (e: React.MouseEvent) => void;\n};\n\nconst MOBILE_VERSION_CONTROL_WIDTH = 400;\n\nconst VideoPlayer: FC = ({\n url,\n isGif,\n posterData,\n posterSize,\n loadProgress,\n fileSize,\n isMediaViewerOpen,\n noPlay,\n onClose,\n toggleControls,\n areControlsVisible,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n const [isPlayed, setIsPlayed] = useState(!IS_TOUCH_ENV || !IS_IOS);\n const [currentTime, setCurrentTime] = useState(0);\n\n const [isFullscreen, setFullscreen, exitFullscreen] = useFullscreenStatus(videoRef, setIsPlayed);\n\n const { isBuffered, bufferedProgress, bufferingHandlers } = useBuffering();\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(!isBuffered, undefined, undefined, 'slow');\n const {\n shouldRender: shouldRenderPlayButton,\n transitionClassNames: playButtonClassNames,\n } = useShowTransition(IS_IOS && !isPlayed && !shouldRenderSpinner, undefined, undefined, 'slow');\n\n useEffect(() => {\n if (noPlay || !isMediaViewerOpen) {\n videoRef.current!.pause();\n } else if (url && !IS_TOUCH_ENV) {\n // Chrome does not automatically start playing when `url` becomes available (even with `autoPlay`),\n // so we force it here. Contrary, iOS does not allow to call `play` without mouse event,\n // so we need to use `autoPlay` instead to allow pre-buffering.\n safePlay(videoRef.current!);\n }\n }, [noPlay, isMediaViewerOpen, url]);\n\n useEffect(() => {\n if (videoRef.current!.currentTime === videoRef.current!.duration) {\n setCurrentTime(0);\n setIsPlayed(false);\n } else {\n setCurrentTime(videoRef.current!.currentTime);\n }\n }, [currentTime]);\n\n const togglePlayState = useCallback((e: React.MouseEvent | KeyboardEvent) => {\n e.stopPropagation();\n if (isPlayed) {\n videoRef.current!.pause();\n setIsPlayed(false);\n } else {\n safePlay(videoRef.current!);\n setIsPlayed(true);\n }\n }, [isPlayed]);\n\n useVideoCleanup(videoRef, []);\n\n const handleMouseMove = useCallback(() => {\n toggleControls(true);\n }, [toggleControls]);\n\n const handleMouseOut = useCallback((e: React.MouseEvent) => {\n if (e.target === videoRef.current) {\n toggleControls(false);\n }\n }, [toggleControls]);\n\n const handleTimeUpdate = useCallback((e: React.SyntheticEvent) => {\n setCurrentTime(e.currentTarget.currentTime);\n }, []);\n\n const handleEnded = useCallback(() => {\n setCurrentTime(0);\n setIsPlayed(false);\n toggleControls(true);\n }, [toggleControls]);\n\n const handleFullscreenChange = useCallback(() => {\n if (isFullscreen && exitFullscreen) {\n exitFullscreen();\n } else if (!isFullscreen && setFullscreen) {\n setFullscreen();\n }\n }, [exitFullscreen, isFullscreen, setFullscreen]);\n\n const handleSeek = useCallback((position: number) => {\n videoRef.current!.currentTime = position;\n }, []);\n\n useEffect(() => {\n const togglePayingStateBySpace = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n togglePlayState(e);\n }\n };\n\n document.addEventListener('keydown', togglePayingStateBySpace, false);\n\n return () => {\n document.removeEventListener('keydown', togglePayingStateBySpace, false);\n };\n }, [togglePlayState]);\n\n const wrapperStyle = posterSize && `width: ${posterSize.width}px; height: ${posterSize.height}px`;\n const videoStyle = `background-image: url(${posterData})`;\n\n return (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n setIsPlayed(true) : undefined}\n onEnded={handleEnded}\n onClick={!IS_SINGLE_COLUMN_LAYOUT ? togglePlayState : undefined}\n onDoubleClick={!IS_TOUCH_ENV ? handleFullscreenChange : undefined}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...bufferingHandlers}\n onTimeUpdate={handleTimeUpdate}\n >\n {url && }\n \n \n {shouldRenderPlayButton && (\n \n )}\n {shouldRenderSpinner && (\n
\n {!isBuffered &&
Buffering...
}\n \n
\n )}\n {!isGif && !shouldRenderSpinner && (\n \n )}\n \n );\n};\n\nexport default memo(VideoPlayer);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport {\n getChatAvatarHash,\n getMessageDocument,\n getMessageFileSize,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../modules/helpers';\nimport {\n selectChat, selectChatMessage, selectIsMessageProtected, selectScheduledMessage, selectUser,\n} from '../../modules/selectors';\nimport { AVATAR_FULL_DIMENSIONS, calculateMediaViewerDimensions } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport stopEvent from '../../util/stopEvent';\n\nimport Spinner from '../ui/Spinner';\nimport MediaViewerFooter from './MediaViewerFooter';\nimport VideoPlayer from './VideoPlayer';\n\nimport './MediaViewerContent.scss';\n\ntype OwnProps = {\n messageId?: number;\n chatId?: string;\n threadId?: number;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isActive?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n onFooterClick: () => void;\n setIsFooterHidden?: (isHidden: boolean) => void;\n isFooterHidden?: boolean;\n};\n\ntype StateProps = {\n chatId?: string;\n messageId?: number;\n senderId?: string;\n threadId?: number;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n origin?: MediaViewerOrigin;\n isProtected?: boolean;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewerContent: FC = (props) => {\n const {\n messageId,\n isActive,\n avatarOwner,\n chatId,\n message,\n profilePhotoIndex,\n origin,\n animationLevel,\n onClose,\n onFooterClick,\n isFooterHidden,\n isProtected,\n setIsFooterHidden,\n } = props;\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const { isGif } = video || webPageVideo || {};\n\n const isOpen = Boolean(avatarOwner || messageId);\n const isAvatar = Boolean(avatarOwner);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n const isGhostAnimation = animationLevel === 2;\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const {\n mediaData: fullMediaBlobUrl,\n loadProgress,\n } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const toggleControls = useCallback((isVisible) => {\n setIsFooterHidden?.(!isVisible);\n }, [setIsFooterHidden]);\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const videoSize = message ? getMessageFileSize(message) : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n if (isAvatar) {\n return (\n
\n {renderPhoto(\n fullMediaBlobUrl || previewBlobUrl,\n calculateMediaViewerDimensions(AVATAR_FULL_DIMENSIONS, false),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n
\n );\n }\n\n if (!message) return undefined;\n const textParts = renderMessageText(message);\n const hasFooter = Boolean(textParts);\n\n return (\n \n {isProtected &&
}\n {isPhoto && renderPhoto(\n localBlobUrl || fullMediaBlobUrl || previewBlobUrl || pictogramBlobUrl,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n {isVideo && ((!isActive && IS_TOUCH_ENV) ? renderVideoPreview(\n bestImageData,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter, true),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n ) : (\n \n ))}\n {textParts && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, ownProps): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = ownProps;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return {};\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return {};\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n origin,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return {};\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return {};\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n };\n },\n)(MediaViewerContent));\n\nfunction renderPhoto(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n return blobUrl\n ? (\n \n )\n : (\n \n \n \n );\n}\n\nfunction renderVideoPreview(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n const wrapperStyle = imageSize && `width: ${imageSize.width}px; height: ${imageSize.height}px`;\n const videoStyle = `background-image: url(${blobUrl})`;\n return blobUrl\n ? (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n )\n : (\n \n \n \n );\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MediaViewerOrigin } from '../../types';\n\nimport useDebounce from '../../hooks/useDebounce';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { animateNumber, timingFunctions } from '../../util/animation';\nimport arePropsShallowEqual from '../../util/arePropsShallowEqual';\nimport { captureEvents, IOS_SCREEN_EDGE_THRESHOLD, RealTouchEvent } from '../../util/captureEvents';\nimport { IS_IOS, IS_TOUCH_ENV } from '../../util/environment';\nimport { debounce } from '../../util/schedulers';\n\nimport MediaViewerContent from './MediaViewerContent';\n\nimport './MediaViewerSlides.scss';\nimport useTimeout from '../../hooks/useTimeout';\n\ntype OwnProps = {\n messageId?: number;\n getMessageId: (fromId?: number, direction?: number) => number | undefined;\n isVideo?: boolean;\n isGif?: boolean;\n isPhoto?: boolean;\n isOpen?: boolean;\n selectMessage: (id?: number) => void;\n chatId?: string;\n threadId?: number;\n isActive?: boolean;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isZoomed?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n hasFooter?: boolean;\n onFooterClick: () => void;\n};\n\nconst SWIPE_X_THRESHOLD = 50;\nconst SWIPE_Y_THRESHOLD = 50;\nconst SLIDES_GAP = 40;\nconst ANIMATION_DURATION = 350;\nconst DEBOUNCE_MESSAGE = 350;\nconst DEBOUNCE_SWIPE = 500;\nconst DEBOUNCE_ACTIVE = 800;\nconst MAX_ZOOM = 4;\nconst MIN_ZOOM = 0.6;\nconst DOUBLE_TAP_ZOOM = 3;\nconst CLICK_X_THRESHOLD = 40;\nconst CLICK_Y_THRESHOLD = 80;\nlet cancelAnimation: Function | undefined;\n\ntype Transform = {\n x: number;\n y: number;\n scale: number;\n};\n\nenum SwipeDirection {\n Horizontal,\n Vertical,\n}\n\nconst MediaViewerSlides: FC = ({\n messageId,\n getMessageId,\n selectMessage,\n isVideo,\n isGif,\n isPhoto,\n isOpen,\n isActive,\n hasFooter,\n ...rest\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const activeSlideRef = useRef(null);\n const transformRef = useRef({ x: 0, y: 0, scale: 1 });\n const swipeDirectionRef = useRef(undefined);\n const isActiveRef = useRef(true);\n const [activeMessageId, setActiveMessageId] = useState(messageId);\n const forceUpdate = useForceUpdate();\n const [isFooterHidden, setIsFooterHidden] = useState(true);\n\n const {\n isZoomed,\n onClose,\n } = rest;\n\n const setTransform = useCallback((value: Transform) => {\n transformRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const setIsActive = useCallback((value: boolean) => {\n isActiveRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const debounceSetMessage = useDebounce(DEBOUNCE_MESSAGE, true);\n const debounceSwipeDirection = useDebounce(DEBOUNCE_SWIPE, true);\n const debounceActive = useDebounce(DEBOUNCE_ACTIVE, true);\n\n const handleToggleFooterVisibility = useCallback((e: React.MouseEvent) => {\n if (!IS_TOUCH_ENV) return;\n const isFooter = window.innerHeight - e.pageY < CLICK_Y_THRESHOLD;\n if (!isFooter && e.pageX < CLICK_X_THRESHOLD) return;\n if (!isFooter && e.pageX > window.innerWidth - CLICK_X_THRESHOLD) return;\n setIsFooterHidden(!isFooterHidden);\n }, [isFooterHidden]);\n\n useTimeout(() => setIsFooterHidden(false), ANIMATION_DURATION - 150);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV || !containerRef.current || isZoomed || !activeMessageId) {\n return undefined;\n }\n let lastTransform = { x: 0, y: 0, scale: 1 };\n const lastDragOffset = {\n x: 0,\n y: 0,\n };\n const lastZoomCenter = {\n x: 0,\n y: 0,\n };\n const panDelta = {\n x: 0,\n y: 0,\n };\n let lastGestureTime = Date.now();\n let initialContentRect: DOMRect;\n let content: HTMLElement | null;\n const setLastGestureTime = debounce(() => {\n lastGestureTime = Date.now();\n }, 500, false, true);\n\n const changeSlide = (e: MouseEvent) => {\n if (transformRef.current.scale !== 1) return false;\n let direction = 0;\n if (window.innerHeight - e.pageY < CLICK_Y_THRESHOLD) {\n return false;\n }\n if (e.pageX < CLICK_X_THRESHOLD) {\n direction = -1;\n } else if (e.pageX > window.innerWidth - CLICK_X_THRESHOLD) {\n direction = 1;\n }\n const mId = getMessageId(activeMessageId, direction);\n if (mId) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n transformRef.current.x += offset;\n isActiveRef.current = false;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n debounceActive(() => {\n setIsActive(true);\n });\n lastTransform = { x: 0, y: 0, scale: 1 };\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: 1,\n }),\n });\n }\n return direction !== 0;\n };\n\n return captureEvents(containerRef.current, {\n isNotPassive: true,\n excludedClosestSelector: '.VideoPlayerControls, .MediaViewerFooter',\n onCapture: () => {\n lastGestureTime = Date.now();\n if (arePropsShallowEqual(transformRef.current, { x: 0, y: 0, scale: 1 })) {\n if (!activeSlideRef.current) return;\n content = activeSlideRef.current.querySelector('img, video');\n if (!content) return;\n // Store initial content rect, without transformations\n initialContentRect = content.getBoundingClientRect();\n }\n },\n onDrag: (event, captureEvent, {\n dragOffsetX,\n dragOffsetY,\n }) => {\n // Avoid conflicts with swipe-to-back gestures\n if (IS_IOS) {\n const { pageX } = (captureEvent as RealTouchEvent).touches[0];\n if (pageX <= IOS_SCREEN_EDGE_THRESHOLD || pageX >= window.innerWidth - IOS_SCREEN_EDGE_THRESHOLD) {\n return;\n }\n }\n if (cancelAnimation) {\n cancelAnimation();\n cancelAnimation = undefined;\n }\n panDelta.x = lastDragOffset.x - dragOffsetX;\n panDelta.y = lastDragOffset.y - dragOffsetY;\n lastDragOffset.x = dragOffsetX;\n lastDragOffset.y = dragOffsetY;\n const absOffsetX = Math.abs(dragOffsetX);\n const absOffsetY = Math.abs(dragOffsetY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n const h = 10;\n\n // If user is inactive but is still touching the screen\n // we reset last gesture time\n setLastGestureTime();\n\n // If image is scaled we just need to pan it\n if (scale !== 1) {\n if ('touches' in event && event.touches.length === 1) {\n setTransform({\n x: lastTransform.x + dragOffsetX,\n y: lastTransform.y + dragOffsetY,\n scale,\n });\n }\n return;\n }\n if (swipeDirectionRef.current !== SwipeDirection.Vertical) {\n // If user is swiping horizontally or horizontal shift is dominant\n // we change only horizontal position\n if (swipeDirectionRef.current === SwipeDirection.Horizontal\n || Math.abs(x) > h || (absOffsetX > h && absOffsetY < h)) {\n swipeDirectionRef.current = SwipeDirection.Horizontal;\n isActiveRef.current = false;\n setTransform({\n x: dragOffsetX,\n y: 0,\n scale,\n });\n return;\n }\n }\n // If vertical shift is dominant we change only vertical position\n if (swipeDirectionRef.current === SwipeDirection.Vertical\n || Math.abs(y) > h || (absOffsetY > h && absOffsetX < h)) {\n swipeDirectionRef.current = SwipeDirection.Vertical;\n setTransform({\n x: 0,\n y: dragOffsetY,\n scale,\n });\n }\n },\n onZoom: (e, {\n zoomFactor,\n initialCenterX,\n initialCenterY,\n dragOffsetX,\n dragOffsetY,\n currentCenterX,\n currentCenterY,\n }) => {\n // Calculate current scale based on zoom factor and limits, add max zoom margin for bounce back effect\n const scale = Math.min(MAX_ZOOM * 3, Math.max(lastTransform.scale * zoomFactor, MIN_ZOOM));\n const scaleFactor = scale / lastTransform.scale;\n const offsetX = Math.abs(Math.min(lastTransform.x, 0));\n const offsetY = Math.abs(Math.min(lastTransform.y, 0));\n\n // Calculate new center relative to the shifted image\n const scaledCenterX = offsetX + initialCenterX;\n const scaledCenterY = offsetY + initialCenterY;\n\n // Save last zoom center for bounce back effect\n lastZoomCenter.x = currentCenterX;\n lastZoomCenter.y = currentCenterY;\n\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (scaledCenterX - scaleFactor * scaledCenterX);\n const scaleOffsetY = (scaledCenterY - scaleFactor * scaledCenterY);\n\n setTransform({\n x: lastTransform.x + scaleOffsetX + dragOffsetX,\n y: lastTransform.y + scaleOffsetY + dragOffsetY,\n scale,\n });\n },\n onClick(e) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n onDoubleClick(e, {\n centerX,\n centerY,\n }) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n return undefined;\n }\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (centerX - DOUBLE_TAP_ZOOM * centerX);\n const scaleOffsetY = (centerY - DOUBLE_TAP_ZOOM * centerY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n if (scale === 1) {\n if (x !== 0 || y !== 0) return undefined;\n lastTransform = {\n x: scaleOffsetX,\n y: scaleOffsetY,\n scale: DOUBLE_TAP_ZOOM,\n };\n } else {\n lastTransform = {\n x: 0,\n y: 0,\n scale: 1,\n };\n }\n return animateNumber({\n from: [x, y, scale],\n to: [lastTransform.x, lastTransform.y, lastTransform.scale],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n },\n onRelease: () => {\n const absX = Math.abs(transformRef.current.x);\n const absY = Math.abs(transformRef.current.y);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n\n debounceSwipeDirection(() => {\n swipeDirectionRef.current = undefined;\n });\n debounceActive(() => {\n setIsActive(true);\n });\n\n // If scale is less than 1 we need to bounce back\n if (scale < 1) {\n lastTransform = { x: 0, y: 0, scale: 1 };\n return animateNumber({\n from: [x, y, scale],\n to: [0, 0, 1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n }\n if (scale > 1) {\n if (!content || !initialContentRect) {\n lastTransform = {\n x,\n y,\n scale,\n };\n return undefined;\n }\n // Get current content boundaries\n const boundaries = content.getBoundingClientRect();\n const s1 = Math.min(scale, MAX_ZOOM);\n const scaleFactor = s1 / scale;\n\n // Calculate new position based on the last zoom center to keep the zoom center\n // at the same position when bouncing back from max zoom\n let x1 = x * scaleFactor + (lastZoomCenter.x - scaleFactor * lastZoomCenter.x);\n let y1 = y * scaleFactor + (lastZoomCenter.y - scaleFactor * lastZoomCenter.y);\n\n // Arbitrary pan velocity coefficient\n const k = 0.15;\n\n // If scale didn't change, we need to add inertia to pan gesture\n if (lastTransform.scale === scale) {\n // Calculate user gesture velocity\n const Vx = Math.abs(lastDragOffset.x) / (Date.now() - lastGestureTime);\n const Vy = Math.abs(lastDragOffset.y) / (Date.now() - lastGestureTime);\n\n // Add extra distance based on gesture velocity and last pan delta\n x1 -= Math.abs(lastDragOffset.x) * Vx * k * panDelta.x;\n y1 -= Math.abs(lastDragOffset.y) * Vy * k * panDelta.y;\n }\n\n // If content is outside window we calculate offset boundaries\n // based on initial content rect and current scale\n if (boundaries.width > window.innerWidth) {\n const minOffsetX = -initialContentRect.left * s1;\n const maxOffsetX = window.innerWidth - initialContentRect.right * s1;\n x1 = Math.min(minOffsetX, Math.max(maxOffsetX, x1));\n } else {\n // Else we center the content on the screen\n x1 = (window.innerWidth - window.innerWidth * s1) / 2;\n }\n\n if (boundaries.height > window.innerHeight) {\n const minOffsetY = -initialContentRect.top * s1;\n const maxOffsetY = window.innerHeight - initialContentRect.bottom * s1;\n y1 = Math.min(minOffsetY, Math.max(maxOffsetY, y1));\n } else {\n y1 = (window.innerHeight - window.innerHeight * s1) / 2;\n }\n lastTransform = {\n x: x1,\n y: y1,\n scale: s1,\n };\n cancelAnimation = animateNumber({\n from: [x, y, scale],\n to: [x1, y1, s1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n return undefined;\n }\n lastTransform = {\n x,\n y,\n scale,\n };\n if (absY >= SWIPE_Y_THRESHOLD) return onClose();\n // Bounce back if vertical swipe is below threshold\n if (absY > 0) {\n return animateNumber({\n from: y,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: 0,\n y: value,\n scale,\n }),\n });\n }\n // Get horizontal swipe direction\n const direction = x < 0 ? 1 : -1;\n const mId = getMessageId(activeMessageId, x < 0 ? 1 : -1);\n // Get the direction of the last pan gesture.\n // Could be different from the total horizontal swipe direction\n // if user starts a swipe in one direction and then changes the direction\n // we need to cancel slide transition\n const dirX = panDelta.x < 0 ? -1 : 1;\n if (mId && absX >= SWIPE_X_THRESHOLD && direction === dirX) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n // If image is shifted by more than SWIPE_X_THRESHOLD,\n // We shift everything by one screen width and then set new active message id\n transformRef.current.x += offset;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n }\n // Then we always return to the original position\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: transformRef.current.scale,\n }),\n });\n return undefined;\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isZoomed,\n onClose,\n setTransform,\n getMessageId,\n activeMessageId,\n setIsActive,\n ]);\n\n if (!activeMessageId) return undefined;\n\n const nextMessageId = getMessageId(activeMessageId, 1);\n const previousMessageId = getMessageId(activeMessageId, -1);\n const offsetX = transformRef.current.x;\n const offsetY = transformRef.current.y;\n const { scale } = transformRef.current;\n\n return (\n
\n {previousMessageId && scale === 1 && (\n
\n \n
\n )}\n {activeMessageId && (\n \n \n
\n )}\n {nextMessageId && scale === 1 && (\n
\n \n
\n )}\n \n );\n};\n\nexport default memo(MediaViewerSlides);\n\nfunction getAnimationStyle(x = 0, y = 0, scale = 1) {\n return `transform: translate3d(${x.toFixed(3)}px, ${y.toFixed(3)}px, 0px) scale(${scale.toFixed(3)});`;\n}\n","import { useEffect, useLayoutEffect, useRef } from '../lib/teact/teact';\n\nfunction useTimeout(callback: () => void, delay: number | null) {\n const savedCallback = useRef(callback);\n\n useLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (typeof delay !== 'number') {\n return undefined;\n }\n const id = setTimeout(() => savedCallback.current(), delay);\n return () => clearTimeout(id);\n }, [delay]);\n}\n\nexport default useTimeout;\n","/*\n @source https://github.com/ajainarayanan/react-pan-zoom\n\n Heavily inspired/lifted from this idea: https://stackoverflow.com/a/39311435/661768\n without jqueryUI or jquery dependency.\n*/\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nimport './PanZoom.scss';\n\nexport interface IDragData {\n x: number;\n y: number;\n dx: number;\n dy: number;\n}\n\nexport interface OwnProps {\n children: any;\n className?: string;\n noWrap: boolean;\n canPan: boolean;\n zoomLevel: number;\n panDeltaX: number;\n panDeltaY: number;\n onPan?: (x: number, y: number) => void;\n}\n\nconst INITIAL_MATRIX = [\n 1, 0, 0, 1, 0, 0,\n];\n\nconst SCALE_VALUES = {\n 1: 1,\n 1.5: 1.5,\n 2: 2.2,\n 2.5: 3.3,\n 3: 5.5,\n};\n\nconst ZOOM_SAFE_AREA = 150;\n\nfunction calculateSafeZoneOnZoom(oldScale: number, matrixData: number[], wrapper: HTMLDivElement | null) {\n const image = wrapper && wrapper.querySelector('.Transition__slide--active img');\n if (!wrapper || !image) {\n return matrixData;\n }\n const wrapperRect = wrapper.getBoundingClientRect();\n const imageRect = image.getBoundingClientRect();\n\n const newImgWidth = (imageRect.width / oldScale) * matrixData[0];\n const newImgHeight = (imageRect.height / oldScale) * matrixData[3];\n const newImgX = (wrapperRect.width - newImgWidth) / 2 + matrixData[4];\n const newImgY = (wrapperRect.height - newImgHeight) / 2 + matrixData[5];\n if (wrapperRect.width && wrapperRect.width - ZOOM_SAFE_AREA < newImgX) {\n matrixData[4] -= newImgX + wrapperRect.width - ZOOM_SAFE_AREA;\n } else if (newImgWidth && newImgWidth + newImgX < ZOOM_SAFE_AREA) {\n matrixData[4] -= newImgWidth + newImgX - ZOOM_SAFE_AREA;\n }\n if (wrapperRect.height && wrapperRect.height - ZOOM_SAFE_AREA < newImgY) {\n matrixData[5] -= newImgY + wrapperRect.height - ZOOM_SAFE_AREA;\n } else if (newImgHeight && newImgHeight + newImgY < ZOOM_SAFE_AREA) {\n matrixData[5] -= newImgHeight + newImgY - ZOOM_SAFE_AREA;\n }\n\n return matrixData;\n}\n\nconst PanZoom: FC = ({\n children,\n className,\n noWrap,\n canPan,\n zoomLevel,\n panDeltaX,\n panDeltaY,\n onPan,\n}) => {\n const tunedZoomLevel = SCALE_VALUES[zoomLevel as keyof typeof SCALE_VALUES] || zoomLevel;\n const [isDragging, setIsDragging] = useState(false);\n const [dragData, setDragData] = useState({\n dx: panDeltaX, dy: panDeltaY, x: 0, y: 0,\n });\n // [zoom, skew, skew, zoom, dx, dy] - see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix()\n const [matrixData, setMatrixData] = useState(INITIAL_MATRIX);\n // Used to set cursor while moving.\n // eslint-disable-next-line no-null/no-null\n const panWrapperRef = useRef(null);\n // Used to set transform for pan.\n // eslint-disable-next-line no-null/no-null\n const panContainerRef = useRef(null);\n\n useEffect(() => {\n const newZoomLevel = tunedZoomLevel || matrixData[0];\n const newPandx = panDeltaX || matrixData[4];\n const newPandy = panDeltaY || matrixData[5];\n\n const newMatrixData = [...matrixData];\n if (matrixData[0] !== newZoomLevel) {\n newMatrixData[0] = newZoomLevel || newMatrixData[0];\n newMatrixData[3] = newZoomLevel || newMatrixData[3];\n }\n if (matrixData[4] !== newPandx) {\n newMatrixData[4] = newPandx;\n }\n if (matrixData[5] !== newPandy) {\n newMatrixData[5] = newPandy;\n }\n\n if (!areSortedArraysEqual(matrixData, newMatrixData)) {\n setMatrixData(calculateSafeZoneOnZoom(matrixData[0], newMatrixData, panWrapperRef.current));\n }\n // eslint-disable-next-line\n }, [panDeltaX, panDeltaY, tunedZoomLevel]);\n\n useEffect(() => {\n if (!canPan) {\n setMatrixData(INITIAL_MATRIX);\n }\n }, [canPan]);\n\n useEffect(() => {\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }, [noWrap, matrixData]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!canPan) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n const offsetX = matrixData[4];\n const offsetY = matrixData[5];\n const newDragData: IDragData = {\n dx: offsetX,\n dy: offsetY,\n x: e.pageX,\n y: e.pageY,\n };\n setDragData(newDragData);\n setIsDragging(true);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.add('move');\n }\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.remove('move');\n }\n\n if (onPan) {\n onPan(matrixData[4], matrixData[5]);\n }\n };\n\n function getNewMatrixData(x: number, y: number): number[] {\n const newMatrixData = [...matrixData];\n const deltaX = dragData.x - x;\n const deltaY = dragData.y - y;\n newMatrixData[4] = dragData.dx - deltaX;\n newMatrixData[5] = dragData.dy - deltaY;\n\n return newMatrixData;\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (isDragging) {\n const newMatrixData = getNewMatrixData(e.pageX, e.pageY);\n setMatrixData(newMatrixData);\n\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }\n };\n\n if (noWrap) {\n return children;\n }\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(PanZoom);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getSenderTitle, isUserId } from '../../modules/helpers';\nimport { formatMediaDateTime } from '../../util/dateFormat';\nimport renderText from '../common/helpers/renderText';\nimport {\n selectChat,\n selectChatMessage,\n selectSender,\n selectUser,\n} from '../../modules/selectors';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from '../common/Avatar';\n\nimport './SenderInfo.scss';\n\ntype OwnProps = {\n chatId?: string;\n messageId?: number;\n isAvatar?: boolean;\n};\n\ntype StateProps = {\n sender?: ApiUser | ApiChat;\n message?: ApiMessage;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst SenderInfo: FC = ({\n chatId,\n messageId,\n sender,\n isAvatar,\n message,\n}) => {\n const {\n closeMediaViewer,\n focusMessage,\n toggleChatInfo,\n } = getDispatch();\n\n const handleFocusMessage = useCallback(() => {\n closeMediaViewer();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, messageId });\n }\n }, [chatId, focusMessage, toggleChatInfo, messageId, closeMediaViewer]);\n\n const lang = useLang();\n\n if (!sender || (!message && !isAvatar)) {\n return undefined;\n }\n\n const senderTitle = getSenderTitle(lang, sender);\n\n return (\n
\n {isUserId(sender.id) ? (\n \n ) : (\n \n )}\n
\n
\n {senderTitle && renderText(senderTitle)}\n
\n
\n {isAvatar\n ? lang('lng_mediaview_profile_photo')\n : formatMediaDateTime(lang, message!.date * 1000, true)}\n
\n
\n
\n );\n};\n\nexport default withGlobal(\n (global, { chatId, messageId, isAvatar }): StateProps => {\n if (isAvatar && chatId) {\n return {\n sender: isUserId(chatId) ? selectUser(global, chatId) : selectChat(global, chatId),\n };\n }\n\n if (!messageId || !chatId) {\n return {};\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n message,\n sender: message && selectSender(global, message),\n };\n },\n)(SenderInfo);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\n\nimport Transition, { TransitionProps } from '../ui/Transition';\n\nconst SlideTransition: FC = ({ children, ...props }) => {\n if (IS_TOUCH_ENV) return children(true, true, 1);\n // eslint-disable-next-line react/jsx-props-no-spreading\n return {children};\n};\n\nexport default SlideTransition;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport './ZoomControls.scss';\n\ntype OwnProps = {\n isShown: boolean;\n onChangeZoom: (level: number, canCloseZoom?: boolean) => void;\n};\n\nexport const MAX_ZOOM_LEVEL = 3;\nexport const MIN_ZOOM_LEVEL = 1;\nconst ONE_STEP_PERCENT = 100 / (MAX_ZOOM_LEVEL - MIN_ZOOM_LEVEL);\nconst RESET_ZOOM_LEVEL = 1.5;\n\nconst ZoomControls: FC = ({ isShown, onChangeZoom }) => {\n const { transitionClassNames } = useShowTransition(isShown);\n const prevIsShown = usePrevious(isShown);\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [zoomLevel, setZoomLevel] = useState(1);\n const isSeeking = useRef(false);\n\n useEffect(() => {\n if (isShown && !prevIsShown) {\n setZoomLevel(RESET_ZOOM_LEVEL);\n }\n }, [isShown, prevIsShown]);\n\n const handleZoomOut = () => {\n if (inputRef.current) {\n setZoomLevel(Math.max(MIN_ZOOM_LEVEL, zoomLevel - 0.5));\n }\n };\n\n const handleZoomIn = () => {\n if (inputRef.current) {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, zoomLevel + 0.5));\n }\n };\n\n const handleStartSeek = useCallback(() => {\n isSeeking.current = true;\n }, []);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n if (zoomLevel === 1) {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }\n }, [onChangeZoom, zoomLevel]);\n\n const handleSeeklineChange = (e:React.ChangeEvent) => {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, Math.max(Number(e.target.value), MIN_ZOOM_LEVEL)));\n };\n\n useEffect(() => {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }, [zoomLevel, onChangeZoom]);\n\n const lang = useLang();\n\n const className = buildClassName(\n 'ZoomControls',\n transitionClassNames,\n );\n\n return (\n
\n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n );\n};\n\nexport default memo(ZoomControls);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport usePrevious from '../../hooks/usePrevious';\nimport {\n getChatAvatarHash,\n getChatMediaMessageIds,\n getMessageDocument,\n getMessageFileName,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../modules/helpers';\nimport {\n selectChat,\n selectChatMessage,\n selectChatMessages,\n selectCurrentMediaSearch,\n selectListedIds,\n selectOutlyingIds,\n selectScheduledMessage,\n selectScheduledMessages,\n selectUser,\n} from '../../modules/selectors';\nimport { stopCurrentAudio } from '../../util/audioPlayer';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport { captureEvents } from '../../util/captureEvents';\nimport windowSize from '../../util/windowSize';\nimport { AVATAR_FULL_DIMENSIONS, MEDIA_VIEWER_MEDIA_QUERY } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport { animateClosing, animateOpening } from './helpers/ghostAnimation';\n\nimport Button from '../ui/Button';\nimport ShowTransition from '../ui/ShowTransition';\nimport Transition from '../ui/Transition';\nimport MediaViewerActions from './MediaViewerActions';\nimport MediaViewerSlides from './MediaViewerSlides';\nimport PanZoom from './PanZoom';\nimport SenderInfo from './SenderInfo';\nimport SlideTransition from './SlideTransition';\nimport ZoomControls from './ZoomControls';\n\nimport './MediaViewer.scss';\n\ntype StateProps = {\n chatId?: string;\n threadId?: number;\n messageId?: number;\n senderId?: string;\n origin?: MediaViewerOrigin;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n chatMessages?: Record;\n collectionIds?: number[];\n animationLevel: 0 | 1 | 2;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewer: FC = ({\n chatId,\n threadId,\n messageId,\n senderId,\n origin,\n avatarOwner,\n profilePhotoIndex,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n}) => {\n const {\n openMediaViewer,\n closeMediaViewer,\n openForwardMenu,\n focusMessage,\n toggleChatInfo,\n } = getDispatch();\n\n const isOpen = Boolean(avatarOwner || messageId);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const { isGif } = video || webPageVideo || {};\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const isAvatar = Boolean(avatarOwner);\n\n /* Navigation */\n const singleMessageId = webPagePhoto || webPageVideo ? messageId : undefined;\n\n const messageIds = useMemo(() => {\n return singleMessageId\n ? [singleMessageId]\n : getChatMediaMessageIds(chatMessages || {}, collectionIds || [], isFromSharedMedia);\n }, [singleMessageId, chatMessages, collectionIds, isFromSharedMedia]);\n\n const selectedMediaMessageIndex = messageId ? messageIds.indexOf(messageId) : -1;\n const isFirst = selectedMediaMessageIndex === 0 || selectedMediaMessageIndex === -1;\n const isLast = selectedMediaMessageIndex === messageIds.length - 1 || selectedMediaMessageIndex === -1;\n\n /* Animation */\n const animationKey = useRef();\n const prevSenderId = usePrevious(senderId);\n if (isOpen && (!prevSenderId || prevSenderId !== senderId || !animationKey.current)) {\n animationKey.current = selectedMediaMessageIndex;\n }\n const slideAnimation = animationLevel >= 1 && !IS_TOUCH_ENV ? 'mv-slide' : 'none';\n const headerAnimation = animationLevel === 2 ? 'slide-fade' : 'none';\n const isGhostAnimation = animationLevel === 2;\n\n /* Controls */\n const [canPanZoomWrap, setCanPanZoomWrap] = useState(false);\n const [isZoomed, setIsZoomed] = useState(false);\n const [zoomLevel, setZoomLevel] = useState(1);\n const [panDelta, setPanDelta] = useState({\n x: 0,\n y: 0,\n });\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const { mediaData: fullMediaBlobUrl } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const fileName = message\n ? getMessageFileName(message)\n : isAvatar\n ? `avatar${avatarOwner!.id}-${profilePhotoIndex}.jpg`\n : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n useEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return;\n }\n\n document.body.classList.toggle('is-media-viewer-open', isOpen);\n }, [isOpen]);\n\n const forceUpdate = useForceUpdate();\n useEffect(() => {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', forceUpdate);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(forceUpdate);\n }\n\n return () => {\n if (typeof mql.removeEventListener === 'function') {\n mql.removeEventListener('change', forceUpdate);\n } else if (typeof mql.removeListener === 'function') {\n mql.removeListener(forceUpdate);\n }\n };\n }, [forceUpdate]);\n\n const prevMessage = usePrevious(message);\n const prevOrigin = usePrevious(origin);\n const prevAvatarOwner = usePrevious(avatarOwner);\n const prevBestImageData = usePrevious(bestImageData);\n const textParts = message ? renderMessageText(message) : undefined;\n const hasFooter = Boolean(textParts);\n\n useEffect(() => {\n if (isGhostAnimation && isOpen && !prevMessage && !prevAvatarOwner) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateOpening(hasFooter, origin!, bestImageData!, dimensions, isVideo, message);\n }\n\n if (isGhostAnimation && !isOpen && (prevMessage || prevAvatarOwner)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateClosing(prevOrigin!, prevBestImageData!, prevMessage || undefined);\n }\n }, [\n isGhostAnimation, isOpen, origin, prevOrigin, message, prevMessage, prevAvatarOwner,\n bestImageData, prevBestImageData, dimensions, isVideo, hasFooter,\n ]);\n\n useEffect(() => {\n let timer: number | undefined;\n\n if (isZoomed) {\n setCanPanZoomWrap(true);\n } else {\n timer = window.setTimeout(() => {\n setCanPanZoomWrap(false);\n }, ANIMATION_DURATION);\n }\n\n return () => {\n if (timer) {\n window.clearTimeout(timer);\n }\n };\n }, [isZoomed]);\n\n const closeZoom = () => {\n setIsZoomed(false);\n setZoomLevel(1);\n setPanDelta({\n x: 0,\n y: 0,\n });\n };\n\n const handleZoomToggle = useCallback(() => {\n setIsZoomed(!isZoomed);\n setZoomLevel(!isZoomed ? 1.5 : 1);\n if (isZoomed) {\n setPanDelta({\n x: 0,\n y: 0,\n });\n }\n }, [isZoomed]);\n\n const handleZoomValue = useCallback((level: number, canCloseZoom = false) => {\n setZoomLevel(level);\n if (level === 1 && canCloseZoom) {\n closeZoom();\n }\n }, []);\n\n const close = useCallback(() => {\n closeMediaViewer();\n closeZoom();\n }, [closeMediaViewer]);\n\n const handleFooterClick = useCallback(() => {\n close();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, threadId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, threadId, messageId });\n }\n }, [close, chatId, threadId, focusMessage, toggleChatInfo, messageId]);\n\n const handleForward = useCallback(() => {\n openForwardMenu({\n fromChatId: chatId,\n messageIds: [messageId],\n });\n closeZoom();\n }, [openForwardMenu, chatId, messageId]);\n\n const selectMessage = useCallback((id?: number) => openMediaViewer({\n chatId,\n threadId,\n messageId: id,\n origin,\n }, {\n forceOnHeavyAnimation: true,\n }), [chatId, openMediaViewer, origin, threadId]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(() => {\n if (isZoomed) {\n closeZoom();\n } else {\n close();\n }\n }) : undefined), [close, isOpen, isZoomed]);\n\n useEffect(() => {\n if (isVideo && !isGif) {\n stopCurrentAudio();\n }\n }, [isGif, isVideo]);\n\n // Prevent refresh when rotating device to watch a video\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [isOpen]);\n\n const getMessageId = useCallback((fromId?: number, direction?: number): number | undefined => {\n if (!fromId) return undefined;\n const index = messageIds.indexOf(fromId);\n if ((direction === -1 && index > 0) || (direction === 1 && index < messageIds.length - 1)) {\n return messageIds[index + direction];\n }\n return undefined;\n }, [messageIds]);\n\n const nextMessageId = getMessageId(messageId, 1);\n const previousMessageId = getMessageId(messageId, -1);\n\n const handlePan = useCallback((x: number, y: number) => {\n setPanDelta({\n x,\n y,\n });\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isOpen, closeMediaViewer, openMediaViewer, {\n chatId,\n threadId,\n messageId,\n origin,\n avatarOwnerId: avatarOwner && avatarOwner.id,\n });\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n switch (e.key) {\n case 'Left': // IE/Edge specific value\n case 'ArrowLeft':\n selectMessage(previousMessageId);\n break;\n\n case 'Right': // IE/Edge specific value\n case 'ArrowRight':\n selectMessage(nextMessageId);\n break;\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n }, [isOpen, nextMessageId, previousMessageId, selectMessage]);\n\n useEffect(() => {\n if (isZoomed || IS_TOUCH_ENV) return undefined;\n const element = document.querySelector('.MediaViewerSlide--active');\n if (!element) {\n return undefined;\n }\n\n const shouldCloseOnVideo = isGif && !IS_IOS;\n\n return captureEvents(element, {\n // eslint-disable-next-line max-len\n excludedClosestSelector: `.backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer${!shouldCloseOnVideo ? ', .VideoPlayer' : ''}`,\n onClick: close,\n });\n }, [close, isGif, isZoomed, messageId]);\n\n function renderSenderInfo() {\n return isAvatar ? (\n \n ) : (\n \n );\n }\n\n return (\n \n {() => (\n <>\n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n {renderSenderInfo}\n \n \n
\n \n \n {(isActive: boolean) => (\n \n )}\n \n \n {!isFirst && !IS_TOUCH_ENV && (\n selectMessage(previousMessageId)}\n />\n )}\n {!isLast && !IS_TOUCH_ENV && (\n selectMessage(nextMessageId)}\n />\n )}\n \n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = global.mediaViewer;\n const {\n animationLevel,\n } = global.settings.byKey;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return { animationLevel };\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return { animationLevel };\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n animationLevel,\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n animationLevel,\n origin,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return { animationLevel };\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return { animationLevel };\n }\n\n let chatMessages: Record | undefined;\n\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n chatMessages = selectScheduledMessages(global, chatId);\n } else {\n chatMessages = selectChatMessages(global, chatId);\n }\n let collectionIds: number[] | undefined;\n\n if (origin === MediaViewerOrigin.Inline || origin === MediaViewerOrigin.Album) {\n collectionIds = selectOutlyingIds(global, chatId, threadId) || selectListedIds(global, chatId, threadId);\n } else if (origin === MediaViewerOrigin.SharedMedia) {\n const currentSearch = selectCurrentMediaSearch(global);\n const { foundIds } = (currentSearch && currentSearch.resultsByType && currentSearch.resultsByType.media) || {};\n collectionIds = foundIds;\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n };\n },\n)(MediaViewer));\n","import { RefObject } from 'react';\nimport React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\n\nimport { CHAT_HEIGHT_PX } from '../../config';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';\nimport { isUserId } from '../../modules/helpers';\n\nimport Loading from '../ui/Loading';\nimport Modal from '../ui/Modal';\nimport InputText from '../ui/InputText';\nimport Button from '../ui/Button';\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport GroupChatInfo from './GroupChatInfo';\nimport PrivateChatInfo from './PrivateChatInfo';\n\nimport './ChatOrUserPicker.scss';\n\nexport type OwnProps = {\n currentUserId?: string;\n chatOrUserIds: string[];\n isOpen: boolean;\n filterRef: RefObject;\n filterPlaceholder: string;\n filter: string;\n loadMore?: NoneToVoidFunction;\n onFilterChange: (filter: string) => void;\n onSelectChatOrUser: (chatOrUserId: string) => void;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst ChatOrUserPicker: FC = ({\n isOpen,\n currentUserId,\n chatOrUserIds,\n filterRef,\n filter,\n filterPlaceholder,\n loadMore,\n onFilterChange,\n onSelectChatOrUser,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const lang = useLang();\n const [viewportIds, getMore] = useInfiniteScroll(loadMore, chatOrUserIds, Boolean(filter));\n\n const resetFilter = useCallback(() => {\n onFilterChange('');\n }, [onFilterChange]);\n useInputFocusOnOpen(filterRef, isOpen, resetFilter);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n onFilterChange(e.currentTarget.value);\n }, [onFilterChange]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n onSelectChatOrUser(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n const modalHeader = (\n
\n \n \n \n \n
\n );\n\n const viewportOffset = chatOrUserIds!.indexOf(viewportIds![0]);\n\n return (\n \n {viewportIds?.length ? (\n \n {viewportIds.map((id, i) => (\n onSelectChatOrUser(id)}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n \n ) : viewportIds && !viewportIds.length ? (\n

{lang('lng_blocked_list_not_found')}

\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(ChatOrUserPicker);\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat, MAIN_THREAD_ID } from '../../api/types';\n\nimport {\n filterChatsByName,\n filterUsersByName,\n getCanPostInChat,\n sortChatIds,\n} from '../../modules/helpers';\nimport { unique } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport useFlag from '../../hooks/useFlag';\n\nimport ChatOrUserPicker from '../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n chatsById: Record;\n activeListIds?: string[];\n archivedListIds?: string[];\n pinnedIds?: string[];\n contactIds?: string[];\n currentUserId?: string;\n};\n\nconst ForwardPicker: FC = ({\n chatsById,\n activeListIds,\n archivedListIds,\n pinnedIds,\n contactIds,\n currentUserId,\n isOpen,\n}) => {\n const {\n setForwardChatId,\n exitForwardMode,\n } = getDispatch();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const [isShown, markIsShown, unmarkIsShown] = useFlag();\n useEffect(() => {\n if (isOpen) {\n markIsShown();\n }\n }, [isOpen, markIsShown]);\n\n const chatAndContactIds = useMemo(() => {\n if (!isOpen) {\n return undefined;\n }\n\n let priorityIds = pinnedIds || [];\n if (currentUserId) {\n priorityIds = unique([currentUserId, ...priorityIds]);\n }\n\n const chatIds = [\n ...(activeListIds || []),\n ...(archivedListIds || []),\n ].filter((id) => {\n const chat = chatsById[id];\n\n return chat && getCanPostInChat(chat, MAIN_THREAD_ID);\n });\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return sortChatIds(unique([\n ...filterChatsByName(lang, chatIds, chatsById, filter, currentUserId),\n ...(contactIds ? filterUsersByName(contactIds, usersById, filter) : []),\n ]), chatsById, undefined, priorityIds);\n }, [activeListIds, archivedListIds, chatsById, contactIds, currentUserId, filter, isOpen, lang, pinnedIds]);\n\n const handleSelectUser = useCallback((userId: string) => {\n setForwardChatId({ id: userId });\n }, [setForwardChatId]);\n\n const renderingChatAndContactIds = useCurrentOrPrev(chatAndContactIds, true)!;\n\n if (!isOpen && !isShown) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsById,\n listIds,\n orderedPinnedIds,\n },\n currentUserId,\n } = global;\n\n return {\n chatsById,\n activeListIds: listIds.active,\n archivedListIds: listIds.archived,\n pinnedIds: orderedPinnedIds.active,\n contactIds: global.contactList?.userIds,\n currentUserId,\n };\n },\n)(ForwardPicker));\n","import React, { FC, memo, useEffect } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiContact, ApiError, ApiInviteInfo, ApiPhoto,\n} from '../../api/types';\n\nimport getReadableErrorText from '../../util/getReadableErrorText';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\n\nimport './Dialogs.scss';\n\ntype StateProps = {\n dialogs: (ApiError | ApiInviteInfo)[];\n};\n\nconst Dialogs: FC = ({ dialogs }) => {\n const {\n dismissDialog,\n acceptInviteConfirmation,\n sendMessage,\n showNotification,\n } = getDispatch();\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n const lang = useLang();\n\n useEffect(() => {\n if (dialogs.length > 0) {\n openModal();\n }\n }, [dialogs, openModal]);\n\n if (!dialogs.length) {\n return undefined;\n }\n\n function renderInviteHeader(title: string, photo?: ApiPhoto) {\n return (\n
\n {photo && }\n
\n {renderText(title)}\n
\n \n
\n );\n }\n\n const renderInvite = (invite: ApiInviteInfo) => {\n const {\n hash, title, about, participantsCount, isChannel, photo, isRequestNeeded,\n } = invite;\n\n const handleJoinClick = () => {\n acceptInviteConfirmation({\n hash,\n });\n showNotification({\n message: isChannel ? lang('RequestToJoinChannelSentDescription') : lang('RequestToJoinGroupSentDescription'),\n });\n closeModal();\n };\n\n const participantsText = isChannel\n ? lang('Subscribers', participantsCount, 'i')\n : lang('Members', participantsCount, 'i');\n\n const joinText = isChannel ? lang('ChannelJoin') : lang('JoinGroup');\n const requestToJoinText = isChannel\n ? lang('MemberRequests.RequestToJoinChannel') : lang('MemberRequests.RequestToJoinGroup');\n\n return (\n \n {participantsCount !== undefined &&

{participantsText}

}\n {about &&

{renderText(about, ['br'])}

}\n {isRequestNeeded && (\n

\n {isChannel\n ? lang('MemberRequests.RequestToJoinDescriptionChannel')\n : lang('MemberRequests.RequestToJoinDescriptionGroup')}\n

\n )}\n \n \n \n );\n };\n\n const renderContactRequest = (contactRequest: ApiContact) => {\n const handleConfirm = () => {\n sendMessage({\n contact: pick(contactRequest, ['firstName', 'lastName', 'phoneNumber']),\n });\n closeModal();\n };\n\n return (\n \n {lang('AreYouSureShareMyContactInfoBot')}\n
\n \n \n
\n \n );\n };\n\n const renderError = (error: ApiError) => {\n return (\n \n {error.hasErrorKey ? getReadableErrorText(error) : renderText(error.message!, ['emoji', 'br'])}\n
\n \n
\n \n );\n };\n\n const renderDialog = (dialog: ApiError | ApiInviteInfo | ApiContact) => {\n if ('hash' in dialog) {\n return renderInvite(dialog);\n }\n\n if ('phoneNumber' in dialog) {\n return renderContactRequest(dialog);\n }\n\n return renderError(dialog);\n };\n\n return (\n
\n {Boolean(dialogs.length) && renderDialog(dialogs[dialogs.length - 1])}\n
\n );\n};\n\nfunction getErrorHeader(error: ApiError) {\n if (error.isSlowMode) {\n return 'Slowmode enabled';\n }\n\n if (!error.hasErrorKey) {\n return 'Telegram';\n }\n\n return 'Something went wrong';\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['dialogs']),\n)(Dialogs));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiNotification } from '../../api/types';\n\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\n\nimport Notification from '../ui/Notification';\n\ntype StateProps = {\n notifications: ApiNotification[];\n};\n\nconst Notifications: FC = ({ notifications }) => {\n const { dismissNotification } = getDispatch();\n\n if (!notifications.length) {\n return undefined;\n }\n\n return (\n
\n {notifications.map(({ message, localId }) => (\n dismissNotification({ localId })}\n />\n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['notifications']),\n)(Notifications));\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport { ensureProtocol } from '../../util/ensureProtocol';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\n\nexport type OwnProps = {\n url?: string;\n};\n\nconst SafeLinkModal: FC = ({ url }) => {\n const { toggleSafeLinkModal } = getDispatch();\n\n const lang = useLang();\n\n const handleOpen = useCallback(() => {\n window.open(ensureProtocol(url));\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal, url]);\n\n const handleDismiss = useCallback(() => {\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal]);\n\n const renderingUrl = useCurrentOrPrev(url);\n\n return (\n \n );\n};\n\nexport default memo(SafeLinkModal);\n","import React, {\n FC, memo, useState, useEffect, useMemo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport { formatTime, formatDateToString, getDayStart } from '../../util/dateFormat';\nimport useLang, { LangFn } from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './CalendarModal.scss';\n\nconst MAX_SAFE_DATE = 2147483647 * 1000; // API has int for dates\nconst MIN_SAFE_DATE = 0;\n\nexport type OwnProps = {\n selectedAt?: number;\n minAt?: number;\n maxAt?: number;\n isFutureMode?: boolean;\n isPastMode?: boolean;\n isOpen: boolean;\n withTimePicker?: boolean;\n submitButtonLabel?: string;\n secondButtonLabel?: string;\n onClose: () => void;\n onSubmit: (date: Date) => void;\n onSecondButtonClick?: NoneToVoidFunction;\n};\n\nconst WEEKDAY_LETTERS = [\n 'lng_weekday1',\n 'lng_weekday2',\n 'lng_weekday3',\n 'lng_weekday4',\n 'lng_weekday5',\n 'lng_weekday6',\n 'lng_weekday7',\n];\n\nconst CalendarModal: FC = ({\n selectedAt,\n minAt,\n maxAt,\n isFutureMode,\n isPastMode,\n isOpen,\n withTimePicker,\n submitButtonLabel,\n secondButtonLabel,\n onClose,\n onSubmit,\n onSecondButtonClick,\n}) => {\n const lang = useLang();\n const now = new Date();\n\n const minDate = useMemo(() => {\n if (isFutureMode && !minAt) return new Date();\n return new Date(Math.max(minAt || MIN_SAFE_DATE, MIN_SAFE_DATE));\n }, [isFutureMode, minAt]);\n const maxDate = useMemo(() => {\n if (isPastMode && !maxAt) return new Date();\n return new Date(Math.min(maxAt || MAX_SAFE_DATE, MAX_SAFE_DATE));\n }, [isPastMode, maxAt]);\n\n const passedSelectedDate = useMemo(() => (selectedAt ? new Date(selectedAt) : new Date()), [selectedAt]);\n const prevIsOpen = usePrevious(isOpen);\n const [isTimeInputFocused, markTimeInputAsFocused, unmarkTimeInputAsFocused] = useFlag(false);\n\n const [selectedDate, setSelectedDate] = useState(passedSelectedDate);\n const [currentMonthAndYear, setCurrentMonthAndYear] = useState(\n new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1),\n );\n const [selectedHours, setSelectedHours] = useState(\n formatInputTime(passedSelectedDate.getHours()),\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n formatInputTime(passedSelectedDate.getMinutes()),\n );\n\n const selectedDay = formatDay(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate());\n const currentYear = currentMonthAndYear.getFullYear();\n const currentMonth = currentMonthAndYear.getMonth();\n\n useEffect(() => {\n if (!prevIsOpen && isOpen) {\n setSelectedDate(passedSelectedDate);\n setCurrentMonthAndYear(new Date(passedSelectedDate.getFullYear(), passedSelectedDate.getMonth(), 1));\n if (withTimePicker) {\n setSelectedHours(formatInputTime(passedSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(passedSelectedDate.getMinutes()));\n }\n }\n }, [passedSelectedDate, isOpen, prevIsOpen, withTimePicker]);\n\n useEffect(() => {\n if (isFutureMode && !isTimeInputFocused && selectedDate.getTime() < minDate.getTime()) {\n setSelectedDate(minDate);\n setSelectedHours(formatInputTime(minDate.getHours()));\n setSelectedMinutes(formatInputTime(minDate.getMinutes()));\n }\n }, [isFutureMode, isTimeInputFocused, minDate, selectedDate]);\n\n useEffect(() => {\n if (isPastMode && !isTimeInputFocused && selectedDate.getTime() > maxDate.getTime()) {\n setSelectedDate(maxDate);\n setSelectedHours(formatInputTime(maxDate.getHours()));\n setSelectedMinutes(formatInputTime(maxDate.getMinutes()));\n }\n }, [isFutureMode, isPastMode, isTimeInputFocused, maxDate, minDate, selectedDate]);\n\n useEffect(() => {\n if (selectedAt) {\n const newSelectedDate = new Date(selectedAt);\n setSelectedDate(newSelectedDate);\n setSelectedHours(formatInputTime(newSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(newSelectedDate.getMinutes()));\n }\n }, [selectedAt]);\n\n const shouldDisableNextMonth = (isPastMode && currentYear >= now.getFullYear() && currentMonth >= now.getMonth())\n || (maxDate && currentYear >= maxDate.getFullYear() && currentMonth >= maxDate.getMonth());\n const shouldDisablePrevMonth = isFutureMode && currentYear <= now.getFullYear() && currentMonth <= now.getMonth();\n\n const { prevMonthGrid, currentMonthGrid, nextMonthGrid } = useMemo(() => (\n buildCalendarGrid(currentYear, currentMonth)\n ), [currentMonth, currentYear]);\n\n const submitLabel = useMemo(() => {\n return submitButtonLabel || formatSubmitLabel(lang, selectedDate);\n }, [lang, selectedDate, submitButtonLabel]);\n\n function handlePrevMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() - 1);\n\n return dateCopy;\n });\n }\n\n function handleNextMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() + 1);\n\n return dateCopy;\n });\n }\n\n function handleDateSelect(date: number) {\n setSelectedDate((d) => {\n const dateCopy = new Date(d);\n dateCopy.setDate(date);\n dateCopy.setMonth(currentMonth);\n dateCopy.setFullYear(currentYear);\n\n return dateCopy;\n });\n }\n\n function handleSubmit() {\n onSubmit(selectedDate);\n }\n\n const handleChangeHours = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedHours('');\n e.target.value = '';\n return;\n }\n\n const hours = Math.max(0, Math.min(Number(value), 23));\n\n const date = new Date(selectedDate.getTime());\n date.setHours(hours);\n setSelectedDate(date);\n\n const hoursStr = formatInputTime(hours);\n setSelectedHours(hoursStr);\n e.target.value = hoursStr;\n }, [selectedDate]);\n\n const handleChangeMinutes = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedMinutes('');\n e.target.value = '';\n return;\n }\n\n const minutes = Math.max(0, Math.min(Number(value), 59));\n\n const date = new Date(selectedDate.getTime());\n date.setMinutes(minutes);\n setSelectedDate(date);\n\n const minutesStr = formatInputTime(minutes);\n setSelectedMinutes(minutesStr);\n e.target.value = minutesStr;\n }, [selectedDate]);\n\n function renderTimePicker() {\n return (\n
\n \n :\n \n
\n );\n }\n\n return (\n \n
\n
\n \n \n \n\n

\n {lang(`lng_month${currentMonth + 1}`)}\n {' '}\n {currentYear}\n

\n\n \n \n \n\n \n \n \n
\n
\n\n
\n
\n {WEEKDAY_LETTERS.map((day) => (\n
\n {lang(day)}\n
\n ))}\n {prevMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n {currentMonthGrid.map((gridDate) => (\n handleDateSelect(gridDate)}\n className={buildClassName(\n 'day-button',\n isDisabledDay(\n currentYear, currentMonth, gridDate, minDate, maxDate,\n )\n ? 'disabled'\n : `${gridDate ? 'clickable' : ''}`,\n selectedDay === formatDay(currentYear, currentMonth, gridDate) && 'selected',\n )}\n >\n {Boolean(gridDate) && (\n {gridDate}\n )}\n
\n ))}\n {nextMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n
\n \n\n {withTimePicker && renderTimePicker()}\n\n
\n \n {secondButtonLabel && (\n \n )}\n
\n \n );\n};\n\nfunction buildCalendarGrid(year: number, month: number) {\n const prevMonthGrid: number[] = [];\n const currentMonthGrid: number[] = [];\n const nextMonthGrid: number[] = [];\n\n const date = new Date();\n date.setDate(1);\n date.setMonth(month);\n date.setFullYear(year);\n const firstDay = date.getDay();\n const totalDaysInPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = 1; i < firstDay; i++) {\n prevMonthGrid.push(totalDaysInPrevMonth - firstDay + i + 1);\n }\n\n while (date.getMonth() === month) {\n const gridDate = date.getDate();\n currentMonthGrid.push(gridDate);\n date.setDate(gridDate + 1);\n }\n\n const lastRowDaysCount = (currentMonthGrid.length + prevMonthGrid.length) % 7;\n if (lastRowDaysCount > 0) {\n for (let i = 1; i <= 7 - lastRowDaysCount; i++) {\n nextMonthGrid.push(i);\n }\n }\n\n return { prevMonthGrid, currentMonthGrid, nextMonthGrid };\n}\n\nfunction isDisabledDay(year: number, month: number, day: number, minDate?: Date, maxDate?: Date) {\n const selectedDay = new Date(year, month, day);\n const fixedMinDate = minDate && getDayStart(minDate);\n const fixedMaxDate = maxDate && getDayStart(maxDate);\n\n if (fixedMaxDate && selectedDay > fixedMaxDate) {\n return true;\n } else if (fixedMinDate && selectedDay < fixedMinDate) {\n return true;\n }\n\n return false;\n}\n\nfunction formatInputTime(value: string | number) {\n return String(value).padStart(2, '0');\n}\n\nfunction formatDay(year: number, month: number, day: number) {\n return `${year}-${month + 1}-${day}`;\n}\n\nfunction formatSubmitLabel(lang: LangFn, date: Date) {\n const day = formatDateToString(date, lang.code);\n const today = formatDateToString(new Date(), lang.code);\n\n if (day === today) {\n return lang('Conversation.ScheduleMessage.SendToday', formatTime(lang, date));\n }\n\n return lang('Conversation.ScheduleMessage.SendOn', [day, formatTime(lang, date)]);\n}\n\nexport default memo(CalendarModal);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport useLang from '../../hooks/useLang';\n\nimport CalendarModal from '../common/CalendarModal';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n selectedAt?: number;\n};\n\nconst HistoryCalendar: FC = ({\n isOpen, selectedAt,\n}) => {\n const { searchMessagesByDate, closeHistoryCalendar } = getDispatch();\n\n const handleJumpToDate = useCallback((date: Date) => {\n searchMessagesByDate({ timestamp: date.valueOf() / 1000 });\n closeHistoryCalendar();\n }, [closeHistoryCalendar, searchMessagesByDate]);\n\n const lang = useLang();\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return { selectedAt: global.historyCalendarSelectedAt };\n },\n)(HistoryCalendar));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\nimport { IAlbum } from '../../types';\n\nimport {\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectUser,\n} from '../../modules/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../modules/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n message: ApiMessage;\n album?: IAlbum;\n onClose: () => void;\n};\n\ntype StateProps = {\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteMessageModal: FC = ({\n isOpen,\n isSchedule,\n message,\n album,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n } = getDispatch();\n\n const handleDeleteMessageForAll = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n deleteMessages({ messageIds, shouldDeleteForAll: true });\n onClose();\n }, [deleteMessages, message.id, onClose, album]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n if (isSchedule) {\n deleteScheduledMessages({ messageIds });\n } else {\n deleteMessages({\n messageIds,\n shouldDeleteForAll: false,\n });\n }\n onClose();\n }, [album, message.id, isSchedule, onClose, deleteScheduledMessages, deleteMessages]);\n\n const lang = useLang();\n\n return (\n \n

{lang('AreYouSureDeleteSingleMessage')}

\n {willDeleteForCurrentUserOnly && (\n

{lang('lng_delete_for_me_chat_hint', 1, 'i')}

\n )}\n {willDeleteForAll && (\n

{lang('lng_delete_for_everyone_hint', 1, 'i')}

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { message, isSchedule }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const { canDeleteForAll } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const chat = selectChat(global, message.chatId);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteMessageModal));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { selectChat, selectIsChatWithSelf, selectUser } from '../../modules/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n isChatChannel,\n} from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n messageId: number;\n onClose: () => void;\n};\n\ntype StateProps = {\n isChannel: boolean;\n isPrivateChat: boolean;\n isChatWithSelf: boolean;\n isGroup: boolean;\n isSuperGroup: boolean;\n canPinForAll: boolean;\n contactName?: string;\n};\n\nconst PinMessageModal: FC = ({\n isOpen,\n messageId,\n chatId,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n onClose,\n}) => {\n const { pinMessage } = getDispatch();\n\n const handlePinMessageForAll = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false,\n });\n onClose();\n }, [pinMessage, chatId, messageId, onClose]);\n\n const handlePinMessage = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false, isOneSide: true, isSilent: true,\n });\n onClose();\n }, [chatId, messageId, onClose, pinMessage]);\n\n const lang = useLang();\n\n function renderMessage() {\n if (isChannel) {\n return lang('PinMessageAlertChannel');\n }\n\n if (isGroup || isSuperGroup) {\n return lang('PinMessageAlert');\n }\n\n return lang('PinMessageAlertChat');\n }\n\n return (\n \n

{renderMessage()}

\n \n {canPinForAll && (\n \n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const isPrivateChat = isUserId(chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const chat = selectChat(global, chatId);\n const isChannel = Boolean(chat) && isChatChannel(chat);\n const isGroup = Boolean(chat) && isChatBasicGroup(chat);\n const isSuperGroup = Boolean(chat) && isChatSuperGroup(chat);\n const canPinForAll = (isPrivateChat && !isChatWithSelf) || isSuperGroup || isGroup;\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n return {\n isPrivateChat,\n isChatWithSelf,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n };\n },\n)(PinMessageModal));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId?: string;\n pinnedMessagesCount?: number;\n onClose: () => void;\n onUnpin: () => void;\n};\n\nconst UnpinAllMessagesModal: FC = ({\n isOpen,\n pinnedMessagesCount = 0,\n onClose,\n onUnpin,\n}) => {\n const lang = useLang();\n\n return (\n \n

{lang('Chat.UnpinAllMessagesConfirmation', pinnedMessagesCount, 'i')}

\n \n \n \n );\n};\n\nexport default memo(UnpinAllMessagesModal);\n","import React, {\n FC, useCallback, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { selectCanDeleteSelectedMessages, selectCurrentChat, selectUser } from '../../modules/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n selectedMessageIds?: number[];\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteSelectedMessageModal: FC = ({\n isOpen,\n isSchedule,\n selectedMessageIds,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n exitMessageSelectMode,\n } = getDispatch();\n\n const prevIsOpen = usePrevious(isOpen);\n\n const handleDeleteMessageForAll = useCallback(() => {\n onClose();\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: true });\n }, [deleteMessages, selectedMessageIds, onClose]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n if (isSchedule) {\n deleteScheduledMessages({ messageIds: selectedMessageIds });\n } else {\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: false });\n }\n\n onClose();\n }, [isSchedule, onClose, deleteScheduledMessages, selectedMessageIds, deleteMessages]);\n\n const lang = useLang();\n\n // Returning `undefined` from FC instead of `` doesn't trigger useHistoryBack\n useEffect(() => {\n if (!isOpen && prevIsOpen) {\n exitMessageSelectMode();\n }\n }, [exitMessageSelectMode, isOpen, prevIsOpen]);\n\n if (!selectedMessageIds) {\n return undefined;\n }\n\n return (\n \n

{lang('AreYouSureDeleteFewMessages')}

\n {willDeleteForCurrentUserOnly && (\n

This will delete them just for you, not for other participants in the chat.

\n )}\n {willDeleteForAll && (\n

This will delete them for everyone in this chat.

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { isSchedule }): StateProps => {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { canDeleteForAll } = selectCanDeleteSelectedMessages(global);\n const chat = selectCurrentChat(global);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n selectedMessageIds,\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteSelectedMessageModal));\n","import { ChangeEvent } from 'react';\n\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport { ApiReportReason } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport RadioGroup from '../ui/RadioGroup';\nimport InputText from '../ui/InputText';\n\nexport type OwnProps = {\n isOpen: boolean;\n messageIds?: number[];\n onClose: () => void;\n};\n\nconst ReportMessageModal: FC = ({\n isOpen,\n messageIds,\n onClose,\n}) => {\n const {\n reportMessages,\n exitMessageSelectMode,\n } = getDispatch();\n\n const [selectedReason, setSelectedReason] = useState('spam');\n const [description, setDescription] = useState('');\n\n const handleReport = () => {\n reportMessages({ messageIds, reason: selectedReason, description });\n exitMessageSelectMode();\n onClose();\n };\n\n const handleSelectReason = useCallback((value: string) => {\n setSelectedReason(value as ApiReportReason);\n }, []);\n\n const handleDescriptionChange = useCallback((e: ChangeEvent) => {\n setDescription(e.target.value);\n }, []);\n\n const lang = useLang();\n\n const REPORT_OPTIONS: { value: ApiReportReason; label: string }[] = [\n { value: 'spam', label: lang('lng_report_reason_spam') },\n { value: 'violence', label: lang('lng_report_reason_violence') },\n { value: 'pornography', label: lang('lng_report_reason_pornography') },\n { value: 'childAbuse', label: lang('lng_report_reason_child_abuse') },\n { value: 'copyright', label: lang('ReportPeer.ReasonCopyright') },\n { value: 'other', label: lang('lng_report_reason_other') },\n ];\n\n if (!messageIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport default memo(ReportMessageModal);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { MessageListType } from '../../global/types';\n\nimport {\n selectCanDeleteSelectedMessages,\n selectCanDownloadSelectedMessages,\n selectCanReportSelectedMessages,\n selectCurrentMessageList,\n selectHasProtectedMessage,\n selectSelectedMessagesCount,\n} from '../../modules/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport DeleteSelectedMessageModal from './DeleteSelectedMessageModal';\nimport ReportMessageModal from '../common/ReportMessageModal';\n\nimport './MessageSelectToolbar.scss';\n\nexport type OwnProps = {\n isActive?: boolean;\n canPost?: boolean;\n messageListType?: MessageListType;\n};\n\ntype StateProps = {\n isSchedule: boolean;\n selectedMessagesCount?: number;\n canDeleteMessages?: boolean;\n canReportMessages?: boolean;\n canDownloadMessages?: boolean;\n hasProtectedMessage?: boolean;\n selectedMessageIds?: number[];\n};\n\nconst MessageSelectToolbar: FC = ({\n canPost,\n isActive,\n messageListType,\n isSchedule,\n selectedMessagesCount,\n canDeleteMessages,\n canReportMessages,\n canDownloadMessages,\n hasProtectedMessage,\n selectedMessageIds,\n}) => {\n const {\n exitMessageSelectMode,\n openForwardMenuForSelectedMessages,\n downloadSelectedMessages,\n } = getDispatch();\n\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isReportModalOpen, openReportModal, closeReportModal] = useFlag();\n\n useEffect(() => {\n return isActive && !isDeleteModalOpen && !isReportModalOpen\n ? captureKeyboardListeners({\n onBackspace: openDeleteModal,\n onDelete: openDeleteModal,\n onEsc: exitMessageSelectMode,\n })\n : undefined;\n }, [isActive, isDeleteModalOpen, isReportModalOpen, openDeleteModal, exitMessageSelectMode]);\n\n const handleDownload = useCallback(() => {\n downloadSelectedMessages();\n exitMessageSelectMode();\n }, [downloadSelectedMessages, exitMessageSelectMode]);\n\n const prevSelectedMessagesCount = usePrevious(selectedMessagesCount || undefined, true);\n const renderingSelectedMessagesCount = isActive ? selectedMessagesCount : prevSelectedMessagesCount;\n\n const lang = useLang();\n\n const formattedMessagesCount = lang('VoiceOver.Chat.MessagesSelected', renderingSelectedMessagesCount, 'i');\n\n const className = buildClassName(\n 'MessageSelectToolbar',\n canPost && 'with-composer',\n isActive && 'shown',\n );\n\n const renderButton = (\n icon: string, label: string, onClick: AnyToVoidFunction, disabled?: boolean, destructive?: boolean,\n ) => {\n return (\n \n \n \n );\n };\n\n return (\n
\n
\n \n \n \n \n {formattedMessagesCount}\n \n\n {Boolean(selectedMessagesCount) && (\n
\n {messageListType !== 'scheduled' && (\n renderButton(\n 'forward', lang('Chat.ForwardActionHeader'), openForwardMenuForSelectedMessages, hasProtectedMessage,\n )\n )}\n {canReportMessages && (\n renderButton('flag', lang('Conversation.ReportMessages'), openReportModal)\n )}\n {canDownloadMessages && (\n renderButton('download', lang('lng_media_download'), handleDownload, hasProtectedMessage)\n )}\n {renderButton('delete', lang('EditAdminGroupDeleteMessages'), openDeleteModal, !canDeleteMessages, true)}\n
\n )}\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { type: messageListType, chatId } = selectCurrentMessageList(global) || {};\n const { canDelete } = selectCanDeleteSelectedMessages(global);\n const canReport = selectCanReportSelectedMessages(global);\n const canDownload = selectCanDownloadSelectedMessages(global);\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const hasProtectedMessage = chatId ? selectHasProtectedMessage(global, chatId, selectedMessageIds) : false;\n\n return {\n isSchedule: messageListType === 'scheduled',\n selectedMessagesCount: selectSelectedMessagesCount(global),\n canDeleteMessages: canDelete,\n canReportMessages: canReport,\n canDownloadMessages: canDownload,\n selectedMessageIds,\n hasProtectedMessage,\n };\n },\n)(MessageSelectToolbar));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../modules/selectors';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport PrivateChatInfo from './PrivateChatInfo';\nimport ListItem from '../ui/ListItem';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = {\n memberIds?: string[];\n};\n\nconst CLOSE_ANIMATION_DURATION = 100;\n\nconst SeenByModal: FC = ({\n isOpen,\n memberIds,\n}) => {\n const {\n openChat,\n closeSeenByModal,\n } = getDispatch();\n\n const lang = useLang();\n\n const handleClick = useCallback((userId: string) => {\n closeSeenByModal();\n\n setTimeout(() => {\n openChat({ id: userId });\n }, CLOSE_ANIMATION_DURATION);\n }, [closeSeenByModal, openChat]);\n\n const renderingMemberIds = useCurrentOrPrev(memberIds, true);\n\n return (\n \n
\n {renderingMemberIds && renderingMemberIds.map((userId) => (\n handleClick(userId)}\n >\n \n \n ))}\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.seenByModal || {};\n if (!chatId || !messageId) {\n return {};\n }\n\n return {\n memberIds: selectChatMessage(global, chatId, messageId)?.seenByUserIds,\n };\n },\n)(SeenByModal));\n","import React, {\n FC, useCallback, memo, useMemo, useEffect, useState, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\nimport { LoadMoreDirection } from '../../types';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../modules/selectors';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { getUserFullName } from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useFlag from '../../hooks/useFlag';\nimport buildClassName from '../../util/buildClassName';\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport { unique } from '../../util/iteratees';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\nimport ListItem from '../ui/ListItem';\nimport ReactionStaticEmoji from '../common/ReactionStaticEmoji';\nimport Loading from '../ui/Loading';\n\nimport './ReactorListModal.scss';\n\nconst MIN_REACTIONS_COUNT_FOR_FILTERS = 10;\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = Pick & {\n chatId?: string;\n messageId?: number;\n};\n\nconst ReactorListModal: FC = ({\n isOpen,\n reactors,\n reactions,\n chatId,\n messageId,\n seenByUserIds,\n}) => {\n const {\n loadReactors,\n closeReactorListModal,\n openChat,\n } = getDispatch();\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n const lang = useLang();\n const [isClosing, startClosing, stopClosing] = useFlag(false);\n const [chosenTab, setChosenTab] = useState(undefined);\n const canShowFilters = reactors && reactions && reactors.count >= MIN_REACTIONS_COUNT_FOR_FILTERS\n && reactions.results.length > 1;\n const chatIdRef = useRef();\n\n useEffect(() => {\n if (isClosing && !isOpen) {\n stopClosing();\n setChosenTab(undefined);\n }\n }, [isClosing, isOpen, stopClosing]);\n\n const handleCloseAnimationEnd = useCallback(() => {\n if (chatIdRef.current) {\n openChat({ id: chatIdRef.current });\n }\n closeReactorListModal();\n }, [closeReactorListModal, openChat]);\n\n const handleClose = useCallback(() => {\n startClosing();\n }, [startClosing]);\n\n const handleClick = useCallback((userId: string) => {\n chatIdRef.current = userId;\n handleClose();\n }, [handleClose]);\n\n const handleLoadMore = useCallback(() => {\n loadReactors({\n chatId,\n messageId,\n });\n }, [chatId, loadReactors, messageId]);\n\n const allReactions = useMemo(() => {\n return reactors?.reactions ? unique(reactors.reactions.map((l) => l.reaction)) : [];\n }, [reactors?.reactions]);\n\n const userIds = useMemo(() => {\n if (chosenTab) {\n return reactors?.reactions.filter((l) => l.reaction === chosenTab).map((l) => l.userId);\n }\n return unique(reactors?.reactions.map((l) => l.userId).concat(seenByUserIds || []) || []);\n }, [chosenTab, reactors?.reactions, seenByUserIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n handleLoadMore, userIds, reactors && reactors.nextOffset === undefined,\n );\n\n useEffect(() => {\n getMore?.({ direction: LoadMoreDirection.Backwards });\n }, [getMore]);\n\n return (\n \n {canShowFilters && (\n
\n setChosenTab(undefined)}\n >\n \n {reactors?.count && formatIntegerCompact(reactors.count)}\n \n {allReactions.map((reaction) => {\n const count = reactions?.results.find((l) => l.reaction === reaction)?.count;\n return (\n setChosenTab(reaction)}\n >\n \n {count && formatIntegerCompact(count)}\n \n );\n })}\n
\n )}\n\n
\n {viewportIds?.length ? (\n \n {viewportIds?.map(\n (userId) => {\n const user = usersById[userId];\n const fullName = getUserFullName(user);\n const reaction = reactors?.reactions.find((l) => l.userId === userId)?.reaction;\n return (\n handleClick(userId)}\n >\n \n
\n

{fullName && renderText(fullName)}

\n
\n {reaction && }\n \n );\n },\n )}\n \n ) : }\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.reactorModal || {};\n const message = chatId && messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n\n return {\n chatId,\n messageId,\n reactions: message?.reactions,\n reactors: message?.reactors,\n seenByUserIds: message?.seenByUserIds,\n };\n },\n)(ReactorListModal));\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ActiveEmojiInteraction } from '../../global/types';\nimport { ApiMediaFormat } from '../../api/types';\n\nimport { IS_ANDROID } from '../../util/environment';\nimport useFlag from '../../hooks/useFlag';\nimport useMedia from '../../hooks/useMedia';\nimport buildClassName from '../../util/buildClassName';\nimport {\n selectAnimatedEmojiEffect,\n} from '../../modules/selectors';\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from '../common/helpers/animatedAssets';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\n\nimport AnimatedSticker from '../common/AnimatedSticker';\n\nimport './EmojiInteractionAnimation.scss';\n\nexport type OwnProps = {\n activeEmojiInteraction: ActiveEmojiInteraction;\n};\n\ntype StateProps = {\n effectAnimationId?: string;\n localEffectAnimation?: string;\n};\n\nconst HIDE_ANIMATION_DURATION = 250;\nconst PLAYING_DURATION = 3000;\nconst EFFECT_SIZE = 240;\n\nconst EmojiInteractionAnimation: FC = ({\n effectAnimationId,\n localEffectAnimation,\n activeEmojiInteraction,\n}) => {\n const { stopActiveEmojiInteraction } = getDispatch();\n\n const [isHiding, startHiding] = useFlag(false);\n const [isPlaying, startPlaying] = useFlag(false);\n const timeoutRef = useRef();\n\n const stop = useCallback(() => {\n startHiding();\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setTimeout(() => {\n stopActiveEmojiInteraction({ id: activeEmojiInteraction.id });\n }, HIDE_ANIMATION_DURATION);\n }, [activeEmojiInteraction.id, startHiding, stopActiveEmojiInteraction]);\n\n const handleCancelAnimation = useCallback((e: UIEvent) => {\n if (!(e.target as HTMLElement)?.closest('.AnimatedEmoji')) {\n stop();\n }\n }, [stop]);\n\n useEffect(() => {\n document.addEventListener('touchstart', handleCancelAnimation);\n document.addEventListener('touchmove', handleCancelAnimation);\n document.addEventListener('mousedown', handleCancelAnimation);\n document.addEventListener('wheel', handleCancelAnimation);\n\n return () => {\n document.removeEventListener('touchstart', handleCancelAnimation);\n document.removeEventListener('touchmove', handleCancelAnimation);\n document.removeEventListener('mousedown', handleCancelAnimation);\n document.removeEventListener('wheel', handleCancelAnimation);\n };\n }, [handleCancelAnimation]);\n\n useLayoutEffect(() => {\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n timeoutRef.current = setTimeout(() => {\n stop();\n dispatchHeavyAnimationStop();\n }, PLAYING_DURATION);\n }, [stop]);\n\n const effectAnimationData = useMedia(`sticker${effectAnimationId}`, !effectAnimationId, ApiMediaFormat.Lottie);\n\n const [localEffectAnimationData, setLocalEffectAnimationData] = useState();\n useEffect(() => {\n if (localEffectAnimation) {\n getAnimationData(localEffectAnimation as keyof typeof ANIMATED_STICKERS_PATHS).then((data) => {\n setLocalEffectAnimationData(data);\n });\n }\n }, [localEffectAnimation]);\n\n if (!activeEmojiInteraction.startSize) {\n return undefined;\n }\n\n const scale = (activeEmojiInteraction.startSize || 0) / EFFECT_SIZE;\n\n return (\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { activeEmojiInteraction }): StateProps => {\n const animatedEffect = activeEmojiInteraction.animatedEffect !== undefined\n && selectAnimatedEmojiEffect(global, activeEmojiInteraction.animatedEffect);\n return {\n effectAnimationId: animatedEffect ? animatedEffect.id : undefined,\n localEffectAnimation: !animatedEffect && activeEmojiInteraction.animatedEffect\n && Object.keys(ANIMATED_STICKERS_PATHS).includes(activeEmojiInteraction.animatedEffect)\n ? activeEmojiInteraction.animatedEffect : undefined,\n };\n },\n)(EmojiInteractionAnimation));\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nconst useSendWithEnter = (\n onSelect: NoneToVoidFunction,\n) => {\n // eslint-disable-next-line no-null/no-null\n const buttonRef = useRef(null);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n const isFocused = buttonRef.current === document.activeElement;\n\n if (isFocused) {\n onSelect();\n }\n }, [onSelect]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown, false);\n\n return () => window.removeEventListener('keydown', handleKeyDown, false);\n }, [handleKeyDown]);\n\n return buttonRef;\n};\n\nexport default useSendWithEnter;\n","import React, {\n FC, memo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport useChatContextActions from '../../../hooks/useChatContextActions';\nimport useFlag from '../../../hooks/useFlag';\nimport { isUserId, getPrivateChatUserId, selectIsChatMuted } from '../../../modules/helpers';\nimport {\n selectChat, selectUser, selectIsChatPinned, selectNotifySettings, selectNotifyExceptions,\n} from '../../../modules/selectors';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport DeleteChatModal from '../../common/DeleteChatModal';\nimport ListItem from '../../ui/ListItem';\nimport ChatFolderModal from '../ChatFolderModal.async';\n\ntype OwnProps = {\n chatId: string;\n withUsername?: boolean;\n onClick: (id: string) => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n user?: ApiUser;\n isPinned?: boolean;\n isMuted?: boolean;\n canChangeFolder?: boolean;\n};\n\nconst LeftSearchResultChat: FC = ({\n chatId,\n withUsername,\n onClick,\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n}) => {\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isChatFolderModalOpen, openChatFolderModal, closeChatFolderModal] = useFlag();\n\n const contextActions = useChatContextActions({\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n handleDelete: openDeleteModal,\n handleChatFolderChange: openChatFolderModal,\n }, true);\n\n const handleClick = () => {\n onClick(chatId);\n };\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n {isUserId(chatId) ? (\n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const privateChatUserId = chat && getPrivateChatUserId(chat);\n const user = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n const isPinned = selectIsChatPinned(global, chatId);\n const isMuted = chat\n ? selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global))\n : undefined;\n\n return {\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder: Boolean(global.chatFolders.orderedIds?.length),\n };\n },\n)(LeftSearchResultChat));\n","import React, {\n FC, useEffect, useCallback, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { getUserFirstOrLastName } from '../../../modules/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport { throttle } from '../../../util/schedulers';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport LeftSearchResultChat from './LeftSearchResultChat';\n\nimport './RecentContacts.scss';\n\ntype OwnProps = {\n onReset: () => void;\n};\n\ntype StateProps = {\n topUserIds?: string[];\n usersById: Record;\n recentlyFoundChatIds?: string[];\n};\n\nconst SEARCH_CLOSE_TIMEOUT_MS = 250;\nconst NBSP = '\\u00A0';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst RecentContacts: FC = ({\n topUserIds, usersById, recentlyFoundChatIds,\n onReset,\n}) => {\n const {\n loadTopUsers, loadContactList, openChat,\n addRecentlyFoundChatId, clearRecentlyFoundChats,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const topUsersRef = useRef(null);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadTopUsers();\n // Loading full contact list for quick local search before user enters the query\n loadContactList();\n });\n }, [loadTopUsers, loadContactList]);\n\n useHorizontalScroll(topUsersRef.current, !topUserIds);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n onReset();\n setTimeout(() => {\n addRecentlyFoundChatId({ id });\n }, SEARCH_CLOSE_TIMEOUT_MS);\n }, [openChat, addRecentlyFoundChatId, onReset]);\n\n const lang = useLang();\n\n return (\n
\n {topUserIds && (\n
\n
\n {topUserIds.map((userId) => (\n
handleClick(userId)} dir={lang.isRtl ? 'rtl' : undefined}>\n \n
{renderText(getUserFirstOrLastName(usersById[userId]) || NBSP)}
\n
\n ))}\n
\n
\n )}\n {recentlyFoundChatIds && (\n
\n

\n {lang('Recent')}\n\n \n \n \n

\n {recentlyFoundChatIds.map((id) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: topUserIds } = global.topPeers;\n const usersById = global.users.byId;\n const { recentlyFoundChatIds } = global.globalSearch;\n\n return {\n topUserIds,\n usersById,\n recentlyFoundChatIds,\n };\n },\n)(RecentContacts));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiUser, ApiMessage, ApiMessageOutgoingStatus,\n} from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport {\n getChatTitle,\n getPrivateChatUserId,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageRoundVideo,\n} from '../../../modules/helpers';\nimport { selectChat, selectUser } from '../../../modules/selectors';\nimport renderText from '../../common/helpers/renderText';\nimport useMedia from '../../../hooks/useMedia';\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useLang, { LangFn } from '../../../hooks/useLang';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport Avatar from '../../common/Avatar';\nimport VerifiedIcon from '../../common/VerifiedIcon';\nimport ListItem from '../../ui/ListItem';\nimport Link from '../../ui/Link';\n\nimport './ChatMessage.scss';\n\ntype OwnProps = {\n searchQuery?: string;\n message: ApiMessage;\n chatId: string;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n privateChatUser?: ApiUser;\n lastMessageOutgoingStatus?: ApiMessageOutgoingStatus;\n lastSyncTime?: number;\n};\n\nconst ChatMessage: FC = ({\n message,\n searchQuery,\n chatId,\n chat,\n privateChatUser,\n lastSyncTime,\n}) => {\n const { focusMessage } = getDispatch();\n\n const mediaThumbnail = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));\n const isRoundVideo = Boolean(getMessageRoundVideo(message));\n\n const handleClick = useCallback(() => {\n focusMessage({ chatId, messageId: message.id });\n }, [chatId, focusMessage, message.id]);\n\n const lang = useLang();\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n \n
\n
\n
\n

{renderText(getChatTitle(lang, chat, privateChatUser))}

\n {chat.isVerified && }\n
\n
\n \n {formatPastTimeShort(lang, message.date * 1000)}\n \n
\n\n
\n
\n
\n {renderSummary(lang, message, mediaBlobUrl || mediaThumbnail, searchQuery, isRoundVideo)}\n
\n
\n
\n \n );\n};\n\nfunction renderSummary(\n lang: LangFn, message: ApiMessage, blobUrl?: string, searchQuery?: string, isRoundVideo?: boolean,\n) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message, undefined, searchQuery);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true, searchQuery)}\n \n );\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return {};\n }\n\n const privateChatUserId = getPrivateChatUserId(chat);\n\n return {\n chat,\n lastSyncTime: global.lastSyncTime,\n ...(privateChatUserId && { privateChatUser: selectUser(global, privateChatUserId) }),\n };\n },\n)(ChatMessage));\n","import React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { formatDateToString } from '../../../util/dateFormat';\n\nimport './DateSuggest.scss';\n\nconst SUGGESTION_COUNT = 8;\n\nexport type OwnProps = {\n searchDate: string;\n onSelect: (value: Date) => void;\n};\n\nconst DateSuggest: FC = ({\n searchDate, onSelect,\n}) => {\n const suggestions = useMemo(() => getSuggestionsFromDate(searchDate), [searchDate]);\n return (\n
\n {suggestions.map(({ date, text }) => {\n return (\n onSelect(date)}\n className=\"date-item\"\n key={text}\n >\n \n {text}\n \n );\n })}\n
\n );\n};\n\nfunction getSuggestionsFromDate(searchDate: string) {\n const hasYear = searchDate.match(/^\\d{2,4}-\\d{2}-\\d{2}$/g);\n if (hasYear) {\n const date = new Date(searchDate);\n return [{ date, text: formatDateToString(date) }];\n }\n\n const suggestion = [];\n const currentDate = new Date();\n const currentYear = currentDate.getFullYear();\n const latestYear = currentDate.getTime() > (new Date(`${currentYear}-${searchDate}`)).getTime()\n ? currentYear\n : currentYear - 1;\n\n for (let i = 0; i < SUGGESTION_COUNT; i++) {\n const date = new Date(`${latestYear - i}-${searchDate}`);\n suggestion.push({ date, text: formatDateToString(date) });\n }\n\n return suggestion;\n}\n\nexport default memo(DateSuggest);\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { unique } from '../../../util/iteratees';\nimport {\n sortChatIds,\n filterUsersByName,\n} from '../../../modules/helpers';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport LeftSearchResultChat from './LeftSearchResultChat';\nimport RecentContacts from './RecentContacts';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\nimport Link from '../../ui/Link';\nimport NothingFound from '../../common/NothingFound';\nimport PickerSelectedItem from '../../common/PickerSelectedItem';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n searchDate?: number;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n localContactIds?: string[];\n localChatIds?: string[];\n localUserIds?: string[];\n globalChatIds?: string[];\n globalUserIds?: string[];\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH = 4;\nconst LESS_LIST_ITEMS_AMOUNT = 5;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatResults: FC = ({\n searchQuery, searchDate, dateSearchQuery, currentUserId,\n localContactIds, localChatIds, localUserIds, globalChatIds, globalUserIds,\n foundIds, globalMessagesByChatId, chatsById, fetchingStatus, lastSyncTime,\n onReset, onSearchDateSelect,\n}) => {\n const {\n openChat, addRecentlyFoundChatId, searchMessagesGlobal, setGlobalSearchChatId,\n } = getDispatch();\n\n const lang = useLang();\n\n const [shouldShowMoreLocal, setShouldShowMoreLocal] = useState(false);\n const [shouldShowMoreGlobal, setShouldShowMoreGlobal] = useState(false);\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const handleChatClick = useCallback(\n (id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n\n if (id !== currentUserId) {\n addRecentlyFoundChatId({ id });\n }\n\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n onReset();\n }\n },\n [currentUserId, openChat, addRecentlyFoundChatId, onReset],\n );\n\n const handlePickerItemClick = useCallback((id: string) => {\n setGlobalSearchChatId({ id });\n }, [setGlobalSearchChatId]);\n\n const localResults = useMemo(() => {\n if (!searchQuery || (searchQuery.startsWith('@') && searchQuery.length < 2)) {\n return MEMO_EMPTY_ARRAY;\n }\n\n const contactIdsWithMe = [\n ...(currentUserId ? [currentUserId] : []),\n ...(localContactIds || []),\n ];\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = filterUsersByName(\n contactIdsWithMe, usersById, searchQuery, currentUserId, lang('SavedMessages'),\n );\n\n return [\n ...sortChatIds(unique([\n ...(foundContactIds || []),\n ...(localChatIds || []),\n ...(localUserIds || []),\n ]), chatsById, undefined, currentUserId ? [currentUserId] : undefined),\n ];\n }, [searchQuery, currentUserId, localContactIds, lang, localChatIds, localUserIds, chatsById]);\n\n const globalResults = useMemo(() => {\n if (!searchQuery || searchQuery.length < MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH || !globalChatIds || !globalUserIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return sortChatIds(\n unique([...globalChatIds, ...globalUserIds]),\n chatsById,\n true,\n );\n }, [chatsById, globalChatIds, globalUserIds, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if ((!searchQuery && !searchDate) || !foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId, searchQuery, searchDate]);\n\n const handleClickShowMoreLocal = useCallback(() => {\n setShouldShowMoreLocal(!shouldShowMoreLocal);\n }, [shouldShowMoreLocal]);\n\n const handleClickShowMoreGlobal = useCallback(() => {\n setShouldShowMoreGlobal(!shouldShowMoreGlobal);\n }, [shouldShowMoreGlobal]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages\n && !localResults.length && !globalResults.length && !foundMessages.length;\n\n if (!searchQuery && !searchDate) {\n return ;\n }\n\n return (\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {Boolean(localResults.length) && (\n
\n {localResults.map((id) => (\n \n ))}\n
\n )}\n {Boolean(localResults.length) && (\n
\n

\n {localResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreLocal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionDialogs')}\n

\n {localResults.map((id, index) => {\n if (!shouldShowMoreLocal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(globalResults.length) && (\n
\n

\n {globalResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreGlobal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionGlobal')}\n

\n {globalResults.map((id, index) => {\n if (!shouldShowMoreGlobal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(foundMessages.length) && (\n
\n

{lang('SearchMessages')}

\n {foundMessages.map(renderFoundMessage)}\n
\n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n\n const { userIds: localContactIds } = global.contactList || {};\n\n if (!localContactIds) {\n return {\n chatsById,\n };\n }\n\n const {\n currentUserId, messages, lastSyncTime,\n } = global;\n const {\n fetchingStatus, globalResults, localResults, resultsByType,\n } = global.globalSearch;\n const { chatIds: globalChatIds, userIds: globalUserIds } = globalResults || {};\n const { chatIds: localChatIds, userIds: localUserIds } = localResults || {};\n const { byChatId: globalMessagesByChatId } = messages;\n const foundIds = resultsByType?.text?.foundIds;\n\n return {\n currentUserId,\n localContactIds,\n localChatIds,\n localUserIds,\n globalChatIds,\n globalUserIds,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatMessageResults: FC = ({\n searchQuery,\n currentUserId,\n dateSearchQuery,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n onSearchDateSelect,\n}) => {\n const { searchMessagesGlobal } = getDispatch();\n\n const lang = useLang();\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n chatId: currentUserId,\n });\n });\n }\n }, [currentUserId, lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages && !foundMessages.length;\n\n return (\n
\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {foundMessages.map(renderFoundMessage)}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n const { currentUserId, messages: { byChatId: globalMessagesByChatId }, lastSyncTime } = global;\n const { fetchingStatus, resultsByType } = global.globalSearch;\n\n const { foundIds } = (resultsByType?.text) || {};\n\n return {\n currentUserId,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatMessageResults));\n","import { GlobalState } from '../../../../global/types';\nimport {\n ApiChat, ApiGlobalMessageSearchType, ApiMessage, ApiUser,\n} from '../../../../api/types';\nimport { ISettings } from '../../../../types';\n\nimport { selectChat, selectTheme } from '../../../../modules/selectors';\n\nexport type StateProps = {\n theme: ISettings['theme'];\n isLoading?: boolean;\n chatsById: Record;\n usersById: Record;\n globalMessagesByChatId?: Record }>;\n foundIds?: string[];\n lastSyncTime?: number;\n searchChatId?: string;\n activeDownloads: Record;\n isChatProtected?: boolean;\n};\n\nexport function createMapStateToProps(type: ApiGlobalMessageSearchType) {\n return (global: GlobalState, props: any) => {\n const { byId: chatsById } = global.chats;\n const { byId: usersById } = global.users;\n const {\n fetchingStatus, resultsByType, chatId,\n } = global.globalSearch;\n\n // One component is used for two different types of results.\n // The differences between them are only in the isVoice property.\n // The rest of the search results use their own personal components.\n const currentType = type !== 'audio' ? type : (props?.isVoice ? 'voice' : 'audio');\n\n const { byChatId: globalMessagesByChatId } = global.messages;\n const foundIds = resultsByType?.[currentType]?.foundIds;\n\n const activeDownloads = global.activeDownloads.byChatId;\n\n return {\n theme: selectTheme(global),\n isLoading: foundIds === undefined\n || (fetchingStatus ? Boolean(fetchingStatus.chats || fetchingStatus.messages) : false),\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n searchChatId: chatId,\n activeDownloads,\n isChatProtected: chatId ? selectChat(global, chatId)?.isProtected : undefined,\n lastSyncTime: global.lastSyncTime,\n };\n };\n}\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { LoadMoreDirection, MediaViewerOrigin } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport buildClassName from '../../../util/buildClassName';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Media from '../../common/Media';\nimport ChatMessage from './ChatMessage';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'media';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst MediaResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n openMediaViewer,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleSelectMedia = useCallback((messageId: number, chatId: string) => {\n openMediaViewer({\n chatId,\n messageId,\n origin: MediaViewerOrigin.SearchResult,\n });\n }, [openMediaViewer]);\n\n function renderGallery() {\n return (\n
\n {foundMessages.map((message) => (\n \n ))}\n
\n );\n }\n\n function renderSearchResult() {\n return foundMessages.map((message) => (\n \n ));\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n const isMediaGrid = canRenderContents && foundIds && foundIds.length > 0 && !searchQuery;\n const isMessageList = canRenderContents && foundIds && foundIds.length > 0 && searchQuery;\n\n const classNames = buildClassName(\n 'search-content custom-scroll',\n isMessageList && 'chat-list',\n );\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {isMediaGrid && renderGallery()}\n {isMessageList && renderSearchResult()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(MediaResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport WebLink from '../../common/WebLink';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'links';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst LinkResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(LinkResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport { getMessageDocument } from '../../../modules/helpers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport Document from '../../common/Document';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'documents';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst FileResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n activeDownloads,\n lastSyncTime,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n const message = globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n\n return message && getMessageDocument(message) ? message : undefined;\n }).filter(Boolean) as ApiMessage[];\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

{formatMonthAndYear(lang, new Date(message.date * 1000))}

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(FileResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { AudioOrigin, LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Audio from '../../common/Audio';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n isVoice?: boolean;\n searchQuery?: string;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst AudioResults: FC = ({\n theme,\n isVoice,\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n activeDownloads,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n openAudioPlayer,\n } = getDispatch();\n\n const lang = useLang();\n const currentType = isVoice ? 'voice' : 'audio';\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: currentType,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [currentType, lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n const handlePlayAudio = useCallback((messageId: number, chatId: string) => {\n openAudioPlayer({ chatId, messageId });\n }, [openAudioPlayer]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps('audio'),\n)(AudioResults));\n","import React, {\n FC, memo, useCallback, useState, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalSearchContent } from '../../../types';\n\nimport { parseDateString } from '../../../util/dateFormat';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport TabList from '../../ui/TabList';\nimport Transition from '../../ui/Transition';\nimport ChatResults from './ChatResults';\nimport UserChatResults from './ChatMessageResults';\nimport MediaResults from './MediaResults';\nimport LinkResults from './LinkResults';\nimport FileResults from './FileResults';\nimport AudioResults from './AudioResults';\n\nimport './LeftSearch.scss';\n\nexport type OwnProps = {\n searchQuery?: string;\n searchDate?: number;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentContent?: GlobalSearchContent;\n chatId?: string;\n};\n\nconst TABS = [\n { type: GlobalSearchContent.ChatList, title: 'SearchAllChatsShort' },\n { type: GlobalSearchContent.Media, title: 'SharedMediaTab2' },\n { type: GlobalSearchContent.Links, title: 'SharedLinksTab2' },\n { type: GlobalSearchContent.Files, title: 'SharedFilesTab2' },\n { type: GlobalSearchContent.Music, title: 'SharedMusicTab2' },\n { type: GlobalSearchContent.Voice, title: 'SharedVoiceTab2' },\n];\n\nconst CHAT_TABS = [\n { type: GlobalSearchContent.ChatList, title: 'All Messages' },\n ...TABS.slice(1),\n];\n\nconst TRANSITION_RENDER_COUNT = Object.keys(GlobalSearchContent).length / 2;\n\nconst LeftSearch: FC = ({\n searchQuery,\n searchDate,\n isActive,\n currentContent = GlobalSearchContent.ChatList,\n chatId,\n onReset,\n}) => {\n const {\n setGlobalSearchContent,\n setGlobalSearchDate,\n } = getDispatch();\n\n const lang = useLang();\n const [activeTab, setActiveTab] = useState(currentContent);\n const dateSearchQuery = useMemo(() => parseDateString(searchQuery), [searchQuery]);\n\n const handleSwitchTab = useCallback((index: number) => {\n const tab = TABS[index];\n setGlobalSearchContent({ content: tab.type });\n setActiveTab(index);\n }, [setGlobalSearchContent]);\n\n const handleSearchDateSelect = useCallback((value: Date) => {\n setGlobalSearchDate({ date: value.getTime() / 1000 });\n }, [setGlobalSearchDate]);\n\n useHistoryBack(isActive, onReset, undefined, undefined, true);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, undefined, '.ListItem-button', true);\n\n return (\n
\n \n \n {() => {\n switch (currentContent) {\n case GlobalSearchContent.ChatList:\n if (chatId) {\n return (\n \n );\n }\n return (\n \n );\n case GlobalSearchContent.Media:\n return ;\n case GlobalSearchContent.Links:\n return ;\n case GlobalSearchContent.Files:\n return ;\n case GlobalSearchContent.Music:\n return (\n \n );\n case GlobalSearchContent.Voice:\n return (\n \n );\n default:\n return undefined;\n }\n }}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentContent, chatId } = global.globalSearch;\n\n return { currentContent, chatId };\n },\n)(LeftSearch));\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\n\nexport type TwoFaActions = (\n 'setCurrentPassword' | 'setPassword' | 'setHint' | 'setEmail' | 'reset'\n);\nexport type TwoFaDispatch = Dispatch;\n\nexport type TwoFaState = {\n currentPassword: string;\n password: string;\n hint: string;\n email: string;\n};\n\nconst INITIAL_STATE: TwoFaState = {\n currentPassword: '',\n password: '',\n hint: '',\n email: '',\n};\n\nconst twoFaReducer: StateReducer = (\n state,\n action,\n) => {\n switch (action.type) {\n case 'setCurrentPassword':\n return {\n ...state,\n currentPassword: action.payload,\n };\n\n case 'setPassword':\n return {\n ...state,\n password: action.payload,\n };\n\n case 'setHint':\n return {\n ...state,\n hint: action.payload,\n };\n\n case 'setEmail':\n return {\n ...state,\n email: action.payload,\n };\n\n case 'reset':\n return INITIAL_STATE;\n\n default:\n return state;\n }\n};\n\nconst useTwoFaReducer = () => {\n return useReducer(twoFaReducer, INITIAL_STATE);\n};\n\nexport default useTwoFaReducer;\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport useLang from '../../../hooks/useLang';\n\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n currentScreen: SettingsScreens;\n editedFolderId?: number;\n onReset: () => void;\n onSaveFilter: () => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n};\n\nconst SettingsHeader: FC = ({\n currentScreen,\n editedFolderId,\n onReset,\n onSaveFilter,\n onScreenSelect,\n}) => {\n const {\n signOut,\n deleteChatFolder,\n } = getDispatch();\n\n const [isSignOutDialogOpen, setIsSignOutDialogOpen] = useState(false);\n const [isDeleteFolderDialogOpen, setIsDeleteFolderDialogOpen] = useState(false);\n\n const openSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(true);\n }, []);\n\n const closeSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(false);\n }, []);\n\n const openDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(true);\n }, []);\n\n const closeDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(false);\n }, []);\n\n const handleSignOutMessage = useCallback(() => {\n closeSignOutConfirmation();\n signOut();\n }, [closeSignOutConfirmation, signOut]);\n\n const handleDeleteFolderMessage = useCallback(() => {\n closeDeleteFolderConfirmation();\n deleteChatFolder({ id: editedFolderId });\n onReset();\n }, [editedFolderId, closeDeleteFolderConfirmation, deleteChatFolder, onReset]);\n\n const SettingsMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n const lang = useLang();\n\n function renderHeaderContent() {\n switch (currentScreen) {\n case SettingsScreens.EditProfile:\n return

{lang('lng_settings_information')}

;\n case SettingsScreens.General:\n return

{lang('General')}

;\n case SettingsScreens.QuickReaction:\n return

{lang('DoubleTapSetting')}

;\n case SettingsScreens.Notifications:\n return

{lang('Notifications')}

;\n case SettingsScreens.DataStorage:\n return

{lang('DataSettings')}

;\n case SettingsScreens.Privacy:\n return

{lang('PrivacySettings')}

;\n case SettingsScreens.Language:\n return

{lang('Language')}

;\n\n case SettingsScreens.GeneralChatBackground:\n return

{lang('ChatBackground')}

;\n case SettingsScreens.GeneralChatBackgroundColor:\n return

{lang('SetColor')}

;\n\n case SettingsScreens.PrivacyPhoneNumber:\n return

{lang('PrivacyPhone')}

;\n case SettingsScreens.PrivacyLastSeen:\n return

{lang('PrivacyLastSeen')}

;\n case SettingsScreens.PrivacyProfilePhoto:\n return

{lang('Privacy.ProfilePhoto')}

;\n case SettingsScreens.PrivacyForwarding:\n return

{lang('PrivacyForwards')}

;\n case SettingsScreens.PrivacyGroupChats:\n return

{lang('AutodownloadGroupChats')}

;\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return

{lang('AlwaysShareWith')}

;\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return

{lang('NeverShareWith')}

;\n\n case SettingsScreens.PrivacyActiveSessions:\n return

{lang('SessionsTitle')}

;\n case SettingsScreens.PrivacyBlockedUsers:\n return

{lang('BlockedUsers')}

;\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaEnabled:\n return

{lang('TwoStepVerification')}

;\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return

{lang('PleaseEnterCurrentPassword')}

;\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return

{lang('PleaseReEnterPassword')}

;\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaChangePasswordHint:\n return

{lang('PasswordHint')}

;\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaRecoveryEmail:\n return

{lang('RecoveryEmailTitle')}

;\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return

Recovery Email Code

;\n case SettingsScreens.TwoFaCongratulations:\n return

{lang('TwoStepVerificationPasswordSet')}

;\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return

{lang('PleaseEnterCurrentPassword')}

;\n\n case SettingsScreens.Folders:\n return

{lang('Filters')}

;\n case SettingsScreens.FoldersCreateFolder:\n return

{lang('FilterNew')}

;\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n
\n

{lang('FilterEdit')}

\n\n {editedFolderId && (\n \n \n {lang('Delete')}\n \n \n )}\n
\n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n
\n {(currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersIncludedChatsFromChatList) ? (\n

{lang('FilterInclude')}

\n ) : (\n

{lang('FilterExclude')}

\n )}\n\n \n \n \n
\n );\n\n default:\n return (\n
\n

{lang('SETTINGS')}

\n\n onScreenSelect(SettingsScreens.EditProfile)}\n ariaLabel={lang('lng_settings_information')}\n >\n \n \n \n {lang('LogOutTitle')}\n \n
\n );\n }\n }\n\n return (\n
\n \n \n \n {renderHeaderContent()}\n \n \n
\n );\n};\n\nexport default memo(SettingsHeader);\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ProfileInfo from '../../common/ProfileInfo';\nimport ChatExtra from '../../common/ChatExtra';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUser?: ApiUser;\n lastSyncTime?: number;\n};\n\nconst SettingsMain: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentUser,\n lastSyncTime,\n}) => {\n const { loadProfilePhotos } = getDispatch();\n\n const lang = useLang();\n const profileId = currentUser?.id;\n\n useEffect(() => {\n if (profileId && lastSyncTime) {\n loadProfilePhotos({ profileId });\n }\n }, [lastSyncTime, profileId, loadProfilePhotos]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Main);\n\n return (\n
\n
\n {currentUser && (\n \n )}\n {currentUser && (\n \n )}\n onScreenSelect(SettingsScreens.General)}\n >\n {lang('Telegram.GeneralSettingsViewController')}\n \n onScreenSelect(SettingsScreens.Notifications)}\n >\n {lang('Notifications')}\n \n onScreenSelect(SettingsScreens.Privacy)}\n >\n {lang('PrivacySettings')}\n \n onScreenSelect(SettingsScreens.DataStorage)}\n >\n {lang('DataSettings')}\n \n onScreenSelect(SettingsScreens.Folders)}\n >\n {lang('Filters')}\n \n onScreenSelect(SettingsScreens.Language)}\n >\n {lang('Language')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId, lastSyncTime } = global;\n\n return {\n currentUser: currentUserId ? selectUser(global, currentUserId) : undefined,\n lastSyncTime,\n };\n },\n)(SettingsMain));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\n\ntype OwnProps = {\n currentUsername?: string;\n asLink?: boolean;\n isLoading?: boolean;\n isUsernameAvailable?: boolean;\n checkUsername: AnyToVoidFunction;\n onChange: (value: string | false) => void;\n};\n\nconst MIN_USERNAME_LENGTH = 5;\nconst MAX_USERNAME_LENGTH = 32;\nconst LINK_PREFIX = 'https://t.me/';\nconst LINK_PREFIX_REGEX = /https:\\/\\/t\\.me\\/?/i;\nconst USERNAME_REGEX = /^([a-zA-Z0-9_]+)$/;\n\nconst runDebouncedForCheckUsername = debounce((cb) => cb(), 250, false);\n\nfunction isUsernameValid(username: string) {\n return username.length >= MIN_USERNAME_LENGTH\n && username.length <= MAX_USERNAME_LENGTH\n && USERNAME_REGEX.test(username);\n}\n\nconst SettingsEditProfile: FC = ({\n currentUsername,\n asLink,\n isLoading,\n isUsernameAvailable,\n checkUsername,\n onChange,\n}) => {\n const [username, setUsername] = useState(currentUsername || '');\n\n const lang = useLang();\n const langPrefix = asLink ? 'SetUrl' : 'Username';\n const label = asLink ? lang('SetUrlPlaceholder') : lang('Username');\n\n const [usernameSuccess, usernameError] = useMemo(() => {\n if (!username.length) {\n return [];\n }\n\n if (username.length < MIN_USERNAME_LENGTH) {\n return [undefined, `${label} is too short`];\n }\n if (username.length > MAX_USERNAME_LENGTH) {\n return [undefined, `${label} is too long`];\n }\n if (!USERNAME_REGEX.test(username)) {\n return [undefined, `${label} contains invalid characters`];\n }\n\n if (isUsernameAvailable === undefined) {\n return [];\n }\n\n // Variable `isUsernameAvailable` is initialized with `undefined`, so a strict false check is required\n return [\n isUsernameAvailable ? lang(`${langPrefix}Available`, 'Username') : undefined,\n isUsernameAvailable === false ? lang(`${langPrefix}InUse`) : undefined,\n ];\n }, [username, isUsernameAvailable, lang, langPrefix, label]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [asLink, currentUsername]);\n\n const handleUsernameChange = useCallback((e: ChangeEvent) => {\n const newUsername = e.target.value.trim().replace(LINK_PREFIX_REGEX, '');\n setUsername(newUsername);\n e.target.value = `${asLink ? LINK_PREFIX : ''}${newUsername}`;\n\n const isValid = isUsernameValid(newUsername);\n\n if (isValid) {\n runDebouncedForCheckUsername(() => {\n checkUsername({ username: newUsername });\n });\n }\n\n if (onChange) {\n onChange(isValid ? newUsername : false);\n }\n }, [asLink, checkUsername, onChange]);\n\n return (\n \n );\n};\n\nexport default memo(SettingsEditProfile);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiMediaFormat } from '../../../api/types';\nimport { ProfileEditProgress, SettingsScreens } from '../../../types';\n\nimport { throttle } from '../../../util/schedulers';\nimport { selectUser } from '../../../modules/selectors';\nimport { getChatAvatarHash } from '../../../modules/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport InputText from '../../ui/InputText';\nimport renderText from '../../common/helpers/renderText';\nimport UsernameInput from '../../common/UsernameInput';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentAvatarHash?: string;\n currentFirstName?: string;\n currentLastName?: string;\n currentBio?: string;\n currentUsername?: string;\n progress?: ProfileEditProgress;\n isUsernameAvailable?: boolean;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst MAX_BIO_LENGTH = 70;\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide your first name';\nconst ERROR_BIO_TOO_LONG = 'Bio can\\' be longer than 70 characters';\n\nconst SettingsEditProfile: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n}) => {\n const {\n loadCurrentUser,\n updateProfile,\n checkUsername,\n } = getDispatch();\n\n const lang = useLang();\n\n const [isUsernameTouched, setIsUsernameTouched] = useState(false);\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n\n const [photo, setPhoto] = useState();\n const [firstName, setFirstName] = useState(currentFirstName || '');\n const [lastName, setLastName] = useState(currentLastName || '');\n const [bio, setBio] = useState(currentBio || '');\n const [username, setUsername] = useState(currentUsername || '');\n\n const currentAvatarBlobUrl = useMedia(currentAvatarHash, false, ApiMediaFormat.BlobUrl);\n\n const isLoading = progress === ProfileEditProgress.InProgress;\n const isUsernameError = username === false;\n\n const isSaveButtonShown = useMemo(() => {\n if (isUsernameError) {\n return false;\n }\n\n return Boolean(photo) || isProfileFieldsTouched || isUsernameAvailable === true;\n }, [photo, isProfileFieldsTouched, isUsernameError, isUsernameAvailable]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.EditProfile);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadCurrentUser();\n });\n }, [loadCurrentUser]);\n\n useEffect(() => {\n setPhoto(undefined);\n }, [currentAvatarBlobUrl]);\n\n useEffect(() => {\n setFirstName(currentFirstName || '');\n setLastName(currentLastName || '');\n setBio(currentBio || '');\n }, [currentFirstName, currentLastName, currentBio]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [currentUsername]);\n\n useEffect(() => {\n if (progress === ProfileEditProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setIsUsernameTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handlePhotoChange = useCallback((newPhoto: File) => {\n setPhoto(newPhoto);\n }, []);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleBioChange = useCallback((e: ChangeEvent) => {\n setBio(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUsernameChange = useCallback((value: string | false) => {\n setUsername(value);\n setIsUsernameTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n const trimmedBio = bio.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n return;\n }\n\n if (trimmedBio.length > MAX_BIO_LENGTH) {\n setError(ERROR_BIO_TOO_LONG);\n return;\n }\n\n updateProfile({\n photo,\n ...(isProfileFieldsTouched && {\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n bio: trimmedBio,\n }),\n ...(isUsernameTouched && {\n username,\n }),\n });\n }, [\n photo,\n firstName, lastName, bio, isProfileFieldsTouched,\n username, isUsernameTouched,\n updateProfile,\n ]);\n\n return (\n
\n
\n
\n \n \n \n \n\n

\n {renderText(lang('lng_settings_about_bio'), ['br', 'simple_markdown'])}\n

\n
\n\n
\n

{lang('Username')}

\n\n \n\n

\n {renderText(lang('UsernameHelp'), ['br', 'simple_markdown'])}\n

\n {username && (\n

\n {lang('lng_username_link')}
\n https://t.me/{username}\n

\n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n const { progress, isUsernameAvailable } = global.profileEdit || {};\n const currentUser = currentUserId ? selectUser(global, currentUserId) : undefined;\n\n if (!currentUser) {\n return {\n progress,\n isUsernameAvailable,\n };\n }\n\n const {\n firstName: currentFirstName,\n lastName: currentLastName,\n username: currentUsername,\n fullInfo,\n } = currentUser;\n const { bio: currentBio } = fullInfo || {};\n const currentAvatarHash = getChatAvatarHash(currentUser);\n\n return {\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n };\n },\n)(SettingsEditProfile));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ISettings } from '../../../types';\n\nimport { AUTODOWNLOAD_FILESIZE_MB_LIMITS } from '../../../config';\nimport { pick } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsDataStorage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n canAutoPlayGifs,\n canAutoPlayVideos,\n autoLoadFileMaxSizeMb,\n}) => {\n const { setSettingOption } = getDispatch();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const renderFileSizeCallback = useCallback((value: number) => {\n return lang('AutodownloadSizeLimitUpTo', lang('FileSize.MB', String(AUTODOWNLOAD_FILESIZE_MB_LIMITS[value]), 'i'));\n }, [lang]);\n\n const handleFileSizeChange = useCallback((value: number) => {\n setSettingOption({ autoLoadFileMaxSizeMb: AUTODOWNLOAD_FILESIZE_MB_LIMITS[value] });\n }, [setSettingOption]);\n\n function renderContentSizeSlider() {\n const value = AUTODOWNLOAD_FILESIZE_MB_LIMITS.indexOf(autoLoadFileMaxSizeMb);\n\n return (\n
\n \n
\n );\n }\n\n function renderAutoDownloadBlock(\n title: string,\n key: 'Photo' | 'Video' | 'File',\n canAutoLoadFromContacts: boolean,\n canAutoLoadInPrivateChats: boolean,\n canAutoLoadInGroups: boolean,\n canAutoLoadInChannels: boolean,\n ) {\n return (\n
\n

{title}

\n\n setSettingOption({ [`canAutoLoad${key}FromContacts`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InPrivateChats`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InGroups`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InChannels`]: isChecked })}\n />\n\n {key === 'File' && renderContentSizeSlider()}\n
\n );\n }\n\n return (\n
\n {renderAutoDownloadBlock(\n lang('AutoDownloadPhotosTitle'),\n 'Photo',\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n )}\n {renderAutoDownloadBlock(\n lang('AutoDownloadVideosTitle'),\n 'Video',\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n )}\n {renderAutoDownloadBlock(\n 'Auto-download files', // Proper translation is not available yet\n 'File',\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n )}\n\n
\n

{lang('AutoplayMedia')}

\n\n setSettingOption({ canAutoPlayGifs: isChecked })}\n />\n setSettingOption({ canAutoPlayVideos: isChecked })}\n />\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return pick(global.settings.byKey, [\n 'canAutoLoadPhotoFromContacts',\n 'canAutoLoadPhotoInPrivateChats',\n 'canAutoLoadPhotoInGroups',\n 'canAutoLoadPhotoInChannels',\n 'canAutoLoadVideoFromContacts',\n 'canAutoLoadVideoInPrivateChats',\n 'canAutoLoadVideoInGroups',\n 'canAutoLoadVideoInChannels',\n 'canAutoLoadFileFromContacts',\n 'canAutoLoadFileInPrivateChats',\n 'canAutoLoadFileInGroups',\n 'canAutoLoadFileInChannels',\n 'canAutoPlayGifs',\n 'canAutoPlayVideos',\n 'autoLoadFileMaxSizeMb',\n ]);\n },\n)(SettingsDataStorage));\n","import React, {\n FC, memo, useMemo, useCallback, useState, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { throttle } from '../../../../util/schedulers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport { getFolderDescriptionText } from '../../../../modules/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForChatsCount } from '../../../../hooks/useFolderManager';\n\nimport ListItem from '../../../ui/ListItem';\nimport Button from '../../../ui/Button';\nimport Loading from '../../../ui/Loading';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\n\ntype OwnProps = {\n isActive?: boolean;\n onCreateFolder: () => void;\n onEditFolder: (folder: ApiChatFolder) => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n orderedFolderIds?: number[];\n foldersById: Record;\n recommendedChatFolders?: ApiChatFolder[];\n};\n\nconst runThrottledForLoadRecommended = throttle((cb) => cb(), 60000, true);\n\nconst MAX_ALLOWED_FOLDERS = 10;\n\nconst SettingsFoldersMain: FC = ({\n isActive,\n onCreateFolder,\n onEditFolder,\n onScreenSelect,\n onReset,\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n}) => {\n const {\n loadRecommendedChatFolders,\n addChatFolder,\n showDialog,\n } = getDispatch();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersAll').then(setAnimationData);\n }\n }, [animationData]);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottledForLoadRecommended(() => {\n loadRecommendedChatFolders();\n });\n }, [loadRecommendedChatFolders]);\n\n const handleCreateFolder = useCallback(() => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n onCreateFolder();\n }, [foldersById, showDialog, onCreateFolder]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Folders);\n\n const chatsCountByFolderId = useFolderManagerForChatsCount();\n const userFolders = useMemo(() => {\n if (!orderedFolderIds) {\n return undefined;\n }\n\n return orderedFolderIds.map((id) => {\n const folder = foldersById[id];\n\n return {\n id: folder.id,\n title: folder.title,\n subtitle: getFolderDescriptionText(lang, folder, chatsCountByFolderId[folder.id]),\n };\n });\n }, [orderedFolderIds, foldersById, lang, chatsCountByFolderId]);\n\n const handleCreateFolderFromRecommended = useCallback((folder: ApiChatFolder) => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n addChatFolder({ folder });\n }, [foldersById, addChatFolder, showDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n

\n {lang('CreateNewFilterInfo')}\n

\n\n \n \n {lang('CreateNewFilter')}\n \n
\n\n
\n

{lang('Filters')}

\n\n {userFolders?.length ? userFolders.map((folder) => (\n onEditFolder(foldersById[folder.id])}\n >\n {folder.title}\n {folder.subtitle}\n \n )) : userFolders && !userFolders.length ? (\n

\n You have no folders yet.\n

\n ) : }\n
\n\n {(recommendedChatFolders && Boolean(recommendedChatFolders.length)) && (\n
\n

\n {lang('FilterRecommended')}\n

\n\n {recommendedChatFolders.map((folder) => (\n handleCreateFolderFromRecommended(folder)}\n >\n
\n
\n {folder.title}\n {folder.description}\n
\n\n \n {lang('Add')}\n \n
\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n orderedIds: orderedFolderIds,\n byId: foldersById,\n recommended: recommendedChatFolders,\n } = global.chatFolders;\n\n return {\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n };\n },\n)(SettingsFoldersMain));\n","import React, { FC } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\n\nimport './ShowMoreButton.scss';\n\ntype OwnProps = {\n count: number;\n itemName: string;\n itemPluralName?: string;\n isLoading?: boolean;\n onClick: () => void;\n};\n\nconst ShowMoreButton: FC = ({\n count,\n itemName,\n itemPluralName,\n isLoading,\n onClick,\n}) => {\n const lang = useLang();\n\n return (\n \n \n Show {count} more {count > 1 ? itemPluralName || `${itemName}s` : itemName}\n \n );\n};\n\nexport default ShowMoreButton;\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { findIntersectionWithSet } from '../../../../util/iteratees';\nimport { isUserId } from '../../../../modules/helpers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport {\n EXCLUDED_CHAT_TYPES,\n FolderEditDispatch,\n FoldersState,\n INCLUDED_CHAT_TYPES,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\nimport InputText from '../../../ui/InputText';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport FloatingActionButton from '../../../ui/FloatingActionButton';\nimport Spinner from '../../../ui/Spinner';\nimport ShowMoreButton from '../../../ui/ShowMoreButton';\n\ntype OwnProps = {\n state: FoldersState;\n dispatch: FolderEditDispatch;\n onAddIncludedChats: () => void;\n onAddExcludedChats: () => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n onBack: () => void;\n};\n\ntype StateProps = {\n loadedActiveChatIds?: string[];\n loadedArchivedChatIds?: string[];\n};\n\nconst SUBMIT_TIMEOUT = 500;\n\nconst INITIAL_CHATS_LIMIT = 5;\n\nconst ERROR_NO_TITLE = 'Please provide a title for this folder.';\nconst ERROR_NO_CHATS = 'ChatList.Filter.Error.Empty';\n\nconst SettingsFoldersEdit: FC = ({\n state,\n dispatch,\n onAddIncludedChats,\n onAddExcludedChats,\n isActive,\n onScreenSelect,\n onReset,\n onBack,\n loadedActiveChatIds,\n loadedArchivedChatIds,\n}) => {\n const {\n editChatFolder,\n addChatFolder,\n } = getDispatch();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n const [isIncludedChatsListExpanded, setIsIncludedChatsListExpanded] = useState(false);\n const [isExcludedChatsListExpanded, setIsExcludedChatsListExpanded] = useState(false);\n\n const {\n selectedChatIds: includedChatIds,\n selectedChatTypes: includedChatTypes,\n } = selectChatFilters(state, 'included');\n const {\n selectedChatIds: excludedChatIds,\n selectedChatTypes: excludedChatTypes,\n } = selectChatFilters(state, 'excluded');\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersNew').then(setAnimationData);\n }\n }, [animationData]);\n\n useEffect(() => {\n setIsIncludedChatsListExpanded(false);\n setIsExcludedChatsListExpanded(false);\n }, [state.folderId]);\n\n const [visibleIncludedChatIds, visibleExcludedChatIds] = useMemo(() => {\n const allLoadedChatsSet = new Set([\n ...(loadedActiveChatIds || []),\n ...(loadedArchivedChatIds || []),\n ]);\n\n const loadedIncludedChatIds = findIntersectionWithSet(includedChatIds, allLoadedChatsSet);\n const loadedExcludedChatIds = findIntersectionWithSet(excludedChatIds, allLoadedChatsSet);\n\n return [\n isIncludedChatsListExpanded\n ? loadedIncludedChatIds\n : loadedIncludedChatIds.slice(0, INITIAL_CHATS_LIMIT - includedChatTypes.length),\n isExcludedChatsListExpanded\n ? loadedExcludedChatIds\n : loadedExcludedChatIds.slice(0, INITIAL_CHATS_LIMIT - excludedChatTypes.length),\n ];\n }, [\n excludedChatIds, includedChatIds, includedChatTypes, excludedChatTypes,\n isExcludedChatsListExpanded, isIncludedChatsListExpanded,\n loadedActiveChatIds, loadedArchivedChatIds,\n ]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onBack, onScreenSelect, state.mode === 'edit'\n ? SettingsScreens.FoldersEditFolder\n : SettingsScreens.FoldersCreateFolder);\n\n function handleChange(event: React.ChangeEvent) {\n const { currentTarget } = event;\n dispatch({ type: 'setTitle', payload: currentTarget.value.trim() });\n }\n\n function handleSubmit() {\n const { title } = state.folder;\n\n if (!title) {\n dispatch({ type: 'setError', payload: ERROR_NO_TITLE });\n return;\n }\n\n if (!includedChatIds.length && !Object.keys(includedChatTypes).length) {\n dispatch({ type: 'setError', payload: ERROR_NO_CHATS });\n return;\n }\n\n dispatch({ type: 'setIsLoading', payload: true });\n if (state.mode === 'edit') {\n editChatFolder({ id: state.folderId, folderUpdate: state.folder });\n } else {\n addChatFolder({ folder: state.folder });\n }\n\n setTimeout(() => {\n onReset();\n }, SUBMIT_TIMEOUT);\n }\n\n function renderChatType(key: string, mode: 'included' | 'excluded') {\n const chatType = mode === 'included'\n ? INCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key)\n : EXCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key);\n\n if (!chatType) {\n return undefined;\n }\n\n return (\n \n {lang(chatType.title)}\n \n );\n }\n\n function renderChats(mode: 'included' | 'excluded') {\n const selectedChatTypes = mode === 'included' ? includedChatTypes : excludedChatTypes;\n const visibleChatIds = mode === 'included' ? visibleIncludedChatIds : visibleExcludedChatIds;\n\n const isExpanded = mode === 'included' ? isIncludedChatsListExpanded : isExcludedChatsListExpanded;\n const allChatIds = mode === 'included' ? includedChatIds : excludedChatIds;\n const leftChatsCount = allChatIds.length - selectedChatTypes.length - visibleChatIds.length;\n const clickHandler = mode === 'included'\n ? () => setIsIncludedChatsListExpanded(true)\n : () => setIsExcludedChatsListExpanded(true);\n\n return (\n <>\n {selectedChatTypes.map((key) => renderChatType(key, mode))}\n {visibleChatIds.map((id) => (\n \n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n {(!isExpanded && leftChatsCount > 0) && (\n \n )}\n \n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n {state.mode === 'create' && (\n

\n {lang('FilterIncludeInfo')}\n

\n )}\n\n \n
\n\n
\n {state.error && state.error === ERROR_NO_CHATS && (\n

\n {lang(state.error)}\n

\n )}\n\n

{lang('FilterInclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('included')}\n
\n\n
\n

{lang('FilterExclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('excluded')}\n
\n
\n\n \n {state.isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { listIds } = global.chats;\n\n return {\n loadedActiveChatIds: listIds.active,\n loadedArchivedChatIds: listIds.archived,\n };\n },\n)(SettingsFoldersEdit));\n","import React, {\n FC, useCallback, useRef, useEffect, memo,\n} from '../../../../lib/teact/teact';\n\nimport { isUserId } from '../../../../modules/helpers';\nimport {\n INCLUDED_CHAT_TYPES,\n EXCLUDED_CHAT_TYPES,\n FolderChatType,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useInfiniteScroll from '../../../../hooks/useInfiniteScroll';\nimport useLang from '../../../../hooks/useLang';\n\nimport Checkbox from '../../../ui/Checkbox';\nimport InputText from '../../../ui/InputText';\nimport ListItem from '../../../ui/ListItem';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport PickerSelectedItem from '../../../common/PickerSelectedItem';\nimport InfiniteScroll from '../../../ui/InfiniteScroll';\nimport Loading from '../../../ui/Loading';\n\nimport '../../../common/Picker.scss';\nimport './SettingsFoldersChatsPicker.scss';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n chatIds: string[];\n selectedIds: string[];\n selectedChatTypes: string[];\n filterValue?: string;\n onSelectedIdsChange: (ids: string[]) => void;\n onSelectedChatTypesChange: (types: string[]) => void;\n onFilterChange: (value: string) => void;\n};\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\n\nconst MAX_CHATS = 100;\nconst MAX_FULL_ITEMS = 10;\nconst ALWAYS_FULL_ITEMS_COUNT = 5;\n\nconst SettingsFoldersChatsPicker: FC = ({\n mode,\n chatIds,\n selectedIds,\n selectedChatTypes,\n filterValue,\n onSelectedIdsChange,\n onSelectedChatTypesChange,\n onFilterChange,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const chatTypes = mode === 'included' ? INCLUDED_CHAT_TYPES : EXCLUDED_CHAT_TYPES;\n const shouldMinimize = selectedIds.length + selectedChatTypes.length > MAX_FULL_ITEMS;\n const hasMaxChats = selectedIds.length >= MAX_CHATS;\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n });\n }, FOCUS_DELAY_MS);\n }, []);\n\n const handleItemClick = useCallback((id: string) => {\n const newSelectedIds = [...selectedIds];\n if (newSelectedIds.includes(id)) {\n newSelectedIds.splice(newSelectedIds.indexOf(id), 1);\n } else {\n newSelectedIds.push(id);\n }\n onSelectedIdsChange(newSelectedIds);\n }, [selectedIds, onSelectedIdsChange]);\n\n const handleChatTypeClick = useCallback((key: FolderChatType['key']) => {\n const newSelectedChatTypes = [...selectedChatTypes];\n if (newSelectedChatTypes.includes(key)) {\n newSelectedChatTypes.splice(newSelectedChatTypes.indexOf(key), 1);\n } else {\n newSelectedChatTypes.push(key);\n }\n onSelectedChatTypesChange(newSelectedChatTypes);\n }, [selectedChatTypes, onSelectedChatTypesChange]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n onFilterChange(value);\n }, [onFilterChange]);\n\n const lang = useLang();\n\n function renderSelectedChatType(key: string) {\n const selectedType = chatTypes.find(({ key: typeKey }) => key === typeKey);\n if (!selectedType) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n function renderChatType(type: FolderChatType) {\n return (\n handleChatTypeClick(type.key)}\n ripple\n >\n \n

{lang(type.title)}

\n \n \n );\n }\n\n function renderItem(id: string) {\n const isSelected = selectedIds.includes(id);\n\n return (\n handleItemClick(id)}\n ripple\n disabled={!isSelected && hasMaxChats}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n \n );\n }\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, chatIds, Boolean(filterValue));\n\n return (\n
\n
\n {selectedChatTypes.map(renderSelectedChatType)}\n {selectedIds.map((id, i) => (\n \n ))}\n {!hasMaxChats ? (\n \n ) : (\n

\n {`Sorry, you can't add more than ${MAX_CHATS} chats.`}\n

\n )}\n
\n \n {(!viewportIds || !viewportIds.length || viewportIds.includes(chatIds[0])) && (\n <>\n

\n {lang('FilterChatTypes')}\n

\n {chatTypes.map(renderChatType)}\n
\n

\n {lang('FilterChats')}\n

\n \n )}\n\n {viewportIds?.length ? (\n viewportIds.map(renderItem)\n ) : viewportIds && !viewportIds.length ? (\n

Sorry, nothing found.

\n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(SettingsFoldersChatsPicker);\n","import React, {\n FC, memo, useMemo, useCallback,\n} from '../../../../lib/teact/teact';\nimport { getGlobal } from '../../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { unique } from '../../../../util/iteratees';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../../config';\nimport { filterChatsByName } from '../../../../modules/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../../hooks/useFolderManager';\nimport {\n FoldersState,\n FolderEditDispatch,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersChatsPicker from './SettingsFoldersChatsPicker';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFoldersChatFilters: FC = ({\n mode,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const { chatFilter } = state;\n const { selectedChatIds, selectedChatTypes } = selectChatFilters(state, mode, true);\n\n const lang = useLang();\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = [...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []];\n return unique([\n ...selectedChatIds,\n ...filterChatsByName(lang, chatIds, chatsById, chatFilter),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedChatIds, lang, chatFilter]);\n\n const handleFilterChange = useCallback((newFilter: string) => {\n dispatch({\n type: 'setChatFilter',\n payload: newFilter,\n });\n }, [dispatch]);\n\n const handleSelectedIdsChange = useCallback((ids: string[]) => {\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: { ...state.includeFilters, includedChatIds: ids },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: { ...state.excludeFilters, excludedChatIds: ids },\n });\n }\n }, [mode, state, dispatch]);\n\n const handleSelectedChatTypesChange = useCallback((keys: string[]) => {\n const newFilters: Record = {};\n keys.forEach((key) => {\n newFilters[key] = true;\n });\n\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: {\n includedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: {\n excludedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n }\n }, [mode, selectedChatIds, dispatch]);\n\n useHistoryBack(\n isActive, onReset, onScreenSelect,\n mode === 'included' ? SettingsScreens.FoldersIncludedChats : SettingsScreens.FoldersExcludedChats,\n );\n\n if (!displayedIds) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default memo(SettingsFoldersChatFilters);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { FolderEditDispatch, FoldersState } from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersMain from './SettingsFoldersMain';\nimport SettingsFoldersEdit from './SettingsFoldersEdit';\nimport SettingsFoldersChatFilters from './SettingsFoldersChatFilters';\n\nimport './SettingsFolders.scss';\n\nconst TRANSITION_DURATION = 200;\n\nexport type OwnProps = {\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFolders: FC = ({\n currentScreen,\n shownScreen,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n dispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (state.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n state.mode, dispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleCreateFolder = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n }, [onScreenSelect, dispatch]);\n\n const handleEditFolder = useCallback((folder: ApiChatFolder) => {\n dispatch({ type: 'editFolder', payload: folder });\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }, [dispatch, onScreenSelect]);\n\n const handleAddIncludedChats = useCallback(() => {\n dispatch({ type: 'editIncludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersIncludedChatsFromChatList\n : SettingsScreens.FoldersIncludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n const handleAddExcludedChats = useCallback(() => {\n dispatch({ type: 'editExcludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersExcludedChatsFromChatList\n : SettingsScreens.FoldersExcludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n switch (currentScreen) {\n case SettingsScreens.Folders:\n return (\n \n );\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(SettingsFolders);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport { getFirstLetters } from '../../../util/textFormat';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n size?: number;\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCoverAnimated: FC = ({\n size = STICKER_SIZE_PICKER_HEADER,\n stickerSet,\n observeIntersection,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaHash = `stickerSet${stickerSet.id}`;\n const lottieData = useMedia(mediaHash, !isIntersecting, ApiMediaFormat.Lottie);\n const transitionClassNames = useMediaTransition(lottieData);\n\n const firstLetters = useMemo(() => {\n if (lottieData) return undefined;\n\n return getFirstLetters(stickerSet.title, 2);\n }, [lottieData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {lottieData && (\n \n )}\n
\n );\n};\n\nexport default memo(StickerSetCoverAnimated);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiStickerSet } from '../../../api/types';\n\nimport { IS_WEBM_SUPPORTED } from '../../../util/environment';\nimport { getFirstLetters } from '../../../util/textFormat';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\n\ntype OwnProps = {\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCover: FC = ({ stickerSet, observeIntersection }) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaData = useMedia(stickerSet.hasThumbnail && `stickerSet${stickerSet.id}`, !isIntersecting);\n const transitionClassNames = useMediaTransition(mediaData);\n const isGif = stickerSet.isGifs;\n\n const firstLetters = useMemo(() => {\n if ((isGif && !IS_WEBM_SUPPORTED) || !mediaData) return getFirstLetters(stickerSet.title, 2);\n }, [isGif, mediaData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {isGif ? (\n
\n );\n};\n\nexport default memo(StickerSetCover);\n","import React, {\n FC, memo,\n} from '../../../lib/teact/teact';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_GENERAL_SETTINGS } from '../../../config';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport useLang from '../../../hooks/useLang';\n\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport StickerSetCoverAnimated from '../../middle/composer/StickerSetCoverAnimated';\nimport StickerSetCover from '../../middle/composer/StickerSetCover';\nimport StickerButton from '../../common/StickerButton';\n\nimport './SettingsStickerSet.scss';\n\ntype OwnProps = {\n stickerSet?: ApiStickerSet;\n observeIntersection: ObserveFn;\n onClick: (value: ApiSticker) => void;\n};\n\nconst SettingsStickerSet: FC = ({\n stickerSet,\n observeIntersection,\n onClick,\n}) => {\n const lang = useLang();\n\n if (!stickerSet || !stickerSet.stickers) {\n return undefined;\n }\n\n const firstSticker = stickerSet.stickers?.[0];\n\n if (stickerSet.hasThumbnail || !firstSticker) {\n return (\n firstSticker && onClick(firstSticker)}\n >\n \n {stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n } else {\n return (\n onClick(firstSticker)}\n >\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n }\n};\n\nexport default memo(SettingsStickerSet);\n","import React, {\n FC, useCallback, memo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ISettings, TimeFormat } from '../../../types';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { IS_IOS, IS_MAC_OS, IS_TOUCH_ENV } from '../../../util/environment';\nimport { pick } from '../../../util/iteratees';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RangeSlider from '../../ui/RangeSlider';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup, { IRadioOption } from '../../ui/RadioGroup';\nimport SettingsStickerSet from './SettingsStickerSet';\nimport StickerSetModal from '../../common/StickerSetModal.async';\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Pick & {\n stickerSetIds?: string[];\n stickerSetsById?: Record;\n defaultReaction?: string;\n };\n\nconst ANIMATION_LEVEL_OPTIONS = [\n 'Solid and Steady',\n 'Nice and Fast',\n 'Lots of Stuff',\n];\n\nconst TIME_FORMAT_OPTIONS: IRadioOption[] = [{\n label: '12-hour',\n value: '12h',\n}, {\n label: '24-hour',\n value: '24h',\n}];\n\nconst SettingsGeneral: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n stickerSetIds,\n stickerSetsById,\n defaultReaction,\n messageTextSize,\n animationLevel,\n messageSendKeyCombo,\n shouldSuggestStickers,\n shouldLoopStickers,\n timeFormat,\n}) => {\n const {\n setSettingOption,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const stickerSettingsRef = useRef(null);\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: stickerSettingsRef });\n const [isModalOpen, openModal, closeModal] = useFlag();\n const [sticker, setSticker] = useState();\n\n const lang = useLang();\n\n const KEYBOARD_SEND_OPTIONS = !IS_TOUCH_ENV ? [\n { value: 'enter', label: lang('lng_settings_send_enter'), subLabel: 'New line by Shift + Enter' },\n {\n value: 'ctrl-enter',\n label: lang(IS_MAC_OS ? 'lng_settings_send_cmdenter' : 'lng_settings_send_ctrlenter'),\n subLabel: 'New line by Enter',\n },\n ] : undefined;\n\n const handleAnimationLevelChange = useCallback((newLevel: number) => {\n ANIMATION_LEVEL_OPTIONS.forEach((_, i) => {\n document.body.classList.toggle(`animation-level-${i}`, newLevel === i);\n });\n\n setSettingOption({ animationLevel: newLevel });\n }, [setSettingOption]);\n\n const handleMessageTextSizeChange = useCallback((newSize: number) => {\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(newSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(newSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${newSize}px`);\n document.documentElement.setAttribute('data-message-text-size', newSize.toString());\n\n setSettingOption({ messageTextSize: newSize });\n }, [setSettingOption]);\n\n const handleTimeFormatChange = useCallback((newTimeFormat: string) => {\n setSettingOption({ timeFormat: newTimeFormat });\n setSettingOption({ wasTimeFormatSetManually: true });\n\n setTimeFormat(newTimeFormat as TimeFormat);\n }, [setSettingOption]);\n\n const handleStickerSetClick = useCallback((value: ApiSticker) => {\n setSticker(value);\n openModal();\n }, [openModal]);\n\n const stickerSets = stickerSetIds && stickerSetIds.map((id: string) => {\n return stickerSetsById?.[id]?.installedDate ? stickerSetsById[id] : false;\n }).filter(Boolean as any);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n return (\n
\n
\n

{lang('SETTINGS')}

\n\n \n\n onScreenSelect(SettingsScreens.GeneralChatBackground)}\n >\n {lang('ChatBackground')}\n \n
\n\n
\n

\n Time Format\n

\n \n
\n\n
\n

\n Animation Level\n

\n

\n Choose the desired animations amount.\n

\n\n \n
\n\n {KEYBOARD_SEND_OPTIONS && (\n
\n

{lang('VoiceOver.Keyboard')}

\n\n setSettingOption({ messageSendKeyCombo: value })}\n selected={messageSendKeyCombo}\n />\n
\n )}\n\n
\n

{lang('AccDescrStickers')}

\n\n {defaultReaction && (\n onScreenSelect(SettingsScreens.QuickReaction)}\n >\n \n
{lang('DoubleTapSetting')}
\n \n )}\n\n setSettingOption({ shouldSuggestStickers: isChecked })}\n />\n setSettingOption({ shouldLoopStickers: isChecked })}\n />\n\n
\n {stickerSets && stickerSets.map((stickerSet: ApiStickerSet) => (\n \n ))}\n
\n {sticker && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n ...pick(global.settings.byKey, [\n 'messageTextSize',\n 'animationLevel',\n 'messageSendKeyCombo',\n 'shouldSuggestStickers',\n 'shouldLoopStickers',\n 'isSensitiveEnabled',\n 'canChangeSensitive',\n 'timeFormat',\n ]),\n stickerSetIds: global.stickers.added.setIds,\n stickerSetsById: global.stickers.setsById,\n defaultReaction: global.appConfig?.defaultReaction,\n };\n },\n)(SettingsGeneral));\n","let fileSelector: HTMLInputElement;\n\nexport function openSystemFilesDialog(accept = '*', callback: (e: Event) => void, noMultiple = false) {\n if (!fileSelector) {\n fileSelector = document.createElement('input');\n fileSelector.setAttribute('type', 'file');\n }\n\n fileSelector.setAttribute('accept', accept);\n\n if (noMultiple) {\n fileSelector.removeAttribute('multiple');\n } else {\n fileSelector.setAttribute('multiple', 'multiple');\n }\n\n // eslint-disable-next-line no-null/no-null\n fileSelector.onchange = null;\n fileSelector.value = '';\n fileSelector.onchange = callback;\n\n fileSelector.click();\n}\n","/* eslint-disable eqeqeq */\n/* eslint-disable prefer-template */\n/* eslint-disable prefer-const */\n/* eslint-disable prefer-destructuring */\n/* eslint-disable one-var */\n/* eslint-disable one-var-declaration-per-line */\n\nimport { preloadImage } from './files';\n\n/**\n * HEX > RGB\n * input: 'xxxxxx' (ex. 'ed15fa') case-insensitive\n * output: [r, g, b] ([0-255, 0-255, 0-255])\n */\nexport function hex2rgb(param: string): [number, number, number] {\n return [\n parseInt(param.substring(0, 2), 16),\n parseInt(param.substring(2, 4), 16),\n parseInt(param.substring(4, 6), 16),\n ];\n}\n\n/**\n * RGB > HEX\n * input: [r, g, b] ([0-255, 0-255, 0-255])\n * output: 'xxxxxx' (ex. 'ff0000')\n */\nexport function rgb2hex(param: [number, number, number]) {\n const p0 = param[0].toString(16);\n const p1 = param[1].toString(16);\n const p2 = param[2].toString(16);\n return (p0.length == 1 ? '0' + p0 : p0) + (p1.length == 1 ? '0' + p1 : p1) + (p2.length == 1 ? '0' + p2 : p2);\n}\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nexport function rgb2hsb([r, g, b]: [number, number, number]): [number, number, number] {\n r /= 255;\n g /= 255;\n b /= 255;\n\n let max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h!: number, s: number, v: number = max;\n\n let d = max - min;\n s = max == 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, v];\n}\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nexport function hsb2rgb([h, s, v]: [number, number, number]): [number, number, number] {\n let r!: number, g!: number, b!: number;\n\n let i = Math.floor(h * 6);\n let f = h * 6 - i;\n let p = v * (1 - s);\n let q = v * (1 - f * s);\n let t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n ];\n}\n\nexport async function getAverageColor(url: string): Promise<[number, number, number]> {\n // Only visit every 5 pixels\n const blockSize = 5;\n const defaultRGB: [number, number, number] = [0, 0, 0];\n let data;\n let width;\n let height;\n let i = -4;\n let length;\n let rgb: [number, number, number] = [0, 0, 0];\n let count = 0;\n\n const canvas = document.createElement('canvas');\n const context = canvas.getContext && canvas.getContext('2d');\n if (!context) {\n return defaultRGB;\n }\n\n const image = await preloadImage(url);\n height = image.naturalHeight || image.offsetHeight || image.height;\n width = image.naturalWidth || image.offsetWidth || image.width;\n canvas.height = height;\n canvas.width = width;\n\n context.drawImage(image, 0, 0);\n\n try {\n data = context.getImageData(0, 0, width, height);\n } catch (e) {\n return defaultRGB;\n }\n\n length = data.data.length;\n\n // eslint-disable-next-line no-cond-assign\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb[0] += data.data[i];\n rgb[1] += data.data[i + 1];\n rgb[2] += data.data[i + 2];\n }\n\n rgb[0] = Math.floor(rgb[0] / count);\n rgb[1] = Math.floor(rgb[1] / count);\n rgb[2] = Math.floor(rgb[2] / count);\n\n return rgb;\n}\n\n// eslint-disable-next-line max-len\n// Function was adapted from https://github.com/telegramdesktop/tdesktop/blob/35ff621b5b52f7e3553fb0f990ea13ade7101b8e/Telegram/SourceFiles/data/data_wall_paper.cpp#L518\nexport function getPatternColor(rgbColor: [number, number, number]) {\n let [hue, saturation, value] = rgb2hsb(rgbColor);\n\n saturation = Math.min(1, saturation + 0.05 + 0.1 * (1 - saturation));\n value = value > 0.5\n ? Math.max(0, value * 0.65)\n : Math.max(0, Math.min(1, 1 - value * 0.65));\n\n return `hsla(${hue * 360}, ${saturation * 100}%, ${value * 100}%, .4)`;\n}\n","import React, {\n FC, memo, useCallback, useEffect, useState, useRef,\n} from '../../../lib/teact/teact';\nimport { ApiWallpaper } from '../../../api/types';\nimport { ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\n\nimport { CUSTOM_BG_CACHE_NAME } from '../../../config';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { fetchBlob } from '../../../util/files';\nimport buildClassName from '../../../util/buildClassName';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useCanvasBlur from '../../../hooks/useCanvasBlur';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nimport './WallpaperTile.scss';\n\ntype OwnProps = {\n wallpaper: ApiWallpaper;\n theme: ThemeKey;\n isSelected: boolean;\n onClick: (slug: string) => void;\n};\n\nconst WallpaperTile: FC = ({\n wallpaper,\n theme,\n isSelected,\n onClick,\n}) => {\n const { slug, document } = wallpaper;\n const localMediaHash = `wallpaper${document.id!}`;\n const localBlobUrl = document.previewBlobUrl;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`);\n const thumbRef = useCanvasBlur(document.thumbnail?.dataUri, Boolean(previewBlobUrl), true);\n const { transitionClassNames } = useShowTransition(\n Boolean(previewBlobUrl || localBlobUrl),\n undefined,\n undefined,\n 'slow',\n );\n const [isLoadAllowed, setIsLoadAllowed] = useState(false);\n const {\n mediaData: fullMedia, loadProgress,\n } = useMediaWithLoadProgress(localMediaHash, !isLoadAllowed);\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n const { shouldRender: shouldRenderSpinner, transitionClassNames: spinnerClassNames } = useShowTransition(\n (isLoadAllowed && !fullMedia) || slug === UPLOADING_WALLPAPER_SLUG,\n undefined,\n wasLoadDisabled,\n 'slow',\n );\n // To prevent triggering of the effect for useCallback\n const cacheKeyRef = useRef();\n cacheKeyRef.current = theme;\n\n const handleSelect = useCallback(() => {\n (async () => {\n const blob = await fetchBlob(fullMedia!);\n await cacheApi.save(CUSTOM_BG_CACHE_NAME, cacheKeyRef.current!, blob);\n onClick(slug);\n })();\n }, [fullMedia, onClick, slug]);\n\n useEffect(() => {\n if (fullMedia) {\n handleSelect();\n }\n }, [fullMedia, handleSelect]);\n\n const handleClick = useCallback(() => {\n if (fullMedia) {\n handleSelect();\n } else {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n }\n }, [fullMedia, handleSelect]);\n\n const className = buildClassName(\n 'WallpaperTile',\n isSelected && 'selected',\n );\n\n return (\n
\n
\n \n \n {shouldRenderSpinner && (\n
\n \n
\n )}\n
\n
\n );\n};\n\nexport default memo(WallpaperTile);\n","import React, {\n FC, memo, useEffect, useCallback, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\nimport { ApiWallpaper } from '../../../api/types';\n\nimport { DARK_THEME_PATTERN_COLOR, DEFAULT_PATTERN_COLOR } from '../../../config';\nimport { throttle } from '../../../util/schedulers';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport { getAverageColor, getPatternColor, rgb2hex } from '../../../util/colors';\nimport { selectTheme } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Loading from '../../ui/Loading';\nimport WallpaperTile from './WallpaperTile';\n\nimport './SettingsGeneralBackground.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n background?: string;\n isBlurred?: boolean;\n loadedWallpapers?: ApiWallpaper[];\n theme: ThemeKey;\n};\n\nconst SUPPORTED_TYPES = 'image/jpeg';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n}) => {\n const {\n loadWallpapers,\n uploadWallpaper,\n setThemeSettings,\n } = getDispatch();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadWallpapers();\n });\n }, [loadWallpapers]);\n\n const handleFileSelect = useCallback((e: Event) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n uploadWallpaper(files[0]);\n }\n }, [uploadWallpaper]);\n\n const handleUploadWallpaper = useCallback(() => {\n openSystemFilesDialog(SUPPORTED_TYPES, handleFileSelect, true);\n }, [handleFileSelect]);\n\n const handleSetColor = useCallback(() => {\n onScreenSelect(SettingsScreens.GeneralChatBackgroundColor);\n }, [onScreenSelect]);\n\n const handleResetToDefault = useCallback(() => {\n setThemeSettings({\n theme,\n background: undefined,\n backgroundColor: undefined,\n isBlurred: true,\n patternColor: theme === 'dark' ? DARK_THEME_PATTERN_COLOR : DEFAULT_PATTERN_COLOR,\n });\n }, [setThemeSettings, theme]);\n\n const handleWallPaperSelect = useCallback((slug: string) => {\n setThemeSettings({ theme: themeRef.current, background: slug });\n const currentWallpaper = loadedWallpapers && loadedWallpapers.find((wallpaper) => wallpaper.slug === slug);\n if (currentWallpaper?.document.thumbnail) {\n getAverageColor(currentWallpaper.document.thumbnail.dataUri)\n .then((color) => {\n const patternColor = getPatternColor(color);\n const rgbColor = `#${rgb2hex(color)}`;\n setThemeSettings({ theme: themeRef.current, backgroundColor: rgbColor, patternColor });\n });\n }\n }, [loadedWallpapers, setThemeSettings]);\n\n const handleWallPaperBlurChange = useCallback((e: React.ChangeEvent) => {\n setThemeSettings({ theme: themeRef.current, isBlurred: e.target.checked });\n }, [setThemeSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackground);\n\n const isUploading = loadedWallpapers?.[0] && loadedWallpapers[0].slug === UPLOADING_WALLPAPER_SLUG;\n\n return (\n
\n
\n \n {lang('UploadImage')}\n \n\n \n {lang('SetColor')}\n \n\n \n {lang('ThemeResetToDefaults')}\n \n\n \n
\n\n {loadedWallpapers ? (\n
\n {loadedWallpapers.map((wallpaper) => (\n \n ))}\n
\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, isBlurred } = global.settings.themes[theme] || {};\n const { loadedWallpapers } = global.settings;\n\n return {\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent, MutableRefObject, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ThemeKey } from '../../../types';\n\nimport { pick } from '../../../util/iteratees';\nimport {\n getPatternColor, hex2rgb, hsb2rgb, rgb2hex, rgb2hsb,\n} from '../../../util/colors';\nimport { captureEvents, RealTouchEvent } from '../../../util/captureEvents';\nimport { selectTheme } from '../../../modules/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\n\nimport './SettingsGeneralBackgroundColor.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n backgroundColor?: string;\n theme: ThemeKey;\n};\n\ninterface CanvasRects {\n colorRect: {\n offsetLeft: number;\n top: number;\n width: number;\n height: number;\n };\n hueRect: {\n offsetLeft: number;\n width: number;\n };\n}\n\nconst DEFAULT_HSB = rgb2hsb(hex2rgb('e6ebee'));\nconst PREDEFINED_COLORS = [\n '#e6ebee', '#b2cee1', '#008dd0', '#c6e7cb', '#c4e1a6', '#60b16e',\n '#ccd0af', '#a6a997', '#7a7072', '#fdd7af', '#fdb76e', '#dd8851',\n];\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n theme,\n backgroundColor,\n}) => {\n const { setThemeSettings } = getDispatch();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const colorPickerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const huePickerRef = useRef(null);\n const isFirstRunRef = useRef(true);\n\n const [hsb, setHsb] = useState(getInitialHsb(backgroundColor));\n // Cache for drag handlers\n const hsbRef = useRef(hsb);\n useEffect(() => {\n hsbRef.current = hsb;\n }, [hsb]);\n\n const [isDragging, markIsDragging, unmarkIsDragging] = useFlag();\n const [rgbInput, setRgbInput] = useState('');\n const [hexInput, setHexInput] = useState('');\n\n const rectsRef = useRef();\n const colorCtxRef = useRef();\n\n // Setup: cache rects, subscribe for drag events\n useEffect(() => {\n // We use `offsetLeft` instead of `left` to support screen transition\n const colorRect = {\n offsetLeft: colorPickerRef.current!.offsetLeft,\n ...pick(colorPickerRef.current!.getBoundingClientRect(), ['top', 'width', 'height']),\n };\n const hueRect = {\n offsetLeft: huePickerRef.current!.offsetLeft,\n ...pick(huePickerRef.current!.getBoundingClientRect(), ['width']),\n };\n\n rectsRef.current = { colorRect, hueRect };\n\n function handleColorDrag(e: MouseEvent | RealTouchEvent) {\n const colorPosition = [\n Math.min(Math.max(0, e.pageX! - colorRect.offsetLeft), colorRect.width - 1),\n Math.min(Math.max(0, e.pageY! - colorRect.top + containerRef.current!.scrollTop), colorRect.height - 1),\n ];\n\n const { huePosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(colorPickerRef.current!, {\n onCapture: handleColorDrag,\n onDrag: handleColorDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n\n function handleHueDrag(e: MouseEvent | RealTouchEvent) {\n const { colorPosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n const huePosition = Math.min(Math.max(0, e.pageX! - hueRect.offsetLeft), hueRect.width - 1);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(huePickerRef.current!, {\n onCapture: handleHueDrag,\n onDrag: handleHueDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n }, [markIsDragging, unmarkIsDragging]);\n\n const { colorPosition = [0, 0], huePosition = 0 } = rectsRef.current ? hsb2positions(hsb, rectsRef.current) : {};\n const hex = rgb2hex(hsb2rgb(hsb));\n const hue = hsb[0];\n const hueHex = rgb2hex(hsb2rgb([hue, 1, 1]));\n\n // Save value and update inputs when HSL changes\n useEffect(() => {\n const rgb = hsb2rgb(hsb);\n const color = `#${rgb2hex(rgb)}`;\n\n setRgbInput(rgb.join(', '));\n setHexInput(color);\n\n if (!isFirstRunRef.current) {\n const patternColor = getPatternColor(rgb);\n setThemeSettings({\n theme: themeRef.current,\n background: undefined,\n backgroundColor: color,\n patternColor,\n });\n }\n isFirstRunRef.current = false;\n }, [hsb, setThemeSettings]);\n\n // Redraw color picker when hue changes\n useEffect(() => {\n drawColor(colorPickerRef.current!.firstChild as HTMLCanvasElement, hue, colorCtxRef, rectsRef);\n }, [hue]);\n\n // Initially draw hue picker\n useEffect(() => {\n drawHue(huePickerRef.current!.firstChild as HTMLCanvasElement);\n }, []);\n\n const handleRgbChange = useCallback((e: ChangeEvent) => {\n const rgbValue = e.currentTarget.value.replace(/[^\\d, ]/g, '').slice(0, 13);\n\n if (rgbValue.match(/^\\d{1,3},\\s?\\d{1,3},\\s?\\d{1,3}$/)) {\n const rgb = rgbValue.split(',').map((channel) => Number(channel.trim())) as [number, number, number];\n setHsb(rgb2hsb(rgb));\n }\n\n e.currentTarget.value = rgbValue;\n }, []);\n\n const handleHexChange = useCallback((e: ChangeEvent) => {\n const hexValue = e.currentTarget.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n\n if (hexValue.match(/^#?[0-9a-fA-F]{6}$/)) {\n setHsb(rgb2hsb(hex2rgb(hexValue.replace('#', ''))));\n }\n\n e.currentTarget.value = hexValue;\n }, []);\n\n const handlePredefinedColorClick = useCallback((e: React.MouseEvent) => {\n setHsb(rgb2hsb(hex2rgb(e.currentTarget.dataset.color!.replace('#', ''))));\n }, []);\n\n const className = buildClassName(\n 'SettingsGeneralBackgroundColor settings-content custom-scroll',\n isDragging && 'is-dragging',\n );\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackgroundColor);\n\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n {PREDEFINED_COLORS.map((color) => (\n \n ))}\n
\n
\n );\n};\n\nfunction getInitialHsb(backgroundColor?: string) {\n return backgroundColor && backgroundColor.startsWith('#')\n ? rgb2hsb(hex2rgb(backgroundColor.replace('#', '')))\n : DEFAULT_HSB;\n}\n\nfunction hsb2positions(hsb: [number, number, number], rects: CanvasRects) {\n return {\n colorPosition: [\n Math.round((hsb[1]) * (rects.colorRect.width - 1)),\n Math.round((1 - hsb[2]) * (rects.colorRect.height - 1)),\n ],\n huePosition: Math.round(hsb[0] * (rects.hueRect.width - 1)),\n };\n}\n\nfunction positions2hsb(\n { colorPosition, huePosition }: { colorPosition: number[]; huePosition: number },\n rects: CanvasRects,\n): [number, number, number] {\n return [\n huePosition / (rects.hueRect.width - 1),\n colorPosition[0] / (rects.colorRect.width - 1),\n 1 - colorPosition[1] / (rects.colorRect.height - 1),\n ];\n}\n\nfunction drawColor(\n canvas: HTMLCanvasElement,\n hue: number,\n colorCtxRef: MutableRefObject,\n rectsRef: RefObject,\n) {\n let w: number;\n let h: number;\n let ctx: CanvasRenderingContext2D;\n\n if (!colorCtxRef.current || !rectsRef.current) {\n // First run\n w = canvas.offsetWidth;\n h = canvas.offsetHeight;\n ctx = canvas.getContext('2d')!;\n\n canvas.width = w;\n canvas.height = h;\n\n colorCtxRef.current = ctx;\n } else {\n w = rectsRef.current.colorRect.width;\n h = rectsRef.current.colorRect.height;\n ctx = colorCtxRef.current;\n }\n\n const imgData = ctx!.createImageData(w, h);\n const pixels = imgData.data;\n const col = hsb2rgb([hue, 1, 1]);\n\n let index = 0;\n\n for (let y = 0; y < h; y++) {\n const perY = 1 - y / (h - 1);\n const st = [255 * perY, 255 * perY, 255 * perY];\n const ed = [col[0] * perY, col[1] * perY, col[2] * perY];\n for (let x = 0; x < w; x++) {\n const perX = x / (w - 1);\n pixels[index++] = st[0] + (ed[0] - st[0]) * perX;\n pixels[index++] = st[1] + (ed[1] - st[1]) * perX;\n pixels[index++] = st[2] + (ed[2] - st[2]) * perX;\n pixels[index++] = 255;\n }\n }\n\n ctx!.putImageData(imgData, 0, 0);\n}\n\nfunction drawHue(canvas: HTMLCanvasElement) {\n const w = canvas.offsetWidth;\n const h = 1;\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext('2d')!;\n\n const imgData = ctx.createImageData(w, h);\n const pixels = imgData.data;\n\n let index = 0;\n\n for (let x = 0; x < w; x++) {\n const hue = x / (w - 1);\n const rgb = hsb2rgb([hue, 1, 1]);\n /* eslint-disable prefer-destructuring */\n pixels[index++] = rgb[0];\n pixels[index++] = rgb[1];\n pixels[index++] = rgb[2];\n /* eslint-enable prefer-destructuring */\n pixels[index++] = 255;\n }\n\n ctx.putImageData(imgData, 0, 0);\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { backgroundColor } = global.settings.themes[theme] || {};\n return {\n backgroundColor,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent } from 'react';\nimport useDebounce from '../../../hooks/useDebounce';\nimport React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { playNotifySound } from '../../../util/notifications';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPrivateChatsNotifications: boolean;\n hasPrivateChatsMessagePreview: boolean;\n hasGroupNotifications: boolean;\n hasGroupMessagePreview: boolean;\n hasBroadcastNotifications: boolean;\n hasBroadcastMessagePreview: boolean;\n hasContactJoinedNotifications: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nconst SettingsNotifications: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPrivateChatsNotifications,\n hasPrivateChatsMessagePreview,\n hasGroupNotifications,\n hasGroupMessagePreview,\n hasBroadcastNotifications,\n hasBroadcastMessagePreview,\n hasContactJoinedNotifications,\n hasPushNotifications,\n hasWebNotifications,\n notificationSoundVolume,\n}) => {\n const {\n loadNotificationSettings,\n updateContactSignUpNotification,\n updateNotificationSettings,\n updateWebNotificationSettings,\n } = getDispatch();\n\n useEffect(() => {\n loadNotificationSettings();\n }, [loadNotificationSettings]);\n\n const runDebounced = useDebounce(500, true);\n\n const handleSettingsChange = useCallback((\n e: ChangeEvent,\n peerType: 'contact' | 'group' | 'broadcast',\n setting: 'silent' | 'showPreviews',\n ) => {\n const currentIsSilent = peerType === 'contact'\n ? !hasPrivateChatsNotifications\n : !(peerType === 'group' ? hasGroupNotifications : hasBroadcastNotifications);\n const currentShouldShowPreviews = peerType === 'contact'\n ? hasPrivateChatsMessagePreview\n : (peerType === 'group' ? hasGroupMessagePreview : hasBroadcastMessagePreview);\n\n updateNotificationSettings({\n peerType,\n ...(setting === 'silent' && { isSilent: !e.target.checked, shouldShowPreviews: currentShouldShowPreviews }),\n ...(setting === 'showPreviews' && { shouldShowPreviews: e.target.checked, isSilent: currentIsSilent }),\n });\n }, [\n hasBroadcastMessagePreview, hasBroadcastNotifications,\n hasGroupMessagePreview, hasGroupNotifications,\n hasPrivateChatsMessagePreview, hasPrivateChatsNotifications,\n updateNotificationSettings,\n ]);\n\n const handleContactNotificationChange = useCallback((e: ChangeEvent) => {\n updateContactSignUpNotification({\n isSilent: !e.target.checked,\n });\n }, [updateContactSignUpNotification]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Notifications);\n\n return (\n
\n
\n

\n Web notifications\n

\n {\n updateWebNotificationSettings({ hasWebNotifications: e.target.checked });\n }}\n />\n {\n updateWebNotificationSettings({ hasPushNotifications: e.target.checked });\n }}\n />\n
\n {\n updateWebNotificationSettings({ notificationSoundVolume: volume });\n runDebounced(() => playNotifySound(undefined, volume));\n }}\n />\n
\n
\n
\n

\n {lang('AutodownloadPrivateChats')}\n

\n\n {\n handleSettingsChange(e, 'contact', 'silent');\n }}\n />\n {\n handleSettingsChange(e, 'contact', 'showPreviews');\n }}\n />\n
\n\n
\n

{lang('FilterGroups')}

\n\n {\n handleSettingsChange(e, 'group', 'silent');\n }}\n />\n {\n handleSettingsChange(e, 'group', 'showPreviews');\n }}\n />\n
\n\n
\n

{lang('FilterChannels')}

\n\n {\n handleSettingsChange(e, 'broadcast', 'silent');\n }}\n />\n {\n handleSettingsChange(e, 'broadcast', 'showPreviews');\n }}\n />\n
\n\n
\n

{lang('PhoneOther')}

\n\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n hasPrivateChatsNotifications: Boolean(global.settings.byKey.hasPrivateChatsNotifications),\n hasPrivateChatsMessagePreview: Boolean(global.settings.byKey.hasPrivateChatsMessagePreview),\n hasGroupNotifications: Boolean(global.settings.byKey.hasGroupNotifications),\n hasGroupMessagePreview: Boolean(global.settings.byKey.hasGroupMessagePreview),\n hasBroadcastNotifications: Boolean(global.settings.byKey.hasBroadcastNotifications),\n hasBroadcastMessagePreview: Boolean(global.settings.byKey.hasBroadcastMessagePreview),\n hasContactJoinedNotifications: Boolean(global.settings.byKey.hasContactJoinedNotifications),\n hasWebNotifications: global.settings.byKey.hasWebNotifications,\n hasPushNotifications: global.settings.byKey.hasPushNotifications,\n notificationSoundVolume: global.settings.byKey.notificationSoundVolume,\n };\n },\n)(SettingsNotifications));\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { PrivacyVisibility, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPassword?: boolean;\n blockedCount: number;\n sessionsCount: number;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n visibilityPrivacyPhoneNumber?: PrivacyVisibility;\n visibilityPrivacyLastSeen?: PrivacyVisibility;\n visibilityPrivacyProfilePhoto?: PrivacyVisibility;\n visibilityPrivacyForwarding?: PrivacyVisibility;\n visibilityPrivacyGroupChats?: PrivacyVisibility;\n};\n\nconst SettingsPrivacy: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPassword,\n blockedCount,\n sessionsCount,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber,\n visibilityPrivacyLastSeen,\n visibilityPrivacyProfilePhoto,\n visibilityPrivacyForwarding,\n visibilityPrivacyGroupChats,\n\n}) => {\n const {\n loadPrivacySettings,\n loadBlockedContacts,\n loadAuthorizations,\n loadContentSettings,\n updateContentSettings,\n } = getDispatch();\n\n useEffect(() => {\n loadBlockedContacts();\n loadAuthorizations();\n loadPrivacySettings();\n loadContentSettings();\n }, [loadBlockedContacts, loadAuthorizations, loadPrivacySettings, loadContentSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Privacy);\n\n function getVisibilityValue(visibility?: PrivacyVisibility) {\n switch (visibility) {\n case 'everybody':\n return lang('P2PEverybody');\n\n case 'contacts':\n return lang('P2PContacts');\n\n case 'nobody':\n return lang('P2PNobody');\n }\n\n return undefined;\n }\n\n return (\n
\n
\n onScreenSelect(SettingsScreens.PrivacyBlockedUsers)}\n >\n
\n {lang('BlockedUsers')}\n {blockedCount > 0 && (\n \n {lang('Users', blockedCount)}\n \n )}\n
\n \n onScreenSelect(\n hasPassword ? SettingsScreens.TwoFaEnabled : SettingsScreens.TwoFaDisabled,\n )}\n >\n
\n {lang('TwoStepVerification')}\n \n {lang(hasPassword ? 'PasswordOn' : 'PasswordOff')}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyActiveSessions)}\n >\n
\n {lang('SessionsTitle')}\n {sessionsCount > 0 && (\n \n {sessionsCount === 1 ? '1 session' : `${sessionsCount} sessions`}\n \n )}\n
\n \n
\n\n
\n

{lang('PrivacyTitle')}

\n\n onScreenSelect(SettingsScreens.PrivacyPhoneNumber)}\n >\n
\n {lang('PrivacyPhoneTitle')}\n \n {getVisibilityValue(visibilityPrivacyPhoneNumber)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyLastSeen)}\n >\n
\n {lang('LastSeenTitle')}\n \n {getVisibilityValue(visibilityPrivacyLastSeen)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyProfilePhoto)}\n >\n
\n {lang('PrivacyProfilePhotoTitle')}\n \n {getVisibilityValue(visibilityPrivacyProfilePhoto)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyForwarding)}\n >\n
\n {lang('PrivacyForwardsTitle')}\n \n {getVisibilityValue(visibilityPrivacyForwarding)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyGroupChats)}\n >\n
\n {lang('WhoCanAddMe')}\n \n {getVisibilityValue(visibilityPrivacyGroupChats)}\n \n
\n \n
\n\n {canChangeSensitive && (\n
\n

\n {lang('lng_settings_sensitive_title')}\n

\n \n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: {\n byKey: { hasPassword, isSensitiveEnabled, canChangeSensitive },\n privacy,\n },\n blocked,\n activeSessions,\n } = global;\n\n return {\n hasPassword,\n blockedCount: blocked.totalCount,\n sessionsCount: activeSessions.length,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber: privacy.phoneNumber?.visibility,\n visibilityPrivacyLastSeen: privacy.lastSeen?.visibility,\n visibilityPrivacyProfilePhoto: privacy.profilePhoto?.visibility,\n visibilityPrivacyForwarding: privacy.forwards?.visibility,\n visibilityPrivacyGroupChats: privacy.chatInvite?.visibility,\n };\n },\n)(SettingsPrivacy));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ISettings, LangCode, SettingsScreens } from '../../../types';\nimport { ApiLanguage } from '../../../api/types';\n\nimport { setLanguage } from '../../../util/langProvider';\n\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsLanguage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n languages,\n language,\n}) => {\n const {\n loadLanguages,\n setSettingOption,\n } = getDispatch();\n\n const [selectedLanguage, setSelectedLanguage] = useState(language);\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n // TODO Throttle\n useEffect(() => {\n loadLanguages();\n }, [loadLanguages]);\n\n const handleChange = useCallback((langCode: string) => {\n setSelectedLanguage(langCode);\n markIsLoading();\n\n void setLanguage(langCode as LangCode, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: langCode });\n });\n }, [markIsLoading, unmarkIsLoading, setSettingOption]);\n\n const options = useMemo(() => {\n return languages ? buildOptions(languages) : undefined;\n }, [languages]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Language);\n\n return (\n
\n {options ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nfunction buildOptions(languages: ApiLanguage[]) {\n const currentLangCode = (window.navigator.language || 'en').toLowerCase();\n const shortLangCode = currentLangCode.substr(0, 2);\n\n return languages.map(({ langCode, nativeName, name }) => ({\n value: langCode,\n label: nativeName,\n subLabel: name,\n })).sort((a) => {\n return currentLangCode && (a.value === currentLangCode || a.value === shortLangCode) ? -1 : 0;\n });\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n languages: global.settings.byKey.languages,\n language: global.settings.byKey.language,\n };\n },\n)(SettingsLanguage));\n","import { ApiPrivacyKey, SettingsScreens } from '../../../../types';\n\nexport function getPrivacyKey(screen: SettingsScreens): ApiPrivacyKey | undefined {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return 'phoneNumber';\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return 'lastSeen';\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return 'profilePhoto';\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return 'forwards';\n case SettingsScreens.PrivacyGroupChats:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return 'chatInvite';\n }\n\n return undefined;\n}\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport { getPrivacyKey } from './helper/privacy';\n\ntype OwnProps = {\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Partial & {\n chatsById?: Record;\n usersById?: Record;\n };\n\nconst SettingsPrivacyVisibility: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n visibility,\n allowUserIds,\n allowChatIds,\n blockUserIds,\n blockChatIds,\n chatsById,\n}) => {\n const { setPrivacyVisibility } = getDispatch();\n\n const lang = useLang();\n\n const visibilityOptions = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyGroupChats:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n ];\n\n default:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n { value: 'nobody', label: lang('P2PNobody') },\n ];\n }\n }, [lang, screen]);\n\n const exceptionLists = {\n shouldShowDenied: visibility !== 'nobody',\n shouldShowAllowed: visibility !== 'everybody',\n };\n\n const privacyKey = getPrivacyKey(screen);\n\n const headerText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return lang('PrivacyPhoneTitle');\n case SettingsScreens.PrivacyLastSeen:\n return lang('LastSeenTitle');\n case SettingsScreens.PrivacyProfilePhoto:\n return lang('PrivacyProfilePhotoTitle');\n case SettingsScreens.PrivacyForwarding:\n return lang('PrivacyForwardsTitle');\n case SettingsScreens.PrivacyGroupChats:\n return lang('WhoCanAddMe');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const descriptionText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyLastSeen:\n return lang('CustomHelp');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n const allowedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberAllowedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenAllowedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoAllowedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingAllowedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsAllowedContacts;\n }\n })();\n\n const deniedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberDeniedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenDeniedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoDeniedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingDeniedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsDeniedContacts;\n }\n })();\n\n const allowedCount = useMemo(() => {\n if (!allowUserIds || !allowChatIds || !chatsById) {\n return 0;\n }\n\n return allowChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, allowUserIds.length);\n }, [allowChatIds, allowUserIds, chatsById]);\n\n const blockCount = useMemo(() => {\n if (!blockUserIds || !blockChatIds || !chatsById) {\n return 0;\n }\n\n return blockChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, blockUserIds.length);\n }, [blockChatIds, blockUserIds, chatsById]);\n\n const handleVisibilityChange = useCallback((value) => {\n setPrivacyVisibility({\n privacyKey,\n visibility: value,\n });\n }, [privacyKey, setPrivacyVisibility]);\n\n return (\n
\n
\n

{headerText}

\n\n \n\n {descriptionText && (\n

{descriptionText}

\n )}\n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n {exceptionLists.shouldShowAllowed && (\n {\n onScreenSelect(allowedContactsScreen);\n }}\n >\n
\n {allowedCount > 0 && +{allowedCount}}\n {lang('AlwaysShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n {exceptionLists.shouldShowDenied && (\n {\n onScreenSelect(deniedContactsScreen);\n }}\n >\n
\n {blockCount > 0 && −{blockCount}}\n {lang('NeverShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n let privacySettings: ApiPrivacySettings | undefined;\n\n const {\n chats: { byId: chatsById },\n settings: { privacy },\n } = global;\n\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n privacySettings = privacy.phoneNumber;\n break;\n\n case SettingsScreens.PrivacyLastSeen:\n privacySettings = privacy.lastSeen;\n break;\n\n case SettingsScreens.PrivacyProfilePhoto:\n privacySettings = privacy.profilePhoto;\n break;\n\n case SettingsScreens.PrivacyForwarding:\n privacySettings = privacy.forwards;\n break;\n\n case SettingsScreens.PrivacyGroupChats:\n privacySettings = privacy.chatInvite;\n break;\n }\n\n if (!privacySettings) {\n return {};\n }\n\n return {\n ...privacySettings,\n chatsById,\n };\n },\n)(SettingsPrivacyVisibility));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiSession } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n activeSessions: ApiSession[];\n};\n\nconst SettingsPrivacyActiveSessions: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n activeSessions,\n}) => {\n const {\n loadAuthorizations,\n terminateAuthorization,\n terminateAllAuthorizations,\n } = getDispatch();\n\n const [isConfirmTerminateAllDialogOpen, openConfirmTerminateAllDialog, closeConfirmTerminateAllDialog] = useFlag();\n useEffect(() => {\n loadAuthorizations();\n }, [loadAuthorizations]);\n\n const handleTerminateSessionClick = useCallback((hash: string) => {\n terminateAuthorization({ hash });\n }, [terminateAuthorization]);\n\n const handleTerminateAllSessions = useCallback(() => {\n closeConfirmTerminateAllDialog();\n terminateAllAuthorizations();\n }, [closeConfirmTerminateAllDialog, terminateAllAuthorizations]);\n\n const currentSession = useMemo(() => {\n return activeSessions.find((session) => session.isCurrent);\n }, [activeSessions]);\n\n const otherSessions = useMemo(() => {\n return activeSessions.filter((session) => !session.isCurrent);\n }, [activeSessions]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyActiveSessions);\n\n function renderCurrentSession(session: ApiSession) {\n return (\n
\n

\n {lang('AuthSessions.CurrentSession')}\n

\n\n \n
\n {session.appName}\n {getDeviceEnvironment(session)}\n {session.ip} - {getLocation(session)}\n
\n
\n\n \n {lang('TerminateAllSessions')}\n \n
\n );\n }\n\n function renderOtherSessions(sessions: ApiSession[]) {\n return (\n
\n

\n {lang('OtherSessions')}\n

\n\n {sessions.map(renderSession)}\n
\n );\n }\n\n function renderSession(session: ApiSession) {\n return (\n {\n handleTerminateSessionClick(session.hash);\n },\n }]}\n className=\"no-icon\"\n >\n
\n {formatPastTimeShort(lang, session.dateActive * 1000)}\n {session.appName}\n {getDeviceEnvironment(session)}\n {session.ip} - {getLocation(session)}\n
\n \n );\n }\n\n return (\n
\n {currentSession && renderCurrentSession(currentSession)}\n {otherSessions && renderOtherSessions(otherSessions)}\n {otherSessions && (\n \n )}\n
\n );\n};\n\nfunction getLocation(session: ApiSession) {\n return [session.region, session.country].filter(Boolean).join(', ');\n}\n\nfunction getDeviceEnvironment(session: ApiSession) {\n return `${session.deviceModel}${session.deviceModel ? ', ' : ''} ${session.platform} ${session.systemVersion}`;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n activeSessions: global.activeSessions,\n };\n },\n)(SettingsPrivacyActiveSessions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { filterUsersByName, getUserFullName } from '../../../modules/helpers';\nimport { unique } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n blockedIds: string[];\n contactIds?: string[];\n localContactIds?: string[];\n currentUserId?: string;\n};\n\nconst BlockUserModal: FC = ({\n usersById,\n blockedIds,\n contactIds,\n localContactIds,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadContactList,\n setUserSearchQuery,\n blockContact,\n } = getDispatch();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n useEffect(() => {\n setUserSearchQuery({ query: filter });\n }, [filter, setUserSearchQuery]);\n\n const filteredContactIds = useMemo(() => {\n const availableContactIds = unique([\n ...(contactIds || []),\n ...(localContactIds || []),\n ].filter((contactId) => {\n return contactId !== currentUserId && !blockedIds.includes(contactId);\n }));\n\n return filterUsersByName(availableContactIds, usersById, filter)\n .sort((firstId, secondId) => {\n const firstName = getUserFullName(usersById[firstId]) || '';\n const secondName = getUserFullName(usersById[secondId]) || '';\n\n return firstName.localeCompare(secondName);\n });\n }, [blockedIds, contactIds, currentUserId, filter, localContactIds, usersById]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n const { id: contactId, accessHash } = usersById[userId] || {};\n if (!contactId || !accessHash) {\n return;\n }\n blockContact({ contactId, accessHash });\n onClose();\n }, [blockContact, onClose, usersById]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n users: {\n byId: usersById,\n },\n blocked: {\n ids: blockedIds,\n },\n contactList,\n currentUserId,\n } = global;\n\n return {\n usersById,\n blockedIds,\n contactIds: contactList?.userIds,\n localContactIds: global.userSearch.localUserIds,\n currentUserId,\n };\n },\n)(BlockUserModal));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiCountryCode, ApiUser } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { CHAT_HEIGHT_PX } from '../../../config';\nimport { formatPhoneNumberWithCode } from '../../../util/phoneNumber';\nimport {\n getChatTitle, getUserFullName, isUserId,\n} from '../../../modules/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Avatar from '../../common/Avatar';\nimport Loading from '../../ui/Loading';\nimport BlockUserModal from './BlockUserModal';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsByIds: Record;\n usersByIds: Record;\n blockedIds: string[];\n phoneCodeList: ApiCountryCode[];\n};\n\nconst SettingsPrivacyBlockedUsers: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n chatsByIds,\n usersByIds,\n blockedIds,\n phoneCodeList,\n}) => {\n const { unblockContact } = getDispatch();\n\n const lang = useLang();\n const [isBlockUserModalOpen, openBlockUserModal, closeBlockUserModal] = useFlag();\n const handleUnblockClick = useCallback((contactId: string) => {\n unblockContact({ contactId });\n }, [unblockContact]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyBlockedUsers);\n\n function renderContact(contactId: string, i: number, viewportOffset: number) {\n const isPrivate = isUserId(contactId);\n const user = isPrivate ? usersByIds[contactId] : undefined;\n const chat = !isPrivate ? chatsByIds[contactId] : undefined;\n\n const className = buildClassName(\n 'Chat chat-item-clickable blocked-list-item small-icon',\n isPrivate ? 'private' : 'group',\n );\n\n return (\n {\n handleUnblockClick(contactId);\n },\n }]}\n style={`top: ${(viewportOffset + i) * CHAT_HEIGHT_PX}px;`}\n >\n \n
\n

{renderText((isPrivate ? getUserFullName(user) : getChatTitle(lang, chat!)) || '')}

\n {user?.phoneNumber && (\n
{formatPhoneNumberWithCode(phoneCodeList, user.phoneNumber)}
\n )}\n {user && !user.phoneNumber && user.username && (\n
@{user.username}
\n )}\n
\n \n );\n }\n\n return (\n
\n
\n
\n

\n {lang('BlockedUsersInfo')}\n

\n
\n\n
\n {blockedIds?.length ? (\n
\n {blockedIds!.map((contactId, i) => renderContact(contactId, i, 0))}\n
\n ) : blockedIds && !blockedIds.length ? (\n
{lang('NoBlocked')}
\n ) : (\n \n )}\n
\n
\n\n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsByIds,\n },\n users: {\n byId: usersByIds,\n },\n blocked: {\n ids,\n },\n countryList: {\n phoneCodes: phoneCodeList,\n },\n } = global;\n\n return {\n chatsByIds,\n usersByIds,\n blockedIds: ids,\n phoneCodeList,\n };\n },\n)(SettingsPrivacyBlockedUsers));\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaEnabled: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaEnabled);\n\n return (\n
\n
\n \n\n

\n {renderText(lang('EnabledPasswordText'), ['br'])}\n

\n
\n\n
\n onScreenSelect(SettingsScreens.TwoFaChangePasswordCurrent)}\n >\n {lang('ChangePassword')}\n \n onScreenSelect(SettingsScreens.TwoFaTurnOff)}\n >\n {lang('TurnPasswordOff')}\n \n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCurrentPassword)}\n >\n {lang('SetRecoveryEmail')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaEnabled));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport PasswordMonkey from '../../../common/PasswordMonkey';\nimport PasswordForm from '../../../common/PasswordForm';\n\ntype OwnProps = {\n screen: SettingsScreens;\n error?: string;\n isLoading?: boolean;\n expectedPassword?: string;\n placeholder?: string;\n hint?: string;\n submitLabel?: string;\n clearError?: NoneToVoidFunction;\n onSubmit: (password: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst EQUAL_PASSWORD_ERROR = 'Passwords Should Be Equal';\n\nconst SettingsTwoFaPassword: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n error,\n isLoading,\n expectedPassword,\n placeholder = 'Current Password',\n hint,\n submitLabel,\n clearError,\n onSubmit,\n}) => {\n const [validationError, setValidationError] = useState('');\n const [shouldShowPassword, setShouldShowPassword] = useState(false);\n\n const handleSubmit = useCallback((newPassword) => {\n if (expectedPassword && newPassword !== expectedPassword) {\n setValidationError(EQUAL_PASSWORD_ERROR);\n } else {\n onSubmit(newPassword);\n }\n }, [onSubmit, expectedPassword]);\n\n const handleClearError = useCallback(() => {\n if (clearError) {\n clearError();\n }\n setValidationError('');\n }, [clearError]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(SettingsTwoFaPassword);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n onStart: NoneToVoidFunction;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaStart: FC = ({\n isActive, onScreenSelect, onReset, animatedEmoji, onStart,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaDisabled);\n\n return (\n
\n
\n \n\n

\n {lang('SetAdditionalPasswordInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaStart));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useFlag from '../../../../hooks/useFlag';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport Modal from '../../../ui/Modal';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n icon: 'hint' | 'email';\n type?: 'text' | 'email';\n isLoading?: boolean;\n error?: string;\n placeholder: string;\n shouldConfirm?: boolean;\n clearError?: NoneToVoidFunction;\n onSubmit: (value?: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaSkippableForm: FC = ({\n animatedEmoji,\n type = 'text',\n isLoading,\n error,\n placeholder,\n shouldConfirm,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n const [isConfirmShown, markIsConfirmShown, unmarkIsConfirmShown] = useFlag(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n setValue(e.target.value);\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!inputRef.current) {\n return;\n }\n\n onSubmit(value);\n };\n\n const handleSkip = () => {\n onSubmit();\n };\n\n const handleSkipConfirm = () => {\n unmarkIsConfirmShown();\n onSubmit();\n };\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n
\n \n\n {value ? (\n \n ) : (\n \n {lang('YourEmailSkip')}\n \n )}\n \n {shouldConfirm && (\n \n {renderText(lang('YourEmailSkipWarningText'), ['br', 'simple_markdown'])}\n
\n \n {lang('YourEmailSkip')}\n \n \n {lang('Cancel')}\n \n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal((global, { icon }) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, icon === 'email' ? '💌' : '💡'),\n };\n})(SettingsTwoFaSkippableForm));\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaCongratulations: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n const handleClick = () => {\n onScreenSelect(SettingsScreens.Privacy);\n };\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaCongratulations);\n\n return (\n
\n
\n \n\n

\n {lang('TwoStepVerificationPasswordSetInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🥳'),\n };\n})(SettingsTwoFaCongratulations));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n isLoading?: boolean;\n error?: string;\n clearError: NoneToVoidFunction;\n onSubmit: (hint: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n codeLength: number;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaEmailCode: FC = ({\n animatedEmoji,\n codeLength,\n isLoading,\n error,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const handleInputChange = (e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n const newValue = e.target.value.slice(0, codeLength);\n\n if (newValue.length === codeLength) {\n onSubmit(newValue);\n }\n\n setValue(newValue);\n e.target.value = newValue;\n };\n\n return (\n
\n
\n \n
\n\n
\n \n {isLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '💌'),\n codeLength: global.twoFaSettings.waitingEmailCodeLength,\n };\n})(SettingsTwoFaEmailCode));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../../global/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { TwoFaDispatch, TwoFaState } from '../../../../hooks/reducers/useTwoFaReducer';\nimport useLang from '../../../../hooks/useLang';\n\nimport SettingsTwoFaEnabled from './SettingsTwoFaEnabled';\nimport SettingsTwoFaPassword from './SettingsTwoFaPassword';\nimport SettingsTwoFaStart from './SettingsTwoFaStart';\nimport SettingsTwoFaSkippableForm from './SettingsTwoFaSkippableForm';\nimport SettingsTwoFaCongratulations from './SettingsTwoFaCongratulations';\nimport SettingsTwoFaEmailCode from './SettingsTwoFaEmailCode';\n\nexport type OwnProps = {\n state: TwoFaState;\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n dispatch: TwoFaDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = GlobalState['twoFaSettings'];\n\nconst SettingsTwoFa: FC = ({\n currentScreen,\n shownScreen,\n state,\n hint,\n isLoading,\n error,\n waitingEmailCodeLength,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const {\n updatePassword,\n checkPassword,\n clearTwoFaError,\n updateRecoveryEmail,\n provideTwoFaEmailCode,\n clearPassword,\n } = getDispatch();\n\n useEffect(() => {\n if (waitingEmailCodeLength) {\n if (currentScreen === SettingsScreens.TwoFaNewPasswordEmail) {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmailCode);\n } else if (currentScreen === SettingsScreens.TwoFaRecoveryEmail) {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCode);\n }\n }\n }, [currentScreen, onScreenSelect, waitingEmailCodeLength]);\n\n const handleStartWizard = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.TwoFaNewPassword);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPassword = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordHint);\n }, [onScreenSelect]);\n\n const handleNewPasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmail);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updatePassword({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleChangePasswordCurrent = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordNew);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleChangePasswordNew = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaChangePasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleChangePasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordHint);\n }, [onScreenSelect]);\n\n const handleChangePasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n updatePassword({\n ...state,\n hint: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleTurnOff = useCallback((value: string) => {\n clearPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.Privacy);\n },\n });\n }, [clearPassword, onScreenSelect]);\n\n const handleRecoveryEmailCurrentPassword = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmail);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleRecoveryEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updateRecoveryEmail({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updateRecoveryEmail]);\n\n const handleEmailCode = useCallback((code: string) => {\n provideTwoFaEmailCode({ code });\n }, [provideTwoFaEmailCode]);\n\n const lang = useLang();\n\n switch (currentScreen) {\n case SettingsScreens.TwoFaDisabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n return (\n \n );\n\n case SettingsScreens.TwoFaCongratulations:\n return (\n \n );\n\n case SettingsScreens.TwoFaEnabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordCurrent:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordNew:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaTurnOff:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({ ...global.twoFaSettings }),\n)(SettingsTwoFa));\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../config';\nimport { unique } from '../../../util/iteratees';\nimport { filterChatsByName, isChatGroup, isUserId } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../hooks/useFolderManager';\nimport { getPrivacyKey } from './helper/privacy';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\nexport type OwnProps = {\n isAllowList?: boolean;\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n settings?: ApiPrivacySettings;\n};\n\nconst SettingsPrivacyVisibilityExceptionList: FC = ({\n isAllowList,\n screen,\n isActive,\n onScreenSelect,\n onReset,\n currentUserId,\n settings,\n}) => {\n const { setPrivacySettings } = getDispatch();\n\n const lang = useLang();\n\n const selectedContactIds = useMemo(() => {\n if (!settings) {\n return [];\n }\n\n if (isAllowList) {\n return [...settings.allowUserIds, ...settings.allowChatIds];\n } else {\n return [...settings.blockUserIds, ...settings.blockChatIds];\n }\n }, [isAllowList, settings]);\n const [searchQuery, setSearchQuery] = useState('');\n const [isSubmitShown, setIsSubmitShown] = useState(false);\n const [newSelectedContactIds, setNewSelectedContactIds] = useState(selectedContactIds);\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = unique([...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []])\n .filter((chatId) => {\n const chat = chatsById[chatId];\n return chat && ((isUserId(chat.id) && chat.id !== currentUserId) || isChatGroup(chat));\n });\n\n return unique([\n ...selectedContactIds,\n ...filterChatsByName(lang, chatIds, chatsById, searchQuery),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedContactIds, lang, searchQuery, currentUserId]);\n\n const handleSelectedContactIdsChange = useCallback((value: string[]) => {\n setNewSelectedContactIds(value);\n setIsSubmitShown(true);\n }, []);\n\n const handleSubmit = useCallback(() => {\n setPrivacySettings({\n privacyKey: getPrivacyKey(screen),\n isAllowList: Boolean(isAllowList),\n contactsIds: newSelectedContactIds,\n });\n\n onScreenSelect(SettingsScreens.Privacy);\n }, [isAllowList, newSelectedContactIds, onScreenSelect, screen, setPrivacySettings]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n \n\n \n \n \n
\n );\n};\n\nfunction getCurrentPrivacySettings(global: GlobalState, screen: SettingsScreens) {\n const { privacy } = global.settings;\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return privacy.phoneNumber;\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return privacy.lastSeen;\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return privacy.profilePhoto;\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return privacy.forwards;\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return privacy.chatInvite;\n }\n\n return undefined;\n}\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n return {\n currentUserId: global.currentUserId,\n settings: getCurrentPrivacySettings(global, screen),\n };\n },\n)(SettingsPrivacyVisibilityExceptionList));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport RadioGroup from '../../ui/RadioGroup';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n selectedReaction?: string;\n};\n\nconst SettingsQuickReaction: FC = ({\n isActive,\n onReset,\n onScreenSelect,\n availableReactions,\n selectedReaction,\n}) => {\n const { setDefaultReaction } = getDispatch();\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const options = availableReactions?.filter((l) => !l.isInactive).map((l) => {\n return {\n label: <>{l.title},\n value: l.reaction,\n };\n }) || [];\n\n const handleChange = useCallback((reaction: string) => {\n setDefaultReaction({ reaction });\n }, [setDefaultReaction]);\n\n return (\n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global) => {\n const { availableReactions, appConfig } = global;\n\n return {\n availableReactions,\n selectedReaction: appConfig?.defaultReaction,\n };\n },\n)(SettingsQuickReaction));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch, FoldersState } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\nimport useTwoFaReducer from '../../../hooks/reducers/useTwoFaReducer';\n\nimport Transition from '../../ui/Transition';\nimport SettingsHeader from './SettingsHeader';\nimport SettingsMain from './SettingsMain';\nimport SettingsEditProfile from './SettingsEditProfile';\nimport SettingsDataStorage from './SettingsDataStorage';\nimport SettingsFolders from './folders/SettingsFolders';\nimport SettingsGeneral from './SettingsGeneral';\nimport SettingsGeneralBackground from './SettingsGeneralBackground';\nimport SettingsGeneralBackgroundColor from './SettingsGeneralBackgroundColor';\nimport SettingsNotifications from './SettingsNotifications';\nimport SettingsPrivacy from './SettingsPrivacy';\nimport SettingsLanguage from './SettingsLanguage';\nimport SettingsPrivacyVisibility from './SettingsPrivacyVisibility';\nimport SettingsPrivacyActiveSessions from './SettingsPrivacyActiveSessions';\nimport SettingsPrivacyBlockedUsers from './SettingsPrivacyBlockedUsers';\nimport SettingsTwoFa from './twoFa/SettingsTwoFa';\nimport SettingsPrivacyVisibilityExceptionList from './SettingsPrivacyVisibilityExceptionList';\nimport SettingsQuickReaction from './SettingsQuickReaction';\n\nimport './Settings.scss';\n\nconst TRANSITION_RENDER_COUNT = Object.keys(SettingsScreens).length / 2;\nconst TRANSITION_DURATION = 200;\n\nconst TWO_FA_SCREENS = [\n SettingsScreens.TwoFaDisabled,\n SettingsScreens.TwoFaNewPassword,\n SettingsScreens.TwoFaNewPasswordConfirm,\n SettingsScreens.TwoFaNewPasswordHint,\n SettingsScreens.TwoFaNewPasswordEmail,\n SettingsScreens.TwoFaNewPasswordEmailCode,\n SettingsScreens.TwoFaCongratulations,\n SettingsScreens.TwoFaEnabled,\n SettingsScreens.TwoFaChangePasswordCurrent,\n SettingsScreens.TwoFaChangePasswordNew,\n SettingsScreens.TwoFaChangePasswordConfirm,\n SettingsScreens.TwoFaChangePasswordHint,\n SettingsScreens.TwoFaTurnOff,\n SettingsScreens.TwoFaRecoveryEmailCurrentPassword,\n SettingsScreens.TwoFaRecoveryEmail,\n SettingsScreens.TwoFaRecoveryEmailCode,\n];\n\nconst FOLDERS_SCREENS = [\n SettingsScreens.Folders,\n SettingsScreens.FoldersCreateFolder,\n SettingsScreens.FoldersEditFolder,\n SettingsScreens.FoldersEditFolderFromChatList,\n SettingsScreens.FoldersIncludedChats,\n SettingsScreens.FoldersIncludedChatsFromChatList,\n SettingsScreens.FoldersExcludedChats,\n SettingsScreens.FoldersExcludedChatsFromChatList,\n];\n\nconst PRIVACY_SCREENS = [\n SettingsScreens.PrivacyBlockedUsers,\n SettingsScreens.PrivacyActiveSessions,\n];\n\nconst PRIVACY_PHONE_NUMBER_SCREENS = [\n SettingsScreens.PrivacyPhoneNumberAllowedContacts,\n SettingsScreens.PrivacyPhoneNumberDeniedContacts,\n];\n\nconst PRIVACY_LAST_SEEN_PHONE_SCREENS = [\n SettingsScreens.PrivacyLastSeenAllowedContacts,\n SettingsScreens.PrivacyLastSeenDeniedContacts,\n];\n\nconst PRIVACY_PROFILE_PHOTO_SCREENS = [\n SettingsScreens.PrivacyProfilePhotoAllowedContacts,\n SettingsScreens.PrivacyProfilePhotoDeniedContacts,\n];\n\nconst PRIVACY_FORWARDING_SCREENS = [\n SettingsScreens.PrivacyForwardingAllowedContacts,\n SettingsScreens.PrivacyForwardingDeniedContacts,\n];\n\nconst PRIVACY_GROUP_CHATS_SCREENS = [\n SettingsScreens.PrivacyGroupChatsAllowedContacts,\n SettingsScreens.PrivacyGroupChatsDeniedContacts,\n];\n\nexport type OwnProps = {\n isActive: boolean;\n currentScreen: SettingsScreens;\n foldersState: FoldersState;\n foldersDispatch: FolderEditDispatch;\n onScreenSelect: (screen: SettingsScreens) => void;\n shouldSkipTransition?: boolean;\n onReset: () => void;\n};\n\nconst Settings: FC = ({\n isActive,\n currentScreen,\n foldersState,\n foldersDispatch,\n onScreenSelect,\n onReset,\n shouldSkipTransition,\n}) => {\n const [twoFaState, twoFaDispatch] = useTwoFaReducer();\n\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n foldersDispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (foldersState.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n foldersState.mode, foldersDispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleSaveFilter = useCallback(() => {\n foldersDispatch({ type: 'saveFilters' });\n handleReset();\n }, [foldersDispatch, handleReset]);\n\n function renderCurrentSectionContent(isScreenActive: boolean, screen: SettingsScreens) {\n const privacyAllowScreens: Record = {\n [SettingsScreens.PrivacyPhoneNumber]: PRIVACY_PHONE_NUMBER_SCREENS.includes(screen),\n [SettingsScreens.PrivacyLastSeen]: PRIVACY_LAST_SEEN_PHONE_SCREENS.includes(screen),\n [SettingsScreens.PrivacyProfilePhoto]: PRIVACY_PROFILE_PHOTO_SCREENS.includes(screen),\n [SettingsScreens.PrivacyForwarding]: PRIVACY_FORWARDING_SCREENS.includes(screen),\n [SettingsScreens.PrivacyGroupChats]: PRIVACY_GROUP_CHATS_SCREENS.includes(screen),\n };\n\n const isTwoFaScreen = TWO_FA_SCREENS.includes(screen);\n const isFoldersScreen = FOLDERS_SCREENS.includes(screen);\n const isPrivacyScreen = PRIVACY_SCREENS.includes(screen)\n || isTwoFaScreen\n || Object.keys(privacyAllowScreens).includes(screen.toString())\n || Object.values(privacyAllowScreens).find((key) => key === true);\n\n switch (currentScreen) {\n case SettingsScreens.Main:\n return (\n \n );\n case SettingsScreens.EditProfile:\n return (\n \n );\n case SettingsScreens.General:\n return (\n \n );\n case SettingsScreens.QuickReaction:\n return (\n \n );\n case SettingsScreens.Notifications:\n return (\n \n );\n case SettingsScreens.DataStorage:\n return (\n \n );\n case SettingsScreens.Privacy:\n return (\n \n );\n case SettingsScreens.Language:\n return (\n \n );\n case SettingsScreens.GeneralChatBackground:\n return (\n \n );\n case SettingsScreens.GeneralChatBackgroundColor:\n return (\n \n );\n case SettingsScreens.PrivacyActiveSessions:\n return (\n \n );\n case SettingsScreens.PrivacyBlockedUsers:\n return (\n \n );\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyGroupChats:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return (\n \n );\n\n case SettingsScreens.Folders:\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaNewPasswordConfirm:\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaCongratulations:\n case SettingsScreens.TwoFaEnabled:\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n case SettingsScreens.TwoFaChangePasswordHint:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n case SettingsScreens.TwoFaRecoveryEmail:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n }\n\n function renderCurrentSection(isScreenActive: boolean, isFrom: boolean, currentKey: SettingsScreens) {\n return (\n <>\n \n {renderCurrentSectionContent(isScreenActive, currentKey)}\n \n );\n }\n\n return (\n \n {renderCurrentSection}\n \n );\n};\n\nexport default memo(Settings);\n","import React, {\n FC, useEffect, useCallback, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser, ApiUserStatus } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, sortUserIds } from '../../../modules/helpers';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport ListItem from '../../ui/ListItem';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n filter: string;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n contactIds?: string[];\n serverTimeOffset: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst ContactList: FC = ({\n isActive,\n filter,\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset,\n onReset,\n}) => {\n const {\n loadContactList,\n openChat,\n } = getDispatch();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n useHistoryBack(isActive, onReset);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n }, [openChat]);\n\n const listIds = useMemo(() => {\n if (!contactIds) {\n return undefined;\n }\n\n const filteredIds = filterUsersByName(contactIds, usersById, filter);\n\n return sortUserIds(filteredIds, usersById, userStatusesById, undefined, serverTimeOffset);\n }, [contactIds, filter, usersById, userStatusesById, serverTimeOffset]);\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, listIds, Boolean(filter));\n\n return (\n \n {viewportIds?.length ? (\n viewportIds.map((id) => (\n handleClick(id)}\n ripple={!IS_SINGLE_COLUMN_LAYOUT}\n >\n \n \n ))\n ) : viewportIds && !viewportIds.length ? (\n

\n {filter.length ? 'No contacts matched your search.' : 'Contact list is empty.'}\n

\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: contactIds } = global.contactList || {};\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n\n return {\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ContactList));\n","import React, {\n FC, useCallback, useEffect, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { unique } from '../../../util/iteratees';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, isUserBot, sortChatIds } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Button from '../../ui/Button';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n selectedMemberIds: string[];\n onSelectedMemberIdsChange: (ids: string[]) => void;\n onNextStep: () => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsById: Record;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst NewChatStep1: FC = ({\n isChannel,\n isActive,\n selectedMemberIds,\n onSelectedMemberIdsChange,\n onNextStep,\n onReset,\n chatsById,\n localContactIds,\n searchQuery,\n isSearching,\n localUserIds,\n globalUserIds,\n}) => {\n const {\n loadContactList,\n setGlobalSearchQuery,\n } = getDispatch();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const handleFilterChange = useCallback((query: string) => {\n setGlobalSearchQuery({ query });\n }, [setGlobalSearchQuery]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : [];\n\n return sortChatIds(\n unique([\n ...foundContactIds,\n ...(localUserIds || []),\n ...(globalUserIds || []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return !user.isSelf && (user.canBeInvitedToGroup || !isUserBot(user));\n }),\n chatsById,\n false,\n selectedMemberIds,\n );\n }, [localContactIds, chatsById, searchQuery, localUserIds, globalUserIds, selectedMemberIds]);\n\n const handleNextStep = useCallback(() => {\n if (selectedMemberIds.length || isChannel) {\n setGlobalSearchQuery({ query: '' });\n onNextStep();\n }\n }, [selectedMemberIds.length, isChannel, setGlobalSearchQuery, onNextStep]);\n\n return (\n
\n
\n \n \n \n

{lang('GroupAddMembers')}

\n
\n
\n \n\n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: localContactIds } = global.contactList || {};\n const { byId: chatsById } = global.chats;\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalResults,\n localResults,\n } = global.globalSearch;\n const { userIds: globalUserIds } = globalResults || {};\n const { userIds: localUserIds } = localResults || {};\n\n return {\n chatsById,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus?.chats,\n globalUserIds,\n localUserIds,\n };\n },\n)(NewChatStep1));\n","import React, {\n FC, useState, useCallback, useEffect, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ChatCreationProgress } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport Button from '../../ui/Button';\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n memberIds: string[];\n onReset: (forceReturnToChatList?: boolean) => void;\n};\n\ntype StateProps = {\n creationProgress?: ChatCreationProgress;\n creationError?: string;\n};\n\n// TODO @implement\nconst MAX_USERS_FOR_LEGACY_CHAT = 199; // Accounting for current user\n\nconst NewChatStep2: FC = ({\n isChannel,\n isActive,\n memberIds,\n onReset,\n creationProgress,\n creationError,\n}) => {\n const {\n createGroupChat,\n createChannel,\n } = getDispatch();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const [title, setTitle] = useState('');\n const [about, setAbout] = useState('');\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n\n const chatTitleEmptyError = 'Chat title can\\'t be empty';\n const channelTitleEmptyError = 'Channel title can\\'t be empty';\n const chatTooManyUsersError = 'Sorry, creating supergroups is not yet supported';\n\n const isLoading = creationProgress === ChatCreationProgress.InProgress;\n\n const handleTitleChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n const newValue = value.replace(/^\\s+/, '');\n\n setTitle(newValue);\n\n if (newValue !== value) {\n e.currentTarget.value = newValue;\n }\n }, []);\n\n const handleDescriptionChange = useCallback((e: React.ChangeEvent) => {\n setAbout(e.currentTarget.value);\n }, []);\n\n const handleCreateGroup = useCallback(() => {\n if (!title.length) {\n setError(chatTitleEmptyError);\n return;\n }\n\n if (memberIds.length > MAX_USERS_FOR_LEGACY_CHAT) {\n setError(chatTooManyUsersError);\n return;\n }\n\n createGroupChat({\n title,\n photo,\n memberIds,\n });\n }, [title, memberIds, createGroupChat, photo, chatTitleEmptyError, chatTooManyUsersError]);\n\n const handleCreateChannel = useCallback(() => {\n if (!title.length) {\n setError(channelTitleEmptyError);\n return;\n }\n\n createChannel({\n title,\n about,\n photo,\n memberIds,\n });\n }, [title, createChannel, about, photo, memberIds, channelTitleEmptyError]);\n\n useEffect(() => {\n if (creationProgress === ChatCreationProgress.Complete) {\n onReset(true);\n }\n }, [creationProgress, onReset]);\n\n const renderedError = (creationError && lang(creationError)) || (\n error !== chatTitleEmptyError && error !== channelTitleEmptyError\n ? error\n : undefined\n );\n\n return (\n
\n
\n onReset()}\n ariaLabel=\"Return to member selection\"\n >\n \n \n

{lang(isChannel ? 'NewChannel' : 'NewGroup')}

\n
\n
\n \n \n {isChannel && (\n <>\n \n

{lang('DescriptionInfo')}

\n \n )}\n\n {renderedError && (\n

{renderedError}

\n )}\n\n {memberIds.length > 0 && (\n <>\n

{lang('GroupInfo.ParticipantCount', memberIds.length, 'i')}

\n\n
\n {memberIds.map((id) => (\n \n \n \n ))}\n
\n \n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n progress: creationProgress,\n error: creationError,\n } = global.chatCreation || {};\n\n return {\n creationProgress,\n creationError,\n };\n },\n)(NewChatStep2));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\n\nimport { LeftColumnContent } from '../../../types';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\n\nimport Transition from '../../ui/Transition';\nimport NewChatStep1 from './NewChatStep1';\nimport NewChatStep2 from './NewChatStep2';\n\nimport './NewChat.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n isChannel?: boolean;\n content: LeftColumnContent;\n onContentChange: (content: LeftColumnContent) => void;\n onReset: () => void;\n};\n\nconst RENDER_COUNT = Object.keys(LeftColumnContent).length / 2;\n\nconst NewChat: FC = ({\n isActive,\n isChannel = false,\n content,\n onContentChange,\n onReset,\n}) => {\n const [newChatMemberIds, setNewChatMemberIds] = useState([]);\n\n const handleNextStep = useCallback(() => {\n onContentChange(isChannel ? LeftColumnContent.NewChannelStep2 : LeftColumnContent.NewGroupStep2);\n }, [isChannel, onContentChange]);\n\n return (\n \n {(isStepActive) => {\n switch (content) {\n case LeftColumnContent.NewChannelStep1:\n case LeftColumnContent.NewGroupStep1:\n return (\n \n );\n case LeftColumnContent.NewChannelStep2:\n case LeftColumnContent.NewGroupStep2:\n return (\n \n );\n default:\n return undefined;\n }\n }}\n \n );\n};\n\nexport default memo(NewChat);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from '../ui/Button';\nimport ChatList from './main/ChatList';\nimport { LeftColumnContent } from '../../types';\n\nimport './ArchivedChats.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n onReset: () => void;\n onContentChange: (content: LeftColumnContent) => void;\n};\n\nconst ArchivedChats: FC = ({ isActive, onReset, onContentChange }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onContentChange, LeftColumnContent.Archived);\n\n return (\n
\n
\n \n \n \n

{lang('ArchivedChats')}

\n
\n \n
\n );\n};\n\nexport default memo(ArchivedChats);\n","import React, {\n FC, useCallback, memo, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChatFolder } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport CheckboxGroup from '../ui/CheckboxGroup';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n};\n\ntype StateProps = {\n foldersById?: Record;\n folderOrderedIds?: number[];\n};\n\nconst ChatFolderModal: FC = ({\n isOpen,\n chatId,\n foldersById,\n folderOrderedIds,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const { editChatFolders } = getDispatch();\n\n const lang = useLang();\n\n const initialSelectedFolderIds = useMemo(() => {\n if (!foldersById) {\n return [];\n }\n\n return Object.keys(foldersById).reduce((result, folderId) => {\n const { includedChatIds, pinnedChatIds } = foldersById[Number(folderId)];\n if (includedChatIds.includes(chatId) || pinnedChatIds?.includes(chatId)) {\n result.push(folderId);\n }\n\n return result;\n }, [] as string[]);\n }, [chatId, foldersById]);\n\n const [selectedFolderIds, setSelectedFolderIds] = useState(initialSelectedFolderIds);\n\n const folders = useMemo(() => {\n return folderOrderedIds?.map((folderId) => ({\n label: foldersById ? foldersById[folderId].title : '',\n value: String(folderId),\n })) || [];\n }, [folderOrderedIds, foldersById]);\n\n const handleSubmit = useCallback(() => {\n const idsToRemove = initialSelectedFolderIds.filter((id) => !selectedFolderIds.includes(id)).map(Number);\n const idsToAdd = selectedFolderIds.filter((id) => !initialSelectedFolderIds.includes(id)).map(Number);\n\n editChatFolders({ chatId, idsToRemove, idsToAdd });\n onClose();\n }, [chatId, editChatFolders, initialSelectedFolderIds, onClose, selectedFolderIds]);\n\n if (!foldersById || !folderOrderedIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: foldersById, orderedIds: folderOrderedIds } = global.chatFolders;\n\n return {\n foldersById,\n folderOrderedIds,\n };\n },\n)(ChatFolderModal));\n","import { ApiMediaFormat, ApiMessage } from '../../../../api/types';\n\nimport * as mediaLoader from '../../../../util/mediaLoader';\nimport {\n getMessageMediaHash,\n getMessagePhoto,\n getMessageText,\n getMessageTextWithSpoilers,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n hasMessageLocalBlobUrl,\n} from '../../../../modules/helpers';\nimport { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard';\n\ntype ICopyOptions = {\n label: string;\n handler: () => void;\n}[];\n\nexport function getMessageCopyOptions(\n message: ApiMessage, afterEffect?: () => void, onCopyLink?: () => void,\n): ICopyOptions {\n const options: ICopyOptions = [];\n const text = getMessageText(message);\n const photo = getMessagePhoto(message)\n || (!getMessageWebPageVideo(message) ? getMessageWebPagePhoto(message) : undefined);\n const mediaHash = getMessageMediaHash(message, 'inline');\n const canImageBeCopied = photo && (mediaHash || hasMessageLocalBlobUrl(message)) && CLIPBOARD_ITEM_SUPPORTED;\n const selection = window.getSelection();\n\n if (canImageBeCopied) {\n options.push({\n label: 'lng_context_copy_image',\n handler: () => {\n Promise.resolve(mediaHash ? mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl) : photo!.blobUrl)\n .then(copyImageToClipboard);\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (text) {\n // Detect if the user has selection in the current message\n const hasSelection = Boolean((\n selection?.anchorNode?.parentNode\n && (selection.anchorNode.parentNode as HTMLElement).closest('.Message .content-inner')\n && selection.toString().replace(/(?:\\r\\n|\\r|\\n)/g, '') !== ''\n ));\n\n options.push({\n label: getCopyLabel(hasSelection),\n handler: () => {\n const clipboardText = hasSelection && selection ? selection.toString() : getMessageTextWithSpoilers(message)!;\n copyTextToClipboard(clipboardText);\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (onCopyLink) {\n options.push({\n label: 'lng_context_copy_message_link',\n handler: () => {\n onCopyLink();\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n return options;\n}\n\nfunction getCopyLabel(hasSelection: boolean): string {\n if (hasSelection) {\n return 'lng_context_copy_selected';\n }\n return 'lng_context_copy_text';\n}\n","let scrollLockEl: HTMLElement | null | undefined;\nlet excludedClosestSelector: string | undefined;\n\nconst IGNORED_KEYS: Record = {\n Down: true,\n ArrowDown: true,\n Up: true,\n ArrowUp: true,\n Left: true,\n ArrowLeft: true,\n Right: true,\n ArrowRight: true,\n ' ': true,\n PageUp: true,\n PageDown: true,\n End: true,\n Home: true,\n Tab: true,\n};\n\nfunction isTextBox(target: EventTarget | null) {\n if (!target || !(target instanceof HTMLElement)) return false;\n const element = target;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'textarea') return true;\n if (tagName !== 'input') return false;\n const type = element.getAttribute('type');\n if (!type) return false;\n const inputTypes = [\n 'text', 'password', 'number', 'email', 'tel', 'url',\n 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week',\n ];\n return inputTypes.indexOf(type.toLowerCase()) > -1;\n}\n\nexport const getTouchY = (e: WheelEvent | TouchEvent | React.WheelEvent | React.TouchEvent) => {\n return ('changedTouches' in e ? e.changedTouches[0].clientY : 0);\n};\n\nconst preventDefault = (e: WheelEvent | TouchEvent) => {\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (\n !scrollLockEl\n // Allow overlay scrolling\n || !scrollLockEl.contains(e.target as HTMLElement)\n // Prevent top overscroll\n || (scrollLockEl.scrollTop <= 0 && deltaY <= 0)\n // Prevent bottom overscroll\n || (scrollLockEl.scrollTop >= (scrollLockEl.scrollHeight - scrollLockEl.offsetHeight) && deltaY >= 0)\n ) {\n if (excludedClosestSelector && (e.target as HTMLElement).closest(excludedClosestSelector)) return;\n e.preventDefault();\n }\n};\n\nfunction preventDefaultForScrollKeys(e: KeyboardEvent) {\n if (IGNORED_KEYS[e.key] && !isTextBox(e.target)) {\n e.preventDefault();\n }\n}\n\nexport function disableScrolling(el?: HTMLElement | null, _excludedClosestSelector?: string) {\n scrollLockEl = el;\n excludedClosestSelector = _excludedClosestSelector;\n // Disable scrolling in Chrome\n document.addEventListener('wheel', preventDefault, { passive: false });\n document.addEventListener('touchmove', preventDefault, { passive: false });\n document.onkeydown = preventDefaultForScrollKeys;\n}\n\nexport function enableScrolling() {\n scrollLockEl = undefined;\n excludedClosestSelector = undefined;\n document.removeEventListener('wheel', preventDefault); // Enable scrolling in Chrome\n document.removeEventListener('touchmove', preventDefault);\n // eslint-disable-next-line no-null/no-null\n document.onkeydown = null;\n}\n","import React, {\n FC, memo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMediaFormat } from '../../../api/types';\n\nimport useMedia from '../../../hooks/useMedia';\nimport useFlag from '../../../hooks/useFlag';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\nimport './ReactionSelectorReaction.scss';\n\nconst REACTION_SIZE = 32;\n\ntype OwnProps = {\n reaction: ApiAvailableReaction;\n previewIndex: number;\n isReady?: boolean;\n onSendReaction: (reaction: string, x: number, y: number) => void;\n};\n\nconst cn = createClassNameBuilder('ReactionSelectorReaction');\n\nconst ReactionSelectorReaction: FC = ({ reaction, previewIndex, onSendReaction, isReady }) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const mediaData = useMedia(`document${reaction.selectAnimation?.id}`, !isReady, ApiMediaFormat.Lottie);\n\n const [isActivated, activate, deactivate] = useFlag();\n const [isAnimationLoaded, markAnimationLoaded] = useFlag();\n\n const shouldRenderAnimated = Boolean(isReady && mediaData);\n const { transitionClassNames: animatedClassNames } = useShowTransition(shouldRenderAnimated);\n const { shouldRender: shouldRenderStatic, transitionClassNames: staticClassNames } = useShowTransition(\n !isReady || !isAnimationLoaded, undefined, true,\n );\n\n function handleClick() {\n if (!containerRef.current) return;\n const { x, y } = containerRef.current.getBoundingClientRect();\n\n onSendReaction(reaction.reaction, x, y);\n }\n\n return (\n \n {shouldRenderStatic && (\n \n )}\n {shouldRenderAnimated && (\n \n )}\n
\n );\n};\n\nexport default memo(ReactionSelectorReaction);\n","import React, {\n FC, memo, useLayoutEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useFlag from '../../../hooks/useFlag';\nimport { getTouchY } from '../../../util/scrollLock';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport ReactionSelectorReaction from './ReactionSelectorReaction';\n\nimport './ReactionSelector.scss';\n\ntype OwnProps = {\n enabledReactions?: string[];\n onSendReaction: (reaction: string, x: number, y: number) => void;\n isPrivate?: boolean;\n availableReactions?: ApiAvailableReaction[];\n isReady?: boolean;\n};\n\nconst cn = createClassNameBuilder('ReactionSelector');\n\nconst ReactionSelector: FC = ({\n availableReactions,\n enabledReactions,\n onSendReaction,\n isPrivate,\n isReady,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const itemsScrollRef = useRef(null);\n const [isHorizontalScrollEnabled, enableHorizontalScroll] = useFlag(false);\n useHorizontalScroll(itemsScrollRef.current, !isHorizontalScrollEnabled);\n\n useLayoutEffect(() => {\n enableHorizontalScroll();\n }, [enableHorizontalScroll]);\n\n const handleWheel = (e: React.WheelEvent | React.TouchEvent) => {\n if (!itemsScrollRef) return;\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (deltaY) {\n e.preventDefault();\n }\n };\n\n if ((!isPrivate && !enabledReactions?.length) || !availableReactions) return undefined;\n\n return (\n
\n
\n
\n
\n
\n {availableReactions?.map((reaction, i) => {\n if (reaction.isInactive\n || (!isPrivate && (!enabledReactions || !enabledReactions.includes(reaction.reaction)))) return undefined;\n return (\n \n );\n })}\n
\n
\n
\n );\n};\n\nexport default memo(ReactionSelector);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage, ApiUser } from '../../../api/types';\nimport { IAnchorPosition } from '../../../types';\n\nimport { getMessageCopyOptions } from './helpers/copyOptions';\nimport { disableScrolling, enableScrolling } from '../../../util/scrollLock';\nimport useContextMenuPosition from '../../../hooks/useContextMenuPosition';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport Avatar from '../../common/Avatar';\nimport ReactionSelector from './ReactionSelector';\n\nimport './MessageContextMenu.scss';\n\ntype OwnProps = {\n availableReactions?: ApiAvailableReaction[];\n isOpen: boolean;\n anchor: IAnchorPosition;\n message: ApiMessage;\n canSendNow?: boolean;\n enabledReactions?: string[];\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n isPrivate?: boolean;\n canDownload?: boolean;\n isDownloading?: boolean;\n canShowSeenBy?: boolean;\n seenByRecentUsers?: ApiUser[];\n onReply: () => void;\n onEdit: () => void;\n onPin: () => void;\n onUnpin: () => void;\n onForward: () => void;\n onDelete: () => void;\n onReport: () => void;\n onFaveSticker: () => void;\n onUnfaveSticker: () => void;\n onSelect: () => void;\n onSend: () => void;\n onReschedule: () => void;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onCopyLink?: () => void;\n onDownload?: () => void;\n onShowSeenBy?: () => void;\n onShowReactors?: () => void;\n onSendReaction: (reaction: string | undefined, x: number, y: number) => void;\n};\n\nconst SCROLLBAR_WIDTH = 10;\nconst REACTION_BUBBLE_EXTRA_WIDTH = 32;\nconst ANIMATION_DURATION = 200;\n\nconst MessageContextMenu: FC = ({\n availableReactions,\n isOpen,\n message,\n isPrivate,\n enabledReactions,\n anchor,\n canSendNow,\n canReschedule,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n isDownloading,\n canShowSeenBy,\n canShowReactionsCount,\n canRemoveReaction,\n canShowReactionList,\n seenByRecentUsers,\n onReply,\n onEdit,\n onPin,\n onUnpin,\n onForward,\n onDelete,\n onReport,\n onFaveSticker,\n onUnfaveSticker,\n onSelect,\n onSend,\n onReschedule,\n onClose,\n onCloseAnimationEnd,\n onCopyLink,\n onDownload,\n onShowSeenBy,\n onShowReactors,\n onSendReaction,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const scrollableRef = useRef(null);\n const copyOptions = getMessageCopyOptions(message, onClose, canCopyLink ? onCopyLink : undefined);\n const noReactions = !isPrivate && !enabledReactions?.length;\n const withReactions = canShowReactionList && !noReactions;\n\n const [isReady, markIsReady, unmarkIsReady] = useFlag();\n\n const getTriggerElement = useCallback(() => {\n return document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id=\"${message.id}\"]`);\n }, [message.id]);\n\n const getRootElement = useCallback(\n () => document.querySelector('.Transition__slide--active > .MessageList'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => document.querySelector('.MessageContextMenu .bubble'),\n [],\n );\n\n const getLayout = useCallback(() => {\n const extraHeightAudioPlayer = (IS_SINGLE_COLUMN_LAYOUT\n && (document.querySelector('.AudioPlayer-content'))?.offsetHeight) || 0;\n const pinnedElement = document.querySelector('.HeaderPinnedMessage-wrapper');\n const extraHeightPinned = (((IS_SINGLE_COLUMN_LAYOUT && !extraHeightAudioPlayer)\n || (!IS_SINGLE_COLUMN_LAYOUT && pinnedElement?.classList.contains('full-width')))\n && pinnedElement?.offsetHeight) || 0;\n\n return {\n extraPaddingX: SCROLLBAR_WIDTH,\n extraTopPadding: (document.querySelector('.MiddleHeader')!).offsetHeight,\n marginSides: withReactions ? REACTION_BUBBLE_EXTRA_WIDTH : undefined,\n extraMarginTop: extraHeightPinned + extraHeightAudioPlayer,\n };\n }, [withReactions]);\n\n const handleRemoveReaction = useCallback(() => {\n onSendReaction(undefined, 0, 0);\n }, [onSendReaction]);\n\n useEffect(() => {\n if (!isOpen) {\n unmarkIsReady();\n return;\n }\n\n setTimeout(() => {\n markIsReady();\n }, ANIMATION_DURATION);\n }, [isOpen, markIsReady, unmarkIsReady]);\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style, menuStyle, withScroll,\n } = useContextMenuPosition(anchor, getTriggerElement, getRootElement, getMenuElement, getLayout);\n\n useEffect(() => {\n disableScrolling(withScroll ? scrollableRef.current : undefined, '.ReactionSelector');\n\n return enableScrolling;\n }, [withScroll]);\n\n const lang = useLang();\n\n return (\n \n {canShowReactionList && (\n \n )}\n\n \n {canRemoveReaction && Remove Reaction}\n {canSendNow && {lang('MessageScheduleSend')}}\n {canReschedule && (\n {lang('MessageScheduleEditTime')}\n )}\n {canReply && {lang('Reply')}}\n {canEdit && {lang('Edit')}}\n {canFaveSticker && (\n {lang('AddToFavorites')}\n )}\n {canUnfaveSticker && (\n {lang('Stickers.RemoveFromFavorites')}\n )}\n {canCopy && copyOptions.map((options) => (\n {lang(options.label)}\n ))}\n {canPin && {lang('DialogPin')}}\n {canUnpin && {lang('DialogUnpin')}}\n {canDownload && (\n \n {isDownloading ? lang('lng_context_cancel_download') : lang('lng_media_download')}\n \n )}\n {canForward && {lang('Forward')}}\n {canSelect && {lang('Common.Select')}}\n {canReport && {lang('lng_context_report_msg')}}\n {(canShowSeenBy || canShowReactionsCount) && (\n \n {canShowReactionsCount && message.reactors?.count ? (\n canShowSeenBy && message.seenByUserIds?.length\n ? lang('Chat.OutgoingContextMixedReactionCount', [message.reactors.count, message.seenByUserIds.length])\n : lang('Chat.ContextReactionCount', message.reactors.count, 'i')\n ) : (\n message.seenByUserIds?.length\n ? lang('Conversation.ContextMenuSeen', message.seenByUserIds.length, 'i')\n : lang('Conversation.ContextMenuNoViews')\n )}\n
\n {seenByRecentUsers?.map((user) => (\n \n ))}\n
\n \n )}\n {canDelete && {lang('Delete')}}\n
\n \n );\n};\n\nexport default memo(MessageContextMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { MessageListType } from '../../../global/types';\nimport { ApiAvailableReaction, ApiMessage } from '../../../api/types';\nimport { IAlbum, IAnchorPosition } from '../../../types';\nimport {\n selectActiveDownloadIds,\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectIsMessageProtected,\n} from '../../../modules/selectors';\nimport {\n isActionMessage, isChatChannel,\n isChatGroup, isOwnMessage, areReactionsEmpty, isUserId, isMessageLocal,\n} from '../../../modules/helpers';\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';\nimport { getDayStartAt } from '../../../util/dateFormat';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport { REM } from '../../common/helpers/mediaDimensions';\n\nimport DeleteMessageModal from '../../common/DeleteMessageModal';\nimport ReportMessageModal from '../../common/ReportMessageModal';\nimport PinMessageModal from '../../common/PinMessageModal';\nimport MessageContextMenu from './MessageContextMenu';\nimport CalendarModal from '../../common/CalendarModal';\nimport buildClassName from '../../../util/buildClassName';\n\nconst START_SIZE = 2 * REM;\n\nexport type OwnProps = {\n isOpen: boolean;\n chatUsername?: string;\n message: ApiMessage;\n album?: IAlbum;\n anchor: IAnchorPosition;\n messageListType: MessageListType;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n noOptions?: boolean;\n canSendNow?: boolean;\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n isPrivate?: boolean;\n hasFullInfo?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n canDownload?: boolean;\n activeDownloads: number[];\n canShowSeenBy?: boolean;\n enabledReactions?: string[];\n};\n\nconst ContextMenuContainer: FC = ({\n availableReactions,\n isOpen,\n messageListType,\n chatUsername,\n message,\n album,\n anchor,\n onClose,\n onCloseAnimationEnd,\n noOptions,\n canSendNow,\n hasFullInfo,\n canReschedule,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canShowReactionsCount,\n canShowReactionList,\n canRemoveReaction,\n canEdit,\n enabledReactions,\n isPrivate,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n activeDownloads,\n canShowSeenBy,\n}) => {\n const {\n setReplyingToId,\n setEditingId,\n pinMessage,\n openForwardMenu,\n faveSticker,\n unfaveSticker,\n toggleMessageSelection,\n sendScheduledMessages,\n rescheduleMessage,\n downloadMessageMedia,\n cancelMessageMediaDownload,\n loadSeenBy,\n openSeenByModal,\n sendReaction,\n openReactorListModal,\n loadFullChat,\n loadReactors,\n } = getDispatch();\n\n const { transitionClassNames } = useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const [isReportModalOpen, setIsReportModalOpen] = useState(false);\n const [isPinModalOpen, setIsPinModalOpen] = useState(false);\n const [isCalendarOpen, openCalendar, closeCalendar] = useFlag();\n\n useEffect(() => {\n if (canShowSeenBy && isOpen) {\n loadSeenBy({ chatId: message.chatId, messageId: message.id });\n }\n }, [loadSeenBy, isOpen, message.chatId, message.id, canShowSeenBy]);\n\n useEffect(() => {\n if (canShowReactionsCount && isOpen) {\n loadReactors({ chatId: message.chatId, messageId: message.id });\n }\n }, [canShowReactionsCount, isOpen, loadReactors, message.chatId, message.id]);\n\n useEffect(() => {\n if (!hasFullInfo && !isPrivate && isOpen) {\n loadFullChat({ chatId: message.chatId });\n }\n }, [hasFullInfo, isOpen, isPrivate, loadFullChat, message.chatId]);\n\n const seenByRecentUsers = useMemo(() => {\n if (message.reactions?.recentReactions?.length) {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return message.reactions?.recentReactions?.slice(0, 3).map(({ userId }) => usersById[userId]).filter(Boolean);\n }\n\n if (!message.seenByUserIds) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n return message.seenByUserIds?.slice(0, 3).map((id) => usersById[id]).filter(Boolean);\n }, [message.reactions?.recentReactions, message.seenByUserIds]);\n\n const isDownloading = album ? album.messages.some((msg) => activeDownloads.includes(msg.id))\n : activeDownloads.includes(message.id);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const handleReport = useCallback(() => {\n setIsMenuOpen(false);\n setIsReportModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closeReportModal = useCallback(() => {\n setIsReportModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closePinModal = useCallback(() => {\n setIsPinModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleCloseCalendar = useCallback(() => {\n closeCalendar();\n onClose();\n }, [closeCalendar, onClose]);\n\n const handleReply = useCallback(() => {\n setReplyingToId({ messageId: message.id });\n closeMenu();\n }, [setReplyingToId, message.id, closeMenu]);\n\n const handleEdit = useCallback(() => {\n setEditingId({ messageId: message.id });\n closeMenu();\n }, [setEditingId, message.id, closeMenu]);\n\n const handlePin = useCallback(() => {\n setIsMenuOpen(false);\n setIsPinModalOpen(true);\n }, []);\n\n const handleUnpin = useCallback(() => {\n pinMessage({ messageId: message.id, isUnpin: true });\n closeMenu();\n }, [pinMessage, message.id, closeMenu]);\n\n const handleForward = useCallback(() => {\n closeMenu();\n if (album?.messages) {\n const messageIds = album.messages.map(({ id }) => id);\n openForwardMenu({ fromChatId: message.chatId, messageIds });\n } else {\n openForwardMenu({ fromChatId: message.chatId, messageIds: [message.id] });\n }\n }, [openForwardMenu, message, closeMenu, album]);\n\n const handleFaveSticker = useCallback(() => {\n closeMenu();\n faveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, faveSticker]);\n\n const handleUnfaveSticker = useCallback(() => {\n closeMenu();\n unfaveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, unfaveSticker]);\n\n const handleSelectMessage = useCallback(() => {\n const params = album?.messages\n ? {\n messageId: message.id,\n childMessageIds: album.messages.map(({ id }) => id),\n withShift: false,\n }\n : { messageId: message.id, withShift: false };\n\n toggleMessageSelection(params);\n closeMenu();\n }, [closeMenu, message.id, toggleMessageSelection, album]);\n\n const handleScheduledMessageSend = useCallback(() => {\n sendScheduledMessages({ chatId: message.chatId, id: message.id });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendScheduledMessages]);\n\n const handleOpenCalendar = useCallback(() => {\n setIsMenuOpen(false);\n openCalendar();\n }, [openCalendar]);\n\n const handleOpenSeenByModal = useCallback(() => {\n closeMenu();\n openSeenByModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, message.chatId, message.id, openSeenByModal]);\n\n const handleOpenReactorListModal = useCallback(() => {\n closeMenu();\n openReactorListModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, openReactorListModal, message.chatId, message.id]);\n\n const handleRescheduleMessage = useCallback((date: Date) => {\n rescheduleMessage({\n chatId: message.chatId,\n messageId: message.id,\n scheduledAt: Math.round(date.getTime() / 1000),\n });\n }, [message.chatId, message.id, rescheduleMessage]);\n\n const handleCopyLink = useCallback(() => {\n copyTextToClipboard(`https://t.me/${chatUsername || `c/${message.chatId.replace('-', '')}`}/${message.id}`);\n closeMenu();\n }, [chatUsername, closeMenu, message.chatId, message.id]);\n\n const handleDownloadClick = useCallback(() => {\n (album?.messages || [message]).forEach((msg) => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message: msg });\n } else {\n downloadMessageMedia({ message: msg });\n }\n });\n closeMenu();\n }, [album, message, closeMenu, isDownloading, cancelMessageMediaDownload, downloadMessageMedia]);\n\n const handleSendReaction = useCallback((reaction: string | undefined, x: number, y: number) => {\n sendReaction({\n chatId: message.chatId, messageId: message.id, reaction, x, y, startSize: START_SIZE,\n });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendReaction]);\n\n const reportMessageIds = useMemo(() => (album ? album.messages : [message]).map(({ id }) => id), [album, message]);\n\n if (noOptions) {\n closeMenu();\n\n return undefined;\n }\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n return (\n
\n \n \n \n \n {canReschedule && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message, messageListType }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const activeDownloads = selectActiveDownloadIds(global, message.chatId);\n const chat = selectChat(global, message.chatId);\n const { seenByExpiresAt, seenByMaxChatMembers } = global.appConfig || {};\n const {\n noOptions,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canEdit,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const isPinned = messageListType === 'pinned';\n const isScheduled = messageListType === 'scheduled';\n const isChannel = chat && isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const canShowSeenBy = Boolean(chat\n && seenByMaxChatMembers\n && seenByExpiresAt\n && isChatGroup(chat)\n && isOwnMessage(message)\n && !isScheduled\n && chat.membersCount\n && chat.membersCount < seenByMaxChatMembers\n && message.date > Date.now() / 1000 - seenByExpiresAt);\n const isPrivate = chat && isUserId(chat.id);\n const isAction = isActionMessage(message);\n const canShowReactionsCount = !isLocal && !isChannel && !isScheduled && !isAction && !isPrivate && message.reactions\n && !areReactionsEmpty(message.reactions) && message.reactions.canSeeList;\n const canRemoveReaction = isPrivate && message.reactions?.results?.some((l) => l.isChosen);\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n availableReactions: global.availableReactions,\n noOptions,\n canSendNow: isScheduled,\n canReschedule: isScheduled,\n canReply: !isPinned && !isScheduled && canReply,\n canPin: !isScheduled && canPin,\n canUnpin: !isScheduled && canUnpin,\n canDelete,\n canReport,\n canEdit: !isPinned && canEdit,\n canForward: !isProtected && !isScheduled && canForward,\n canFaveSticker: !isScheduled && canFaveSticker,\n canUnfaveSticker: !isScheduled && canUnfaveSticker,\n canCopy: !isProtected && canCopy,\n canCopyLink: !isProtected && !isScheduled && canCopyLink,\n canSelect,\n canDownload: !isProtected && canDownload,\n activeDownloads,\n canShowSeenBy,\n enabledReactions: chat?.fullInfo?.enabledReactions,\n isPrivate,\n hasFullInfo: Boolean(chat?.fullInfo),\n canShowReactionsCount,\n canShowReactionList: !isLocal && !isAction && !isScheduled && chat?.id !== SERVICE_NOTIFICATIONS_USER_ID,\n canRemoveReaction,\n };\n },\n)(ContextMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiSticker, ApiStickerSet } from '../../api/types';\n\nimport { STICKER_SIZE_MODAL } from '../../config';\nimport {\n selectChat, selectCurrentMessageList, selectStickerSet, selectStickerSetByShortName,\n} from '../../modules/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\nimport { getAllowedAttachmentOptions, getCanPostInChat } from '../../modules/helpers';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Loading from '../ui/Loading';\nimport StickerButton from './StickerButton';\n\nimport './StickerSetModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n fromSticker?: ApiSticker;\n stickerSetShortName?: string;\n onClose: () => void;\n};\n\ntype StateProps = {\n canSendStickers?: boolean;\n stickerSet?: ApiStickerSet;\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerSetModal: FC = ({\n isOpen,\n fromSticker,\n stickerSetShortName,\n stickerSet,\n canSendStickers,\n onClose,\n}) => {\n const {\n loadStickers,\n toggleStickerSet,\n sendMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const lang = useLang();\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE, isDisabled: !isOpen });\n\n useEffect(() => {\n if (isOpen) {\n if (fromSticker) {\n const { stickerSetId, stickerSetAccessHash } = fromSticker;\n loadStickers({\n stickerSetId,\n stickerSetAccessHash,\n });\n } else if (stickerSetShortName) {\n loadStickers({\n stickerSetShortName,\n });\n }\n }\n }, [isOpen, fromSticker, loadStickers, stickerSetShortName]);\n\n const handleSelect = useCallback((sticker: ApiSticker) => {\n sticker = {\n ...sticker,\n isPreloadedGlobally: true,\n };\n\n sendMessage({ sticker });\n onClose();\n }, [onClose, sendMessage]);\n\n const handleButtonClick = useCallback(() => {\n if (stickerSet) {\n toggleStickerSet({ stickerSetId: stickerSet.id });\n onClose();\n }\n }, [onClose, stickerSet, toggleStickerSet]);\n\n return (\n \n {stickerSet?.stickers ? (\n <>\n
\n {stickerSet.stickers.map((sticker) => (\n \n ))}\n
\n
\n \n {lang(\n stickerSet.installedDate ? 'StickerPack.RemoveStickerCount' : 'StickerPack.AddStickerCount',\n stickerSet.count,\n 'i',\n )}\n \n
\n \n ) : (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { fromSticker, stickerSetShortName }): StateProps => {\n const currentMessageList = selectCurrentMessageList(global);\n const { chatId, threadId } = currentMessageList || {};\n const chat = chatId && selectChat(global, chatId);\n const sendOptions = chat ? getAllowedAttachmentOptions(chat) : undefined;\n const canSendStickers = Boolean(\n chat && threadId && getCanPostInChat(chat, threadId) && sendOptions?.canSendStickers,\n );\n\n return {\n canSendStickers,\n stickerSet: fromSticker\n ? selectStickerSet(global, fromSticker.stickerSetId)\n : stickerSetShortName\n ? selectStickerSetByShortName(global, stickerSetShortName)\n : undefined,\n };\n },\n)(StickerSetModal));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat } from '../../api/types';\nimport { IAnchorPosition } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { disableScrolling, enableScrolling } from '../../util/scrollLock';\nimport {\n selectChat, selectNotifySettings, selectNotifyExceptions, selectUser,\n} from '../../modules/selectors';\nimport {\n isUserId, getCanDeleteChat, selectIsChatMuted, getCanAddContact,\n} from '../../modules/helpers';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Portal from '../ui/Portal';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\nimport DeleteChatModal from '../common/DeleteChatModal';\n\nimport './HeaderMenuContainer.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n isOpen: boolean;\n withExtraActions: boolean;\n anchor: IAnchorPosition;\n isChannel?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n canSubscribe?: boolean;\n canSearch?: boolean;\n canCall?: boolean;\n canMute?: boolean;\n canLeave?: boolean;\n canEnterVoiceChat?: boolean;\n canCreateVoiceChat?: boolean;\n onSubscribeChannel: () => void;\n onSearchClick: () => void;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isPrivate?: boolean;\n isMuted?: boolean;\n canAddContact?: boolean;\n canDeleteChat?: boolean;\n hasLinkedChat?: boolean;\n};\n\nconst HeaderMenuContainer: FC = ({\n chatId,\n isOpen,\n withExtraActions,\n anchor,\n isChannel,\n canStartBot,\n canRestartBot,\n canSubscribe,\n canSearch,\n canCall,\n canMute,\n canLeave,\n canEnterVoiceChat,\n canCreateVoiceChat,\n chat,\n isPrivate,\n isMuted,\n canDeleteChat,\n hasLinkedChat,\n canAddContact,\n onSubscribeChannel,\n onSearchClick,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const {\n updateChatMutedState,\n enterMessageSelectMode,\n sendBotCommand,\n restartBot,\n joinGroupCall,\n createGroupCall,\n openLinkedChat,\n addContact,\n openCallFallbackConfirm,\n } = getDispatch();\n\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const { x, y } = anchor;\n\n useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const handleToggleMuteClick = useCallback(() => {\n updateChatMutedState({ chatId, isMuted: !isMuted });\n closeMenu();\n }, [chatId, closeMenu, isMuted, updateChatMutedState]);\n\n const handleEnterVoiceChatClick = useCallback(() => {\n if (canCreateVoiceChat) {\n // TODO show popup to schedule\n createGroupCall({\n chatId,\n });\n } else {\n joinGroupCall({\n chatId,\n });\n }\n closeMenu();\n }, [closeMenu, canCreateVoiceChat, chatId, joinGroupCall, createGroupCall]);\n\n const handleLinkedChatClick = useCallback(() => {\n openLinkedChat({ id: chatId });\n closeMenu();\n }, [chatId, closeMenu, openLinkedChat]);\n\n const handleAddContactClick = useCallback(() => {\n addContact({ userId: chatId });\n closeMenu();\n }, [addContact, chatId, closeMenu]);\n\n const handleSubscribe = useCallback(() => {\n onSubscribeChannel();\n closeMenu();\n }, [closeMenu, onSubscribeChannel]);\n\n const handleCall = useCallback(() => {\n openCallFallbackConfirm();\n closeMenu();\n }, [closeMenu, openCallFallbackConfirm]);\n\n const handleSearch = useCallback(() => {\n onSearchClick();\n closeMenu();\n }, [closeMenu, onSearchClick]);\n\n const handleSelectMessages = useCallback(() => {\n enterMessageSelectMode();\n closeMenu();\n }, [closeMenu, enterMessageSelectMode]);\n\n useEffect(() => {\n disableScrolling();\n\n return enableScrolling;\n }, []);\n\n const lang = useLang();\n\n return (\n \n
\n \n {withExtraActions && canStartBot && (\n \n {lang('BotStart')}\n \n )}\n {withExtraActions && canRestartBot && (\n \n {lang('BotRestart')}\n \n )}\n {withExtraActions && canSubscribe && (\n \n {lang(isChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n )}\n {canAddContact && (\n \n {lang('AddContact')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canCall && (\n \n {lang('Call')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canSearch && (\n \n {lang('Search')}\n \n )}\n {canMute && (\n \n {lang(isMuted ? 'ChatsUnmute' : 'ChatsMute')}\n \n )}\n {(canEnterVoiceChat || canCreateVoiceChat) && (\n \n {lang(canCreateVoiceChat ? 'StartVoipChat' : 'VoipGroupJoinCall')}\n \n )}\n {hasLinkedChat && (\n \n {lang(isChannel ? 'ViewDiscussion' : 'lng_profile_view_channel')}\n \n )}\n \n {lang('ReportSelectMessages')}\n \n {canLeave && (\n \n {lang(isPrivate\n ? 'DeleteChatUser'\n : (canDeleteChat ? 'GroupInfo.DeleteAndExit' : (isChannel ? 'LeaveChannel' : 'Group.LeaveGroup')))}\n \n )}\n \n {chat && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n const isPrivate = isUserId(chat.id);\n const user = isPrivate ? selectUser(global, chatId) : undefined;\n const canAddContact = user && getCanAddContact(user);\n\n return {\n chat,\n isMuted: selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global)),\n isPrivate,\n canAddContact,\n canDeleteChat: getCanDeleteChat(chat),\n hasLinkedChat: Boolean(chat?.fullInfo?.linkedChatId),\n };\n },\n)(HeaderMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState, useLayoutEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat } from '../../api/types';\n\nimport { debounce } from '../../util/schedulers';\nimport { selectCurrentTextSearch, selectCurrentChat } from '../../modules/selectors';\nimport { getDayStartAt } from '../../util/dateFormat';\n\nimport Button from '../ui/Button';\nimport SearchInput from '../ui/SearchInput';\n\nimport './MobileSearch.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n};\n\ntype StateProps = {\n isActive?: boolean;\n chat?: ApiChat;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n isHistoryCalendarOpen?: boolean;\n};\n\nconst runDebouncedForSearch = debounce((cb) => cb(), 200, false);\n\nconst MobileSearchFooter: FC = ({\n isActive,\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen,\n}) => {\n const {\n setLocalTextSearchQuery,\n searchTextMessagesLocal,\n focusMessage,\n closeLocalTextSearch,\n openHistoryCalendar,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n // Fix for iOS keyboard\n useEffect(() => {\n const { visualViewport } = window as any;\n if (!visualViewport) {\n return undefined;\n }\n\n const mainEl = document.getElementById('Main') as HTMLDivElement;\n const handleResize = () => {\n const { activeElement } = document;\n if (activeElement && (activeElement === inputRef.current)) {\n const { pageTop, height } = visualViewport;\n mainEl.style.transform = `translateY(${pageTop}px)`;\n mainEl.style.height = `${height}px`;\n document.documentElement.scrollTop = pageTop;\n } else {\n mainEl.style.transform = '';\n mainEl.style.height = '';\n }\n };\n\n visualViewport.addEventListener('resize', handleResize);\n\n return () => {\n visualViewport.removeEventListener('resize', handleResize);\n };\n }, []);\n\n // Focus message\n useEffect(() => {\n if (chat?.id && foundIds?.length) {\n focusMessage({ chatId: chat.id, messageId: foundIds[0] });\n setFocusedIndex(0);\n } else {\n setFocusedIndex(-1);\n }\n }, [chat?.id, focusMessage, foundIds]);\n\n // Disable native up/down buttons on iOS\n useEffect(() => {\n Array.from(document.querySelectorAll('input')).forEach((input) => {\n input.disabled = Boolean(isActive && input !== inputRef.current);\n });\n\n Array.from(document.querySelectorAll('div[contenteditable]')).forEach((div) => {\n div.contentEditable = isActive ? 'false' : 'true';\n });\n }, [isActive]);\n\n // Blur on exit\n useEffect(() => {\n if (!isActive) {\n inputRef.current!.blur();\n }\n }, [isActive]);\n\n useLayoutEffect(() => {\n const searchInput = document.querySelector('#MobileSearch input')!;\n searchInput.blur();\n }, [isHistoryCalendarOpen]);\n\n const handleMessageSearchQueryChange = useCallback((newQuery: string) => {\n setLocalTextSearchQuery({ query: newQuery });\n\n if (newQuery.length) {\n runDebouncedForSearch(searchTextMessagesLocal);\n }\n }, [searchTextMessagesLocal, setLocalTextSearchQuery]);\n\n const handleUp = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex + 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n const handleDown = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex - 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n return (\n
\n
\n \n \n \n \n
\n
\n
\n {query ? (\n foundIds?.length ? (\n `${focusedIndex + 1} of ${totalCount}`\n ) : foundIds && !foundIds.length ? (\n 'No results'\n ) : (\n ''\n )\n ) : (\n openHistoryCalendar({ selectedAt: getDayStartAt(Date.now()) })}\n ariaLabel=\"Search messages by date\"\n >\n \n \n )}\n
\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen: Boolean(global.historyCalendarSelectedAt),\n };\n },\n)(MobileSearchFooter));\n","export default function findInViewport(\n container: HTMLElement,\n selectorOrElements: string | NodeListOf,\n margin = 0,\n isDense = false,\n shouldContainBottom = false,\n isHorizontal = false,\n) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const allElements = typeof selectorOrElements === 'string'\n ? container.querySelectorAll(selectorOrElements)\n : selectorOrElements;\n const { length } = allElements;\n const visibleIndexes: number[] = [];\n let isFound = false;\n\n for (let i = 0; i < length; i++) {\n const element = allElements[i];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const isVisible = shouldContainBottom\n ? y2 >= viewportY1 - margin && y2 <= viewportY2 + margin\n : y1 <= viewportY2 + margin && y2 >= viewportY1 - margin;\n\n if (isVisible) {\n visibleIndexes.push(i);\n isFound = true;\n } else if (isFound && !isDense) {\n break;\n }\n }\n\n return { allElements, visibleIndexes };\n}\n","function isFullyVisible(container: HTMLElement, element: HTMLElement, isHorizontal = false) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n return y1 > viewportY1 && y2 < viewportY2;\n}\n\nexport default isFullyVisible;\n","import findInViewport from './findInViewport';\nimport isFullyVisible from './isFullyVisible';\nimport fastSmoothScroll from './fastSmoothScroll';\n\nconst VIEWPORT_MARGIN = 8;\nconst SCROLL_MARGIN = 10;\n\nexport default function setTooltipItemVisible(selector: string, index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container || index < 0) {\n return;\n }\n const { visibleIndexes, allElements } = findInViewport(\n container,\n selector,\n VIEWPORT_MARGIN,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first]))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n fastSmoothScroll(container, allElements[index], position, SCROLL_MARGIN);\n }\n}\n","import { useCallback, useEffect, useState } from '../../../../lib/teact/teact';\nimport captureKeyboardListeners from '../../../../util/captureKeyboardListeners';\nimport cycleRestrict from '../../../../util/cycleRestrict';\n\nexport function useKeyboardNavigation({\n isActive,\n isHorizontal,\n shouldSaveSelectionOnUpdateItems,\n shouldRemoveSelectionOnReset,\n noArrowNavigation,\n items,\n shouldSelectOnTab,\n onSelect,\n onClose,\n}: {\n isActive: boolean;\n isHorizontal?: boolean;\n shouldSaveSelectionOnUpdateItems?: boolean;\n shouldRemoveSelectionOnReset?: boolean;\n noArrowNavigation?: boolean;\n items?: any[];\n shouldSelectOnTab?: boolean;\n onSelect: AnyToVoidFunction;\n onClose: NoneToVoidFunction;\n}) {\n const [selectedItemIndex, setSelectedItemIndex] = useState(-1);\n\n const getSelectedIndex = useCallback((newIndex: number) => {\n if (!items) {\n return -1;\n }\n\n return cycleRestrict(items.length, newIndex);\n }, [items]);\n\n const handleArrowKey = useCallback((value: number, e: KeyboardEvent) => {\n e.preventDefault();\n setSelectedItemIndex((index) => (getSelectedIndex(index + value)));\n }, [setSelectedItemIndex, getSelectedIndex]);\n\n const handleItemSelect = useCallback((e: KeyboardEvent) => {\n if (items && items.length && selectedItemIndex > -1) {\n const item = items[selectedItemIndex];\n if (item) {\n e.preventDefault();\n onSelect(item);\n }\n }\n }, [items, onSelect, selectedItemIndex]);\n\n const isSelectionOutOfRange = !items || selectedItemIndex > items.length - 1;\n useEffect(() => {\n if (!shouldSaveSelectionOnUpdateItems || isSelectionOutOfRange) {\n setSelectedItemIndex(shouldRemoveSelectionOnReset ? -1 : 0);\n }\n }, [isSelectionOutOfRange, shouldRemoveSelectionOnReset, shouldSaveSelectionOnUpdateItems]);\n\n useEffect(() => (isActive ? captureKeyboardListeners({\n onEsc: onClose,\n onUp: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onDown: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onLeft: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onRight: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onTab: shouldSelectOnTab ? handleItemSelect : undefined,\n onEnter: handleItemSelect,\n }) : undefined), [\n noArrowNavigation, handleArrowKey, handleItemSelect, isActive, isHorizontal, onClose, shouldSelectOnTab,\n ]);\n\n return selectedItemIndex;\n}\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nimport './MentionTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onInsertUserName: (user: ApiUser, forceFocus?: boolean) => void;\n filteredUsers?: ApiUser[];\n};\n\nconst MentionTooltip: FC = ({\n isOpen,\n onClose,\n onInsertUserName,\n filteredUsers,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleUserSelect = useCallback((userId: string, forceFocus = false) => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const user = usersById[userId];\n if (!user) {\n return;\n }\n\n onInsertUserName(user, forceFocus);\n }, [onInsertUserName]);\n\n const handleSelectMention = useCallback((member: ApiUser) => {\n handleUserSelect(member.id, true);\n }, [handleUserSelect]);\n\n const selectedMentionIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: filteredUsers,\n onSelect: handleSelectMention,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedMentionIndex, containerRef);\n }, [selectedMentionIndex]);\n\n useEffect(() => {\n if (filteredUsers && !filteredUsers.length) {\n onClose();\n }\n }, [filteredUsers, onClose]);\n\n const prevChatMembers = usePrevious(\n filteredUsers?.length\n ? filteredUsers\n : undefined,\n shouldRender,\n );\n const renderedChatMembers = filteredUsers && !filteredUsers.length\n ? prevChatMembers\n : filteredUsers;\n\n if (!shouldRender || (renderedChatMembers && !renderedChatMembers.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'MentionTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedChatMembers?.map(({ id }, index) => (\n handleUserSelect(id)}\n focus={selectedMentionIndex === index}\n >\n \n \n ))}\n
\n );\n};\n\nexport default memo(MentionTooltip);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAttachment, ApiChatMember } from '../../../api/types';\n\nimport {\n CONTENT_TYPES_WITH_PREVIEW,\n EDITABLE_INPUT_MODAL_ID,\n SUPPORTED_IMAGE_CONTENT_TYPES,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n} from '../../../config';\nimport { getFileExtension } from '../../common/helpers/documentInfo';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useMentionTooltip from './hooks/useMentionTooltip';\nimport useEmojiTooltip from './hooks/useEmojiTooltip';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { useStateRef } from '../../../hooks/useStateRef';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport File from '../../common/File';\nimport MessageInput from './MessageInput';\nimport MentionTooltip from './MentionTooltip';\nimport EmojiTooltip from './EmojiTooltip.async';\n\nimport './AttachmentModal.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n attachments: ApiAttachment[];\n caption: string;\n isReady?: boolean;\n currentUserId?: string;\n groupChatMembers?: ApiChatMember[];\n recentEmojis: string[];\n baseEmojiKeywords?: Record;\n emojiKeywords?: Record;\n addRecentEmoji: AnyToVoidFunction;\n onCaptionUpdate: (html: string) => void;\n onSend: () => void;\n onFileAppend: (files: File[], isQuick: boolean) => void;\n onClear: () => void;\n};\n\nconst DROP_LEAVE_TIMEOUT_MS = 150;\n\nconst AttachmentModal: FC = ({\n chatId,\n threadId,\n attachments,\n caption,\n isReady,\n currentUserId,\n groupChatMembers,\n recentEmojis,\n baseEmojiKeywords,\n emojiKeywords,\n addRecentEmoji,\n onCaptionUpdate,\n onSend,\n onFileAppend,\n onClear,\n}) => {\n const captionRef = useStateRef(caption);\n const hideTimeoutRef = useRef();\n const prevAttachments = usePrevious(attachments);\n const renderingAttachments = attachments.length ? attachments : prevAttachments;\n const isOpen = Boolean(attachments.length);\n const [isHovered, markHovered, unmarkHovered] = useFlag();\n const isQuick = Boolean(renderingAttachments && renderingAttachments.every((a) => a.quick));\n const lang = useLang();\n\n const {\n isMentionTooltipOpen, closeMentionTooltip, insertMention, mentionFilteredUsers,\n } = useMentionTooltip(\n isOpen,\n captionRef,\n onCaptionUpdate,\n EDITABLE_INPUT_MODAL_ID,\n groupChatMembers,\n undefined,\n currentUserId,\n );\n const {\n isEmojiTooltipOpen, closeEmojiTooltip, filteredEmojis, insertEmoji,\n } = useEmojiTooltip(\n isOpen,\n captionRef,\n recentEmojis,\n EDITABLE_INPUT_MODAL_ID,\n onCaptionUpdate,\n baseEmojiKeywords,\n emojiKeywords,\n !isReady,\n );\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n\n const sendAttachments = useCallback(() => {\n if (isOpen) {\n onSend();\n }\n }, [isOpen, onSend]);\n\n const handleDragLeave = (e: React.DragEvent) => {\n const { relatedTarget: toTarget, target: fromTarget } = e;\n\n // Esc button pressed during drag event\n if ((fromTarget as HTMLDivElement).matches('.drop-target') && !toTarget) {\n hideTimeoutRef.current = window.setTimeout(unmarkHovered, DROP_LEAVE_TIMEOUT_MS);\n }\n\n // Prevent DragLeave event from firing when the pointer moves inside the AttachmentModal drop target\n if (fromTarget && (fromTarget as HTMLElement).closest('.AttachmentModal.hovered')) {\n return;\n }\n\n if (toTarget) {\n e.stopPropagation();\n }\n\n unmarkHovered();\n };\n\n const handleFilesDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n unmarkHovered();\n\n const { dataTransfer: { files } } = e;\n\n if (files?.length) {\n const newFiles = isQuick\n ? Array.from(files).filter((file) => {\n return file.type && CONTENT_TYPES_WITH_PREVIEW.has(file.type);\n })\n : Array.from(files);\n\n onFileAppend(newFiles, isQuick);\n }\n }, [isQuick, onFileAppend, unmarkHovered]);\n\n function handleDragOver(e: React.MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (hideTimeoutRef.current) {\n window.clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = undefined;\n }\n }\n\n if (!renderingAttachments) {\n return undefined;\n }\n\n const areAllPhotos = renderingAttachments.every((a) => SUPPORTED_IMAGE_CONTENT_TYPES.has(a.mimeType));\n const areAllVideos = renderingAttachments.every((a) => SUPPORTED_VIDEO_CONTENT_TYPES.has(a.mimeType));\n const areAllAudios = renderingAttachments.every((a) => a.mimeType.startsWith('audio/'));\n\n let title = '';\n if (areAllPhotos) {\n title = lang('PreviewSender.SendPhoto', renderingAttachments.length, 'i');\n } else if (areAllVideos) {\n title = lang('PreviewSender.SendVideo', renderingAttachments.length, 'i');\n } else if (areAllAudios) {\n title = lang('PreviewSender.SendAudio', renderingAttachments.length, 'i');\n } else {\n title = lang('PreviewSender.SendFile', renderingAttachments.length, 'i');\n }\n\n function renderHeader() {\n if (!renderingAttachments) {\n return undefined;\n }\n\n return (\n
\n \n
{title}
\n \n {lang('Send')}\n \n
\n );\n }\n\n return (\n \n \n {isQuick ? (\n
\n {renderingAttachments.map((attachment) => (\n attachment.mimeType.startsWith('image/')\n ? \"\"\n :
\n ) : (\n
\n {renderingAttachments.map((attachment) => (\n \n ))}\n
\n )}\n\n
\n \n \n \n
\n
\n \n );\n};\n\nexport default memo(AttachmentModal);\n","import { ChangeEvent, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { ApiNewPoll } from '../../../api/types';\n\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport InputText from '../../ui/InputText';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup from '../../ui/RadioGroup';\n\nimport './PollModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onSend: (pollSummary: ApiNewPoll) => void;\n onClear: () => void;\n};\n\nconst MAX_LIST_HEIGHT = 320;\nconst MAX_OPTIONS_COUNT = 10;\nconst MAX_OPTION_LENGTH = 100;\nconst MAX_QUESTION_LENGTH = 255;\nconst MAX_SOLUTION_LENGTH = 200;\n\nconst PollModal: FC = ({ isOpen, onSend, onClear }) => {\n // eslint-disable-next-line no-null/no-null\n const questionInputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const optionsListRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const solutionRef = useRef(null);\n\n const [question, setQuestion] = useState('');\n const [options, setOptions] = useState(['']);\n const [isAnonymous, setIsAnonymous] = useState(true);\n const [isMultipleAnswers, setIsMultipleAnswers] = useState(false);\n const [isQuizMode, setIsQuizMode] = useState(false);\n const [solution, setSolution] = useState();\n const [correctOption, setCorrectOption] = useState();\n const [hasErrors, setHasErrors] = useState(false);\n\n const lang = useLang();\n\n const focusInput = useCallback((ref: RefObject) => {\n if (isOpen && ref.current) {\n ref.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n useEffect(() => {\n if (!isOpen) {\n setQuestion('');\n setOptions(['']);\n setIsAnonymous(true);\n setIsMultipleAnswers(false);\n setIsQuizMode(false);\n setSolution('');\n setCorrectOption('');\n setHasErrors(false);\n }\n }, [isOpen]);\n\n useEffect(() => focusInput(questionInputRef), [focusInput, isOpen]);\n\n useLayoutEffect(() => {\n const solutionEl = solutionRef.current;\n\n if (solutionEl && solution !== solutionEl.innerHTML) {\n solutionEl.innerHTML = solution;\n }\n }, [solution]);\n\n const addNewOption = useCallback((newOptions: string[] = []) => {\n setOptions([...newOptions, '']);\n requestAnimationFrame(() => {\n const list = optionsListRef.current;\n if (!list) {\n return;\n }\n\n list.classList.toggle('overflown', list.scrollHeight > MAX_LIST_HEIGHT);\n list.scrollTo({ top: list.scrollHeight, behavior: 'smooth' });\n });\n }, []);\n\n const handleCreate = useCallback(() => {\n setHasErrors(false);\n if (!isOpen) {\n return;\n }\n\n const questionTrimmed = question.trim().substring(0, MAX_QUESTION_LENGTH);\n const optionsTrimmed = options.map((o) => o.trim().substring(0, MAX_OPTION_LENGTH)).filter((o) => o.length);\n\n if (!questionTrimmed || optionsTrimmed.length < 2) {\n setQuestion(questionTrimmed);\n if (optionsTrimmed.length) {\n if (optionsTrimmed.length < 2) {\n addNewOption(optionsTrimmed);\n } else {\n setOptions(optionsTrimmed);\n }\n } else {\n addNewOption();\n }\n setHasErrors(true);\n return;\n }\n\n if (isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)])) {\n setHasErrors(true);\n return;\n }\n\n const answers = optionsTrimmed\n .map((text, index) => ({\n text: text.trim(),\n option: String(index),\n ...(String(index) === correctOption && { correct: true }),\n }));\n\n const payload: ApiNewPoll = {\n summary: {\n question: questionTrimmed,\n answers,\n ...(!isAnonymous && { isPublic: true }),\n ...(isMultipleAnswers && { multipleChoice: true }),\n ...(isQuizMode && { quiz: true }),\n },\n };\n\n if (isQuizMode) {\n const { text, entities } = (solution && parseMessageInput(solution.substring(0, MAX_SOLUTION_LENGTH))) || {};\n\n payload.quiz = {\n correctAnswers: [correctOption],\n ...(text && { solution: text }),\n ...(entities && { solutionEntities: entities }),\n };\n }\n\n onSend(payload);\n }, [\n isOpen,\n question,\n options,\n isQuizMode,\n correctOption,\n isAnonymous,\n isMultipleAnswers,\n onSend,\n addNewOption,\n solution,\n ]);\n\n const updateOption = useCallback((index: number, text: string) => {\n const newOptions = [...options];\n newOptions[index] = text;\n if (newOptions[newOptions.length - 1].trim().length && newOptions.length < MAX_OPTIONS_COUNT) {\n addNewOption(newOptions);\n } else {\n setOptions(newOptions);\n }\n }, [options, addNewOption]);\n\n const removeOption = useCallback((index: number) => {\n const newOptions = [...options];\n newOptions.splice(index, 1);\n setOptions(newOptions);\n requestAnimationFrame(() => {\n if (!optionsListRef.current) {\n return;\n }\n\n optionsListRef.current.classList.toggle('overflown', optionsListRef.current.scrollHeight > MAX_LIST_HEIGHT);\n });\n }, [options]);\n\n const handleCorrectOptionChange = useCallback((newValue: string) => {\n setCorrectOption(newValue);\n }, [setCorrectOption]);\n\n const handleIsAnonymousChange = useCallback((e: ChangeEvent) => {\n setIsAnonymous(e.target.checked);\n }, []);\n\n const handleMultipleAnswersChange = useCallback((e: ChangeEvent) => {\n setIsMultipleAnswers(e.target.checked);\n }, []);\n\n const handleQuizModeChange = useCallback((e: ChangeEvent) => {\n setIsQuizMode(e.target.checked);\n }, []);\n\n const handleKeyPress = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n handleCreate();\n }\n }, [handleCreate]);\n\n const getQuestionError = useCallback(() => {\n if (hasErrors && !question.trim().length) {\n return lang('lng_polls_choose_question');\n }\n\n return undefined;\n }, [hasErrors, lang, question]);\n\n const getOptionsError = useCallback((index: number) => {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n if (hasErrors && optionsTrimmed.length < 2 && !options[index].trim().length) {\n return lang('lng_polls_choose_answers');\n }\n return undefined;\n }, [hasErrors, lang, options]);\n\n function renderHeader() {\n return (\n
\n \n
{lang('NewPoll')}
\n \n {lang('Create')}\n \n
\n );\n }\n\n function renderOptions() {\n return options.map((option, index) => (\n
\n updateOption(index, e.currentTarget.value)}\n onKeyPress={handleKeyPress}\n />\n {index !== options.length - 1 && (\n removeOption(index)}\n >\n \n \n )}\n
\n ));\n }\n\n function renderRadioOptions() {\n return renderOptions()\n .map((label, index) => ({ value: String(index), label, hidden: index === options.length - 1 }));\n }\n\n function renderQuizNoOptionError() {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n\n return isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)]) && (\n

{lang('lng_polls_choose_correct')}

\n );\n }\n\n return (\n \n setQuestion(e.currentTarget.value)}\n onKeyPress={handleKeyPress}\n />\n
\n\n
\n

{lang('PollOptions')}

\n\n {hasErrors && renderQuizNoOptionError()}\n {isQuizMode ? (\n \n ) : (\n renderOptions()\n )}\n\n
\n\n
\n\n
\n \n \n \n {isQuizMode && (\n <>\n

{lang('lng_polls_solution_title')}

\n setSolution(e.currentTarget.innerHTML)}\n />\n
{lang('CreatePoll.ExplanationInfo')}
\n \n )}\n
\n \n );\n};\n\nexport default memo(PollModal);\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\n\nimport './EmojiButton.scss';\n\ntype OwnProps = {\n emoji: Emoji;\n focus?: boolean;\n onClick: (emoji: string, name: string) => void;\n};\n\nconst EmojiButton: FC = ({ emoji, focus, onClick }) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n // Preventing safari from losing focus on Composer MessageInput\n e.preventDefault();\n\n onClick(emoji.native, emoji.id);\n }, [emoji, onClick]);\n\n return (\n \n {IS_EMOJI_SUPPORTED ? emoji.native : \"\"}\n
\n );\n};\n\nexport default memo(EmojiButton);\n","import React, { FC, memo, useRef } from '../../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport windowSize from '../../../util/windowSize';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport useLang from '../../../hooks/useLang';\n\nimport EmojiButton from './EmojiButton';\n\nconst EMOJIS_PER_ROW_ON_DESKTOP = 9;\nconst EMOJI_MARGIN = 4;\nconst MOBILE_CONTAINER_PADDING = 8;\nconst EMOJI_SIZE = 40;\n\ntype OwnProps = {\n category: EmojiCategory;\n index: number;\n allEmojis: AllEmojis;\n observeIntersection: ObserveFn;\n shouldRender: boolean;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\nconst EmojiCategory: FC = ({\n category, index, allEmojis, observeIntersection, shouldRender, onEmojiSelect,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const lang = useLang();\n\n const emojisPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (EMOJI_SIZE + EMOJI_MARGIN))\n : EMOJIS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(category.emojis.length / emojisPerRow) * (EMOJI_SIZE + EMOJI_MARGIN);\n\n return (\n \n

\n {lang(category.id === 'recent' ? 'RecentStickers' : `Emoji${index}`)}\n

\n \n {shouldRender && category.emojis.map((name) => {\n const emoji = allEmojis[name];\n // Recent emojis may contain emoticons that are no longer in the list\n if (!emoji) {\n return undefined;\n }\n // Some emojis have multiple skins and are represented as an Object with emojis for all skins.\n // For now, we select only the first emoji with 'neutral' skin.\n const displayedEmoji = 'id' in emoji ? emoji : emoji[1];\n\n return (\n \n );\n })}\n
\n \n );\n};\n\nexport default memo(EmojiCategory);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\n\nimport { MENU_TRANSITION_DURATION } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport {\n EmojiModule,\n EmojiRawData,\n EmojiData,\n uncompressEmoji,\n} from '../../../util/emoji';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport { pick } from '../../../util/iteratees';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Loading from '../../ui/Loading';\nimport EmojiCategory from './EmojiCategory';\n\nimport './EmojiPicker.scss';\n\ntype OwnProps = {\n className?: string;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\ntype StateProps = Pick;\ntype EmojiCategoryData = { id: string; name: string; emojis: string[] };\n\nconst ICONS_BY_CATEGORY: Record = {\n recent: 'icon-recent',\n people: 'icon-smile',\n nature: 'icon-animals',\n foods: 'icon-eats',\n activity: 'icon-sport',\n places: 'icon-car',\n objects: 'icon-lamp',\n symbols: 'icon-language',\n flags: 'icon-flag',\n};\n\nconst OPEN_ANIMATION_DELAY = 200;\n// Only a few categories are above this height.\nconst SMOOTH_SCROLL_DISTANCE = 800;\nconst FOCUS_MARGIN = 50;\nconst HEADER_BUTTON_WIDTH = 42; // px. Includes margins\nconst INTERSECTION_THROTTLE = 200;\n\nconst categoryIntersections: boolean[] = [];\n\nlet emojiDataPromise: Promise;\nlet emojiRawData: EmojiRawData;\nlet emojiData: EmojiData;\n\nconst EmojiPicker: FC = ({\n className, onEmojiSelect, recentEmojis,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n\n const [categories, setCategories] = useState();\n const [emojis, setEmojis] = useState();\n const [activeCategoryIndex, setActiveCategoryIndex] = useState(0);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('emoji-category-')) {\n return;\n }\n\n const index = Number(id.replace('emoji-category-', ''));\n categoryIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = categoryIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveCategoryIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n\n useHorizontalScroll(headerRef.current, !IS_SINGLE_COLUMN_LAYOUT);\n\n // Scroll header when active set updates\n useEffect(() => {\n if (!categories) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeCategoryIndex * HEADER_BUTTON_WIDTH - header.offsetWidth / 2 + HEADER_BUTTON_WIDTH / 2;\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [categories, activeCategoryIndex]);\n\n const lang = useLang();\n\n const allCategories = useMemo(() => {\n if (!categories) {\n return MEMO_EMPTY_ARRAY;\n }\n const themeCategories = [...categories];\n if (recentEmojis?.length) {\n themeCategories.unshift({\n id: 'recent',\n name: lang('RecentStickers'),\n emojis: recentEmojis,\n });\n }\n\n return themeCategories;\n }, [categories, lang, recentEmojis]);\n\n // Initialize data on first render.\n useEffect(() => {\n setTimeout(() => {\n const exec = () => {\n setCategories(emojiData.categories);\n\n setEmojis(emojiData.emojis as AllEmojis);\n };\n\n if (emojiData) {\n exec();\n } else {\n ensureEmojiData()\n .then(exec);\n }\n }, OPEN_ANIMATION_DELAY);\n }, []);\n\n const selectCategory = useCallback((index: number) => {\n setActiveCategoryIndex(index);\n const categoryEl = document.getElementById(`emoji-category-${index}`)!;\n fastSmoothScroll(containerRef.current!, categoryEl, 'start', FOCUS_MARGIN, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n onEmojiSelect(emoji, name);\n }, [onEmojiSelect]);\n\n const canRenderContents = useAsyncRendering([], MENU_TRANSITION_DURATION);\n\n function renderCategoryButton(category: EmojiCategoryData, index: number) {\n const icon = ICONS_BY_CATEGORY[category.id];\n\n return icon && (\n selectCategory(index)}\n ariaLabel={category.name}\n >\n \n \n );\n }\n\n const containerClassName = buildClassName('EmojiPicker', className);\n\n if (!emojis || !canRenderContents) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n
\n {allCategories.map(renderCategoryButton)}\n
\n \n {allCategories.map((category, i) => (\n = i - 1 && activeCategoryIndex <= i + 1}\n onEmojiSelect={handleEmojiSelect}\n />\n ))}\n
\n \n );\n};\n\nasync function ensureEmojiData() {\n if (!emojiDataPromise) {\n emojiDataPromise = import('emoji-data-ios/emoji-data.json') as unknown as Promise;\n emojiRawData = (await emojiDataPromise).default;\n\n emojiData = uncompressEmoji(emojiRawData);\n }\n\n return emojiDataPromise;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['recentEmojis']),\n)(EmojiPicker));\n","import React, { FC, memo, useRef } from '../../../lib/teact/teact';\n\nimport { ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport windowSize from '../../../util/windowSize';\nimport StickerButton from '../../common/StickerButton';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport buildClassName from '../../../util/buildClassName';\n\ntype OwnProps = {\n stickerSet: StickerSetOrRecent;\n loadAndPlay: boolean;\n index: number;\n observeIntersection: ObserveFn;\n shouldRender: boolean;\n onStickerSelect: (sticker: ApiSticker) => void;\n onStickerUnfave: (sticker: ApiSticker) => void;\n};\n\nconst STICKERS_PER_ROW_ON_DESKTOP = 5;\nconst STICKER_MARGIN = IS_SINGLE_COLUMN_LAYOUT ? 8 : 16;\nconst MOBILE_CONTAINER_PADDING = 8;\n\nconst StickerSet: FC = ({\n stickerSet,\n loadAndPlay,\n index,\n observeIntersection,\n shouldRender,\n onStickerSelect,\n onStickerUnfave,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const stickersPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (STICKER_SIZE_PICKER + STICKER_MARGIN))\n : STICKERS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(stickerSet.count / stickersPerRow) * (STICKER_SIZE_PICKER + STICKER_MARGIN);\n\n return (\n \n

{stickerSet.title}

\n \n {shouldRender && stickerSet.stickers && stickerSet.stickers.map((sticker) => (\n \n ))}\n \n \n );\n};\n\nexport default memo(StickerSet);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiStickerSet, ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION, STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\n\nimport Loading from '../../ui/Loading';\nimport Button from '../../ui/Button';\nimport StickerButton from '../../common/StickerButton';\nimport StickerSet from './StickerSet';\nimport StickerSetCover from './StickerSetCover';\nimport StickerSetCoverAnimated from './StickerSetCoverAnimated';\n\nimport './StickerPicker.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId?: number;\n className: string;\n loadAndPlay: boolean;\n canSendStickers: boolean;\n onStickerSelect: (sticker: ApiSticker) => void;\n};\n\ntype StateProps = {\n recentStickers: ApiSticker[];\n favoriteStickers: ApiSticker[];\n stickerSetsById: Record;\n addedSetIds?: string[];\n shouldPlay?: boolean;\n};\n\nconst SMOOTH_SCROLL_DISTANCE = 500;\nconst HEADER_BUTTON_WIDTH = 52; // px (including margin)\nconst STICKER_INTERSECTION_THROTTLE = 200;\n\nconst stickerSetIntersections: boolean[] = [];\n\nconst StickerPicker: FC = ({\n chatId,\n threadId,\n className,\n loadAndPlay,\n canSendStickers,\n recentStickers,\n favoriteStickers,\n addedSetIds,\n stickerSetsById,\n shouldPlay,\n onStickerSelect,\n}) => {\n const {\n loadRecentStickers,\n addRecentSticker,\n unfaveSticker,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n const [activeSetIndex, setActiveSetIndex] = useState(0);\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: STICKER_INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('sticker-set-')) {\n return;\n }\n\n const index = Number(id.replace('sticker-set-', ''));\n stickerSetIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = stickerSetIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveSetIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: headerRef });\n\n const lang = useLang();\n\n const areAddedLoaded = Boolean(addedSetIds);\n\n const allSets = useMemo(() => {\n if (!addedSetIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return [\n {\n id: 'recent',\n title: lang('RecentStickers'),\n stickers: recentStickers,\n count: recentStickers.length,\n },\n {\n id: 'favorite',\n title: lang('FavoriteStickers'),\n stickers: favoriteStickers,\n count: favoriteStickers.length,\n },\n ...addedSetIds.map((id) => stickerSetsById[id]).filter(Boolean),\n ];\n }, [addedSetIds, lang, recentStickers, favoriteStickers, stickerSetsById]);\n\n const noPopulatedSets = useMemo(() => (\n areAddedLoaded\n && allSets.filter((set) => set.stickers?.length).length === 0\n ), [allSets, areAddedLoaded]);\n\n useEffect(() => {\n if (loadAndPlay) {\n loadRecentStickers();\n sendMessageAction({ type: 'chooseSticker' });\n }\n }, [loadAndPlay, loadRecentStickers, sendMessageAction]);\n\n useHorizontalScroll(headerRef.current);\n\n // Scroll container and header when active set changes\n useEffect(() => {\n if (!areAddedLoaded) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeSetIndex * HEADER_BUTTON_WIDTH - (header.offsetWidth / 2 - HEADER_BUTTON_WIDTH / 2);\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [areAddedLoaded, activeSetIndex]);\n\n const selectStickerSet = useCallback((index: number) => {\n setActiveSetIndex(index);\n const stickerSetEl = document.getElementById(`sticker-set-${index}`)!;\n fastSmoothScroll(containerRef.current!, stickerSetEl, 'start', undefined, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker) => {\n onStickerSelect(sticker);\n addRecentSticker({ sticker });\n }, [addRecentSticker, onStickerSelect]);\n\n const handleStickerUnfave = useCallback((sticker: ApiSticker) => {\n unfaveSticker({ sticker });\n }, [unfaveSticker]);\n\n const handleMouseMove = useCallback(() => {\n sendMessageAction({ type: 'chooseSticker' });\n }, [sendMessageAction]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n function renderCover(stickerSet: StickerSetOrRecent, index: number) {\n const firstSticker = stickerSet.stickers?.[0];\n const buttonClassName = buildClassName(\n 'symbol-set-button sticker-set-button',\n index === activeSetIndex && 'activated',\n );\n\n if (stickerSet.id === 'recent' || stickerSet.id === 'favorite' || stickerSet.hasThumbnail || !firstSticker) {\n return (\n selectStickerSet(index)}\n >\n {stickerSet.id === 'recent' ? (\n \n ) : stickerSet.id === 'favorite' ? (\n \n ) : stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n );\n } else {\n return (\n \n );\n }\n }\n\n const fullClassName = buildClassName('StickerPicker', className);\n\n if (!areAddedLoaded || !canRenderContents || noPopulatedSets || !canSendStickers) {\n return (\n
\n {!canSendStickers ? (\n
{lang('ErrorSendRestrictedStickersAll')}
\n ) : noPopulatedSets ? (\n
{lang('NoStickers')}
\n ) : (\n \n )}\n
\n );\n }\n\n return (\n
\n \n {allSets.map(renderCover)}\n
\n \n {allSets.map((stickerSet, i) => (\n = i - 1 && activeSetIndex <= i + 1}\n onStickerSelect={handleStickerSelect}\n onStickerUnfave={handleStickerUnfave}\n />\n ))}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n setsById,\n added,\n recent,\n favorite,\n } = global.stickers;\n\n return {\n recentStickers: recent.stickers,\n favoriteStickers: favorite.stickers,\n stickerSetsById: setsById,\n addedSetIds: added.setIds,\n shouldPlay: global.settings.byKey.shouldLoopStickers,\n };\n },\n)(StickerPicker));\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiVideo } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport useBuffering from '../../hooks/useBuffering';\nimport useCanvasBlur from '../../hooks/useCanvasBlur';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\n\nimport Spinner from '../ui/Spinner';\n\nimport './GifButton.scss';\n\ntype OwnProps = {\n gif: ApiVideo;\n observeIntersection: ObserveFn;\n isDisabled?: boolean;\n className?: string;\n onClick: (gif: ApiVideo) => void;\n};\n\nconst GifButton: FC = ({\n gif, observeIntersection, isDisabled, className, onClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n\n const hasThumbnail = Boolean(gif.thumbnail?.dataUri);\n const localMediaHash = `gif${gif.id}`;\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const loadAndPlay = isIntersecting && !isDisabled;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const thumbRef = useCanvasBlur(gif.thumbnail?.dataUri, Boolean(previewBlobUrl));\n const videoData = useMedia(localMediaHash, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const shouldRenderVideo = Boolean(loadAndPlay && videoData);\n const { isBuffered, bufferingHandlers } = useBuffering(true);\n const shouldRenderSpinner = loadAndPlay && !isBuffered;\n const isVideoReady = loadAndPlay && isBuffered;\n\n useVideoCleanup(videoRef, [shouldRenderVideo]);\n\n const handleClick = useCallback(\n () => onClick({\n ...gif,\n blobUrl: videoData,\n }),\n [onClick, gif, videoData],\n );\n\n const fullClassName = buildClassName(\n 'GifButton',\n gif.width && gif.height && gif.width < gif.height ? 'vertical' : 'horizontal',\n localMediaHash,\n className,\n );\n\n return (\n \n {hasThumbnail && (\n \n )}\n {previewBlobUrl && !isVideoReady && (\n \n )}\n {shouldRenderVideo && (\n \n \n \n )}\n {shouldRenderSpinner && (\n \n )}\n \n );\n};\n\nexport default memo(GifButton);\n","import React, {\n FC, useEffect, memo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiVideo } from '../../../api/types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\n\nimport Loading from '../../ui/Loading';\nimport GifButton from '../../common/GifButton';\n\nimport './GifPicker.scss';\n\ntype OwnProps = {\n className: string;\n loadAndPlay: boolean;\n canSendGifs: boolean;\n onGifSelect: (gif: ApiVideo) => void;\n};\n\ntype StateProps = {\n savedGifs?: ApiVideo[];\n};\n\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifPicker: FC = ({\n className,\n loadAndPlay,\n canSendGifs,\n savedGifs,\n onGifSelect,\n}) => {\n const { loadSavedGifs } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n useEffect(() => {\n if (loadAndPlay) {\n loadSavedGifs();\n }\n }, [loadAndPlay, loadSavedGifs]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n return (\n \n {!canSendGifs ? (\n
Sending GIFs is not allowed in this chat.
\n ) : canRenderContents && savedGifs && savedGifs.length ? (\n savedGifs.map((gif) => (\n \n ))\n ) : canRenderContents && savedGifs ? (\n
No saved GIFs.
\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n savedGifs: global.gifs.saved.gifs,\n };\n },\n)(GifPicker));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\ntype OwnProps = {\n activeTab: SymbolMenuTabs;\n onSwitchTab: (tab: SymbolMenuTabs) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n};\n\nexport enum SymbolMenuTabs {\n 'Emoji',\n 'Stickers',\n 'GIFs',\n}\n\n// Getting enum string values for display in Tabs.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\nexport const SYMBOL_MENU_TAB_TITLES = Object.values(SymbolMenuTabs)\n .filter((value): value is string => typeof value === 'string');\n\nconst SYMBOL_MENU_TAB_ICONS = {\n [SymbolMenuTabs.Emoji]: 'icon-smile',\n [SymbolMenuTabs.Stickers]: 'icon-stickers',\n [SymbolMenuTabs.GIFs]: 'icon-gifs',\n};\n\nconst SymbolMenuFooter: FC = ({\n activeTab, onSwitchTab, onRemoveSymbol, onSearchOpen,\n}) => {\n const lang = useLang();\n\n function renderTabButton(tab: SymbolMenuTabs) {\n return (\n onSwitchTab(tab)}\n ariaLabel={SYMBOL_MENU_TAB_TITLES[tab]}\n round\n faded\n color=\"translucent\"\n >\n \n \n );\n }\n\n const handleSearchOpen = useCallback(() => {\n onSearchOpen(activeTab === SymbolMenuTabs.Stickers ? 'stickers' : 'gifs');\n }, [activeTab, onSearchOpen]);\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n return (\n
\n {activeTab !== SymbolMenuTabs.Emoji && (\n \n \n \n )}\n\n {renderTabButton(SymbolMenuTabs.Emoji)}\n {renderTabButton(SymbolMenuTabs.Stickers)}\n {renderTabButton(SymbolMenuTabs.GIFs)}\n\n {activeTab === SymbolMenuTabs.Emoji && (\n \n \n \n )}\n
\n );\n};\n\nexport default memo(SymbolMenuFooter);\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiSticker, ApiVideo } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { fastRaf } from '../../../util/schedulers';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Menu from '../../ui/Menu';\nimport Transition from '../../ui/Transition';\nimport EmojiPicker from './EmojiPicker';\nimport StickerPicker from './StickerPicker';\nimport GifPicker from './GifPicker';\nimport SymbolMenuFooter, { SYMBOL_MENU_TAB_TITLES, SymbolMenuTabs } from './SymbolMenuFooter';\nimport Portal from '../../ui/Portal';\n\nimport './SymbolMenu.scss';\n\nconst ANIMATION_DURATION = 350;\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n onLoad: () => void;\n onClose: () => void;\n onEmojiSelect: (emoji: string) => void;\n onStickerSelect: (sticker: ApiSticker, shouldPreserveInput?: boolean) => void;\n onGifSelect: (gif: ApiVideo) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n addRecentEmoji: AnyToVoidFunction;\n};\n\ntype StateProps = {\n isLeftColumnShown: boolean;\n};\n\nlet isActivated = false;\n\nconst SymbolMenu: FC = ({\n chatId,\n threadId,\n isOpen,\n canSendStickers,\n canSendGifs,\n isLeftColumnShown,\n onLoad,\n onClose,\n onEmojiSelect,\n onStickerSelect,\n onGifSelect,\n onRemoveSymbol,\n onSearchOpen,\n addRecentEmoji,\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [recentEmojis, setRecentEmojis] = useState([]);\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, onClose, false, false);\n\n if (!isActivated && isOpen) {\n isActivated = true;\n }\n\n useEffect(() => {\n onLoad();\n }, [onLoad]);\n\n useLayoutEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return undefined;\n }\n\n if (isOpen) {\n document.body.classList.add('enable-symbol-menu-transforms');\n document.body.classList.add('is-symbol-menu-open');\n }\n\n return () => {\n if (isOpen) {\n fastRaf(() => {\n document.body.classList.remove('is-symbol-menu-open');\n setTimeout(() => {\n document.body.classList.remove('enable-symbol-menu-transforms');\n }, ANIMATION_DURATION);\n });\n }\n };\n }, [isOpen]);\n\n const recentEmojisRef = useRef(recentEmojis);\n recentEmojisRef.current = recentEmojis;\n useEffect(() => {\n if (!recentEmojisRef.current.length) {\n return;\n }\n\n recentEmojisRef.current.forEach((name) => {\n addRecentEmoji({ emoji: name });\n });\n\n setRecentEmojis([]);\n }, [isOpen, activeTab, addRecentEmoji]);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n setRecentEmojis((emojis) => {\n return [...emojis, name];\n });\n\n onEmojiSelect(emoji);\n }, [onEmojiSelect]);\n\n const handleSearch = useCallback((type: 'stickers' | 'gifs') => {\n onClose();\n onSearchOpen(type);\n }, [onClose, onSearchOpen]);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker) => {\n onStickerSelect(sticker, true);\n }, [onStickerSelect]);\n\n const lang = useLang();\n\n function renderContent(isActive: boolean, isFrom: boolean) {\n switch (activeTab) {\n case SymbolMenuTabs.Emoji:\n return (\n \n );\n case SymbolMenuTabs.Stickers:\n return (\n \n );\n case SymbolMenuTabs.GIFs:\n return (\n \n );\n }\n\n return undefined;\n }\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n const content = (\n <>\n
\n {isActivated && (\n \n {renderContent}\n \n )}\n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n \n );\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'SymbolMenu mobile-menu',\n transitionClassNames,\n !isLeftColumnShown && 'middle-column-open',\n );\n\n return (\n \n
\n {content}\n
\n
\n );\n }\n\n return (\n \n {content}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isLeftColumnShown: global.isLeftColumnShown,\n };\n },\n)(SymbolMenu));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { CONTENT_TYPES_WITH_PREVIEW } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './AttachMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n onFileSelect: (files: File[], isQuick: boolean) => void;\n onPollCreate: () => void;\n onClose: () => void;\n};\n\nconst AttachMenu: FC = ({\n isOpen, canAttachMedia, canAttachPolls, onFileSelect, onPollCreate, onClose,\n}) => {\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n\n const handleFileSelect = useCallback((e: Event, isQuick: boolean) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n onFileSelect(Array.from(files), isQuick);\n }\n }, [onFileSelect]);\n\n const handleQuickSelect = useCallback(() => {\n openSystemFilesDialog(\n Array.from(CONTENT_TYPES_WITH_PREVIEW).join(','),\n (e) => handleFileSelect(e, true),\n );\n }, [handleFileSelect]);\n\n const handleDocumentSelect = useCallback(() => {\n openSystemFilesDialog('*', (e) => handleFileSelect(e, false));\n }, [handleFileSelect]);\n\n const lang = useLang();\n\n return (\n \n {/*\n ** Using ternary operator here causes some attributes from first clause\n ** transferring to the fragment content in the second clause\n */}\n {!canAttachMedia && (\n Posting media content is not allowed in this group.\n )}\n {canAttachMedia && (\n <>\n \n {lang('AttachmentMenu.PhotoOrVideo')}\n \n {lang('AttachDocument')}\n \n )}\n {canAttachPolls && (\n {lang('Poll')}\n )}\n \n );\n};\n\nexport default memo(AttachMenu);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\n\nimport './BotCommand.scss';\n\ntype OwnProps = {\n botCommand: ApiBotCommand;\n bot?: ApiUser;\n withAvatar?: boolean;\n focus?: boolean;\n onClick: (botCommand: ApiBotCommand) => void;\n};\n\nconst BotCommand: FC = ({\n withAvatar,\n focus,\n botCommand,\n bot,\n onClick,\n}) => {\n return (\n onClick(botCommand)}\n focus={focus}\n >\n {withAvatar && (\n \n )}\n
\n /{botCommand.command}\n {renderText(botCommand.description)}\n
\n \n );\n};\n\nexport default memo(BotCommand);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport BotCommand from './BotCommand';\n\nimport './BotCommandTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n withUsername?: boolean;\n botCommands?: ApiBotCommand[];\n onClick: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n};\n\nconst BotCommandTooltip: FC = ({\n usersById,\n isOpen,\n withUsername,\n botCommands,\n onClick,\n onClose,\n}) => {\n const { sendBotCommand } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleSendCommand = useCallback(({ botId, command }: ApiBotCommand) => {\n const bot = usersById[botId];\n sendBotCommand({\n command: `/${command}${withUsername && bot ? `@${bot.username}` : ''}`,\n botId,\n });\n onClick();\n }, [onClick, sendBotCommand, usersById, withUsername]);\n\n const selectedCommandIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: botCommands,\n onSelect: handleSendCommand,\n onClose,\n });\n\n useEffect(() => {\n if (botCommands && !botCommands.length) {\n onClose();\n }\n }, [botCommands, onClose]);\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedCommandIndex, containerRef);\n }, [selectedCommandIndex]);\n\n const prevCommands = usePrevious(botCommands && botCommands.length ? botCommands : undefined, shouldRender);\n const renderedCommands = botCommands && !botCommands.length ? prevCommands : botCommands;\n\n if (!shouldRender || (renderedCommands && !renderedCommands.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'BotCommandTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedCommands && renderedCommands.map((chatBotCommand, index) => (\n \n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({\n usersById: global.users.byId,\n }),\n)(BotCommandTooltip));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\n\nimport Menu from '../../ui/Menu';\nimport BotCommand from './BotCommand';\n\nimport './BotCommandMenu.scss';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nexport type OwnProps = {\n isOpen: boolean;\n botCommands: ApiBotCommand[];\n onClose: NoneToVoidFunction;\n};\n\nconst BotCommandMenu: FC = ({\n isOpen, botCommands, onClose,\n}) => {\n const { sendBotCommand } = getDispatch();\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n\n const handleClick = useCallback((botCommand: ApiBotCommand) => {\n sendBotCommand({\n command: `/${botCommand.command}`,\n botId: botCommand.botId,\n });\n onClose();\n }, [onClose, sendBotCommand]);\n\n return (\n \n {botCommands.map((botCommand) => (\n \n ))}\n \n );\n};\n\nexport default memo(BotCommandMenu);\n","import React, {\n FC, memo, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\n\nimport Loading from '../../ui/Loading';\nimport StickerButton from '../../common/StickerButton';\n\nimport './StickerTooltip.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n onStickerSelect: (sticker: ApiSticker) => void;\n};\n\ntype StateProps = {\n stickers?: ApiSticker[];\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerTooltip: FC = ({\n chatId,\n threadId,\n isOpen,\n onStickerSelect,\n stickers,\n}) => {\n const { clearStickersForEmoji } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const prevStickers = usePrevious(stickers, true);\n const displayedStickers = stickers || prevStickers;\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n useEffect(() => (isOpen ? captureEscKeyListener(clearStickersForEmoji) : undefined), [isOpen, clearStickersForEmoji]);\n\n const handleMouseEnter = () => {\n document.body.classList.add('no-select');\n };\n\n const handleMouseMove = () => {\n sendMessageAction({ type: 'chooseSticker' });\n };\n\n const handleMouseLeave = () => {\n document.body.classList.remove('no-select');\n };\n\n const className = buildClassName(\n 'StickerTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n !(displayedStickers?.length) && 'hidden',\n );\n\n return (\n \n {shouldRender && displayedStickers ? (\n displayedStickers.map((sticker) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { stickers } = global.stickers.forEmoji;\n\n return { stickers };\n },\n)(StickerTooltip));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './CustomSendMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onSilentSend?: NoneToVoidFunction;\n onScheduleSend?: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst CustomSendMenu: FC = ({\n isOpen, onSilentSend, onScheduleSend, onClose, onCloseAnimationEnd,\n}) => {\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n\n const lang = useLang();\n\n return (\n \n {onSilentSend && {lang('SendWithoutSound')}}\n {onScheduleSend && {lang('ScheduleMessage')}}\n \n );\n};\n\nexport default memo(CustomSendMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport findInViewport from '../../../util/findInViewport';\nimport isFullyVisible from '../../../util/isFullyVisible';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevDuringAnimation from '../../../hooks/usePrevDuringAnimation';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport Loading from '../../ui/Loading';\nimport EmojiButton from './EmojiButton';\n\nimport './EmojiTooltip.scss';\n\nconst VIEWPORT_MARGIN = 8;\nconst EMOJI_BUTTON_WIDTH = 44;\nconst CLOSE_DURATION = 350;\n\nfunction setItemVisible(index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container) {\n return;\n }\n\n const { visibleIndexes, allElements } = findInViewport(\n container,\n '.EmojiButton',\n VIEWPORT_MARGIN,\n true,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first], true))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n const newLeft = position === 'start' ? index * EMOJI_BUTTON_WIDTH : 0;\n\n fastSmoothScrollHorizontal(container, newLeft);\n }\n}\n\nexport type OwnProps = {\n isOpen: boolean;\n onEmojiSelect: (text: string) => void;\n onClose: NoneToVoidFunction;\n addRecentEmoji: AnyToVoidFunction;\n emojis: Emoji[];\n};\n\nconst EmojiTooltip: FC = ({\n isOpen,\n emojis,\n onClose,\n onEmojiSelect,\n addRecentEmoji,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const listEmojis: Emoji[] = usePrevDuringAnimation(emojis.length ? emojis : undefined, CLOSE_DURATION) || [];\n\n const handleSelectEmoji = useCallback((emoji: Emoji) => {\n onEmojiSelect(emoji.native);\n addRecentEmoji({ emoji: emoji.id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const handleClick = useCallback((native: string, id: string) => {\n onEmojiSelect(native);\n addRecentEmoji({ emoji: id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n isHorizontal: true,\n items: emojis,\n onSelect: handleSelectEmoji,\n onClose,\n });\n\n useEffect(() => {\n setItemVisible(selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const handleMouseEnter = () => {\n document.body.classList.add('no-select');\n };\n\n const handleMouseLeave = () => {\n document.body.classList.remove('no-select');\n };\n\n const className = buildClassName(\n 'EmojiTooltip composer-tooltip custom-scroll-x',\n transitionClassNames,\n );\n\n return (\n \n {shouldRender && listEmojis ? (\n listEmojis.map((emoji, index) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(EmojiTooltip);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiWebDocument } from '../../../../api/types';\n\nimport { getFirstLetters } from '../../../../util/textFormat';\nimport renderText from '../../../common/helpers/renderText';\nimport useMedia from '../../../../hooks/useMedia';\n\nimport ListItem from '../../../ui/ListItem';\n\nimport './BaseResult.scss';\nimport { preventMessageInputBlurWithBubbling } from '../../helpers/preventMessageInputBlur';\n\nexport type OwnProps = {\n focus?: boolean;\n thumbnail?: ApiWebDocument;\n thumbUrl?: string;\n title?: string;\n description?: string;\n transitionClassNames?: string;\n onClick: NoneToVoidFunction;\n};\n\nconst BaseResult: FC = ({\n title,\n description,\n thumbnail,\n thumbUrl,\n focus,\n transitionClassNames = '',\n onClick,\n}) => {\n let content: string | undefined = '';\n\n const thumbnailDataUrl = useMedia(thumbnail ? `webDocument:${thumbnail.url}` : undefined);\n thumbUrl = thumbUrl || thumbnailDataUrl;\n\n if (thumbUrl) {\n content = (\n \"\"\n );\n } else if (title) {\n content = getFirstLetters(title, 1);\n }\n\n return (\n \n \n {typeof content === 'string' ? renderText(content) : content}\n \n
\n {title && (
{title}
)}\n {description && (
{description}
)}\n
\n \n );\n};\n\nexport default memo(BaseResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiPhoto, ApiThumbnail, ApiWebDocument,\n} from '../../../../api/types';\n\nimport buildClassName from '../../../../util/buildClassName';\nimport useMedia from '../../../../hooks/useMedia';\nimport useMediaTransition from '../../../../hooks/useMediaTransition';\n\nimport BaseResult from './BaseResult';\n\nimport './MediaResult.scss';\n\nexport type OwnProps = {\n focus?: boolean;\n isForGallery?: boolean;\n inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst MediaResult: FC = ({\n focus, isForGallery, inlineResult, onClick,\n}) => {\n let photo: ApiPhoto | undefined;\n let thumbnail: ApiThumbnail | undefined;\n let webThumbnail: ApiWebDocument | undefined;\n\n if ('photo' in inlineResult) {\n photo = inlineResult.photo;\n }\n // For results with type=video (for example @stikstokbot)\n if ('thumbnail' in inlineResult) {\n thumbnail = inlineResult.thumbnail;\n }\n if ('webThumbnail' in inlineResult && isForGallery) {\n webThumbnail = inlineResult.webThumbnail;\n }\n\n const thumbnailDataUrl = useMedia(webThumbnail ? `webDocument:${webThumbnail.url}` : undefined);\n const mediaBlobUrl = useMedia(photo && `photo${photo.id}?size=m`);\n const transitionClassNames = useMediaTransition(mediaBlobUrl);\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n if (isForGallery) {\n return (\n
\n \"\"\n \"\"\n
\n );\n }\n\n const { title, description } = inlineResult;\n\n return (\n \n );\n};\n\nexport default memo(MediaResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineResult } from '../../../../api/types';\n\nimport BaseResult from './BaseResult';\n\nexport type OwnProps = {\n focus?: boolean;\n inlineResult: ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst ArticleResult: FC = ({ focus, inlineResult, onClick }) => {\n const {\n title, url, description, webThumbnail,\n } = inlineResult;\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n return (\n \n );\n};\n\nexport default memo(ArticleResult);\n","import React, {\n FC, memo, useCallback,\n} from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult } from '../../../../api/types';\n\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport GifButton from '../../../common/GifButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst GifResult: FC = ({\n inlineResult, observeIntersection, onClick,\n}) => {\n const { gif } = inlineResult;\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n if (!gif) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(GifResult);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult } from '../../../../api/types';\n\nimport { STICKER_SIZE_INLINE_BOT_RESULT } from '../../../../config';\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport StickerButton from '../../../common/StickerButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst StickerResult: FC = ({ inlineResult, observeIntersection, onClick }) => {\n const { sticker } = inlineResult;\n\n if (!sticker) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(StickerResult);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { throttle } from '../../../util/schedulers';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport MediaResult from './inlineResults/MediaResult';\nimport ArticleResult from './inlineResults/ArticleResult';\nimport GifResult from './inlineResults/GifResult';\nimport StickerResult from './inlineResults/StickerResult';\nimport ListItem from '../../ui/ListItem';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\nimport './InlineBotTooltip.scss';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nexport type OwnProps = {\n isOpen: boolean;\n botId?: string;\n isGallery?: boolean;\n inlineBotResults?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n switchPm?: ApiBotInlineSwitchPm;\n onSelectResult: (inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult) => void;\n loadMore: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\nconst InlineBotTooltip: FC = ({\n isOpen,\n botId,\n isGallery,\n inlineBotResults,\n switchPm,\n loadMore,\n onClose,\n onSelectResult,\n}) => {\n const {\n openChat,\n startBot,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n isDisabled: !isOpen,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (direction === LoadMoreDirection.Backwards) {\n runThrottled(loadMore);\n }\n }, [loadMore]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n shouldRemoveSelectionOnReset: isGallery,\n noArrowNavigation: isGallery,\n items: inlineBotResults,\n onSelect: onSelectResult,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const handleSendPm = useCallback(() => {\n openChat({ id: botId });\n startBot({ botId, param: switchPm!.startParam });\n }, [botId, openChat, startBot, switchPm]);\n\n const prevInlineBotResults = usePrevious(\n inlineBotResults?.length\n ? inlineBotResults\n : undefined,\n shouldRender,\n );\n const renderedInlineBotResults = inlineBotResults && !inlineBotResults.length\n ? prevInlineBotResults\n : inlineBotResults;\n\n if (!shouldRender || !(renderedInlineBotResults?.length || switchPm)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'InlineBotTooltip composer-tooltip',\n IS_TOUCH_ENV ? 'no-scrollbar' : 'custom-scroll',\n isGallery && 'gallery',\n transitionClassNames,\n );\n\n function renderSwitchPm() {\n return (\n \n {switchPm!.text}\n \n );\n }\n\n function renderContent() {\n return renderedInlineBotResults!.map((inlineBotResult, index) => {\n switch (inlineBotResult.type) {\n case 'gif':\n return (\n \n );\n\n case 'photo':\n return (\n \n );\n\n case 'sticker':\n return (\n \n );\n\n case 'video':\n case 'file':\n case 'game':\n return (\n \n );\n case 'article':\n case 'audio':\n return (\n \n );\n\n default:\n return undefined;\n }\n });\n }\n\n return (\n \n {switchPm && renderSwitchPm()}\n {renderedInlineBotResults?.length && renderContent()}\n \n );\n};\n\nexport default memo(InlineBotTooltip);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\n\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport renderText from '../../common/helpers/renderText';\nimport { getUserFullName, isUserId } from '../../../modules/helpers';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport { getDispatch, getGlobal } from '../../../lib/teact/teactn';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\nimport Menu from '../../ui/Menu';\n\nimport './SendAsMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n chatId?: string;\n selectedSendAsId?: string;\n sendAsIds?: string[];\n};\n\nconst SendAsMenu: FC = ({\n isOpen,\n onClose,\n chatId,\n selectedSendAsId,\n sendAsIds,\n}) => {\n const { saveDefaultSendAs } = getDispatch();\n\n // No need for expensive global updates on users and chats, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [handleMouseEnter, handleMouseLeave, markMouseInside] = useMouseInside(isOpen, onClose, undefined);\n\n useEffect(() => {\n if (isOpen) {\n markMouseInside();\n }\n }, [isOpen, markMouseInside]);\n\n const handleUserSelect = useCallback((id: string) => {\n onClose();\n saveDefaultSendAs({ chatId, sendAsId: id });\n }, [chatId, onClose, saveDefaultSendAs]);\n\n const selectedSendAsIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: sendAsIds,\n onSelect: handleUserSelect,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedSendAsIndex, containerRef);\n }, [selectedSendAsIndex]);\n\n useEffect(() => {\n if (sendAsIds && !sendAsIds.length) {\n onClose();\n }\n }, [sendAsIds, onClose]);\n\n return (\n \n
{lang('SendMessageAsTitle')}
\n {usersById && chatsById && sendAsIds?.map((id, index) => {\n const user = isUserId(id) ? usersById[id] : undefined;\n const chat = !user ? chatsById[id] : undefined;\n const fullName = user ? getUserFullName(user) : chat?.title;\n\n return (\n handleUserSelect(id)}\n focus={selectedSendAsIndex === index}\n >\n \n
\n
\n

{fullName && renderText(fullName)}

\n
\n {user\n ? lang('VoipGroupPersonalAccount')\n : lang('Subscribers', chat?.membersCount, 'i')}\n \n
\n \n );\n })}\n \n );\n};\n\nexport default memo(SendAsMenu);\n","import React, {\n FC, useMemo, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage, ApiUser, ApiChat } from '../../api/types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\nimport {\n selectUser,\n selectChatMessages,\n selectChat,\n selectCurrentTextSearch,\n} from '../../modules/selectors';\nimport {\n getChatTitle,\n getUserFullName,\n isChatChannel,\n} from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { renderMessageSummary } from '../common/helpers/renderMessageText';\nimport renderText from '../common/helpers/renderText';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport LastMessageMeta from '../common/LastMessageMeta';\nimport Avatar from '../common/Avatar';\n\nimport './RightSearch.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n messagesById?: Record;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n};\n\nconst RightSearch: FC = ({\n chatId,\n threadId,\n onClose,\n isActive,\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n}) => {\n const {\n searchTextMessagesLocal,\n focusMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n const [viewportIds, getMore] = useInfiniteScroll(searchTextMessagesLocal, foundIds);\n\n const viewportResults = useMemo(() => {\n if (!query || !viewportIds?.length || !messagesById) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return viewportIds.map((id) => {\n const message = messagesById[id];\n if (!message) {\n return undefined;\n }\n\n const senderUser = message.senderId ? selectUser(getGlobal(), message.senderId) : undefined;\n\n let senderChat;\n if (chat && isChatChannel(chat)) {\n senderChat = chat;\n } else if (message.forwardInfo) {\n const { isChannelPost, fromChatId } = message.forwardInfo;\n senderChat = isChannelPost && fromChatId ? selectChat(getGlobal(), fromChatId) : undefined;\n } else {\n senderChat = message.senderId ? selectChat(getGlobal(), message.senderId) : undefined;\n }\n\n return {\n message,\n senderUser,\n senderChat,\n onClick: () => focusMessage({ chatId, threadId, messageId: id }),\n };\n }).filter(Boolean);\n }, [query, viewportIds, messagesById, chat, focusMessage, chatId, threadId]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, true, (index) => {\n const foundResult = viewportResults?.[index === -1 ? 0 : index];\n if (foundResult) {\n foundResult.onClick();\n }\n }, '.ListItem-button', true);\n\n const renderSearchResult = ({\n message, senderUser, senderChat, onClick,\n }: {\n message: ApiMessage;\n senderUser?: ApiUser;\n senderChat?: ApiChat;\n onClick: NoneToVoidFunction;\n }) => {\n const title = senderChat ? getChatTitle(lang, senderChat) : getUserFullName(senderUser);\n const text = renderMessageSummary(lang, message, undefined, query);\n\n return (\n \n \n
\n
\n

{title && renderText(title)}

\n \n
\n
\n {text}\n
\n
\n \n );\n };\n\n const isOnTop = viewportIds?.[0] === foundIds?.[0];\n\n return (\n \n {isOnTop && (\n

\n {!query ? (\n lang('lng_dlg_search_for_messages')\n ) : (totalCount === 0 || !viewportResults.length) ? (\n lang('lng_search_no_results')\n ) : totalCount === 1 ? (\n '1 message found'\n ) : (\n `${(viewportResults.length && (totalCount || viewportResults.length))} messages found`\n )}\n

\n )}\n {viewportResults.map(renderSearchResult)}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const messagesById = chat && selectChatMessages(global, chat.id);\n if (!chat || !messagesById) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n };\n },\n)(RightSearch));\n","import React, {\n FC, useEffect, memo, useMemo, useCallback,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiStickerSet } from '../../api/types';\nimport { ObserveFn } from '../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_SEARCH } from '../../config';\nimport { selectShouldLoopStickers, selectStickerSet } from '../../modules/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport useOnChange from '../../hooks/useOnChange';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport StickerButton from '../common/StickerButton';\nimport StickerSetModal from '../common/StickerSetModal.async';\nimport Spinner from '../ui/Spinner';\n\ntype OwnProps = {\n stickerSetId: string;\n observeIntersection: ObserveFn;\n isSomeModalOpen: boolean;\n onModalToggle: (isOpen: boolean) => void;\n};\n\ntype StateProps = {\n set?: ApiStickerSet;\n shouldPlay?: boolean;\n};\n\nconst STICKERS_TO_DISPLAY = 5;\n\nconst StickerSetResult: FC = ({\n stickerSetId, observeIntersection, set, shouldPlay,\n isSomeModalOpen, onModalToggle,\n}) => {\n const { loadStickers, toggleStickerSet } = getDispatch();\n\n const lang = useLang();\n const isAdded = set && Boolean(set.installedDate);\n const areStickersLoaded = Boolean(set?.stickers);\n\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n useOnChange(() => {\n onModalToggle(isModalOpen);\n }, [isModalOpen, onModalToggle]);\n\n const displayedStickers = useMemo(() => {\n if (!set) {\n return [];\n }\n\n const coverStickerIds = (set.covers || []).map(({ id }) => id);\n const otherStickers = set.stickers ? set.stickers.filter(({ id }) => !coverStickerIds.includes(id)) : [];\n\n return [...(set.covers || []), ...otherStickers].slice(0, STICKERS_TO_DISPLAY);\n }, [set]);\n\n useEffect(() => {\n // Featured stickers are initialized with one sticker in collection (cover of SickerSet)\n if (!areStickersLoaded && displayedStickers.length < STICKERS_TO_DISPLAY) {\n loadStickers({ stickerSetId });\n }\n }, [areStickersLoaded, displayedStickers.length, loadStickers, stickerSetId]);\n\n const handleAddClick = useCallback(() => {\n toggleStickerSet({ stickerSetId });\n }, [toggleStickerSet, stickerSetId]);\n\n if (!set) {\n return undefined;\n }\n\n const canRenderStickers = displayedStickers.length > 0;\n\n return (\n
\n
\n
\n

{set.title}

\n

{lang('Stickers', set.count, 'i')}

\n
\n \n {lang(isAdded ? 'Stickers.Installed' : 'Stickers.Install')}\n \n
\n
\n {!canRenderStickers && }\n {canRenderStickers && displayedStickers.map((sticker) => (\n \n ))}\n
\n {canRenderStickers && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { stickerSetId }): StateProps => {\n return {\n set: selectStickerSet(global, stickerSetId),\n shouldPlay: selectShouldLoopStickers(global),\n };\n },\n)(StickerSetResult));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { throttle } from '../../util/schedulers';\nimport { selectCurrentStickerSearch } from '../../modules/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Loading from '../ui/Loading';\nimport StickerSetResult from './StickerSetResult';\n\nimport './StickerSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n featuredIds?: string[];\n resultIds?: string[];\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst StickerSearch: FC = ({\n onClose,\n isActive,\n query,\n featuredIds,\n resultIds,\n}) => {\n const { loadFeaturedStickers } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadFeaturedStickers();\n });\n });\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!query && featuredIds) {\n return featuredIds.map((id) => (\n \n ));\n }\n\n if (resultIds) {\n if (!resultIds.length) {\n return

Nothing found.

;\n }\n\n return resultIds.map((id) => (\n \n ));\n }\n\n return ;\n }\n\n return (\n
\n {renderContent()}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentStickerSearch(global);\n const { query, resultIds } = currentSearch || {};\n const { featured } = global.stickers;\n\n return {\n query,\n featuredIds: featured.setIds,\n resultIds,\n };\n },\n)(StickerSearch));\n","import React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat, ApiVideo } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport {\n selectCurrentGifSearch,\n selectChat,\n selectIsChatWithBot,\n selectCurrentMessageList,\n} from '../../modules/selectors';\nimport { getAllowedAttachmentOptions } from '../../modules/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport GifButton from '../common/GifButton';\nimport Loading from '../ui/Loading';\n\nimport './GifSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n results?: ApiVideo[];\n chat?: ApiChat;\n isChatWithBot?: boolean;\n};\n\nconst PRELOAD_BACKWARDS = 96; // GIF Search bot results are multiplied by 24\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifSearch: FC = ({\n onClose,\n isActive,\n query,\n results,\n chat,\n isChatWithBot,\n}) => {\n const {\n searchMoreGifs,\n sendMessage,\n setGifSearchQuery,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n const { canSendGifs } = getAllowedAttachmentOptions(chat, isChatWithBot);\n\n const handleGifClick = useCallback((gif: ApiVideo) => {\n if (canSendGifs) {\n sendMessage({ gif });\n }\n\n if (IS_TOUCH_ENV) {\n setGifSearchQuery({ query: undefined });\n }\n }, [canSendGifs, sendMessage, setGifSearchQuery]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!results) {\n return (\n \n );\n }\n\n if (!results.length) {\n return (\n

{lang('NoGIFsFound')}

\n );\n }\n\n return results.map((gif) => (\n \n ));\n }\n\n const hasResults = Boolean(query !== undefined && results && results.length);\n\n return (\n
\n \n {renderContent()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentGifSearch(global);\n const { query, results } = currentSearch || {};\n const { chatId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const isChatWithBot = chat ? selectIsChatWithBot(global, chat) : undefined;\n\n return {\n query,\n results,\n chat,\n isChatWithBot,\n };\n },\n)(GifSearch));\n","import React, {\n FC, useCallback, useState, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat,\n ApiMessage,\n ApiPollAnswer,\n ApiPollResult,\n} from '../../api/types';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\n\nimport ShowMoreButton from '../ui/ShowMoreButton';\nimport Loading from '../ui/Loading';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from '../common/PrivateChatInfo';\n\nimport './PollAnswerResults.scss';\n\ntype OwnProps = {\n chat: ApiChat;\n message: ApiMessage;\n answer: ApiPollAnswer;\n answerVote: ApiPollResult;\n totalVoters: number;\n};\n\ntype StateProps = {\n voters?: string[];\n offset: string;\n};\n\nconst INITIAL_LIMIT = 4;\nconst VIEW_MORE_LIMIT = 50;\n\nconst PollAnswerResults: FC = ({\n chat,\n message,\n answer,\n answerVote,\n totalVoters,\n voters,\n offset,\n}) => {\n const {\n loadPollOptionResults,\n openChat,\n closePollResults,\n } = getDispatch();\n\n const prevVotersCount = usePrevious(answerVote.votersCount);\n const [isLoading, setIsLoading] = useState(true);\n const areVotersLoaded = Boolean(voters);\n const { option, text } = answer;\n const lang = useLang();\n\n useEffect(() => {\n // For update when new votes arrive or when the user takes back his vote\n if (!areVotersLoaded || prevVotersCount !== answerVote.votersCount) {\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: INITIAL_LIMIT, shouldResetVoters: true,\n });\n }\n // eslint-disable-next-line\n }, [answerVote.votersCount, areVotersLoaded]);\n\n const handleViewMoreClick = useCallback(() => {\n setIsLoading(true);\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: VIEW_MORE_LIMIT,\n });\n }, [chat, loadPollOptionResults, message.id, offset, option]);\n\n useEffect(() => {\n setIsLoading(false);\n }, [voters]);\n\n const handleMemberClick = useCallback((id: string) => {\n openChat({ id });\n closePollResults();\n }, [closePollResults, openChat]);\n\n function renderViewMoreButton() {\n const leftVotersCount = answerVote.votersCount - voters!.length;\n\n return answerVote.votersCount > INITIAL_LIMIT && leftVotersCount > 0 && (\n \n );\n }\n\n return (\n
\n
\n {voters\n ? voters.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))\n : }\n {voters && renderViewMoreButton()}\n
\n
\n {text}\n \n {getPercentage(answerVote.votersCount, totalVoters)}%\n \n
\n
\n );\n};\n\nfunction getPercentage(value: number, total: number) {\n return total > 0 ? ((value / total) * 100).toFixed() : 0;\n}\n\nexport default memo(withGlobal(\n (global, { answer }: OwnProps): StateProps => {\n const { voters, offsets } = global.pollResults;\n\n return {\n voters: voters?.[answer.option],\n offset: (offsets?.[answer.option]) || '',\n };\n },\n)(PollAnswerResults));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage, ApiChat } from '../../api/types';\nimport { selectChat, selectChatMessage } from '../../modules/selectors';\nimport { buildCollectionByKey } from '../../util/iteratees';\nimport { getMessagePoll } from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport PollAnswerResults from './PollAnswerResults';\nimport Loading from '../ui/Loading';\n\nimport './PollResults.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n message?: ApiMessage;\n lastSyncTime?: number;\n};\n\nconst PollResults: FC = ({\n onClose,\n isActive,\n chat,\n message,\n lastSyncTime,\n}) => {\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n if (!message || !chat) {\n return ;\n }\n\n const { summary, results } = getMessagePoll(message)!;\n if (!results.results) {\n return undefined;\n }\n\n const resultsByOption = buildCollectionByKey(results.results, 'option');\n\n return (\n
\n

{renderText(summary.question, ['emoji', 'br'])}

\n
\n {lastSyncTime && summary.answers.map((answer) => (\n \n ))}\n {!lastSyncTime && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n pollResults: { chatId, messageId },\n lastSyncTime,\n } = global;\n\n if (!chatId || !messageId) {\n return {};\n }\n\n const chat = selectChat(global, chatId);\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n chat,\n message,\n lastSyncTime,\n };\n },\n)(PollResults));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport {\n selectChat, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../../../modules/selectors';\nimport { selectIsChatMuted } from '../../../modules/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n userId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n progress?: ManagementProgress;\n isMuted?: boolean;\n};\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide first name';\n\nconst ManageUser: FC = ({\n userId,\n user,\n progress,\n isMuted,\n onClose,\n isActive,\n}) => {\n const {\n updateContact,\n deleteContact,\n closeManagement,\n } = getDispatch();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const currentFirstName = user ? (user.firstName || '') : '';\n const currentLastName = user ? (user.lastName || '') : '';\n\n const [firstName, setFirstName] = useState(currentFirstName);\n const [lastName, setLastName] = useState(currentLastName);\n const [isNotificationsEnabled, setIsNotificationsEnabled] = useState(!isMuted);\n\n useEffect(() => {\n setIsNotificationsEnabled(!isMuted);\n }, [isMuted]);\n\n useEffect(() => {\n setIsProfileFieldsTouched(false);\n closeDeleteDialog();\n }, [closeDeleteDialog, userId]);\n\n useEffect(() => {\n setFirstName(currentFirstName);\n setLastName(currentLastName);\n }, [currentFirstName, currentLastName, user]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n closeDeleteDialog();\n }\n }, [closeDeleteDialog, progress]);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleNotificationChange = useCallback((e: ChangeEvent) => {\n setIsNotificationsEnabled(e.target.checked);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n }\n\n updateContact({\n userId,\n isMuted: !isNotificationsEnabled,\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n });\n }, [firstName, lastName, updateContact, userId, isNotificationsEnabled]);\n\n const handleDeleteContact = useCallback(() => {\n deleteContact({ userId });\n closeDeleteDialog();\n closeManagement();\n }, [closeDeleteDialog, closeManagement, deleteContact, userId]);\n\n if (!user) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n \n {lang('DeleteContact')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n const chat = selectChat(global, userId)!;\n const { progress } = global.management;\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n\n return {\n user, progress, isMuted,\n };\n },\n)(ManageUser));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport {\n ApiChat, ApiChatBannedRights, ApiExportedInvite, ApiMediaFormat,\n} from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight, isChatBasicGroup } from '../../../modules/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { selectChat } from '../../../modules/selectors';\nimport { formatInteger } from '../../../util/textFormat';\nimport renderText from '../../common/helpers/renderText';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isBasicGroup: boolean;\n hasLinkedChannel: boolean;\n canChangeInfo?: boolean;\n canBanUsers?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst GROUP_TITLE_EMPTY = 'Group title can\\'t be empty';\n\n// Some checkboxes control multiple rights, and some rights are not controlled from Permissions screen,\n// so we need to define the amount manually\nconst TOTAL_PERMISSIONS_COUNT = 8;\n\nconst ManageGroup: FC = ({\n chatId,\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo,\n canBanUsers,\n canInvite,\n onScreenSelect,\n onClose,\n isActive,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n}) => {\n const {\n togglePreHistoryHidden,\n updateChat,\n deleteChat,\n leaveChannel,\n deleteChannel,\n closeManagement,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getDispatch();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const currentTitle = chat.title;\n const currentAbout = chat.fullInfo ? (chat.fullInfo.about || '') : '';\n\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle || '');\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const isPublicGroup = chat.username || hasLinkedChannel;\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime && canInvite) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, canInvite, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickPermissions = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = () => {\n onScreenSelect(ManagementScreens.Invites);\n };\n\n const handleClickRequests = () => {\n onScreenSelect(ManagementScreens.JoinRequests);\n };\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateGroup = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(GROUP_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleClickMembers = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupMembers);\n }, [onScreenSelect]);\n\n const handleTogglePreHistory = useCallback(() => {\n if (!chat.fullInfo) {\n return;\n }\n\n const { isPreHistoryHidden } = chat.fullInfo;\n\n togglePreHistoryHidden({ chatId: chat.id, isEnabled: !isPreHistoryHidden });\n }, [chat, togglePreHistoryHidden]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n const enabledPermissionsCount = useMemo(() => {\n if (!chat.defaultBannedRights) {\n return 0;\n }\n\n let totalCount = [\n 'sendMessages',\n 'sendMedia',\n 'embedLinks',\n 'sendPolls',\n 'changeInfo',\n 'inviteUsers',\n 'pinMessages',\n ].filter(\n (key) => !chat.defaultBannedRights![key as keyof ApiChatBannedRights],\n ).length;\n\n const { sendStickers, sendGifs } = chat.defaultBannedRights;\n\n // These two rights are controlled with a single checkbox\n if (!sendStickers && !sendGifs) {\n totalCount += 1;\n }\n\n return totalCount;\n }, [chat]);\n\n const adminsCount = (chat.fullInfo?.adminMembers?.length) || 0;\n\n const handleDeleteGroup = useCallback(() => {\n if (isBasicGroup) {\n deleteChat({ chatId: chat.id });\n } else if (!chat.isCreator) {\n leaveChannel({ chatId: chat.id });\n } else {\n deleteChannel({ chatId: chat.id });\n }\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [\n isBasicGroup, chat.isCreator, chat.id,\n closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, deleteChat, openChat,\n ]);\n\n if (chat.isRestricted) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('GroupType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n {hasLinkedChannel && (\n \n {lang('LinkedChannel')}\n {lang('DiscussionUnlink')}\n \n )}\n \n {lang('ChannelPermissions')}\n \n {enabledPermissionsCount}/{TOTAL_PERMISSIONS_COUNT}\n \n \n\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n \n {lang('ChannelAdministrators')}\n {formatInteger(adminsCount)}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('MemberRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n
\n
\n \n {lang('GroupMembers')}\n {formatInteger(chat.membersCount ?? 0)}\n \n\n {!isPublicGroup && chat.fullInfo && (\n
\n \n
\n )}\n
\n
\n \n {lang('DeleteMega')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const hasLinkedChannel = Boolean(chat.fullInfo?.linkedChatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'changeInfo'),\n canBanUsers: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'banUsers'),\n canInvite: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'inviteUsers'),\n exportedInvites: invites,\n lastSyncTime: global.lastSyncTime,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageGroup));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatBannedRights, ApiChatMember } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../modules/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n currentUserId?: string;\n};\n\nconst FLOATING_BUTTON_ANIMATION_TIMEOUT_MS = 250;\n\nfunction getLangKeyForBannedRightKey(key: string) {\n switch (key) {\n case 'sendMessages':\n return 'UserRestrictionsNoSend';\n case 'sendMedia':\n return 'UserRestrictionsNoSendMedia';\n case 'sendStickers':\n return 'UserRestrictionsNoSendStickers';\n case 'embedLinks':\n return 'UserRestrictionsNoEmbedLinks';\n case 'sendPolls':\n return 'UserRestrictionsNoSendPolls';\n case 'changeInfo':\n return 'UserRestrictionsNoChangeInfo';\n case 'inviteUsers':\n return 'UserRestrictionsInviteUsers';\n case 'pinMessages':\n return 'UserRestrictionsPinMessages';\n default:\n return undefined;\n }\n}\n\nconst ManageGroupPermissions: FC = ({\n onScreenSelect,\n onChatMemberSelect,\n chat,\n currentUserId,\n onClose,\n isActive,\n}) => {\n const { updateChatDefaultBannedRights } = getDispatch();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const handleRemovedUsersClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupRemovedUsers);\n }, [onScreenSelect]);\n\n const handleAddExceptionClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupUserPermissionsCreate);\n }, [onScreenSelect]);\n\n const handleExceptionMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n useEffect(() => {\n setPermissions((chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setTimeout(() => {\n setIsLoading(false);\n }, FLOATING_BUTTON_ANIMATION_TIMEOUT_MS);\n }, [chat]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat) {\n return;\n }\n\n setIsLoading(true);\n updateChatDefaultBannedRights({ chatId: chat.id, bannedRights: permissions });\n }, [chat, permissions, updateChatDefaultBannedRights]);\n\n const removedUsersCount = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return 0;\n }\n\n return chat.fullInfo.kickedMembers.length;\n }, [chat]);\n\n const exceptionMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return [];\n }\n\n return chat.fullInfo.members.filter(({ bannedRights }) => Boolean(bannedRights));\n }, [chat]);\n\n const getMemberExceptions = useCallback((member: ApiChatMember) => {\n const { bannedRights } = member;\n if (!bannedRights || !chat) {\n return undefined;\n }\n\n const { defaultBannedRights } = chat;\n\n return Object.keys(bannedRights).reduce((result, key) => {\n if (\n !bannedRights[key as keyof ApiChatBannedRights]\n || (defaultBannedRights?.[key as keyof ApiChatBannedRights])\n || key === 'sendInline' || key === 'viewMessages' || key === 'sendGames'\n ) {\n return result;\n }\n\n const langKey = getLangKeyForBannedRightKey(key);\n\n if (!langKey) {\n return result;\n }\n\n const translatedString = lang(langKey);\n\n return `${result}${!result.length ? translatedString : `, ${translatedString}`}`;\n }, '');\n }, [chat, lang]);\n\n return (\n
\n
\n
\n

{lang('ChannelPermissionsHeader')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n {lang('ChannelBlockedUsers')}\n {removedUsersCount}\n \n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n \n {lang('ChannelAddException')}\n \n\n {exceptionMembers.map((member) => (\n handleExceptionMemberClick(member)}\n >\n \n \n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat, currentUserId: global.currentUserId };\n },\n)(ManageGroupPermissions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { filterUsersByName } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n chat: ApiChat;\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n currentUserId?: string;\n};\n\nconst RemoveGroupUserModal: FC = ({\n chat,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadMoreMembers,\n deleteChatMember,\n } = getDispatch();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const usersId = useMemo(() => {\n const availableMemberIds = (chat.fullInfo?.members || [])\n .reduce((acc: string[], member) => {\n if (!member.isAdmin && !member.isOwner && member.userId !== currentUserId) {\n acc.push(member.userId);\n }\n return acc;\n }, []);\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return filterUsersByName(availableMemberIds, usersById, filter);\n }, [chat.fullInfo?.members, currentUserId, filter]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n deleteChatMember({ chatId: chat.id, userId });\n onClose();\n }, [chat.id, deleteChatMember, onClose]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n\n return { currentUserId };\n },\n)(RemoveGroupUserModal));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatMember, ApiUser } from '../../../api/types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport { getHasAdminRight, getUserFullName } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport RemoveGroupUserModal from './RemoveGroupUserModal';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n usersById: Record;\n canDeleteMembers?: boolean;\n};\n\nconst ManageGroupRemovedUsers: FC = ({\n chat,\n usersById,\n canDeleteMembers,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getDispatch();\n\n const lang = useLang();\n const [isRemoveUserModalOpen, openRemoveUserModal, closeRemoveUserModal] = useFlag();\n\n useHistoryBack(isActive, onClose);\n\n const removedMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return [];\n }\n\n return chat.fullInfo.kickedMembers;\n }, [chat]);\n\n const getRemovedBy = useCallback((member: ApiChatMember) => {\n if (!member.kickedByUserId) {\n return undefined;\n }\n\n const kickedByUser = usersById[member.kickedByUserId];\n if (!kickedByUser) {\n return undefined;\n }\n\n return lang('UserRemovedBy', getUserFullName(kickedByUser));\n }, [lang, usersById]);\n\n const getContextActions = useCallback((member: ApiChatMember) => {\n if (!chat) {\n return undefined;\n }\n\n return [{\n title: lang('Unblock'),\n icon: 'delete',\n destructive: true,\n handler: () => updateChatMemberBannedRights({\n chatId: chat.id,\n userId: member.userId,\n bannedRights: {},\n }),\n }];\n }, [lang, chat, updateChatMemberBannedRights]);\n\n return (\n
\n
\n
\n

{lang('NoBlockedGroup2')}

\n\n {removedMembers.map((member) => (\n \n \n \n ))}\n {canDeleteMembers && (\n \n \n \n )}\n {chat && canDeleteMembers && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById } = global.users;\n const canDeleteMembers = chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);\n\n return { chat, usersById, canDeleteMembers };\n },\n)(ManageGroupRemovedUsers));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport { ApiChat, ApiExportedInvite, ApiMediaFormat } from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight } from '../../../modules/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../modules/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { formatInteger } from '../../../util/textFormat';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isSignaturesShown: boolean;\n canChangeInfo?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst CHANNEL_TITLE_EMPTY = 'Channel title can\\'t be empty';\n\nconst ManageChannel: FC = ({\n chatId,\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo,\n canInvite,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n onScreenSelect,\n onClose,\n isActive,\n}) => {\n const {\n updateChat,\n toggleSignatures,\n closeManagement,\n leaveChannel,\n deleteChannel,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getDispatch();\n\n const currentTitle = chat ? (chat.title || '') : '';\n const currentAbout = chat?.fullInfo ? (chat.fullInfo.about || '') : '';\n const hasLinkedChat = chat?.fullInfo?.linkedChatId;\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle);\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = chat && getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const adminsCount = (chat?.fullInfo?.adminMembers?.length) || 0;\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = () => {\n onScreenSelect(ManagementScreens.Invites);\n };\n\n const handleClickRequests = () => {\n onScreenSelect(ManagementScreens.JoinRequests);\n };\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateChannel = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(CHANNEL_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleToggleSignatures = useCallback(() => {\n toggleSignatures({ chatId, isEnabled: !isSignaturesShown });\n }, [chatId, isSignaturesShown, toggleSignatures]);\n\n const handleClickSubscribers = useCallback(() => {\n onScreenSelect(ManagementScreens.ChannelSubscribers);\n }, [onScreenSelect]);\n\n const handleDeleteChannel = useCallback(() => {\n if (chat.isCreator) {\n deleteChannel({ chatId: chat.id });\n } else {\n leaveChannel({ chatId: chat.id });\n }\n\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [chat.isCreator, chat.id, closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, openChat]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n if (chat.isRestricted) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('ChannelType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n \n {lang('Discussion')}\n {hasLinkedChat ? lang('DiscussionUnlink') : lang('Add')}\n \n \n {lang('ChannelAdministrators')}\n {adminsCount}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('SubscribeRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n
\n \n
\n
\n
\n \n {lang('ChannelSubscribers')}\n {lang('Subscribers', chat.membersCount ?? 0, 'i')}\n \n
\n
\n \n {chat.isCreator ? lang('ChannelDelete') : lang('LeaveChannel')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const isSignaturesShown = Boolean(chat?.isSignaturesShown);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo: getHasAdminRight(chat, 'changeInfo'),\n canInvite: getHasAdminRight(chat, 'inviteUsers'),\n lastSyncTime: global.lastSyncTime,\n exportedInvites: invites,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageChannel));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport { selectChat, selectManagement } from '../../../modules/selectors';\nimport { isChatChannel } from '../../../modules/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport SafeLink from '../../common/SafeLink';\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport UsernameInput from '../../common/UsernameInput';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype PrivacyType = 'private' | 'public';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n isChannel: boolean;\n progress?: ManagementProgress;\n isUsernameAvailable?: boolean;\n isProtected?: boolean;\n};\n\nconst ManageChatPrivacyType: FC = ({\n chat,\n onClose,\n isActive,\n isChannel,\n progress,\n isUsernameAvailable,\n isProtected,\n}) => {\n const {\n checkPublicLink,\n updatePublicLink,\n updatePrivateLink,\n toggleIsProtected,\n } = getDispatch();\n\n const isPublic = Boolean(chat.username);\n const privateLink = chat.fullInfo?.inviteLink;\n\n const [privacyType, setPrivacyType] = useState(isPublic ? 'public' : 'private');\n const [username, setUsername] = useState();\n const [isRevokeConfirmDialogOpen, openRevokeConfirmDialog, closeRevokeConfirmDialog] = useFlag();\n\n const canUpdate = Boolean(\n (privacyType === 'public' && username && isUsernameAvailable)\n || (privacyType === 'private' && isPublic),\n );\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (privacyType && !privateLink) {\n updatePrivateLink();\n }\n }, [privacyType, privateLink, updatePrivateLink]);\n\n const handleOptionChange = useCallback((value: string) => {\n setPrivacyType(value as PrivacyType);\n }, []);\n\n const handleForwardingOptionChange = useCallback((value: string) => {\n toggleIsProtected({\n chatId: chat.id,\n isProtected: value === 'protected',\n });\n }, [chat.id, toggleIsProtected]);\n\n const handleSave = useCallback(() => {\n updatePublicLink({ username: privacyType === 'public' ? username : '' });\n }, [privacyType, updatePublicLink, username]);\n\n const handleRevokePrivateLink = useCallback(() => {\n closeRevokeConfirmDialog();\n updatePrivateLink();\n }, [closeRevokeConfirmDialog, updatePrivateLink]);\n\n const lang = useLang();\n const langPrefix1 = isChannel ? 'Channel' : 'Mega';\n const langPrefix2 = isChannel ? 'Channel' : 'Group';\n\n const options = [\n { value: 'private', label: lang(`${langPrefix1}Private`), subLabel: lang(`${langPrefix1}PrivateInfo`) },\n { value: 'public', label: lang(`${langPrefix1}Public`), subLabel: lang(`${langPrefix1}PublicInfo`) },\n ];\n\n const forwardingOptions = [{\n value: 'allowed',\n label: lang('ChannelVisibility.Forwarding.Enabled'),\n }, {\n value: 'protected',\n label: lang('ChannelVisibility.Forwarding.Disabled'),\n }];\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n

{lang(`${langPrefix2}Type`)}

\n \n
\n {privacyType === 'private' ? (\n
\n {privateLink ? (\n <>\n \n

\n {lang(`${langPrefix1}PrivateLinkHelp`)}\n

\n\n \n {lang('RevokeLink')}\n \n \n \n ) : (\n \n )}\n
\n ) : (\n
\n \n

\n {lang(`${langPrefix2}.Username.CreatePublicLinkHelp`)}\n

\n
\n )}\n
\n

\n {lang(isChannel ? 'ChannelVisibility.Forwarding.ChannelTitle' : 'ChannelVisibility.Forwarding.GroupTitle')}\n

\n \n

\n {isChannel\n ? lang('ChannelVisibility.Forwarding.ChannelInfo')\n : lang('ChannelVisibility.Forwarding.GroupInfo')}\n

\n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { isUsernameAvailable } = selectManagement(global, chatId)!;\n\n return {\n chat,\n isChannel: isChatChannel(chat),\n progress: global.management.progress,\n isUsernameAvailable,\n isProtected: chat?.isProtected,\n };\n },\n)(ManageChatPrivacyType));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_DISCUSSION_GROUPS } from '../../../config';\nimport { selectChat } from '../../../modules/selectors';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport useFlag from '../../../hooks/useFlag';\nimport renderText from '../../common/helpers/renderText';\nimport Avatar from '../../common/Avatar';\nimport { isChatChannel } from '../../../modules/helpers';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n chatsByIds: Record;\n linkedChat?: ApiChat;\n forDiscussionIds?: string[];\n isChannel?: boolean;\n};\n\nconst ManageDiscussion: FC = ({\n chat,\n onClose,\n isActive,\n chatId,\n chatsByIds,\n linkedChat,\n forDiscussionIds,\n isChannel,\n onScreenSelect,\n}) => {\n const {\n loadGroupsForDiscussion,\n linkDiscussionGroup,\n unlinkDiscussionGroup,\n } = getDispatch();\n\n const [linkedGroupId, setLinkedGroupId] = useState();\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n const [isConfirmUnlinkGroupDialogOpen, openConfirmUnlinkGroupDialog, closeConfirmUnlinkGroupDialog] = useFlag();\n const [isConfirmLinkGroupDialogOpen, openConfirmLinkGroupDialog, closeConfirmLinkGroupDialog] = useFlag();\n const lang = useLang();\n const linkedChatId = linkedChat?.id;\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n loadGroupsForDiscussion();\n }, [loadGroupsForDiscussion]);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('DiscussionGroups').then(setAnimationData);\n }\n }, [animationData]);\n\n const handleUnlinkGroupSessions = useCallback(() => {\n closeConfirmUnlinkGroupDialog();\n unlinkDiscussionGroup({ channelId: isChannel ? chatId : linkedChatId });\n if (!isChannel) {\n onScreenSelect(ManagementScreens.Initial);\n }\n }, [closeConfirmUnlinkGroupDialog, unlinkDiscussionGroup, isChannel, chatId, linkedChatId, onScreenSelect]);\n\n const handleLinkGroupSessions = useCallback(() => {\n closeConfirmLinkGroupDialog();\n linkDiscussionGroup({ channelId: chatId, chatId: linkedGroupId });\n }, [closeConfirmLinkGroupDialog, linkDiscussionGroup, chatId, linkedGroupId]);\n\n const onDiscussionClick = (groupId: string) => {\n setLinkedGroupId(groupId);\n openConfirmLinkGroupDialog();\n };\n\n function renderUnlinkGroupHeader() {\n return (\n
\n \n
\n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n
\n
\n );\n }\n\n function renderLinkGroupHeader() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n return (\n
\n \n
\n {lang('Channel.DiscussionGroup.LinkGroup')}\n
\n
\n );\n }\n\n function renderLinkGroupConfirmText() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n if (linkedGroup.hasPrivateLink) {\n return renderText(\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPublicAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n return renderText(\n // eslint-disable-next-line max-len\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?\\n\\nAnyone from the channel will be able to see messages in this group.`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPrivateAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n function renderLinkedGroup() {\n return (\n
\n \n \n \n \n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n \n \n
\n );\n }\n\n function renderDiscussionGroups() {\n return (\n
\n

{lang('DiscussionChannelHelp')}

\n\n
\n \n {lang('DiscussionCreateGroup')}\n \n {forDiscussionIds ? (\n forDiscussionIds.map((id, i) => (\n {\n onDiscussionClick(id);\n }}\n >\n \n \n ))\n ) : (\n \n )}\n
\n

{lang('DiscussionChannelHelp2')}

\n \n
\n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n {linkedChat && renderLinkedGroup()}\n {!linkedChat && renderDiscussionGroups()}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { forDiscussionIds, byId: chatsByIds } = global.chats;\n const linkedChat = chat?.fullInfo?.linkedChatId\n ? selectChat(global, chat.fullInfo.linkedChatId)\n : undefined;\n\n return {\n chat,\n chatsByIds,\n forDiscussionIds,\n linkedChat,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageDiscussion));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatBannedRights } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n chatId: string;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isFormFullyDisabled?: boolean;\n};\n\nconst ManageGroupUserPermissions: FC = ({\n chat,\n selectedChatMemberId,\n onScreenSelect,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getDispatch();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isBanConfirmationDialogOpen, openBanConfirmationDialog, closeBanConfirmationDialog] = useFlag();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return undefined;\n }\n\n return chat.fullInfo.members.find(({ userId }) => userId === selectedChatMemberId);\n }, [chat, selectedChatMemberId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedChatMemberId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedChatMemberId]);\n\n useEffect(() => {\n setPermissions((selectedChatMember?.bannedRights) || (chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setIsLoading(false);\n }, [chat, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n setIsLoading(true);\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: permissions,\n });\n }, [chat, selectedChatMemberId, permissions, updateChatMemberBannedRights]);\n\n const handleBanFromGroup = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: {\n viewMessages: true,\n },\n });\n }, [chat, selectedChatMemberId, updateChatMemberBannedRights]);\n\n const getControlIsDisabled = useCallback((key: Exclude) => {\n if (isFormFullyDisabled) {\n return true;\n }\n\n if (!chat || !chat.defaultBannedRights) {\n return false;\n }\n\n return chat.defaultBannedRights[key];\n }, [chat, isFormFullyDisabled]);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('UserRestrictionsCanDo')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n {!isFormFullyDisabled && (\n
\n \n {lang('UserRestrictionsBlock')}\n \n
\n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return { chat, isFormFullyDisabled };\n },\n)(ManageGroupUserPermissions));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatMember } from '../../../api/types';\n\nimport { getUserFullName, isChatChannel } from '../../../modules/helpers';\nimport { selectChat } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n currentUserId?: string;\n isChannel: boolean;\n};\n\nconst ManageChatAdministrators: FC = ({\n chat,\n isChannel,\n currentUserId,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n function handleRecentActionsClick() {\n onScreenSelect(ManagementScreens.GroupRecentActions);\n }\n\n const adminMembers = useMemo(() => {\n if (!chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const handleAdminMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.ChatAdminRights);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n const handleAddAdminClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupAddAdmins);\n }, [onScreenSelect]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const promotedByUser = member.promotedByUserId ? usersById[member.promotedByUserId] : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n \n {lang('EventLog')}\n {lang(isChannel ? 'EventLogInfoDetailChannel' : 'EventLogInfoDetail')}\n \n
\n\n
\n

\n {isChannel\n ? 'You can add administrators to help you manage your channel.'\n : 'You can add administrators to help you manage your group.'}\n

\n\n {adminMembers.map((member) => (\n handleAdminMemberClick(member)}\n >\n \n \n ))}\n\n \n \n \n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n chat,\n currentUserId: global.currentUserId,\n isChannel: isChatChannel(chat),\n };\n },\n)(ManageChatAdministrators));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatMember } from '../../../api/types';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../modules/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n};\n\nconst ManageGroupRecentActions: FC = ({ chat, onClose, isActive }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const adminMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n

Actions

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n

{lang('Channel.Management.Title')}

\n\n
\n \n
\n\n {adminMembers.map((member) => (\n \n \n \n \n ))}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat };\n },\n)(ManageGroupRecentActions));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatAdminRights, ApiUser } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport { getUserFullName, isChatBasicGroup, isChatChannel } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport InputText from '../../ui/InputText';\n\ntype OwnProps = {\n chatId: string;\n selectedUserId?: string;\n isPromotedByCurrentUser?: boolean;\n isNewAdmin?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n usersById: Record;\n currentUserId?: string;\n isChannel: boolean;\n isFormFullyDisabled: boolean;\n defaultRights?: ApiChatAdminRights;\n};\n\nconst CUSTOM_TITLE_MAX_LENGTH = 16;\n\nconst ManageGroupAdminRights: FC = ({\n isNewAdmin,\n selectedUserId,\n defaultRights,\n onScreenSelect,\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatAdmin } = getDispatch();\n\n const [permissions, setPermissions] = useState({});\n const [isTouched, setIsTouched] = useState(Boolean(isNewAdmin));\n const [isLoading, setIsLoading] = useState(false);\n const [isDismissConfirmationDialogOpen, openDismissConfirmationDialog, closeDismissConfirmationDialog] = useFlag();\n const [customTitle, setCustomTitle] = useState('');\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n const selectedAdminMember = chat.fullInfo?.adminMembers?.find(({ userId }) => userId === selectedUserId);\n\n // If `selectedAdminMember` variable is filled with a value, then we have already saved the administrator,\n // so now we need to return to the list of administrators\n if (isNewAdmin && (selectedAdminMember || !selectedUserId)) {\n return undefined;\n }\n\n if (isNewAdmin) {\n const user = getGlobal().users.byId[selectedUserId!];\n\n return user ? {\n userId: user.id,\n adminRights: defaultRights,\n customTitle: lang('ChannelAdmin'),\n isOwner: false,\n promotedByUserId: undefined,\n } : undefined;\n }\n\n return selectedAdminMember;\n }, [chat.fullInfo?.adminMembers, defaultRights, isNewAdmin, lang, selectedUserId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedUserId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedUserId]);\n\n useEffect(() => {\n setPermissions(selectedChatMember?.adminRights || {});\n setCustomTitle((selectedChatMember?.customTitle || '').substr(0, CUSTOM_TITLE_MAX_LENGTH));\n setIsTouched(Boolean(isNewAdmin));\n setIsLoading(false);\n }, [defaultRights, isNewAdmin, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as keyof ApiChatAdminRights]),\n }));\n setIsTouched(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n setIsLoading(true);\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: permissions,\n customTitle,\n });\n }, [selectedUserId, updateChatAdmin, chat.id, permissions, customTitle]);\n\n const handleDismissAdmin = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: {},\n });\n closeDismissConfirmationDialog();\n }, [chat.id, closeDismissConfirmationDialog, selectedUserId, updateChatAdmin]);\n\n const getControlIsDisabled = useCallback((key: keyof ApiChatAdminRights) => {\n if (isChatBasicGroup(chat)) {\n return false;\n }\n\n if (isFormFullyDisabled || !chat.adminRights) {\n return true;\n }\n\n return !chat.adminRights![key];\n }, [chat, isFormFullyDisabled]);\n\n const memberStatus = useMemo(() => {\n if (isNewAdmin || !selectedChatMember) {\n return undefined;\n }\n\n if (selectedChatMember.isOwner) {\n return lang('ChannelCreator');\n }\n\n const promotedByUser = selectedChatMember.promotedByUserId\n ? usersById[selectedChatMember.promotedByUserId]\n : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [isNewAdmin, selectedChatMember, usersById, lang]);\n\n const handleCustomTitleChange = useCallback((e) => {\n const { value } = e.target;\n setCustomTitle(value);\n setIsTouched(true);\n }, []);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('EditAdminWhatCanDo')}

\n\n
\n \n
\n {isChannel && (\n
\n \n
\n )}\n {isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n\n {isFormFullyDisabled && (\n

\n {lang('Channel.EditAdmin.CannotEdit')}\n

\n )}\n\n {!isChannel && (\n \n )}\n\n {currentUserId !== selectedUserId && !isFormFullyDisabled && !isNewAdmin && (\n \n {lang('EditAdminRemoveAdmin')}\n \n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n {!isNewAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { byId: usersById } = global.users;\n const { currentUserId } = global;\n const isChannel = isChatChannel(chat);\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return {\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n defaultRights: chat.adminRights,\n };\n },\n)(ManageGroupAdminRights));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChatMember, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { unique } from '../../../util/iteratees';\nimport { selectChat } from '../../../modules/selectors';\nimport {\n sortUserIds, isChatChannel, filterUsersByName, sortChatIds, isUserBot,\n} from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport NothingFound from '../../common/NothingFound';\nimport ListItem from '../../ui/ListItem';\nimport InputText from '../../ui/InputText';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Loading from '../../ui/Loading';\n\ntype OwnProps = {\n chatId: string;\n isActive: boolean;\n noAdmins?: boolean;\n onClose: NoneToVoidFunction;\n onScreenSelect?: (screen: ManagementScreens) => void;\n onChatMemberSelect?: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n};\n\ntype StateProps = {\n userStatusesById: Record;\n members?: ApiChatMember[];\n adminMembers?: ApiChatMember[];\n isChannel?: boolean;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n serverTimeOffset: number;\n};\n\nconst ManageGroupMembers: FC = ({\n noAdmins,\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n isActive,\n globalUserIds,\n localContactIds,\n localUserIds,\n isSearching,\n searchQuery,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n onChatMemberSelect,\n}) => {\n const { openChat, setUserSearchQuery, loadContactList } = getDispatch();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const adminIds = useMemo(() => {\n return noAdmins ? adminMembers?.map(({ userId }) => userId) || [] : [];\n }, [adminMembers, noAdmins]);\n\n const memberIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n if (!members || !usersById) {\n return [];\n }\n\n const userIds = sortUserIds(\n members.map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n\n return noAdmins ? userIds.filter((userId) => !adminIds.includes(userId)) : userIds;\n }, [members, userStatusesById, serverTimeOffset, noAdmins, adminIds]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n const shouldUseSearchResults = Boolean(searchQuery);\n const listedIds = !shouldUseSearchResults\n ? memberIds\n : (localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : []);\n\n return sortChatIds(\n unique([\n ...listedIds,\n ...(shouldUseSearchResults ? localUserIds || [] : []),\n ...(shouldUseSearchResults ? globalUserIds || [] : []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return (isChannel || user.canBeInvitedToGroup || !isUserBot(user))\n && (!noAdmins || !adminIds.includes(contactId));\n }),\n chatsById,\n true,\n );\n }, [memberIds, localContactIds, searchQuery, localUserIds, globalUserIds, isChannel, noAdmins, adminIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(loadContactList, displayedIds, Boolean(searchQuery));\n\n const handleMemberClick = useCallback((id: string) => {\n if (noAdmins) {\n onChatMemberSelect!(id, false);\n onScreenSelect!(ManagementScreens.ChatNewAdminRights);\n } else {\n openChat({ id });\n }\n }, [noAdmins, onChatMemberSelect, onScreenSelect, openChat]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n setUserSearchQuery({ query: e.target.value });\n }, [setUserSearchQuery]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n handleMemberClick(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n useHistoryBack(isActive, onClose);\n\n function renderSearchField() {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n {noAdmins && renderSearchField()}\n
\n
\n {viewportIds?.length ? (\n \n {viewportIds.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))}\n \n ) : !isSearching && viewportIds && !viewportIds.length ? (\n \n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const adminMembers = chat?.fullInfo?.adminMembers;\n const isChannel = chat && isChatChannel(chat);\n const { userIds: localContactIds } = global.contactList || {};\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalUserIds,\n localUserIds,\n } = global.userSearch;\n\n return {\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus,\n globalUserIds,\n localUserIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupMembers));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChatMember, ApiUser, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport { sortUserIds, isChatChannel } from '../../../modules/helpers';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n members?: ApiChatMember[];\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageGroupUserPermissionsCreate: FC = ({\n usersById,\n userStatusesById,\n members,\n isChannel,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n serverTimeOffset,\n}) => {\n useHistoryBack(isActive, onClose);\n\n const memberIds = useMemo(() => {\n if (!members || !usersById) {\n return undefined;\n }\n\n return sortUserIds(\n members.filter((member) => !member.isOwner).map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n }, [members, serverTimeOffset, usersById, userStatusesById]);\n\n const handleExceptionMemberClick = useCallback((memberId: string) => {\n onChatMemberSelect(memberId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [onChatMemberSelect, onScreenSelect]);\n\n return (\n
\n
\n
\n {memberIds ? (\n memberIds.map((id, i) => (\n handleExceptionMemberClick(id)}\n >\n \n \n ))\n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const isChannel = chat && isChatChannel(chat);\n\n return {\n members,\n usersById,\n userStatusesById,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupUserPermissionsCreate));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_INVITES } from '../../../config';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatCountdown, MILLISECONDS_IN_DAY } from '../../../util/dateFormat';\nimport useInterval from '../../../hooks/useInterval';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\nimport { selectChat } from '../../../modules/selectors';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { getServerTime } from '../../../util/serverTime';\nimport useFlag from '../../../hooks/useFlag';\nimport { isChatChannel } from '../../../modules/helpers';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport Button from '../../ui/Button';\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n exportedInvites?: ApiExportedInvite[];\n revokedExportedInvites?: ApiExportedInvite[];\n serverTimeOffset: number;\n};\n\nconst BULLET = '\\u2022';\n\nfunction inviteComparator(i1: ApiExportedInvite, i2: ApiExportedInvite) {\n const { isPermanent: i1IsPermanent, usage: i1Usage = 0, date: i1Date } = i1;\n const { isPermanent: i2IsPermanent, usage: i2Usage = 0, date: i2Date } = i2;\n if (i1IsPermanent || i2IsPermanent) return Number(i1IsPermanent) - Number(i2IsPermanent);\n if (i1Usage || i2Usage) return i2Usage - i1Usage;\n return i2Date - i1Date;\n}\n\nconst ManageInvites: FC = ({\n chatId,\n chat,\n exportedInvites,\n revokedExportedInvites,\n isActive,\n isChannel,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const {\n setEditingExportedInvite,\n showNotification,\n editExportedChatInvite,\n deleteExportedChatInvite,\n deleteRevokedExportedChatInvites,\n setOpenedInviteInfo,\n } = getDispatch();\n\n const lang = useLang();\n\n const [isDeleteRevokeAllDialogOpen, openDeleteRevokeAllDialog, closeDeleteRevokeAllDialog] = useFlag();\n const [isRevokeDialogOpen, openRevokeDialog, closeRevokeDialog] = useFlag();\n const [revokingInvite, setRevokingInvite] = useState();\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [deletingInvite, setDeletingInvite] = useState();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('Invite').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n const hasDetailedCountdown = useMemo(() => {\n if (!exportedInvites) return undefined;\n return exportedInvites\n .some(({ expireDate }) => (\n expireDate && (expireDate - getServerTime(serverTimeOffset) < MILLISECONDS_IN_DAY / 1000)\n ));\n }, [exportedInvites, serverTimeOffset]);\n const forceUpdate = useForceUpdate();\n useInterval(() => {\n forceUpdate();\n }, hasDetailedCountdown ? 1000 : undefined);\n\n const primaryInvite = exportedInvites?.find(({ isPermanent }) => isPermanent);\n const primaryInviteLink = chat?.username ? `t.me/${chat.username}` : primaryInvite?.link;\n const temporalInvites = useMemo(() => {\n const invites = chat?.username ? exportedInvites : exportedInvites?.filter(({ isPermanent }) => !isPermanent);\n return invites?.sort(inviteComparator);\n }, [chat?.username, exportedInvites]);\n\n const editInvite = (invite: ApiExportedInvite) => {\n setEditingExportedInvite({ chatId, invite });\n onScreenSelect(ManagementScreens.EditInvite);\n };\n\n const revokeInvite = useCallback((invite: ApiExportedInvite) => {\n const {\n link, title, isRequestNeeded, expireDate, usageLimit,\n } = invite;\n editExportedChatInvite({\n chatId,\n link,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n isRevoked: true,\n });\n }, [chatId, editExportedChatInvite]);\n\n const askToRevoke = useCallback((invite: ApiExportedInvite) => {\n setRevokingInvite(invite);\n openRevokeDialog();\n }, [openRevokeDialog]);\n\n const handleRevoke = useCallback(() => {\n if (!revokingInvite) return;\n revokeInvite(revokingInvite);\n setRevokingInvite(undefined);\n closeRevokeDialog();\n }, [closeRevokeDialog, revokeInvite, revokingInvite]);\n\n const handleCreateNewClick = useCallback(() => {\n onScreenSelect(ManagementScreens.EditInvite);\n }, [onScreenSelect]);\n\n const handlePrimaryRevoke = useCallback(() => {\n if (primaryInvite) {\n askToRevoke(primaryInvite);\n }\n }, [askToRevoke, primaryInvite]);\n\n const handleDeleteAllRevoked = useCallback(() => {\n deleteRevokedExportedChatInvites({ chatId });\n closeDeleteRevokeAllDialog();\n }, [chatId, closeDeleteRevokeAllDialog, deleteRevokedExportedChatInvites]);\n\n const showInviteInfo = useCallback((invite: ApiExportedInvite) => {\n setOpenedInviteInfo({ chatId, invite });\n onScreenSelect(ManagementScreens.InviteInfo);\n }, [chatId, onScreenSelect, setOpenedInviteInfo]);\n\n const deleteInvite = useCallback((invite: ApiExportedInvite) => {\n deleteExportedChatInvite({ chatId, link: invite.link });\n }, [chatId, deleteExportedChatInvite]);\n\n const askToDelete = useCallback((invite: ApiExportedInvite) => {\n setDeletingInvite(invite);\n openDeleteDialog();\n }, [openDeleteDialog]);\n\n const handleDelete = useCallback(() => {\n if (!deletingInvite) return;\n deleteInvite(deletingInvite);\n setDeletingInvite(undefined);\n closeDeleteDialog();\n }, [closeDeleteDialog, deleteInvite, deletingInvite]);\n\n const copyLink = useCallback((link: string) => {\n copyTextToClipboard(link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [lang, showNotification]);\n\n const handleCopyPrimaryClicked = useCallback(() => {\n copyLink(primaryInviteLink!);\n }, [copyLink, primaryInviteLink]);\n\n const prepareUsageText = (invite: ApiExportedInvite) => {\n const {\n usage = 0, usageLimit, expireDate, isPermanent, requested, isRevoked,\n } = invite;\n let text = '';\n if (!isRevoked && usageLimit && usage < usageLimit) {\n text = lang('CanJoin', usageLimit - usage);\n } else if (usage) {\n text = lang('PeopleJoined', usage);\n } else {\n text = lang('NoOneJoined');\n }\n\n if (isRevoked) {\n text += ` ${BULLET} ${lang('Revoked')}`;\n return text;\n }\n\n if (requested) {\n text += ` ${BULLET} ${lang('JoinRequests', requested)}`;\n }\n\n if (usageLimit !== undefined && usage === usageLimit) {\n text += ` ${BULLET} ${lang('LinkLimitReached')}`;\n } else if (expireDate) {\n const diff = (expireDate - getServerTime(serverTimeOffset)) * 1000;\n text += ` ${BULLET} `;\n if (diff > 0) {\n text += lang('InviteLink.ExpiresIn', formatCountdown(lang, diff));\n } else {\n text += lang('InviteLink.Expired');\n }\n } else if (isPermanent) {\n text += ` ${BULLET} ${lang('Permanent')}`;\n }\n\n return text;\n };\n\n const prepareContextActions = (invite: ApiExportedInvite) => {\n const actions = [];\n actions.push({\n title: lang('Copy'),\n icon: 'copy',\n handler: () => copyLink(invite.link),\n });\n\n if (!invite.isPermanent && !invite.isRevoked) {\n actions.push({\n title: lang('Edit'),\n icon: 'edit',\n handler: () => editInvite(invite),\n });\n }\n\n if (!invite.isRevoked) {\n actions.push({\n title: lang('RevokeButton'),\n icon: 'delete',\n handler: () => askToRevoke(invite),\n destructive: true,\n });\n } else {\n actions.push({\n title: lang('DeleteLink'),\n icon: 'delete',\n handler: () => askToDelete(invite),\n destructive: true,\n });\n }\n return actions;\n };\n\n const PrimaryLinkMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n

{isChannel ? lang('PrimaryLinkHelpChannel') : lang('PrimaryLinkHelp')}

\n
\n {primaryInviteLink && (\n
\n

\n {chat?.username ? lang('PublicLink') : lang('lng_create_permanent_link_title')}\n

\n
\n \n \n {lang('Copy')}\n {!chat?.username && (\n {lang('RevokeButton')}\n )}\n \n
\n \n
\n )}\n
\n \n {(!temporalInvites || !temporalInvites.length) && }\n {temporalInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n

{lang('ManageLinksInfoHelp')}

\n
\n {revokedExportedInvites && Boolean(revokedExportedInvites.length) && (\n
\n

{lang('RevokedLinks')}

\n \n {lang('DeleteAllRevokedLinks')}\n \n {revokedExportedInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n
\n )}\n
\n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { invites, revokedInvites } = global.management.byChatId[chatId];\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n exportedInvites: invites,\n revokedExportedInvites: revokedInvites,\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel,\n };\n },\n)(ManageInvites));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatFullDate, formatTime } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport Checkbox from '../../ui/Checkbox';\nimport InputText from '../../ui/InputText';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Button from '../../ui/Button';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport useOnChange from '../../../hooks/useOnChange';\nimport CalendarModal from '../../common/CalendarModal';\n\nconst DEFAULT_USAGE_LIMITS = [1, 10, 100];\nconst DEFAULT_EXPIRE_DATE = {\n hour: 3600000,\n day: 86400000,\n week: 604800000,\n};\nconst DEFAULT_CUSTOM_EXPIRE_DATE = DEFAULT_EXPIRE_DATE.hour;\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n editingInvite?: ApiExportedInvite;\n serverTimeOffset: number;\n};\n\nconst ManageInvite: FC = ({\n chatId,\n editingInvite,\n isActive,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const { editExportedChatInvite, exportChatInvite } = getDispatch();\n\n const lang = useLang();\n const [isCalendarOpened, openCalendar, closeCalendar] = useFlag();\n const [isRequestNeeded, setIsRequestNeeded] = useState(false);\n const [title, setTitle] = useState('');\n const [customExpireDate, setCustomExpireDate] = useState(Date.now() + DEFAULT_CUSTOM_EXPIRE_DATE);\n const [selectedExpireOption, setSelectedExpireOption] = useState('unlimited');\n const [customUsageLimit, setCustomUsageLimit] = useState(10);\n const [selectedUsageOption, setSelectedUsageOption] = useState('0');\n const [isSubmitBlocked, setIsSubmitBlocked] = useState(false);\n\n useHistoryBack(isActive, onClose);\n\n useOnChange(([oldEditingInvite]) => {\n if (oldEditingInvite === editingInvite) return;\n if (!editingInvite) {\n setTitle('');\n setSelectedExpireOption('unlimited');\n setSelectedUsageOption('0');\n setCustomExpireDate(getServerTime(serverTimeOffset) * 1000 + DEFAULT_CUSTOM_EXPIRE_DATE);\n setCustomUsageLimit(10);\n setIsRequestNeeded(false);\n } else {\n const {\n title: editingTitle, usageLimit, expireDate, isRequestNeeded: editingIsRequestNeeded,\n } = editingInvite;\n if (editingTitle) setTitle(editingTitle);\n if (usageLimit) {\n setSelectedUsageOption(DEFAULT_USAGE_LIMITS.includes(usageLimit) ? usageLimit.toString() : 'custom');\n setCustomUsageLimit(usageLimit);\n }\n if (expireDate) {\n const minSafeDate = getServerTime(serverTimeOffset) + DEFAULT_CUSTOM_EXPIRE_DATE;\n setSelectedExpireOption('custom');\n setCustomExpireDate(Math.max(expireDate, minSafeDate) * 1000);\n }\n if (editingIsRequestNeeded) {\n setIsRequestNeeded(true);\n }\n }\n }, [editingInvite, serverTimeOffset]);\n\n const handleIsRequestChange = useCallback((e: ChangeEvent) => {\n setIsRequestNeeded(e.target.checked);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n }, []);\n\n const handleCustomUsageLimitChange = useCallback((e: ChangeEvent) => {\n setCustomUsageLimit(Number.parseInt(e.target.value, 10));\n }, []);\n\n const handleExpireDateChange = useCallback((date: Date) => {\n setCustomExpireDate(date.getTime());\n closeCalendar();\n }, [closeCalendar]);\n\n const handleSaveClick = useCallback(() => {\n setIsSubmitBlocked(true);\n const usageLimit = selectedUsageOption === 'custom' ? customUsageLimit : selectedUsageOption;\n let expireDate;\n switch (selectedExpireOption) {\n case 'custom':\n expireDate = getServerTime(serverTimeOffset) + (customExpireDate - Date.now()) / 1000;\n break;\n case 'hour':\n case 'day':\n case 'week':\n expireDate = getServerTime(serverTimeOffset) + DEFAULT_EXPIRE_DATE[selectedExpireOption] / 1000;\n break;\n case 'unlimited':\n default:\n expireDate = undefined;\n }\n\n if (editingInvite) {\n editExportedChatInvite({\n link: editingInvite.link,\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n } else {\n exportChatInvite({\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n }\n onScreenSelect(ManagementScreens.Invites);\n }, [\n chatId, customExpireDate, customUsageLimit, editExportedChatInvite, editingInvite,\n exportChatInvite, isRequestNeeded, selectedExpireOption, selectedUsageOption, title, onScreenSelect,\n serverTimeOffset,\n ]);\n\n return (\n
\n
\n
\n \n
\n
\n \n

{lang('LinkNameHelp')}

\n
\n
\n
{lang('LimitByPeriod')}
\n \n {selectedExpireOption === 'custom' && (\n \n )}\n

{lang('TimeLimitHelp')}

\n
\n {!isRequestNeeded && (\n
\n
{lang('LimitNumberOfUses')}
\n ({ value: n.toString(), label: n })),\n {\n value: '0',\n label: lang('NoLimit'),\n },\n {\n value: 'custom',\n label: lang('lng_group_invite_usage_custom'),\n },\n ]}\n onChange={setSelectedUsageOption}\n selected={selectedUsageOption}\n />\n {selectedUsageOption === 'custom' && (\n \n )}\n

{lang('UsesLimitHelp')}

\n
\n )}\n \n \n \n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { editingInvite } = global.management.byChatId[chatId];\n\n return {\n editingInvite,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInvite));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiAvailableReaction, ApiChat } from '../../../api/types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n availableReactions?: ApiAvailableReaction[];\n enabledReactions?: string[];\n};\n\nconst ManageReactions: FC = ({\n availableReactions,\n enabledReactions,\n chat,\n isActive,\n onClose,\n}) => {\n const { setChatEnabledReactions } = getDispatch();\n\n const lang = useLang();\n const [isTouched, setIsTouched] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [localEnabledReactions, setLocalEnabledReactions] = useState(enabledReactions || []);\n\n useHistoryBack(isActive, onClose);\n\n const handleSaveReactions = useCallback(() => {\n if (!chat) return;\n setIsLoading(true);\n\n setChatEnabledReactions({\n chatId: chat.id,\n enabledReactions: localEnabledReactions,\n });\n }, [chat, localEnabledReactions, setChatEnabledReactions]);\n\n useEffect(() => {\n if (enabledReactions) {\n setIsLoading(false);\n setIsTouched(false);\n setLocalEnabledReactions(enabledReactions);\n }\n }, [enabledReactions]);\n\n const handleReactionChange = useCallback((e: React.ChangeEvent) => {\n if (!chat || !availableReactions) return;\n\n const { name, checked } = e.currentTarget;\n const newEnabledReactions = name === 'all' ? (checked ? availableReactions.map((l) => l.reaction) : [])\n : (!checked\n ? localEnabledReactions.filter((l) => l !== name)\n : [...localEnabledReactions, name]);\n\n setLocalEnabledReactions(newEnabledReactions);\n setIsTouched(true);\n }, [availableReactions, chat, localEnabledReactions]);\n\n return (\n
\n
\n
\n
\n 0}\n label={lang('EnableReactions')}\n onChange={handleReactionChange}\n />\n
\n {availableReactions?.filter((l) => !l.isInactive).map(({ reaction, title }) => (\n
\n \n \n {title}\n
\n )}\n onChange={handleReactionChange}\n />\n
\n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n enabledReactions: chat.fullInfo?.enabledReactions,\n availableReactions: global.availableReactions,\n chat,\n };\n },\n)(ManageReactions));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChatInviteImporter, ApiExportedInvite, ApiUser } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { getServerTime } from '../../../util/serverTime';\nimport { formatFullDate, formatMediaDateTime, formatTime } from '../../../util/dateFormat';\nimport { isChatChannel } from '../../../modules/helpers';\nimport { selectChat } from '../../../modules/selectors';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n invite?: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n admin?: ApiUser;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageInviteInfo: FC = ({\n chatId,\n invite,\n importers,\n requesters,\n isChannel,\n isActive,\n serverTimeOffset,\n onClose,\n}) => {\n const {\n showNotification,\n loadChatInviteImporters,\n loadChatInviteRequesters,\n openChat,\n } = getDispatch();\n\n const lang = useLang();\n const {\n usage = 0, usageLimit, link, adminId,\n } = invite || {};\n const expireDate = invite?.expireDate && (invite.expireDate - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n const isExpired = ((invite?.expireDate || 0) - getServerTime(serverTimeOffset)) < 0;\n\n useEffect(() => {\n if (link) {\n loadChatInviteImporters({ chatId, link });\n loadChatInviteRequesters({ chatId, link });\n }\n }, [chatId, link, loadChatInviteImporters, loadChatInviteRequesters]);\n\n const handleCopyClicked = useCallback(() => {\n copyTextToClipboard(invite!.link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [invite, lang, showNotification]);\n\n useHistoryBack(isActive, onClose);\n\n const renderImporters = () => {\n if (!importers?.length && requesters?.length) return undefined;\n if (!importers) return ;\n return (\n
\n

{importers.length ? lang('PeopleJoined', usage) : lang('NoOneJoined')}

\n

\n {!importers.length && (\n usageLimit ? lang('PeopleCanJoinViaLinkCount', usageLimit - usage) : lang('NoOneJoinedYet')\n )}\n {importers.map((importer) => (\n openChat({ id: importer.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n const renderRequesters = () => {\n if (invite?.isRevoked) return undefined;\n if (!requesters && importers) return ;\n if (!requesters?.length) return undefined;\n return (\n
\n

{isChannel ? lang('SubscribeRequests') : lang('MemberRequests')}

\n

\n {requesters.map((requester) => (\n openChat({ id: requester.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n return (\n
\n
\n {!invite && (\n

{lang('Loading')}

\n )}\n {invite && (\n <>\n
\n

{invite.title || invite.link}

\n \n \n {expireDate && (\n

\n {isExpired\n ? lang('ExpiredLink')\n : lang('LinkExpiresIn', `${formatFullDate(lang, expireDate)} ${formatTime(lang, expireDate)}`)}\n

\n )}\n
\n {adminId && (\n
\n

{lang('LinkCreatedeBy')}

\n openChat({ id: adminId })}\n >\n \n \n
\n )}\n {renderImporters()}\n {renderRequesters()}\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { inviteInfo } = global.management.byChatId[chatId];\n const { invite, importers, requesters } = inviteInfo || {};\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n invite,\n importers,\n requesters,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInviteInfo));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { getUserFullName } from '../../../modules/helpers';\nimport { selectUser } from '../../../modules/selectors';\nimport { formatHumanDate, formatTime, isToday } from '../../../util/dateFormat';\nimport { getServerTime } from '../../../util/serverTime';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\n\nimport './JoinRequest.scss';\n\ntype OwnProps = {\n userId: string;\n about?: string;\n isChannel?: boolean;\n date: number;\n chatId: string;\n};\n\ntype StateProps = {\n user?: ApiUser;\n isSavedMessages?: boolean;\n serverTimeOffset: number;\n};\n\nconst JoinRequest: FC = ({\n userId,\n about,\n date,\n isChannel,\n user,\n serverTimeOffset,\n chatId,\n}) => {\n const { openChat, hideChatJoinRequest } = getDispatch();\n\n const buildClassName = createClassNameBuilder('JoinRequest');\n const lang = useLang();\n\n const fullName = getUserFullName(user);\n const fixedDate = (date - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n\n const dateString = isToday(new Date(fixedDate))\n ? formatTime(lang, fixedDate) : formatHumanDate(lang, fixedDate, true, false, true);\n\n const handleUserClick = () => {\n openChat({ id: userId });\n };\n\n const handleAcceptRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: true });\n }, [chatId, hideChatJoinRequest, userId]);\n\n const handleRejectRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: false });\n }, [chatId, hideChatJoinRequest, userId]);\n\n return (\n
\n
\n
\n \n
\n
{fullName}
\n
{about}
\n
\n
\n
{dateString}
\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n\n return {\n user,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(JoinRequest));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { STICKER_SIZE_JOIN_REQUESTS } from '../../../config';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { selectChat } from '../../../modules/selectors';\nimport { isChatChannel, isUserId } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport getAnimationData from '../../common/helpers/animatedAssets';\n\nimport JoinRequest from './JoinRequest';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageJoinRequests: FC = ({\n chat,\n chatId,\n isActive,\n isChannel,\n onClose,\n}) => {\n const { hideAllChatJoinRequests, loadChatJoinRequests } = getDispatch();\n const [isAcceptAllDialogOpen, openAcceptAllDialog, closeAcceptAllDialog] = useFlag();\n const [isRejectAllDialogOpen, openRejectAllDialog, closeRejectAllDialog] = useFlag();\n\n const lang = useLang();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('JoinRequest').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (!chat?.joinRequests && !isUserId(chatId)) {\n loadChatJoinRequests({ chatId });\n }\n }, [chat, chatId, loadChatJoinRequests]);\n\n const handleAcceptAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: true });\n closeAcceptAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeAcceptAllDialog]);\n\n const handleRejectAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: false });\n closeRejectAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeRejectAllDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n {Boolean(chat?.joinRequests?.length) && (\n
\n \n \n
\n )}\n
\n
\n
\n

\n {!chat?.joinRequests ? lang('Loading') : chat.joinRequests.length\n ? lang('JoinRequests', chat.joinRequests.length) : lang('NoMemberRequests')}\n

\n {!chat?.joinRequests && (\n \n )}\n {chat?.joinRequests?.length === 0 && (\n

\n {isChannel ? lang('NoSubscribeRequestsDescription') : lang('NoMemberRequestsDescription')}\n

\n )}\n {chat?.joinRequests?.map(({ userId, about, date }) => (\n \n ))}\n
\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return {\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageJoinRequests));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens, ManagementType } from '../../../types';\n\nimport { selectCurrentManagementType } from '../../../modules/selectors';\n\nimport ManageUser from './ManageUser';\nimport ManageGroup from './ManageGroup';\nimport ManageGroupPermissions from './ManageGroupPermissions';\nimport ManageGroupRemovedUsers from './ManageGroupRemovedUsers';\nimport ManageChannel from './ManageChannel';\nimport ManageChatPrivacyType from './ManageChatPrivacyType';\nimport ManageDiscussion from './ManageDiscussion';\nimport ManageGroupUserPermissions from './ManageGroupUserPermissions';\nimport ManageChatAdministrators from './ManageChatAdministrators';\nimport ManageGroupRecentActions from './ManageGroupRecentActions';\nimport ManageGroupAdminRights from './ManageGroupAdminRights';\nimport ManageGroupMembers from './ManageGroupMembers';\nimport ManageGroupUserPermissionsCreate from './ManageGroupUserPermissionsCreate';\nimport ManageInvites from './ManageInvites';\nimport ManageInvite from './ManageInvite';\nimport ManageReactions from './ManageReactions';\nimport ManageInviteInfo from './ManageInviteInfo';\nimport ManageJoinRequests from './ManageJoinRequests';\n\nexport type OwnProps = {\n chatId: string;\n currentScreen: ManagementScreens;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n managementType?: ManagementType;\n};\n\nconst Management: FC = ({\n chatId,\n currentScreen,\n selectedChatMemberId,\n isPromotedByCurrentUser,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n managementType,\n}) => {\n switch (currentScreen) {\n case ManagementScreens.Initial: {\n switch (managementType) {\n case 'user':\n return (\n \n );\n case 'group':\n return (\n \n );\n case 'channel':\n return (\n \n );\n }\n\n break;\n }\n\n case ManagementScreens.ChatPrivacyType:\n return (\n \n );\n\n case ManagementScreens.Discussion:\n return (\n \n );\n\n case ManagementScreens.GroupPermissions:\n return (\n \n );\n\n case ManagementScreens.GroupRemovedUsers:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissionsCreate:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissions:\n return (\n \n );\n\n case ManagementScreens.ChatAdministrators:\n return (\n \n );\n\n case ManagementScreens.GroupRecentActions:\n return (\n \n );\n\n case ManagementScreens.ChatNewAdminRights:\n case ManagementScreens.ChatAdminRights:\n return (\n \n );\n\n case ManagementScreens.ChannelSubscribers:\n case ManagementScreens.GroupMembers:\n return (\n \n );\n case ManagementScreens.Invites:\n return (\n \n );\n case ManagementScreens.EditInvite:\n return (\n \n );\n case ManagementScreens.GroupAddAdmins:\n return (\n \n );\n\n case ManagementScreens.Reactions:\n return (\n \n );\n case ManagementScreens.InviteInfo:\n return (\n \n );\n case ManagementScreens.JoinRequests:\n return (\n \n );\n }\n\n return undefined; // Never reached\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const managementType = selectCurrentManagementType(global);\n\n return {\n managementType,\n };\n },\n)(Management));\n","const VISA = /^4[0-9]{12}(?:[0-9]{1,3})?$/;\nconst MASTERCARD1 = /^5[1-5][0-9]{11,14}$/;\nconst MASTERCARD2 = /^2[2-7][0-9]{11,14}$/;\n\nexport enum CardType {\n Default,\n Visa,\n Mastercard,\n}\n\nconst cards: Record = {\n [CardType.Default]: '',\n [CardType.Visa]: 'visa',\n [CardType.Mastercard]: 'mastercard',\n};\n\nexport function detectCardType(cardNumber: string): number {\n cardNumber = cardNumber.replace(/\\s/g, '');\n if (VISA.test(cardNumber)) {\n return CardType.Visa;\n }\n if (MASTERCARD1.test(cardNumber) || MASTERCARD2.test(cardNumber)) {\n return CardType.Mastercard;\n }\n return CardType.Default;\n}\n\nexport function detectCardTypeText(cardNumber: string): string {\n const cardType = detectCardType(cardNumber);\n return cards[cardType as number] || '';\n}\n","// This data was received from Telegram Desktop (Telegram/Resources/numbers.txt)\nconst DATA = `AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d\\`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234`;\n\nconst formatsCache: Record = {};\nexport const defaultPhoneNumberFormat = /(\\d{1,3})(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?/;\n\nconst parsed = DATA\n .split('\\n')\n .map((str) => {\n const id = str.substr(0, 2);\n const flag = str.substr(2, 4);\n const code = `+${str.match(/\\d+/)![0]}`;\n const name = str.split(/\\d+/)[1];\n const format = str.match(/\\d+$/);\n const phoneFormat = getPhoneNumberFormat(format);\n\n return {\n id, flag, code, name, phoneFormat,\n };\n });\n\nfunction getPhoneNumberFormat(format: RegExpMatchArray | null) {\n if (!format) {\n return defaultPhoneNumberFormat;\n }\n\n const formatValue = format[0] as string;\n let phoneNumberFormat;\n\n if (!formatsCache[formatValue]) {\n const phoneNumberGroups = formatValue.split('').map(Number);\n phoneNumberFormat = phoneNumberGroups.reduce((result, count, i) => {\n return `${result}(\\\\d{1,${count}})${i > 0 ? '?' : ''}`;\n }, '');\n formatsCache[formatValue] = new RegExp(`${phoneNumberFormat}${'()?'.repeat(5 - phoneNumberGroups.length)}`);\n }\n\n return formatsCache[formatValue];\n}\n\nexport default parsed;\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\nimport countryList from '../../util/countries';\n\nexport type FormState = {\n streetLine1: string;\n streetLine2: string;\n city: string;\n state: string;\n countryIso2: string;\n postCode: string;\n fullName: string;\n email: string;\n phone: string;\n shipping: string;\n cardNumber: string;\n cardholder: string;\n expiry: string;\n cvv: string;\n billingCountry: string;\n billingZip: string;\n saveInfo: boolean;\n saveCredentials: boolean;\n formErrors: Record;\n};\n\nexport type FormActions = (\n 'changeAddress1' | 'changeAddress2' | 'changeCity' | 'changeState' | 'changeCountry' |\n 'changePostCode' | 'changeFullName' | 'changeEmail' | 'changePhone' | 'changeShipping' | 'updateUserInfo' |\n 'changeCardNumber' | 'changeCardholder' | 'changeExpiryDate' | 'changeCvvCode' | 'changeBillingCountry' |\n 'changeBillingZip' | 'changeSaveInfo' | 'changeSaveCredentials' | 'setFormErrors'\n);\nexport type FormEditDispatch = Dispatch;\n\nconst INITIAL_STATE: FormState = {\n streetLine1: '',\n streetLine2: '',\n city: '',\n state: '',\n countryIso2: '',\n postCode: '',\n fullName: '',\n email: '',\n phone: '',\n shipping: '',\n cardNumber: '',\n cardholder: '',\n expiry: '',\n cvv: '',\n billingCountry: '',\n billingZip: '',\n saveInfo: true,\n saveCredentials: false,\n formErrors: {},\n};\n\nconst reducer: StateReducer = (state, action) => {\n switch (action.type) {\n case 'changeAddress1':\n return {\n ...state,\n streetLine1: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine1: undefined,\n },\n };\n case 'changeAddress2':\n return {\n ...state,\n streetLine2: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine2: undefined,\n },\n };\n case 'changeCity':\n return {\n ...state,\n city: action.payload,\n formErrors: {\n ...state.formErrors,\n city: undefined,\n },\n };\n case 'changeState':\n return {\n ...state,\n state: action.payload,\n formErrors: {\n ...state.formErrors,\n state: undefined,\n },\n };\n case 'changeCountry':\n return {\n ...state,\n countryIso2: action.payload,\n billingCountry: getBillingCountry(action.payload),\n formErrors: {\n ...state.formErrors,\n countryIso2: undefined,\n },\n };\n case 'changePostCode':\n return {\n ...state,\n postCode: action.payload,\n formErrors: {\n ...state.formErrors,\n postCode: undefined,\n },\n };\n case 'changeFullName':\n return {\n ...state,\n fullName: action.payload,\n formErrors: {\n ...state.formErrors,\n fullName: undefined,\n },\n };\n case 'changeEmail':\n return {\n ...state,\n email: action.payload,\n formErrors: {\n ...state.formErrors,\n email: undefined,\n },\n };\n case 'changePhone':\n return {\n ...state,\n phone: action.payload,\n formErrors: {\n ...state.formErrors,\n phone: undefined,\n },\n };\n case 'changeShipping':\n return { ...state, shipping: action.payload };\n case 'changeCardNumber':\n return {\n ...state,\n cardNumber: action.payload,\n formErrors: {\n ...state.formErrors,\n cardNumber: undefined,\n },\n };\n case 'changeCardholder':\n return {\n ...state,\n cardholder: action.payload,\n formErrors: {\n ...state.formErrors,\n cardholder: undefined,\n },\n };\n case 'changeExpiryDate':\n return {\n ...state,\n expiry: action.payload,\n formErrors: {\n ...state.formErrors,\n expiry: undefined,\n },\n };\n case 'changeCvvCode':\n return {\n ...state,\n cvv: action.payload,\n formErrors: {\n ...state.formErrors,\n cvv: undefined,\n },\n };\n case 'changeBillingCountry':\n return {\n ...state,\n billingCountry: action.payload,\n formErrors: {\n ...state.formErrors,\n billingCountry: undefined,\n },\n };\n case 'changeBillingZip':\n return {\n ...state,\n billingZip: action.payload,\n formErrors: {\n ...state.formErrors,\n billingZip: undefined,\n },\n };\n case 'changeSaveInfo':\n return { ...state, saveInfo: action.payload };\n case 'changeSaveCredentials':\n return { ...state, saveCredentials: action.payload };\n case 'updateUserInfo':\n if (action.payload.countryIso2) {\n return {\n ...state,\n ...action.payload,\n billingCountry: getBillingCountry(action.payload.countryIso2),\n };\n }\n return { ...state, ...action.payload };\n case 'setFormErrors':\n return {\n ...state,\n formErrors: {\n ...state.formErrors,\n ...action.payload,\n },\n };\n default:\n return state;\n }\n};\n\nfunction getBillingCountry(countryCode: string) {\n const country = countryList.find(({ id }) => id === countryCode);\n return country ? country.name : '';\n}\n\nconst usePaymentReducer = () => {\n return useReducer(reducer, INITIAL_STATE);\n};\n\nexport default usePaymentReducer;\n","import { RefObject } from 'react';\n\nimport { IS_TOUCH_ENV } from '../util/environment';\nimport { fastRaf } from '../util/schedulers';\nimport { useEffect } from '../lib/teact/teact';\n\nconst DEFAULT_DURATION = 400;\n\nexport default function useFocusAfterAnimation(\n ref: RefObject, animationDuration = DEFAULT_DURATION,\n) {\n useEffect(() => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n setTimeout(() => {\n fastRaf(() => {\n if (ref.current) {\n ref.current.focus();\n }\n });\n }, animationDuration);\n }, [ref, animationDuration]);\n}\n","import { ChangeEvent, RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n id?: string;\n value?: string;\n label?: string;\n error?: string;\n ref?: RefObject;\n hasArrow?: boolean;\n placeholder?: string;\n onChange?: (e: ChangeEvent) => void;\n children: any;\n};\n\nconst Select: FC = (props) => {\n const {\n id,\n value,\n label,\n hasArrow,\n error,\n ref,\n placeholder,\n onChange,\n children,\n } = props;\n const labelText = error || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error && 'error',\n labelText && 'with-label',\n hasArrow && 'with-arrow',\n 'input-group',\n );\n\n return (\n
\n \n {children}\n \n {labelText && id && (\n \n )}\n
\n );\n};\n\nexport default memo(Select);\n","import React, {\n FC, useRef, useCallback, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Select from '../ui/Select';\nimport Checkbox from '../ui/Checkbox';\n\nimport './ShippingInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n needEmail: boolean;\n needPhone: boolean;\n needName: boolean;\n needAddress: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst ShippingInfo: FC = ({\n state,\n needEmail,\n needPhone,\n needName,\n needAddress,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const phoneRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.countryIso2) {\n selectCountryRef.current.value = state.countryIso2;\n }\n }, [state.countryIso2]);\n\n const lang = useLang();\n\n useFocusAfterAnimation(inputRef);\n\n const handleAddress1Change = useCallback((e) => {\n dispatch({ type: 'changeAddress1', payload: e.target.value });\n }, [dispatch]);\n\n const handleAddress2Change = useCallback((e) => {\n dispatch({ type: 'changeAddress2', payload: e.target.value });\n }, [dispatch]);\n\n const handleCityChange = useCallback((e) => {\n dispatch({ type: 'changeCity', payload: e.target.value });\n }, [dispatch]);\n\n const handleStateChange = useCallback((e) => {\n dispatch({ type: 'changeState', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handlePostCodeChange = useCallback((e) => {\n dispatch({ type: 'changePostCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleFullNameChange = useCallback((e) => {\n dispatch({ type: 'changeFullName', payload: e.target.value });\n }, [dispatch]);\n\n const handleEmailChange = useCallback((e) => {\n dispatch({ type: 'changeEmail', payload: e.target.value });\n }, [dispatch]);\n\n const handlePhoneChange = useCallback((e) => {\n let { value } = e.target;\n value = `+${value.replace(/\\D/g, '')}`;\n if (phoneRef.current) {\n phoneRef.current.value = value;\n }\n dispatch({ type: 'changePhone', payload: value });\n }, [dispatch]);\n\n const handleSaveInfoChange = useCallback((e) => {\n dispatch({ type: 'changeSaveInfo', payload: e.target.value });\n }, [dispatch]);\n\n const { formErrors } = state;\n return (\n
\n
\n {needAddress ? (\n
\n
{lang('PaymentShippingAddress')}
\n \n \n \n \n \n {countryList.map(({ name, id }) => (\n \n {name}\n \n ))}\n \n\n \n
\n ) : undefined}\n { needName || needEmail || needPhone ? (\n
{lang('PaymentShippingReceiver')}
\n ) : undefined }\n { needName && (\n \n ) }\n { needEmail && (\n \n ) }\n { needPhone && (\n \n ) }\n \n \n
\n );\n};\n\nexport default memo(ShippingInfo);\n","import React, {\n FC, useCallback, memo, useMemo, useEffect,\n} from '../../lib/teact/teact';\n\nimport { ShippingOption } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport RadioGroup from '../ui/RadioGroup';\n\nimport './Shipping.scss';\n\nexport type OwnProps = {\n state: FormState;\n shippingOptions: ShippingOption[];\n currency?: string;\n dispatch: FormEditDispatch;\n};\n\nconst Shipping: FC = ({\n state,\n shippingOptions,\n currency,\n dispatch,\n}) => {\n const lang = useLang();\n\n useEffect(() => {\n if (!shippingOptions || state.shipping) {\n return;\n }\n dispatch({ type: 'changeShipping', payload: shippingOptions[0].id });\n }, [shippingOptions, state.shipping, dispatch]);\n\n const handleShippingSelect = useCallback((value) => {\n dispatch({ type: 'changeShipping', payload: value });\n }, [dispatch]);\n\n const options = useMemo(() => (shippingOptions.map(({ id: value, title: label, amount }) => ({\n label,\n subLabel: formatCurrency(amount, currency, lang.code),\n value,\n }))), [shippingOptions, currency, lang.code]);\n\n return (\n
\n
\n

Select shipping method

\n \n \n
\n );\n};\n\nexport default memo(Shipping);\n","import React, {\n FC, memo,\n} from '../../lib/teact/teact';\n\nimport { LangCode, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport useLang from '../../hooks/useLang';\n\nimport './Checkout.scss';\n\nexport type OwnProps = {\n invoiceContent?: {\n title?: string;\n text?: string;\n photoUrl?: string;\n };\n checkoutInfo?: {\n paymentMethod?: string;\n paymentProvider?: string;\n shippingAddress?: string;\n name?: string;\n phone?: string;\n shippingMethod?: string;\n };\n prices?: Price[];\n totalPrice?: number;\n shippingPrices?: Price[];\n currency?: string;\n};\n\nconst Checkout: FC = ({\n invoiceContent,\n prices,\n shippingPrices,\n checkoutInfo,\n currency,\n totalPrice,\n}) => {\n const lang = useLang();\n\n const { photoUrl, title, text } = invoiceContent || {};\n const {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n } = (checkoutInfo || {});\n\n return (\n
\n
\n {photoUrl && \"\"}\n
\n
{title}
\n

{text}

\n
\n
\n
\n { prices && prices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { shippingPrices && shippingPrices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { totalPrice !== undefined && (\n renderPaymentItem(lang.code, lang('Checkout.TotalAmount'), totalPrice, currency, true)\n ) }\n
\n
\n {paymentMethod && renderCheckoutItem('icon-card', paymentMethod, 'Payment method')}\n {paymentProvider && renderCheckoutItem('stripe-provider', paymentProvider, 'Payment provider')}\n {shippingAddress && renderCheckoutItem('icon-location', shippingAddress, 'Shipping address')}\n {name && renderCheckoutItem('icon-user', name, 'Name')}\n {phone && renderCheckoutItem('icon-phone', phone, 'Phone number')}\n {shippingMethod && renderCheckoutItem('icon-truck', shippingMethod, 'Shipping method')}\n
\n
\n );\n};\n\nfunction renderPaymentItem(\n langCode: LangCode | undefined, title: string, value: number, currency?: string, main = false,\n) {\n return (\n
\n
\n { title }\n
\n
\n {formatCurrency(value, currency, langCode)}\n
\n
\n );\n}\n\nfunction renderCheckoutItem(icon: string, title: string, data: string) {\n return (\n
\n \n
\n
\n { title }\n
\n

\n { data }\n

\n
\n
\n );\n}\n\nexport default memo(Checkout);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { formatCardExpiry } from '../middle/helpers/inputFormatters';\n\nimport InputText from '../ui/InputText';\n\nconst MAX_FIELD_LENGTH = 5;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst ExpiryInput : FC = ({ value, error, onChange }) => {\n // eslint-disable-next-line no-null/no-null\n const expiryInputRef = useRef(null);\n\n const handleKeyDown = useCallback((e) => {\n if (e.key === 'Backspace' && value.charAt(value.length - 1) === '/') {\n const newValue = value.slice(0, value.length - 1);\n if (expiryInputRef.current) {\n expiryInputRef.current.value = newValue;\n }\n }\n }, [value]);\n\n const handleChange = useCallback((e) => {\n onChange(formatCardExpiry(e.target.value));\n }, [onChange]);\n\n return (\n \n );\n};\n\nexport default memo(ExpiryInput);\n","export function formatCardExpiry(input: string) {\n input = input.replace(/[^\\d]/g, '').slice(0, 4);\n const parts = input.match(/.{1,2}/g);\n if (parts?.[0] && Number(parts[0]) > 12) {\n parts[0] = '12';\n }\n if (parts?.[0] && parts[0].length === 2 && !parts[1]) {\n parts[1] = '';\n }\n return parts ? parts.join('/') : '';\n}\n\nexport function formatCardNumber(input: string) {\n input = input.replace(/[^\\d]/g, '');\n const parts = input.match(/.{1,4}/g);\n return parts ? parts.join(' ') : '';\n}\n","import React, {\n FC, memo, useCallback, useState, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport { formatCardNumber } from '../middle/helpers/inputFormatters';\nimport { detectCardType, CardType } from '../common/helpers/detectCardType';\n\nimport InputText from '../ui/InputText';\n\nimport './CardInput.scss';\n\nimport mastercardIconPath from '../../assets/mastercard.svg';\nimport visaIconPath from '../../assets/visa.svg';\n\nconst CARD_NUMBER_MAX_LENGTH = 23;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst CardInput : FC = ({ value, error, onChange }) => {\n // eslint-disable-next-line no-null/no-null\n const cardNumberRef = useRef(null);\n\n useFocusAfterAnimation(cardNumberRef);\n\n const [cardType, setCardType] = useState(CardType.Default);\n useEffect(() => {\n const newCardType = detectCardType(value);\n setCardType(newCardType);\n // eslint-disable-next-line\n }, []);\n\n const handleChange = useCallback((e) => {\n const newValue = formatCardNumber(e.target.value);\n const newCardType = detectCardType(e.target.value);\n setCardType(newCardType);\n onChange(newValue);\n if (cardNumberRef.current) {\n cardNumberRef.current.value = newValue;\n }\n }, [onChange, cardNumberRef]);\n\n const cardIcon = getCardIcon(cardType);\n\n return (\n
\n {cardIcon}\n \n
\n );\n};\n\nexport default memo(CardInput);\n\nfunction getCardIcon(cardType: CardType) {\n switch (cardType) {\n case CardType.Mastercard:\n return \"\";\n case CardType.Visa:\n return \"\";\n default:\n return undefined;\n }\n}\n","import React, {\n FC, useCallback, memo, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Checkbox from '../ui/Checkbox';\nimport Select from '../ui/Select';\nimport ExpiryInput from './ExpiryInput';\nimport CardInput from './CardInput';\n\nimport './PaymentInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n canSaveCredentials: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst PaymentInfo: FC = ({\n state,\n canSaveCredentials,\n needCardholderName,\n needCountry,\n needZip,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.billingCountry) {\n selectCountryRef.current.value = state.billingCountry;\n }\n }, [state.billingCountry]);\n\n const handleCardNumberChange = useCallback((value) => {\n dispatch({ type: 'changeCardNumber', payload: value });\n }, [dispatch]);\n\n const handleCardholderChange = useCallback((e) => {\n dispatch({ type: 'changeCardholder', payload: e.target.value.toUpperCase() });\n }, [dispatch]);\n\n const handleExpiryChange = useCallback((value) => {\n dispatch({ type: 'changeExpiryDate', payload: value });\n }, [dispatch]);\n\n const handleCvvChange = useCallback((e) => {\n dispatch({ type: 'changeCvvCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeBillingCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handleBillingPostCodeChange = useCallback((e) => {\n dispatch({ type: 'changeBillingZip', payload: e.target.value });\n }, [dispatch]);\n\n const handleChangeSaveCredentials = useCallback((e) => {\n dispatch({ type: 'changeSaveCredentials', payload: e.target.value });\n }, [dispatch]);\n\n const lang = useLang();\n\n const { formErrors = {} } = state;\n\n return (\n
\n
\n
{lang('PaymentCardTitle')}
\n \n { needCardholderName && (\n \n )}\n
\n \n \n
\n { needCountry || needZip ? (\n
{lang('PaymentBillingAddress')}
\n ) : undefined }\n { needCountry && (\n \n {\n countryList.map(({ name }) => (\n \n {name}\n \n ))\n }\n \n ) }\n { needZip && (\n \n )}\n { canSaveCredentials && (\n \n ) }\n \n
\n );\n};\n\nexport default memo(PaymentInfo);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\nimport { PaymentStep, ShippingOption, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { detectCardTypeText } from '../common/helpers/detectCardType';\nimport usePaymentReducer, { FormState } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport ShippingInfo from './ShippingInfo';\nimport Shipping from './Shipping';\nimport Checkout from './Checkout';\nimport PaymentInfo from './PaymentInfo';\nimport Button from '../ui/Button';\nimport Modal from '../ui/Modal';\nimport Transition from '../ui/Transition';\nimport Spinner from '../ui/Spinner';\n\nimport './PaymentModal.scss';\n\nconst DEFAULT_PROVIDER = 'stripe';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n nameRequested?: boolean;\n shippingAddressRequested?: boolean;\n phoneRequested?: boolean;\n emailRequested?: boolean;\n flexible?: boolean;\n phoneToProvider?: boolean;\n emailToProvider?: boolean;\n currency?: string;\n prices?: Price[];\n isProviderError: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n};\n\ntype GlobalStateProps = Pick;\n\nconst Invoice: FC = ({\n isOpen,\n onClose,\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n phoneToProvider,\n emailToProvider,\n currency,\n passwordMissing,\n isProviderError,\n invoiceContent,\n nativeProvider,\n prices,\n needCardholderName,\n needCountry,\n needZip,\n error,\n}) => {\n const {\n validateRequestedInfo,\n sendPaymentForm,\n setPaymentStep,\n sendCredentialsInfo,\n clearPaymentError,\n } = getDispatch();\n\n const [paymentState, paymentDispatch] = usePaymentReducer();\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n\n useEffect(() => {\n if (step || error) {\n setIsLoading(false);\n }\n }, [step, error]);\n\n useEffect(() => {\n if (error?.field) {\n paymentDispatch({\n type: 'setFormErrors',\n payload: {\n [error.field]: error.message,\n },\n });\n }\n }, [error, paymentDispatch]);\n\n useEffect(() => {\n if (savedInfo) {\n const {\n name: fullName, phone, email, shippingAddress,\n } = savedInfo;\n paymentDispatch({\n type: 'updateUserInfo',\n payload: {\n fullName,\n phone: phone && phone.charAt(0) !== '+'\n ? `+${phone}`\n : phone,\n email,\n ...(shippingAddress || {}),\n },\n });\n }\n }, [savedInfo, paymentDispatch]);\n\n const handleErrorModalClose = useCallback(() => {\n clearPaymentError();\n }, [clearPaymentError]);\n\n const totalPrice = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return 0;\n }\n\n return getTotalPrice(prices, shippingOptions, paymentState.shipping);\n }, [step, paymentState.shipping, prices, shippingOptions]);\n\n const checkoutInfo = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return undefined;\n }\n return getCheckoutInfo(paymentState, shippingOptions, nativeProvider || '');\n }, [step, paymentState, shippingOptions, nativeProvider]);\n\n function renderError() {\n if (!error) {\n return undefined;\n }\n return (\n \n

{error.description || 'Error'}

\n

{error.description || 'Error'}

\n \n {lang('OK')}\n \n
\n );\n }\n\n function renderModalContent(currentStep: PaymentStep) {\n switch (currentStep) {\n case PaymentStep.ShippingInfo:\n return (\n \n );\n case PaymentStep.Shipping:\n return (\n \n );\n case PaymentStep.PaymentInfo:\n return (\n \n );\n case PaymentStep.Checkout:\n return (\n \n );\n default:\n return undefined;\n }\n }\n\n const validateRequest = useCallback(() => {\n const { saveInfo } = paymentState;\n const requestInfo = getRequestInfo(paymentState);\n validateRequestedInfo({ requestInfo, saveInfo });\n }, [validateRequestedInfo, paymentState]);\n\n const sendCredentials = useCallback(() => {\n const credentials = getCredentials(paymentState);\n sendCredentialsInfo({\n credentials,\n });\n }, [sendCredentialsInfo, paymentState]);\n\n const sendForm = useCallback(() => {\n sendPaymentForm({\n shippingOptionId: paymentState.shipping,\n saveCredentials: paymentState.saveCredentials,\n });\n }, [sendPaymentForm, paymentState]);\n\n const setStep = useCallback((nextStep) => {\n setPaymentStep({ step: nextStep });\n }, [setPaymentStep]);\n\n const handleButtonClick = useCallback(() => {\n setIsLoading(true);\n switch (step) {\n case PaymentStep.ShippingInfo:\n return validateRequest();\n case PaymentStep.Shipping:\n return setStep(PaymentStep.PaymentInfo);\n case PaymentStep.PaymentInfo:\n return sendCredentials();\n case PaymentStep.Checkout:\n return sendForm();\n default:\n return () => {\n };\n }\n }, [step, validateRequest, setStep, sendCredentials, sendForm]);\n\n const modalHeader = useMemo(() => {\n switch (step) {\n case PaymentStep.ShippingInfo:\n return lang('PaymentShippingInfo');\n case PaymentStep.Shipping:\n return lang('PaymentShippingMethod');\n case PaymentStep.PaymentInfo:\n return lang('PaymentCardInfo');\n case PaymentStep.Checkout:\n return lang('PaymentCheckout');\n default:\n return '';\n }\n }, [step, lang]);\n\n const buttonText = useMemo(() => {\n switch (step) {\n case PaymentStep.Checkout:\n return lang('Checkout.PayPrice', formatCurrency(totalPrice, currency, lang.code));\n default:\n return lang('Next');\n }\n }, [step, lang, currency, totalPrice]);\n\n if (isProviderError) {\n return (\n \n

\n Sorry, Telegram WebZ doesn't support payments with this provider yet.
\n Please use one of our mobile apps to do this.\n

\n \n {lang('OK')}\n \n \n );\n }\n\n return (\n \n
\n \n \n \n

{modalHeader}

\n
\n {step !== undefined ? (\n \n {() => (\n
\n {renderModalContent(step)}\n
\n )}\n
\n ) : (\n
\n \n
\n )}\n
\n \n {buttonText}\n \n
\n {error && !error.field && renderError()}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps & GlobalStateProps => {\n const {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n invoice,\n invoiceContent,\n nativeProvider,\n nativeParams,\n passwordMissing,\n error,\n } = global.payment;\n\n const isProviderError = Boolean(invoice && (!nativeProvider || nativeProvider !== DEFAULT_PROVIDER));\n const { needCardholderName, needCountry, needZip } = (nativeParams || {});\n const {\n nameRequested,\n phoneRequested,\n emailRequested,\n shippingAddressRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n } = (invoice || {});\n\n return {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nativeProvider,\n passwordMissing,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n isProviderError,\n invoiceContent,\n needCardholderName,\n needCountry,\n needZip,\n error,\n };\n },\n)(Invoice));\n\nfunction findShippingOption(shippingOptions: ShippingOption[], optionId: string) {\n return shippingOptions.find(({ id }) => id === optionId);\n}\n\nfunction getShippingPrices(shippingOptions: ShippingOption[], shippingOption: string) {\n const option = findShippingOption(shippingOptions, shippingOption);\n return option?.prices;\n}\n\nfunction getTotalPrice(prices: Price[] = [], shippingOptions: ShippingOption[] | undefined, shippingOption: string) {\n const shippingPrices = shippingOptions\n ? getShippingPrices(shippingOptions, shippingOption)\n : [];\n let total = 0;\n const totalPrices = prices.concat(shippingPrices || []);\n total = totalPrices.reduce((acc, cur) => {\n return acc + cur.amount;\n }, total);\n return total;\n}\n\nfunction getCheckoutInfo(state: FormState, shippingOptions: ShippingOption[] | undefined, paymentProvider: string) {\n const cardTypeText = detectCardTypeText(state.cardNumber);\n const paymentMethod = `${cardTypeText} *${state.cardNumber.slice(-4)}`;\n const shippingAddress = state.streetLine1\n ? `${state.streetLine1}, ${state.city}, ${state.countryIso2}`\n : undefined;\n const { phone, fullName: name } = state;\n const shippingOption = shippingOptions ? findShippingOption(shippingOptions, state.shipping) : undefined;\n const shippingMethod = shippingOption?.title;\n return {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n\nfunction getRequestInfo(paymentState: FormState) {\n const {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n fullName: name,\n phone,\n email,\n } = paymentState;\n\n const shippingAddress = {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n };\n\n return {\n name,\n phone,\n email,\n shippingAddress,\n };\n}\n\nfunction getCredentials(paymentState: FormState) {\n const {\n cardNumber, cardholder, expiry, cvv, billingCountry, billingZip,\n } = paymentState;\n const [expiryMonth, expiryYear] = expiry.split('/');\n const data = {\n cardNumber,\n cardholder,\n expiryMonth,\n expiryYear,\n cvv,\n country: billingCountry,\n zip: billingZip,\n };\n\n return {\n data,\n };\n}\n","import React, {\n FC, memo, useMemo,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { Price } from '../../types';\nimport { ApiShippingAddress } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Checkout from './Checkout';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './PaymentModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n prices?: Price[];\n shippingPrices: any;\n totalAmount?: number;\n currency?: string;\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n photoUrl?: string;\n text?: string;\n title?: string;\n credentialsTitle?: string;\n shippingMethod?: string;\n};\n\nconst ReceiptModal: FC = ({\n isOpen,\n onClose,\n prices,\n shippingPrices,\n totalAmount,\n currency,\n info,\n photoUrl,\n text,\n title,\n credentialsTitle,\n shippingMethod,\n}) => {\n const lang = useLang();\n const checkoutInfo = useMemo(() => {\n return getCheckoutInfo(credentialsTitle, info, shippingMethod);\n }, [info, shippingMethod, credentialsTitle]);\n\n return (\n \n
\n
\n \n \n \n

{lang('PaymentReceipt')}

\n
\n
\n \n
\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { receipt } = global.payment;\n const {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n } = (receipt || {});\n\n return {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n };\n },\n)(ReceiptModal));\n\nfunction getCheckoutInfo(paymentMethod?: string,\n info?:\n { phone?: string;\n name?: string;\n shippingAddress?: ApiShippingAddress;\n },\n shippingMethod?: string) {\n if (!info) {\n return { paymentMethod };\n }\n const { shippingAddress } = info;\n const fullAddress = shippingAddress?.streetLine1\n ? `${shippingAddress.streetLine1}, ${shippingAddress.city}, ${shippingAddress.countryIso2}`\n : undefined;\n const { phone, name } = info;\n return {\n paymentMethod,\n paymentProvider: 'Stripe',\n shippingAddress: fullAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n \n \n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import React, {\n FC, useEffect, useState, memo,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n async function handleCropClick() {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n function handleAvatarCrop(croppedImg: File) {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }\n\n function handleModalClose() {\n setSelectedFile(undefined);\n }\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n"],"names":["createGhost","source","origin","ghost","document","createElement","classList","add","img","Image","draggable","oncontextmenu","stopEvent","src","HTMLVideoElement","poster","appendChild","MediaViewerOrigin","profileInfo","querySelector","cloneNode","isMessageImageFullyVisible","container","imageEl","messageListElement","imgOffsetTop","offsetTop","closest","id","includes","parentElement","scrollTop","offsetHeight","applyStyles","element","styles","Object","assign","style","getNodes","message","containerSelector","mediaSelector","mediaEls","querySelectorAll","mediaEl","length","applyShape","firstChild","objectFit","memo","withGlobal","global","isDownloading","selectIsDownloading","isProtected","selectIsMessageProtected","mediaData","isVideo","isZoomed","fileName","isAvatar","onCloseMediaViewer","onForward","onZoomToggle","downloadMessageMedia","cancelMessageMediaDownload","getDispatch","loadProgress","downloadProgress","useMediaWithLoadProgress","getMessageMediaHash","handleDownloadClick","useCallback","lang","useLang","MenuButton","useMemo","onTrigger","isOpen","Button","round","size","color","className","undefined","onClick","ariaLabel","IS_SINGLE_COLUMN_LAYOUT","DropdownMenu","trigger","positionX","MenuItem","icon","Math","href","download","ProgressSpinner","progress","noCross","renderDownloadButton","text","isHidden","isForVideo","isMultiline","setIsMultiline","useState","useEffect","footerContent","checkIsMultiline","height","clientHeight","REM","handleResize","throttle","window","addEventListener","removeEventListener","classNames","buildClassName","e","stopPropagation","dir","prop","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","units","bytes","number","floor","log","toFixed","bufferedProgress","currentTime","duration","fileSize","isForceMobileVersion","isPlayed","isFullscreenSupported","isFullscreen","onChangeFullscreen","onPlayPause","isVisible","setVisibility","onSeek","seekerRef","useRef","isSeeking","timeout","setTimeout","clearTimeout","body","remove","handleSeek","current","width","left","getBoundingClientRect","clientX","MouseEvent","targetTouches","max","min","handleStartSeek","handleStopSeek","captureEvents","onCapture","onRelease","onDrag","percentagePlayed","percentageBuffered","ref","renderSeekLine","ripple","formatMediaDuration","renderTime","loadedPercent","totalSize","formatFileSize","url","isGif","posterData","posterSize","isMediaViewerOpen","noPlay","onClose","toggleControls","areControlsVisible","videoRef","setIsPlayed","IS_TOUCH_ENV","IS_IOS","setCurrentTime","setFullscreen","exitFullscreen","elRef","setIsFullscreen","Boolean","useLayoutEffect","listener","listenerEnter","listenerExit","video","PLATFORM_ENV","requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","mozRequestFullScreen","mozCancelFullScreen","webkitCancelFullScreen","webkitExitFullscreen","useFullscreenStatus","isBuffered","bufferingHandlers","useBuffering","shouldRender","shouldRenderSpinner","transitionClassNames","spinnerClassNames","useShowTransition","shouldRenderPlayButton","playButtonClassNames","pause","safePlay","togglePlayState","useVideoCleanup","handleMouseMove","handleMouseOut","target","handleTimeUpdate","currentTarget","handleEnded","handleFullscreenChange","position","togglePayingStateBySpace","key","preventDefault","wrapperStyle","videoStyle","onMouseMove","onMouseOut","autoPlay","playsInline","loop","muted","onPlay","onEnded","onDoubleClick","onTimeUpdate","join","square","ownProps","chatId","threadId","messageId","avatarOwnerId","profilePhotoIndex","selectChatMessage","senderId","avatarOwner","selectUser","selectChat","selectScheduledMessage","props","isActive","animationLevel","onFooterClick","isFooterHidden","setIsFooterHidden","photo","getMessagePhoto","getMessageVideo","webPagePhoto","getMessageWebPagePhoto","webPageVideo","getMessageWebPageVideo","isDocumentPhoto","isMessageDocumentPhoto","isDocumentVideo","isMessageDocumentVideo","isPhoto","isFromSharedMedia","isFromSearch","isGhostAnimation","getMediaHash","isFull","photos","getChatAvatarHash","pictogramBlobUrl","useMedia","ApiMediaFormat","previewMediaHash","previewBlobUrl","fullMediaBlobUrl","getMessageMediaFormat","localBlobUrl","blobUrl","bestImageData","thumbDataUri","useBlurSync","getMessageMediaThumbDataUri","videoSize","getMessageFileSize","dimensions","getMessageDocument","mediaSize","getPhotoFullDimensions","getVideoDimensions","AVATAR_FULL_DIMENSIONS","renderPhoto","calculateMediaViewerDimensions","textParts","renderMessageText","hasFooter","onContextMenu","imageSize","canDrag","Spinner","renderVideoPreview","alt","ANIMATION_DURATION","cancelAnimation","SwipeDirection","getMessageId","selectMessage","rest","containerRef","activeSlideRef","transformRef","x","y","scale","swipeDirectionRef","isActiveRef","activeMessageId","setActiveMessageId","forceUpdate","useForceUpdate","setTransform","value","setIsActive","debounceSetMessage","useDebounce","debounceSwipeDirection","debounceActive","handleToggleFooterVisibility","isFooter","innerHeight","pageY","pageX","innerWidth","callback","delay","savedCallback","useTimeout","lastTransform","lastDragOffset","lastZoomCenter","panDelta","initialContentRect","content","lastGestureTime","Date","now","setLastGestureTime","debounce","changeSlide","direction","mId","offset","animateNumber","from","to","timing","timingFunctions","onUpdate","isNotPassive","excludedClosestSelector","arePropsShallowEqual","event","captureEvent","dragOffsetX","dragOffsetY","touches","IOS_SCREEN_EDGE_THRESHOLD","absOffsetX","abs","absOffsetY","h","Vertical","Horizontal","onZoom","zoomFactor","initialCenterX","initialCenterY","currentCenterX","currentCenterY","MAX_ZOOM","scaleFactor","scaledCenterX","scaledCenterY","scaleOffsetX","scaleOffsetY","centerX","centerY","absX","absY","boundaries","s1","x1","y1","k","Vx","Vy","minOffsetX","maxOffsetX","right","minOffsetY","top","maxOffsetY","bottom","dirX","nextMessageId","previousMessageId","offsetX","offsetY","getAnimationStyle","INITIAL_MATRIX","SCALE_VALUES","ZOOM_SAFE_AREA","children","noWrap","canPan","zoomLevel","panDeltaX","panDeltaY","onPan","tunedZoomLevel","isDragging","setIsDragging","dragData","setDragData","dx","dy","matrixData","setMatrixData","panWrapperRef","panContainerRef","newZoomLevel","newPandx","newPandy","newMatrixData","areSortedArraysEqual","oldScale","wrapper","image","wrapperRect","imageRect","newImgWidth","newImgHeight","newImgX","newImgY","calculateSafeZoneOnZoom","transform","toString","onMouseDown","newDragData","onMouseUp","deltaX","deltaY","getNewMatrixData","sender","isUserId","selectSender","closeMediaViewer","focusMessage","toggleChatInfo","handleFocusMessage","forceSyncOnIOs","senderTitle","getSenderTitle","Avatar","user","chat","renderText","formatMediaDateTime","date","Transition","isShown","onChangeZoom","prevIsShown","usePrevious","inputRef","setZoomLevel","disabled","step","type","onChange","Number","mediaViewer","settings","byKey","chatMessages","collectionIds","selectScheduledMessages","selectChatMessages","selectOutlyingIds","selectListedIds","currentSearch","selectCurrentMediaSearch","foundIds","resultsByType","media","openMediaViewer","openForwardMenu","singleMessageId","messageIds","getChatMediaMessageIds","selectedMediaMessageIndex","indexOf","isFirst","isLast","animationKey","prevSenderId","slideAnimation","headerAnimation","canPanZoomWrap","setCanPanZoomWrap","setIsZoomed","setPanDelta","getMessageFileName","toggle","mql","matchMedia","MEDIA_VIEWER_MEDIA_QUERY","addListener","removeListener","prevMessage","prevOrigin","prevAvatarOwner","prevBestImageData","dispatchHeavyAnimationEvent","ANIMATION_END_DELAY","fromImage","windowWidth","windowSize","availableWidth","availableHeight","getMediaViewerAvailableDimensions","toWidth","toHeight","calculateDimensions","toLeft","toTop","topOffsetRem","matches","getTopOffset","fromTop","fromLeft","fromWidth","fromHeight","uncovered","realWidth","realHeight","srcWidth","srcHeight","uncover","fromTranslateX","fromTranslateY","fromScaleX","fromScaleY","requestAnimationFrame","clearShape","contains","removeChild","animateOpening","toImage","getElementById","targetTop","el","display","rect","windowHeight","isElementInViewport","shouldFadeOut","existingGhost","getElementsByClassName","transition","transformOrigin","opacity","animateClosing","timer","closeZoom","handleZoomToggle","handleZoomValue","level","canCloseZoom","close","handleFooterClick","handleForward","fromChatId","forceOnHeavyAnimation","captureEscKeyListener","stopCurrentAudio","fromId","index","handlePan","renderSenderInfo","useHistoryBack","handleKeyDown","shouldCloseOnVideo","ShowTransition","isRtl","activeKey","name","currentUserId","chatOrUserIds","filterRef","filter","filterPlaceholder","loadMore","onFilterChange","onSelectChatOrUser","onCloseAnimationEnd","viewportIds","getMore","useInfiniteScroll","resetFilter","useInputFocusOnOpen","handleFilterChange","useKeyboardListNavigation","modalHeader","InputText","onKeyDown","placeholder","viewportOffset","Modal","header","InfiniteScroll","items","onLoadMore","withAbsolutePositioning","maxHeight","CHAT_HEIGHT_PX","map","i","ListItem","PrivateChatInfo","status","userId","GroupChatInfo","Loading","chats","byId","chatsById","listIds","orderedPinnedIds","activeListIds","active","archivedListIds","archived","pinnedIds","contactIds","contactList","userIds","setForwardChatId","exitForwardMode","setFilter","markIsShown","unmarkIsShown","useFlag","chatAndContactIds","priorityIds","unique","chatIds","getCanPostInChat","MAIN_THREAD_ID","usersById","getGlobal","users","sortChatIds","filterChatsByName","filterUsersByName","handleSelectUser","renderingChatAndContactIds","useCurrentOrPrev","getErrorHeader","error","isSlowMode","hasErrorKey","pick","dialogs","dismissDialog","acceptInviteConfirmation","sendMessage","showNotification","isModalOpen","openModal","closeModal","dialog","contactRequest","invite","hash","title","about","participantsCount","isChannel","isRequestNeeded","participantsText","joinText","requestToJoinText","renderInviteHeader","isText","renderInvite","contact","getReadableErrorText","notifications","dismissNotification","localId","Notification","onDismiss","toggleSafeLinkModal","handleOpen","open","ensureProtocol","handleDismiss","renderingUrl","ConfirmDialog","confirmLabel","confirmHandler","MAX_SAFE_DATE","WEEKDAY_LETTERS","isDisabledDay","year","month","day","minDate","maxDate","selectedDay","fixedMinDate","getDayStart","fixedMaxDate","formatInputTime","String","padStart","formatDay","selectedAt","minAt","maxAt","isFutureMode","isPastMode","withTimePicker","submitButtonLabel","secondButtonLabel","onSubmit","onSecondButtonClick","passedSelectedDate","prevIsOpen","isTimeInputFocused","markTimeInputAsFocused","unmarkTimeInputAsFocused","selectedDate","setSelectedDate","currentMonthAndYear","setCurrentMonthAndYear","getFullYear","getMonth","selectedHours","setSelectedHours","getHours","selectedMinutes","setSelectedMinutes","getMinutes","getDate","currentYear","currentMonth","getTime","newSelectedDate","shouldDisableNextMonth","shouldDisablePrevMonth","prevMonthGrid","currentMonthGrid","nextMonthGrid","setDate","setMonth","setFullYear","firstDay","getDay","totalDaysInPrevMonth","push","gridDate","lastRowDaysCount","buildCalendarGrid","submitLabel","formatDateToString","code","formatTime","formatSubmitLabel","handleChangeHours","replace","hours","setHours","hoursStr","handleChangeMinutes","minutes","setMinutes","minutesStr","d","dateCopy","role","tabIndex","handleDateSelect","inputMode","onFocus","onBlur","historyCalendarSelectedAt","searchMessagesByDate","closeHistoryCalendar","handleJumpToDate","timestamp","valueOf","isSchedule","selectCurrentMessageList","canDeleteForAll","selectAllowedMessageActions","contactName","getUserFirstOrLastName","getPrivateChatUserId","willDeleteForCurrentUserOnly","isChatBasicGroup","willDeleteForAll","isChatSuperGroup","album","deleteMessages","deleteScheduledMessages","handleDeleteMessageForAll","messages","shouldDeleteForAll","handleDeleteMessageForSelf","onEnter","isPrivateChat","isChatWithSelf","selectIsChatWithSelf","isChatChannel","isGroup","isSuperGroup","canPinForAll","pinMessage","handlePinMessageForAll","isUnpin","handlePinMessage","isOneSide","isSilent","pinnedMessagesCount","onUnpin","selectedMessageIds","selectedMessages","selectCanDeleteSelectedMessages","selectCurrentChat","exitMessageSelectMode","reportMessages","selectedReason","setSelectedReason","description","setDescription","handleReport","reason","handleSelectReason","handleDescriptionChange","REPORT_OPTIONS","label","RadioGroup","options","selected","messageListType","canDelete","canReport","selectCanReportSelectedMessages","canDownload","selectCanDownloadSelectedMessages","hasProtectedMessage","selectHasProtectedMessage","selectedMessagesCount","selectSelectedMessagesCount","canDeleteMessages","canReportMessages","canDownloadMessages","canPost","openForwardMenuForSelectedMessages","downloadSelectedMessages","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isReportModalOpen","openReportModal","closeReportModal","captureKeyboardListeners","onBackspace","onDelete","onEsc","handleDownload","prevSelectedMessagesCount","renderingSelectedMessagesCount","formattedMessagesCount","renderButton","destructive","seenByModal","memberIds","seenByUserIds","openChat","closeSeenByModal","handleClick","renderingMemberIds","noStatusOrTyping","reactorModal","reactions","reactors","loadReactors","closeReactorListModal","isClosing","startClosing","stopClosing","chosenTab","setChosenTab","canShowFilters","count","results","chatIdRef","handleCloseAnimationEnd","handleClose","handleLoadMore","allReactions","l","reaction","concat","nextOffset","LoadMoreDirection","formatIntegerCompact","find","ReactionStaticEmoji","fullName","getUserFullName","activeEmojiInteraction","animatedEffect","selectAnimatedEmojiEffect","effectAnimationId","localEffectAnimation","keys","ANIMATED_STICKERS_PATHS","stopActiveEmojiInteraction","isHiding","startHiding","isPlaying","startPlaying","timeoutRef","stop","handleCancelAnimation","dispatchHeavyAnimationStop","effectAnimationData","localEffectAnimationData","setLocalEffectAnimationData","getAnimationData","then","data","startSize","isReversed","AnimatedSticker","animationData","play","quality","IS_ANDROID","noLoop","onLoad","onSelect","buttonRef","activeElement","privateChatUserId","isPinned","selectIsChatPinned","isMuted","selectIsChatMuted","selectNotifySettings","selectNotifyExceptions","canChangeFolder","chatFolders","orderedIds","withUsername","isChatFolderModalOpen","openChatFolderModal","closeChatFolderModal","contextActions","useChatContextActions","handleDelete","handleChatFolderChange","useSelectWithEnter","avatarSize","DeleteChatModal","runThrottled","cb","topUserIds","topPeers","recentlyFoundChatIds","globalSearch","onReset","loadTopUsers","loadContactList","addRecentlyFoundChatId","clearRecentlyFoundChats","topUsersRef","useHorizontalScroll","shouldReplaceHistory","lastSyncTime","privateChatUser","searchQuery","mediaThumbnail","mediaBlobUrl","isRoundVideo","getMessageRoundVideo","isSavedMessages","isSelf","getChatTitle","isVerified","VerifiedIcon","Link","formatPastTimeShort","renderMessageSummary","renderSummary","searchDate","suggestions","match","suggestion","currentDate","latestYear","getSuggestionsFromDate","localContactIds","fetchingStatus","globalResults","localResults","globalChatIds","globalUserIds","localChatIds","localUserIds","byChatId","globalMessagesByChatId","dateSearchQuery","onSearchDateSelect","searchMessagesGlobal","setGlobalSearchChatId","shouldShowMoreLocal","setShouldShowMoreLocal","shouldShowMoreGlobal","setShouldShowMoreGlobal","query","handleChatClick","handlePickerItemClick","startsWith","MEMO_EMPTY_ARRAY","contactIdsWithMe","foundContactIds","foundMessages","split","sort","a","b","handleClickShowMoreLocal","handleClickShowMoreGlobal","nothingFound","noScrollRestoreOnTop","noFastList","NothingFound","PickerSelectedItem","chatOrUserId","clickArg","createMapStateToProps","currentType","isVoice","activeDownloads","theme","selectTheme","isLoading","searchChatId","isChatProtected","CURRENT_TYPE","observe","observeIntersectionForMedia","useIntersectionObserver","rootRef","throttleMs","handleSelectMedia","canRenderContents","useAsyncRendering","SLIDE_TRANSITION_DURATION","isMediaGrid","isMessageList","itemSelector","Media","idPrefix","observeIntersection","handleMessageFocus","shouldDrawDateDivider","toYearMonth","formatMonthAndYear","WebLink","getSenderName","onMessageClick","Document","withDate","datetime","smaller","onDateClick","openAudioPlayer","handlePlayAudio","Audio","AudioOrigin","TABS","GlobalSearchContent","CHAT_TABS","slice","TRANSITION_RENDER_COUNT","currentContent","setGlobalSearchContent","setGlobalSearchDate","activeTab","setActiveTab","parseDateString","handleSwitchTab","tab","handleSearchDateSelect","TabList","tabs","onSwitchTab","renderCount","INITIAL_STATE","currentPassword","password","hint","email","twoFaReducer","state","action","payload","currentScreen","editedFolderId","onSaveFilter","onScreenSelect","signOut","deleteChatFolder","isSignOutDialogOpen","setIsSignOutDialogOpen","isDeleteFolderDialogOpen","setIsDeleteFolderDialogOpen","openSignOutConfirmation","closeSignOutConfirmation","openDeleteFolderConfirmation","closeDeleteFolderConfirmation","handleSignOutMessage","handleDeleteFolderMessage","SettingsMenuButton","SettingsScreens","renderHeaderContent","confirmIsDestructive","currentUser","loadProfilePhotos","profileId","ProfileInfo","forceShowSelf","ChatExtra","LINK_PREFIX","LINK_PREFIX_REGEX","USERNAME_REGEX","runDebouncedForCheckUsername","currentUsername","asLink","isUsernameAvailable","checkUsername","username","setUsername","langPrefix","usernameSuccess","usernameError","test","handleUsernameChange","newUsername","trim","isValid","isUsernameValid","success","readOnly","ERROR_FIRST_NAME_MISSING","ERROR_BIO_TOO_LONG","profileEdit","firstName","currentFirstName","lastName","currentLastName","fullInfo","bio","currentBio","currentAvatarHash","loadCurrentUser","updateProfile","isUsernameTouched","setIsUsernameTouched","isProfileFieldsTouched","setIsProfileFieldsTouched","setError","setPhoto","setFirstName","setLastName","setBio","currentAvatarBlobUrl","ProfileEditProgress","isUsernameError","isSaveButtonShown","handlePhotoChange","newPhoto","handleFirstNameChange","handleLastNameChange","handleBioChange","handleProfileSave","trimmedFirstName","trimmedLastName","trimmedBio","AvatarEditable","UsernameInput","FloatingActionButton","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb","setSettingOption","renderFileSizeCallback","AUTODOWNLOAD_FILESIZE_MB_LIMITS","handleFileSizeChange","renderAutoDownloadBlock","canAutoLoadFromContacts","canAutoLoadInPrivateChats","canAutoLoadInGroups","canAutoLoadInChannels","Checkbox","checked","onCheck","isChecked","RangeSlider","renderValue","renderContentSizeSlider","runThrottledForLoadRecommended","orderedFolderIds","foldersById","recommended","recommendedChatFolders","onCreateFolder","onEditFolder","loadRecommendedChatFolders","addChatFolder","showDialog","setAnimationData","isAnimationLoaded","setIsAnimationLoaded","handleAnimationLoad","handleCreateFolder","chatsCountByFolderId","useFolderManagerForChatsCount","userFolders","folder","subtitle","getFolderDescriptionText","handleCreateFolderFromRecommended","STICKER_SIZE_FOLDER_SETTINGS","pill","fluid","narrow","multiline","itemName","itemPluralName","ERROR_NO_TITLE","ERROR_NO_CHATS","loadedActiveChatIds","loadedArchivedChatIds","dispatch","onAddIncludedChats","onAddExcludedChats","onBack","editChatFolder","isIncludedChatsListExpanded","setIsIncludedChatsListExpanded","isExcludedChatsListExpanded","setIsExcludedChatsListExpanded","selectedChatIds","includedChatIds","selectedChatTypes","includedChatTypes","selectChatFilters","excludedChatIds","excludedChatTypes","folderId","visibleIncludedChatIds","visibleExcludedChatIds","allLoadedChatsSet","Set","loadedIncludedChatIds","findIntersectionWithSet","loadedExcludedChatIds","renderChats","mode","visibleChatIds","isExpanded","leftChatsCount","clickHandler","chatType","INCLUDED_CHAT_TYPES","typeKey","EXCLUDED_CHAT_TYPES","inactive","renderChatType","isTouched","folderUpdate","selectedIds","filterValue","onSelectedIdsChange","onSelectedChatTypesChange","chatTypes","shouldMinimize","hasMaxChats","focus","handleItemClick","newSelectedIds","splice","handleChatTypeClick","newSelectedChatTypes","selectedType","isMinimized","canClose","isSelected","withChatType","chatFilter","folderAllOrderedIds","useFolderManagerForOrderedIds","ALL_FOLDER_ID","folderArchivedOrderedIds","ARCHIVED_FOLDER_ID","displayedIds","newFilter","handleSelectedIdsChange","ids","includeFilters","excludeFilters","handleSelectedChatTypesChange","newFilters","forEach","shownScreen","handleReset","handleEditFolder","handleAddIncludedChats","handleAddExcludedChats","STICKER_SIZE_PICKER_HEADER","stickerSet","isIntersecting","useIsIntersecting","mediaHash","lottieData","useMediaTransition","firstLetters","getFirstLetters","hasThumbnail","isGifs","IS_WEBM_SUPPORTED","stickers","firstSticker","isLottie","STICKER_SIZE_GENERAL_SETTINGS","StickerButton","sticker","ANIMATION_LEVEL_OPTIONS","TIME_FORMAT_OPTIONS","stickerSetIds","added","setIds","stickerSetsById","setsById","defaultReaction","appConfig","messageTextSize","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","timeFormat","stickerSettingsRef","observeIntersectionForCovers","setSticker","KEYBOARD_SEND_OPTIONS","subLabel","IS_MAC_OS","handleAnimationLevelChange","newLevel","_","handleMessageTextSizeChange","newSize","documentElement","setProperty","setAttribute","handleTimeFormatChange","newTimeFormat","wasTimeFormatSetManually","setTimeFormat","handleStickerSetClick","stickerSets","installedDate","fromSticker","fileSelector","openSystemFilesDialog","accept","noMultiple","removeAttribute","onchange","click","hex2rgb","param","parseInt","substring","rgb2hex","p0","p1","p2","rgb2hsb","r","g","s","v","hsb2rgb","f","p","q","t","getPatternColor","rgbColor","hue","saturation","wallpaper","slug","localMediaHash","thumbRef","useCanvasBlur","thumbnail","dataUri","isLoadAllowed","setIsLoadAllowed","fullMedia","wasLoadDisabled","UPLOADING_WALLPAPER_SLUG","cacheKeyRef","handleSelect","blob","fetchBlob","cacheApi","save","CUSTOM_BG_CACHE_NAME","isAllowed","background","isBlurred","themes","loadedWallpapers","loadWallpapers","uploadWallpaper","setThemeSettings","themeRef","handleFileSelect","files","handleUploadWallpaper","handleSetColor","handleResetToDefault","backgroundColor","patternColor","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","handleWallPaperSelect","currentWallpaper","async","defaultRGB","rgb","canvas","context","getContext","preloadImage","naturalHeight","naturalWidth","offsetWidth","drawImage","getImageData","blockSize","getAverageColor","handleWallPaperBlurChange","isUploading","DEFAULT_HSB","PREDEFINED_COLORS","hsb2positions","hsb","rects","colorPosition","colorRect","huePosition","hueRect","positions2hsb","colorPickerRef","huePickerRef","isFirstRunRef","setHsb","getInitialHsb","hsbRef","markIsDragging","unmarkIsDragging","rgbInput","setRgbInput","hexInput","setHexInput","rectsRef","colorCtxRef","offsetLeft","handleColorDrag","handleHueDrag","selectorToPreventScroll","withCursor","hex","hueHex","w","ctx","imgData","createImageData","pixels","col","perY","st","ed","perX","putImageData","drawColor","drawHue","handleRgbChange","rgbValue","channel","handleHexChange","hexValue","handlePredefinedColorClick","dataset","hasPrivateChatsNotifications","hasPrivateChatsMessagePreview","hasGroupNotifications","hasGroupMessagePreview","hasBroadcastNotifications","hasBroadcastMessagePreview","hasContactJoinedNotifications","hasWebNotifications","hasPushNotifications","notificationSoundVolume","loadNotificationSettings","updateContactSignUpNotification","updateNotificationSettings","updateWebNotificationSettings","runDebounced","handleSettingsChange","peerType","setting","currentIsSilent","currentShouldShowPreviews","shouldShowPreviews","handleContactNotificationChange","volume","playNotifySound","hasPassword","isSensitiveEnabled","canChangeSensitive","privacy","blocked","activeSessions","blockedCount","totalCount","sessionsCount","visibilityPrivacyPhoneNumber","phoneNumber","visibility","visibilityPrivacyLastSeen","lastSeen","visibilityPrivacyProfilePhoto","profilePhoto","visibilityPrivacyForwarding","forwards","visibilityPrivacyGroupChats","chatInvite","loadPrivacySettings","loadBlockedContacts","loadAuthorizations","loadContentSettings","updateContentSettings","getVisibilityValue","languages","language","loadLanguages","selectedLanguage","setSelectedLanguage","markIsLoading","unmarkIsLoading","handleChange","langCode","setLanguage","currentLangCode","navigator","toLowerCase","shortLangCode","substr","nativeName","buildOptions","loadingOption","getPrivacyKey","screen","privacySettings","allowUserIds","allowChatIds","blockUserIds","blockChatIds","setPrivacyVisibility","visibilityOptions","exceptionLists","shouldShowDenied","shouldShowAllowed","privacyKey","headerText","descriptionText","allowedContactsScreen","deniedContactsScreen","allowedCount","reduce","result","membersCount","blockCount","handleVisibilityChange","getLocation","session","region","country","getDeviceEnvironment","deviceModel","platform","systemVersion","terminateAuthorization","terminateAllAuthorizations","isConfirmTerminateAllDialogOpen","openConfirmTerminateAllDialog","closeConfirmTerminateAllDialog","handleTerminateSessionClick","handleTerminateAllSessions","currentSession","isCurrent","otherSessions","appName","ip","sessions","handler","dateActive","blockedIds","userSearch","setUserSearchQuery","blockContact","filteredContactIds","availableContactIds","contactId","firstId","secondId","secondName","localeCompare","handleRemoveUser","accessHash","chatsByIds","usersByIds","countryList","phoneCodes","phoneCodeList","unblockContact","isBlockUserModalOpen","openBlockUserModal","closeBlockUserModal","handleUnblockClick","isPrivate","formatPhoneNumberWithCode","renderContact","animatedEmoji","selectAnimatedEmoji","AnimatedEmoji","expectedPassword","clearError","validationError","setValidationError","shouldShowPassword","setShouldShowPassword","handleSubmit","newPassword","handleClearError","PasswordMonkey","isBig","isPasswordVisible","PasswordForm","onChangePasswordVisibility","onStart","FOCUS_DELAY_TIMEOUT_MS","shouldConfirm","setValue","isConfirmShown","markIsConfirmShown","unmarkIsConfirmShown","codeLength","twoFaSettings","waitingEmailCodeLength","newValue","updatePassword","checkPassword","clearTwoFaError","updateRecoveryEmail","provideTwoFaEmailCode","clearPassword","handleStartWizard","handleNewPassword","handleNewPasswordConfirm","handleNewPasswordHint","handleNewPasswordEmail","onSuccess","handleChangePasswordCurrent","handleChangePasswordNew","handleChangePasswordConfirm","handleChangePasswordHint","handleTurnOff","handleRecoveryEmailCurrentPassword","handleRecoveryEmail","handleEmailCode","getCurrentPrivacySettings","isAllowList","setPrivacySettings","selectedContactIds","setSearchQuery","isSubmitShown","setIsSubmitShown","newSelectedContactIds","setNewSelectedContactIds","isChatGroup","handleSelectedContactIdsChange","contactsIds","Picker","itemIds","searchInputId","availableReactions","selectedReaction","setDefaultReaction","isInactive","TWO_FA_SCREENS","FOLDERS_SCREENS","PRIVACY_SCREENS","PRIVACY_PHONE_NUMBER_SCREENS","PRIVACY_LAST_SEEN_PHONE_SCREENS","PRIVACY_PROFILE_PHOTO_SCREENS","PRIVACY_FORWARDING_SCREENS","PRIVACY_GROUP_CHATS_SCREENS","foldersState","foldersDispatch","shouldSkipTransition","twoFaState","twoFaDispatch","useReducer","handleSaveFilter","renderCurrentSection","isScreenActive","isFrom","currentKey","privacyAllowScreens","isTwoFaScreen","isFoldersScreen","isPrivacyScreen","values","SettingsGeneralBackgroundColor","renderCurrentSectionContent","LAYERS_ANIMATION_NAME","statusesById","userStatusesById","serverTimeOffset","filteredIds","sortUserIds","isSearching","selectedMemberIds","onSelectedMemberIdsChange","onNextStep","setGlobalSearchQuery","canBeInvitedToGroup","isUserBot","handleNextStep","creationProgress","creationError","chatCreation","createGroupChat","createChannel","setTitle","setAbout","chatTitleEmptyError","channelTitleEmptyError","chatTooManyUsersError","ChatCreationProgress","handleTitleChange","handleCreateGroup","handleCreateChannel","renderedError","RENDER_COUNT","LeftColumnContent","onContentChange","newChatMemberIds","setNewChatMemberIds","isStepActive","ChatList","folderType","folderOrderedIds","editChatFolders","initialSelectedFolderIds","pinnedChatIds","selectedFolderIds","setSelectedFolderIds","folders","idsToRemove","idsToAdd","CheckboxGroup","getCopyLabel","hasSelection","scrollLockEl","IGNORED_KEYS","Down","ArrowDown","Up","ArrowUp","Left","ArrowLeft","Right","ArrowRight","PageUp","PageDown","End","Home","Tab","getTouchY","changedTouches","clientY","scrollHeight","preventDefaultForScrollKeys","HTMLElement","tagName","getAttribute","isTextBox","disableScrolling","_excludedClosestSelector","passive","onkeydown","enableScrolling","cn","createClassNameBuilder","previewIndex","onSendReaction","isReady","selectAnimation","isActivated","activate","deactivate","markAnimationLoaded","shouldRenderAnimated","animatedClassNames","shouldRenderStatic","staticClassNames","onMouseEnter","enabledReactions","itemsScrollRef","isHorizontalScrollEnabled","enableHorizontalScroll","handleWheel","onWheelCapture","onTouchMove","anchor","canSendNow","canReschedule","canReply","canEdit","canPin","canUnpin","canForward","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canShowSeenBy","canShowReactionsCount","canRemoveReaction","canShowReactionList","seenByRecentUsers","onReply","onEdit","onPin","onReport","onFaveSticker","onUnfaveSticker","onSend","onReschedule","onCopyLink","onDownload","onShowSeenBy","onShowReactors","menuRef","scrollableRef","copyOptions","afterEffect","getMessageText","canImageBeCopied","hasMessageLocalBlobUrl","CLIPBOARD_ITEM_SUPPORTED","selection","getSelection","Promise","resolve","mediaLoader","copyImageToClipboard","anchorNode","parentNode","clipboardText","getMessageTextWithSpoilers","copyTextToClipboard","getMessageCopyOptions","noReactions","withReactions","markIsReady","unmarkIsReady","getTriggerElement","getRootElement","getMenuElement","getLayout","extraHeightAudioPlayer","pinnedElement","extraHeightPinned","extraPaddingX","extraTopPadding","marginSides","extraMarginTop","handleRemoveReaction","positionY","transformOriginX","transformOriginY","menuStyle","withScroll","useContextMenuPosition","Menu","bubbleStyle","START_SIZE","selectActiveDownloadIds","seenByExpiresAt","seenByMaxChatMembers","noOptions","isScheduled","isLocal","isMessageLocal","isOwnMessage","isAction","isActionMessage","areReactionsEmpty","canSeeList","some","isChosen","hasFullInfo","SERVICE_NOTIFICATIONS_USER_ID","chatUsername","setReplyingToId","setEditingId","faveSticker","unfaveSticker","toggleMessageSelection","sendScheduledMessages","rescheduleMessage","loadSeenBy","openSeenByModal","sendReaction","openReactorListModal","loadFullChat","isMenuOpen","setIsMenuOpen","setIsDeleteModalOpen","setIsReportModalOpen","isPinModalOpen","setIsPinModalOpen","isCalendarOpen","openCalendar","closeCalendar","recentReactions","msg","closeMenu","closePinModal","handleCloseCalendar","handleReply","handleEdit","handlePin","handleUnpin","handleFaveSticker","handleUnfaveSticker","handleSelectMessage","params","childMessageIds","withShift","handleScheduledMessageSend","handleOpenCalendar","handleOpenSeenByModal","handleOpenReactorListModal","handleRescheduleMessage","scheduledAt","handleCopyLink","handleSendReaction","reportMessageIds","scheduledMaxDate","getDayStartAt","stickerSetShortName","currentMessageList","sendOptions","getAllowedAttachmentOptions","canSendStickers","selectStickerSet","stickerSetId","selectStickerSetByShortName","loadStickers","toggleStickerSet","isDisabled","stickerSetAccessHash","isPreloadedGlobally","handleButtonClick","hasCloseButton","STICKER_SIZE_MODAL","isRestricted","canAddContact","getCanAddContact","canDeleteChat","getCanDeleteChat","hasLinkedChat","linkedChatId","withExtraActions","canStartBot","canRestartBot","canSubscribe","canSearch","canCall","canMute","canLeave","canEnterVoiceChat","canCreateVoiceChat","onSubscribeChannel","onSearchClick","updateChatMutedState","enterMessageSelectMode","sendBotCommand","restartBot","joinGroupCall","createGroupCall","openLinkedChat","addContact","openCallFallbackConfirm","handleStartBot","command","handleRestartBot","handleToggleMuteClick","handleEnterVoiceChatClick","handleLinkedChatClick","handleAddContactClick","handleSubscribe","handleCall","handleSearch","handleSelectMessages","Portal","runDebouncedForSearch","selectCurrentTextSearch","isHistoryCalendarOpen","setLocalTextSearchQuery","searchTextMessagesLocal","closeLocalTextSearch","openHistoryCalendar","focusedIndex","setFocusedIndex","visualViewport","mainEl","pageTop","Array","input","div","contentEditable","blur","handleMessageSearchQueryChange","newQuery","handleUp","newFocusIndex","handleDown","SearchInput","findInViewport","selectorOrElements","margin","isDense","shouldContainBottom","isHorizontal","viewportY1","viewportY2","allElements","visibleIndexes","isFound","y2","setTooltipItemVisible","selector","first","isFullyVisible","fastSmoothScroll","useKeyboardNavigation","shouldSaveSelectionOnUpdateItems","shouldRemoveSelectionOnReset","noArrowNavigation","shouldSelectOnTab","selectedItemIndex","setSelectedItemIndex","getSelectedIndex","newIndex","cycleRestrict","handleArrowKey","handleItemSelect","item","isSelectionOutOfRange","onUp","onDown","onLeft","onRight","onTab","onInsertUserName","filteredUsers","handleUserSelect","forceFocus","handleSelectMention","member","selectedMentionIndex","prevChatMembers","renderedChatMembers","attachments","caption","groupChatMembers","recentEmojis","baseEmojiKeywords","emojiKeywords","addRecentEmoji","onCaptionUpdate","onFileAppend","onClear","captionRef","useStateRef","hideTimeoutRef","prevAttachments","renderingAttachments","isHovered","markHovered","unmarkHovered","isQuick","every","quick","isMentionTooltipOpen","closeMentionTooltip","insertMention","mentionFilteredUsers","useMentionTooltip","EDITABLE_INPUT_MODAL_ID","isEmojiTooltipOpen","closeEmojiTooltip","filteredEmojis","insertEmoji","useEmojiTooltip","sendAttachments","handleFilesDrop","dataTransfer","newFiles","file","CONTENT_TYPES_WITH_PREVIEW","areAllPhotos","SUPPORTED_IMAGE_CONTENT_TYPES","mimeType","areAllVideos","SUPPORTED_VIDEO_CONTENT_TYPES","areAllAudios","renderHeader","onDragEnter","onDrop","onDragOver","onDragLeave","relatedTarget","toTarget","fromTarget","attachment","File","filename","extension","getFileExtension","previewData","emojis","onEmojiSelect","MessageInput","isAttachmentModalInput","html","editableInputId","canAutoFocus","questionInputRef","optionsListRef","solutionRef","question","setQuestion","setOptions","isAnonymous","setIsAnonymous","isMultipleAnswers","setIsMultipleAnswers","isQuizMode","setIsQuizMode","solution","setSolution","correctOption","setCorrectOption","hasErrors","setHasErrors","focusInput","solutionEl","innerHTML","addNewOption","newOptions","list","scrollTo","behavior","handleCreate","questionTrimmed","optionsTrimmed","o","summary","answers","option","correct","isPublic","multipleChoice","quiz","entities","parseMessageInput","correctAnswers","solutionEntities","updateOption","removeOption","handleCorrectOptionChange","handleIsAnonymousChange","handleMultipleAnswersChange","handleQuizModeChange","handleKeyPress","keyCode","getQuestionError","getOptionsError","renderOptions","onKeyPress","renderQuizNoOptionError","hidden","emoji","native","names","IS_EMOJI_SUPPORTED","loading","category","allEmojis","useOnIntersect","emojisPerRow","ceil","displayedEmoji","ICONS_BY_CATEGORY","recent","people","nature","foods","activity","places","objects","symbols","flags","categoryIntersections","emojiDataPromise","emojiRawData","emojiData","headerRef","categories","setCategories","setEmojis","activeCategoryIndex","setActiveCategoryIndex","entries","entry","intersectingWithIndexes","newLeft","HEADER_BUTTON_WIDTH","fastSmoothScrollHorizontal","allCategories","themeCategories","unshift","exec","default","uncompressEmoji","ensureEmojiData","selectCategory","categoryEl","handleEmojiSelect","MENU_TRANSITION_DURATION","containerClassName","faded","STICKER_MARGIN","loadAndPlay","onStickerSelect","onStickerUnfave","stickersPerRow","STICKER_SIZE_PICKER","noAnimate","onUnfaveClick","stickerSetIntersections","favorite","recentStickers","favoriteStickers","addedSetIds","shouldPlay","loadRecentStickers","addRecentSticker","activeSetIndex","setActiveSetIndex","sendMessageAction","useSendMessageAction","areAddedLoaded","allSets","noPopulatedSets","set","stickerSetEl","handleStickerSelect","handleStickerUnfave","fullClassName","buttonClassName","gif","videoData","shouldRenderVideo","isVideoReady","preventMessageInputBlurWithBubbling","preload","savedGifs","gifs","saved","canSendGifs","onGifSelect","loadSavedGifs","debounceMs","SymbolMenuTabs","SYMBOL_MENU_TAB_TITLES","SYMBOL_MENU_TAB_ICONS","Emoji","Stickers","GIFs","onRemoveSymbol","onSearchOpen","renderTabButton","handleSearchOpen","isLeftColumnShown","setRecentEmojis","handleMouseEnter","handleMouseLeave","useMouseInside","fastRaf","recentEmojisRef","renderContent","onMouseLeave","noCloseOnBackdrop","canAttachMedia","canAttachPolls","onFileSelect","onPollCreate","handleQuickSelect","handleDocumentSelect","autoClose","withAvatar","botCommand","bot","botCommands","handleSendCommand","botId","selectedCommandIndex","prevCommands","renderedCommands","chatBotCommand","forEmoji","clearStickersForEmoji","prevStickers","displayedStickers","onSilentSend","onScheduleSend","listEmojis","usePrevDuringAnimation","handleSelectEmoji","selectedIndex","setItemVisible","thumbUrl","thumbnailDataUrl","decoding","webThumbnail","isForGallery","inlineResult","STICKER_SIZE_INLINE_BOT_RESULT","isGallery","inlineBotResults","switchPm","onSelectResult","startBot","handleSendPm","startParam","prevInlineBotResults","renderedInlineBotResults","sensitiveArea","inlineBotResult","selectedSendAsId","sendAsIds","saveDefaultSendAs","markMouseInside","sendAsId","selectedSendAsIndex","messagesById","viewportResults","senderUser","senderChat","forwardInfo","isChannelPost","foundResult","isOnTop","preloadBackwards","teactOrderKey","LastMessageMeta","selectShouldLoopStickers","isSomeModalOpen","onModalToggle","isAdded","areStickersLoaded","useOnChange","coverStickerIds","covers","otherStickers","handleAddClick","canRenderStickers","STICKER_SIZE_SEARCH","selectCurrentStickerSearch","resultIds","featured","featuredIds","loadFeaturedStickers","setIsModalOpen","selectCurrentGifSearch","isChatWithBot","selectIsChatWithBot","searchMoreGifs","setGifSearchQuery","handleGifClick","hasResults","answer","voters","offsets","pollResults","answerVote","totalVoters","loadPollOptionResults","closePollResults","prevVotersCount","votersCount","setIsLoading","areVotersLoaded","limit","shouldResetVoters","handleViewMoreClick","handleMemberClick","leftVotersCount","renderViewMoreButton","total","getMessagePoll","resultsByOption","buildCollectionByKey","management","updateContact","deleteContact","closeManagement","isDeleteDialogOpen","openDeleteDialog","closeDeleteDialog","isNotificationsEnabled","setIsNotificationsEnabled","ManagementProgress","handleNotificationChange","handleDeleteContact","withFullInfo","GROUP_TITLE_EMPTY","hasLinkedChannel","isBasicGroup","invites","canChangeInfo","isCreator","getHasAdminRight","canBanUsers","canInvite","exportedInvites","availableReactionsCount","togglePreHistoryHidden","updateChat","deleteChat","leaveChannel","deleteChannel","loadExportedChatInvites","loadChatJoinRequests","currentTitle","currentAbout","imageHash","isPublicGroup","isRevoked","handleClickEditType","ManagementScreens","handleClickDiscussion","handleClickReactions","handleClickPermissions","handleClickAdministrators","handleSetPhoto","handleAboutChange","handleUpdateGroup","trimmedTitle","trimmedAbout","handleClickMembers","handleTogglePreHistory","isPreHistoryHidden","isEnabled","enabledReactionsCount","enabledPermissionsCount","defaultBannedRights","sendStickers","sendGifs","adminsCount","adminMembers","handleDeleteGroup","formatInteger","joinRequests","onChatMemberSelect","updateChatDefaultBannedRights","permissions","setPermissions","havePermissionChanged","setHavePermissionChanged","handleRemovedUsersClick","handleAddExceptionClick","handleExceptionMemberClick","promotedByUserId","handlePermissionChange","getUpdatedPermissionValue","handleSavePermissions","bannedRights","removedUsersCount","kickedMembers","exceptionMembers","members","getMemberExceptions","langKey","getLangKeyForBannedRightKey","translatedString","sendMessages","blocking","sendMedia","sendPolls","embedLinks","inviteUsers","pinMessages","changeInfo","loadMoreMembers","deleteChatMember","usersId","availableMemberIds","acc","isAdmin","isOwner","canDeleteMembers","updateChatMemberBannedRights","isRemoveUserModalOpen","openRemoveUserModal","closeRemoveUserModal","removedMembers","getRemovedBy","kickedByUserId","kickedByUser","getContextActions","CHANNEL_TITLE_EMPTY","isSignaturesShown","toggleSignatures","handleUpdateChannel","handleToggleSignatures","handleClickSubscribers","handleDeleteChannel","selectManagement","checkPublicLink","updatePublicLink","updatePrivateLink","toggleIsProtected","privateLink","inviteLink","privacyType","setPrivacyType","isRevokeConfirmDialogOpen","openRevokeConfirmDialog","closeRevokeConfirmDialog","canUpdate","handleOptionChange","handleForwardingOptionChange","handleSave","handleRevokePrivateLink","langPrefix1","langPrefix2","forwardingOptions","SafeLink","forDiscussionIds","linkedChat","loadGroupsForDiscussion","linkDiscussionGroup","unlinkDiscussionGroup","linkedGroupId","setLinkedGroupId","isConfirmUnlinkGroupDialogOpen","openConfirmUnlinkGroupDialog","closeConfirmUnlinkGroupDialog","isConfirmLinkGroupDialogOpen","openConfirmLinkGroupDialog","closeConfirmLinkGroupDialog","handleUnlinkGroupSessions","channelId","handleLinkGroupSessions","STICKER_SIZE_DISCUSSION_GROUPS","teactFastList","linkedGroup","renderLinkGroupHeader","hasPrivateLink","renderLinkGroupConfirmText","isButtonsInOneRow","isPromotedByCurrentUser","isFormFullyDisabled","selectedChatMemberId","isBanConfirmationDialogOpen","openBanConfirmationDialog","closeBanConfirmationDialog","selectedChatMember","handleBanFromGroup","viewMessages","getControlIsDisabled","handleAdminMemberClick","handleAddAdminClick","getMemberStatus","promotedByUser","defaultRights","adminRights","isNewAdmin","selectedUserId","updateChatAdmin","setIsTouched","isDismissConfirmationDialogOpen","openDismissConfirmationDialog","closeDismissConfirmationDialog","customTitle","setCustomTitle","selectedAdminMember","handleDismissAdmin","memberStatus","handleCustomTitleChange","postMessages","editMessages","banUsers","addAdmins","manageCall","anonymous","maxLength","noAdmins","adminIds","shouldUseSearchResults","listedIds","noScrollRestore","memberId","inviteComparator","i1","i2","isPermanent","i1IsPermanent","usage","i1Usage","i1Date","i2IsPermanent","i2Usage","i2Date","revokedInvites","revokedExportedInvites","setEditingExportedInvite","editExportedChatInvite","deleteExportedChatInvite","deleteRevokedExportedChatInvites","setOpenedInviteInfo","isDeleteRevokeAllDialogOpen","openDeleteRevokeAllDialog","closeDeleteRevokeAllDialog","isRevokeDialogOpen","openRevokeDialog","closeRevokeDialog","revokingInvite","setRevokingInvite","deletingInvite","setDeletingInvite","hasDetailedCountdown","expireDate","getServerTime","MILLISECONDS_IN_DAY","useInterval","primaryInvite","primaryInviteLink","link","temporalInvites","revokeInvite","usageLimit","askToRevoke","handleRevoke","handleCreateNewClick","handlePrimaryRevoke","handleDeleteAllRevoked","showInviteInfo","deleteInvite","askToDelete","copyLink","handleCopyPrimaryClicked","prepareUsageText","requested","diff","formatCountdown","prepareContextActions","actions","editInvite","PrimaryLinkMenuButton","STICKER_SIZE_INVITES","secondaryIcon","DEFAULT_USAGE_LIMITS","DEFAULT_EXPIRE_DATE","hour","week","DEFAULT_CUSTOM_EXPIRE_DATE","editingInvite","exportChatInvite","isCalendarOpened","setIsRequestNeeded","customExpireDate","setCustomExpireDate","selectedExpireOption","setSelectedExpireOption","customUsageLimit","setCustomUsageLimit","selectedUsageOption","setSelectedUsageOption","isSubmitBlocked","setIsSubmitBlocked","oldEditingInvite","editingTitle","editingIsRequestNeeded","minSafeDate","handleIsRequestChange","handleCustomUsageLimitChange","handleExpireDateChange","handleSaveClick","formatFullDate","n","setChatEnabledReactions","localEnabledReactions","setLocalEnabledReactions","handleSaveReactions","handleReactionChange","newEnabledReactions","inviteInfo","importers","requesters","loadChatInviteImporters","loadChatInviteRequesters","adminId","isExpired","handleCopyClicked","importer","renderImporters","requester","renderRequesters","hideChatJoinRequest","fixedDate","dateString","isToday","formatHumanDate","handleAcceptRequest","isApproved","handleRejectRequest","hideAllChatJoinRequests","isAcceptAllDialogOpen","openAcceptAllDialog","closeAcceptAllDialog","isRejectAllDialogOpen","openRejectAllDialog","closeRejectAllDialog","handleAcceptAllRequests","handleRejectAllRequests","STICKER_SIZE_JOIN_REQUESTS","managementType","selectCurrentManagementType","VISA","MASTERCARD1","MASTERCARD2","CardType","cards","Default","Visa","Mastercard","detectCardType","cardNumber","formatsCache","defaultPhoneNumberFormat","str","flag","phoneFormat","format","formatValue","phoneNumberFormat","phoneNumberGroups","RegExp","repeat","getPhoneNumberFormat","streetLine1","streetLine2","city","countryIso2","postCode","phone","shipping","cardholder","expiry","cvv","billingCountry","billingZip","saveInfo","saveCredentials","formErrors","reducer","getBillingCountry","countryCode","useFocusAfterAnimation","animationDuration","hasArrow","labelText","htmlFor","needEmail","needPhone","needName","needAddress","phoneRef","selectCountryRef","handleAddress1Change","handleAddress2Change","handleCityChange","handleStateChange","handleCountryChange","handlePostCodeChange","handleFullNameChange","handleEmailChange","handlePhoneChange","handleSaveInfoChange","shippingOptions","currency","handleShippingSelect","amount","formatCurrency","renderPaymentItem","main","renderCheckoutItem","invoiceContent","prices","shippingPrices","checkoutInfo","totalPrice","photoUrl","paymentMethod","paymentProvider","shippingAddress","shippingMethod","expiryInputRef","charAt","parts","formatCardExpiry","cardNumberRef","cardType","setCardType","newCardType","formatCardNumber","cardIcon","mastercardIconPath","visaIconPath","getCardIcon","canSaveCredentials","needCardholderName","needCountry","needZip","handleCardNumberChange","handleCardholderChange","toUpperCase","handleExpiryChange","handleCvvChange","handleBillingPostCodeChange","handleChangeSaveCredentials","savedInfo","invoice","nativeProvider","nativeParams","passwordMissing","payment","isProviderError","nameRequested","phoneRequested","emailRequested","shippingAddressRequested","flexible","phoneToProvider","emailToProvider","validateRequestedInfo","sendPaymentForm","setPaymentStep","sendCredentialsInfo","clearPaymentError","paymentState","paymentDispatch","field","handleErrorModalClose","PaymentStep","shippingOption","getShippingPrices","totalPrices","cur","getTotalPrice","detectCardTypeText","findShippingOption","getCheckoutInfo","validateRequest","requestInfo","getRequestInfo","sendCredentials","credentials","expiryMonth","expiryYear","zip","getCredentials","sendForm","shippingOptionId","setStep","nextStep","buttonText","currentStep","renderModalContent","renderError","optionId","receipt","info","totalAmount","credentialsTitle","fullAddress","onInputChange","setPassword","canSubmit","setCanSubmit","select","autoComplete","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","STICKER_SIZE","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","isPeekShown","setIsPeekShown","handleFirstMonkeyLoad","STICKER_SIZE_TWO_FA","playSegment","cropperResultOptions","circle","Croppie","croppiePromise","cropper","isCroppieReady","setIsCroppieReady","imgFile","cropContainer","enableZoom","boundary","viewport","blobToDataUri","bind","err","DEBUG","console","initCropper","ensureCroppie","croppedImg","blobToFile","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","labelClassName","URL","revokeObjectURL","createObjectURL"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/126.6c11ab2d3cdbd7baf2dd.css.map b/dist/126.6c11ab2d3cdbd7baf2dd.css.map deleted file mode 100644 index 7fcda328e..000000000 --- a/dist/126.6c11ab2d3cdbd7baf2dd.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"126.6c11ab2d3cdbd7baf2dd.css","mappings":"AAAA,oBACE,aACA,yBACA,4BAEA,4BACE,2BAIJ,2BACE,kBACA,wBAEA,4CACE,kBACA,MACA,O;ACjBJ,mBACE,kBACA,SACA,eACA,WACA,wBAEA,uCACE,aAGF,0BAXF,mBAYI,mBAGF,yBAfF,mBAgBI,mEAEA,gCACE,UACA,oBACA,oBAEA,wEACE,UACA,oBAKN,wCACE,UAGF,gDACE,kBACA,0CACA,YACA,eACA,WACA,wBAEA,sDACE,UAGF,yBAZF,gDAaI,WAIJ,6BACE,UAGF,+BACE,gBACA,cACA,gBACA,kBACA,2BACA,mBACA,uBACA,mBAEA,0BAVF,+BAWI,oBAGF,sCACE,eACA,gBACA,oBAIA,iDACE,WACA,kBACA,cACA,eACA,aACA,gBACA,2BACA,2CACA,uBAEA,yBAXF,iDAYI,aACA,iBAMR,qBACE,yBAEA,sDAEE,0B;ACpGN,qBACE,aACA,mBACA,kBACA,OACA,SACA,WACA,oBACA,kBACA,mEACA,wBACA,UACA,oBAEA,yCACE,aAGF,yBAlBF,qBAmBI,eACA,6BACA,gBACA,+BAGF,4BACE,UACA,mBAIA,8CACE,gBACA,UACA,eACA,iBAGF,wCACE,iBAGF,qDACE,iBAIJ,6BACE,cACA,UACA,cACA,eACA,yBALF,6BAMI,gBAIJ,6BACE,mBAGF,kCACE,cACA,mBAGF,iCACE,iBACA,yBAFF,iCAGI,kBAEF,mCACE,oBACA,yBAFF,mCAGI,kBAKN,yBACE,8CACE,kBAIJ,uCACE,kBACA,SACA,2BACA,mBACA,gBACA,uBAEA,yBARF,uCASI,gBACA,UACA,eACA,iBACA,kBACA,mDACE,eAKN,sCACE,kBACA,UACA,WACA,MACA,YACA,kBACA,eAEA,4CACE,kBACA,QACA,cACA,eACA,WACA,2BACA,uCACA,2CAGF,wIAGE,kBACA,MACA,OACA,YACA,2CAGF,+CACE,sCAGF,6CACE,gCAEA,oDACE,WACA,kBACA,aACA,cACA,kBACA,sCACA,QACA,QACA,oC;ACvJR,aACE,kBACA,oBACA,sBACA,gBAEA,iCACE,kBACA,MACA,QACA,SACA,OACA,qCACE,sBACA,uBAEF,uCACE,2BAIJ,yBArBF,aAuBI,WAGF,yBA1BF,aA2BI,kBAGF,0BA9BF,aA+BI,sBACS,yBACP,iBAIJ,mBACE,cACA,iCACA,YACA,mBACA,aACA,WACA,YACA,6BACA,wBAEA,0BAXF,mBAYI,gCAIJ,0BACE,kBACA,SACA,QACA,gCACA,cACA,eACA,2CACA,uDACE,uCAGF,qCACE,kBACA,kBACA,aAIJ,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBAEA,2CACE,2BACA,WACA,iBACA,kBACA,cACA,aACA,UACA,kBACA,qBACA,qBAGF,iDACE,e;AChGN,oBACE,kBACA,MACA,OACA,QACA,SACA,eACA,gBACA,UACA,kBACA,YACA,oBACA,uBACA,mBAEA,+BACE,kBAEA,mCACE,kBACA,QACA,SACA,gCAIJ,wBACE,gBACA,iCACA,mBACA,yBAGF,qCACE,gBACA,YAGF,6BACE,Y;ACvCJ,mBACE,kBACA,aACA,YACA,iBACA,0BAEA,kCACA,WACA,gBAEA,kBACA,MACA,OACA,QACA,SAEA,qBACE,yBAIJ,kBACE,kBACA,MACA,OACA,QACA,SACA,YACA,cACA,UACA,kBACA,qBAEA,0BACE,U;ACnCJ,4BAEE,kBACA,WACA,YAGF,aACE,YACA,gEAGF,eACE,iCAEA,iCACE,gBAGF,uBACE,eACA,MACA,O;ACtBJ,YACE,aACA,qBACA,WACA,eAEA,WACA,wBAEA,kBACE,UAGF,oBACE,uBAEA,yBAHF,oBAII,cAIJ,kBACE,aACA,sBACA,uBACA,+BAGF,mBACE,oBACA,gBACA,gBACA,gBACA,uBAGF,kBACE,oBACA,kBACA,wB;ACvCJ,cACE,kBACA,eACA,SACA,0BACA,2CACA,WACA,gBACA,gBACA,qCACA,+BACA,oBAEA,mBACE,8BACA,mBAGF,+CAEE,kBACA,aACA,aACA,cACA,WAEA,mDACE,iBAIJ,wBACE,WAGF,uBACE,YAGF,wBACE,kBACA,aACA,cACA,aACA,YAEA,8BACE,kBACA,QACA,cACA,eACA,WACA,2BACA,sCACA,2CAGF,6DAEE,kBACA,MACA,OACA,YACA,2CAGF,+BACE,gBACA,uBAEA,sCACE,WACA,kBACA,aACA,cACA,kBACA,oCACA,QACA,QACA,oCAIJ,8BACE,WACA,YACA,cACA,UACA,SACA,UACA,eACA,gBAEA,oDACE,iB;AC9FR,aACE,eACA,MACA,OACA,YACA,YACA,0BACA,WACA,8BAEA,aACA,2BACA,4BACA,kBACA,eACA,sBACA,mBAEA,yBAlBF,aAmBI,iBAIF,yBACE,yBACA,mBAIA,qNACE,aAIJ,oCACE,mCAKA,sEACE,oBACA,gBAKF,gCACE,aAGF,uCACE,UAGF,sCACE,eACA,MACA,OACA,YACA,aACA,UACA,UAIJ,gCACE,aACA,mBACA,sBACA,kBACA,mCACA,YAEA,4CACE,WACA,YAGF,yBAbF,gCAcI,cAEA,gDAhBJ,gCAiBM,sDAGF,oDACE,qBAIJ,qDAzBF,gCA0BI,uDAIJ,mDAEE,oBAGF,+DAEE,kBACA,oBACA,kBACA,WACA,YACA,aACA,mBACA,gBAGF,yBACE,eACA,SACA,WACA,SACA,YACA,UACA,SACA,6DACA,iCACA,wBACA,UACA,wBACA,aACA,eACA,UAEA,yBAjBF,yBAkBI,YAGF,sEACE,UAGF,8BACE,OACA,yDACA,6CAEA,2CALF,8BAMI,gCAGF,uCACE,UACA,QACA,qBAEA,2CALF,uCAMI,UACA,kCAKN,8BACE,QACA,yDACA,0DAEA,2CALF,8BAMI,kCAGF,uCACE,OACA,WACA,qBAEA,2CALF,uCAMI,WACA,gCAKN,gCACE,qBACA,aACA,YACA,6BAEA,yBANF,gCAOI,UACA,gCACA,oBAEA,wDACE,UACA,oBAOV,OACE,kBACA,8BACA,8BACA,gBACA,gBACA,+CAEA,uBACE,4CAGF,cACE,kBAGF,mBACE,iFAGF,wBAEE,WACA,YACA,uCACA,yBACA,+C;AClOJ,kBACE,8BAEA,gCACE,WACA,gBAEA,yBAJF,gCAKI,YAIJ,gCACE,aACA,mBACA,qBAEA,wCACE,mBAGF,6CACE,SACA,OAGF,8CACE,YACA,2BAEA,eACA,cACA,kBACA,oBACA,uBAIJ,iCACE,UACA,gBACA,aACA,sBAEA,8CACE,YACA,kBACA,gBACA,gBAIJ,8BACE,YACA,SACA,kBACA,aACA,mBACA,uBACA,kCAGF,oCACE,kBAGF,4BACE,kBACA,WAKE,yBADF,4EAEI,SAEA,6FACE,iB;AC7EV,SACE,eACA,MACA,OACA,YACA,aACA,uB;ACLA,6BACE,mBACA,4CACE,0BAIJ,2BACE,aACA,mBACA,uBACA,qBAEA,yCACE,eACA,kBAEA,qDACE,kBAEF,oDACE,iBAKN,uBACE,aACA,yBACA,sBAEA,+BACE,oBAEA,uCACE,iBAKN,+BACE,aACA,mBAEA,kCACE,OACA,qBACA,kBAEA,yBALF,kCAMI,oBAGF,0CACE,2BAIJ,8CACE,WACA,oBAIJ,2BACE,kBACA,mBACA,wBACA,gBACA,uBAEA,yBAPF,2BAQI,uBAGF,mCACE,gBACA,YAGF,qCACE,eAEA,2CACE,wDAGF,8CACE,sCACA,WAIJ,oCACE,YACA,oBAGF,mCACE,WACA,cACA,iBAGF,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBACA,kBAIJ,iCACE,aACA,mBACA,uBACA,iBACA,4BAGF,8BACE,aACA,qCACA,W;ACjIJ,sBACE,kBACA,aACA,WACA,YACA,WACA,WACA,uBACA,SA4BA,UA1BA,uDAVF,sBAWI,kDAGF,mDACE,qBACA,sBAGF,mCACE,WACA,yBAFF,mCAGI,yBAIJ,yBA1BF,sBA2BI,UACA,WACA,eAEA,mCACE,cAMJ,kDACE,kCAGF,iIAEE,SAGF,6CACE,2BAGF,kCACE,UACA,oBAEA,+CACE,iDAGF,4EACE,2FAGF,kFACE,kEAIJ,8BACE,WACA,gBACA,WACA,UACA,WAGF,4BACE,WACA,gBACA,aACA,mBACA,eAEA,mCACA,4CACA,iDACA,gBAEA,oBACA,+EAEA,yBAfF,4BAgBI,UACA,gBAGF,oCACE,WACA,YAEA,yBAJF,oCAKI,eACA,iBAKN,4BACE,iBACA,mBACA,gBACA,uBACA,YAEA,yBAPF,4BAQI,oBAIJ,8BACE,iBACA,aAEA,oCACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,iBACA,kBAEA,sCACE,iBACA,kCAGF,gDACE,yBACA,kDACE,cAIJ,6CACE,WACA,eACA,oBAGF,0DACE,0CACA,2BAGF,qBACE,oFACE,yCACA,sB;ACxKV,kBACE,gDACA,4DACA,qCAEA,iCACE,gBAGF,6BACE,oBAGF,yCACE,oBAGF,gCACE,iBACA,cACA,kBAGF,sCACE,SAGF,uDACE,aACA,mBAGF,uCACE,aACA,cACA,yB;ACnCJ,2BACE,aACA,aACA,WACA,kBACA,MACA,OACA,WACA,YACA,oBACA,aAEA,4BACE,KACE,iDAGF,GACE,0CAIJ,qCACE,KACE,8DAGF,GACE,qDAIJ,4CACE,kBACA,mBACA,oBACA,iCACA,0BACA,6DAGF,qDACE,4CAGF,oDACE,8EAGF,6DACE,uFAGF,mDACE,UAGF,4DACE,U;ACzDF,yBACE,gBAGF,mCACE,mBAGF,2BACE,YACA,eACA,gBACA,kBACA,mBAEA,qBACA,8BAEA,8CACE,SAGF,oDACE,+BAIJ,+BACE,qBACA,aACA,YACA,uBACA,kBACA,2CACA,eACA,kBACA,gBAEA,2CACE,oBAGF,0CACE,qBAGF,uCACE,sBAGF,qCACE,mCAGF,8CACE,kBACA,mBACA,iBACA,gBACA,uBAEA,2DACE,WACA,YACA,qBACA,sBACA,oBAKN,qCACE,aACA,mBAEA,6CACE,iBAIA,sDACE,cACA,kB;AClFN,yBACE,iBAGA,qFACE,qCAIJ,8BACE,qBAIA,0BACE,YAGF,sBACE,eACA,WAGF,6BACE,kCAEA,sDACE,wBACA,mBACA,qBACA,kBACA,qBAEA,kEACE,mBAKN,4BACE,YACA,kCACA,gBACA,uBAEA,yCACE,wBAEA,gDACE,aAIJ,gCACE,cACA,eACA,iBACA,sBACA,wBACA,oBAGF,uCACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAKN,uBACE,aACA,8BAIA,gCACE,iB;AClFN,aACE,aACA,YACA,mBACA,8BACA,kBACA,oBAEA,wBACE,aACA,cACA,eACA,mBACA,eACA,kBACA,gBACA,kCAEA,uCACE,kBACA,oB;ACpBN,wBACE,sBACA,YACA,gBACA,yBAEA,MACE,gBACA,sBAGF,kBACE,UACA,6BAGF,yBACE,uCAEA,iBACE,8BAIJ,iBACE,oBACA,qBACA,oCACA,gBAEA,mBACA,kCACA,sCAEA,UACE,kBACA,WACA,WACA,gCACA,aACA,SACA,8EAGF,cAEE,sBACA,oCACA,mBACA,8FAEA,SACE,cACA,uHAKN,4BAEE,wBACA,2CACA,uIAEA,YACE,sBAIJ,YACE,0CAGF,iBACE,YACA,YACA,gBACA,uBACA,sBACA,2BAGF,gBACE,kCACA,kBACA,mBACA,yBAGF,YACE,cACA,qCACA,mBACA,gBACA,qCAIA,gCACE,uDAMA,sBACE,2BACA,+DAEA,WACE,6EACA,aACE,yBACA,8DAIJ,YACE,kCACA,4EAEA,UACE,gEAMJ,gBACE,wEAEA,WACE,0DAQR,uBACE,iEAEA,YACE,gBACA,0BAKN,sBACE,kBACE,8BAIJ,oBACE,8CAEA,iCACE,mBACA,gBACA,2BACA,oBACA,oDAEA,WACE,yBACA,gBACA,kBACA,mHAEA,yBAEE,0HAMF,UACE,iBACA,eACA,sCAKN,aACE,oBACA,6BAIJ,iBACE,aACA,cACA,iBACA,8BACA,qBACA,iDACA,yCACA,iCACA,gBACA,kBACA,8BAEA,iDAEA,aACE,4DAEA,iBACE,qEAKF,gBACE,eACA,2BAKN,WACE,qCAIA,cACE,mBACA,C;AC5NJ,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDACE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDArEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAmEE,qDAzEJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAuEE,8CA7EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYACE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a;AC/ER,gBACE,mCACA,aACA,mBACA,gBACA,oBACA,+BACA,qBAEA,kBACE,iBACA,kBACA,kCAGF,yBACE,a;AChBJ,4BACE,yCAEA,2CACE,+CAEA,8DACE,oBACA,kBACA,YACA,kCAIJ,yCACE,sBAEA,qDACE,aAKF,uFACE,uBAGF,kFACE,qBAGF,iEACE,iBACA,qBAGF,kEACE,eACA,gBACA,SAIA,0EACE,cACA,kBACA,eACA,sBAKN,kDACE,mBACA,gBACA,oBAGF,iDACE,uBACA,6C;AC5DJ,mCACE,WACA,aACA,mBACA,8BAIA,sCACE,aACA,mBAEA,8CACE,qBACA,oBAGF,6CACE,aACA,2BACA,mBAEA,gDACE,eACA,gBACA,mBACA,SACA,gBACA,mBACA,uBACA,gBAIJ,8CACE,aAIA,yDACE,iBAMJ,+CACE,WAIJ,2DACE,2BAEA,6DACE,UACA,cAKF,6CACE,mBACA,sBAKN,+BACE,eACA,wBACA,6B;ACtEA,4CACE,oBAGF,+DAEE,WACA,YACA,mBACA,UACA,cAGF,wBACE,eACA,gBAGF,yCACE,aACA,sBACA,uBAIA,iFAEE,mB;AC5BN,eACE,SACA,oBACA,eACA,kBAEA,kDAEE,kBACA,OACA,MACA,WACA,YAGF,4BACE,gBACA,mBACA,+BAEA,mEACE,kBACA,OACA,MACA,WACA,YACA,iBAIJ,sBACE,WACA,cACA,sCACA,UACA,6BAIA,+BACE,UAGF,qCACE,qBAIJ,kCACE,YACA,aACA,mBACA,uB;ACnDF,gDACE,aACA,cACA,qCACA,mBACA,gBAGF,oCACE,uBACA,gB;ACVF,0DACE,gCAGF,0FACE,kBAGF,8CACE,gBACA,aAGF,4CACE,cACA,aAGF,uCACE,cACA,WACA,YACA,2CACA,eAGF,wCACE,kBACA,aACA,cACA,aACA,cACA,wCACA,qBACA,YAGF,oDACE,YAGF,uCACE,sBACA,aAEA,oDACE,gBAGE,mEACE,mDAKN,gEACE,mBAGF,+DACE,kBAIJ,mDACE,aACA,cACA,qCACA,mBACA,gBAEA,uDACE,eACA,iDACA,iCAEA,8DACE,0CACA,wDAIF,8DACE,cACA,WACA,WACA,iBACA,oB;ACxFR,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;AClCJ,UACE,YAEA,cACE,aACA,sBACA,gBAGF,uBACE,uBAIJ,sBACE,aACA,YACA,8BACA,mBAIA,4BACE,WAEA,6CACE,6BACA,8BAKN,kBACE,mCACA,yCAEA,gBC9BA,+BD0BF,kBCzBI,mBAGA,mBD6BF,kCACE,aACA,sBAEA,iDACE,cACA,YAIJ,0BACE,iBACA,mBAGF,iCACE,iBACA,qBAIJ,yBACE,aACA,sBACA,mBACA,sBACA,kBAEA,sCACE,WAIJ,uBACE,WACA,YACA,qBACA,kBAEA,wCACE,kBACA,OACA,MACA,WACA,YAEA,+CACE,aAKN,oBACE,uBAEA,+BACE,yBACA,yBACA,2EACA,8DAEA,gDACE,qBAKN,eACE,0CACA,2BAEA,yBACE,gBAGF,sBACE,eACA,kCACA,mBACA,kBAEA,+BACE,iBAIJ,sBACE,gBAGF,2BACE,kBACA,kCACA,mBACA,qBAEA,oDACE,eAGF,oCACE,iBACA,uBAIJ,kCACE,eACA,sBACA,kCACA,gBACA,qBAEA,2CACE,iBAIJ,yBACE,oBAEA,oCACE,gBAGF,8CACE,oBAEA,wDACE,WAGF,oDACE,YACA,iBACA,iBACA,kCAGF,6GACE,cACA,gBAGF,qDACE,oBAGF,wDACE,kBACA,mBACA,kCAEA,kEACE,oBAGF,8DACE,wBAGF,8DACE,sBACA,uBAMJ,sDACE,yBAEA,wDACE,cAKN,2CACE,oBAEA,4DACE,mBACA,gBACA,cAGF,mDACE,WACA,YACA,kBAGF,yDACE,eACA,iBACA,qBACA,gBAGF,0DACE,kBACA,iBACA,kCAMA,+HACE,iBAGF,6DACE,WACA,cACA,kBAMR,4BACE,wBAGF,qDACE,qBAIA,8CACE,gBAIJ,gEACE,gBAIJ,sBACE,yCACA,kBACA,gBAEA,wCACE,YAGF,4CACE,aAIJ,uBACE,iBAGF,eACE,yBAIA,4CACE,aAGF,8CACE,uBACA,aAKF,8CACE,aACA,cACA,uB;AE/TJ,SACE,YACA,gBACA,kBAEA,eACE,yCACA,gBAEA,sBACE,kBACA,aACA,sBAEA,yDACE,kBACA,oBACA,qBAGF,6BACE,yBAGF,4BACE,sBACA,kCAGF,4CACE,kCACA,eACA,gBACA,mBAGF,yCACE,kBACA,oBAEA,kBACA,Y;ACzCR,eACE,YACA,gBAEA,0BACE,yC;ACLJ,0BACE,kBACA,kBACA,eACA,gBAEA,sCACE,cAGF,kCACE,WACA,YACA,kBACA,MACA,OACA,6DACA,0BAGF,2CACE,kBACA,MACA,c;ACvBJ,kBACE,kBACA,YACA,mCACA,eACA,4BACA,YACA,mBACA,mEACA,YACA,YAEA,8BACE,kBACA,cACA,WACA,aACA,eACA,WACA,YACA,kBACA,mCACA,WAGF,gCACE,kBACA,cACA,WACA,cACA,gBACA,YACA,aACA,kBACA,mCAGF,iCACE,YACA,wDAGF,4FAEE,wDAGF,iCACE,WACA,YACA,gBACA,mBAGF,yBACE,eACA,WACA,YACA,gBACA,iBACA,kBACA,aACA,eACA,mBACA,mB;AChEJ,oBACE,kBACA,eAEA,wCACE,cACA,iBACA,gBACA,4BAGF,4BACE,4GACA,qBACA,iBACA,UAGF,2CACE,kBAGF,8BACE,kBAGF,6BACE,aACA,kBACA,iBACA,kBAEA,qCACE,8CACA,eACA,uBAEA,uDACE,uB;ACrCN,+BACE,eACA,eAGF,yBACE,+BACE,iBAIJ,+BACE,mBAGF,gCACE,kBACA,UAGF,2BACE,kBACA,WACA,aACA,gBACA,gBACA,iBACA,gBAGF,iCACE,gBACA,0CACA,+CAEA,wCACE,qBAIJ,0BACE,WACA,kBACA,kC;AC5CJ,qBACE,eACA,MACA,OACA,QACA,aACA,6BAEA,2BACE,kBACA,eAEA,qCACE,sCAGF,mCACE,6BACA,8B;AClBN,sBACE,kBACA,MACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,yBAEA,mDAZF,sBAaI,qDACA,uDAGF,mCACE,mBACA,OAIJ,sBACE,kBACA,SACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,kBACA,oBAEA,uDAbF,sBAcI,kDACA,sDAEA,kDACE,2CACA,mDAIJ,+BACE,OACA,kCAKF,sEAEE,8B;ACvDJ,gBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,gBAQI,yBAGF,8CACE,SAEA,+DACE,gBAGF,oDACE,aAGF,qDACE,0BACA,cAGF,sDACE,eAIA,+DACE,WAMJ,oCACE,iBAGF,kCACE,kBAIA,0CACE,YAIJ,uCACE,wB;ACtDN,iBACE,kCAEA,+BACE,mBACA,yBAFF,+BAGI,gBACA,uBAIJ,gCACE,+BACA,iCACA,yBAHF,gCAII,uBAIJ,gCACE,iBACA,cACA,aACA,eACA,qBAEA,0EAEE,OACA,yBACA,aACA,oBACA,2CACA,iBAEA,gGACE,YACA,iBACA,gBAGF,0GACE,kBAKN,mCACE,iBACA,cACA,cACA,aACA,sBACA,wBAEA,0DACE,qBAGF,8CACE,0BAIJ,6CACE,kBAEA,2DACE,mCAGF,6DACE,mBACA,UAIJ,8BACE,kBAEA,2EAEE,WACA,kBACA,OACA,MACA,QACA,SACA,2CACA,oBAEA,UACA,yBACA,UAGF,sCACE,mDACA,yCAGF,qCACE,sCACA,aACA,uBACA,mBACA,2BAKF,8CACE,YAGF,6CACE,UAGF,wIAGE,oBAGF,mFAEE,2C;AC9HJ,yBACE,mBACA,8BAGF,0BACE,+BACA,oBAGF,mCACE,mBAGF,2BACE,kCACA,eACA,gBACA,qBAGF,yBACE,6BACA,iBACA,6CACA,iBACA,cAEA,mCACE,6BAGF,yBAXF,yBAYI,gBACA,gBAEA,4DACE,kBAKN,2BACE,kBAEA,yCACE,mBAGF,iDACE,kBACA,aACA,eAIJ,sBACE,kBAEA,sCACE,oBAGF,4BACE,iBAIJ,iBACE,kBACA,kCAGF,kBACE,kBACA,yBACA,2BAGF,mCACE,oB;ACjFJ,aACE,oBACA,mBACA,uBACA,aACA,cACA,eACA,kDACA,eACA,kBACA,mBACA,6BACA,sCAEA,yBACE,oBAGF,sCAEE,kDAGF,iBACE,WACA,Y;ACzBJ,aACE,YAEA,kBACE,yBACA,gBACA,cAEA,yBALF,kBAMI,sBAGF,wCACE,aACA,eAIJ,oBACE,YACA,6CACA,aACA,mBACA,6BACA,+CAEA,yBARF,oBASI,gBACA,kBACA,cACA,mBACA,mBAEA,qBACA,8BAEA,uCACE,SAGF,6CACE,+BAGF,uCACE,oBACA,sBAIF,2BACE,WACA,cACA,cACA,WACA,a;ACvDR,eACE,YAEA,oBACE,kBACA,yBACA,gBACA,cAEA,yBANF,oBAOI,sBAIJ,sBACE,YACA,6CACA,kBACA,gBACA,kBACA,mBACA,+CAEA,qBACA,8BAEA,yCACE,SAGF,+CACE,+BAIF,6BACE,WACA,cACA,cACA,WACA,YAIF,0CACE,oBACA,sBACA,mBACA,uBAEA,wDACE,qBAEA,mMACE,YACA,aACA,WACA,YAIJ,6DACE,WACA,YACA,kBACA,aACA,mBACA,uBAEA,kNACE,WACA,YACA,kBACA,MACA,OAMR,qCACE,YACA,cAEA,yBAJF,qCAKI,YAIJ,mCACE,yBACA,eACA,gBACA,kD;AC7FJ,WACE,aACA,mBACA,uBACA,eACA,6BACA,eACA,gBACA,kBAEA,sBACE,mBAGF,oBACE,uBAGF,sBACE,uBAGF,sBACE,WACA,YACA,wCACA,iCAGF,qCACE,kBACA,MACA,OACA,WACA,YACA,iBAGF,oBACE,kBACA,oB;ACxCJ,WACE,aACA,qCACA,uBACA,gBACA,qBACA,YACA,gBACA,eAEA,6BAVF,WAWI,oBAGF,gDACE,iBACA,0B;ACbF,wBACE,eACA,OACA,QACA,SACA,mCACA,gGACA,UAEA,6CACA,uDAVF,wBAWI,yCACA,2CACA,uCACA,+HAGF,6BACE,+BAEA,uDACE,gGAIJ,+CACE,gBAGF,iDACE,8CAIJ,iBACE,iCACA,0DACA,uDAHF,iBAII,yFAIJ,mBACE,wCACA,0CACA,aACA,mBACA,uBACA,+CACA,kBAEA,2BACE,cACA,0BACA,gBACA,gBACA,UAEA,qCACE,oBAGF,6CACE,gBAGF,gDACE,kBACA,YAGF,gDACE,kBACA,aAKN,8BACE,YAEA,uCACE,iCAKF,sCACE,kBACA,UACA,OACA,WACA,aACA,cAKF,wHACE,UACA,cAIJ,oBACE,8CACA,UACA,gBAEA,6BALF,oBAMI,gCAIJ,6BACE,iCACA,aACA,mBACA,uBACA,kCAGF,iCACE,aACA,kBACA,aACA,WAEA,6CANF,iCAOI,8CACA,2CAIJ,+BACE,iCACE,eAKN,YACE,mBAEA,iBACE,eACA,sBACA,gBACA,SACA,mBACA,kDACA,gBACA,mBACA,uBACA,mBACA,uBAGF,sBACE,mBAGF,mBACE,cACA,0BACA,gBACA,gBACA,UjBxKF,oGiB4KE,gBAIA,8CACE,cAGF,0CACE,gB;ACvLN,YACE,kBAGE,sCACE,kBACA,UACA,UACA,QACA,aAKJ,mCACE,mB;ACfJ,YACE,oBAEA,6BACE,gBAGF,4BACE,eAEA,sCACE,mBACA,mBAKF,wCACE,UACA,aAGF,uCACE,O;ACvBN,mBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,mBAQI,yB;ACPF,gCACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,gCAQI,yBAKF,0CACE,kBACA,UACA,OACA,WACA,aACA,c;ACpBN,gBACE,aACA,2DACA,oBACA,mBAEA,uBACE,a;ACPJ,gBACE,kBACA,cAGE,0CACE,kBACA,UACA,UACA,QACA,aAKJ,uCACE,mBAGF,wBACE,Y;ACpBJ,cACE,aACA,oBAEA,gBAIA,kBAHA,+BALF,cAMI,oBAIF,2BACE,gB;ACVF,iDACE,gCACA,iCAEA,wDACE,cACA,uBAIJ,mBACE,mDACA,cACA,WACA,YACA,iBACA,gDACA,oBACA,qBACA,uBACA,wBACA,gBACA,iBAEA,mCACE,WACA,iBAGF,6BACE,aACA,cACA,kBAIJ,2BACE,YAGF,mBACE,gBACA,gBACA,uBAGF,yBACE,mBACA,oBACA,qBACA,4BACA,gBACA,uBACA,gBACA,uBAEF,8DAEE,iB;AC3DJ,aACE,SACA,oBACA,gBACA,kBACA,eAEA,iBACE,kBACA,OACA,MACA,WACA,YACA,iB;ACbJ,kBAME,2BALA,oCACE,cACA,gBAKF,0BACE,aACA,qCACA,aACA,UAEA,yBANF,0BAOI,sCAGF,qCACE,iBACA,sDACE,4BACA,6BAIJ,qCACE,wBAGF,yCACE,cACA,SACA,SACA,oBACA,gBAEA,uJACE,kBACA,MACA,OACA,sBACA,uBAEA,yBAPF,uJAQI,WACA,YACA,oCACA,sC;AC/CR,2BACE,gBACA,oBACA,sBACA,yBACA,mBAGF,4BACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,4BAQI,yBAKF,sCACE,UACA,kBACA,UACA,OACA,WACA,aACA,cAKN,YACE,oBAGA,6BACE,oBACA,kBACA,2BACA,4BAEA,qCACE,cACA,WACA,kBACA,SACA,UACA,sCACA,uBACA,wBACA,kBAIJ,6BACE,iCACA,gBACA,mBAGF,kBACE,0BAIF,sBACE,mBACA,kCACA,mB;ACvEJ,aACE,YACA,gBACA,gBAEA,0BACE,aACA,sBACA,gBACA,kCACA,uBACA,mB;ACXJ,eACE,YACA,gBACA,gBAEA,4BACE,aACA,sBACA,gBACA,kCAGF,4BACE,mBAEA,mCACE,aACA,8BACA,cAEA,kDACE,gBAGF,0CACE,eACA,sBACA,SACA,gBACA,mBACA,uBAGF,0CACE,kCACA,SAGF,2CACE,cACA,iBAEA,oDACE,mCACA,kCAEA,qHACE,+CAMR,iCACE,aACA,iBACA,gBAIA,oDACE,iBAGF,6CACE,cACA,kBAKN,8BACE,e;ACxEJ,WACE,YACA,eAEA,0BACE,YACA,cAEA,+BACE,aACA,qCACA,uBACA,gBACA,qBAIJ,wBACE,6BACA,gBACA,kB;ACpBJ,mBACE,6CACA,wBACA,aACA,8BAEA,gCACE,aACA,mBACA,mBACA,sBACA,gBACA,kCACA,+BACA,gBACA,MACA,mCAEA,yBAZF,gCAaI,kCAIJ,mCACE,iBAEA,6CACE,cACA,kBAIJ,gCACE,iBACA,kBACA,gBAEA,yBALF,gCAMI,kBAGF,yCACE,wBAKF,oEACE,qBAIA,6EACE,oBACA,eAKN,mCACE,0BACA,wBAGE,uDACE,iBACA,eAKN,8BACE,sBACA,kBACA,iB;AC1EJ,aACE,YACA,kBACA,aACA,sBACA,oBAEA,sBACE,kBACA,MACA,OACA,SACA,QACA,iCAGF,4BACE,sBACA,cACA,kBAEA,yBALF,4BAMI,gBAIJ,gCACE,0CACA,YACA,c;AC7BJ,YACE,kBACA,YAEA,2BACE,YACA,kBACA,kBAGF,qBACE,oBACA,0CAEA,0BACE,eAGF,mCACE,gBACA,iBAGF,+BACE,gBAGF,+BACE,2BAEA,yCACE,gBAIJ,mCACE,cACA,eACA,mBACA,kBAEA,oDACE,kBACA,OACA,MACA,WACA,YAEA,2DACE,aAKN,+BACE,kBAEA,yCACE,aACA,mBAGF,oDACE,aACA,kBAGF,0CACE,gBAGF,yDACE,oBACA,mBACA,gBACA,uBAGF,gEACE,gBACA,mBAIA,gDACE,gBACA,mBAKF,mEACE,qBAKN,sCACE,gBACA,mBACA,kCAEA,gDACE,mBAIJ,mCACE,kCACA,qBAEA,6CACE,mBAIJ,mCACE,kCACA,kBAGF,8BACE,iBAIJ,kCACE,YAGF,wBACE,wBAGF,yBACE,gBAEA,gCACE,oBACA,mBAEA,2CACE,sBAKF,6CACE,aACA,WACA,eAGF,4CACE,cACA,aACA,eAKN,oBACE,6BACA,6CACA,aACA,mBACA,cAEA,gBACA,iBAEA,iCACE,oBACA,kBACA,YAGF,kCACE,YACA,YACA,gBACA,UACA,gBAIJ,qBACE,iBAIJ,oBACE,mBAIA,6BACE,kBAGF,mCACE,eACA,mBACA,mBAGF,uCACE,kBACA,YACA,QACA,6BACA,UAGF,4BACE,oBAGF,6BACE,mBAKF,yBACE,mBAGF,4BACE,gBAGF,2BACE,gBAEA,0BACA,4GAEE,wBAIJ,6BACE,oBAKF,6BACE,gBACA,mBAGF,8BACE,kBAKF,kCACE,aACA,6BAGF,wCACE,WACA,YAMF,yCACE,kBACA,gBACA,iB;ACnRJ,aACE,aACA,sBACA,eAEA,8BACE,6CAGF,kBACE,aACA,eACA,cACA,oBAEA,wBACE,yCAIJ,mBACE,aACA,YACA,YACA,gBAGF,wBACE,aACA,sBACA,uBACA,gBACA,iBAGF,4BACE,kCACA,gBACA,uBACA,mBAGF,wBACE,gBACA,uBACA,mBAGF,mBACE,kCACA,kBACA,iBACA,mBAGF,sBACE,aACA,6BACA,gBACA,UAGF,qBACE,WACA,Y;AChEJ,cACE,mBAEA,iBACE,gBACA,kCACA,qB;ACNJ,UACE,mBAGE,iBACE,kCACA,gBACA,oBAGF,sBACE,mB;ACXN,UACE,gBAEA,uBACE,aACA,mBACA,cAEA,2BACE,YACA,aAIA,gCACE,iBACA,mBAGF,+BACE,gBACA,iBACA,kCAKN,sBACE,YAEA,uCACE,kBACA,aACA,mBACA,4BACA,kCACA,gBAEA,4CACE,wBAGF,8CACE,aACA,YAKN,wBACE,0CACA,aAEA,4CACE,aACA,0BACA,gBAEA,8CACE,iBACA,kCACA,kBACA,aAGF,8DACE,oEACA,qBACA,mBACA,cAIA,yDACE,eACA,sBACA,gBACA,gBACA,sBACA,wBACA,0BAGF,wDACE,gBACA,kBACA,qC;ACtFV,WACE,kBAEA,qDACE,kBAGF,uBACE,kBACA,UACA,UACA,UAEA,2BACE,e;ACdN,aACE,mBAEA,gBACE,gBACA,kCACA,qBAGF,4BACE,aACA,8BAEA,yCACE,aACA,cACA,a;ACfJ,8BACE,oBAGF,sBACE,kBACA,4BACA,6BACA,WACA,oBACA,aACA,mBACA,mBACA,mCACA,6CAEA,yBACE,gBACA,mBACA,uBACA,mBAIJ,0BACE,aAGF,6BACE,aACA,eACA,aACA,mBACA,uBAGF,+BACE,aACA,gBAGF,uBACE,cACA,WACA,YACA,kBAGF,sBACE,kBACA,+BACA,gCACA,WACA,oBACA,mCACA,0CAEA,6BACE,oBACA,gBAIJ,4BACE,YAGF,6BACE,UACA,gBAIJ,+FAKI,4BACE,gBAGF,0BACE,c","sources":["webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.scss","webpack://telegram-t/./src/components/mediaViewer/PanZoom.scss","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.scss","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.scss","webpack://telegram-t/./src/components/common/ChatOrUserPicker.scss","webpack://telegram-t/./src/components/main/Dialogs.scss","webpack://telegram-t/./src/components/common/CalendarModal.scss","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.scss","webpack://telegram-t/./src/components/middle/ReactorListModal.scss","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.scss","webpack://telegram-t/./src/components/left/search/RecentContacts.scss","webpack://telegram-t/./src/components/left/search/ChatMessage.scss","webpack://telegram-t/./src/components/left/search/DateSuggest.scss","webpack://telegram-t/./src/components/left/search/LeftSearch.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss","webpack://telegram-t/./src/components/ui/ShowMoreButton.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.scss","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.scss","webpack://telegram-t/./src/components/left/settings/WallpaperTile.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.scss","webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/left/settings/Settings.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/left/newChat/NewChat.scss","webpack://telegram-t/./src/components/left/ArchivedChats.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelector.scss","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.scss","webpack://telegram-t/./src/components/common/StickerSetModal.scss","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.scss","webpack://telegram-t/./src/components/middle/MobileSearch.scss","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.scss","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.scss","webpack://telegram-t/./src/components/middle/composer/PollModal.scss","webpack://telegram-t/./src/components/middle/composer/EmojiButton.scss","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.scss","webpack://telegram-t/./src/components/middle/composer/StickerPicker.scss","webpack://telegram-t/./src/components/common/GifButton.scss","webpack://telegram-t/./src/components/middle/composer/GifPicker.scss","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.scss","webpack://telegram-t/./src/components/middle/composer/AttachMenu.scss","webpack://telegram-t/./src/components/middle/composer/BotCommand.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.scss","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.scss","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.scss","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.scss","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.scss","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.scss","webpack://telegram-t/./src/components/right/RightSearch.scss","webpack://telegram-t/./src/components/right/StickerSearch.scss","webpack://telegram-t/./src/components/right/GifSearch.scss","webpack://telegram-t/./src/components/right/PollAnswerResults.scss","webpack://telegram-t/./src/components/right/PollResults.scss","webpack://telegram-t/./src/components/right/management/Management.scss","webpack://telegram-t/./src/components/right/management/JoinRequest.scss","webpack://telegram-t/./src/components/payment/ShippingInfo.scss","webpack://telegram-t/./src/components/payment/Shipping.scss","webpack://telegram-t/./src/components/payment/Checkout.scss","webpack://telegram-t/./src/components/payment/CardInput.scss","webpack://telegram-t/./src/components/payment/PaymentInfo.scss","webpack://telegram-t/./src/components/payment/PaymentModal.scss"],"sourcesContent":[".MediaViewerActions {\n display: flex;\n margin-inline-start: auto;\n margin-inline-end: -.375rem;\n\n .Button {\n margin-inline-start: .25rem;\n }\n}\n\n.MediaViewerActions-mobile {\n position: relative;\n color: var(--color-text);\n\n .ProgressSpinner {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n",".MediaViewerFooter {\n position: absolute;\n bottom: 0;\n padding: 1rem 0;\n width: 100%;\n transition: opacity .15s;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-height: 640px) {\n padding: .5rem 0 0;\n }\n\n @media (max-width: 600px) {\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n\n &.is-for-video {\n opacity: 0;\n pointer-events: none;\n padding-bottom: 5rem;\n\n .video-controls-visible &:not(.is-hidden) {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n\n body.ghost-animating & {\n opacity: 0;\n }\n\n .media-viewer-footer-content {\n position: relative;\n max-width: var(--messages-container-width);\n margin: auto;\n cursor: pointer;\n opacity: .5;\n transition: opacity .15s;\n\n &:hover {\n opacity: 1;\n }\n\n @media (max-width: 600px) {\n opacity: 1;\n }\n }\n\n &.is-hidden {\n opacity: 0;\n }\n\n .media-text {\n margin-bottom: 0;\n overflow: auto;\n padding: 0 .5rem;\n text-align: center;\n color: rgba(255, 255, 255, .9);\n font-size: .9375rem;\n letter-spacing: .025rem;\n max-height: 4.25rem;\n\n @media (max-height: 640px) {\n max-height: 2.75rem;\n }\n\n .emoji {\n width: .9375rem;\n height: .9375rem;\n vertical-align: -2px;\n }\n\n &.multiline {\n &::before {\n content: '';\n position: absolute;\n left: -.75rem;\n right: -.75rem;\n top: -.25rem;\n bottom: -.25rem;\n background: rgba(0, 0, 0, .75);\n border-radius: var(--border-radius-default);\n z-index: var(--z-below);\n\n @media (max-width: 600px) {\n display: none;\n background: none;\n }\n }\n }\n }\n\n a {\n color: var(--color-links);\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n}\n",".VideoPlayerControls {\n display: flex;\n align-items: center;\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n padding-top: .625rem;\n font-size: .875rem;\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n transition: opacity .15s;\n opacity: 0;\n pointer-events: none;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-width: 600px) {\n position: fixed;\n padding: 1.25rem .5rem .75rem;\n background: none;\n z-index: var(--z-media-viewer);\n }\n\n &.active {\n opacity: 1;\n pointer-events: all;\n }\n\n &.mobile {\n .player-file-size {\n position: static;\n left: auto;\n transform: none;\n margin-left: auto;\n }\n\n .fullscreen {\n margin-left: 1rem;\n }\n\n .player-time + .fullscreen {\n margin-left: auto;\n }\n }\n\n .Button {\n width: 2.25rem;\n padding: 0;\n margin: .25rem;\n height: 1.75rem;\n @media (max-width: 600px) {\n height: 2.25rem;\n }\n }\n\n .play i {\n line-height: 1.5rem;\n }\n\n .player-time {\n margin: 0 1rem;\n white-space: nowrap;\n }\n\n .fullscreen {\n margin-left: auto;\n @media (max-width: 600px) {\n margin-left: 1rem;\n }\n i {\n line-height: 1.75rem;\n @media (max-width: 600px) {\n font-size: 1.5rem;\n }\n }\n }\n\n @media (max-width: 600px) {\n .player-time + .fullscreen {\n margin-left: auto;\n }\n }\n\n .player-file-size {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (max-width: 600px) {\n position: static;\n left: auto;\n transform: none;\n margin-left: auto;\n margin-right: 1rem;\n & + .fullscreen {\n margin-left: 0;\n }\n }\n }\n\n .player-seekline {\n position: absolute;\n left: 1rem;\n right: 1rem;\n top: 0;\n height: 1rem;\n touch-action: none;\n cursor: pointer;\n\n &-track {\n position: absolute;\n top: 50%;\n left: -.25rem;\n right: -.25rem;\n height: 5px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.16);\n border-radius: var(--border-radius-default);\n }\n\n &-buffered,\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-buffered {\n background-color: rgba(255, 255, 255, 0.5);\n }\n\n &-played {\n background: var(--color-primary);\n\n &::after {\n content: '';\n position: absolute;\n width: .75rem;\n height: .75rem;\n border-radius: 50%;\n background-color: var(--color-primary);\n right: 0;\n top: 50%;\n transform: translate(.325rem, -50%);\n }\n }\n }\n}\n",".VideoPlayer {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n overflow: hidden;\n\n #MediaViewer.zoomed & {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n > div {\n width: 100% !important;\n height: 100% !important;\n }\n video {\n max-height: none !important;\n }\n }\n\n @media (min-width: 601px) {\n // Safari: custom controls are not displayed after exiting full screen mode.\n z-index: 1;\n }\n\n @media (max-width: 600px) {\n overflow: visible;\n }\n\n @media (max-height: 640px) {\n margin-bottom: 1.75rem;\n @at-root .has-footer #{&} {\n margin-bottom: 0;\n }\n }\n\n video {\n display: block;\n max-height: calc(100vh - 8.25rem);\n margin: auto;\n object-fit: contain;\n outline: none;\n width: 100%;\n height: 100%;\n background: no-repeat 50% 50%;\n background-size: contain;\n\n @media (max-height: 640px) {\n max-height: calc(100vh - 10rem);\n }\n }\n\n .play-button {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 3.25rem;\n height: 3.25rem;\n background-color: rgba(0, 0, 0, 0.5) !important;\n body:not(.animation-level-0) & {\n transition: opacity .3s ease !important;\n }\n\n .icon-play {\n font-size: 1.75rem;\n position: relative;\n left: .125rem;\n }\n }\n\n .spinner-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .buffering {\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n position: absolute;\n left: 0.1875rem;\n top: 0.1875rem;\n z-index: 1;\n padding: 0 0.375rem;\n border-radius: 0.75rem;\n line-height: 1.125rem;\n }\n\n .ProgressSpinner {\n cursor: pointer;\n }\n }\n}\n",".MediaViewerContent {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: none;\n overflow: hidden;\n z-index: 1;\n padding: 3.25rem 0;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .thumbnail {\n position: relative;\n\n img {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n > img {\n max-width: 100vw;\n max-height: calc(100vh - 8.25rem);\n object-fit: contain;\n transition: transform .2s;\n }\n\n .spinner-wrapper {\n max-width: 100vw;\n margin: auto;\n }\n\n .Spinner {\n margin: auto;\n }\n}\n",".MediaViewerSlides {\n position: absolute;\n display: flex;\n height: 100%;\n max-height: 100vh;\n min-height: -moz-available;\n /* stylelint-disable-next-line declaration-block-no-duplicate-properties */\n max-height: -webkit-fill-available;\n width: 100%;\n overflow: hidden;\n -ms-touch-action: none;\n touch-action: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n & * {\n -ms-scroll-chaining: none;\n }\n}\n\n.MediaViewerSlide {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n flex: 100% 0 0;\n z-index: 0;\n touch-action: none;\n transform-origin: 0 0;\n\n &--active {\n z-index: 1;\n }\n}\n",".pan-wrapper,\n.pan-container {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.pan-wrapper {\n cursor: move;\n user-select: none;\n}\n\n.pan-container {\n transition: transform .2s ease-in;\n\n .pan-wrapper.move & {\n transition: none;\n }\n\n .zoomed & {\n position: fixed;\n top: 0;\n left: 0;\n }\n}\n",".SenderInfo {\n display: flex;\n align-content: center;\n color: white;\n cursor: pointer;\n\n opacity: .5;\n transition: .15s opacity;\n\n &:hover {\n opacity: 1;\n }\n\n .Avatar {\n margin-inline-end: 1rem;\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n justify-content: center;\n max-width: calc(100% - 3.75rem);\n }\n\n .title {\n line-height: 1.45rem;\n font-weight: 500;\n white-space: pre;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .date {\n line-height: 1.25rem;\n font-size: 0.875rem;\n letter-spacing: -0.01rem;\n }\n}\n",".ZoomControls {\n position: absolute;\n bottom: 1.25rem;\n left: 50%;\n background: rgba(0,0,0,.5);\n border-radius: var(--border-radius-default);\n width: 100%;\n height: 3.375rem;\n max-width: 274px;\n transform: translate3d(-50%, 0, 10px);\n transition: opacity .3s ease-in;\n pointer-events: none;\n\n &.open {\n z-index: var(--z-media-viewer);\n pointer-events: all;\n }\n\n .zoom-out,\n .zoom-in {\n position: absolute;\n top: 0.4375rem;\n width: 2.5rem;\n height: 2.5rem;\n color: #fff;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n .zoom-out {\n left: .5rem;\n }\n\n .zoom-in {\n right: .5rem;\n }\n\n .seekline {\n position: absolute;\n left: 3.25rem;\n right: 3.25rem;\n top: 1.125rem;\n height: 1rem;\n\n &-track {\n position: absolute;\n top: 50%;\n left: -.25rem;\n right: -.25rem;\n height: 2px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, .5);\n border-radius: var(--border-radius-default);\n }\n\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-played {\n background: #fff;\n transition: width 200ms;\n\n &::after {\n content: '';\n position: absolute;\n width: .75rem;\n height: .75rem;\n border-radius: 50%;\n background-color: var(--color-white);\n right: 0;\n top: 50%;\n transform: translate(.325rem, -50%);\n }\n }\n\n &-input {\n width: 100%;\n height: 1rem;\n top: -.375rem;\n opacity: 0;\n margin: 0;\n padding: 0;\n cursor: pointer;\n overflow: hidden;\n\n &::-webkit-slider-thumb {\n margin-top: -2rem;\n }\n }\n }\n}\n","#MediaViewer {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100%;\n background: rgba(0, 0, 0, .9);\n color: #fff;\n z-index: var(--z-media-viewer);\n\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: auto 1fr;\n grid-column-gap: 0;\n grid-row-gap: 0;\n justify-items: stretch;\n align-items: center;\n\n @media (max-width: 600px) {\n background: rgba(0, 0, 0, 1);\n }\n\n // Potential perf improvement\n &:not(.shown) {\n display: block !important;\n transform: scale(0);\n }\n\n body.ghost-animating & {\n > .pan-wrapper, > button, .MediaViewerContent img, .MediaViewerContent .VideoPlayer {\n display: none;\n }\n }\n\n body.animation-level-2 & {\n transition-duration: .3s !important;\n }\n\n &:not(.open),\n .closing {\n .SenderInfo {\n pointer-events: none;\n transition: none;\n }\n }\n\n &.zoomed {\n .navigation {\n display: none;\n }\n\n .media-viewer-head {\n z-index: 2;\n }\n\n .MediaViewerSlide {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n padding: 0;\n z-index: 1;\n }\n }\n\n .media-viewer-head {\n display: flex;\n grid-area: 1 / 1 / 2 / -2;\n padding: 0.5rem 1.25rem;\n position: relative;\n z-index: var(--z-media-viewer-head);\n min-width: 0;\n\n & > .Transition {\n width: 100%;\n min-width: 0;\n }\n\n @media (max-width: 600px) {\n padding: 0.5rem;\n\n @supports (padding: 0 env(safe-area-inset-left)) {\n padding: 0.5rem #{\"max(0.5rem, env(safe-area-inset-left))\"};\n }\n\n .media-viewer-close {\n margin-right: 1.5rem;\n }\n }\n\n @supports (padding: 0.5rem env(safe-area-inset-left)) {\n padding: 0.5rem #{\"max(1.25rem, env(safe-area-inset-left))\"};\n }\n }\n\n & > .Transition,\n & > .pan-wrapper {\n grid-area: 1 / 1 / -1 / -1;\n }\n\n & > .Transition,\n & > .pan-wrapper .Transition {\n position: relative;\n justify-self: center;\n text-align: center;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n }\n\n .navigation {\n position: fixed;\n top: 4rem;\n width: 10vw;\n bottom: 0;\n border: none;\n padding: 0;\n margin: 0;\n appearance: none;\n background: transparent no-repeat;\n background-size: 1.25rem;\n opacity: 0;\n transition: opacity .15s;\n outline: none;\n cursor: pointer;\n z-index: 1;\n\n @media (max-width: 600px) {\n width: 20vw;\n }\n\n &:hover, .is-touch-env & {\n opacity: 1;\n }\n\n &.prev {\n left: 0;\n background-image: url(\"../../assets/media_navigation_previous.svg\");\n background-position: 1.25rem calc(50% - 2rem);\n\n @supports (left: env(safe-area-inset-left)) {\n left: env(safe-area-inset-left);\n }\n\n &[dir=rtl] {\n left: auto;\n right: 0;\n transform: scaleX(-1);\n\n @supports (left: env(safe-area-inset-left)) {\n left: auto;\n right: env(safe-area-inset-right);\n }\n }\n }\n\n &.next {\n right: 0;\n background-image: url(\"../../assets/media_navigation_next.svg\");\n background-position: calc(100% - 1.25rem) calc(50% - 2rem);\n\n @supports (left: env(safe-area-inset-left)) {\n right: env(safe-area-inset-right);\n }\n\n &[dir=rtl]{\n left: 0;\n right: auto;\n transform: scaleX(-1);\n\n @supports (left: env(safe-area-inset-left)) {\n right: auto;\n left: env(safe-area-inset-left);\n }\n }\n }\n\n &.inline {\n top: calc(50% - 3rem);\n bottom: unset;\n height: 6rem;\n background-position-y: center;\n\n @media (max-width: 600px) {\n opacity: 0;\n transition: opacity .15s ease-in;\n pointer-events: none;\n\n .video-controls-visible & {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n }\n}\n\n.ghost {\n position: absolute;\n z-index: var(--z-media-viewer);\n will-change: transform, opacity;\n overflow: hidden;\n border-radius: 0;\n transition: transform .2s ease, opacity .2s ease;\n\n &.rounded-corners {\n border-radius: var(--border-radius-messages);\n }\n\n &.circle {\n border-radius: 50%;\n }\n\n body.is-ios & {\n transition: transform .2s ease, opacity .2s ease, border-radius .2s ease !important;\n }\n\n img,\n video {\n width: 100%;\n height: 100%;\n user-select: none;\n -webkit-user-select: none;\n object-fit: cover;\n }\n}\n",".ChatOrUserPicker {\n z-index: var(--z-media-viewer);\n\n .modal-dialog {\n height: 70%;\n max-width: 25rem;\n\n @media (max-width: 600px) {\n height: 90%;\n }\n }\n\n .modal-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.5rem;\n\n .Button {\n margin-right: 0.5rem;\n }\n\n .input-group {\n margin: 0;\n flex: 1;\n }\n\n .form-control {\n border: none;\n box-shadow: none !important;\n\n height: 2.75rem;\n padding: 0.5rem;\n font-size: 1.25rem;\n line-height: 1.75rem;\n unicode-bidi: plaintext;\n }\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .picker-list {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0 0.5rem;\n }\n }\n\n .no-results {\n height: 100%;\n margin: 0;\n padding: 1rem 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem {\n position: absolute;\n width: 100%;\n }\n\n .ListItem.chat-item-clickable {\n &:not(.force-rounded-corners) {\n @media (max-width: 600px) {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n }\n }\n }\n}\n","#Dialogs {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: var(--z-modal);\n}\n",".CalendarModal {\n .modal-dialog {\n max-width: 26.25rem;\n .modal-content {\n padding: .375rem 1rem 1rem;\n }\n }\n\n .timepicker {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 1.5rem;\n\n .form-control {\n max-width: 5rem;\n text-align: center;\n\n &:first-child {\n margin-right: 1rem;\n }\n &:last-child {\n margin-left: 1rem;\n }\n }\n }\n\n .footer {\n display: flex;\n justify-content: flex-end;\n flex-direction: column;\n\n .Button {\n text-transform: none;\n\n + .Button {\n margin-top: .5rem;\n }\n }\n }\n\n .month-selector {\n display: flex;\n align-items: center;\n\n h4 {\n flex: 1;\n margin: 0 0 0 1.25rem;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n margin-left: .75rem;\n }\n\n & ~ .Button {\n color: var(--color-primary)\n }\n }\n\n .Button.hidden {\n opacity: 0.5;\n pointer-events: none;\n }\n }\n\n .day-button {\n position: relative;\n border-radius: 4rem;\n outline: none !important;\n font-weight: 500;\n margin: .125rem .625rem;\n\n @media (max-width: 600px) {\n margin: .25rem .375rem;\n }\n\n &.weekday {\n margin-bottom: 0;\n height: 1rem;\n }\n\n &.clickable {\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n }\n\n &.selected {\n background-color: var(--color-primary);\n color: white;\n }\n }\n\n &.disabled {\n opacity: 0.25;\n pointer-events: none;\n }\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n }\n }\n\n .calendar-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 17rem;\n margin: 1.5rem -0.5rem 0.5rem;\n }\n\n .calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n width: 100%;\n }\n}\n",".MessageSelectToolbar {\n position: absolute;\n bottom: 0.5rem;\n left: 0.5rem;\n right: 0.5rem;\n width: auto;\n z-index: 20;\n justify-content: center;\n margin: 0;\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n bottom: calc(0.5rem + env(safe-area-inset-bottom));\n }\n\n .mask-image-disabled &::before {\n left: auto !important;\n right: auto !important;\n }\n\n .no-composer & {\n width: 100%;\n @media (max-width: 600px) {\n width: calc(100% - 1rem);\n }\n }\n\n @media (min-width: 601px) {\n left: 1rem;\n right: 1rem;\n bottom: 1.25rem;\n\n .no-composer & {\n top: -4.75rem;\n }\n }\n\n opacity: 1;\n\n & .MessageSelectToolbar-inner {\n transform: scaleX(1) translateX(0);\n }\n\n .no-composer .middle-column-footer-button-container + &,\n .no-composer .messaging-disabled + & {\n top: auto;\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &:not(.shown) {\n opacity: 0;\n pointer-events: none;\n\n .shown-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1));\n }\n\n &.with-composer .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1)) translateX(var(--toolbar-translate-x, 0));\n }\n\n &:not(.with-composer) .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-unpin-hidden-scale)) translateX(0);\n }\n }\n\n &::before {\n z-index: -1;\n max-width: 32rem;\n width: 100%;\n left: auto;\n right: auto;\n }\n\n &-inner {\n width: 100%;\n max-width: 32rem;\n display: flex;\n align-items: center;\n padding: 0.25rem;\n\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n box-shadow: 0 1px 2px var(--color-default-shadow);\n font-weight: 500;\n\n transform: scaleX(1);\n transition: transform var(--select-transition), opacity var(--select-transition);\n\n @media (max-width: 600px) {\n padding: 0;\n max-width: none;\n }\n\n > .Button {\n width: 3rem;\n height: 3rem;\n\n @media (max-width: 600px) {\n width: 2.875rem;\n height: 2.875rem;\n }\n }\n }\n\n &-count {\n margin-left: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-grow: 1;\n\n @media (max-width: 600px) {\n margin-right: 0.5rem;\n }\n }\n\n &-actions {\n margin-left: auto;\n display: flex;\n\n .item {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n padding: 0.6875rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n }\n\n &.destructive {\n color: var(--color-error);\n i {\n color: inherit;\n }\n }\n\n &.disabled {\n opacity: 0.5;\n cursor: default;\n pointer-events: none;\n }\n\n &:not(.disabled):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n @media (hover: hover) {\n &:hover, &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n }\n }\n }\n }\n}\n",".ReactorListModal {\n --color-reaction: var(--color-message-reaction);\n --hover-color-reaction: var(--color-message-reaction-hover);\n --accent-color: var(--color-primary);\n\n .modal-content {\n overflow: hidden;\n }\n\n .Reactions {\n margin-bottom: 0.5rem;\n }\n\n .reaction-filter-emoji {\n margin-right: 0.25rem;\n }\n\n .reactor-list {\n max-height: 400px;\n overflow: auto;\n overflow-x: hidden;\n }\n\n .reactors-list-item {\n margin: 0;\n }\n\n .reactors-list-item .ListItem-button {\n display: flex;\n align-items: center;\n }\n\n .reactors-list-emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-start: auto;\n }\n}\n",".EmojiInteractionAnimation {\n --start-x: 0;\n --start-y: 0;\n --scale: 0;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1000;\n\n @keyframes show-interaction {\n from {\n transform: translate(0, 0) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n @keyframes show-interaction-reversed {\n from {\n transform: translate(50%, 0) scaleX(-1) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(100%, -50%) scaleX(-1) scale(1);\n }\n }\n\n .AnimatedSticker {\n position: absolute;\n top: var(--start-y);\n left: var(--start-x);\n transform: scale(var(--scale), 0);\n transform-origin: left top;\n transition: 0.25s cubic-bezier(.29,.81,.27,.99) opacity;\n }\n\n &.reversed .AnimatedSticker {\n transform: scale(var(--scale), 0) scaleX(-1);\n }\n\n &.playing .AnimatedSticker {\n animation: show-interaction forwards 0.25s cubic-bezier(.29,.81,.27,.99);\n }\n\n &.reversed.playing .AnimatedSticker {\n animation: show-interaction-reversed forwards 0.25s cubic-bezier(.29,.81,.27,.99);\n }\n\n &.hiding .AnimatedSticker {\n opacity: 0;\n }\n\n &.reversed.hiding .AnimatedSticker {\n opacity: 0;\n }\n}\n",".RecentContacts {\n .Loading {\n min-height: 75vh;\n }\n\n .top-peers-section {\n padding: .5rem 1rem;\n }\n\n .top-peers {\n height: 6rem;\n margin: 0 -1rem;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n }\n\n .top-peer-item {\n display: inline-block;\n width: 4.5rem;\n height: 6rem;\n padding: 0.625rem 0.25rem;\n margin-left: 0.5rem;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n position: relative;\n overflow: hidden;\n\n &:first-child {\n margin-left: 0.125rem;\n }\n\n &:last-child {\n margin-right: 0.125rem;\n }\n\n .Avatar {\n margin: 0 auto 0.375rem;\n }\n\n &:hover {\n background: var(--color-chat-hover);\n }\n\n .top-peer-name {\n text-align: center;\n white-space: nowrap;\n font-size: 0.75rem;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n background-size: 1rem;\n margin-inline-end: 1px;\n vertical-align: -3px;\n }\n }\n }\n\n .recent-chats-header {\n display: flex;\n align-items: center;\n\n .Button {\n margin-left: auto;\n }\n\n &[dir=rtl] {\n .Button {\n margin-left: 0;\n margin-right: auto;\n }\n }\n }\n}\n",".ChatMessage {\n &:first-child {\n margin-top: .5rem;\n }\n &:hover, &.selected {\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n\n .ListItem-button {\n padding: .25rem .5rem;\n }\n\n .info {\n .title {\n flex-grow: 1;\n }\n\n h3 {\n font-size: 1rem;\n width: auto;\n }\n\n .subtitle {\n color: var(--color-text-secondary);\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #CAE3F7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n display: inline-block;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n }\n\n .message {\n flex-grow: 1;\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: ': ';\n }\n }\n\n img {\n width: 1.25rem;\n height: 1.25rem;\n object-fit: cover;\n border-radius: .125rem;\n vertical-align: -.25rem;\n margin-right: .25rem;\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: .75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n }\n }\n }\n\n .info-row {\n display: flex;\n justify-content: space-between;\n }\n\n &[dir=rtl] {\n .subtitle {\n text-align: right;\n }\n }\n}\n",".DateSuggest {\n display: flex;\n height: 2rem;\n flex-direction: row;\n justify-content: space-between;\n margin-left: .5rem;\n margin-bottom: .5rem;\n\n .date-item {\n display: flex;\n flex: 1 1 auto;\n min-width: 8rem;\n margin-top: .375rem;\n cursor: pointer;\n font-size: .875rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n\n .icon-calendar {\n font-size: 1.25rem;\n margin-right: .25rem;\n }\n }\n \n}",".LeftSearch {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n\n & > .Transition {\n flex: 1;\n overflow: hidden;\n }\n\n .TabList {\n padding-bottom: 1px;\n z-index: 1;\n }\n\n .documents-list {\n padding: 0 1.25rem 1.25rem;\n\n .ListItem {\n padding: 0.625rem 0;\n }\n }\n\n .section-heading {\n position: relative;\n padding-top: 1.25rem;\n padding-left: 1.25rem;\n margin: 0 0 1rem -1.25rem !important;\n\n font-weight: 500;\n font-size: .9375rem;\n color: var(--color-text-secondary);\n\n &::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 1px;\n background: var(--color-borders);\n left: .625rem;\n top: -1px;\n }\n\n &[dir=rtl],\n &[dir=auto] {\n padding-left: 0;\n padding-right: 1.25rem;\n margin: 0 -1.25rem 0 1rem !important;\n text-align: initial;\n\n &::before {\n left: auto;\n right: .625rem;\n }\n }\n }\n\n .LeftSearch .search-section .section-heading,\n .RecentContacts .search-section .section-heading {\n margin-left: -1rem !important;\n width: calc(100% + 2rem);\n box-shadow: 0 -1px 0 0 var(--color-borders);\n\n &::before {\n display: none;\n }\n }\n\n .WebLink {\n display: flex;\n }\n\n .content:not(.with-seekline) {\n align-self: center;\n min-width: 0;\n flex-grow: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n }\n\n .message-date {\n font-size: .75rem;\n color: var(--color-text-secondary);\n padding-left: 1rem;\n white-space: nowrap;\n }\n\n .media-list {\n display: grid;\n padding: .5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: .25rem;\n }\n\n .Audio {\n .ProgressSpinner {\n margin: -.1875rem 0 0 -.1875rem;\n }\n }\n\n .ListItem.search-result {\n .ChatInfo {\n .handle {\n unicode-bidi: plaintext;\n color: var(--color-primary);\n\n &::before {\n content: '@';\n html[lang=ar] & {\n content: ' ،@';\n margin-inline-end: .25rem;\n }\n }\n\n &::after {\n content: ', ';\n color: var(--color-text-secondary);\n\n html[lang=ar] & {\n content: '';\n }\n }\n }\n\n &[dir=rtl] {\n .status {\n text-align: right;\n\n .handle {\n float: right;\n }\n }\n }\n }\n }\n\n .ListItem.search-result-message {\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: ': ';\n white-space: pre;\n }\n }\n }\n\n @media (max-width: 600px) {\n .ListItem {\n margin: 0 -0.625rem;\n }\n }\n\n .search-section {\n padding: 0 1rem 0.5rem;\n\n .section-heading {\n color: var(--color-text-secondary);\n font-size: .9375rem;\n font-weight: 500;\n margin-bottom: 0 !important;\n padding-top: .875rem;\n\n .Link {\n float: right;\n color: var(--color-links);\n font-weight: 400;\n margin-right: 1rem;\n\n &:focus,\n &:hover {\n text-decoration: underline;\n }\n }\n\n &[dir=rtl],\n &[dir=auto] {\n .Link {\n float: left;\n margin-left: 1rem;\n margin-right: 0;\n }\n }\n }\n\n .Loading {\n height: 4.5rem;\n margin-bottom: 0.5rem;\n }\n }\n\n .chat-selection {\n padding-top: .5rem;\n display: flex;\n flex-shrink: 0;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: flex-end;\n box-shadow: inset 0 -1px 0 0 var(--color-borders);\n background-color: var(--color-background);\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n overflow-y: hidden;\n\n scrollbar-color: rgba(0, 0, 0, 0);\n\n > .PickerSelectedItem {\n flex: 0 0 auto;\n\n &:last-child {\n margin-right: auto;\n }\n }\n\n &[dir=rtl] {\n > .PickerSelectedItem:last-child {\n margin-left: auto;\n margin-right: 0;\n }\n }\n }\n\n .NothingFound {\n height: 100%;\n }\n\n [dir=rtl] {\n .message-date {\n padding-left: 0;\n padding-right: 1rem;\n }\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform .25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content, #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: '';\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import '../../styles/mixins';\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform .15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input, i, &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n",".ShowMoreButton {\n color: var(--text-color) !important;\n display: flex;\n align-items: center;\n text-align: left;\n text-transform: none;\n padding-left: .75rem !important;\n opacity: 1 !important;\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n\n .Spinner {\n top: 0.4375rem;\n }\n}\n",".SettingsFoldersChatsPicker {\n height: calc(100% - var(--header-height));\n\n .picker-header {\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n .max-items-reached {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n color: var(--color-text-secondary);\n }\n }\n\n .picker-list {\n padding: 0 0.5rem 0.5rem;\n\n .no-results {\n height: 10rem;\n }\n }\n\n .ListItem.picker-list-item {\n &.chat-type-item .ListItem-button {\n padding: 0.875rem 0.75rem;\n }\n\n &.chat-item .ListItem-button {\n padding: 0.5rem 0.75rem;\n }\n\n .Checkbox {\n margin-left: auto;\n padding-left: 3.25rem;\n }\n\n .chat-type {\n font-size: 1rem;\n font-weight: 400;\n margin: 0;\n }\n\n &[dir=rtl] {\n .Checkbox {\n margin-left: 0;\n margin-right: auto;\n padding-left: 0;\n padding-right: 3.25rem;\n }\n }\n }\n\n .settings-item-header {\n margin-left: 0.75rem;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n }\n\n .picker-list-divider {\n margin: 0.5rem -0.5rem 0;\n border-bottom: 1px solid var(--color-borders);\n }\n}\n",".settings-folders-recommended-item {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.settings-folders-list-item {\n .ChatInfo {\n display: flex;\n align-items: center;\n\n .Avatar {\n margin-left: -0.25rem;\n margin-right: 1.5rem;\n }\n\n .title {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n h3 {\n font-size: 1rem;\n font-weight: 500;\n line-height: 1.3125;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: left;\n }\n }\n\n .status {\n display: none;\n }\n\n &[dir=rtl] {\n .title h3{\n text-align: right;\n }\n }\n }\n\n .ListItem-button {\n i {\n opacity: 0.9;\n }\n }\n\n &.color-primary .ListItem-button {\n color: var(--color-primary);\n\n i {\n opacity: 1;\n color: inherit;\n }\n }\n\n &[dir=rtl] {\n .Avatar {\n margin-left: 1.5rem;\n margin-right: -0.25rem;\n }\n }\n}\n\n.settings-item .ShowMoreButton {\n margin: 0 -1rem;\n width: calc(100% + 2rem);\n padding-left: 1rem !important;\n}\n",".SettingsStickerSet {\n .settings-item &.ListItem {\n margin-bottom: .5rem;\n }\n\n .StickerButton,\n .Button {\n width: 3rem;\n height: 3rem;\n margin: 0 .5rem 0 0;\n padding: 0;\n flex: 0 0 3rem;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n\n .multiline-menu-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n &[dir=rtl] {\n .StickerButton,\n .Button {\n margin: 0 0 0 .5rem;\n }\n }\n}\n",".WallpaperTile {\n height: 0;\n padding-bottom: 100%;\n cursor: pointer;\n position: relative;\n\n .media-inner,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n\n .media-inner {\n overflow: hidden;\n transform: scale(1);\n transition: transform .15s ease;\n\n img, canvas {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n\n &::after {\n content: \"\";\n display: block;\n border: 2px solid var(--color-primary);\n opacity: 0;\n transition: opacity .15s ease;\n }\n\n &.selected {\n &::after {\n opacity: 1;\n }\n\n .media-inner {\n transform: scale(0.9);\n }\n }\n\n .spinner-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n",".SettingsGeneralBackground {\n .settings-wallpapers {\n display: grid;\n padding: .5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: .25rem;\n }\n\n .Loading {\n height: auto !important;\n margin-top: 5rem;\n }\n}\n",".SettingsGeneralBackgroundColor {\n &:not(.is-dragging) .handle {\n transition: transform 300ms ease;\n }\n\n .color-picker, .hue-picker {\n position: relative;\n }\n\n .color-picker {\n margin-top: 1rem;\n height: 12rem;\n }\n\n .hue-picker {\n margin: 2rem 0;\n height: 0.5rem;\n }\n\n canvas {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n }\n\n .handle {\n position: absolute;\n top: -0.75rem;\n left: -0.75rem;\n width: 1.5rem;\n height: 1.5rem;\n border: 0.125rem solid var(--color-white);\n border-radius: 0.75rem;\n cursor: grab;\n }\n\n .hue-picker .handle {\n top: -0.5rem;\n }\n\n .tools {\n margin-bottom: 0.625rem;\n display: flex;\n\n .input-group {\n margin-bottom: 0;\n\n &[dir=rtl] {\n label {\n transform: scale(0.75) translate(1.25rem, -2.25rem);\n }\n }\n }\n\n .input-group:first-child {\n margin-right: 0.5rem;\n }\n\n .input-group:last-child {\n margin-left: 0.5rem;\n }\n }\n\n .predefined-colors {\n display: grid;\n padding: .5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: .25rem;\n\n div {\n cursor: pointer;\n box-shadow: inset 0 0 0 0 var(--color-background);\n transition: box-shadow 300ms ease;\n\n &.active {\n border: 0.125rem solid var(--color-primary);\n box-shadow: inset 0 0 0 0.3125rem var(--color-background);\n }\n\n // A hack to make a square\n &:before {\n display: block;\n content: \"\";\n width: 100%;\n padding-top: 100%;\n pointer-events: none;\n }\n }\n }\n}\n","#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n","@import '../../../styles/mixins';\n\n#Settings {\n height: 100%;\n\n > div {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .left-header {\n padding-right: .8125rem;\n }\n}\n\n.settings-main-header {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n align-items: center;\n}\n\n.settings-more-menu {\n .bubble {\n width: auto;\n\n .MenuItem button {\n padding-left: 1rem !important;\n padding-right: 2rem !important;\n }\n }\n}\n\n.settings-content {\n background: var(--color-background);\n height: calc(100% - var(--header-height));\n\n overflow-y: auto;\n @include overflow-y-overlay();\n\n &.infinite-scroll {\n display: flex;\n flex-direction: column;\n\n & > .custom-scroll {\n flex: 1 1 auto;\n height: auto;\n }\n }\n\n #monkey {\n margin-top: .5rem;\n margin-bottom: 1rem;\n }\n\n .AnimatedEmoji {\n margin-top: .5rem;\n margin-bottom: 1.5rem;\n }\n}\n\n.settings-content-header {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 0 1.5rem 1rem;\n text-align: center;\n\n .input-group {\n width: 100%;\n }\n}\n\n.settings-content-icon {\n width: 5rem;\n height: 5rem;\n margin-bottom: 2.5rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n}\n\n.settings-main-menu {\n padding: 0 0.5rem .75rem;\n\n > .ChatExtra {\n padding: 0 .5rem .3125rem;\n margin: 0 -.5rem .625rem;\n box-shadow: inset 0 -.0625rem 0 0 var(--color-background-secondary-accent);\n border-bottom: .625rem solid var(--color-background-secondary);\n\n .ListItem.narrow {\n margin-bottom: .25rem;\n }\n }\n}\n\n.settings-item {\n border-top: 1px solid var(--color-borders);\n padding: 1.5rem 1.5rem 1rem;\n\n &.no-border {\n border-top: none;\n }\n\n &-header {\n font-size: 1rem;\n color: var(--color-text-secondary);\n margin-bottom: 2rem;\n position: relative;\n\n &[dir=rtl] {\n text-align: right;\n }\n }\n\n &-slider {\n margin-top: 2rem;\n }\n\n &-description {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin-top: -0.5rem;\n margin-bottom: 1.5rem;\n\n .settings-content.two-fa & {\n font-size: 1rem;\n }\n\n &[dir=rtl] {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n\n &-description-larger {\n font-size: 1rem;\n line-height: 1.3125rem;\n color: var(--color-text-secondary);\n margin-top: 2rem;\n margin-bottom: 0.75rem;\n\n &[dir=rtl] {\n text-align: right;\n }\n }\n\n .ListItem {\n margin: 0 -1rem 1rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-menu-item {\n white-space: initial;\n\n &.full-size {\n width: 100%;\n }\n\n .date {\n float: right;\n font-size: 0.75rem;\n margin-left: 1rem;\n color: var(--color-text-secondary);\n }\n\n .title, .subtitle {\n display: block;\n text-align: left;\n }\n\n .title {\n line-height: 1.25rem;\n }\n\n .subtitle {\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: var(--color-text-secondary);\n\n & + .subtitle {\n margin-top: -0.25rem;\n }\n\n &.black {\n color: var(--color-text);\n }\n\n &.tight {\n line-height: 1.3125rem;\n margin-bottom: .1875rem;\n }\n }\n }\n\n &.destructive {\n .ListItem-button {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n }\n\n &.blocked-list-item {\n margin-bottom: 0.5rem;\n\n .ListItem-button {\n align-items: center;\n text-align: left;\n padding: 0.5rem;\n }\n\n .Avatar {\n width: 3rem;\n height: 3rem;\n margin-right: 1rem;\n }\n\n .contact-name {\n font-size: 1rem;\n line-height: 1rem;\n margin-bottom: 0.25rem;\n font-weight: 500;\n }\n\n .contact-phone {\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n &[dir=rtl] {\n .multiline-menu-item {\n .title, .subtitle {\n text-align: right;\n }\n\n .date {\n float: left;\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n }\n\n .RangeSlider {\n margin-bottom: 1.0625rem;\n }\n\n .Checkbox, .radio-group {\n margin: 0 -1rem 0.5rem;\n }\n\n .radio-group {\n .Radio:last-child {\n margin-bottom: 0;\n }\n }\n\n .Radio + .Radio, .Checkbox + .Checkbox {\n margin-top: 2rem;\n }\n}\n\n.settings-fab-wrapper {\n height: calc(100% - var(--header-height));\n position: relative;\n overflow: hidden;\n\n .settings-content {\n height: 100%;\n }\n\n .FloatingActionButton {\n right: 1.5rem;\n }\n}\n\n.settings-edit-profile {\n padding: 0 1.5rem;\n}\n\n.username-link {\n color: var(--color-links);\n}\n\n.settings-quick-reaction {\n .Radio-main .label {\n display: flex;\n }\n\n .ReactionStaticEmoji {\n margin-inline-end: 1rem;\n width: 1.5rem\n }\n}\n\n.SettingsDefaultReaction {\n .ReactionStaticEmoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-end: 2rem;\n }\n\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".NewChat {\n height: 100%;\n overflow: hidden;\n position: relative;\n\n &-inner {\n height: calc(100% - var(--header-height));\n overflow: hidden;\n\n &.step-2 {\n padding: 0 1.25rem;\n display: flex;\n flex-direction: column;\n\n .note, .error {\n font-size: 0.875rem;\n line-height: 1.25rem;\n margin: 1.5rem 0.25rem;\n }\n\n .error {\n color: var(--color-error);\n }\n\n .note {\n margin-top: -0.5625rem;\n color: var(--color-text-secondary);\n }\n\n .chat-members-heading {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1rem 0.25rem;\n }\n\n .chat-members-list {\n margin: 0 -1.25rem;\n padding: 0 1rem 1rem;\n\n overflow-x: hidden;\n flex-grow: 1;\n }\n }\n }\n}\n",".ArchivedChats {\n height: 100%;\n overflow: hidden;\n\n .chat-list {\n height: calc(100% - var(--header-height));\n }\n}\n",".ReactionSelectorReaction {\n margin-left: 0.5rem;\n position: relative;\n min-width: 2rem;\n min-height: 2rem;\n\n &:first-child {\n margin-left: 0;\n }\n\n &__static {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n background: url('../../../assets/reaction-thumbs.png') no-repeat;\n background-size: auto 100%;\n }\n\n .AnimatedSticker {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n",".ReactionSelector {\n position: absolute;\n height: 3rem;\n background: var(--color-background);\n min-width: 3rem;\n max-width: calc(100% + 5rem);\n z-index: 100;\n border-radius: 3rem;\n filter: drop-shadow(0 0.25rem 0.125rem var(--color-default-shadow));\n right: -3rem;\n top: -3.5rem;\n\n &__bubble-big {\n position: absolute;\n display: block;\n content: \"\";\n right: 1.5rem;\n bottom: -0.5rem;\n width: 1rem;\n height: 1rem;\n border-radius: 50%;\n background: var(--color-background);\n z-index: -1;\n }\n\n &__bubble-small {\n position: absolute;\n display: block;\n content: \"\";\n right: 1.25rem;\n bottom: -1.25rem;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--color-background);\n }\n\n body.is-safari & {\n filter: none;\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n body.is-safari &__bubble-small,\n body.is-safari &__bubble-big {\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n &__items-wrapper {\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: 3rem;\n }\n\n &__items {\n padding: 0 1rem;\n width: 100%;\n height: 100%;\n overflow-x: auto;\n overflow: overlay;\n overflow-y: hidden;\n display: flex;\n cursor: pointer;\n align-items: center;\n border-radius: 3rem;\n }\n}\n",".MessageContextMenu {\n position: absolute;\n font-size: 1rem;\n\n .scrollable-content {\n overflow: auto;\n overflow: overlay;\n padding: 0.5rem 0;\n overscroll-behavior: contain;\n }\n\n .bubble {\n transition: opacity .15s cubic-bezier(0.2, 0, 0.2, 1), transform .15s cubic-bezier(0.2, 0, 0.2, 1) !important;\n transform: scale(0.7);\n overflow: initial;\n padding: 0;\n }\n\n &.with-reactions .bubble {\n margin-top: 3.5rem;\n }\n\n .backdrop {\n touch-action: none;\n }\n\n .avatars {\n display: flex;\n align-self: center;\n margin-left: auto;\n padding-left: 1rem;\n\n .Avatar {\n border: .0625rem solid var(--color-background);\n margin-right: 0;\n box-sizing: content-box;\n\n &:not(:first-child) {\n margin-left: -0.1875rem;\n }\n }\n }\n}\n",".StickerSetModal {\n .modal-dialog {\n width: 26.25rem;\n max-width: 100%;\n }\n\n @media (max-width: 600px) {\n .modal-dialog {\n width: 18.875rem;\n }\n }\n\n .modal-header {\n padding: 0.5rem 1rem;\n }\n\n .modal-content {\n text-align: center;\n padding: 0;\n }\n\n .stickers {\n position: relative;\n width: 100%;\n height: 19rem;\n max-height: 50vh;\n overflow-y: auto;\n padding: 0 0.25rem;\n text-align: left;\n }\n\n .button-wrapper {\n padding: 0.5rem 0;\n border-top: 1px solid var(--color-borders);\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n button {\n display: inline-block;\n }\n }\n\n .Loading {\n width: 100%;\n height: 22.8125rem;\n max-height: calc(50vh + 3.8125rem);\n }\n}\n\n",".HeaderMenuContainer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n z-index: var(--z-header-menu);\n\n .Menu {\n position: absolute;\n font-size: 1rem;\n\n .backdrop {\n z-index: var(--z-header-menu-backdrop);\n }\n\n .bubble {\n z-index: var(--z-header-menu);\n --offset-y: calc(100% + 1rem);\n }\n }\n}\n","#MobileSearch > .header {\n position: absolute;\n top: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding: 0 0.5rem 0 0.25rem;\n\n @supports (padding-left: env(safe-area-inset-left)) {\n padding-left: #{\"max(0.25rem, env(safe-area-inset-left))\"};\n padding-right: #{\"max(0.5rem, env(safe-area-inset-right))\"};\n }\n\n > .SearchInput {\n margin-left: 0.25rem;\n flex: 1;\n }\n}\n\n#MobileSearch > .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: 1rem;\n padding-right: 0.5rem;\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n padding-left: #{\"max(1rem, env(safe-area-inset-left))\"};\n padding-right: #{\"max(0.5rem, env(safe-area-inset-right))\"};\n\n body:not(.keyboard-visible) & {\n padding-bottom: env(safe-area-inset-bottom);\n height: calc(3.5rem + env(safe-area-inset-bottom));\n }\n }\n\n > .counter {\n flex: 1;\n color: var(--color-text-secondary);\n }\n}\n\n#MobileSearch:not(.active) {\n .header, .footer {\n // `display: none` will prevent synchronous focus on iOS\n transform: translateX(-999rem);\n }\n}\n",".MentionTooltip {\n width: calc(100% - 4rem);\n max-width: 20rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .info {\n display: flex;\n }\n\n .title {\n margin-inline-end: .625rem;\n max-width: 70%;\n }\n\n .handle {\n font-size: 1rem;\n }\n\n &[dir=rtl] {\n .status {\n width: auto;\n }\n }\n }\n\n .ChatInfo {\n .title h3 {\n line-height: 1.25;\n }\n\n .Avatar {\n margin-right: 0.7em;\n }\n\n .handle {\n &::before {\n content: '@';\n }\n }\n\n .user-status {\n display: none !important;\n }\n }\n}\n",".AttachmentModal {\n --border-radius-default: 0.625rem;\n\n .modal-dialog {\n max-width: 26.25rem;\n @media(max-width: 600px) {\n max-height: 100%;\n padding-bottom: 1.5rem;\n }\n }\n\n .modal-content {\n padding: .5rem 1.25rem 1.875rem;\n max-height: calc(100vh - 3.25rem);\n @media(max-width: 600px) {\n padding-bottom: .25rem;\n }\n }\n\n .media-wrapper {\n max-height: 26rem;\n overflow: auto;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 1.5rem;\n\n video,\n img {\n flex: 1;\n width: calc(50% - 0.15rem);\n height: 12rem;\n margin-bottom: 0.3rem;\n border-radius: var(--border-radius-default);\n object-fit: cover;\n\n &:only-child {\n height: auto;\n max-height: 25rem;\n margin-bottom: 0;\n }\n\n &:nth-child(even) {\n margin-left: 0.3rem;\n }\n }\n }\n\n .document-wrapper {\n max-height: 25rem;\n overflow: auto;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n margin: .75rem 0 1.75rem;\n\n .File:not(:last-child) {\n margin-bottom: 1.5rem;\n }\n\n .file-icon {\n cursor: default !important;\n }\n }\n\n .attachment-caption-wrapper {\n position: relative;\n\n .form-control {\n background: var(--color-background);\n }\n\n .MentionTooltip {\n right: 0 !important;\n z-index: 0;\n }\n }\n\n .drop-target {\n position: relative;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: var(--border-radius-default);\n pointer-events: none;\n\n opacity: 0;\n transition: 250ms opacity;\n z-index: 1;\n }\n\n &::before {\n background-image: var(--drag-target-border-hovered);\n background-color: var(--color-background);\n }\n\n &::after {\n content: attr(data-attach-description);\n display: flex;\n justify-content: center;\n align-items: center;\n color: var(--color-primary);\n }\n }\n\n &.hovered {\n .drop-target::before {\n opacity: .95;\n }\n\n .drop-target::after {\n opacity: 1;\n }\n\n .attachment-caption-wrapper,\n .document-wrapper,\n .media-wrapper {\n pointer-events: none;\n }\n\n .document-wrapper,\n .media-wrapper {\n border-radius: var(--border-radius-default);\n }\n }\n}\n",".PollModal {\n .modal-dialog {\n max-width: 26.25rem;\n max-height: calc(100vh - 5rem);\n }\n\n .modal-content {\n padding: .5rem 1.25rem 1.875rem;\n min-height: 4.875rem;\n }\n\n .modal-header-condensed {\n margin-bottom: 1rem;\n }\n\n .options-header {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1.5rem 0.25rem;\n }\n\n .options-list {\n margin: 1rem -0.75rem -0.5rem;\n padding: 0 0.75rem;\n border-top: 1px solid var(--color-chat-hover);\n max-height: 20rem;\n overflow: auto;\n\n &.overflown {\n padding: 0 0.4rem 0.5rem 0.75rem;\n }\n\n @media (max-width: 600px) {\n overflow: hidden;\n max-height: none;\n\n &, &.overflown {\n padding: 0 0.75rem;\n }\n }\n }\n\n .option-wrapper {\n position: relative;\n\n .form-control {\n padding-right: 3rem;\n }\n\n .option-remove-button {\n position: absolute;\n top: 0.3125rem;\n right: 0.3125rem;\n }\n }\n\n .quiz-mode {\n margin-top: 1.5rem;\n\n .options-header {\n margin-bottom: 0.5rem;\n }\n\n .note {\n margin-top: 0.5rem;\n }\n }\n\n .note {\n font-size: smaller;\n color: var(--color-text-secondary)\n }\n\n .error {\n font-size: smaller;\n color: var(--color-error);\n margin: -1rem 0 1rem .25rem;\n }\n\n .input-group:last-child {\n margin-bottom: 0.5rem;\n }\n}\n",".EmojiButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n margin: 0.125rem;\n border-radius: var(--border-radius-messages-small);\n cursor: pointer;\n font-size: 1.75rem;\n line-height: 2.5rem;\n background-color: transparent;\n transition: background-color .15s ease;\n\n .mac-os-fix & {\n line-height: inherit;\n }\n\n &.focus,\n &:hover {\n background-color: var(--color-background-selected);\n }\n\n & > img {\n width: 2rem;\n height: 2rem;\n }\n}\n",".EmojiPicker {\n height: 100%;\n\n &-main {\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n\n .symbol-set-container {\n display: flex;\n flex-wrap: wrap;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: space-around;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n @media (max-width: 600px) {\n overflow-x: auto;\n overflow-y: hidden;\n display: block;\n white-space: nowrap;\n padding: 0.4375rem 0;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n .symbol-set-button {\n display: inline-flex;\n vertical-align: middle;\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 0.1px;\n height: 1rem;\n }\n }\n }\n}\n",".StickerPicker {\n height: 100%;\n\n &-main {\n position: relative;\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n padding: 0.125rem 0;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 0.1px;\n height: 1rem;\n }\n\n\n .sticker-set-button {\n display: inline-flex;\n vertical-align: middle;\n align-items: center;\n justify-content: center;\n\n &.StickerButton {\n background-size: 2rem;\n\n video, img, .AnimatedSticker {\n top: 0.375rem;\n left: 0.375rem;\n width: 2rem;\n height: 2rem;\n }\n }\n\n .sticker-set-cover {\n width: 2rem;\n height: 2rem;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n video, img, .AnimatedSticker {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n }\n }\n }\n\n .symbol-set-container {\n width: 25rem;\n line-height: 0;\n\n @media (max-width: 600px) {\n width: 100%;\n }\n }\n\n .sticker-set-button {\n width: 2.75rem !important;\n height: 2.75rem;\n margin: 0 0.25rem;\n border-radius: var(--border-radius-messages-small);\n }\n}\n",".GifButton {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 6.25rem;\n background-color: transparent;\n cursor: pointer;\n overflow: hidden;\n position: relative;\n\n &:last-child {\n margin-bottom: 1rem;\n }\n\n &.vertical {\n grid-column-end: span 1;\n }\n\n &.horizontal {\n grid-column-end: span 2;\n }\n\n .thumbnail {\n width: 100%;\n height: 100%;\n background: transparent no-repeat center;\n background-size: cover !important;\n }\n\n .preview, video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n .Spinner {\n position: absolute;\n pointer-events: none;\n }\n}\n",".GifPicker {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n height: 100%;\n overflow-y: auto;\n padding: 0.25rem;\n\n @supports (overflow: overlay) {\n overflow-y: overlay;\n }\n\n .Loading, .picker-disabled {\n grid-column: 1 / -1;\n height: var(--menu-height);\n }\n}\n","@import '../../../styles/mixins';\n\n.SymbolMenu {\n &.mobile-menu {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--color-background);\n transform: translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0);\n z-index: 1;\n\n transition: transform var(--layer-transition);\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n padding-right: env(safe-area-inset-right);\n padding-bottom: env(safe-area-inset-bottom);\n padding-left: env(safe-area-inset-left);\n transform: translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height) + env(safe-area-inset-bottom)), 0);\n }\n\n &.open {\n transform: translate3d(0, 0, 0);\n\n body.is-media-viewer-open & {\n transform: translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0);\n }\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n &:not(.middle-column-open) {\n transform: translate3d(100vw, 0, 0) !important;\n }\n }\n\n &-main {\n height: var(--symbol-menu-height);\n max-height: calc(100vh - var(--symbol-menu-footer-height));\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n max-height: calc(100vh - var(--symbol-menu-footer-height) - env(safe-area-inset-bottom));\n }\n }\n\n &-footer {\n height: var(--symbol-menu-footer-height);\n border-top: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 2px var(--color-default-shadow);\n position: relative;\n\n .Button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 .25rem;\n padding: 0;\n\n &.activated {\n pointer-events: none;\n }\n\n &.symbol-tab-button {\n margin: 0 0.75rem;\n }\n\n &.symbol-search-button {\n position: absolute;\n left: 0.25rem;\n }\n\n &.symbol-delete-button {\n position: absolute;\n right: 0.25rem;\n }\n }\n }\n\n .Transition.slide {\n height: 100%;\n\n .Loading {\n height: var(--symbol-menu-height);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n\n .Button.bot-commands ~ &, .Button.send-as-button ~ & {\n .is-pointer-env & > .backdrop {\n left: 3rem;\n width: 3.25rem;\n }\n }\n\n .bubble {\n width: calc(var(--symbol-menu-width) + .25rem); // Reserve width for scrollbar\n padding: 0;\n overflow: hidden;\n\n @supports (overflow: overlay) {\n width: var(--symbol-menu-width);\n }\n }\n\n .picker-disabled {\n height: var(--symbol-menu-height);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .symbol-close-button {\n display: none;\n position: absolute;\n right: .25rem;\n top: .25rem;\n\n @supports (right: env(safe-area-inset-right)) {\n right: #{\"max(.25rem, env(safe-area-inset-right))\"};\n top: #{\"max(.25rem, env(safe-area-inset-top))\"};\n }\n }\n\n @media (orientation: landscape) {\n .symbol-close-button {\n display: block;\n }\n }\n}\n\n.symbol-set {\n margin-bottom: 1rem;\n\n &-name {\n font-size: 1rem;\n line-height: 1.6875rem;\n font-weight: 500;\n margin: 0;\n padding-left: 0.5rem;\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n &-container {\n text-align: initial;\n }\n\n &-button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n }\n\n @include while-transition() {\n overflow: hidden;\n }\n\n .symbol-set-container {\n &:not(.shown) {\n display: block;\n }\n\n &.closing {\n transition: none;\n }\n }\n}\n",".AttachMenu {\n position: relative;\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n}\n",".BotCommand {\n margin: 0 !important;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .multiline-item {\n padding: 0 1rem;\n\n .subtitle {\n padding-top: .25rem;\n line-height: 1.3125;\n }\n }\n\n &.with-avatar {\n .multiline-item {\n padding: 0;\n display: flex;\n }\n\n .content-inner {\n flex: 1;\n }\n }\n}\n",".BotCommandTooltip {\n width: calc(100% - 4rem);\n max-width: 26rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n}\n",".BotCommandMenu {\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n",".StickerTooltip {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(5rem, 1fr));\n grid-auto-rows: auto;\n place-items: center;\n\n &.hidden {\n display: none;\n }\n}\n",".CustomSendMenu {\n position: relative;\n bottom: 3.5rem;\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n\n .bubble {\n width: 16rem;\n }\n}\n",".EmojiTooltip {\n display: flex;\n padding-left: .25rem;\n\n overflow-x: auto;\n @supports (overflow-x: overlay) {\n overflow-x: overlay;\n }\n overflow-y: hidden;\n\n .EmojiButton {\n flex: 0 0 2.5rem\n }\n}\n",".BaseResult {\n &.chat-item-clickable > .ListItem-button {\n padding-left: 1.25rem !important;\n padding-right: 1.25rem !important;\n\n .title {\n display: block;\n text-overflow: ellipsis;\n }\n }\n\n .thumb {\n background-color: var(--color-background-secondary);\n flex: 0 0 3rem;\n width: 3rem;\n height: 3rem;\n line-height: 3rem;\n border-radius: var(--border-radius-default-tiny);\n display: inline-flex;\n align-content: center;\n justify-content: center;\n margin-inline-end: .5rem;\n overflow: hidden;\n font-size: 1.5rem;\n\n img:not(.emoji) {\n width: 100%;\n object-fit: cover;\n }\n\n img.emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin: .75rem 0 0;\n }\n }\n\n .content-inner {\n min-width: 0;\n }\n\n .title {\n font-weight: 500;\n text-align: left;\n unicode-bidi: plaintext;\n }\n\n .description {\n white-space: normal;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n unicode-bidi: plaintext;\n }\n &[dir=rtl] .title,\n &[dir=rtl] .description {\n text-align: right;\n }\n}\n",".MediaResult {\n height: 0;\n padding-bottom: 100%;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n\n img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n",".InlineBotTooltip {\n .switch-pm .title {\n margin: 0 auto;\n font-weight: 500;\n }\n\n --border-radius-default: 0;\n\n &.gallery {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-gap: 1px;\n padding: 0;\n\n @media (max-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n .switch-pm {\n grid-column: 1 / -1;\n .ListItem-button {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n .GifButton {\n grid-column-end: initial;\n }\n\n .StickerButton {\n width: initial;\n height: 0;\n margin: 0;\n padding-bottom: 100%;\n border-radius: 0;\n\n .AnimatedSticker, img, canvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important;\n\n @media (min-width: 600px) {\n top: .25rem;\n left: .25rem;\n width: calc(100% - .5rem) !important;\n height: calc(100% - .5rem) !important;\n }\n }\n }\n }\n}\n",".SendAsMenu {\n .send-as-title {\n font-weight: 500;\n line-height: 1.25rem;\n word-break: break-word;\n margin-inline-start: 1rem;\n margin-block: 0.5rem;\n }\n\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n z-index: 2;\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n\n.SendAsItem {\n margin: 0 !important;\n $border-size: 2px;\n\n .Avatar.selected {\n margin-right: 0.75rem;\n position: relative;\n width: calc(2.125rem - #{$border-size * 2});\n height: calc(2.125rem - #{$border-size * 2});\n\n &::before {\n display: block;\n content: \"\";\n position: absolute;\n top: #{-$border-size * 2};\n left: #{-$border-size * 2};\n border: $border-size solid var(--color-primary);\n width: calc(100% + #{$border-size * 4});\n height: calc(100% + #{$border-size * 4});\n border-radius: 50%;\n }\n }\n\n .ListItem-button {\n padding: 0.5625rem 1rem !important;\n border-radius: 0;\n align-items: center;\n }\n\n .info {\n margin-inline-start: 0.5rem;\n }\n\n\n .subtitle {\n font-size: .9375rem;\n color: var(--color-text-secondary);\n line-height: 1.3125;\n }\n}\n",".RightSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n text-align: initial;\n }\n}\n",".StickerSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n }\n\n .sticker-set {\n margin-bottom: 1rem;\n\n &-header {\n display: flex;\n justify-content: space-between;\n padding: 0.5rem;\n\n .title-wrapper {\n overflow: hidden;\n }\n\n .title {\n font-size: 1rem;\n line-height: 1.6875rem;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .count {\n color: var(--color-text-secondary);\n margin: 0;\n }\n\n .Button {\n flex-shrink: 0;\n margin-left: 1rem;\n\n &.is-added {\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n\n &:hover, &:active {\n background: var(--color-item-active) !important;\n }\n }\n }\n }\n\n &-main {\n display: flex;\n flex-wrap: nowrap;\n overflow: hidden;\n }\n\n &[dir=rtl] {\n .title-wrapper {\n text-align: right;\n }\n\n .Button {\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n\n .StickerButton {\n margin: 0.125rem;\n }\n}\n",".GifSearch {\n height: 100%;\n padding: 0.25rem;\n\n .gif-container {\n height: 100%;\n overflow: auto;\n\n &.grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n }\n }\n\n .helper-text {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n",".PollAnswerResults {\n border-bottom: 1px solid var(--color-borders);\n padding: 0 .5rem .625rem;\n display: flex;\n flex-direction: column-reverse;\n\n .answer-head {\n display: flex;\n align-items: center;\n font-size: .9375rem;\n line-height: 1.3125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n padding: 1rem .75rem .5rem 1rem;\n position: sticky;\n top: 0;\n background: var(--color-background);\n\n @media (max-width: 600px) {\n padding: .5rem .25rem .5rem .5rem;\n }\n }\n\n .answer-percent {\n margin-left: auto;\n\n &[dir=auto] {\n margin-left: 0;\n margin-right: auto;\n }\n }\n\n .poll-voters {\n padding: 0 .75rem;\n position: relative;\n min-height: 3rem;\n\n @media (max-width: 600px) {\n padding: 0 .25rem;\n }\n\n .Spinner {\n --spinner-size: 1.25rem;\n }\n }\n\n .chat-item-clickable {\n .ChatInfo .Avatar.size-tiny {\n margin-right: 1.75rem;\n }\n\n &[dir=rtl] {\n .ChatInfo .Avatar.size-tiny {\n margin-left: 1.75rem;\n margin-right: 0;\n }\n }\n }\n\n .ShowMoreButton {\n margin: .25rem 0 0 -0.5rem;\n width: calc(100% + 1rem);\n\n &[dir=rtl] {\n .icon-down {\n margin-left: 2rem;\n margin-right: 0;\n }\n }\n }\n\n .icon-down {\n vertical-align: middle;\n margin-right: 2rem;\n font-size: 1.5rem;\n }\n}\n",".PollResults {\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n\n > .Loading {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: rgba(white, 0.75);\n }\n\n .poll-question {\n padding: .75rem 1.5rem;\n flex-shrink: 0;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n padding: 0 1rem;\n }\n }\n\n .poll-results-list {\n border-top: 1px solid var(--color-borders);\n flex-grow: 1;\n overflow: auto;\n }\n}\n",".Management {\n position: relative;\n height: 100%;\n\n & > .custom-scroll {\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n }\n\n .section {\n padding: 1rem 1.5rem;\n border-top: 1px solid var(--color-borders);\n\n &.wide {\n padding: 1.5rem;\n }\n\n &:first-of-type {\n border-top: none;\n padding-top: 1rem;\n }\n\n &.no-border {\n border-top: none;\n }\n\n > .ChatInfo {\n margin: 0 0 2rem !important;\n\n .title h3 {\n margin-bottom: 0;\n }\n }\n\n .section-icon {\n width: 8.75rem;\n height: 8.75rem;\n margin: 0 auto 2rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n }\n\n .ListItem {\n margin: 0 -0.75rem;\n\n .Reaction {\n display: flex;\n align-items: center;\n }\n\n .ReactionStaticEmoji {\n width: 1.5rem;\n margin-right: 1rem;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-item .subtitle {\n line-height: 1.25rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:not(.picker-list-item) .Checkbox {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n\n &.narrow {\n .Checkbox {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n }\n\n &.exceptions-member {\n .ChatInfo .status {\n white-space: pre-wrap;\n }\n }\n }\n\n .section-heading {\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-help {\n color: var(--color-text-secondary);\n line-height: 1.375rem;\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-info {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n textarea.form-control {\n height: auto;\n }\n\n .group-link {\n color: var(--color-text);\n }\n\n .radio-group {\n margin-top: 2rem;\n\n .Radio {\n padding-left: 3.5rem;\n margin-bottom: 2rem;\n\n &:last-child {\n margin-bottom: 0.625rem;\n }\n }\n\n .Radio-main {\n &::before {\n left: 0.125rem;\n top: 0.25rem;\n transform: none;\n }\n\n &::after {\n left: 0.4375rem;\n top: 0.5625rem;\n transform: none;\n }\n }\n }\n\n &__filter {\n padding: 0 1rem 0.25rem 0.75rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n flex-flow: row wrap;\n flex-shrink: 0;\n\n overflow-y: auto;\n max-height: 20rem;\n\n .input-group {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n }\n\n .form-control {\n height: 2rem;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n }\n\n .Spinner {\n margin: 2rem auto;\n }\n}\n\n.ManageGroupMembers {\n padding: 0.5rem 1rem;\n}\n\n.ManageInvites {\n .primary-link {\n position: relative;\n }\n\n .primary-link-input {\n cursor: pointer;\n margin-bottom: 1rem;\n padding-right: 3rem;\n }\n\n .primary-link-more-menu {\n position: absolute;\n right: 0.5rem;\n top: 50%;\n transform: translate(0, -50%);\n z-index: 1;\n }\n\n .create-link {\n margin-bottom: 0.5rem;\n }\n\n .invite-title {\n white-space: nowrap;\n }\n}\n\n.ManageInvite {\n .link-name {\n margin-bottom: 1rem;\n }\n\n .expire-limit {\n margin-top: 1rem;\n }\n\n .usage-limit {\n margin-top: 1rem;\n\n -moz-appearance: textfield;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n }\n\n .custom-scroll {\n padding-bottom: 4rem;\n }\n}\n\n.ManageInviteInfo {\n .copy-link {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .link-title {\n text-align: center;\n }\n}\n\n.ManageJoinRequests {\n .bulk-actions {\n display: flex;\n justify-content: space-around;\n }\n\n .bulk-action-button {\n width: auto;\n height: auto;\n }\n}\n\n.ManageInvite,\n.ManageInvites {\n .hint {\n font-size: 0.875rem;\n margin-bottom: 0;\n margin-top: 0.5rem;\n }\n}\n",".JoinRequest {\n display: flex;\n flex-direction: column;\n padding: 1rem 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--color-borders);\n }\n\n &__top {\n display: flex;\n cursor: pointer;\n padding: 0.5rem;\n border-radius: 0.5rem;\n\n &:hover {\n background-color: var(--color-chat-hover);\n }\n }\n\n &__user {\n display: flex;\n flex-grow: 1;\n min-width: 0;\n overflow: hidden;\n }\n\n &__user-info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n margin-left: 1rem;\n }\n\n &__user-subtitle {\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__user-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__date {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n margin-left: 1rem;\n white-space: nowrap;\n }\n\n &__buttons {\n display: flex;\n justify-content: space-evenly;\n margin-top: 1rem;\n gap: 0.5rem;\n }\n\n &__button {\n width: auto;\n height: auto;\n }\n}\n",".ShippingInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.9rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.1rem;\n }\n}",".Shipping {\n padding: 0.5rem 1rem;\n\n form {\n p {\n color: var(--color-text-secondary);\n font-weight: 500;\n margin: .5rem 0 2rem;\n }\n\n .Radio {\n margin-bottom: 2rem;\n }\n }\n}",".Checkout {\n padding: 0.5rem 0;\n\n .description {\n display: flex;\n flex-direction: row;\n margin: 0 1rem;\n\n img {\n height: 6rem;\n margin: .5rem;\n }\n\n .text {\n h5 {\n margin-top: .5rem;\n font-size: 1.125rem;\n }\n\n p {\n font-size: 0.8rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n }\n\n .price-info {\n margin: 1rem;\n\n .price-info-item {\n margin: 1rem .5rem;\n display: flex;\n flex-direction: row;\n align-content: space-between;\n color: var(--color-text-secondary);\n font-weight: 500;\n \n &-main{\n color: var(--color-text);\n }\n \n .title {\n display: flex;\n flex: 1 auto;\n }\n }\n }\n\n .invoice-info {\n border-top: 1px var(--color-borders) solid;\n padding: 1rem;\n\n .checkout-info-item {\n display: flex;\n padding: .75rem .5rem 1rem;\n text-align: left;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n margin-right: 2rem;\n width: 1.5rem;\n }\n\n i.stripe-provider {\n background: url('../../assets/stripe-logo.png') no-repeat center;\n background-size: 2rem;\n border-radius: 1rem;\n height: 1.5rem;\n }\n\n .info {\n .title {\n font-size: 1rem;\n line-height: 1.4375rem;\n margin-bottom: 0;\n font-weight: 400;\n word-break: break-word;\n color: var(--color-text);\n text-transform: capitalize;\n }\n\n .data {\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n }\n }\n }\n }\n \n}",".CardInput {\n position: relative;\n\n .input-group.has-left-addon .form-control{\n padding-left: 4rem;\n }\n\n .left-addon {\n position: absolute;\n top: .8rem;\n left: 1rem;\n z-index: 8;\n\n img {\n max-width: 2rem;\n }\n }\n}\n",".PaymentInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.9rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.1rem;\n }\n\n .inline-inputs {\n display: flex;\n justify-content: space-between;\n\n .input-group {\n flex: 1 10rem;\n max-width: 45%;\n display: flex;\n }\n }\n}\n",".PaymentModal {\n .modal-backdrop {\n pointer-events: none;\n }\n\n .header {\n position: relative;\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n width: 100%;\n padding: .25rem 1rem;\n display: flex;\n align-items: center;\n flex-direction: row;\n background: var(--color-background);\n border-bottom: 1px var(--color-borders) solid;\n\n h3 {\n margin-bottom: 0;\n margin-left: 1.5rem;\n unicode-bidi: plaintext;\n text-align: initial;\n }\n }\n\n .Transition {\n height: 25rem;\n }\n\n .empty-content {\n height: 25rem;\n max-height: 90%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .receipt-content {\n height: 25rem;\n overflow-y: auto;\n }\n\n .content {\n overflow: auto;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .footer {\n position: relative;\n border-bottom-left-radius: 10px;\n border-bottom-right-radius: 10px;\n width: 100%;\n padding: .75rem 1rem;\n background: var(--color-background);\n border-top: 1px var(--color-borders) solid;\n\n button {\n text-transform: none;\n font-weight: 500;\n }\n }\n\n .modal-dialog {\n width: 25rem;\n }\n\n .modal-content {\n padding:0;\n overflow: hidden;\n }\n}\n\n@media screen\n and (max-device-width: 640px)\n and (max-height: 640px)\n and (orientation: landscape) {\n .PaymentModal {\n .modal-dialog {\n max-height: 100%;\n }\n\n .Transition {\n height: 10rem;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/126.6c11ab2d3cdbd7baf2dd.js b/dist/126.6c11ab2d3cdbd7baf2dd.js deleted file mode 100644 index 5f2824986..000000000 --- a/dist/126.6c11ab2d3cdbd7baf2dd.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[126],{9126:(e,t,n)=>{n.r(t),n.d(t,{ArchivedChats:()=>ts,AttachMenu:()=>Er,AttachmentModal:()=>zs,BotCommandMenu:()=>br,BotCommandTooltip:()=>fr,CalendarModal:()=>je,ChatFolderModal:()=>as,ContactList:()=>Va,ContextMenuContainer:()=>Is,CustomSendMenu:()=>yr,DeleteMessageModal:()=>We,Dialogs:()=>Oe,DropArea:()=>Nr.Z,EmojiInteractionAnimation:()=>ut,EmojiTooltip:()=>wr,ForwardPicker:()=>$e,GifSearch:()=>Xr,HeaderMenuContainer:()=>ks,HistoryCalendar:()=>Ke,InlineBotTooltip:()=>Br,LeftSearch:()=>tn,Management:()=>bl,MediaViewer:()=>be,MentionTooltip:()=>Js,MessageSelectToolbar:()=>rt,MobileSearch:()=>Ms,NewChat:()=>Qa,NewChatStep1:()=>ja,NewChatStep2:()=>Ka,Notifications:()=>Ge,PaymentModal:()=>Vl,PinMessageModal:()=>Qe,PollModal:()=>Ys,PollResults:()=>_r,ReactorListModal:()=>ct,ReceiptModal:()=>Kl,RightSearch:()=>Dr,SafeLinkModal:()=>ze,SeenByModal:()=>lt,SendAsMenu:()=>$r,Settings:()=>Ya,StickerSearch:()=>Jr,StickerSetModal:()=>ys,StickerTooltip:()=>Ir,SymbolMenu:()=>pr,TextFormatter:()=>kr.Z,UnpinAllMessagesModal:()=>et});var a=n(4050),s=n(5116),r=n(6137),l=n(1713),o=n(3716),i=n(7361),c=n(2937),d=n(5326),m=n(8674),u=n(6590),h=n(9107),Z=n(6202),v=n(2566),P=n(7204),g=n(8415),p=n(9066),E=n(396),C=n(3989),f=n(1174),b=n(3858),I=n(4399),y=n(996),N=n(3227);function k(e,t){const n=document.createElement("div");n.classList.add("ghost");const a=new Image;if(a.draggable=!1,a.oncontextmenu=N.Z,"string"==typeof e?a.src=e:e instanceof HTMLVideoElement?a.src=e.poster:a.src=e.src,n.appendChild(a),t===l.bZ.ProfileAvatar||t===l.bZ.SettingsAvatar){n.classList.add("ProfileInfo"),t===l.bZ.SettingsAvatar&&n.classList.add("self");const e=document.querySelector(t===l.bZ.ProfileAvatar?"#RightColumn .ProfileInfo .info":"#Settings .ProfileInfo .info");e&&n.appendChild(e.cloneNode(!0))}return n}function S(e,t){const n=document.querySelector(".Transition__slide--active > .MessageList");let a=e.offsetTop+t.closest(".content-inner, .WebPage").offsetTop;return e.id.includes("album-media-")&&(a+=e.parentElement.offsetTop+e.closest(".Message").offsetTop),a>n.scrollTop&&a+t.offsetHeight .MessageList #album-media-${t.id}`,a=".full-media";break;case l.bZ.SharedMedia:n=`#shared-media${t.id}`,a="img";break;case l.bZ.SearchResult:n=`#search-media${t.id}`,a="img";break;case l.bZ.MiddleHeaderAvatar:n=".MiddleHeader .Transition__slide--active .ChatInfo .Avatar",a="img.avatar-media";break;case l.bZ.SettingsAvatar:n="#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto",a="img.avatar-media";break;case l.bZ.ProfileAvatar:n="#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto",a="img.avatar-media";break;case l.bZ.ScheduledInline:case l.bZ.Inline:default:n=`.Transition__slide--active > .MessageList #message${t.id}`,a=".message-content .full-media, .message-content .thumbnail"}const s=document.querySelector(n),r=s&&s.querySelectorAll(a);return{container:s,mediaEl:null==r?void 0:r[r.length-1]}}function T(e,t){switch(t){case l.bZ.Album:case l.bZ.ScheduledAlbum:case l.bZ.Inline:case l.bZ.ScheduledInline:e.classList.add("rounded-corners");break;case l.bZ.SharedMedia:case l.bZ.SettingsAvatar:case l.bZ.ProfileAvatar:case l.bZ.SearchResult:e.firstChild.style.objectFit="cover";break;case l.bZ.MiddleHeaderAvatar:e.classList.add("circle")}}var R=n(231),A=n(126),L=n(2255),F=n(3106),B=n(8964),$=n(9196);const x=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n}=t;return{isDownloading:!!n&&(0,p.te)(e,n),isProtected:(0,p.EV)(e,n)}}))((e=>{let{mediaData:t,isVideo:n,isZoomed:r,message:l,fileName:o,isAvatar:c,isDownloading:d,isProtected:m,onCloseMediaViewer:u,onForward:Z,onZoomToggle:P}=e;const{downloadMessageMedia:p,cancelMessageMediaDownload:E}=(0,s.uC)(),{loadProgress:C}=(0,v.Z)(l&&(0,g.Ti)(l,"download"),!d),f=(0,a.I4)((()=>{d?E({message:l}):p({message:l})}),[E,p,d,l]),b=(0,h.Z)(),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",className:n?"active":void 0,onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);if(i.wB){if(m)return;return a.ZP.createElement("div",{className:"MediaViewerActions-mobile"},a.ZP.createElement(F.Z,{trigger:I,positionX:"right"},!c&&a.ZP.createElement(B.Z,{icon:"forward",onClick:Z},b("Forward")),n?a.ZP.createElement(B.Z,{icon:d?"close":"download",onClick:f},d?`${Math.round(100*C)}% Downloading...`:"Download"):a.ZP.createElement(B.Z,{icon:"download",href:t,download:o},b("AccActionDownload"))),d&&a.ZP.createElement($.Z,{progress:C,size:"s",noCross:!0}))}return a.ZP.createElement("div",{className:"MediaViewerActions"},!c&&!m&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Forward"),onClick:Z},a.ZP.createElement("i",{className:"icon-forward"}))),function(){if(!m)return n?a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload"),onClick:f},d?a.ZP.createElement($.Z,{progress:C,size:"s",onClick:f}):a.ZP.createElement("i",{className:"icon-download"})):a.ZP.createElement(R.Z,{href:t,download:o,round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload")},a.ZP.createElement("i",{className:"icon-download"}))}(),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:r?"Zoom Out":"Zoom In",onClick:P},a.ZP.createElement("i",{className:r?"icon-zoom-out":"icon-zoom-in"})),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})))})));var D=n(2202),O=n(9933),U=n(275),G=n(9118),J=n(9204),X=n(6752);const z=e=>{let{text:t="",isHidden:n,isForVideo:s,onClick:r}=e;const[l,o]=(0,a.eJ)(!1);(0,a.d4)((()=>{const e=document.querySelector(".MediaViewerFooter .media-text"),t=()=>{const t=e?e.clientHeight:0;o(t>2*I.Gw)};t();const n=(0,G.P2)(t,500,!0);return window.addEventListener("resize",n,!1),()=>{window.removeEventListener("resize",n,!1)}}),[]);const c=(0,X.Z)("MediaViewerFooter",s&&"is-for-video",n&&"is-hidden");return a.ZP.createElement("div",{className:c,onClick:function(e){t&&e.stopPropagation()}},t&&a.ZP.createElement("div",{className:"media-viewer-footer-content",onClick:i.wB?void 0:r},a.ZP.createElement("p",{className:"media-text custom-scroll "+(l?"multiline":""),dir:"auto"},t)))};var _=n(1212),Y=n(2019);const H=void 0!==document.fullscreenElement?"fullscreenElement":void 0!==document.mozFullScreenElement?"mozFullScreenElement":void 0!==document.webkitFullscreenElement?"webkitFullscreenElement":"";var V=n(6898),q=n(4753),j=n(790);const K=["bytes","kB","MB","GB","TB","PB"],W=e=>{const t=0===e?0:Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**Math.floor(t)).toFixed(1)} ${K[t]}`},Q=e=>{e.stopPropagation()},ee=e=>{let{bufferedProgress:t,currentTime:n,duration:s,fileSize:r,isForceVisible:l,isForceMobileVersion:o,isPlayed:c,isFullscreenSupported:d,isFullscreen:m,onChangeFullscreen:u,onPlayPause:Z,onSeek:v}=e;const[P,g]=(0,a.eJ)(!0),p=(0,a.sO)(null),E=(0,a.sO)(!1);(0,a.d4)((()=>{l&&g(l)}),[l]),(0,a.d4)((()=>{let e;return l||(i.wB?g(!1):e=window.setTimeout((()=>{g(!1)}),800)),()=>{e&&window.clearTimeout(e)}}),[l]),(0,a.d4)((()=>((P||l)&&document.body.classList.add("video-controls-visible"),()=>{document.body.classList.remove("video-controls-visible")})),[l,P]);const C=(0,h.Z)(),b=(0,a.I4)((e=>{if(E.current&&p.current){const{width:t,left:n}=p.current.getBoundingClientRect(),a=e instanceof MouseEvent?e.clientX:e.targetTouches[0].clientX;v(Math.max(Math.min(s*((a-n)/t),s),0))}}),[s,v]),I=(0,a.I4)((e=>{E.current=!0,b(e)}),[b]),y=(0,a.I4)((()=>{E.current=!1}),[]);(0,a.d4)((()=>{if(p.current&&P)return(0,f.sf)(p.current,{onCapture:I,onRelease:y,onClick:y,onDrag:b})}),[P,I,b,y]);const N=P||l;return a.ZP.createElement("div",{className:(0,X.Z)("VideoPlayerControls",o&&"mobile",N&&"active"),onClick:Q},function(e,t,n,s){const r=e/t*100,l=100*n;return a.ZP.createElement("div",{className:"player-seekline",ref:s},a.ZP.createElement("div",{className:"player-seekline-track"},a.ZP.createElement("div",{className:"player-seekline-buffered",style:`width: ${l||0}%`}),a.ZP.createElement("div",{className:"player-seekline-played",style:`width: ${r||0}%`})))}(n,s,t,p),a.ZP.createElement(R.Z,{ariaLabel:C("AccActionPlay"),size:"tiny",ripple:!i.wB,color:"translucent-white",className:"play",onClick:Z},a.ZP.createElement("i",{className:c?"icon-pause":"icon-play"})),function(e,t){return a.ZP.createElement("div",{className:"player-time"},`${(0,j.k9)(e)} / ${(0,j.k9)(t)}`)}(n,s),t<1&&(k=t,S=r,a.ZP.createElement("div",{className:"player-file-size"},`${W(S*k)} / ${W(S)}`)),d&&a.ZP.createElement(R.Z,{ariaLabel:"Fullscreen",size:"tiny",color:"translucent-white",className:"fullscreen",onClick:u},a.ZP.createElement("i",{className:m?"icon-smallscreen":"icon-fullscreen"})));var k,S};function te(){return te=Object.assign||function(e){for(var t=1;t{let{url:t,isGif:n,posterData:s,posterSize:r,loadProgress:l,fileSize:o,isMediaViewerOpen:c,noPlay:d,onClose:m}=e;const u=(0,a.sO)(null),[h,Z]=(0,a.eJ)(!i.$b||!i.cj),[v,P]=(0,a.eJ)(0),[g,p]=(0,a.eJ)(!0),[E,C,f]=function(e,t){const[n,s]=(0,a.eJ)(Boolean(H&&document[H]));return(0,a.bt)((()=>{const n=()=>{s(Boolean(H&&document[H]))},a=()=>{s(!0)},r=()=>{s(!1),t(!1)},l=e.current;return document.addEventListener("fullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),l&&(l.addEventListener("webkitbeginfullscreen",a,!1),l.addEventListener("webkitendfullscreen",r,!1)),()=>{document.removeEventListener("fullscreenchange",n,!1),document.removeEventListener("webkitfullscreenchange",n,!1),document.removeEventListener("mozfullscreenchange",n,!1),l&&(l.removeEventListener("webkitbeginfullscreen",a,!1),l.removeEventListener("webkitendfullscreen",r,!1))}}),[]),H||"iOS"===i.Lt?[n,()=>{e.current&&(H||"iOS"===i.Lt)&&(e.current.requestFullscreen?e.current.requestFullscreen():e.current.webkitRequestFullscreen?e.current.webkitRequestFullscreen():e.current.webkitEnterFullscreen?e.current.webkitEnterFullscreen():e.current.mozRequestFullScreen&&e.current.mozRequestFullScreen(),s(!0))},()=>{e.current&&(document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen(),s(!1))}]:[!1]}(u,Z),{isBuffered:b,bufferedProgress:I,bufferingHandlers:y}=(0,Y.Z)(),{shouldRender:N,transitionClassNames:k}=(0,_.Z)(!b,void 0,void 0,"slow"),{shouldRender:S,transitionClassNames:w}=(0,_.Z)(i.cj&&!h&&!N,void 0,void 0,"slow");(0,a.d4)((()=>{d||!c?u.current.pause():t&&!i.$b&&(0,q.Z)(u.current)}),[d,c,t]),(0,a.d4)((()=>{u.current.currentTime===u.current.duration?(P(0),Z(!1)):P(u.current.currentTime)}),[v]);const M=(0,a.I4)((e=>{e.stopPropagation(),h?(u.current.pause(),Z(!1)):((0,q.Z)(u.current),Z(!0),i.wB&&p(!1))}),[h]);(0,V.Z)(u,[]);const T=(0,a.I4)((()=>{p(!0)}),[]),A=(0,a.I4)((()=>{p(!1)}),[]),L=(0,a.I4)((e=>{P(e.currentTarget.currentTime)}),[]),F=(0,a.I4)((()=>{P(0),Z(!1),p(!0)}),[]),B=(0,a.I4)((()=>{E&&f?f():!E&&C&&C()}),[f,E,C]),x=(0,a.I4)((e=>{u.current.currentTime=e}),[]),D=(0,a.I4)((e=>{e.stopPropagation(),p(!g)}),[g]);(0,a.d4)((()=>{const e=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),M(e))};return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)}}),[M]);const O=r&&`width: ${r.width}px; height: ${r.height}px`,U=`background-image: url(${s})`;return a.ZP.createElement("div",{className:"VideoPlayer",onClick:!n&&i.wB?D:void 0,onMouseOver:n||i.$b?void 0:T,onMouseOut:n||i.$b?void 0:A},a.ZP.createElement("div",{style:O},a.ZP.createElement("video",te({ref:u,autoPlay:i.$b,playsInline:!0,loop:n,muted:n,id:"media-viewer-video",style:U,onPlay:i.cj?()=>Z(!0):void 0,onEnded:F,onClick:i.wB?void 0:M,onDoubleClick:B},y,{onTimeUpdate:L}),t&&a.ZP.createElement("source",{src:t}))),S&&a.ZP.createElement(R.Z,{round:!0,className:`play-button ${w}`,onClick:M},a.ZP.createElement("i",{className:"icon-play"})),N&&a.ZP.createElement("div",{className:["spinner-container",k].join(" ")},!b&&a.ZP.createElement("div",{className:"buffering"},"Buffering..."),a.ZP.createElement($.Z,{size:"xl",progress:b?1:l,square:!0,onClick:m})),!n&&!N&&a.ZP.createElement(ee,{isPlayed:h,bufferedProgress:I,currentTime:v,isFullscreenSupported:Boolean(C),isFullscreen:E,fileSize:o,duration:u.current&&u.current.duration||0,isForceVisible:g,isForceMobileVersion:r&&r.width<400,onSeek:x,onChangeFullscreen:B,onPlayPause:M}))})),ae=(0,a.X$)((0,s.c$)(((e,t)=>{const{chatId:n,threadId:a,messageId:s,avatarOwnerId:r,profilePhotoIndex:o,origin:i}=t;if(i===l.bZ.SearchResult){if(!n||!s)return{};const t=(0,p.hj)(e,n,s);return t?{chatId:n,messageId:s,senderId:t.senderId,origin:i,message:t,isProtected:(0,p.EV)(e,t)}:{}}if(r)return{messageId:-1,senderId:r,avatarOwner:(0,p.dy)(e,r)||(0,p.Z1)(e,r),profilePhotoIndex:o||0,origin:i};if(!(n&&a&&s))return{};let c;return c=i&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(i)?(0,p.Tm)(e,n,s):(0,p.hj)(e,n,s),c?{chatId:n,threadId:a,messageId:s,senderId:c.senderId,origin:i,message:c,isProtected:(0,p.EV)(e,c)}:{}}))((e=>{const{messageId:t,isActive:n,avatarOwner:s,chatId:o,message:d,profilePhotoIndex:m,origin:u,animationLevel:h,onClose:P,onFooterClick:p,isFooterHidden:E,isProtected:C}=e,f=d?(0,g.O$)(d):void 0,b=d?(0,g.b7)(d):void 0,k=d?(0,g.F$)(d):void 0,S=d?(0,g.Cg)(d):void 0,w=!!d&&(0,g.rl)(d),M=!!d&&(0,g.hC)(d),T=Boolean(b||S||M),R=Boolean(!T&&(f||k||w)),{isGif:A}=b||S||{},L=Boolean(s||t),F=Boolean(s),B=u===l.bZ.SharedMedia,$=u===l.bZ.SearchResult,x=2===h;function D(e){if(F&&void 0!==m){const{photos:t}=s;return t&&t[m]?`photo${t[m].id}?size=c`:(0,g.RT)(s,e?"big":"normal")}return d&&(0,g.Ti)(d,e?"viewerFull":"viewerPreview")}const O=(0,Z.Z)(d&&(B||$)&&(0,g.Ti)(d,"pictogram"),void 0,r.IU.BlobUrl,void 0,x&&350),U=D(),G=(0,Z.Z)(U,void 0,r.IU.BlobUrl,void 0,x&&350),{mediaData:X,loadProgress:_}=(0,v.Z)(D(!0),void 0,d&&(0,g.kG)(d,"viewerFull"),void 0,x&&350),Y=f||b?(f||b).blobUrl:void 0;let H=!T&&(Y||X)||G||O;const V=(0,c.Z)(!H&&d&&(0,g.DH)(d));H||u===l.bZ.SearchResult||(H=V);const q=d?(0,g.c0)(d):void 0;let j;if(d?w||M?j=(0,g.aE)(d).mediaSize:f||k?j=(0,g.bV)(f||k):(b||S)&&(j=(0,g.jC)(b||S)):j=I.vY,F)return a.ZP.createElement("div",{key:o,className:"MediaViewerContent"},se(X||G,(0,I.PA)(I.vY,!1),!i.wB&&!C));if(!d)return;const K=(0,y.X)(d),W=Boolean(K);return a.ZP.createElement("div",{className:"MediaViewerContent "+(W?"has-footer":"")},C&&a.ZP.createElement("div",{onContextMenu:N.Z,className:"protector"}),R&&se(Y||X||G||O,d&&(0,I.PA)(j,W),!i.wB&&!C),T&&(!n&&i.$b?function(e,t,n){const s=t&&`width: ${t.width}px; height: ${t.height}px`,r=`background-image: url(${e})`;return e?a.ZP.createElement("div",{className:"VideoPlayer"},a.ZP.createElement("div",{style:s},a.ZP.createElement("video",{style:r,draggable:Boolean(n)}))):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(J.Z,{color:"white"}))}(H,d&&(0,I.PA)(j,W,!1),!i.wB&&!C):a.ZP.createElement(ne,{key:t,url:Y||X,isGif:A,posterData:H,posterSize:d&&(0,I.PA)(j,W,!1),loadProgress:_,fileSize:q,isMediaViewerOpen:L&&n,noPlay:!n,onClose:P})),K&&a.ZP.createElement(z,{text:K,onClick:p,isHidden:E,isForVideo:T&&!A}))})));function se(e,t,n){return e?a.ZP.createElement("img",{src:e,alt:"",style:t?`width: ${t.width}px`:"",draggable:Boolean(n)}):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(J.Z,{color:"white"}))}function re(){return re=Object.assign||function(e){for(var t=1;t{let{messageId:t,getMessageId:n,selectMessage:s,isVideo:r,isGif:l,isPhoto:o,isOpen:c,isActive:m,hasFooter:u,...h}=e;const Z=(0,a.sO)(null),v=(0,a.sO)(null),P=(0,a.sO)({x:0,y:0,scale:1}),g=(0,a.sO)(void 0),p=(0,a.sO)(!0),[E,C]=(0,a.eJ)(t),b=(0,d.Z)(),[I,y]=(0,a.eJ)(!0),{isZoomed:N,onClose:k}=h,S=(0,a.I4)((e=>{P.current=e,b()}),[b]),w=(0,a.I4)((e=>{p.current=e,b()}),[b]),M=(0,D.Z)(350,!0),T=(0,D.Z)(500,!0),R=(0,D.Z)(800,!0),A=(0,a.I4)((e=>{i.$b&&u&&(o||l)&&(e.pageX<40||e.pageX>window.innerWidth-40||y(!I))}),[u,I,l,o]);if(function(e,t){const n=(0,a.sO)(e);(0,a.bt)((()=>{n.current=e}),[e]),(0,a.d4)((()=>{if("number"!=typeof t)return;const e=setTimeout((()=>n.current()),t);return()=>clearTimeout(e)}),[t])}((()=>y(!1)),200),(0,a.d4)((()=>{if(!i.$b||!Z.current||N||!E)return;let e={x:0,y:0,scale:1};const t={x:0,y:0},a={x:0,y:0},r={x:0,y:0};let l,o,c=Date.now();const d=(0,G.Ds)((()=>{c=Date.now()}),500,!1,!0),m=t=>{if(1!==P.current.scale)return!1;let a=0;t.pageX<40?a=-1:t.pageX>window.innerWidth-40&&(a=1);const r=n(E,a);if(r){const t=(window.innerWidth+40)*a;P.current.x+=t,p.current=!1,C(r),M((()=>s(r))),R((()=>{w(!0)})),e={x:0,y:0,scale:1},oe=(0,O.vr)({from:P.current.x,to:0,duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({y:0,x:e,scale:1})})}return 0!==a};return(0,f.sf)(Z.current,{isNotPassive:!0,excludedClosestSelector:".VideoPlayerControls, .MediaViewerFooter",onCapture:()=>{if(c=Date.now(),(0,U.Z)(P.current,{x:0,y:0,scale:1})){if(!v.current)return;if(o=v.current.querySelector("img, video"),!o)return;l=o.getBoundingClientRect()}},onDrag:(n,a,s)=>{let{dragOffsetX:l,dragOffsetY:o}=s;if(i.cj){const{pageX:e}=a.touches[0];if(e<=f.vJ||e>=window.innerWidth-f.vJ)return}oe&&(oe(),oe=void 0),r.x=t.x-l,r.y=t.y-o,t.x=l,t.y=o;const c=Math.abs(l),m=Math.abs(o),{scale:u,x:h,y:Z}=P.current,v=10;if(d(),1===u)return g.current!==ie.Vertical&&(g.current===ie.Horizontal||Math.abs(h)>v||c>v&&mv||m>v&&c{let{zoomFactor:s,initialCenterX:r,initialCenterY:l,dragOffsetX:o,dragOffsetY:i,currentCenterX:c,currentCenterY:d}=n;const m=Math.min(12,Math.max(e.scale*s,.6)),u=m/e.scale,h=Math.abs(Math.min(e.x,0))+r,Z=Math.abs(Math.min(e.y,0))+l;a.x=c,a.y=d;const v=h-u*h,P=Z-u*Z;S({x:e.x+v+o,y:e.y+P+i,scale:m})},onClick(e){m(e)&&(e.preventDefault(),e.stopPropagation())},onDoubleClick(t,n){let{centerX:a,centerY:s}=n;if(m(t))return t.preventDefault(),void t.stopPropagation();const r=a-3*a,l=s-3*s,{scale:o,x:i,y:c}=P.current;if(1===o){if(0!==i||0!==c)return;e={x:r,y:l,scale:3}}else e={x:0,y:0,scale:1};return(0,O.vr)({from:[i,c,o],to:[e.x,e.y,e.scale],duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:e[0],y:e[1],scale:e[2]})})},onRelease:()=>{const i=Math.abs(P.current.x),d=Math.abs(P.current.y),{scale:m,x:u,y:h}=P.current;if(T((()=>{g.current=void 0})),R((()=>{w(!0)})),m<1)return e={x:0,y:0,scale:1},(0,O.vr)({from:[u,h,m],to:[0,0,1],duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:e[0],y:e[1],scale:e[2]})});if(m>1){if(!o||!l)return void(e={x:u,y:h,scale:m});const n=o.getBoundingClientRect(),s=Math.min(m,4),i=s/m;let d=u*i+(a.x-i*a.x),Z=h*i+(a.y-i*a.y);const v=.15;if(e.scale===m){const e=Math.abs(t.x)/(Date.now()-c),n=Math.abs(t.y)/(Date.now()-c);d-=Math.abs(t.x)*e*v*r.x,Z-=Math.abs(t.y)*n*v*r.y}if(n.width>window.innerWidth){const e=-l.left*s,t=window.innerWidth-l.right*s;d=Math.min(e,Math.max(t,d))}else d=(window.innerWidth-window.innerWidth*s)/2;if(n.height>window.innerHeight){const e=-l.top*s,t=window.innerHeight-l.bottom*s;Z=Math.min(e,Math.max(t,Z))}else Z=(window.innerHeight-window.innerHeight*s)/2;return e={x:d,y:Z,scale:s},void(oe=(0,O.vr)({from:[u,h,m],to:[d,Z,s],duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:e[0],y:e[1],scale:e[2]})}))}if(e={x:u,y:h,scale:m},d>=50)return k();if(d>0)return(0,O.vr)({from:h,to:0,duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({x:0,y:e,scale:m})});const Z=u<0?1:-1,v=n(E,u<0?1:-1),p=r.x<0?-1:1;if(v&&i>=50&&Z===p){const e=(window.innerWidth+40)*Z;P.current.x+=e,C(v),M((()=>s(v)))}oe=(0,O.vr)({from:P.current.x,to:0,duration:le,timing:O.M8.easeOutCubic,onUpdate:e=>S({y:0,x:e,scale:P.current.scale})})}})}),[N,k,S,n,E,w]),!E)return;const L=n(E,1),F=n(E,-1),B=P.current.x,$=P.current.y,{scale:x}=P.current;return a.ZP.createElement("div",{className:"MediaViewerSlides",ref:Z},F&&1===x&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:de(-window.innerWidth+B-40)},a.ZP.createElement(ae,re({},h,{messageId:F,isFooterHidden:I}))),E&&a.ZP.createElement("div",{className:"MediaViewerSlide "+(m?"MediaViewerSlide--active":""),onClick:A,ref:v,style:de(B,$,x)},a.ZP.createElement(ae,re({},h,{messageId:E,isActive:m&&p.current,isFooterHidden:I||N||1!==x}))),L&&1===x&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:de(window.innerWidth+B+40)},a.ZP.createElement(ae,re({},h,{messageId:L,isFooterHidden:I}))))}));function de(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return`transform: translate3d(${e.toFixed(3)}px, ${t.toFixed(3)}px, 0px) scale(${n.toFixed(3)});`}var me=n(782);const ue=[1,0,0,1,0,0],he={1:1,1.5:1.5,2:2.2,2.5:3.3,3:5.5},Ze=150,ve=(0,a.X$)((e=>{let{children:t,className:n,noWrap:s,canPan:r,zoomLevel:l,panDeltaX:o,panDeltaY:i,onPan:c}=e;const d=he[l]||l,[m,u]=(0,a.eJ)(!1),[h,Z]=(0,a.eJ)({dx:o,dy:i,x:0,y:0}),[v,P]=(0,a.eJ)(ue),g=(0,a.sO)(null),p=(0,a.sO)(null);return(0,a.d4)((()=>{const e=d||v[0],t=o||v[4],n=i||v[5],a=[...v];v[0]!==e&&(a[0]=e||a[0],a[3]=e||a[3]),v[4]!==t&&(a[4]=t),v[5]!==n&&(a[5]=n),(0,me.et)(v,a)||P(function(e,t,n){const a=n&&n.querySelector(".Transition__slide--active img");if(!n||!a)return t;const s=n.getBoundingClientRect(),r=a.getBoundingClientRect(),l=r.width/e*t[0],o=r.height/e*t[3],i=(s.width-l)/2+t[4],c=(s.height-o)/2+t[5];return s.width&&s.width-Ze{r||P(ue)}),[r]),(0,a.d4)((()=>{p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}),[s,v]),s?t:a.ZP.createElement("div",{ref:g,className:`pan-wrapper ${n||""}`,onMouseDown:e=>{if(!r)return;e.stopPropagation(),e.preventDefault();const t={dx:v[4],dy:v[5],x:e.pageX,y:e.pageY};Z(t),u(!0),g.current&&g.current.classList.add("move")},onMouseUp:()=>{u(!1),g.current&&g.current.classList.remove("move"),c&&c(v[4],v[5])},onMouseMove:e=>{if(m){const t=function(e,t){const n=[...v],a=h.x-e,s=h.y-t;return n[4]=h.dx-a,n[5]=h.dy-s,n}(e.pageX,e.pageY);P(t),p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}}},a.ZP.createElement("div",{ref:p,className:"pan-container"},t))}));var Pe=n(2340),ge=n(172);const pe=(0,s.c$)(((e,t)=>{let{chatId:n,messageId:a,isAvatar:s}=t;if(s&&n)return{sender:(0,g.YC)(n)?(0,p.dy)(e,n):(0,p.Z1)(e,n)};if(!a||!n)return{};const r=(0,p.hj)(e,n,a);return{message:r,sender:r&&(0,p.Ur)(e,r)}}))((e=>{let{chatId:t,messageId:n,sender:r,isAvatar:l,message:o}=e;const{closeMediaViewer:c,focusMessage:d,toggleChatInfo:m}=(0,s.uC)(),u=(0,a.I4)((()=>{c(),i.wB?setTimeout((()=>{m(!1,{forceSyncOnIOs:!0}),d({chatId:t,messageId:n})}),350):d({chatId:t,messageId:n})}),[t,d,m,n,c]),Z=(0,h.Z)();if(!r||!o&&!l)return;const v=(0,g.OU)(Z,r);return a.ZP.createElement("div",{className:"SenderInfo",onClick:u},(0,g.YC)(r.id)?a.ZP.createElement(ge.Z,{key:r.id,size:"medium",user:r}):a.ZP.createElement(ge.Z,{key:r.id,size:"medium",chat:r}),a.ZP.createElement("div",{className:"meta"},a.ZP.createElement("div",{className:"title",dir:"auto"},v&&(0,Pe.Z)(v)),a.ZP.createElement("div",{className:"date",dir:"auto"},l?Z("lng_mediaview_profile_photo"):(0,j.ZK)(Z,1e3*o.date,!0))))})),Ee=e=>{let{children:t,...n}=e;return i.$b?t(!0,!0,1):a.ZP.createElement(L.Z,n,t)},Ce=(0,a.X$)((e=>{let{isShown:t,onChangeZoom:n}=e;const{transitionClassNames:s}=(0,_.Z)(t),r=(0,P.Z)(t),l=(0,a.sO)(null),[o,c]=(0,a.eJ)(1),d=(0,a.sO)(!1);(0,a.d4)((()=>{t&&!r&&c(1.5)}),[t,r]);const m=(0,a.I4)((()=>{d.current=!0}),[]),u=(0,a.I4)((()=>{d.current=!1,1===o&&n(o,!d.current)}),[n,o]);(0,a.d4)((()=>{n(o,!d.current)}),[o,n]);const Z=(0,h.Z)(),v=(0,X.Z)("ZoomControls",s);return a.ZP.createElement("div",{className:v},a.ZP.createElement(R.Z,{disabled:1===o,size:"tiny",color:"translucent-white",ariaLabel:Z("ZoomOut"),className:"zoom-out",ripple:!i.wB,onClick:()=>{l.current&&c(Math.max(1,o-.5))}},a.ZP.createElement("i",{className:"icon-zoom-out"})),a.ZP.createElement(R.Z,{disabled:3===o,size:"tiny",color:"translucent-white",ariaLabel:"Zoom In",className:"zoom-in",ripple:!i.wB,onClick:()=>{l.current&&c(Math.min(3,o+.5))}},a.ZP.createElement("i",{className:"icon-zoom-in"})),a.ZP.createElement("div",{className:"seekline"},a.ZP.createElement("div",{className:"seekline-track"},a.ZP.createElement("div",{className:"seekline-played",style:`width: ${50*(o-1)}%`}),a.ZP.createElement("input",{ref:l,min:1,max:3,step:"0.5",value:o,type:"range",className:"seekline-input",onChange:e=>{c(Math.min(3,Math.max(Number(e.target.value),1)))},onMouseDown:m,onMouseUp:u}))))})),fe=350,be=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,threadId:n,messageId:a,avatarOwnerId:s,profilePhotoIndex:r,origin:o}=e.mediaViewer,{animationLevel:i}=e.settings.byKey;if(o===l.bZ.SearchResult){if(!t||!a)return{animationLevel:i};const n=(0,p.hj)(e,t,a);return n?{chatId:t,messageId:a,senderId:n.senderId,origin:o,message:n,animationLevel:i}:{animationLevel:i}}if(s)return{messageId:-1,senderId:s,avatarOwner:(0,p.dy)(e,s)||(0,p.Z1)(e,s),profilePhotoIndex:r||0,animationLevel:i,origin:o};if(!(t&&n&&a))return{animationLevel:i};let c,d,m;if(c=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,p.Tm)(e,t,a):(0,p.hj)(e,t,a),!c)return{animationLevel:i};if(d=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,p.Fn)(e,t):(0,p.Zw)(e,t),o===l.bZ.Inline||o===l.bZ.Album)m=(0,p.qC)(e,t,n)||(0,p.gb)(e,t,n);else if(o===l.bZ.SharedMedia){const t=(0,p.we)(e),{foundIds:n}=t&&t.resultsByType&&t.resultsByType.media||{};m=n}return{chatId:t,threadId:n,messageId:a,senderId:c.senderId,origin:o,message:c,chatMessages:d,collectionIds:m,animationLevel:i}}))((e=>{let{chatId:t,threadId:n,messageId:p,senderId:N,origin:F,avatarOwner:B,profilePhotoIndex:$,message:D,chatMessages:O,collectionIds:U,animationLevel:G}=e;const{openMediaViewer:J,closeMediaViewer:X,openForwardMenu:z,focusMessage:_,toggleChatInfo:Y}=(0,s.uC)(),H=Boolean(B||p),V=F===l.bZ.SharedMedia,q=F===l.bZ.SearchResult,j=D?(0,g.O$)(D):void 0,K=D?(0,g.b7)(D):void 0,W=D?(0,g.F$)(D):void 0,Q=D?(0,g.Cg)(D):void 0,ee=!!D&&(0,g.rl)(D),te=!!D&&(0,g.hC)(D),ne=Boolean(K||Q||te),{isGif:ae}=K||Q||{},se=Boolean(!ne&&(j||W||ee)),re=Boolean(B),le=W||Q?p:void 0,oe=(0,a.Ye)((()=>le?[le]:(0,g.N0)(O||{},U||[],V)),[le,O,U,V]),ie=p?oe.indexOf(p):-1,de=0===ie||-1===ie,me=ie===oe.length-1||-1===ie,ue=(0,a.sO)(),he=(0,P.Z)(N);!H||he&&he===N&&ue.current||(ue.current=ie);const Ze=G>=1&&!i.$b?"mv-slide":"none",Pe=2===G?"slide-fade":"none",ge=2===G,[be,Ie]=(0,a.eJ)(!1),[ye,Ne]=(0,a.eJ)(!1),[ke,Se]=(0,a.eJ)(1),[we,Me]=(0,a.eJ)({x:0,y:0});function Te(e){if(re&&void 0!==$){const{photos:t}=B;return t&&t[$]?`photo${t[$].id}?size=c`:(0,g.RT)(B,e?"big":"normal")}return D&&(0,g.Ti)(D,e?"viewerFull":"viewerPreview")}const Re=(0,Z.Z)(D&&(V||q)&&(0,g.Ti)(D,"pictogram"),void 0,r.IU.BlobUrl,void 0,ge&&fe),Ae=Te(),Le=(0,Z.Z)(Ae,void 0,r.IU.BlobUrl,void 0,ge&&fe),{mediaData:Fe}=(0,v.Z)(Te(!0),void 0,D&&(0,g.kG)(D,"viewerFull"),void 0,ge&&fe),Be=j||K?(j||K).blobUrl:void 0;let $e=!ne&&(Be||Fe)||Le||Re;const xe=(0,c.Z)(!$e&&D&&(0,g.DH)(D));$e||F===l.bZ.SearchResult||($e=xe);const De=D?(0,g.ep)(D):re?`avatar${B.id}-${$}.jpg`:void 0;let Oe;D?ee||te?Oe=(0,g.aE)(D).mediaSize:j||W?Oe=(0,g.bV)(j||W):(K||Q)&&(Oe=(0,g.jC)(K||Q)):Oe=I.vY,(0,a.d4)((()=>{i.wB&&document.body.classList.toggle("is-media-viewer-open",H)}),[H]);const Ue=(0,d.Z)();(0,a.d4)((()=>{const e=window.matchMedia(I.L6);return"function"==typeof e.addEventListener?e.addEventListener("change",Ue):"function"==typeof e.addListener&&e.addListener(Ue),()=>{"function"==typeof e.removeEventListener?e.removeEventListener("change",Ue):"function"==typeof e.removeListener&&e.removeListener(Ue)}}),[Ue]);const Ge=(0,P.Z)(D),Je=(0,P.Z)(F),Xe=(0,P.Z)(B),ze=(0,P.Z)($e),_e=D?(0,y.X)(D):void 0,Ye=Boolean(_e);(0,a.d4)((()=>{ge&&H&&!Ge&&!Xe&&((0,m.YW)(fe+o.fK),function(e,t,n,a,s,r){const{mediaEl:c}=M(t,r);if(!c)return;const{width:d}=b.Z.get(),{width:m,height:u}=(0,I.fM)(e,s),{width:h,height:Z}=(0,I.jg)(m,u,a.width,a.height),v=(d-h)/2,P=function(e){const t=window.matchMedia(I.L6);let n=4.125;return e&&!i.$b&&(n+=t.matches?.875:2.125),n*I.Gw}(e)+(u-Z)/2;let{top:g,left:p,width:E,height:C}=c.getBoundingClientRect();if([l.bZ.SharedMedia,l.bZ.Album,l.bZ.ScheduledAlbum,l.bZ.SearchResult].includes(t)){const e=function(e,t,n,a,s,r){if(e===t){const l=Math.max(s,r)*(e/t);a-=(l-s)/2,n-=(l-r)/2,s=l,r=l}else if(e>t){const n=s;a-=((s=r*(e/t))-n)/2}else if(t>e){const a=r;n-=((r=s*(t/e))-a)/2}return{top:n,left:a,width:s,height:r}}(h,Z,g,p,E,C);g=e.top,p=e.left,E=e.width,C=e.height}const f=p+E/2-(v+h/2),y=g+C/2-(P+Z/2),N=E/h,S=C/Z,R=k(n||c);w(R,{top:`${P}px`,left:`${v}px`,width:`${h}px`,height:`${Z}px`,transform:`translate3d(${f}px, ${y}px, 0) scale(${N}, ${S})`}),T(R,t),document.body.classList.add("ghost-animating"),requestAnimationFrame((()=>{document.body.appendChild(R),requestAnimationFrame((()=>{R.style.transform="",function(e){e.firstChild.style.objectFit="default",e.classList.remove("rounded-corners","circle")}(R),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(R)&&document.body.removeChild(R),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(Ye,F,$e,Oe,ne,D)),ge&&!H&&(Ge||Xe)&&((0,m.YW)(fe+o.fK),function(e,t,n){const{container:a,mediaEl:s}=M(e,n);if(!s)return;const r=document.getElementById("MediaViewer").querySelector(".MediaViewerSlide--active img, .MediaViewerSlide--active video");if(!r||!s)return;const{top:i,left:c,width:d,height:m}=r.getBoundingClientRect(),{top:u,left:h,width:Z,height:v}=s.getBoundingClientRect();let P=u;if(!function(e){if("none"===e.style.display)return!1;const t=e.getBoundingClientRect(),{height:n}=b.Z.get();return t.top<=n&&t.top+t.height>=0}(a)){const{height:e}=b.Z.get();P=uC?E=C:C>E&&(C=E));const I=document.getElementsByClassName("ghost")[0],y=I||k(t||s,e);I||w(y,{top:`${P}px`,left:`${h}px`,width:`${Z}px`,height:`${v}px`,transform:`translate3d(${g}px, ${p}px, 0) scale(${E}, ${C})`}),requestAnimationFrame((()=>{if(I){const{top:e,left:t,width:n,height:a}=I.getBoundingClientRect();w(y,{transition:"none",top:`${P}px`,left:`${h}px`,transformOrigin:"top left",transform:`translate3d(${t-h}px, ${e-P}px, 0) scale(${n/Z}, ${a/v})`,width:`${Z}px`,height:`${v}px`})}document.body.classList.add("ghost-animating"),I||document.body.appendChild(y),requestAnimationFrame((()=>{I&&(I.style.transition=""),y.style.transform="",f&&(y.style.opacity="0"),T(y,e),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(y)&&document.body.removeChild(y),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(Je,ze,Ge||void 0))}),[ge,H,F,Je,D,Ge,Xe,$e,ze,Oe,ne,Ye]),(0,a.d4)((()=>{let e;return ye?Ie(!0):e=window.setTimeout((()=>{Ie(!1)}),fe),()=>{e&&window.clearTimeout(e)}}),[ye]);const He=()=>{Ne(!1),Se(1),Me({x:0,y:0})},Ve=(0,a.I4)((()=>{Ne(!ye),Se(ye?1:1.5),ye&&Me({x:0,y:0})}),[ye]),qe=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Se(e),1===e&&t&&He()}),[]),je=(0,a.I4)((()=>{X(),He()}),[X]),Ke=(0,a.I4)((()=>{je(),i.wB?setTimeout((()=>{Y(!1,{forceSyncOnIOs:!0}),_({chatId:t,threadId:n,messageId:p})}),fe):_({chatId:t,threadId:n,messageId:p})}),[je,t,n,_,Y,p]),We=(0,a.I4)((()=>{z({fromChatId:t,messageIds:[p]}),He()}),[z,t,p]),Qe=(0,a.I4)((e=>J({chatId:t,threadId:n,messageId:e,origin:F},{forceOnHeavyAnimation:!0})),[t,J,F,n]);(0,a.d4)((()=>H?(0,C.Z)((()=>{ye?He():je()})):void 0),[je,H,ye]),(0,a.d4)((()=>{ne&&!ae&&(0,E.Es)()}),[ae,ne]),(0,a.d4)((()=>{if(H)return b.Z.disableRefresh(),()=>{b.Z.enableRefresh()}}),[H]);const et=(0,a.I4)(((e,t)=>{if(!e)return;const n=oe.indexOf(e);return-1===t&&n>0||1===t&&n{Me({x:e,y:t})}),[]),st=(0,h.Z)();function rt(){return re?a.ZP.createElement(pe,{key:B.id,chatId:B.id,isAvatar:!0}):a.ZP.createElement(pe,{key:p,chatId:t,messageId:p})}return(0,u.ZP)(H,X,J,{chatId:t,threadId:n,messageId:p,origin:F,avatarOwnerId:B&&B.id}),(0,a.d4)((()=>{if(H)return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)};function e(e){switch(e.key){case"Left":case"ArrowLeft":Qe(nt);break;case"Right":case"ArrowRight":Qe(tt)}}}),[H,tt,nt,Qe]),(0,a.d4)((()=>{if(ye||i.$b)return;const e=document.querySelector(".MediaViewerSlide--active");if(!e)return;const t=ae&&!i.cj;return(0,f.sf)(e,{excludedClosestSelector:".backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer"+(t?"":", .VideoPlayer"),onClick:je})}),[je,ae,ye,p]),a.ZP.createElement(A.Z,{id:"MediaViewer",className:ye?"zoomed":"",isOpen:H},(()=>a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"media-viewer-head",dir:st.isRtl?"rtl":void 0},i.wB&&a.ZP.createElement(R.Z,{className:"media-viewer-close",round:!0,size:"smaller",color:"translucent-white",ariaLabel:st("Close"),onClick:je},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(L.Z,{activeKey:ue.current,name:Pe},rt),a.ZP.createElement(x,{mediaData:Fe||Le,isVideo:ne,isZoomed:ye,message:D,fileName:De,onCloseMediaViewer:je,onForward:We,onZoomToggle:Ve,isAvatar:re})),a.ZP.createElement(ve,{noWrap:!be,canPan:ye,panDeltaX:we.x,panDeltaY:we.y,zoomLevel:ke,onPan:at},a.ZP.createElement(Ee,{activeKey:ie,name:Ze},(e=>a.ZP.createElement(ce,{messageId:p,getMessageId:et,chatId:t,isPhoto:se,isGif:ae,threadId:n,avatarOwnerId:B&&B.id,profilePhotoIndex:$,origin:F,isOpen:H,hasFooter:Ye,isZoomed:ye,isActive:e,isVideo:ne,animationLevel:G,onClose:je,selectMessage:Qe,onFooterClick:Ke})))),!de&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation prev ${ne&&!ae&&"inline"}`,"aria-label":st("AccDescrPrevious"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(nt)}),!me&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation next ${ne&&!ae&&"inline"}`,"aria-label":st("Next"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(tt)}),a.ZP.createElement(Ce,{isShown:ye,onChangeZoom:qe}))))})));var Ie=n(8360),ye=n(706),Ne=n(7407),ke=n(2313),Se=n(2515),we=n(4288),Me=n(3103),Te=n(7687),Re=n(1273),Ae=n(1876),Le=n(8799),Fe=n(6058);const Be=(0,a.X$)((e=>{let{isOpen:t,currentUserId:n,chatOrUserIds:s,filterRef:r,filter:l,filterPlaceholder:i,loadMore:c,onFilterChange:d,onSelectChatOrUser:m,onClose:u,onCloseAnimationEnd:Z}=e;const v=(0,h.Z)(),[P,p]=(0,Ne.Z)(c,s,Boolean(l)),E=(0,a.I4)((()=>{d("")}),[d]);(0,Se.Z)(r,t,E);const C=(0,a.sO)(null),f=(0,a.I4)((e=>{d(e.currentTarget.value)}),[d]),b=(0,ke.Z)(C,t,(e=>{P&&P.length>0&&m(P[-1===e?0:e])}),".ListItem-button",!0),I=a.ZP.createElement("div",{className:"modal-header",dir:v.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:v("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Te.Z,{ref:r,value:l,onChange:f,onKeyDown:b,placeholder:i})),y=s.indexOf(P[0]);return a.ZP.createElement(Me.Z,{isOpen:t,className:"ChatOrUserPicker",header:I,onClose:u,onCloseAnimationEnd:Z},null!=P&&P.length?a.ZP.createElement(Re.Z,{ref:C,className:"picker-list custom-scroll",items:P,onLoadMore:p,withAbsolutePositioning:!0,maxHeight:s.length*o.rS,onKeyDown:b},P.map(((e,t)=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable force-rounded-corners",style:`top: ${(y+t)*o.rS}px;`,onClick:()=>m(e)},(0,g.YC)(e)?a.ZP.createElement(Fe.Z,{status:e===n?v("SavedMessagesInfo"):void 0,userId:e}):a.ZP.createElement(Le.Z,{chatId:e}))))):P&&!P.length?a.ZP.createElement("p",{className:"no-results"},v("lng_blocked_list_not_found")):a.ZP.createElement(we.Z,null))})),$e=(0,a.X$)((0,s.c$)((e=>{var t;const{chats:{byId:n,listIds:a,orderedPinnedIds:s},currentUserId:r}=e;return{chatsById:n,activeListIds:a.active,archivedListIds:a.archived,pinnedIds:s.active,contactIds:null===(t=e.contactList)||void 0===t?void 0:t.userIds,currentUserId:r}}))((e=>{let{chatsById:t,activeListIds:n,archivedListIds:l,pinnedIds:o,contactIds:i,currentUserId:c,isOpen:d}=e;const{setForwardChatId:m,exitForwardMode:u}=(0,s.uC)(),Z=(0,h.Z)(),[v,P]=(0,a.eJ)(""),p=(0,a.sO)(null),[E,C,f]=(0,ye.Z)();(0,a.d4)((()=>{d&&C()}),[d,C]);const b=(0,a.Ye)((()=>{if(!d)return;let e=o||[];c&&(e=(0,me.Tw)([c,...e]));const a=[...n||[],...l||[]].filter((e=>{const n=t[e];return n&&(0,g.Qm)(n,r._f)})),m=(0,s.Rd)().users.byId;return(0,g.ih)((0,me.Tw)([...(0,g.$l)(Z,a,t,v,c),...i?(0,g.kK)(i,m,v):[]]),t,void 0,e)}),[n,l,t,i,c,v,d,Z,o]),I=(0,a.I4)((e=>{m({id:e})}),[m]),y=(0,Ie.Z)(b,!0);if(d||E)return a.ZP.createElement(Be,{currentUserId:c,isOpen:d,chatOrUserIds:y,filterRef:p,filterPlaceholder:Z("ForwardTo"),filter:v,onFilterChange:P,onSelectChatOrUser:I,onClose:u,onCloseAnimationEnd:f})})));var xe=n(1947);function De(e){return e.isSlowMode?"Slowmode enabled":e.hasErrorKey?"Something went wrong":"Telegram"}const Oe=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e,["dialogs"])))((e=>{let{dialogs:t}=e;const{dismissDialog:n,acceptInviteConfirmation:r,sendMessage:l,showNotification:o}=(0,s.uC)(),[i,c,d]=(0,ye.Z)(),m=(0,h.Z)();var u,Z,v;if((0,a.d4)((()=>{t.length>0&&c()}),[t,c]),t.length)return a.ZP.createElement("div",{id:"Dialogs"},Boolean(t.length)&&("hash"in(u=t[t.length-1])?(e=>{const{hash:t,title:s,about:l,participantsCount:c,isChannel:u,photo:h,isRequestNeeded:Z}=e,v=m(u?"Subscribers":"Members",c,"i"),g=m(u?"ChannelJoin":"JoinGroup"),p=m(u?"MemberRequests.RequestToJoinChannel":"MemberRequests.RequestToJoinGroup");return a.ZP.createElement(Me.Z,{isOpen:i,onClose:d,className:"error",header:P(s,h),onCloseAnimationEnd:n},void 0!==c&&a.ZP.createElement("p",{className:"modal-help"},v),l&&a.ZP.createElement("p",{className:"modal-about"},(0,Pe.Z)(l,["br"])),Z&&a.ZP.createElement("p",{className:"modal-help"},m(u?"MemberRequests.RequestToJoinDescriptionChannel":"MemberRequests.RequestToJoinDescriptionGroup")),a.ZP.createElement(R.Z,{isText:!0,className:"confirm-dialog-button",onClick:()=>{r({hash:t}),o({message:m(u?"RequestToJoinChannelSentDescription":"RequestToJoinGroupSentDescription")}),d()}},Z?p:g),a.ZP.createElement(R.Z,{isText:!0,className:"confirm-dialog-button",onClick:d},m("Cancel")))})(u):"phoneNumber"in u?(Z=u,a.ZP.createElement(Me.Z,{isOpen:i,onClose:d,className:"confirm",title:m("ShareYouPhoneNumberTitle"),onCloseAnimationEnd:n},m("AreYouSureShareMyContactInfoBot"),a.ZP.createElement("div",null,a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:()=>{l({contact:(0,me.ei)(Z,["firstName","lastName","phoneNumber"])}),d()}},m("OK")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},m("Cancel"))))):(v=u,a.ZP.createElement(Me.Z,{isOpen:i,onClose:d,onCloseAnimationEnd:n,className:"error",title:De(v)},v.hasErrorKey?(0,xe.ZP)(v):(0,Pe.Z)(v.message,["emoji","br"]),a.ZP.createElement("div",null,a.ZP.createElement(R.Z,{isText:!0,onClick:d},m("OK")))))));function P(e,t){return a.ZP.createElement("div",{className:"modal-header"},t&&a.ZP.createElement(ge.Z,{size:"small",photo:t}),a.ZP.createElement("div",{className:"modal-title"},(0,Pe.Z)(e)),a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:m("Close"),onClick:d},a.ZP.createElement("i",{className:"icon-close"})))}})));var Ue=n(6937);const Ge=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e,["notifications"])))((e=>{let{notifications:t}=e;const{dismissNotification:n}=(0,s.uC)();if(t.length)return a.ZP.createElement("div",{id:"Notifications"},t.map((e=>{let{message:t,localId:s}=e;return a.ZP.createElement(Ue.Z,{message:(0,Pe.Z)(t,["emoji","br","links","simple_markdown"]),onDismiss:()=>n({localId:s})})})))})));var Je=n(1396),Xe=n(7551);const ze=(0,a.X$)((e=>{let{url:t}=e;const{toggleSafeLinkModal:n}=(0,s.uC)(),r=(0,h.Z)(),l=(0,a.I4)((()=>{window.open((0,Je.X)(t)),n({url:void 0})}),[n,t]),o=(0,a.I4)((()=>{n({url:void 0})}),[n]),i=(0,Ie.Z)(t);return a.ZP.createElement(Xe.Z,{isOpen:Boolean(t),onClose:o,title:r("OpenUrlTitle"),textParts:(0,Pe.Z)(r("OpenUrlAlert2",i),["links"]),confirmLabel:r("OpenUrlTitle"),confirmHandler:l})})),_e=2147483647e3,Ye=["lng_weekday1","lng_weekday2","lng_weekday3","lng_weekday4","lng_weekday5","lng_weekday6","lng_weekday7"];function He(e,t,n,a,s){const r=new Date(e,t,n),l=a&&(0,j.$Y)(a),o=s&&(0,j.$Y)(s);return!!(o&&r>o)||!!(l&&r{let{selectedAt:t,minAt:n,maxAt:s,isFutureMode:r,isPastMode:l,isOpen:o,withTimePicker:i,submitButtonLabel:c,secondButtonLabel:d,onClose:m,onSubmit:u,onSecondButtonClick:Z}=e;const v=(0,h.Z)(),g=new Date,p=(0,a.Ye)((()=>r&&!n?new Date:new Date(Math.max(n||0,0))),[r,n]),E=(0,a.Ye)((()=>l&&!s?new Date:new Date(Math.min(s||_e,_e))),[l,s]),C=(0,a.Ye)((()=>t?new Date(t):new Date),[t]),f=(0,P.Z)(o),[b,I,y]=(0,ye.Z)(!1),[N,k]=(0,a.eJ)(C),[S,w]=(0,a.eJ)(new Date(N.getFullYear(),N.getMonth(),1)),[M,T]=(0,a.eJ)(Ve(C.getHours())),[A,L]=(0,a.eJ)(Ve(C.getMinutes())),F=qe(N.getFullYear(),N.getMonth(),N.getDate()),B=S.getFullYear(),$=S.getMonth();(0,a.d4)((()=>{!f&&o&&(k(C),w(new Date(C.getFullYear(),C.getMonth(),1)),i&&(T(Ve(C.getHours())),L(Ve(C.getMinutes()))))}),[C,o,f,i]),(0,a.d4)((()=>{r&&!b&&N.getTime(){l&&!b&&N.getTime()>E.getTime()&&(k(E),T(Ve(E.getHours())),L(Ve(E.getMinutes())))}),[r,l,b,E,p,N]),(0,a.d4)((()=>{if(t){const e=new Date(t);k(e),T(Ve(e.getHours())),L(Ve(e.getMinutes()))}}),[t]);const x=l&&B>=g.getFullYear()&&$>=g.getMonth()||E&&B>=E.getFullYear()&&$>=E.getMonth(),D=r&&B<=g.getFullYear()&&$<=g.getMonth(),{prevMonthGrid:O,currentMonthGrid:U,nextMonthGrid:G}=(0,a.Ye)((()=>function(e,t){const n=[],a=[],s=[],r=new Date;r.setDate(1),r.setMonth(t),r.setFullYear(e);const l=r.getDay(),o=new Date(e,t,0).getDate();for(let e=1;e0)for(let e=1;e<=7-i;e++)s.push(e);return{prevMonthGrid:n,currentMonthGrid:a,nextMonthGrid:s}}(B,$)),[$,B]),J=(0,a.Ye)((()=>c||function(e,t){const n=(0,j.xH)(t,e.code);return n===(0,j.xH)(new Date,e.code)?e("Conversation.ScheduleMessage.SendToday",(0,j.mr)(e,t)):e("Conversation.ScheduleMessage.SendOn",[n,(0,j.mr)(e,t)])}(v,N)),[v,N,c]),z=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return T(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),23)),a=new Date(N.getTime());a.setHours(n),k(a);const s=Ve(n);T(s),e.target.value=s}),[N]),_=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return L(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),59)),a=new Date(N.getTime());a.setMinutes(n),k(a);const s=Ve(n);L(s),e.target.value=s}),[N]);return a.ZP.createElement(Me.Z,{isOpen:o,onClose:m,className:"CalendarModal"},a.ZP.createElement("div",{className:"container"},a.ZP.createElement("div",{className:"month-selector"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:m},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h4",null,v(`lng_month${$+1}`)," ",B),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",disabled:D,onClick:D?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()-1),t}))}},a.ZP.createElement("i",{className:"icon-previous"})),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",disabled:x,onClick:x?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()+1),t}))}},a.ZP.createElement("i",{className:"icon-next"})))),a.ZP.createElement("div",{className:"calendar-wrapper"},a.ZP.createElement("div",{className:"calendar-grid"},Ye.map((e=>a.ZP.createElement("div",{className:"day-button faded weekday"},a.ZP.createElement("span",null,v(e))))),O.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))),U.map((e=>a.ZP.createElement("div",{role:"button",tabIndex:0,onClick:()=>{return t=e,void k((e=>{const n=new Date(e);return n.setDate(t),n.setMonth($),n.setFullYear(B),n}));var t},className:(0,X.Z)("day-button",He(B,$,e,p,E)?"disabled":e?"clickable":"",F===qe(B,$,e)&&"selected")},Boolean(e)&&a.ZP.createElement("span",null,e)))),G.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))))),i&&a.ZP.createElement("div",{className:"timepicker"},a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:M,onChange:z,onFocus:I,onBlur:y}),":",a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:A,onChange:_,onFocus:I,onBlur:y})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(R.Z,{onClick:function(){u(N)}},J),d&&a.ZP.createElement(R.Z,{onClick:Z,isText:!0},d)))})),Ke=(0,a.X$)((0,s.c$)((e=>({selectedAt:e.historyCalendarSelectedAt})))((e=>{let{isOpen:t,selectedAt:n}=e;const{searchMessagesByDate:r,closeHistoryCalendar:l}=(0,s.uC)(),o=(0,a.I4)((e=>{r({timestamp:e.valueOf()/1e3}),l()}),[l,r]),i=(0,h.Z)();return a.ZP.createElement(je,{isOpen:t,selectedAt:n,isPastMode:!0,submitButtonLabel:i("JumpToDate"),onClose:l,onSubmit:o})}))),We=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n,isSchedule:a}=t;const{threadId:s}=(0,p.Bt)(e)||{},{canDeleteForAll:r}=s&&(0,p._k)(e,n,s)||{},l=(0,p.Z1)(e,n.chatId);return{canDeleteForAll:!a&&r,contactName:l&&(0,g.YC)(l.id)?(0,g.Vl)((0,p.dy)(e,(0,g.zX)(l))):void 0,willDeleteForCurrentUserOnly:l&&(0,g.G9)(l)&&!r,willDeleteForAll:l&&(0,g.ZV)(l)}}))((e=>{let{isOpen:t,isSchedule:n,message:r,album:l,canDeleteForAll:o,contactName:i,willDeleteForCurrentUserOnly:c,willDeleteForAll:d,onClose:m}=e;const{deleteMessages:u,deleteScheduledMessages:Z}=(0,s.uC)(),v=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];u({messageIds:e,shouldDeleteForAll:!0}),m()}),[u,r.id,m,l]),P=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];n?Z({messageIds:e}):u({messageIds:e,shouldDeleteForAll:!1}),m()}),[l,r.id,n,m,Z,u]),g=(0,h.Z)();return a.ZP.createElement(Me.Z,{isOpen:t,onClose:m,onEnter:t&&!o?P:void 0,className:"delete",title:g("DeleteSingleMessagesTitle")},a.ZP.createElement("p",null,g("AreYouSureDeleteSingleMessage")),c&&a.ZP.createElement("p",null,g("lng_delete_for_me_chat_hint",1,"i")),d&&a.ZP.createElement("p",null,g("lng_delete_for_everyone_hint",1,"i")),o&&a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:v},i&&(0,Pe.Z)(g("Conversation.DeleteMessagesFor",i)),!i&&g("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:P},g(o?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},g("Cancel")))}))),Qe=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,g.YC)(n),s=(0,p.FM)(e,n),r=(0,p.Z1)(e,n),l=Boolean(r)&&(0,g.eA)(r),o=Boolean(r)&&(0,g.G9)(r),i=Boolean(r)&&(0,g.ZV)(r);return{isPrivateChat:a,isChatWithSelf:s,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:a&&!s||i||o,contactName:r&&(0,g.YC)(r.id)?(0,g.Vl)((0,p.dy)(e,(0,g.zX)(r))):void 0}}))((e=>{let{isOpen:t,messageId:n,chatId:r,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:c,contactName:d,onClose:m}=e;const{pinMessage:u}=(0,s.uC)(),Z=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1}),m()}),[u,r,n,m]),v=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1,isOneSide:!0,isSilent:!0}),m()}),[r,n,m,u]),P=(0,h.Z)();return a.ZP.createElement(Me.Z,{isOpen:t,onClose:m,className:"pin",title:P("PinMessageAlertTitle")},a.ZP.createElement("p",null,P(l?"PinMessageAlertChannel":o||i?"PinMessageAlert":"PinMessageAlertChat")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:v},P("DialogPin")),c&&a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:Z},d?(0,Pe.Z)(P("Conversation.PinMessagesFor",d)):P("Conversation.PinMessageAlert.PinAndNotifyMembers")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},P("Cancel")))}))),et=(0,a.X$)((e=>{let{isOpen:t,pinnedMessagesCount:n=0,onClose:s,onUnpin:r}=e;const l=(0,h.Z)();return a.ZP.createElement(Me.Z,{isOpen:t,onClose:s,className:"unpin-all",title:l("Chat.PanelUnpinAllMessages")},a.ZP.createElement("p",null,l("Chat.UnpinAllMessagesConfirmation",n,"i")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},l("DialogUnpin")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:s},l("Cancel")))}));var tt=n(517);const nt=(0,a.X$)((0,s.c$)(((e,t)=>{let{isSchedule:n}=t;const{messageIds:a}=e.selectedMessages||{},{canDeleteForAll:s}=(0,p.xl)(e),r=(0,p.jr)(e);return{selectedMessageIds:a,canDeleteForAll:!n&&s,contactName:r&&(0,g.YC)(r.id)?(0,g.Vl)((0,p.dy)(e,(0,g.zX)(r))):void 0,willDeleteForCurrentUserOnly:r&&(0,g.G9)(r)&&!s,willDeleteForAll:r&&(0,g.ZV)(r)}}))((e=>{let{isOpen:t,isSchedule:n,selectedMessageIds:r,canDeleteForAll:l,contactName:o,willDeleteForCurrentUserOnly:i,willDeleteForAll:c,onClose:d}=e;const{deleteMessages:m,deleteScheduledMessages:u,exitMessageSelectMode:Z}=(0,s.uC)(),v=(0,P.Z)(t),g=(0,a.I4)((()=>{d(),m({messageIds:r,shouldDeleteForAll:!0})}),[m,r,d]),p=(0,a.I4)((()=>{n?u({messageIds:r}):m({messageIds:r,shouldDeleteForAll:!1}),d()}),[n,d,u,r,m]),E=(0,h.Z)();if((0,a.d4)((()=>{!t&&v&&Z()}),[Z,t,v]),r)return a.ZP.createElement(Me.Z,{isOpen:t,onClose:d,onEnter:l?void 0:p,className:"delete",title:E("Conversation.DeleteManyMessages")},a.ZP.createElement("p",null,E("AreYouSureDeleteFewMessages")),i&&a.ZP.createElement("p",null,"This will delete them just for you, not for other participants in the chat."),c&&a.ZP.createElement("p",null,"This will delete them for everyone in this chat."),l&&a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:g},o?(0,Pe.Z)(E("ChatList.DeleteForEveryone",o)):E("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:p},E(l?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},E("Cancel")))})));var at=n(4434);const st=(0,a.X$)((e=>{let{isOpen:t,messageIds:n,onClose:r}=e;const{reportMessages:l,exitMessageSelectMode:o}=(0,s.uC)(),[i,c]=(0,a.eJ)("spam"),[d,m]=(0,a.eJ)(""),u=()=>{l({messageIds:n,reason:i,description:d}),o(),r()},Z=(0,a.I4)((e=>{c(e)}),[]),v=(0,a.I4)((e=>{m(e.target.value)}),[]),P=(0,h.Z)(),g=[{value:"spam",label:P("lng_report_reason_spam")},{value:"violence",label:P("lng_report_reason_violence")},{value:"pornography",label:P("lng_report_reason_pornography")},{value:"childAbuse",label:P("lng_report_reason_child_abuse")},{value:"copyright",label:P("ReportPeer.ReasonCopyright")},{value:"other",label:P("lng_report_reason_other")}];if(n)return a.ZP.createElement(Me.Z,{isOpen:t,onClose:r,onEnter:t?u:void 0,className:"report",title:P("lng_report_message_title")},a.ZP.createElement(at.Z,{name:"report-message",options:g,onChange:Z,selected:i}),a.ZP.createElement(Te.Z,{label:P("lng_report_reason_description"),value:d,onChange:v}),a.ZP.createElement(R.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:u},P("lng_report_button")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},P("Cancel")))})),rt=(0,a.X$)((0,s.c$)((e=>{const{type:t,chatId:n}=(0,p.Bt)(e)||{},{canDelete:a}=(0,p.xl)(e),s=(0,p.nB)(e),r=(0,p.Nu)(e),{messageIds:l}=e.selectedMessages||{},o=!!n&&(0,p.ku)(e,n,l);return{isSchedule:"scheduled"===t,selectedMessagesCount:(0,p.D7)(e),canDeleteMessages:a,canReportMessages:s,canDownloadMessages:r,selectedMessageIds:l,hasProtectedMessage:o}}))((e=>{let{canPost:t,isActive:n,messageListType:r,isSchedule:l,selectedMessagesCount:o,canDeleteMessages:i,canReportMessages:c,canDownloadMessages:d,hasProtectedMessage:m,selectedMessageIds:u}=e;const{exitMessageSelectMode:Z,openForwardMenuForSelectedMessages:v,downloadSelectedMessages:g}=(0,s.uC)(),[p,E,C]=(0,ye.Z)(),[f,b,I]=(0,ye.Z)();(0,a.d4)((()=>!n||p||f?void 0:(0,tt.Z)({onBackspace:E,onDelete:E,onEsc:Z})),[n,p,f,E,Z]);const y=(0,a.I4)((()=>{g(),Z()}),[g,Z]),N=(0,P.Z)(o||void 0,!0),k=n?o:N,S=(0,h.Z)(),w=S("VoiceOver.Chat.MessagesSelected",k,"i"),M=(0,X.Z)("MessageSelectToolbar",t&&"with-composer",n&&"shown"),T=(e,t,n,s,r)=>a.ZP.createElement("div",{role:"button",tabIndex:0,className:(0,X.Z)("item",s&&"disabled",r&&"destructive"),onClick:s?void 0:n,title:t},a.ZP.createElement("i",{className:`icon-${e}`}));return a.ZP.createElement("div",{className:M},a.ZP.createElement("div",{className:"MessageSelectToolbar-inner"},a.ZP.createElement(R.Z,{color:"translucent",round:!0,onClick:Z,ariaLabel:"Exit select mode"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("span",{className:"MessageSelectToolbar-count",title:w},w),Boolean(o)&&a.ZP.createElement("div",{className:"MessageSelectToolbar-actions"},"scheduled"!==r&&T("forward",S("Chat.ForwardActionHeader"),v,m),c&&T("flag",S("Conversation.ReportMessages"),b),d&&T("download",S("lng_media_download"),y,m),T("delete",S("EditAdminGroupDeleteMessages"),E,!i,!0))),a.ZP.createElement(nt,{isOpen:p,isSchedule:l,onClose:C}),a.ZP.createElement(st,{isOpen:f,onClose:I,messageIds:u}))}))),lt=(0,a.X$)((0,s.c$)((e=>{var t;const{chatId:n,messageId:a}=e.seenByModal||{};return n&&a?{memberIds:null===(t=(0,p.hj)(e,n,a))||void 0===t?void 0:t.seenByUserIds}:{}}))((e=>{let{isOpen:t,memberIds:n}=e;const{openChat:r,closeSeenByModal:l}=(0,s.uC)(),o=(0,h.Z)(),i=(0,a.I4)((e=>{l(),setTimeout((()=>{r({id:e})}),100)}),[l,r]),c=(0,Ie.Z)(n,!0);return a.ZP.createElement(Me.Z,{isOpen:t,onClose:l,className:"narrow",title:"Which users read the message"},a.ZP.createElement("div",{dir:o.isRtl?"rtl":void 0},c&&c.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable scroll-item small-icon",onClick:()=>i(e)},a.ZP.createElement(Fe.Z,{userId:e,noStatusOrTyping:!0}))))),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:l},o("Close")))})));var ot=n(2155),it=n(8198);const ct=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,messageId:n}=e.reactorModal||{},a=t&&n?(0,p.hj)(e,t,n):void 0;return{chatId:t,messageId:n,reactions:null==a?void 0:a.reactions,reactors:null==a?void 0:a.reactors,seenByUserIds:null==a?void 0:a.seenByUserIds}}))((e=>{let{isOpen:t,reactors:n,reactions:r,chatId:o,messageId:i,seenByUserIds:c}=e;const{loadReactors:d,closeReactorListModal:m,openChat:u}=(0,s.uC)(),Z=(0,s.Rd)().users.byId,v=(0,h.Z)(),[P,p,E]=(0,ye.Z)(!1),[C,f]=(0,a.eJ)(void 0),b=n&&r&&n.count>=10&&r.results.length>1,I=(0,a.sO)();(0,a.d4)((()=>{P&&!t&&(E(),f(void 0))}),[P,t,E]);const y=(0,a.I4)((()=>{I.current&&u({id:I.current}),m()}),[m,u]),N=(0,a.I4)((()=>{p()}),[p]),k=(0,a.I4)((e=>{I.current=e,N()}),[N]),S=(0,a.I4)((()=>{d({chatId:o,messageId:i})}),[o,d,i]),w=(0,a.Ye)((()=>null!=n&&n.reactions?(0,me.Tw)(n.reactions.map((e=>e.reaction))):[]),[null==n?void 0:n.reactions]),M=(0,a.Ye)((()=>C?null==n?void 0:n.reactions.filter((e=>e.reaction===C)).map((e=>e.userId)):(0,me.Tw)((null==n?void 0:n.reactions.map((e=>e.userId)).concat(c||[]))||[])),[C,null==n?void 0:n.reactions,c]),[T,A]=(0,Ne.Z)(S,M,n&&void 0===n.nextOffset);return(0,a.d4)((()=>{null==A||A({direction:l.Uq.Backwards})}),[A]),a.ZP.createElement(Me.Z,{isOpen:t&&!P,onClose:N,className:"ReactorListModal narrow",title:v("Reactions"),onCloseAnimationEnd:y},b&&a.ZP.createElement("div",{className:"Reactions"},a.ZP.createElement(R.Z,{className:(0,X.Z)(!C&&"chosen"),size:"tiny",ripple:!0,onClick:()=>f(void 0)},a.ZP.createElement("i",{className:"icon-reaction-filled"}),(null==n?void 0:n.count)&&(0,ot.bi)(n.count)),w.map((e=>{var t;const n=null==r||null===(t=r.results.find((t=>t.reaction===e)))||void 0===t?void 0:t.count;return a.ZP.createElement(R.Z,{className:(0,X.Z)(C===e&&"chosen"),size:"tiny",ripple:!0,onClick:()=>f(e)},a.ZP.createElement(it.Z,{reaction:e,className:"reaction-filter-emoji"}),n&&(0,ot.bi)(n))}))),a.ZP.createElement("div",{dir:v.isRtl?"rtl":void 0},null!=T&&T.length?a.ZP.createElement(Re.Z,{className:"reactor-list custom-scroll",items:T,onLoadMore:A},null==T?void 0:T.map((e=>{var t;const s=Z[e],r=(0,g.Js)(s),l=null==n||null===(t=n.reactions.find((t=>t.userId===e)))||void 0===t?void 0:t.reaction;return a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable reactors-list-item",onClick:()=>k(e)},a.ZP.createElement(ge.Z,{user:s,size:"medium"}),a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,Pe.Z)(r))),l&&a.ZP.createElement(it.Z,{className:"reactors-list-emoji",reaction:l}))}))):a.ZP.createElement(we.Z,null)),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},v("Close")))})));var dt=n(7324),mt=n(7799);const ut=(0,a.X$)((0,s.c$)(((e,t)=>{let{emojiInteraction:n}=t;const a=void 0!==n.animatedEffect&&(0,p.tH)(e,n.animatedEffect);return{effectAnimationId:a?a.id:void 0,localEffectAnimation:!a&&n.animatedEffect&&Object.keys(dt.x).includes(n.animatedEffect)?n.animatedEffect:void 0,isReversed:n.isReversed}}))((e=>{let{emojiInteraction:t,effectAnimationId:n,localEffectAnimation:l,isReversed:o}=e;const{stopActiveEmojiInteraction:c}=(0,s.uC)(),[d,u]=(0,ye.Z)(!1),[h,v]=(0,ye.Z)(!1),P=(0,a.I4)((()=>{u(),setTimeout((()=>{c()}),250)}),[u,c]);(0,a.d4)((()=>(document.addEventListener("touchstart",P),document.addEventListener("touchmove",P),document.addEventListener("mousedown",P),document.addEventListener("wheel",P),()=>{document.removeEventListener("touchstart",P),document.removeEventListener("touchmove",P),document.removeEventListener("mousedown",P),document.removeEventListener("wheel",P)})),[P]),(0,a.bt)((()=>{const e=(0,m.YW)();setTimeout((()=>{P(),e()}),3e3)}),[P]);const g=(0,Z.Z)(`sticker${n}`,!n,r.IU.Lottie),[p,E]=(0,a.eJ)();(0,a.d4)((()=>{l&&(0,dt.Z)(l).then((e=>{E(e)}))}),[l]);const C=(t.startSize||0)/240;return a.ZP.createElement("div",{className:(0,X.Z)("EmojiInteractionAnimation",d&&"hiding",h&&"playing",o&&"reversed"),style:`--scale: ${C}; --start-x: ${t.x}px; --start-y: ${t.y}px;`},a.ZP.createElement(mt.Z,{id:`effect_${n}`,size:240,animationData:p||g,play:h,quality:i.wZ?.5:void 0,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:v}))})));var ht=n(3133),Zt=n(735),vt=n(1470);const Pt=e=>{const t=(0,a.sO)(null),n=(0,a.I4)((n=>{"Enter"===n.key&&t.current===document.activeElement&&e()}),[e]);return(0,a.d4)((()=>(window.addEventListener("keydown",n,!1),()=>window.removeEventListener("keydown",n,!1))),[n]),t};var gt=n(329),pt=n(742);const Et=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),r=s&&(0,g.zX)(s);return{chat:s,user:r?(0,p.dy)(e,r):void 0,isPinned:(0,p.ep)(e,a),isMuted:s?(0,g.i4)(s,(0,p.dZ)(e),(0,p.NJ)(e)):void 0,canChangeFolder:Boolean(null===(n=e.chatFolders.orderedIds)||void 0===n?void 0:n.length)}}))((e=>{let{chatId:t,withUsername:n,onClick:s,chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c}=e;const[d,m,u]=(0,ye.Z)(),[h,Z,v]=(0,ye.Z)(),P=(0,vt.Z)({chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c,handleDelete:m,handleChatFolderChange:Z},!0),p=()=>{s(t)},E=Pt(p);if(r)return a.ZP.createElement(Ae.Z,{className:"chat-item-clickable search-result",onClick:p,contextActions:P,buttonRef:E},(0,g.YC)(t)?a.ZP.createElement(Fe.Z,{userId:t,withUsername:n,avatarSize:"large"}):a.ZP.createElement(Le.Z,{chatId:t,withUsername:n,avatarSize:"large"}),a.ZP.createElement(gt.Z,{isOpen:d,onClose:u,chat:r}),a.ZP.createElement(pt.Z,{isOpen:h,onClose:v,chatId:t}))})));var Ct=n(8781);const ft=(0,G.P2)((e=>e()),6e4,!0),bt=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.topPeers,n=e.users.byId,{recentlyFoundChatIds:a}=e.globalSearch;return{topUserIds:t,usersById:n,recentlyFoundChatIds:a}}))((e=>{let{topUserIds:t,usersById:n,recentlyFoundChatIds:r,onReset:l}=e;const{loadTopUsers:o,loadContactList:i,openChat:c,addRecentlyFoundChatId:d,clearRecentlyFoundChats:m}=(0,s.uC)(),u=(0,a.sO)(null);(0,a.d4)((()=>{ft((()=>{o(),i()}))}),[o,i]),(0,Ct.Z)(u.current,!t);const Z=(0,a.I4)((e=>{c({id:e,shouldReplaceHistory:!0}),l(),setTimeout((()=>{d({id:e})}),250)}),[c,d,l]),v=(0,h.Z)();return a.ZP.createElement("div",{className:"RecentContacts custom-scroll"},t&&a.ZP.createElement("div",{className:"top-peers-section",dir:v.isRtl?"rtl":void 0},a.ZP.createElement("div",{ref:u,className:"top-peers no-selection"},t.map((e=>a.ZP.createElement("div",{className:"top-peer-item",onClick:()=>Z(e),dir:v.isRtl?"rtl":void 0},a.ZP.createElement(ge.Z,{user:n[e]}),a.ZP.createElement("div",{className:"top-peer-name"},(0,Pe.Z)((0,g.Vl)(n[e])||" "))))))),r&&a.ZP.createElement("div",{className:"search-section pt-1"},a.ZP.createElement("h3",{className:"section-heading mt-0 recent-chats-header",dir:v.isRtl?"rtl":void 0},v("Recent"),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",ariaLabel:"Clear recent chats",onClick:m,isRtl:v.isRtl},a.ZP.createElement("i",{className:"icon-close"}))),r.map((e=>a.ZP.createElement(Et,{chatId:e,onClick:Z})))))})));var It=n(9411),yt=n(8033);const Nt=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n);if(!a)return{};const s=(0,g.zX)(a);return{chat:a,lastSyncTime:e.lastSyncTime,...s&&{privateChatUser:(0,p.dy)(e,s)}}}))((e=>{let{message:t,searchQuery:n,chatId:r,chat:l,privateChatUser:o,lastSyncTime:c}=e;const{focusMessage:d}=(0,s.uC)(),m=(0,g.DH)(t),u=(0,Z.Z)((0,g.Ti)(t,"micro")),v=Boolean((0,g.Y5)(t)),P=(0,a.I4)((()=>{d({chatId:r,messageId:t.id})}),[r,d,t.id]),p=(0,h.Z)(),E=Pt(P);if(l)return a.ZP.createElement(Ae.Z,{className:"ChatMessage chat-item-clickable",ripple:!i.wB,onClick:P,buttonRef:E},a.ZP.createElement(ge.Z,{chat:l,user:o,isSavedMessages:null==o?void 0:o.isSelf,lastSyncTime:c}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"info-row"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},(0,Pe.Z)((0,g.U)(p,l,o))),l.isVerified&&a.ZP.createElement(It.Z,null)),a.ZP.createElement("div",{className:"message-date"},a.ZP.createElement(yt.Z,{className:"date"},(0,j.VX)(p,1e3*t.date)))),a.ZP.createElement("div",{className:"subtitle"},a.ZP.createElement("div",{className:"message",dir:"auto"},function(e,t,n,s,r){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:r?"round":void 0}),(0,g.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,y.e)(e,t,!0,s)):(0,y.e)(e,t,void 0,s)}(p,t,u||m,n,v)))))}))),kt=(0,a.X$)((e=>{let{searchDate:t,onSelect:n}=e;const s=(0,a.Ye)((()=>function(e){if(e.match(/^\d{2,4}-\d{2}-\d{2}$/g)){const t=new Date(e);return[{date:t,text:(0,j.xH)(t)}]}const t=[],n=new Date,a=n.getFullYear(),s=n.getTime()>new Date(`${a}-${e}`).getTime()?a:a-1;for(let n=0;n<8;n++){const a=new Date(`${s-n}-${e}`);t.push({date:a,text:(0,j.xH)(a)})}return t}(t)),[t]);return a.ZP.createElement("section",{className:"DateSuggest custom-scroll custom-scroll-x"},s.map((e=>{let{date:t,text:s}=e;return a.ZP.createElement("div",{onClick:()=>n(t),className:"date-item",key:s},a.ZP.createElement("i",{className:"icon-calendar"}),a.ZP.createElement("span",null,s))})))}));var St=n(7262),wt=n(9187);const Mt=(0,G.P2)((e=>e()),500,!0),Tt=(0,a.X$)((0,s.c$)((e=>{var t;const{byId:n}=e.chats,{userIds:a}=e.contactList||{};if(!a)return{chatsById:n};const{currentUserId:s,messages:r,lastSyncTime:l}=e,{fetchingStatus:o,globalResults:i,localResults:c,resultsByType:d}=e.globalSearch,{chatIds:m,userIds:u}=i||{},{chatIds:h,userIds:Z}=c||{},{byChatId:v}=r;return{currentUserId:s,localContactIds:a,localChatIds:h,localUserIds:Z,globalChatIds:m,globalUserIds:u,foundIds:null==d||null===(t=d.text)||void 0===t?void 0:t.foundIds,globalMessagesByChatId:v,chatsById:n,fetchingStatus:o,lastSyncTime:l}}))((e=>{let{searchQuery:t,searchDate:n,dateSearchQuery:r,currentUserId:o,localContactIds:c,localChatIds:d,localUserIds:m,globalChatIds:u,globalUserIds:Z,foundIds:v,globalMessagesByChatId:P,chatsById:p,fetchingStatus:E,lastSyncTime:C,onReset:f,onSearchDateSelect:b}=e;const{openChat:I,addRecentlyFoundChatId:N,searchMessagesGlobal:k,setGlobalSearchChatId:S}=(0,s.uC)(),w=(0,h.Z)(),[M,T]=(0,a.eJ)(!1),[R,A]=(0,a.eJ)(!1),L=(0,a.I4)((e=>{let{direction:n}=e;C&&n===l.Uq.Backwards&&Mt((()=>{k({type:"text",query:t})}))}),[C,k,t]),F=(0,a.I4)((e=>{I({id:e,shouldReplaceHistory:!0}),e!==o&&N({id:e}),i.wB||f()}),[o,I,N,f]),B=(0,a.I4)((e=>{S({id:e})}),[S]),$=(0,a.Ye)((()=>{if(!t||t.startsWith("@")&&t.length<2)return Zt.D;const e=[...o?[o]:[],...c||[]],n=(0,s.Rd)().users.byId,a=(0,g.kK)(e,n,t,o,w("SavedMessages"));return[...(0,g.ih)((0,me.Tw)([...a||[],...d||[],...m||[]]),p,void 0,o?[o]:void 0)]}),[t,o,c,w,d,m,p]),x=(0,a.Ye)((()=>!t||t.length<4||!u||!Z?Zt.D:(0,g.ih)((0,me.Tw)([...u,...Z]),p,!0)),[p,u,Z,t]),D=(0,a.Ye)((()=>(t||n)&&v&&0!==v.length?v.map((e=>{var t;const[n,a]=e.split("_");return null==P||null===(t=P[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):Zt.D),[v,P,t,n]),O=(0,a.I4)((()=>{T(!M)}),[M]),U=(0,a.I4)((()=>{A(!R)}),[R]),G=E&&!E.chats&&!E.messages&&!$.length&&!x.length&&!D.length;return t||n?a.ZP.createElement(Re.Z,{className:"LeftSearch custom-scroll",items:D,onLoadMore:L,noScrollRestoreOnTop:!0,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(kt,{searchDate:r,onSelect:b})),G&&a.ZP.createElement(St.Z,{text:w("ChatList.Search.NoResults"),description:w("ChatList.Search.NoResultsDescription")}),Boolean($.length)&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar",dir:w.isRtl?"rtl":void 0},$.map((e=>a.ZP.createElement(wt.Z,{chatOrUserId:e,onClick:B,clickArg:e})))),Boolean($.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:w.isRtl?"auto":void 0},$.length>5&&a.ZP.createElement(yt.Z,{onClick:O},w(M?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),w("DialogList.SearchSectionDialogs")),$.map(((e,t)=>{if(M||!(t>=5))return a.ZP.createElement(Et,{chatId:e,onClick:F})}))),Boolean(x.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:w.isRtl?"auto":void 0},x.length>5&&a.ZP.createElement(yt.Z,{onClick:U},w(R?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),w("DialogList.SearchSectionGlobal")),x.map(((e,t)=>{if(R||!(t>=5))return a.ZP.createElement(Et,{chatId:e,withUsername:!0,onClick:F})}))),Boolean(D.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:w.isRtl?"auto":void 0},w("SearchMessages")),D.map((function(e){const n=(0,y.e)(w,e),s=p[e.chatId];if(n&&s)return a.ZP.createElement(Nt,{chatId:e.chatId,message:e,searchQuery:t})})))):a.ZP.createElement(bt,{onReset:f})}))),Rt=(0,G.P2)((e=>e()),500,!0),At=(0,a.X$)((0,s.c$)((e=>{const{byId:t}=e.chats,{currentUserId:n,messages:{byChatId:a},lastSyncTime:s}=e,{fetchingStatus:r,resultsByType:l}=e.globalSearch,{foundIds:o}=(null==l?void 0:l.text)||{};return{currentUserId:n,foundIds:o,globalMessagesByChatId:a,chatsById:t,fetchingStatus:r,lastSyncTime:s}}))((e=>{let{searchQuery:t,currentUserId:n,dateSearchQuery:r,foundIds:o,globalMessagesByChatId:i,chatsById:c,fetchingStatus:d,lastSyncTime:m,onSearchDateSelect:u}=e;const{searchMessagesGlobal:Z}=(0,s.uC)(),v=(0,h.Z)(),P=(0,a.I4)((e=>{let{direction:a}=e;m&&a===l.Uq.Backwards&&Rt((()=>{Z({type:"text",query:t,chatId:n})}))}),[n,m,Z,t]),g=(0,a.Ye)((()=>o&&0!==o.length?o.map((e=>{var t;const[n,a]=e.split("_");return null==i||null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):Zt.D),[o,i]),p=d&&!d.chats&&!d.messages&&!g.length;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content custom-scroll chat-list",items:g,onLoadMore:P,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(kt,{searchDate:r,onSelect:u})),p&&a.ZP.createElement(St.Z,{text:v("ChatList.Search.NoResults"),description:v("ChatList.Search.NoResultsDescription")}),g.map((function(e){const n=(0,y.e)(v,e),s=c[e.chatId];if(n&&s)return a.ZP.createElement(Nt,{chatId:e.chatId,message:e,searchQuery:t})}))))})));function Lt(e){return(t,n)=>{var a,s;const{byId:r}=t.chats,{byId:l}=t.users,{fetchingStatus:o,resultsByType:i,chatId:c}=t.globalSearch,d="audio"!==e?e:null!=n&&n.isVoice?"voice":"audio",{byChatId:m}=t.messages,u=null==i||null===(a=i[d])||void 0===a?void 0:a.foundIds,h=t.activeDownloads.byChatId;return{theme:(0,p.Pu)(t),isLoading:void 0===u||!!o&&Boolean(o.chats||o.messages),chatsById:r,usersById:l,globalMessagesByChatId:m,foundIds:u,searchChatId:c,activeDownloads:h,isChatProtected:c?null===(s=(0,p.Z1)(t,c))||void 0===s?void 0:s.isProtected:void 0,lastSyncTime:t.lastSyncTime}}}var Ft=n(7891),Bt=n(3657),$t=n(3709);const xt="media",Dt=(0,G.P2)((e=>e()),500,!0),Ot=(0,a.X$)((0,s.c$)(Lt(xt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,globalMessagesByChatId:i,foundIds:c,lastSyncTime:d,isChatProtected:m}=e;const{searchMessagesGlobal:u,openMediaViewer:Z}=(0,s.uC)(),v=(0,a.sO)(null),P=(0,h.Z)(),{observe:g}=(0,Bt.S1)({rootRef:v,throttleMs:500}),p=(0,a.I4)((e=>{let{direction:a}=e;d&&a===l.Uq.Backwards&&Dt((()=>{u({type:xt,query:t,chatId:n})}))}),[d,u,t,n]),E=(0,a.Ye)((()=>c&&i?c.map((e=>{var t;const[n,a]=e.split("_");return null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):Zt.D),[i,c]),C=(0,a.I4)(((e,t)=>{Z({chatId:t,messageId:e,origin:l.bZ.SearchResult})}),[Z]),f=(0,Ft.Z)([t],o.Y)&&!r,b=f&&c&&c.length>0&&!t,I=f&&c&&c.length>0&&t,y=(0,X.Z)("search-content custom-scroll",I&&"chat-list");return a.ZP.createElement("div",{ref:v,className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:y,items:E,itemSelector:t?".ListItem":".Media",onLoadMore:p,noFastList:!0},!f&&a.ZP.createElement(we.Z,null),f&&(!c||0===c.length)&&a.ZP.createElement(St.Z,{text:P("ChatList.Search.NoResults"),description:P("ChatList.Search.NoResultsDescription")}),b&&a.ZP.createElement("div",{className:"media-list",dir:P.isRtl?"rtl":void 0},E.map((e=>a.ZP.createElement($t.Z,{key:e.id,idPrefix:"search-media",message:e,isProtected:m||e.isProtected,observeIntersection:g,onClick:C})))),I&&E.map((e=>a.ZP.createElement(Nt,{key:e.id,chatId:e.chatId,message:e})))))})));var Ut=n(91),Gt=n(5418);const Jt="links",Xt=(0,G.P2)((e=>e()),500,!0),zt=(0,a.X$)((0,s.c$)(Lt(Jt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,lastSyncTime:u,isChatProtected:Z}=e;const{searchMessagesGlobal:v,focusMessage:P}=(0,s.uC)(),g=(0,a.sO)(null),p=(0,h.Z)(),{observe:E}=(0,Bt.S1)({rootRef:g,throttleMs:500}),C=(0,a.I4)((e=>{let{direction:a}=e;u&&a===l.Uq.Backwards&&Xt((()=>{v({type:Jt,query:t,chatId:n})}))}),[u,v,t,n]),f=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_");return null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):Zt.D),[d,m]),b=(0,a.I4)(((e,t)=>{P({chatId:t,messageId:e})}),[P]),I=(0,Ft.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:g,className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content documents-list custom-scroll",items:f,onLoadMore:C,noFastList:!0},!I&&a.ZP.createElement(we.Z,null),I&&(!m||0===m.length)&&a.ZP.createElement(St.Z,{text:p("ChatList.Search.NoResults"),description:p("ChatList.Search.NoResultsDescription")}),I&&m&&m.length>0&&f.map(((e,t)=>{const n=0===t||(0,j.kj)(e.date)!==(0,j.kj)(f[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",dir:p.isRtl?"rtl":void 0,key:e.id},n&&a.ZP.createElement("p",{className:"section-heading",dir:p.isRtl?"rtl":void 0},(0,j.np)(p,new Date(1e3*e.date))),a.ZP.createElement(Gt.Z,{key:e.id,message:e,senderTitle:(0,Ut.F)(p,e,i,c),isProtected:Z||e.isProtected,observeIntersection:E,onMessageClick:b}))}))))})));var _t=n(2535);const Yt="documents",Ht=(0,G.P2)((e=>e()),500,!0),Vt=(0,a.X$)((0,s.c$)(Lt(Yt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,activeDownloads:u,lastSyncTime:Z}=e;const{searchMessagesGlobal:v,focusMessage:P}=(0,s.uC)(),p=(0,a.sO)(null),E=(0,h.Z)(),{observe:C}=(0,Bt.S1)({rootRef:p,throttleMs:500}),f=(0,a.I4)((e=>{let{direction:a}=e;Z&&a===l.Uq.Backwards&&Ht((()=>{v({type:Yt,query:t,chatId:n})}))}),[Z,v,t,n]),b=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_"),s=null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)];return s&&(0,g.aE)(s)?s:void 0})).filter(Boolean):Zt.D),[d,m]),I=(0,a.I4)(((e,t)=>{P({chatId:t,messageId:e})}),[P]),y=(0,Ft.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:p,className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content documents-list custom-scroll",items:b,onLoadMore:f,noFastList:!0},!y&&a.ZP.createElement(we.Z,null),y&&(!m||0===m.length)&&a.ZP.createElement(St.Z,{text:E("ChatList.Search.NoResults"),description:E("ChatList.Search.NoResultsDescription")}),y&&m&&m.length>0&&b.map(((e,t)=>{var n;const s=0===t||(0,j.kj)(e.date)!==(0,j.kj)(b[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},s&&a.ZP.createElement("p",{className:"section-heading"},(0,j.np)(E,new Date(1e3*e.date))),a.ZP.createElement(_t.Z,{message:e,withDate:!0,datetime:e.date,smaller:!0,sender:(0,Ut.F)(E,e,i,c),className:"scroll-item",isDownloading:null===(n=u[e.chatId])||void 0===n?void 0:n.includes(e.id),observeIntersection:C,onDateClick:I}))}))))})));var qt=n(4752);const jt=(0,G.P2)((e=>e()),500,!0),Kt=(0,a.X$)((0,s.c$)(Lt("audio"))((e=>{let{theme:t,isVoice:n,searchQuery:r,searchChatId:i,isLoading:c,chatsById:d,usersById:m,globalMessagesByChatId:u,foundIds:Z,lastSyncTime:v,activeDownloads:P}=e;const{searchMessagesGlobal:g,focusMessage:p,openAudioPlayer:E}=(0,s.uC)(),C=(0,h.Z)(),f=n?"voice":"audio",b=(0,a.I4)((e=>{let{direction:t}=e;v&&t===l.Uq.Backwards&&jt((()=>{g({type:f,query:r,chatId:i})}))}),[f,v,g,r,i]),I=(0,a.Ye)((()=>Z&&u?Z.map((e=>{var t;const[n,a]=e.split("_");return null===(t=u[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):Zt.D),[u,Z]),y=(0,a.I4)(((e,t)=>{p({chatId:t,messageId:e})}),[p]),N=(0,a.I4)(((e,t)=>{E({chatId:t,messageId:e})}),[E]),k=(0,Ft.Z)([r],o.Y)&&!c;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Re.Z,{className:"search-content documents-list custom-scroll",items:I,onLoadMore:b,noFastList:!0},!k&&a.ZP.createElement(we.Z,null),k&&(!Z||0===Z.length)&&a.ZP.createElement(St.Z,{text:C("ChatList.Search.NoResults"),description:C("ChatList.Search.NoResultsDescription")}),k&&Z&&Z.length>0&&I.map(((e,n)=>{var s;const r=0===n||(0,j.kj)(e.date)!==(0,j.kj)(I[n-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},r&&a.ZP.createElement("p",{className:"section-heading",dir:C.isRtl?"rtl":void 0},(0,j.np)(C,new Date(1e3*e.date))),a.ZP.createElement(qt.Z,{key:e.id,theme:t,message:e,origin:l.Cr.Search,senderTitle:(0,Ut.F)(C,e,d,m),date:e.date,lastSyncTime:v,className:"scroll-item",onPlay:N,onDateClick:y,isDownloading:null===(s=P[e.chatId])||void 0===s?void 0:s.includes(e.id)}))}))))}))),Wt=[{type:l.nJ.ChatList,title:"SearchAllChatsShort"},{type:l.nJ.Media,title:"SharedMediaTab2"},{type:l.nJ.Links,title:"SharedLinksTab2"},{type:l.nJ.Files,title:"SharedFilesTab2"},{type:l.nJ.Music,title:"SharedMusicTab2"},{type:l.nJ.Voice,title:"SharedVoiceTab2"}],Qt=[{type:l.nJ.ChatList,title:"All Messages"},...Wt.slice(1)],en=Object.keys(l.nJ).length/2,tn=(0,a.X$)((0,s.c$)((e=>{const{currentContent:t,chatId:n}=e.globalSearch;return{currentContent:t,chatId:n}}))((e=>{let{searchQuery:t,searchDate:n,isActive:r,currentContent:o=l.nJ.ChatList,chatId:i,onReset:c}=e;const{setGlobalSearchContent:d,setGlobalSearchDate:m}=(0,s.uC)(),Z=(0,h.Z)(),[v,P]=(0,a.eJ)(o),g=(0,a.Ye)((()=>(0,j.xk)(t)),[t]),p=(0,a.I4)((e=>{const t=Wt[e];d({content:t.type}),P(e)}),[d]),E=(0,a.I4)((e=>{m({date:e.getTime()/1e3})}),[m]);(0,u.ZP)(r,c,void 0,void 0,!0);const C=(0,a.sO)(null),f=(0,ke.Z)(C,r,void 0,".ListItem-button",!0);return a.ZP.createElement("div",{className:"LeftSearch",ref:C,onKeyDown:f},a.ZP.createElement(ht.Z,{activeTab:v,tabs:i?Qt:Wt,onSwitchTab:p}),a.ZP.createElement(L.Z,{name:Z.isRtl?"slide-optimized-rtl":"slide-optimized",renderCount:en,activeKey:o},(()=>{switch(o){case l.nJ.ChatList:return i?a.ZP.createElement(At,{searchQuery:t,dateSearchQuery:g,onReset:c,onSearchDateSelect:E}):a.ZP.createElement(Tt,{searchQuery:t,searchDate:n,dateSearchQuery:g,onReset:c,onSearchDateSelect:E});case l.nJ.Media:return a.ZP.createElement(Ot,{searchQuery:t});case l.nJ.Links:return a.ZP.createElement(zt,{searchQuery:t});case l.nJ.Files:return a.ZP.createElement(Vt,{searchQuery:t});case l.nJ.Music:return a.ZP.createElement(Kt,{key:"audio",searchQuery:t});case l.nJ.Voice:return a.ZP.createElement(Kt,{key:"voice",isVoice:!0,searchQuery:t});default:return}})))})));var nn=n(1090);const an={currentPassword:"",password:"",hint:"",email:""},sn=(e,t)=>{switch(t.type){case"setCurrentPassword":return{...e,currentPassword:t.payload};case"setPassword":return{...e,password:t.payload};case"setHint":return{...e,hint:t.payload};case"setEmail":return{...e,email:t.payload};case"reset":return an;default:return e}},rn=(0,a.X$)((e=>{let{currentScreen:t,editedFolderId:n,onReset:r,onSaveFilter:o,onScreenSelect:c}=e;const{signOut:d,deleteChatFolder:m}=(0,s.uC)(),[u,Z]=(0,a.eJ)(!1),[v,P]=(0,a.eJ)(!1),g=(0,a.I4)((()=>{Z(!0)}),[]),p=(0,a.I4)((()=>{Z(!1)}),[]),E=(0,a.I4)((()=>{P(!0)}),[]),C=(0,a.I4)((()=>{P(!1)}),[]),f=(0,a.I4)((()=>{p(),d()}),[p,d]),b=(0,a.I4)((()=>{C(),m({id:n}),r()}),[n,C,m,r]),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(R.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]),y=(0,h.Z)();return a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:r,ariaLabel:y("AccDescrGoBack")},a.ZP.createElement("i",{className:"icon-arrow-left"})),function(){switch(t){case l.MT.EditProfile:return a.ZP.createElement("h3",null,y("lng_settings_information"));case l.MT.General:return a.ZP.createElement("h3",null,y("General"));case l.MT.QuickReaction:return a.ZP.createElement("h3",null,y("DoubleTapSetting"));case l.MT.Notifications:return a.ZP.createElement("h3",null,y("Notifications"));case l.MT.DataStorage:return a.ZP.createElement("h3",null,y("DataSettings"));case l.MT.Privacy:return a.ZP.createElement("h3",null,y("PrivacySettings"));case l.MT.Language:return a.ZP.createElement("h3",null,y("Language"));case l.MT.GeneralChatBackground:return a.ZP.createElement("h3",null,y("ChatBackground"));case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement("h3",null,y("SetColor"));case l.MT.PrivacyPhoneNumber:return a.ZP.createElement("h3",null,y("PrivacyPhone"));case l.MT.PrivacyLastSeen:return a.ZP.createElement("h3",null,y("PrivacyLastSeen"));case l.MT.PrivacyProfilePhoto:return a.ZP.createElement("h3",null,y("Privacy.ProfilePhoto"));case l.MT.PrivacyForwarding:return a.ZP.createElement("h3",null,y("PrivacyForwards"));case l.MT.PrivacyGroupChats:return a.ZP.createElement("h3",null,y("AutodownloadGroupChats"));case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement("h3",null,y("AlwaysShareWith"));case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement("h3",null,y("NeverShareWith"));case l.MT.PrivacyActiveSessions:return a.ZP.createElement("h3",null,y("SessionsTitle"));case l.MT.PrivacyBlockedUsers:return a.ZP.createElement("h3",null,y("BlockedUsers"));case l.MT.TwoFaDisabled:case l.MT.TwoFaEnabled:return a.ZP.createElement("h3",null,y("TwoStepVerification"));case l.MT.TwoFaNewPassword:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseReEnterPassword"));case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement("h3",null,y("PasswordHint"));case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement("h3",null,y("RecoveryEmailTitle"));case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement("h3",null,"Recovery Email Code");case l.MT.TwoFaCongratulations:return a.ZP.createElement("h3",null,y("TwoStepVerificationPasswordSet"));case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.Folders:return a.ZP.createElement("h3",null,y("Filters"));case l.MT.FoldersCreateFolder:return a.ZP.createElement("h3",null,y("FilterNew"));case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("FilterEdit")),n&&a.ZP.createElement(F.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(B.Z,{icon:"delete",destructive:!0,onClick:E},y("Delete"))));case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},t===l.MT.FoldersIncludedChats||t===l.MT.FoldersIncludedChatsFromChatList?a.ZP.createElement("h3",null,y("FilterInclude")):a.ZP.createElement("h3",null,y("FilterExclude")),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",className:"color-primary",onClick:o,ariaLabel:y("AutoDeleteConfirm")},a.ZP.createElement("i",{className:"icon-check"})));default:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("SETTINGS")),a.ZP.createElement(R.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",onClick:()=>c(l.MT.EditProfile),ariaLabel:y("lng_settings_information")},a.ZP.createElement("i",{className:"icon-edit"})),a.ZP.createElement(F.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(B.Z,{icon:"logout",onClick:g},y("LogOutTitle"))))}}(),a.ZP.createElement(Xe.Z,{isOpen:u,onClose:p,text:y("lng_sure_logout"),confirmLabel:y("AccountSettings.Logout"),confirmHandler:f,confirmIsDestructive:!0}),a.ZP.createElement(Xe.Z,{isOpen:v,onClose:C,text:y("FilterDeleteAlert"),confirmLabel:y("Delete"),confirmHandler:b,confirmIsDestructive:!0}))}));var ln=n(787),on=n(180);const cn=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t,lastSyncTime:n}=e;return{currentUser:t?(0,p.dy)(e,t):void 0,lastSyncTime:n}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,currentUser:o,lastSyncTime:i}=e;const{loadProfilePhotos:c}=(0,s.uC)(),d=(0,h.Z)(),m=null==o?void 0:o.id;return(0,a.d4)((()=>{m&&i&&c({profileId:m})}),[i,m,c]),(0,u.ZP)(t,r,n,l.MT.Main),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-main-menu"},o&&a.ZP.createElement(ln.Z,{userId:o.id,forceShowSelf:!0}),o&&a.ZP.createElement(on.Z,{chatOrUserId:o.id,forceShowSelf:!0}),a.ZP.createElement(Ae.Z,{icon:"settings",onClick:()=>n(l.MT.General)},d("Telegram.GeneralSettingsViewController")),a.ZP.createElement(Ae.Z,{icon:"unmute",onClick:()=>n(l.MT.Notifications)},d("Notifications")),a.ZP.createElement(Ae.Z,{icon:"lock",onClick:()=>n(l.MT.Privacy)},d("PrivacySettings")),a.ZP.createElement(Ae.Z,{icon:"data",onClick:()=>n(l.MT.DataStorage)},d("DataSettings")),a.ZP.createElement(Ae.Z,{icon:"folder",onClick:()=>n(l.MT.Folders)},d("Filters")),a.ZP.createElement(Ae.Z,{icon:"language",onClick:()=>n(l.MT.Language)},d("Language"))))})));var dn=n(710),mn=n(1151);const un="https://t.me/",hn=/https:\/\/t\.me\/?/i,Zn=/^([a-zA-Z0-9_]+)$/,vn=(0,G.Ds)((e=>e()),250,!1),Pn=(0,a.X$)((e=>{let{currentUsername:t,asLink:n,isLoading:s,isUsernameAvailable:r,checkUsername:l,onChange:o}=e;const[i,c]=(0,a.eJ)(t||""),d=(0,h.Z)(),m=n?"SetUrl":"Username",u=d(n?"SetUrlPlaceholder":"Username"),[Z,v]=(0,a.Ye)((()=>i.length?i.length<5?[void 0,`${u} is too short`]:i.length>32?[void 0,`${u} is too long`]:Zn.test(i)?void 0===r?[]:[r?d(`${m}Available`,"Username"):void 0,!1===r?d(`${m}InUse`):void 0]:[void 0,`${u} contains invalid characters`]:[]),[i,r,d,m,u]);(0,a.d4)((()=>{c(t||"")}),[n,t]);const P=(0,a.I4)((e=>{const t=e.target.value.trim().replace(hn,"");c(t),e.target.value=`${n?un:""}${t}`;const a=function(e){return e.length>=5&&e.length<=32&&Zn.test(e)}(t);a&&vn((()=>{l({username:t})})),o&&o(!!a&&t)}),[n,l,o]);return a.ZP.createElement(Te.Z,{value:`${n?un:""}${i}`,onChange:P,label:u,error:v,success:Z,readOnly:s})})),gn=(0,G.P2)((e=>e()),6e4,!0),pn="Please provide your first name",En="Bio can' be longer than 70 characters",Cn=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e,{progress:n,isUsernameAvailable:a}=e.profileEdit||{},s=t?(0,p.dy)(e,t):void 0;if(!s)return{progress:n,isUsernameAvailable:a};const{firstName:r,lastName:l,username:o,fullInfo:i}=s,{bio:c}=i||{};return{currentAvatarHash:(0,g.RT)(s),currentFirstName:r,currentLastName:l,currentBio:c,currentUsername:o,progress:n,isUsernameAvailable:a}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:o,currentAvatarHash:i,currentFirstName:c,currentLastName:d,currentBio:m,currentUsername:v,progress:P,isUsernameAvailable:g}=e;const{loadCurrentUser:p,updateProfile:E,checkUsername:C}=(0,s.uC)(),f=(0,h.Z)(),[b,I]=(0,a.eJ)(!1),[y,N]=(0,a.eJ)(!1),[k,S]=(0,a.eJ)(),[w,M]=(0,a.eJ)(),[T,R]=(0,a.eJ)(c||""),[A,L]=(0,a.eJ)(d||""),[F,B]=(0,a.eJ)(m||""),[$,x]=(0,a.eJ)(v||""),D=(0,Z.Z)(i,!1,r.IU.BlobUrl),O=P===l.rN.InProgress,U=!1===$,G=(0,a.Ye)((()=>!U&&(Boolean(w)||y||!0===g)),[w,y,U,g]);(0,u.ZP)(t,o,n,l.MT.EditProfile),(0,a.d4)((()=>{gn((()=>{p()}))}),[p]),(0,a.d4)((()=>{M(void 0)}),[D]),(0,a.d4)((()=>{R(c||""),L(d||""),B(m||"")}),[c,d,m]),(0,a.d4)((()=>{x(v||"")}),[v]),(0,a.d4)((()=>{P===l.rN.Complete&&(N(!1),I(!1),S(void 0))}),[P]);const X=(0,a.I4)((e=>{M(e)}),[]),z=(0,a.I4)((e=>{R(e.target.value),N(!0)}),[]),_=(0,a.I4)((e=>{L(e.target.value),N(!0)}),[]),Y=(0,a.I4)((e=>{B(e.target.value),N(!0)}),[]),H=(0,a.I4)((e=>{x(e),I(!0)}),[]),V=(0,a.I4)((()=>{const e=T.trim(),t=A.trim(),n=F.trim();e.length?n.length>70?S(En):E({photo:w,...y&&{firstName:e,lastName:t,bio:n},...b&&{username:$}}):S(pn)}),[w,T,A,F,y,$,b,E]);return a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-edit-profile"},a.ZP.createElement(dn.Z,{currentAvatarBlobUrl:D,onChange:X,title:"Edit your profile photo",disabled:O}),a.ZP.createElement(Te.Z,{value:T,onChange:z,label:f("FirstName"),disabled:O,error:k===pn?k:void 0}),a.ZP.createElement(Te.Z,{value:A,onChange:_,label:f("LastName"),disabled:O}),a.ZP.createElement(Te.Z,{value:F,onChange:Y,label:f("UserBio"),disabled:O,error:k===En?k:void 0}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,Pe.Z)(f("lng_settings_about_bio"),["br","simple_markdown"]))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:f.isRtl?"rtl":void 0},f("Username")),a.ZP.createElement(Pn,{currentUsername:$||"",isLoading:O,isUsernameAvailable:g,checkUsername:C,onChange:H}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,Pe.Z)(f("UsernameHelp"),["br","simple_markdown"])),$&&a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},f("lng_username_link"),a.ZP.createElement("br",null),a.ZP.createElement("span",{className:"username-link"},"https://t.me/",$)))),a.ZP.createElement(mn.Z,{isShown:G,onClick:V,disabled:O,ariaLabel:"Save changes"},O?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))})));var fn=n(4605),bn=n(8051);const In=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e.settings.byKey,["canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb"])))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,canAutoLoadPhotoFromContacts:i,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:d,canAutoLoadPhotoInChannels:m,canAutoLoadVideoFromContacts:Z,canAutoLoadVideoInPrivateChats:v,canAutoLoadVideoInGroups:P,canAutoLoadVideoInChannels:g,canAutoLoadFileFromContacts:p,canAutoLoadFileInPrivateChats:E,canAutoLoadFileInGroups:C,canAutoLoadFileInChannels:f,canAutoPlayGifs:b,canAutoPlayVideos:I,autoLoadFileMaxSizeMb:y}=e;const{setSettingOption:N}=(0,s.uC)(),k=(0,h.Z)();(0,u.ZP)(t,r,n,l.MT.General);const S=(0,a.I4)((e=>k("AutodownloadSizeLimitUpTo",k("FileSize.MB",String(o.by[e]),"i"))),[k]),w=(0,a.I4)((e=>{N({autoLoadFileMaxSizeMb:o.by[e]})}),[N]);function M(e,t,n,s,r,l){return a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},e),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.Contacts"),checked:n,onCheck:e=>N({[`canAutoLoad${t}FromContacts`]:e})}),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.PrivateChats"),checked:s,onCheck:e=>N({[`canAutoLoad${t}InPrivateChats`]:e})}),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.GroupChats"),checked:r,onCheck:e=>N({[`canAutoLoad${t}InGroups`]:e})}),a.ZP.createElement(fn.Z,{label:k("AutoDownloadSettings.Channels"),checked:l,onCheck:e=>N({[`canAutoLoad${t}InChannels`]:e})}),"File"===t&&function(){const e=o.by.indexOf(y);return a.ZP.createElement("div",{className:"pt-5"},a.ZP.createElement(bn.Z,{label:k("AutoDownloadMaxFileSize"),min:0,max:5,value:-1!==e?e:2,renderValue:S,onChange:w}))}())}return a.ZP.createElement("div",{className:"settings-content custom-scroll"},M(k("AutoDownloadPhotosTitle"),"Photo",i,c,d,m),M(k("AutoDownloadVideosTitle"),"Video",Z,v,P,g),M("Auto-download files","File",p,E,C,f),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("AutoplayMedia")),a.ZP.createElement(fn.Z,{label:k("GifsTab2"),checked:b,onCheck:e=>N({canAutoPlayGifs:e})}),a.ZP.createElement(fn.Z,{label:k("DataAndStorage.Autoplay.Videos"),checked:I,onCheck:e=>N({canAutoPlayVideos:e})})))})));var yn=n(5616);const Nn=(0,G.P2)((e=>e()),6e4,!0),kn=(0,a.X$)((0,s.c$)((e=>{const{orderedIds:t,byId:n,recommended:a}=e.chatFolders;return{orderedFolderIds:t,foldersById:n,recommendedChatFolders:a}}))((e=>{let{isActive:t,onCreateFolder:n,onEditFolder:r,onScreenSelect:i,onReset:c,orderedFolderIds:d,foldersById:m,recommendedChatFolders:Z}=e;const{loadRecommendedChatFolders:v,addChatFolder:P,showDialog:p}=(0,s.uC)(),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(!1),I=(0,a.I4)((()=>b(!0)),[]);(0,a.d4)((()=>{E||(0,dt.Z)("FoldersAll").then(C)}),[E]),(0,a.d4)((()=>{Nn((()=>{v()}))}),[v]);const y=(0,a.I4)((()=>{Object.keys(m).length>=10?p({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):n()}),[m,p,n]),N=(0,h.Z)();(0,u.ZP)(t,c,i,l.MT.Folders);const k=(0,yn.mE)(),S=(0,a.Ye)((()=>{if(d)return d.map((e=>{const t=m[e];return{id:t.id,title:t.title,subtitle:(0,g.SB)(N,t,k[t.id])}}))}),[d,m,N,k]),w=(0,a.I4)((e=>{Object.keys(m).length>=10?p({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):P({folder:e})}),[m,P,p]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},E&&a.ZP.createElement(mt.Z,{id:"settingsFoldersMain",size:o.ku,animationData:E,play:f,noLoop:!0,onLoad:I})),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},N("CreateNewFilterInfo")),a.ZP.createElement(R.Z,{className:"with-icon mb-2",color:"primary",size:"smaller",pill:!0,fluid:!0,onClick:y,isRtl:N.isRtl},a.ZP.createElement("i",{className:"icon-add"}),N("CreateNewFilter"))),a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:N.isRtl?"rtl":void 0},N("Filters")),null!=S&&S.length?S.map((e=>a.ZP.createElement(Ae.Z,{className:"mb-2 no-icon",narrow:!0,multiline:!0,onClick:()=>r(m[e.id])},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.subtitle)))):S&&!S.length?a.ZP.createElement("p",{className:"settings-item-description my-4",dir:"auto"},"You have no folders yet."):a.ZP.createElement(we.Z,null)),Z&&Boolean(Z.length)&&a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:N.isRtl?"rtl":void 0},N("FilterRecommended")),Z.map((e=>a.ZP.createElement(Ae.Z,{className:"mb-2",narrow:!0,onClick:()=>w(e)},a.ZP.createElement("div",{className:"settings-folders-recommended-item"},a.ZP.createElement("div",{className:"multiline-item"},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.description)),a.ZP.createElement(R.Z,{className:"px-3",color:"primary",size:"tiny",pill:!0,fluid:!0,isRtl:N.isRtl},N("Add"))))))))})));var Sn=n(3455);const wn=e=>{let{count:t,itemName:n,itemPluralName:s,isLoading:r,onClick:l}=e;const o=(0,h.Z)();return a.ZP.createElement(R.Z,{className:"ShowMoreButton",color:"translucent",size:"smaller",isText:!0,isLoading:r,isRtl:o.isRtl,onClick:l},a.ZP.createElement("i",{className:"icon-down"}),"Show ",t," more ",t>1?s||`${n}s`:n)},Mn="Please provide a title for this folder.",Tn="ChatList.Filter.Error.Empty",Rn=(0,a.X$)((0,s.c$)((e=>{const{listIds:t}=e.chats;return{loadedActiveChatIds:t.active,loadedArchivedChatIds:t.archived}}))((e=>{let{state:t,dispatch:n,onAddIncludedChats:r,onAddExcludedChats:i,isActive:c,onScreenSelect:d,onReset:m,onBack:Z,loadedActiveChatIds:v,loadedArchivedChatIds:P}=e;const{editChatFolder:p,addChatFolder:E}=(0,s.uC)(),[C,f]=(0,a.eJ)(),[b,I]=(0,a.eJ)(!1),y=(0,a.I4)((()=>I(!0)),[]),[N,k]=(0,a.eJ)(!1),[S,w]=(0,a.eJ)(!1),{selectedChatIds:M,selectedChatTypes:T}=(0,Sn.vb)(t,"included"),{selectedChatIds:R,selectedChatTypes:A}=(0,Sn.vb)(t,"excluded");(0,a.d4)((()=>{C||(0,dt.Z)("FoldersNew").then(f)}),[C]),(0,a.d4)((()=>{k(!1),w(!1)}),[t.folderId]);const[L,F]=(0,a.Ye)((()=>{const e=new Set([...v||[],...P||[]]),t=(0,me.eL)(M,e),n=(0,me.eL)(R,e);return[N?t:t.slice(0,5-T.length),S?n:n.slice(0,5-A.length)]}),[R,M,T,A,S,N,v,P]),B=(0,h.Z)();function $(e){const t="included"===e?T:A,n="included"===e?L:F,s="included"===e?N:S,r=("included"===e?M:R).length-t.length-n.length,l="included"===e?()=>k(!0):()=>w(!0);return a.ZP.createElement(a.ZP.Fragment,null,t.map((t=>function(e,t){const n="included"===t?Sn.fi.find((t=>{let{key:n}=t;return n===e})):Sn.Yy.find((t=>{let{key:n}=t;return n===e}));if(n)return a.ZP.createElement(Ae.Z,{key:n.key,className:"settings-folders-list-item mb-1",icon:n.icon,narrow:!0,inactive:!0},B(n.title))}(t,e))),n.map((e=>a.ZP.createElement(Ae.Z,{className:"settings-folders-list-item mb-1",narrow:!0,inactive:!0},(0,g.YC)(e)?a.ZP.createElement(Fe.Z,{avatarSize:"small",userId:e}):a.ZP.createElement(Le.Z,{avatarSize:"small",chatId:e})))),!s&&r>0&&a.ZP.createElement(wn,{count:r,itemName:"chat",onClick:l}))}return(0,u.ZP)(c,Z,d,"edit"===t.mode?l.MT.FoldersEditFolder:l.MT.FoldersCreateFolder),a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},C&&a.ZP.createElement(mt.Z,{id:"settingsFoldersEdit",size:o.ku,animationData:C,play:b&&String(t.folderId),noLoop:!0,onLoad:y})),"create"===t.mode&&a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:B.isRtl?"rtl":void 0},B("FilterIncludeInfo")),a.ZP.createElement(Te.Z,{className:"mb-0",label:B("FilterNameHint"),value:t.folder.title,onChange:function(e){const{currentTarget:t}=e;n({type:"setTitle",payload:t.value.trim()})},error:t.error&&t.error===Mn?Mn:void 0})),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},t.error&&t.error===Tn&&a.ZP.createElement("p",{className:"settings-item-description color-danger mb-2",dir:B.isRtl?"rtl":void 0},B(t.error)),a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterInclude")),a.ZP.createElement(Ae.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:r},B("FilterAddChats")),$("included")),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterExclude")),a.ZP.createElement(Ae.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:i},B("FilterAddChats")),$("excluded"))),a.ZP.createElement(mn.Z,{isShown:Boolean(t.isTouched),disabled:t.isLoading,onClick:function(){const{title:e}=t.folder;e?M.length||Object.keys(T).length?(n({type:"setIsLoading",payload:!0}),"edit"===t.mode?p({id:t.folderId,folderUpdate:t.folder}):E({folder:t.folder}),setTimeout((()=>{m()}),500)):n({type:"setError",payload:Tn}):n({type:"setError",payload:Mn})},ariaLabel:"edit"===t.mode?"Save changes":"Create folder"},t.isLoading?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),An=(0,a.X$)((e=>{let{mode:t,chatIds:n,selectedIds:s,selectedChatTypes:r,filterValue:l,onSelectedIdsChange:o,onSelectedChatTypesChange:i,onFilterChange:c}=e;const d=(0,a.sO)(null),m="included"===t?Sn.fi:Sn.Yy,u=s.length+r.length>10,Z=s.length>=100;(0,a.d4)((()=>{setTimeout((()=>{requestAnimationFrame((()=>{d.current.focus()}))}),500)}),[]);const v=(0,a.I4)((e=>{const t=[...s];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),o(t)}),[s,o]),P=(0,a.I4)((e=>{const t=[...r];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),i(t)}),[r,i]),p=(0,a.I4)((e=>{const{value:t}=e.currentTarget;c(t)}),[c]),E=(0,h.Z)(),[C,f]=(0,Ne.Z)(void 0,n,Boolean(l));return a.ZP.createElement("div",{className:"Picker SettingsFoldersChatsPicker"},a.ZP.createElement("div",{className:"picker-header custom-scroll"},r.map((function(e){const t=m.find((t=>{let{key:n}=t;return e===n}));if(t)return a.ZP.createElement(wt.Z,{icon:t.icon,title:E(t.title),isMinimized:u,canClose:!0,onClick:P,clickArg:t.key})})),s.map(((e,t)=>a.ZP.createElement(wt.Z,{chatOrUserId:e,isMinimized:u&&tP(e.key),ripple:!0},a.ZP.createElement("i",{className:`icon-${e.icon}`}),a.ZP.createElement("h3",{className:"chat-type",dir:"auto"},E(e.title)),a.ZP.createElement(fn.Z,{label:"",checked:r.includes(e.key),round:!0}))})),a.ZP.createElement("div",{key:"divider",className:"picker-list-divider"}),a.ZP.createElement("h4",{key:"header2",className:"settings-item-header",dir:E.isRtl?"rtl":void 0},E("FilterChats"))),null!=C&&C.length?C.map((function(e){const t=s.includes(e);return a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable picker-list-item chat-item",onClick:()=>v(e),ripple:!0,disabled:!t&&Z},(0,g.YC)(e)?a.ZP.createElement(Fe.Z,{userId:e}):a.ZP.createElement(Le.Z,{chatId:e,withChatType:!0}),a.ZP.createElement(fn.Z,{label:"",checked:t,round:!0}))})):C&&!C.length?a.ZP.createElement("p",{className:"no-results",key:"no-results"},"Sorry, nothing found."):a.ZP.createElement(we.Z,{key:"loading"})))})),Ln=(0,a.X$)((e=>{let{mode:t,state:n,dispatch:r,isActive:i,onScreenSelect:c,onReset:d}=e;const{chatFilter:m}=n,{selectedChatIds:Z,selectedChatTypes:v}=(0,Sn.vb)(n,t,!0),P=(0,h.Z)(),p=(0,yn.d7)(o.Nf),E=(0,yn.d7)(o.WS),C=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=[...p||[],...E||[]];return(0,me.Tw)([...Z,...(0,g.$l)(P,t,e,m)])}),[p,E,Z,P,m]),f=(0,a.I4)((e=>{r({type:"setChatFilter",payload:e})}),[r]),b=(0,a.I4)((e=>{r("included"===t?{type:"setIncludeFilters",payload:{...n.includeFilters,includedChatIds:e}}:{type:"setExcludeFilters",payload:{...n.excludeFilters,excludedChatIds:e}})}),[t,n,r]),I=(0,a.I4)((e=>{const n={};e.forEach((e=>{n[e]=!0})),r("included"===t?{type:"setIncludeFilters",payload:{includedChatIds:Z,...n}}:{type:"setExcludeFilters",payload:{excludedChatIds:Z,...n}})}),[t,Z,r]);return(0,u.ZP)(i,d,c,"included"===t?l.MT.FoldersIncludedChats:l.MT.FoldersExcludedChats),C?a.ZP.createElement(An,{mode:t,chatIds:C,selectedIds:Z,selectedChatTypes:v,filterValue:m,onSelectedIdsChange:b,onSelectedChatTypesChange:I,onFilterChange:f}):a.ZP.createElement(we.Z,null)})),Fn=(0,a.X$)((e=>{let{currentScreen:t,shownScreen:n,state:s,dispatch:r,isActive:o,onScreenSelect:i,onReset:c}=e;const d=(0,a.I4)((()=>{t!==l.MT.FoldersCreateFolder&&t!==l.MT.FoldersEditFolder&&t!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),t!==l.MT.FoldersIncludedChats&&t!==l.MT.FoldersExcludedChats?c():"create"===s.mode?i(l.MT.FoldersCreateFolder):i(l.MT.FoldersEditFolder)}),[s.mode,r,t,c,i]),m=(0,a.I4)((()=>{r({type:"reset"}),i(l.MT.FoldersCreateFolder)}),[i,r]),u=(0,a.I4)((e=>{r({type:"editFolder",payload:e}),i(l.MT.FoldersEditFolder)}),[r,i]),h=(0,a.I4)((()=>{r({type:"editIncludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersIncludedChatsFromChatList:l.MT.FoldersIncludedChats)}),[t,r,i]),Z=(0,a.I4)((()=>{r({type:"editExcludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersExcludedChatsFromChatList:l.MT.FoldersExcludedChats)}),[t,r,i]);switch(t){case l.MT.Folders:return a.ZP.createElement(kn,{onCreateFolder:m,onEditFolder:u,onScreenSelect:i,isActive:o||[l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onReset:c});case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement(Rn,{state:s,dispatch:r,onAddIncludedChats:h,onAddExcludedChats:Z,onReset:d,onScreenSelect:i,isActive:o||[l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onBack:c});case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:return a.ZP.createElement(Ln,{mode:"included",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(Ln,{mode:"excluded",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});default:return}}));var Bn=n(711),$n=n(692);const xn=(0,a.X$)((e=>{let{size:t=o.DC,stickerSet:n,observeIntersection:s}=e;const l=(0,a.sO)(null),i=(0,Bt.Op)(l,s),c=`stickerSet${n.id}`,d=(0,Z.Z)(c,!i,r.IU.Lottie),m=(0,$n.Z)(d),u=(0,a.Ye)((()=>{if(!d)return(0,ot.Xv)(n.title,2)}),[d,n.title]);return a.ZP.createElement("div",{ref:l,className:"sticker-set-cover"},u,d&&a.ZP.createElement(mt.Z,{id:c,size:t,animationData:d,className:m}))})),Dn=(0,a.X$)((e=>{let{stickerSet:t,observeIntersection:n}=e;const s=(0,a.sO)(null),r=(0,Bt.Op)(s,n),l=(0,Z.Z)(t.hasThumbnail&&`stickerSet${t.id}`,!r),o=(0,$n.Z)(l),c=t.isGifs,d=(0,a.Ye)((()=>{if(c&&!i.Hh||!l)return(0,ot.Xv)(t.title,2)}),[c,l,t.title]);return a.ZP.createElement("div",{ref:s,className:"sticker-set-cover"},d,c?a.ZP.createElement("video",{src:l,className:o,loop:!0,autoPlay:!0}):a.ZP.createElement("img",{src:l,className:o,alt:""}))}));var On=n(3547);const Un=(0,a.X$)((e=>{var t;let{stickerSet:n,observeIntersection:s,onClick:r}=e;const l=(0,h.Z)();if(!n||!n.stickers)return;const i=null===(t=n.stickers)||void 0===t?void 0:t[0];return n.hasThumbnail||!i?a.ZP.createElement(Ae.Z,{narrow:!0,className:"SettingsStickerSet",inactive:!i,onClick:()=>i&&r(i)},a.ZP.createElement(R.Z,{ariaLabel:n.title,color:"translucent",isRtl:l.isRtl},n.isLottie?a.ZP.createElement(xn,{size:o.Mw,stickerSet:n,observeIntersection:s}):a.ZP.createElement(Dn,{stickerSet:n,observeIntersection:s})),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i")))):a.ZP.createElement(Ae.Z,{narrow:!0,className:"SettingsStickerSet",onClick:()=>r(i)},a.ZP.createElement(On.Z,{sticker:i,size:o.Mw,title:n.title,observeIntersection:s}),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i"))))}));var Gn=n(4851);const Jn=["Solid and Steady","Nice and Fast","Lots of Stuff"],Xn=[{label:"12-hour",value:"12h"},{label:"24-hour",value:"24h"}],zn=(0,a.X$)((0,s.c$)((e=>{var t;return{...(0,me.ei)(e.settings.byKey,["messageTextSize","animationLevel","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","isSensitiveEnabled","canChangeSensitive","timeFormat"]),stickerSetIds:e.stickers.added.setIds,stickerSetsById:e.stickers.setsById,defaultReaction:null===(t=e.appConfig)||void 0===t?void 0:t.defaultReaction}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,stickerSetIds:o,stickerSetsById:c,defaultReaction:d,messageTextSize:m,animationLevel:Z,messageSendKeyCombo:v,shouldSuggestStickers:P,shouldLoopStickers:g,timeFormat:p}=e;const{setSettingOption:E}=(0,s.uC)(),C=(0,a.sO)(null),{observe:f}=(0,Bt.S1)({rootRef:C}),[b,I,y]=(0,ye.Z)(),[N,k]=(0,a.eJ)(),S=(0,h.Z)(),w=i.$b?void 0:[{value:"enter",label:S("lng_settings_send_enter"),subLabel:"New line by Shift + Enter"},{value:"ctrl-enter",label:S(i.jm?"lng_settings_send_cmdenter":"lng_settings_send_ctrlenter"),subLabel:"New line by Enter"}],M=(0,a.I4)((e=>{Jn.forEach(((t,n)=>{document.body.classList.toggle(`animation-level-${n}`,e===n)})),E({animationLevel:e})}),[E]),T=(0,a.I4)((e=>{document.documentElement.style.setProperty("--composer-text-size",`${Math.max(e,i.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*e)}px`),document.documentElement.style.setProperty("--message-text-size",`${e}px`),document.documentElement.setAttribute("data-message-text-size",e.toString()),E({messageTextSize:e})}),[E]),R=(0,a.I4)((e=>{E({timeFormat:e}),E({wasTimeFormatSetManually:!0}),(0,Bn.qf)(e)}),[E]),A=(0,a.I4)((e=>{k(e),I()}),[I]),L=o&&o.map((e=>{var t;return!(null==c||null===(t=c[e])||void 0===t||!t.installedDate)&&c[e]})).filter(Boolean);return(0,u.ZP)(t,r,n,l.MT.General),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},S("SETTINGS")),a.ZP.createElement(bn.Z,{label:S("TextSize"),min:12,max:20,value:m,onChange:T}),a.ZP.createElement(Ae.Z,{icon:"photo",onClick:()=>n(l.MT.GeneralChatBackground)},S("ChatBackground"))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},"Time Format"),a.ZP.createElement(at.Z,{name:"timeformat",options:Xn,selected:p,onChange:R})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},"Animation Level"),a.ZP.createElement("p",{className:"settings-item-description",dir:S.isRtl?"rtl":void 0},"Choose the desired animations amount."),a.ZP.createElement(bn.Z,{options:Jn,value:Z,onChange:M})),w&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},S("VoiceOver.Keyboard")),a.ZP.createElement(at.Z,{name:"keyboard-send-settings",options:w,onChange:e=>E({messageSendKeyCombo:e}),selected:v})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:S.isRtl?"rtl":void 0},S("AccDescrStickers")),d&&a.ZP.createElement(Ae.Z,{className:"SettingsDefaultReaction",onClick:()=>n(l.MT.QuickReaction)},a.ZP.createElement(it.Z,{reaction:d}),a.ZP.createElement("div",{className:"title"},S("DoubleTapSetting"))),a.ZP.createElement(fn.Z,{label:S("SuggestStickers"),checked:P,onCheck:e=>E({shouldSuggestStickers:e})}),a.ZP.createElement(fn.Z,{label:S("LoopAnimatedStickers"),checked:g,onCheck:e=>E({shouldLoopStickers:e})}),a.ZP.createElement("div",{className:"mt-4",ref:C},L&&L.map((e=>a.ZP.createElement(Un,{key:e.id,stickerSet:e,observeIntersection:f,onClick:A})))),N&&a.ZP.createElement(Gn.Z,{isOpen:b,fromSticker:N,onClose:y})))})));let _n;function Yn(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];_n||(_n=document.createElement("input"),_n.setAttribute("type","file")),_n.setAttribute("accept",e),n?_n.removeAttribute("multiple"):_n.setAttribute("multiple","multiple"),_n.onchange=null,_n.value="",_n.onchange=t,_n.click()}var Hn=n(1394);function Vn(e){return[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)]}function qn(e){const t=e[0].toString(16),n=e[1].toString(16),a=e[2].toString(16);return(1==t.length?"0"+t:t)+(1==n.length?"0"+n:n)+(1==a.length?"0"+a:a)}function jn(e){let[t,n,a]=e;t/=255,n/=255,a/=255;let s,r,l=Math.max(t,n,a),o=Math.min(t,n,a),i=l,c=l-o;if(r=0==l?0:c/l,l==o)s=0;else{switch(l){case t:s=(n-a)/c+(n.5?Math.max(0,.65*a):Math.max(0,Math.min(1,1-.65*a)),`hsla(${360*t}, ${100*n}%, ${100*a}%, .4)`}var Qn=n(9524),ea=n(5866);const ta=(0,a.X$)((e=>{var t;let{wallpaper:n,theme:s,isSelected:r,onClick:i}=e;const{slug:c,document:d}=n,m=`wallpaper${d.id}`,u=d.previewBlobUrl,h=(0,Z.Z)(`${m}?size=m`),g=(0,ea.Z)(null===(t=d.thumbnail)||void 0===t?void 0:t.dataUri,Boolean(h),!0),{transitionClassNames:p}=(0,_.Z)(Boolean(h||u),void 0,void 0,"slow"),[E,C]=(0,a.eJ)(!1),{mediaData:f,loadProgress:b}=(0,v.Z)(m,!E),I=!1===(0,P.Z)(E),{shouldRender:y,transitionClassNames:N}=(0,_.Z)(E&&!f||c===l.mp,void 0,I,"slow"),k=(0,a.sO)();k.current=s;const S=(0,a.I4)((()=>{(async()=>{const e=await(0,Hn.gm)(f);await Qn.save(o.fo,k.current,e),i(c)})()}),[f,i,c]);(0,a.d4)((()=>{f&&S()}),[f,S]);const w=(0,a.I4)((()=>{f?S():C((e=>!e))}),[f,S]),M=(0,X.Z)("WallpaperTile",r&&"selected");return a.ZP.createElement("div",{className:M,onClick:w},a.ZP.createElement("div",{className:"media-inner"},a.ZP.createElement("canvas",{ref:g,className:"thumbnail"}),a.ZP.createElement("img",{src:h||u,className:(0,X.Z)("full-media",p),alt:""}),y&&a.ZP.createElement("div",{className:(0,X.Z)("spinner-container",N)},a.ZP.createElement($.Z,{progress:b,onClick:w}))))})),na=(0,G.P2)((e=>e()),6e4,!0),aa=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.Pu)(e),{background:n,isBlurred:a}=e.settings.themes[t]||{},{loadedWallpapers:s}=e.settings;return{background:n,isBlurred:a,loadedWallpapers:s,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,background:i,isBlurred:c,loadedWallpapers:d,theme:m}=e;const{loadWallpapers:Z,uploadWallpaper:v,setThemeSettings:P}=(0,s.uC)(),g=(0,a.sO)();g.current=m,(0,a.d4)((()=>{na((()=>{Z()}))}),[Z]);const p=(0,a.I4)((e=>{const{files:t}=e.target;t&&t.length>0&&v(t[0])}),[v]),E=(0,a.I4)((()=>{Yn("image/jpeg",p,!0)}),[p]),C=(0,a.I4)((()=>{n(l.MT.GeneralChatBackgroundColor)}),[n]),f=(0,a.I4)((()=>{P({theme:m,background:void 0,backgroundColor:void 0,isBlurred:!0,patternColor:"dark"===m?o.Vv:o.g})}),[P,m]),b=(0,a.I4)((e=>{P({theme:g.current,background:e});const t=d&&d.find((t=>t.slug===e));null!=t&&t.document.thumbnail&&async function(e){const t=[0,0,0];let n,a,s,r,l=-4,o=[0,0,0],i=0;const c=document.createElement("canvas"),d=c.getContext&&c.getContext("2d");if(!d)return t;const m=await(0,Hn.pt)(e);s=m.naturalHeight||m.offsetHeight||m.height,a=m.naturalWidth||m.offsetWidth||m.width,c.height=s,c.width=a,d.drawImage(m,0,0);try{n=d.getImageData(0,0,a,s)}catch(e){return t}for(r=n.data.length;(l+=20){const t=Wn(e),n=`#${qn(e)}`;P({theme:g.current,backgroundColor:n,patternColor:t})}))}),[d,P]),I=(0,a.I4)((e=>{P({theme:g.current,isBlurred:e.target.checked})}),[P]),y=(0,h.Z)();(0,u.ZP)(t,r,n,l.MT.GeneralChatBackground);const N=(null==d?void 0:d[0])&&d[0].slug===l.mp;return a.ZP.createElement("div",{className:"SettingsGeneralBackground settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(Ae.Z,{icon:"camera-add",className:"mb-0",disabled:N,onClick:E},y("UploadImage")),a.ZP.createElement(Ae.Z,{icon:"colorize",className:"mb-0",onClick:C},y("SetColor")),a.ZP.createElement(Ae.Z,{icon:"favorite",onClick:f},y("ThemeResetToDefaults")),a.ZP.createElement(fn.Z,{label:y("BackgroundBlurred"),checked:Boolean(c),onChange:I})),d?a.ZP.createElement("div",{className:"settings-wallpapers"},d.map((e=>a.ZP.createElement(ta,{wallpaper:e,theme:m,isSelected:i===e.slug,onClick:b})))):a.ZP.createElement(we.Z,null))}))),sa=jn(Vn("e6ebee")),ra=["#e6ebee","#b2cee1","#008dd0","#c6e7cb","#c4e1a6","#60b16e","#ccd0af","#a6a997","#7a7072","#fdd7af","#fdb76e","#dd8851"];function la(e,t){return{colorPosition:[Math.round(e[1]*(t.colorRect.width-1)),Math.round((1-e[2])*(t.colorRect.height-1))],huePosition:Math.round(e[0]*(t.hueRect.width-1))}}function oa(e,t){let{colorPosition:n,huePosition:a}=e;return[a/(t.hueRect.width-1),n[0]/(t.colorRect.width-1),1-n[1]/(t.colorRect.height-1)]}const ia=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.Pu)(e),{backgroundColor:n}=e.settings.themes[t]||{};return{backgroundColor:n,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,theme:o,backgroundColor:i}=e;const{setThemeSettings:c}=(0,s.uC)(),d=(0,a.sO)();d.current=o;const m=(0,a.sO)(null),h=(0,a.sO)(null),Z=(0,a.sO)(null),v=(0,a.sO)(!0),[P,g]=(0,a.eJ)(function(e){return e&&e.startsWith("#")?jn(Vn(e.replace("#",""))):sa}(i)),p=(0,a.sO)(P);(0,a.d4)((()=>{p.current=P}),[P]);const[E,C,b]=(0,ye.Z)(),[I,y]=(0,a.eJ)(""),[N,k]=(0,a.eJ)(""),S=(0,a.sO)(),w=(0,a.sO)();(0,a.d4)((()=>{const e={offsetLeft:h.current.offsetLeft,...(0,me.ei)(h.current.getBoundingClientRect(),["top","width","height"])},t={offsetLeft:Z.current.offsetLeft,...(0,me.ei)(Z.current.getBoundingClientRect(),["width"])};function n(t){const n=[Math.min(Math.max(0,t.pageX-e.offsetLeft),e.width-1),Math.min(Math.max(0,t.pageY-e.top+m.current.scrollTop),e.height-1)],{huePosition:a}=la(p.current,S.current);return g(oa({colorPosition:n,huePosition:a},S.current)),C(),!0}function a(e){const{colorPosition:n}=la(p.current,S.current),a=Math.min(Math.max(0,e.pageX-t.offsetLeft),t.width-1);return g(oa({colorPosition:n,huePosition:a},S.current)),C(),!0}S.current={colorRect:e,hueRect:t},(0,f.sf)(h.current,{onCapture:n,onDrag:n,onRelease:b,onClick:b,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0}),(0,f.sf)(Z.current,{onCapture:a,onDrag:a,onRelease:b,onClick:b,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0})}),[C,b]);const{colorPosition:M=[0,0],huePosition:T=0}=S.current?la(P,S.current):{},R=qn(Kn(P)),A=P[0],L=qn(Kn([A,1,1]));(0,a.d4)((()=>{const e=Kn(P),t=`#${qn(e)}`;if(y(e.join(", ")),k(t),!v.current){const n=Wn(e);c({theme:d.current,background:void 0,backgroundColor:t,patternColor:n})}v.current=!1}),[P,c]),(0,a.d4)((()=>{!function(e,t,n,a){let s,r,l;n.current&&a.current?(s=a.current.colorRect.width,r=a.current.colorRect.height,l=n.current):(s=e.offsetWidth,r=e.offsetHeight,l=e.getContext("2d"),e.width=s,e.height=r,n.current=l);const o=l.createImageData(s,r),i=o.data,c=Kn([t,1,1]);let d=0;for(let e=0;e{!function(e){const t=e.offsetWidth;e.width=t,e.height=1;const n=e.getContext("2d"),a=n.createImageData(t,1),s=a.data;let r=0;for(let e=0;e{const t=e.currentTarget.value.replace(/[^\d, ]/g,"").slice(0,13);if(t.match(/^\d{1,3},\s?\d{1,3},\s?\d{1,3}$/)){const e=t.split(",").map((e=>Number(e.trim())));g(jn(e))}e.currentTarget.value=t}),[]),B=(0,a.I4)((e=>{const t=e.currentTarget.value.replace(/[^0-9a-fA-F]/g,"").slice(0,6);t.match(/^#?[0-9a-fA-F]{6}$/)&&g(jn(Vn(t.replace("#","")))),e.currentTarget.value=t}),[]),$=(0,a.I4)((e=>{g(jn(Vn(e.currentTarget.dataset.color.replace("#",""))))}),[]),x=(0,X.Z)("SettingsGeneralBackgroundColor settings-content custom-scroll",E&&"is-dragging");return(0,u.ZP)(t,r,n,l.MT.GeneralChatBackgroundColor),a.ZP.createElement("div",{ref:m,className:x},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("div",{ref:h,className:"color-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translate(${M[0]}px, ${M[1]}px); background-color: #${R};`})),a.ZP.createElement("div",{ref:Z,className:"hue-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translateX(${T}px); background-color: #${L};`})),a.ZP.createElement("div",{className:"tools"},a.ZP.createElement(Te.Z,{value:N,label:"HEX",onChange:B}),a.ZP.createElement(Te.Z,{value:I,label:"RGB",onChange:F}))),a.ZP.createElement("div",{className:"predefined-colors"},ra.map((e=>a.ZP.createElement("div",{className:e===`#${R}`?"active":void 0,"data-color":e,style:`background-color: ${e};`,onClick:$})))))})));var ca=n(8406);const da=(0,a.X$)((0,s.c$)((e=>({hasPrivateChatsNotifications:Boolean(e.settings.byKey.hasPrivateChatsNotifications),hasPrivateChatsMessagePreview:Boolean(e.settings.byKey.hasPrivateChatsMessagePreview),hasGroupNotifications:Boolean(e.settings.byKey.hasGroupNotifications),hasGroupMessagePreview:Boolean(e.settings.byKey.hasGroupMessagePreview),hasBroadcastNotifications:Boolean(e.settings.byKey.hasBroadcastNotifications),hasBroadcastMessagePreview:Boolean(e.settings.byKey.hasBroadcastMessagePreview),hasContactJoinedNotifications:Boolean(e.settings.byKey.hasContactJoinedNotifications),hasWebNotifications:e.settings.byKey.hasWebNotifications,hasPushNotifications:e.settings.byKey.hasPushNotifications,notificationSoundVolume:e.settings.byKey.notificationSoundVolume})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPrivateChatsNotifications:o,hasPrivateChatsMessagePreview:i,hasGroupNotifications:c,hasGroupMessagePreview:d,hasBroadcastNotifications:m,hasBroadcastMessagePreview:Z,hasContactJoinedNotifications:v,hasPushNotifications:P,hasWebNotifications:g,notificationSoundVolume:p}=e;const{loadNotificationSettings:E,updateContactSignUpNotification:C,updateNotificationSettings:f,updateWebNotificationSettings:b}=(0,s.uC)();(0,a.d4)((()=>{E()}),[E]);const I=(0,D.Z)(500,!0),y=(0,a.I4)(((e,t,n)=>{const a="contact"===t?!o:!("group"===t?c:m),s="contact"===t?i:"group"===t?d:Z;f({peerType:t,..."silent"===n&&{isSilent:!e.target.checked,shouldShowPreviews:s},..."showPreviews"===n&&{shouldShowPreviews:e.target.checked,isSilent:a}})}),[Z,m,d,c,i,o,f]),N=(0,a.I4)((e=>{C({isSilent:!e.target.checked})}),[C]),k=(0,h.Z)();return(0,u.ZP)(t,r,n,l.MT.Notifications),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},"Web notifications"),a.ZP.createElement(fn.Z,{label:"Web notifications",subLabel:k(g?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:g,onChange:e=>{b({hasWebNotifications:e.target.checked})}}),a.ZP.createElement(fn.Z,{label:"Offline notifications",disabled:!g,subLabel:k(P?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:P,onChange:e=>{b({hasPushNotifications:e.target.checked})}}),a.ZP.createElement("div",{className:"settings-item-slider"},a.ZP.createElement(bn.Z,{label:"Sound",min:0,max:10,value:p,onChange:e=>{b({notificationSoundVolume:e}),I((()=>(0,ca.q3)(void 0,e)))}}))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("AutodownloadPrivateChats")),a.ZP.createElement(fn.Z,{label:k("NotificationsForPrivateChats"),subLabel:k(o?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:o,onChange:e=>{y(e,"contact","silent")}}),a.ZP.createElement(fn.Z,{label:k("MessagePreview"),disabled:!o,subLabel:k(i?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:i,onChange:e=>{y(e,"contact","showPreviews")}})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("FilterGroups")),a.ZP.createElement(fn.Z,{label:k("NotificationsForGroups"),subLabel:k(c?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:c,onChange:e=>{y(e,"group","silent")}}),a.ZP.createElement(fn.Z,{label:k("MessagePreview"),disabled:!c,subLabel:k(d?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:d,onChange:e=>{y(e,"group","showPreviews")}})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("FilterChannels")),a.ZP.createElement(fn.Z,{label:k("NotificationsForChannels"),subLabel:k(m?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:m,onChange:e=>{y(e,"broadcast","silent")}}),a.ZP.createElement(fn.Z,{label:k("MessagePreview"),disabled:!m,subLabel:k(Z?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:Z,onChange:e=>{y(e,"broadcast","showPreviews")}})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("PhoneOther")),a.ZP.createElement(fn.Z,{label:k("ContactJoined"),checked:v,onChange:N})))}))),ma=(0,a.X$)((0,s.c$)((e=>{var t,n,a,s,r;const{settings:{byKey:{hasPassword:l,isSensitiveEnabled:o,canChangeSensitive:i},privacy:c},blocked:d,activeSessions:m}=e;return{hasPassword:l,blockedCount:d.totalCount,sessionsCount:m.length,isSensitiveEnabled:o,canChangeSensitive:i,visibilityPrivacyPhoneNumber:null===(t=c.phoneNumber)||void 0===t?void 0:t.visibility,visibilityPrivacyLastSeen:null===(n=c.lastSeen)||void 0===n?void 0:n.visibility,visibilityPrivacyProfilePhoto:null===(a=c.profilePhoto)||void 0===a?void 0:a.visibility,visibilityPrivacyForwarding:null===(s=c.forwards)||void 0===s?void 0:s.visibility,visibilityPrivacyGroupChats:null===(r=c.chatInvite)||void 0===r?void 0:r.visibility}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPassword:o,blockedCount:i,sessionsCount:c,isSensitiveEnabled:d,canChangeSensitive:m,visibilityPrivacyPhoneNumber:Z,visibilityPrivacyLastSeen:v,visibilityPrivacyProfilePhoto:P,visibilityPrivacyForwarding:g,visibilityPrivacyGroupChats:p}=e;const{loadPrivacySettings:E,loadBlockedContacts:C,loadAuthorizations:f,loadContentSettings:b,updateContentSettings:I}=(0,s.uC)();(0,a.d4)((()=>{C(),f(),E(),b()}),[C,f,E,b]);const y=(0,h.Z)();function N(e){switch(e){case"everybody":return y("P2PEverybody");case"contacts":return y("P2PContacts");case"nobody":return y("P2PNobody")}}return(0,u.ZP)(t,r,n,l.MT.Privacy),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(Ae.Z,{icon:"delete-user",narrow:!0,onClick:()=>n(l.MT.PrivacyBlockedUsers)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("BlockedUsers")),i>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y("Users",i)))),a.ZP.createElement(Ae.Z,{icon:"lock",narrow:!0,onClick:()=>n(o?l.MT.TwoFaEnabled:l.MT.TwoFaDisabled)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("TwoStepVerification")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(o?"PasswordOn":"PasswordOff")))),a.ZP.createElement(Ae.Z,{icon:"active-sessions",narrow:!0,onClick:()=>n(l.MT.PrivacyActiveSessions)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("SessionsTitle")),c>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},1===c?"1 session":`${c} sessions`)))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:y.isRtl?"rtl":void 0},y("PrivacyTitle")),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyPhoneNumber)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyPhoneTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(Z)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyLastSeen)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("LastSeenTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(v)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyProfilePhoto)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyProfilePhotoTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(P)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyForwarding)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyForwardsTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(g)))),a.ZP.createElement(Ae.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyGroupChats)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("WhoCanAddMe")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},N(p))))),m&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:y.isRtl?"rtl":void 0},y("lng_settings_sensitive_title")),a.ZP.createElement(fn.Z,{label:y("lng_settings_sensitive_disable_filtering"),subLabel:y("lng_settings_sensitive_about"),checked:Boolean(d),disabled:!m,onCheck:I})))}))),ua=(0,a.X$)((0,s.c$)((e=>({languages:e.settings.byKey.languages,language:e.settings.byKey.language})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,languages:o,language:i}=e;const{loadLanguages:c,setSettingOption:d}=(0,s.uC)(),[m,h]=(0,a.eJ)(i),[Z,v,P]=(0,ye.Z)();(0,a.d4)((()=>{c()}),[c]);const g=(0,a.I4)((e=>{h(e),v(),(0,Bn.m0)(e,(()=>{P(),d({language:e})}))}),[v,P,d]),p=(0,a.Ye)((()=>o?function(e){const t=(window.navigator.language||"en").toLowerCase(),n=t.substr(0,2);return e.map((e=>{let{langCode:t,nativeName:n,name:a}=e;return{value:t,label:n,subLabel:a}})).sort((e=>!t||e.value!==t&&e.value!==n?0:-1))}(o):void 0),[o]);return(0,u.ZP)(t,r,n,l.MT.Language),a.ZP.createElement("div",{className:"settings-content settings-item settings-language custom-scroll"},p?a.ZP.createElement(at.Z,{name:"keyboard-send-settings",options:p,selected:m,loadingOption:Z?m:void 0,onChange:g}):a.ZP.createElement(we.Z,null))})));function ha(e){switch(e){case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return"phoneNumber";case l.MT.PrivacyLastSeen:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return"lastSeen";case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return"profilePhoto";case l.MT.PrivacyForwarding:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return"forwards";case l.MT.PrivacyGroupChats:case l.MT.PrivacyGroupChatsAllowedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return"chatInvite"}}const Za=(0,a.X$)((0,s.c$)(((e,t)=>{let n,{screen:a}=t;const{chats:{byId:s},settings:{privacy:r}}=e;switch(a){case l.MT.PrivacyPhoneNumber:n=r.phoneNumber;break;case l.MT.PrivacyLastSeen:n=r.lastSeen;break;case l.MT.PrivacyProfilePhoto:n=r.profilePhoto;break;case l.MT.PrivacyForwarding:n=r.forwards;break;case l.MT.PrivacyGroupChats:n=r.chatInvite}return n?{...n,chatsById:s}:{}}))((e=>{let{screen:t,isActive:n,onScreenSelect:r,onReset:o,visibility:i,allowUserIds:c,allowChatIds:d,blockUserIds:m,blockChatIds:Z,chatsById:v}=e;const{setPrivacyVisibility:P}=(0,s.uC)(),g=(0,h.Z)(),p=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyGroupChats:return[{value:"everybody",label:g("P2PEverybody")},{value:"contacts",label:g("P2PContacts")}];default:return[{value:"everybody",label:g("P2PEverybody")},{value:"contacts",label:g("P2PContacts")},{value:"nobody",label:g("P2PNobody")}]}}),[g,t]),E={shouldShowDenied:"nobody"!==i,shouldShowAllowed:"everybody"!==i},C=ha(t),f=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyPhoneNumber:return g("PrivacyPhoneTitle");case l.MT.PrivacyLastSeen:return g("LastSeenTitle");case l.MT.PrivacyProfilePhoto:return g("PrivacyProfilePhotoTitle");case l.MT.PrivacyForwarding:return g("PrivacyForwardsTitle");case l.MT.PrivacyGroupChats:return g("WhoCanAddMe");default:return}}),[g,t]);(0,u.ZP)(n,o,r,t);const b=(0,a.Ye)((()=>{if(t===l.MT.PrivacyLastSeen)return g("CustomHelp")}),[g,t]),I=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberAllowedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenAllowedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoAllowedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingAllowedContacts;default:return l.MT.PrivacyGroupChatsAllowedContacts}})(),y=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberDeniedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenDeniedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoDeniedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingDeniedContacts;default:return l.MT.PrivacyGroupChatsDeniedContacts}})(),N=(0,a.Ye)((()=>c&&d&&v?d.reduce(((e,t)=>e+(v[t]?v[t].membersCount:0)),c.length):0),[d,c,v]),k=(0,a.Ye)((()=>m&&Z&&v?Z.reduce(((e,t)=>e+(v[t]?v[t].membersCount:0)),m.length):0),[Z,m,v]),S=(0,a.I4)((e=>{P({privacyKey:C,visibility:e})}),[C,P]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:g.isRtl?"rtl":void 0},f),a.ZP.createElement(at.Z,{name:`visibility-${C}`,options:p,onChange:S,selected:i}),b&&a.ZP.createElement("p",{className:"settings-item-description-larger",dir:g.isRtl?"rtl":void 0},b)),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:g.isRtl?"rtl":void 0},g("PrivacyExceptions")),E.shouldShowAllowed&&a.ZP.createElement(Ae.Z,{narrow:!0,icon:"add-user",onClick:()=>{r(I)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},N>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"+",N),a.ZP.createElement("span",{className:"title"},g("AlwaysShareWith")),a.ZP.createElement("span",{className:"subtitle"},g("EditAdminAddUsers")))),E.shouldShowDenied&&a.ZP.createElement(Ae.Z,{narrow:!0,icon:"delete-user",onClick:()=>{r(y)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},k>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"−",k),a.ZP.createElement("span",{className:"title"},g("NeverShareWith")),a.ZP.createElement("span",{className:"subtitle"},g("EditAdminAddUsers"))))))})));function va(e){return[e.region,e.country].filter(Boolean).join(", ")}function Pa(e){return`${e.deviceModel}${e.deviceModel?", ":""} ${e.platform} ${e.systemVersion}`}const ga=(0,a.X$)((0,s.c$)((e=>({activeSessions:e.activeSessions})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,activeSessions:o}=e;const{loadAuthorizations:i,terminateAuthorization:c,terminateAllAuthorizations:d}=(0,s.uC)(),[m,Z,v]=(0,ye.Z)();(0,a.d4)((()=>{i()}),[i]);const P=(0,a.I4)((e=>{c({hash:e})}),[c]),g=(0,a.I4)((()=>{v(),d()}),[v,d]),p=(0,a.Ye)((()=>o.find((e=>e.isCurrent))),[o]),E=(0,a.Ye)((()=>o.filter((e=>!e.isCurrent))),[o]),C=(0,h.Z)();return(0,u.ZP)(t,r,n,l.MT.PrivacyActiveSessions),a.ZP.createElement("div",{className:"settings-content custom-scroll"},p&&(b=p,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:C.isRtl?"rtl":void 0},C("AuthSessions.CurrentSession")),a.ZP.createElement(Ae.Z,{narrow:!0,inactive:!0,className:"no-icon"},a.ZP.createElement("div",{className:"multiline-menu-item",dir:"auto"},a.ZP.createElement("span",{className:"title",dir:"auto"},b.appName),a.ZP.createElement("span",{className:"subtitle black tight"},Pa(b)),a.ZP.createElement("span",{className:"subtitle"},b.ip," - ",va(b)))),a.ZP.createElement(Ae.Z,{className:"destructive mb-0 no-icon",icon:"stop",ripple:!0,narrow:!0,onClick:Z},C("TerminateAllSessions")))),E&&(f=E,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:C.isRtl?"rtl":void 0},C("OtherSessions")),f.map((function(e){return a.ZP.createElement(Ae.Z,{key:e.hash,ripple:!0,narrow:!0,contextActions:[{title:"Terminate",icon:"stop",handler:()=>{P(e.hash)}}],className:"no-icon"},a.ZP.createElement("div",{className:"multiline-menu-item full-size",dir:"auto"},a.ZP.createElement("span",{className:"date"},(0,j.VX)(C,1e3*e.dateActive)),a.ZP.createElement("span",{className:"title"},e.appName),a.ZP.createElement("span",{className:"subtitle black tight"},Pa(e)),a.ZP.createElement("span",{className:"subtitle"},e.ip," - ",va(e))))})))),E&&a.ZP.createElement(Xe.Z,{isOpen:m,onClose:v,text:"Are you sure you want to terminate all other sessions?",confirmLabel:"Terminate All Other Sessions",confirmHandler:g,confirmIsDestructive:!0}));var f,b})));var pa=n(6272);const Ea=(0,a.X$)((0,s.c$)((e=>{const{users:{byId:t},blocked:{ids:n},contactList:a,currentUserId:s}=e;return{usersById:t,blockedIds:n,contactIds:null==a?void 0:a.userIds,localContactIds:e.userSearch.localUserIds,currentUserId:s}}))((e=>{let{usersById:t,blockedIds:n,contactIds:r,localContactIds:l,currentUserId:o,isOpen:i,onClose:c}=e;const{loadContactList:d,setUserSearchQuery:m,blockContact:u}=(0,s.uC)(),Z=(0,h.Z)(),[v,P]=(0,a.eJ)(""),p=(0,a.sO)(null);(0,a.d4)((()=>{m({query:v})}),[v,m]);const E=(0,a.Ye)((()=>{const e=(0,me.Tw)([...r||[],...l||[]].filter((e=>e!==o&&!n.includes(e))));return(0,g.kK)(e,t,v).sort(((e,n)=>{const a=(0,g.Js)(t[e])||"",s=(0,g.Js)(t[n])||"";return a.localeCompare(s)}))}),[n,r,o,v,l,t]),C=(0,a.I4)((e=>{const{id:n,accessHash:a}=t[e]||{};n&&a&&(u({contactId:n,accessHash:a}),c())}),[u,c,t]);return a.ZP.createElement(Be,{isOpen:i,chatOrUserIds:E,filterRef:p,filterPlaceholder:Z("BlockedUsers.BlockUser"),filter:v,onFilterChange:P,loadMore:d,onSelectChatOrUser:C,onClose:c})}))),Ca=(0,a.X$)((0,s.c$)((e=>{const{chats:{byId:t},users:{byId:n},blocked:{ids:a},countryList:{phoneCodes:s}}=e;return{chatsByIds:t,usersByIds:n,blockedIds:a,phoneCodeList:s}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,chatsByIds:i,usersByIds:c,blockedIds:d,phoneCodeList:m}=e;const{unblockContact:Z}=(0,s.uC)(),v=(0,h.Z)(),[P,p,E]=(0,ye.Z)(),C=(0,a.I4)((e=>{Z({contactId:e})}),[Z]);return(0,u.ZP)(t,r,n,l.MT.PrivacyBlockedUsers),a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content infinite-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("p",{className:"settings-item-description-larger mt-0 mb-2",dir:v.isRtl?"rtl":void 0},v("BlockedUsersInfo"))),a.ZP.createElement("div",{className:"chat-list custom-scroll"},null!=d&&d.length?a.ZP.createElement("div",{className:"scroll-container"},d.map(((e,t)=>function(e,t,n){const s=(0,g.YC)(e),r=s?c[e]:void 0,l=s?void 0:i[e],d=(0,X.Z)("Chat chat-item-clickable blocked-list-item small-icon",s?"private":"group");return a.ZP.createElement(Ae.Z,{key:e,className:d,ripple:!0,narrow:!0,contextActions:[{title:"Unblock",icon:"unlock",handler:()=>{C(e)}}],style:`top: ${(0+t)*o.rS}px;`},a.ZP.createElement(ge.Z,{size:"medium",user:r,chat:l}),a.ZP.createElement("div",{className:"contact-info",dir:"auto"},a.ZP.createElement("h3",{dir:"auto"},(0,Pe.Z)((s?(0,g.Js)(r):(0,g.U)(v,l))||"")),(null==r?void 0:r.phoneNumber)&&a.ZP.createElement("div",{className:"contact-phone",dir:"auto"},(0,pa.WZ)(m,r.phoneNumber)),r&&!r.phoneNumber&&r.username&&a.ZP.createElement("div",{className:"contact-username",dir:"auto"},"@",r.username)))}(e,t)))):d&&!d.length?a.ZP.createElement("div",{className:"no-results",dir:"auto"},v("NoBlocked")):a.ZP.createElement(we.Z,{key:"loading"}))),a.ZP.createElement(mn.Z,{isShown:!0,onClick:p,ariaLabel:v("BlockContact")},a.ZP.createElement("i",{className:"icon-add"})),a.ZP.createElement(Ea,{isOpen:P,onClose:E}))})));var fa=n(7854);const ba=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"🔐")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,h.Z)();return(0,u.ZP)(t,n,r,l.MT.TwoFaEnabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},(0,Pe.Z)(o("EnabledPasswordText"),["br"]))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(Ae.Z,{icon:"edit",onClick:()=>r(l.MT.TwoFaChangePasswordCurrent)},o("ChangePassword")),a.ZP.createElement(Ae.Z,{icon:"password-off",onClick:()=>r(l.MT.TwoFaTurnOff)},o("TurnPasswordOff")),a.ZP.createElement(Ae.Z,{icon:"email",onClick:()=>r(l.MT.TwoFaRecoveryEmailCurrentPassword)},o("SetRecoveryEmail"))))})));var Ia=n(3490),ya=n(9364);const Na=(0,a.X$)((e=>{let{screen:t,isActive:n,onScreenSelect:s,onReset:r,error:l,isLoading:o,expectedPassword:i,placeholder:c="Current Password",hint:d,submitLabel:m,clearError:Z,onSubmit:v}=e;const[P,g]=(0,a.eJ)(""),[p,E]=(0,a.eJ)(!1),C=(0,a.I4)((e=>{i&&e!==i?g("Passwords Should Be Equal"):v(e)}),[v,i]),f=(0,a.I4)((()=>{Z&&Z(),g("")}),[Z]),b=(0,h.Z)();return(0,u.ZP)(n,r,s,t),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ia.Z,{isBig:!0,isPasswordVisible:p})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(ya.Z,{error:P||l,hint:d,placeholder:c,submitLabel:m||b("Next"),clearError:f,isLoading:o,isPasswordVisible:p,onChangePasswordVisibility:E,onSubmit:C})))})),ka=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"🔐")})))((e=>{let{isActive:t,onScreenSelect:n,onReset:s,animatedEmoji:r,onStart:o}=e;const i=(0,h.Z)();return(0,u.ZP)(t,s,n,l.MT.TwoFaDisabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:r,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},i("SetAdditionalPasswordInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(R.Z,{onClick:o},i("EditAdminTransferSetPassword"))))}))),Sa=i.wB?550:400,wa=(0,a.X$)((0,s.c$)(((e,t)=>{let{icon:n}=t;return{animatedEmoji:(0,p.zB)(e,"email"===n?"💌":"💡")}}))((e=>{let{animatedEmoji:t,type:n="text",isLoading:s,error:r,placeholder:l,shouldConfirm:o,clearError:c,onSubmit:d,isActive:m,onScreenSelect:Z,onReset:v,screen:P}=e;const g=(0,a.sO)(null),[p,E]=(0,a.eJ)(""),[C,f,b]=(0,ye.Z)(!1);(0,a.d4)((()=>{i.$b||setTimeout((()=>{g.current.focus()}),Sa)}),[]);const I=(0,h.Z)();return(0,u.ZP)(m,v,Z,P),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement("form",{action:"",onSubmit:e=>{e.preventDefault(),g.current&&d(p)}},a.ZP.createElement(Te.Z,{ref:g,value:p,inputMode:n,label:l,error:r,onChange:e=>{r&&c&&c(),E(e.target.value)}}),p?a.ZP.createElement(R.Z,{type:"submit",isLoading:s,ripple:!0},I("Continue")):a.ZP.createElement(R.Z,{isText:!0,isLoading:s,ripple:!0,onClick:o?f:()=>{d()}},I("YourEmailSkip"))),o&&a.ZP.createElement(Me.Z,{className:"narrow",isOpen:C,title:I("YourEmailSkipWarning"),onClose:b},(0,Pe.Z)(I("YourEmailSkipWarningText"),["br","simple_markdown"]),a.ZP.createElement("div",{className:"dialog-buttons"},a.ZP.createElement(R.Z,{color:"danger",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:()=>{b(),d()}},I("YourEmailSkip")),a.ZP.createElement(R.Z,{color:"primary",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:b},I("Cancel"))))))}))),Ma=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"🥳")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,h.Z)();return(0,u.ZP)(t,n,r,l.MT.TwoFaCongratulations),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},o("TwoStepVerificationPasswordSetInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(R.Z,{onClick:()=>{r(l.MT.Privacy)}},o("TwoStepVerificationPasswordReturnSettings"))))}))),Ta=i.wB?550:400,Ra=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,p.zB)(e,"💌"),codeLength:e.twoFaSettings.waitingEmailCodeLength})))((e=>{let{animatedEmoji:t,codeLength:n,isLoading:s,error:r,clearError:l,onSubmit:o,isActive:c,onScreenSelect:d,onReset:m,screen:Z}=e;const v=(0,a.sO)(null),[P,g]=(0,a.eJ)("");(0,a.d4)((()=>{i.$b||setTimeout((()=>{v.current.focus()}),Ta)}),[]);const p=(0,h.Z)();return(0,u.ZP)(c,m,d,Z),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(fa.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(Te.Z,{value:P,ref:v,inputMode:"decimal",label:p("YourEmailCode"),error:r,onChange:e=>{r&&l&&l();const t=e.target.value.slice(0,n);t.length===n&&o(t),g(t),e.target.value=t}}),s&&a.ZP.createElement(we.Z,null)))}))),Aa=(0,a.X$)((0,s.c$)((e=>({...e.twoFaSettings})))((e=>{let{currentScreen:t,shownScreen:n,state:r,hint:o,isLoading:i,error:c,waitingEmailCodeLength:d,dispatch:m,isActive:u,onScreenSelect:Z,onReset:v}=e;const{updatePassword:P,checkPassword:g,clearTwoFaError:p,updateRecoveryEmail:E,provideTwoFaEmailCode:C,clearPassword:f}=(0,s.uC)();(0,a.d4)((()=>{d&&(t===l.MT.TwoFaNewPasswordEmail?Z(l.MT.TwoFaNewPasswordEmailCode):t===l.MT.TwoFaRecoveryEmail&&Z(l.MT.TwoFaRecoveryEmailCode))}),[t,Z,d]);const b=(0,a.I4)((()=>{m({type:"reset"}),Z(l.MT.TwoFaNewPassword)}),[m,Z]),I=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),Z(l.MT.TwoFaNewPasswordConfirm)}),[m,Z]),y=(0,a.I4)((()=>{Z(l.MT.TwoFaNewPasswordHint)}),[Z]),N=(0,a.I4)((e=>{m({type:"setHint",payload:e}),Z(l.MT.TwoFaNewPasswordEmail)}),[m,Z]),k=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),P({...r,email:e,onSuccess:()=>{Z(l.MT.TwoFaCongratulations)}})}),[m,Z,r,P]),S=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),g({currentPassword:e,onSuccess:()=>{Z(l.MT.TwoFaChangePasswordNew)}})}),[g,m,Z]),w=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),Z(l.MT.TwoFaChangePasswordConfirm)}),[m,Z]),M=(0,a.I4)((()=>{Z(l.MT.TwoFaChangePasswordHint)}),[Z]),T=(0,a.I4)((e=>{m({type:"setHint",payload:e}),P({...r,hint:e,onSuccess:()=>{Z(l.MT.TwoFaCongratulations)}})}),[m,Z,r,P]),R=(0,a.I4)((e=>{f({currentPassword:e,onSuccess:()=>{Z(l.MT.Privacy)}})}),[f,Z]),A=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),g({currentPassword:e,onSuccess:()=>{Z(l.MT.TwoFaRecoveryEmail)}})}),[g,m,Z]),L=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),E({...r,email:e,onSuccess:()=>{Z(l.MT.TwoFaCongratulations)}})}),[m,Z,r,E]),F=(0,a.I4)((e=>{C({code:e})}),[C]),B=(0,h.Z)();switch(t){case l.MT.TwoFaDisabled:return a.ZP.createElement(ka,{onStart:b,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPassword:return a.ZP.createElement(Na,{screen:t,placeholder:B("PleaseEnterPassword"),submitLabel:B("Continue"),onSubmit:I,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement(Na,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),submitLabel:B("Continue"),onSubmit:y,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordHint:return a.ZP.createElement(wa,{icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:N,screen:t,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordEmail:return a.ZP.createElement(wa,{icon:"email",type:"email",isLoading:i,error:c,clearError:p,placeholder:B("RecoveryEmailTitle"),shouldConfirm:!0,onSubmit:k,screen:t,onScreenSelect:Z,isActive:u||[l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaNewPasswordEmailCode:return a.ZP.createElement(Ra,{isLoading:i,error:c,clearError:p,onSubmit:F,screen:t,onScreenSelect:Z,isActive:u||n===l.MT.TwoFaCongratulations,onReset:v});case l.MT.TwoFaCongratulations:return a.ZP.createElement(Ma,{onScreenSelect:Z,isActive:u,onReset:v});case l.MT.TwoFaEnabled:return a.ZP.createElement(ba,{onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordCurrent:return a.ZP.createElement(Na,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:S,onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordNew:return a.ZP.createElement(Na,{screen:t,placeholder:B("PleaseEnterNewFirstPassword"),onSubmit:w,onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement(Na,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),onSubmit:M,onScreenSelect:Z,isActive:u||[l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement(wa,{isLoading:i,error:c,clearError:p,icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:T,onScreenSelect:Z,isActive:u||n===l.MT.TwoFaCongratulations,onReset:v,screen:t});case l.MT.TwoFaTurnOff:return a.ZP.createElement(Na,{isLoading:i,error:c,clearError:p,hint:o,onSubmit:R,onScreenSelect:Z,isActive:u,onReset:v,screen:t});case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement(Na,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:A,onScreenSelect:Z,isActive:u||[l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement(wa,{screen:t,icon:"email",type:"email",placeholder:B("RecoveryEmailTitle"),onSubmit:L,onScreenSelect:Z,isActive:u||[l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:v});case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Ra,{screen:t,isLoading:i,error:c,clearError:p,onSubmit:F,onScreenSelect:Z,isActive:u||n===l.MT.TwoFaCongratulations,onReset:v});default:return}})));var La=n(1820);function Fa(e,t){const{privacy:n}=e.settings;switch(t){case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return n.phoneNumber;case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return n.lastSeen;case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return n.profilePhoto;case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return n.forwards;case l.MT.PrivacyGroupChatsDeniedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return n.chatInvite}}const Ba=(0,a.X$)((0,s.c$)(((e,t)=>{let{screen:n}=t;return{currentUserId:e.currentUserId,settings:Fa(e,n)}}))((e=>{let{isAllowList:t,screen:n,isActive:r,onScreenSelect:i,onReset:c,currentUserId:d,settings:m}=e;const{setPrivacySettings:Z}=(0,s.uC)(),v=(0,h.Z)(),P=(0,a.Ye)((()=>m?t?[...m.allowUserIds,...m.allowChatIds]:[...m.blockUserIds,...m.blockChatIds]:[]),[t,m]),[p,E]=(0,a.eJ)(""),[C,f]=(0,a.eJ)(!1),[b,I]=(0,a.eJ)(P),y=(0,yn.d7)(o.Nf),N=(0,yn.d7)(o.WS),k=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=(0,me.Tw)([...y||[],...N||[]]).filter((t=>{const n=e[t];return n&&((0,g.YC)(n.id)&&n.id!==d||(0,g.Bf)(n))}));return(0,me.Tw)([...P,...(0,g.$l)(v,t,e,p)])}),[y,N,P,v,p,d]),S=(0,a.I4)((e=>{I(e),f(!0)}),[]),w=(0,a.I4)((()=>{Z({privacyKey:ha(n),isAllowList:Boolean(t),contactsIds:b}),i(l.MT.Privacy)}),[t,b,i,n,Z]);return(0,u.ZP)(r,c,i,n),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(La.Z,{itemIds:k||[],selectedIds:b,filterValue:p,filterPlaceholder:v(t?"AlwaysShareWithPlaceholder":"NeverShareWithPlaceholder"),searchInputId:"new-group-picker-search",onSelectedIdsChange:S,onFilterChange:E}),a.ZP.createElement(mn.Z,{isShown:C,onClick:w,ariaLabel:v(t?"AlwaysShareWithTitle":"NeverShareWithTitle")},a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),$a=(0,a.X$)((0,s.c$)((e=>{const{availableReactions:t,appConfig:n}=e;return{availableReactions:t,selectedReaction:null==n?void 0:n.defaultReaction}}))((e=>{let{isActive:t,onReset:n,onScreenSelect:r,availableReactions:o,selectedReaction:i}=e;const{setDefaultReaction:c}=(0,s.uC)();(0,u.ZP)(t,n,r,l.MT.General);const d=(null==o?void 0:o.filter((e=>!e.isInactive)).map((e=>({label:a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(it.Z,{reaction:e.reaction}),e.title),value:e.reaction}))))||[],m=(0,a.I4)((e=>{c({reaction:e})}),[c]);return a.ZP.createElement("div",{className:"settings-content settings-item custom-scroll settings-quick-reaction"},a.ZP.createElement(at.Z,{name:"quick-reaction-settings",options:d,selected:i,onChange:m}))}))),xa=Object.keys(l.MT).length/2,Da=[l.MT.TwoFaDisabled,l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations,l.MT.TwoFaEnabled,l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode],Oa=[l.MT.Folders,l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersEditFolderFromChatList,l.MT.FoldersIncludedChats,l.MT.FoldersIncludedChatsFromChatList,l.MT.FoldersExcludedChats,l.MT.FoldersExcludedChatsFromChatList],Ua=[l.MT.PrivacyBlockedUsers,l.MT.PrivacyActiveSessions],Ga=[l.MT.PrivacyPhoneNumberAllowedContacts,l.MT.PrivacyPhoneNumberDeniedContacts],Ja=[l.MT.PrivacyLastSeenAllowedContacts,l.MT.PrivacyLastSeenDeniedContacts],Xa=[l.MT.PrivacyProfilePhotoAllowedContacts,l.MT.PrivacyProfilePhotoDeniedContacts],za=[l.MT.PrivacyForwardingAllowedContacts,l.MT.PrivacyForwardingDeniedContacts],_a=[l.MT.PrivacyGroupChatsAllowedContacts,l.MT.PrivacyGroupChatsDeniedContacts],Ya=(0,a.X$)((e=>{let{isActive:t,currentScreen:n,foldersState:s,foldersDispatch:r,onScreenSelect:o,onReset:c,shouldSkipTransition:d}=e;const[m,u]=(0,nn.Z)(sn,an),h=(0,a.I4)((()=>{n!==l.MT.FoldersCreateFolder&&n!==l.MT.FoldersEditFolder&&n!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),n!==l.MT.FoldersIncludedChats&&n!==l.MT.FoldersExcludedChats?c():"create"===s.mode?o(l.MT.FoldersCreateFolder):o(l.MT.FoldersEditFolder)}),[s.mode,r,n,c,o]),Z=(0,a.I4)((()=>{r({type:"saveFilters"}),h()}),[r,h]);function v(e,i,c){return a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(rn,{currentScreen:n,onReset:h,onSaveFilter:Z,onScreenSelect:o,editedFolderId:s.folderId}),function(e,i){const c={[l.MT.PrivacyPhoneNumber]:Ga.includes(i),[l.MT.PrivacyLastSeen]:Ja.includes(i),[l.MT.PrivacyProfilePhoto]:Xa.includes(i),[l.MT.PrivacyForwarding]:za.includes(i),[l.MT.PrivacyGroupChats]:_a.includes(i)},d=Da.includes(i),Z=Oa.includes(i),v=Ua.includes(i)||d||Object.keys(c).includes(i.toString())||Object.values(c).find((e=>!0===e));switch(n){case l.MT.Main:return a.ZP.createElement(cn,{onScreenSelect:o,isActive:t,onReset:h});case l.MT.EditProfile:return a.ZP.createElement(Cn,{onScreenSelect:o,isActive:t&&e,onReset:h});case l.MT.General:return a.ZP.createElement(zn,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor||i===l.MT.GeneralChatBackground||i===l.MT.QuickReaction||v||Z,onReset:h});case l.MT.QuickReaction:return a.ZP.createElement($a,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Notifications:return a.ZP.createElement(da,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.DataStorage:return a.ZP.createElement(In,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Privacy:return a.ZP.createElement(ma,{onScreenSelect:o,isActive:e||v||d,onReset:h});case l.MT.Language:return a.ZP.createElement(ua,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.GeneralChatBackground:return a.ZP.createElement(aa,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor,onReset:h});case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement(ia,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyActiveSessions:return a.ZP.createElement(ga,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyBlockedUsers:return a.ZP.createElement(Ca,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyLastSeen:case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyForwarding:case l.MT.PrivacyGroupChats:return a.ZP.createElement(Za,{screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement(Ba,{isAllowList:!0,screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement(Ba,{screen:n,onScreenSelect:o,isActive:e,onReset:h});case l.MT.Folders:case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(Fn,{currentScreen:n,shownScreen:i,state:s,dispatch:r,isActive:e,onScreenSelect:o,onReset:h});case l.MT.TwoFaDisabled:case l.MT.TwoFaNewPassword:case l.MT.TwoFaNewPasswordConfirm:case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaCongratulations:case l.MT.TwoFaEnabled:case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:case l.MT.TwoFaChangePasswordHint:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:case l.MT.TwoFaRecoveryEmail:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Aa,{currentScreen:n,state:m,dispatch:u,shownScreen:i,isActive:e,onScreenSelect:o,onReset:h});default:return}}(e,c))}return a.ZP.createElement(L.Z,{id:"Settings",name:d?"none":i.s0,activeKey:n,renderCount:xa},v)})),Ha=(0,G.P2)((e=>e()),6e4,!0),Va=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n,statusesById:a}=e.users;return{usersById:n,userStatusesById:a,contactIds:t,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{isActive:t,filter:n,usersById:r,userStatusesById:l,contactIds:o,serverTimeOffset:c,onReset:d}=e;const{loadContactList:m,openChat:h}=(0,s.uC)();(0,a.d4)((()=>{Ha((()=>{m()}))})),(0,u.ZP)(t,d);const Z=(0,a.I4)((e=>{h({id:e,shouldReplaceHistory:!0})}),[h]),v=(0,a.Ye)((()=>{if(!o)return;const e=(0,g.kK)(o,r,n);return(0,g.Z0)(e,r,l,void 0,c)}),[o,n,r,l,c]),[P,p]=(0,Ne.Z)(void 0,v,Boolean(n));return a.ZP.createElement(Re.Z,{items:P,onLoadMore:p,className:"chat-list custom-scroll"},null!=P&&P.length?P.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable",onClick:()=>Z(e),ripple:!i.wB},a.ZP.createElement(Fe.Z,{userId:e,forceShowSelf:!0,avatarSize:"large"})))):P&&!P.length?a.ZP.createElement("p",{className:"no-results",key:"no-results",dir:"auto"},n.length?"No contacts matched your search.":"Contact list is empty."):a.ZP.createElement(we.Z,{key:"loading"}))}))),qa=(0,G.P2)((e=>e()),6e4,!0),ja=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n}=e.chats,{query:a,fetchingStatus:s,globalResults:r,localResults:l}=e.globalSearch,{userIds:o}=r||{},{userIds:i}=l||{};return{chatsById:n,localContactIds:t,searchQuery:a,isSearching:null==s?void 0:s.chats,globalUserIds:o,localUserIds:i}}))((e=>{let{isChannel:t,isActive:n,selectedMemberIds:r,onSelectedMemberIdsChange:l,onNextStep:o,onReset:i,chatsById:c,localContactIds:d,searchQuery:m,isSearching:Z,localUserIds:v,globalUserIds:P}=e;const{loadContactList:p,setGlobalSearchQuery:E}=(0,s.uC)();(0,a.d4)((()=>{qa((()=>{p()}))}));const C=(0,h.Z)();(0,u.ZP)(n,i);const f=(0,a.I4)((e=>{E({query:e})}),[E]),b=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,t=d?(0,g.kK)(d,e,m):[];return(0,g.ih)((0,me.Tw)([...t,...v||[],...P||[]]).filter((t=>{const n=e[t];return!n||!n.isSelf&&(n.canBeInvitedToGroup||!(0,g.cS)(n))})),c,!1,r)}),[d,c,m,v,P,r]),I=(0,a.I4)((()=>{(r.length||t)&&(E({query:""}),o())}),[r.length,t,E,o]);return a.ZP.createElement("div",{className:"NewChat step-1"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:i,ariaLabel:"Return to Chat List"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,C("GroupAddMembers"))),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(La.Z,{itemIds:b,selectedIds:r,filterValue:m,filterPlaceholder:C("SendMessageTo"),searchInputId:"new-group-picker-search",isLoading:Z,onSelectedIdsChange:l,onFilterChange:f}),a.ZP.createElement(mn.Z,{isShown:Boolean(r.length||t),onClick:I,ariaLabel:t?"Continue To Channel Info":"Continue To Group Info"},a.ZP.createElement("i",{className:"icon-arrow-right"}))))}))),Ka=(0,a.X$)((0,s.c$)((e=>{const{progress:t,error:n}=e.chatCreation||{};return{creationProgress:t,creationError:n}}))((e=>{let{isChannel:t,isActive:n,memberIds:r,onReset:o,creationProgress:i,creationError:c}=e;const{createGroupChat:d,createChannel:m}=(0,s.uC)(),Z=(0,h.Z)();(0,u.ZP)(n,o);const[v,P]=(0,a.eJ)(""),[g,p]=(0,a.eJ)(""),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),I="Chat title can't be empty",y="Channel title can't be empty",N="Sorry, creating supergroups is not yet supported",k=i===l.Nh.InProgress,S=(0,a.I4)((e=>{const{value:t}=e.currentTarget,n=t.replace(/^\s+/,"");P(n),n!==t&&(e.currentTarget.value=n)}),[]),w=(0,a.I4)((e=>{p(e.currentTarget.value)}),[]),M=(0,a.I4)((()=>{v.length?r.length>199?b(N):d({title:v,photo:E,memberIds:r}):b(I)}),[v,r,d,E,I,N]),T=(0,a.I4)((()=>{v.length?m({title:v,about:g,photo:E,memberIds:r}):b(y)}),[v,m,g,E,r,y]);(0,a.d4)((()=>{i===l.Nh.Complete&&o(!0)}),[i,o]);const A=c&&Z(c)||(f!==I&&f!==y?f:void 0);return a.ZP.createElement("div",{className:"NewChat"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>o(),ariaLabel:"Return to member selection"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,Z(t?"NewChannel":"NewGroup"))),a.ZP.createElement("div",{className:"NewChat-inner step-2"},a.ZP.createElement(dn.Z,{onChange:C,title:Z("AddPhoto")}),a.ZP.createElement(Te.Z,{value:v,onChange:S,label:Z(t?"EnterChannelName":"GroupName"),error:f===I||f===y?f:void 0}),t&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Te.Z,{value:g,onChange:w,label:Z("DescriptionOptionalPlaceholder")}),a.ZP.createElement("p",{className:"note"},Z("DescriptionInfo"))),A&&a.ZP.createElement("p",{className:"error"},A),r.length>0&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"chat-members-heading"},Z("GroupInfo.ParticipantCount",r.length,"i")),a.ZP.createElement("div",{className:"chat-members-list custom-scroll"},r.map((e=>a.ZP.createElement(Ae.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Fe.Z,{userId:e}))))))),a.ZP.createElement(mn.Z,{isShown:0!==v.length,onClick:t?T:M,disabled:k,ariaLabel:t?Z("ChannelIntro.CreateChannel"):"Create Group"},k?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),Wa=Object.keys(l.du).length/2,Qa=(0,a.X$)((e=>{let{isActive:t,isChannel:n=!1,content:s,onContentChange:r,onReset:o}=e;const[c,d]=(0,a.eJ)([]),m=(0,a.I4)((()=>{r(n?l.du.NewChannelStep2:l.du.NewGroupStep2)}),[n,r]);return a.ZP.createElement(L.Z,{id:"NewChat",name:i.s0,renderCount:Wa,activeKey:s},(e=>{switch(s){case l.du.NewChannelStep1:case l.du.NewGroupStep1:return a.ZP.createElement(ja,{isChannel:n,isActive:t,selectedMemberIds:c,onSelectedMemberIdsChange:d,onNextStep:m,onReset:o});case l.du.NewChannelStep2:case l.du.NewGroupStep2:return a.ZP.createElement(Ka,{isChannel:n,isActive:e&&t,memberIds:c,onReset:o});default:return}}))}));var es=n(1080);const ts=(0,a.X$)((e=>{let{isActive:t,onReset:n,onContentChange:s}=e;const r=(0,h.Z)();return(0,u.ZP)(t,n,s,l.du.Archived),a.ZP.createElement("div",{className:"ArchivedChats"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:n,ariaLabel:"Return to chat list"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,r("ArchivedChats"))),a.ZP.createElement(es.Z,{folderType:"archived",isActive:t}))}));var ns=n(1218);const as=(0,a.X$)((0,s.c$)((e=>{const{byId:t,orderedIds:n}=e.chatFolders;return{foldersById:t,folderOrderedIds:n}}))((e=>{let{isOpen:t,chatId:n,foldersById:r,folderOrderedIds:l,onClose:o,onCloseAnimationEnd:i}=e;const{editChatFolders:c}=(0,s.uC)(),d=(0,h.Z)(),m=(0,a.Ye)((()=>r?Object.keys(r).reduce(((e,t)=>{const{includedChatIds:a,pinnedChatIds:s}=r[Number(t)];return(a.includes(n)||null!=s&&s.includes(n))&&e.push(t),e}),[]):[]),[n,r]),[u,Z]=(0,a.eJ)(m),v=(0,a.Ye)((()=>(null==l?void 0:l.map((e=>({label:r?r[e].title:"",value:String(e)}))))||[]),[l,r]),P=(0,a.I4)((()=>{const e=m.filter((e=>!u.includes(e))).map(Number),t=u.filter((e=>!m.includes(e))).map(Number);c({chatId:n,idsToRemove:e,idsToAdd:t}),o()}),[n,c,m,o,u]);if(r&&l)return a.ZP.createElement(Me.Z,{isOpen:t,onClose:o,onCloseAnimationEnd:i,onEnter:P,className:"delete",title:d("FilterAddTo")},a.ZP.createElement(ns.Z,{options:v,selected:u,onChange:Z,round:!0}),a.ZP.createElement(R.Z,{color:"primary",className:"confirm-dialog-button",isText:!0,onClick:P},d("FilterAddTo")),a.ZP.createElement(R.Z,{className:"confirm-dialog-button",isText:!0,onClick:o},d("Cancel")))})));var ss=n(4319),rs=n(647);function ls(e){return e?"lng_context_copy_selected":"lng_context_copy_text"}let os,is;const cs={Down:!0,ArrowDown:!0,Up:!0,ArrowUp:!0,Left:!0,ArrowLeft:!0,Right:!0,ArrowRight:!0," ":!0,PageUp:!0,PageDown:!0,End:!0,Home:!0,Tab:!0},ds=e=>"changedTouches"in e?e.changedTouches[0].clientY:0,ms=e=>{const t="deltaY"in e?e.deltaY:ds(e);if(!os||!os.contains(e.target)||os.scrollTop<=0&&t<=0||os.scrollTop>=os.scrollHeight-os.offsetHeight&&t>=0){if(is&&e.target.closest(is))return;e.preventDefault()}};function us(e){cs[e.key]&&!function(e){if(!(e&&e instanceof HTMLElement))return!1;const t=e,n=t.tagName.toLowerCase();if("textarea"===n)return!0;if("input"!==n)return!1;const a=t.getAttribute("type");return!!a&&["text","password","number","email","tel","url","search","date","datetime","datetime-local","time","month","week"].indexOf(a.toLowerCase())>-1}(e.target)&&e.preventDefault()}function hs(e,t){os=e,is=t,document.addEventListener("wheel",ms,{passive:!1}),document.addEventListener("touchmove",ms,{passive:!1}),document.onkeydown=us}function Zs(){os=void 0,is=void 0,document.removeEventListener("wheel",ms),document.removeEventListener("touchmove",ms),document.onkeydown=null}var vs=n(3394),Ps=n(2328);const gs=(0,X.y)("ReactionSelectorReaction"),ps=(0,a.X$)((e=>{var t;let{reaction:n,previewIndex:s,onSendReaction:l,isReady:o}=e;const i=(0,a.sO)(null),c=(0,Z.Z)(`document${null===(t=n.selectAnimation)||void 0===t?void 0:t.id}`,!o,r.IU.Lottie),[d,m,u]=(0,ye.Z)(),[h,v]=(0,ye.Z)(),P=Boolean(o&&c),{transitionClassNames:g}=(0,_.Z)(P),{shouldRender:p,transitionClassNames:E}=(0,_.Z)(!o||!h,void 0,!0);return a.ZP.createElement("div",{className:gs("&"),onClick:function(){if(!i.current)return;const{x:e,y:t}=i.current.getBoundingClientRect();l(n.reaction,e,t)},ref:i,onMouseEnter:o?m:void 0},p&&a.ZP.createElement("div",{className:gs("static",o?[E]:void 0),style:`background-position-x: ${-32*s}px;`}),P&&a.ZP.createElement(mt.Z,{id:`select_${n.reaction}`,className:gs("animated",[g]),animationData:c,play:d,noLoop:!0,size:32,onLoad:v,onEnded:u}))})),Es=(0,X.y)("ReactionSelector"),Cs=(0,a.X$)((e=>{let{availableReactions:t,enabledReactions:n,onSendReaction:s,isPrivate:r,isReady:l}=e;const o=(0,a.sO)(null),[i,c]=(0,ye.Z)(!1);(0,Ct.Z)(o.current,!i),(0,a.bt)((()=>{c()}),[c]);const d=e=>{o&&("deltaY"in e?e.deltaY:ds(e))&&e.preventDefault()};if((r||null!=n&&n.length)&&t)return a.ZP.createElement("div",{className:Es("&"),onWheelCapture:d,onTouchMove:d},a.ZP.createElement("div",{className:Es("bubble-big")}),a.ZP.createElement("div",{className:Es("bubble-small")}),a.ZP.createElement("div",{className:Es("items-wrapper")},a.ZP.createElement("div",{className:Es("items",["no-scrollbar"]),ref:o},null==t?void 0:t.map(((e,t)=>{if(!e.isInactive&&(r||n&&n.includes(e.reaction)))return a.ZP.createElement(ps,{key:e.reaction,previewIndex:t,isReady:l,onSendReaction:s,reaction:e})})))))})),fs=(0,a.X$)((e=>{var t,n,s,l;let{availableReactions:o,isOpen:c,message:d,isPrivate:m,enabledReactions:u,anchor:Z,canSendNow:v,canReschedule:P,canReply:p,canEdit:E,canPin:C,canUnpin:f,canDelete:b,canReport:I,canForward:y,canFaveSticker:N,canUnfaveSticker:k,canCopy:S,canCopyLink:w,canSelect:M,canDownload:T,isDownloading:R,canShowSeenBy:A,canShowReactionsCount:L,canRemoveReaction:F,canShowReactionList:$,seenByRecentUsers:x,onReply:D,onEdit:O,onPin:U,onUnpin:G,onForward:J,onDelete:z,onReport:_,onFaveSticker:Y,onUnfaveSticker:H,onSelect:V,onSend:q,onReschedule:j,onClose:K,onCloseAnimationEnd:W,onCopyLink:Q,onDownload:ee,onShowSeenBy:te,onShowReactors:ne,onSendReaction:ae}=e;const se=(0,a.sO)(null),re=(0,a.sO)(null),le=function(e,t,n){const a=[],s=(0,g.UD)(e),l=(0,g.O$)(e)||((0,g.Cg)(e)?void 0:(0,g.F$)(e)),o=(0,g.Ti)(e,"inline"),i=l&&(o||(0,g.BM)(e))&&ss.yl,c=window.getSelection();if(i&&a.push({label:"lng_context_copy_image",handler:()=>{Promise.resolve(o?rs.he(o,r.IU.BlobUrl):l.blobUrl).then(ss.VP),t&&t()}}),s){var d;const n=Boolean((null==c||null===(d=c.anchorNode)||void 0===d?void 0:d.parentNode)&&c.anchorNode.parentNode.closest(".Message .content-inner")&&""!==c.toString().replace(/(?:\r\n|\r|\n)/g,""));a.push({label:ls(n),handler:()=>{const a=n&&c?c.toString():(0,g.EU)(e);(0,ss.TE)(a),t&&t()}})}return n&&a.push({label:"lng_context_copy_message_link",handler:()=>{n(),t&&t()}}),a}(d,K,w?Q:void 0),oe=!(m||null!=u&&u.length),ie=$&&!oe,[ce,de,me]=(0,ye.Z)(),ue=(0,a.I4)((()=>document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id="${d.id}"]`)),[d.id]),he=(0,a.I4)((()=>document.querySelector(".Transition__slide--active > .MessageList")),[]),Ze=(0,a.I4)((()=>document.querySelector(".MessageContextMenu .bubble")),[]),ve=(0,a.I4)((()=>{var e;const t=i.wB&&(null===(e=document.querySelector(".AudioPlayer-content"))||void 0===e?void 0:e.offsetHeight)||0,n=document.querySelector(".HeaderPinnedMessage-wrapper"),a=(i.wB&&!t||!i.wB&&(null==n?void 0:n.classList.contains("full-width")))&&(null==n?void 0:n.offsetHeight)||0;return{extraPaddingX:10,extraTopPadding:document.querySelector(".MiddleHeader").offsetHeight,marginSides:ie?32:void 0,extraMarginTop:a+t}}),[ie]),Pe=(0,a.I4)((()=>{ae(void 0,0,0)}),[ae]);(0,a.d4)((()=>{c?setTimeout((()=>{de()}),200):me()}),[c,de,me]);const{positionX:pe,positionY:Ee,transformOriginX:Ce,transformOriginY:fe,style:be,menuStyle:Ie,withScroll:Ne}=(0,vs.Z)(Z,ue,he,Ze,ve);(0,a.d4)((()=>(hs(Ne?re.current:void 0,".ReactionSelector"),Zs)),[Ne]);const ke=(0,h.Z)();return a.ZP.createElement(Ps.Z,{ref:se,isOpen:c,transformOriginX:Ce,transformOriginY:fe,positionX:pe,positionY:Ee,style:be,bubbleStyle:Ie,className:(0,X.Z)("MessageContextMenu","fluid",ie&&"with-reactions"),onClose:K,onCloseAnimationEnd:W},$&&a.ZP.createElement(Cs,{enabledReactions:u,onSendReaction:ae,isPrivate:m,availableReactions:o,isReady:ce}),a.ZP.createElement("div",{className:"scrollable-content custom-scroll",style:Ie,ref:re},F&&a.ZP.createElement(B.Z,{icon:"reactions",onClick:Pe},"Remove Reaction"),v&&a.ZP.createElement(B.Z,{icon:"send-outline",onClick:q},ke("MessageScheduleSend")),P&&a.ZP.createElement(B.Z,{icon:"schedule",onClick:j},ke("MessageScheduleEditTime")),p&&a.ZP.createElement(B.Z,{icon:"reply",onClick:D},ke("Reply")),E&&a.ZP.createElement(B.Z,{icon:"edit",onClick:O},ke("Edit")),N&&a.ZP.createElement(B.Z,{icon:"favorite",onClick:Y},ke("AddToFavorites")),k&&a.ZP.createElement(B.Z,{icon:"favorite",onClick:H},ke("Stickers.RemoveFromFavorites")),S&&le.map((e=>a.ZP.createElement(B.Z,{key:e.label,icon:"copy",onClick:e.handler},ke(e.label)))),C&&a.ZP.createElement(B.Z,{icon:"pin",onClick:U},ke("DialogPin")),f&&a.ZP.createElement(B.Z,{icon:"unpin",onClick:G},ke("DialogUnpin")),T&&a.ZP.createElement(B.Z,{icon:"download",onClick:ee},ke(R?"lng_context_cancel_download":"lng_media_download")),y&&a.ZP.createElement(B.Z,{icon:"forward",onClick:J},ke("Forward")),M&&a.ZP.createElement(B.Z,{icon:"select",onClick:V},ke("Common.Select")),I&&a.ZP.createElement(B.Z,{icon:"flag",onClick:_},ke("lng_context_report_msg")),(A||L)&&a.ZP.createElement(B.Z,{icon:L?"reactions":"group",onClick:L?ne:te,disabled:!(L||null!==(t=d.seenByUserIds)&&void 0!==t&&t.length)},L&&null!==(n=d.reactors)&&void 0!==n&&n.count?A&&null!==(s=d.seenByUserIds)&&void 0!==s&&s.length?ke("Chat.OutgoingContextMixedReactionCount",[d.reactors.count,d.seenByUserIds.length]):ke("Chat.ContextReactionCount",d.reactors.count,"i"):null!==(l=d.seenByUserIds)&&void 0!==l&&l.length?ke("Conversation.ContextMenuSeen",d.seenByUserIds.length,"i"):ke("Conversation.ContextMenuNoViews"),a.ZP.createElement("div",{className:"avatars"},null==x?void 0:x.map((e=>a.ZP.createElement(ge.Z,{size:"micro",user:e}))))),b&&a.ZP.createElement(B.Z,{destructive:!0,icon:"delete",onClick:z},ke("Delete"))))})),bs=2*I.Gw,Is=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a,s;let{message:r,messageListType:l}=t;const{threadId:i}=(0,p.Bt)(e)||{},c=(0,p.xs)(e,r.chatId),d=(0,p.Z1)(e,r.chatId),{seenByExpiresAt:m,seenByMaxChatMembers:u}=e.appConfig||{},{noOptions:h,canReply:Z,canPin:v,canUnpin:P,canDelete:E,canReport:C,canEdit:f,canForward:b,canFaveSticker:I,canUnfaveSticker:y,canCopy:N,canCopyLink:k,canSelect:S,canDownload:w}=i&&(0,p._k)(e,r,i)||{},M="pinned"===l,T="scheduled"===l,R=d&&(0,g.eA)(d),A=(0,g.CI)(r),L=Boolean(d&&u&&m&&(0,g.Bf)(d)&&(0,g.B4)(r)&&!T&&d.membersCount&&d.membersCountDate.now()/1e3-m),F=d&&(0,g.YC)(d.id),B=(0,g.Lo)(r),$=!A&&!R&&!T&&!B&&!F&&r.reactions&&!(0,g.JE)(r.reactions)&&r.reactions.canSeeList,x=F&&(null===(n=r.reactions)||void 0===n||null===(a=n.results)||void 0===a?void 0:a.some((e=>e.isChosen))),D=(0,p.EV)(e,r);return{availableReactions:e.availableReactions,noOptions:h,canSendNow:T,canReschedule:T,canReply:!M&&!T&&Z,canPin:!T&&v,canUnpin:!T&&P,canDelete:E,canReport:C,canEdit:!M&&f,canForward:!D&&!T&&b,canFaveSticker:!T&&I,canUnfaveSticker:!T&&y,canCopy:!D&&N,canCopyLink:!D&&!T&&k,canSelect:S,canDownload:!D&&w,activeDownloads:c,canShowSeenBy:L,enabledReactions:null==d||null===(s=d.fullInfo)||void 0===s?void 0:s.enabledReactions,isPrivate:F,hasFullInfo:Boolean(null==d?void 0:d.fullInfo),canShowReactionsCount:$,canShowReactionList:!A&&!B&&!T&&(null==d?void 0:d.id)!==o.aw,canRemoveReaction:x}}))((e=>{var t;let{availableReactions:n,isOpen:r,messageListType:l,chatUsername:o,message:i,album:c,anchor:d,onClose:m,onCloseAnimationEnd:u,noOptions:h,canSendNow:Z,hasFullInfo:v,canReschedule:P,canReply:g,canPin:p,canUnpin:E,canDelete:C,canReport:f,canShowReactionsCount:b,canShowReactionList:I,canRemoveReaction:y,canEdit:N,enabledReactions:k,isPrivate:S,canForward:w,canFaveSticker:M,canUnfaveSticker:T,canCopy:R,canCopyLink:A,canSelect:L,canDownload:F,activeDownloads:B,canShowSeenBy:$}=e;const{setReplyingToId:x,setEditingId:D,pinMessage:O,openForwardMenu:U,faveSticker:G,unfaveSticker:J,toggleMessageSelection:z,sendScheduledMessages:Y,rescheduleMessage:H,downloadMessageMedia:V,cancelMessageMediaDownload:q,loadSeenBy:K,openSeenByModal:W,sendReaction:Q,openReactorListModal:ee,loadFullChat:te,loadReactors:ne}=(0,s.uC)(),{transitionClassNames:ae}=(0,_.Z)(r,u,void 0,!1),[se,re]=(0,a.eJ)(!0),[le,oe]=(0,a.eJ)(!1),[ie,ce]=(0,a.eJ)(!1),[de,me]=(0,a.eJ)(!1),[ue,he,Ze]=(0,ye.Z)();(0,a.d4)((()=>{$&&r&&K({chatId:i.chatId,messageId:i.id})}),[K,r,i.chatId,i.id,$]),(0,a.d4)((()=>{b&&r&&ne({chatId:i.chatId,messageId:i.id})}),[b,r,ne,i.chatId,i.id]),(0,a.d4)((()=>{v||S||!r||te({chatId:i.chatId})}),[v,r,S,te,i.chatId]);const ve=(0,a.Ye)((()=>{var e,t,n;if(null!==(e=i.reactions)&&void 0!==e&&null!==(t=e.recentReactions)&&void 0!==t&&t.length){var a,r;const e=(0,s.Rd)().users.byId;return null===(a=i.reactions)||void 0===a||null===(r=a.recentReactions)||void 0===r?void 0:r.slice(0,3).map((t=>{let{userId:n}=t;return e[n]})).filter(Boolean)}if(!i.seenByUserIds)return;const l=(0,s.Rd)().users.byId;return null===(n=i.seenByUserIds)||void 0===n?void 0:n.slice(0,3).map((e=>l[e])).filter(Boolean)}),[null===(t=i.reactions)||void 0===t?void 0:t.recentReactions,i.seenByUserIds]),Pe=c?c.messages.some((e=>B.includes(e.id))):B.includes(i.id),ge=(0,a.I4)((()=>{re(!1),oe(!0)}),[]),pe=(0,a.I4)((()=>{re(!1),ce(!0)}),[]),Ee=(0,a.I4)((()=>{re(!1),m()}),[m]),Ce=(0,a.I4)((()=>{oe(!1),m()}),[m]),fe=(0,a.I4)((()=>{ce(!1),m()}),[m]),be=(0,a.I4)((()=>{me(!1),m()}),[m]),Ie=(0,a.I4)((()=>{Ze(),m()}),[Ze,m]),Ne=(0,a.I4)((()=>{x({messageId:i.id}),Ee()}),[x,i.id,Ee]),ke=(0,a.I4)((()=>{D({messageId:i.id}),Ee()}),[D,i.id,Ee]),Se=(0,a.I4)((()=>{re(!1),me(!0)}),[]),we=(0,a.I4)((()=>{O({messageId:i.id,isUnpin:!0}),Ee()}),[O,i.id,Ee]),Me=(0,a.I4)((()=>{if(Ee(),null!=c&&c.messages){const e=c.messages.map((e=>{let{id:t}=e;return t}));U({fromChatId:i.chatId,messageIds:e})}else U({fromChatId:i.chatId,messageIds:[i.id]})}),[U,i,Ee,c]),Te=(0,a.I4)((()=>{Ee(),G({sticker:i.content.sticker})}),[Ee,i.content.sticker,G]),Re=(0,a.I4)((()=>{Ee(),J({sticker:i.content.sticker})}),[Ee,i.content.sticker,J]),Ae=(0,a.I4)((()=>{const e=null!=c&&c.messages?{messageId:i.id,childMessageIds:c.messages.map((e=>{let{id:t}=e;return t})),withShift:!1}:{messageId:i.id,withShift:!1};z(e),Ee()}),[Ee,i.id,z,c]),Le=(0,a.I4)((()=>{Y({chatId:i.chatId,id:i.id}),Ee()}),[Ee,i.chatId,i.id,Y]),Fe=(0,a.I4)((()=>{re(!1),he()}),[he]),Be=(0,a.I4)((()=>{Ee(),W({chatId:i.chatId,messageId:i.id})}),[Ee,i.chatId,i.id,W]),$e=(0,a.I4)((()=>{Ee(),ee({chatId:i.chatId,messageId:i.id})}),[Ee,ee,i.chatId,i.id]),xe=(0,a.I4)((e=>{H({chatId:i.chatId,messageId:i.id,scheduledAt:Math.round(e.getTime()/1e3)})}),[i.chatId,i.id,H]),De=(0,a.I4)((()=>{(0,ss.TE)(`https://t.me/${o||`c/${i.chatId.replace("-","")}`}/${i.id}`),Ee()}),[o,Ee,i.chatId,i.id]),Oe=(0,a.I4)((()=>{((null==c?void 0:c.messages)||[i]).forEach((e=>{Pe?q({message:e}):V({message:e})})),Ee()}),[c,i,Ee,Pe,q,V]),Ue=(0,a.I4)(((e,t,n)=>{Q({chatId:i.chatId,messageId:i.id,reaction:e,x:t,y:n,startSize:bs}),Ee()}),[Ee,i.chatId,i.id,Q]),Ge=(0,a.Ye)((()=>(c?c.messages:[i]).map((e=>{let{id:t}=e;return t}))),[c,i]);if(h)return void Ee();const Je=new Date;return Je.setFullYear(Je.getFullYear()+1),a.ZP.createElement("div",{className:(0,X.Z)("ContextMenuContainer",ae)},a.ZP.createElement(fs,{availableReactions:n,message:i,isPrivate:S,isOpen:se,enabledReactions:k,anchor:d,canShowReactionsCount:b,canShowReactionList:I,canRemoveReaction:y,canSendNow:Z,canReschedule:P,canReply:g,canDelete:C,canReport:f,canPin:p,canUnpin:E,canEdit:N,canForward:w,canFaveSticker:M,canUnfaveSticker:T,canCopy:R,canCopyLink:A,canSelect:L,canDownload:F,canShowSeenBy:$,isDownloading:Pe,seenByRecentUsers:ve,onReply:Ne,onEdit:ke,onPin:Se,onUnpin:we,onForward:Me,onDelete:ge,onReport:pe,onFaveSticker:Te,onUnfaveSticker:Re,onSelect:Ae,onSend:Le,onReschedule:Fe,onClose:Ee,onCopyLink:De,onDownload:Oe,onShowSeenBy:Be,onSendReaction:Ue,onShowReactors:$e}),a.ZP.createElement(We,{isOpen:le,isSchedule:"scheduled"===l,onClose:Ce,album:c,message:i}),a.ZP.createElement(st,{isOpen:ie,onClose:fe,messageIds:Ge}),a.ZP.createElement(Qe,{isOpen:de,messageId:i.id,chatId:i.chatId,onClose:be}),P&&a.ZP.createElement(je,{isOpen:ue,withTimePicker:!0,selectedAt:1e3*i.date,maxAt:(0,j._F)(Je),isFutureMode:!0,onClose:Ie,onSubmit:xe}))}))),ys=(0,a.X$)((0,s.c$)(((e,t)=>{let{fromSticker:n,stickerSetShortName:a}=t;const s=(0,p.Bt)(e),{chatId:r,threadId:l}=s||{},o=r&&(0,p.Z1)(e,r),i=o?(0,g.H5)(o):void 0;return{canSendStickers:Boolean(o&&l&&(0,g.Qm)(o,l)&&(null==i?void 0:i.canSendStickers)),stickerSet:n?(0,p.Ny)(e,n.stickerSetId):a?(0,p.E_)(e,a):void 0}}))((e=>{let{isOpen:t,fromSticker:n,stickerSetShortName:r,stickerSet:l,canSendStickers:i,onClose:c}=e;const{loadStickers:d,toggleStickerSet:m,sendMessage:u}=(0,s.uC)(),Z=(0,a.sO)(null),v=(0,h.Z)(),{observe:P}=(0,Bt.S1)({rootRef:Z,throttleMs:200,isDisabled:!t});(0,a.d4)((()=>{if(t)if(n){const{stickerSetId:e,stickerSetAccessHash:t}=n;d({stickerSetId:e,stickerSetAccessHash:t})}else r&&d({stickerSetShortName:r})}),[t,n,d,r]);const g=(0,a.I4)((e=>{e={...e,isPreloadedGlobally:!0},u({sticker:e}),c()}),[c,u]),p=(0,a.I4)((()=>{l&&(m({stickerSetId:l.id}),c())}),[c,l,m]);return a.ZP.createElement(Me.Z,{className:"StickerSetModal",isOpen:t,onClose:c,hasCloseButton:!0,title:l?(0,Pe.Z)(l.title,["emoji","links"]):v("AccDescrStickerSet")},null!=l&&l.stickers?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{ref:Z,className:"stickers custom-scroll"},l.stickers.map((e=>a.ZP.createElement(On.Z,{sticker:e,size:o.yK,observeIntersection:P,onClick:i?g:void 0,clickArg:e})))),a.ZP.createElement("div",{className:"button-wrapper"},a.ZP.createElement(R.Z,{size:"smaller",fluid:!0,color:l.installedDate?"danger":"primary",onClick:p},v(l.installedDate?"StickerPack.RemoveStickerCount":"StickerPack.AddStickerCount",l.count,"i")))):a.ZP.createElement(we.Z,null))})));var Ns=n(2898);const ks=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a);if(!s||s.isRestricted)return{};const r=(0,g.YC)(s.id),l=r?(0,p.dy)(e,a):void 0,o=l&&(0,g.kw)(l);return{chat:s,isMuted:(0,g.i4)(s,(0,p.dZ)(e),(0,p.NJ)(e)),isPrivate:r,canAddContact:o,canDeleteChat:(0,g.cc)(s),hasLinkedChat:Boolean(null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.linkedChatId)}}))((e=>{let{chatId:t,isOpen:n,withExtraActions:r,anchor:l,isChannel:o,canStartBot:c,canRestartBot:d,canSubscribe:m,canSearch:u,canCall:Z,canMute:v,canLeave:P,canEnterVoiceChat:g,canCreateVoiceChat:p,chat:E,isPrivate:C,isMuted:f,canDeleteChat:b,hasLinkedChat:I,canAddContact:y,onSubscribeChannel:N,onSearchClick:k,onClose:S,onCloseAnimationEnd:w}=e;const{updateChatMutedState:M,enterMessageSelectMode:T,sendBotCommand:R,restartBot:A,joinGroupCall:L,createGroupCall:F,openLinkedChat:$,addContact:x,openCallFallbackConfirm:D}=(0,s.uC)(),[O,U]=(0,a.eJ)(!0),[G,J]=(0,a.eJ)(!1),{x:X,y:z}=l;(0,_.Z)(n,w,void 0,!1);const Y=(0,a.I4)((()=>{U(!1),J(!0)}),[]),H=(0,a.I4)((()=>{U(!1),S()}),[S]),V=(0,a.I4)((()=>{J(!1),S()}),[S]),q=(0,a.I4)((()=>{R({command:"/start"})}),[R]),j=(0,a.I4)((()=>{A({chatId:t})}),[t,A]),K=(0,a.I4)((()=>{M({chatId:t,isMuted:!f}),H()}),[t,H,f,M]),W=(0,a.I4)((()=>{p?F({chatId:t}):L({chatId:t}),H()}),[H,p,t,L,F]),Q=(0,a.I4)((()=>{$({id:t}),H()}),[t,H,$]),ee=(0,a.I4)((()=>{x({userId:t}),H()}),[x,t,H]),te=(0,a.I4)((()=>{N(),H()}),[H,N]),ne=(0,a.I4)((()=>{D(),H()}),[H,D]),ae=(0,a.I4)((()=>{k(),H()}),[H,k]),se=(0,a.I4)((()=>{T(),H()}),[H,T]);(0,a.d4)((()=>(hs(),Zs)),[]);const re=(0,h.Z)();return a.ZP.createElement(Ns.Z,null,a.ZP.createElement("div",{className:"HeaderMenuContainer"},a.ZP.createElement(Ps.Z,{isOpen:O,positionX:"right",style:`left: ${X}px;top: ${z}px;`,onClose:H},r&&c&&a.ZP.createElement(B.Z,{icon:"bots",onClick:q},re("BotStart")),r&&d&&a.ZP.createElement(B.Z,{icon:"bots",onClick:j},re("BotRestart")),r&&m&&a.ZP.createElement(B.Z,{icon:o?"channel":"group",onClick:te},re(o?"ProfileJoinChannel":"ProfileJoinGroup")),y&&a.ZP.createElement(B.Z,{icon:"add-user",onClick:ee},re("AddContact")),i.wB&&Z&&a.ZP.createElement(B.Z,{icon:"phone",onClick:ne},re("Call")),i.wB&&u&&a.ZP.createElement(B.Z,{icon:"search",onClick:ae},re("Search")),v&&a.ZP.createElement(B.Z,{icon:f?"unmute":"mute",onClick:K},re(f?"ChatsUnmute":"ChatsMute")),(g||p)&&a.ZP.createElement(B.Z,{icon:"voice-chat",onClick:W},re(p?"StartVoipChat":"VoipGroupJoinCall")),I&&a.ZP.createElement(B.Z,{icon:o?"comments":"channel",onClick:Q},re(o?"ViewDiscussion":"lng_profile_view_channel")),a.ZP.createElement(B.Z,{icon:"select",onClick:se},re("ReportSelectMessages")),P&&a.ZP.createElement(B.Z,{destructive:!0,icon:"delete",onClick:Y},re(C?"DeleteChatUser":b?"GroupInfo.DeleteAndExit":o?"LeaveChannel":"Group.LeaveGroup"))),E&&a.ZP.createElement(gt.Z,{isOpen:G,onClose:V,chat:E})))})));var Ss=n(9589);const ws=(0,G.Ds)((e=>e()),200,!1),Ms=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.jr)(e);if(!t)return{};const{query:n,results:a}=(0,p.n5)(e)||{},{totalCount:s,foundIds:r}=a||{};return{chat:t,query:n,totalCount:s,foundIds:r,isHistoryCalendarOpen:Boolean(e.historyCalendarSelectedAt)}}))((e=>{let{isActive:t,chat:n,query:r,totalCount:l,foundIds:o,isHistoryCalendarOpen:i}=e;const{setLocalTextSearchQuery:c,searchTextMessagesLocal:d,focusMessage:m,closeLocalTextSearch:u,openHistoryCalendar:h}=(0,s.uC)(),Z=(0,a.sO)(null),[v,P]=(0,a.eJ)(0);(0,a.d4)((()=>{const{visualViewport:e}=window;if(!e)return;const t=document.getElementById("Main"),n=()=>{const{activeElement:n}=document;if(n&&n===Z.current){const{pageTop:n,height:a}=e;t.style.transform=`translateY(${n}px)`,t.style.height=`${a}px`,document.documentElement.scrollTop=n}else t.style.transform="",t.style.height=""};return e.addEventListener("resize",n),()=>{e.removeEventListener("resize",n)}}),[]),(0,a.d4)((()=>{null!=n&&n.id&&null!=o&&o.length?(m({chatId:n.id,messageId:o[0]}),P(0)):P(-1)}),[null==n?void 0:n.id,m,o]),(0,a.d4)((()=>{Array.from(document.querySelectorAll("input")).forEach((e=>{e.disabled=Boolean(t&&e!==Z.current)})),Array.from(document.querySelectorAll("div[contenteditable]")).forEach((e=>{e.contentEditable=t?"false":"true"}))}),[t]),(0,a.d4)((()=>{t||Z.current.blur()}),[t]),(0,a.bt)((()=>{document.querySelector("#MobileSearch input").blur()}),[i]);const g=(0,a.I4)((e=>{c({query:e}),e.length&&ws(d)}),[d,c]),p=(0,a.I4)((()=>{if(n&&o){const e=v+1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]),E=(0,a.I4)((()=>{if(n&&o){const e=v-1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]);return a.ZP.createElement("div",{id:"MobileSearch",className:t?"active":""},a.ZP.createElement("div",{className:"header"},a.ZP.createElement(R.Z,{size:"smaller",round:!0,color:"translucent",onClick:u},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement(Ss.Z,{ref:Z,value:r,onChange:g})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement("div",{className:"counter"},r?null!=o&&o.length?`${v+1} of ${l}`:o&&!o.length?"No results":"":a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>h({selectedAt:(0,j._F)(Date.now())}),ariaLabel:"Search messages by date"},a.ZP.createElement("i",{className:"icon-calendar"}))),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:p,disabled:!o||!o.length||v===o.length-1},a.ZP.createElement("i",{className:"icon-up"})),a.ZP.createElement(R.Z,{round:!0,size:"smaller",color:"translucent",onClick:E,disabled:!o||!o.length||0===v},a.ZP.createElement("i",{className:"icon-down"}))))})));var Ts=n(5376),Rs=n(9295),As=n(3575),Ls=n(971),Fs=n(7002),Bs=n(3616);function $s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const l=e[r?"scrollLeft":"scrollTop"],o=l+e[r?"offsetWidth":"offsetHeight"],i="string"==typeof t?e.querySelectorAll(t):t,{length:c}=i,d=[];let m=!1;for(let e=0;e=l-n&&u<=o+n:c<=o+n&&u>=l-n)d.push(e),m=!0;else if(m&&!a)break}return{allElements:i,visibleIndexes:d}}const xs=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const a=e[n?"scrollLeft":"scrollTop"],s=a+e[n?"offsetWidth":"offsetHeight"],r=t[n?"offsetLeft":"offsetTop"],l=r+t[n?"offsetWidth":"offsetHeight"];return r>a&&ls[s.length-1]?"start":"end";(0,Ds.Z)(a,r[t],e,10)}}var Us=n(3570);function Gs(e){let{isActive:t,isHorizontal:n,shouldSaveSelectionOnUpdateItems:s,shouldRemoveSelectionOnReset:r,noArrowNavigation:l,items:o,shouldSelectOnTab:i,onSelect:c,onClose:d}=e;const[m,u]=(0,a.eJ)(-1),h=(0,a.I4)((e=>o?(0,Us.Z)(o.length,e):-1),[o]),Z=(0,a.I4)(((e,t)=>{t.preventDefault(),u((t=>h(t+e)))}),[u,h]),v=(0,a.I4)((e=>{if(o&&o.length&&m>-1){const t=o[m];t&&(e.preventDefault(),c(t))}}),[o,c,m]),P=!o||m>o.length-1;return(0,a.d4)((()=>{s&&!P||u(r?-1:0)}),[P,r,s]),(0,a.d4)((()=>t?(0,tt.Z)({onEsc:d,onUp:l||n?void 0:e=>Z(-1,e),onDown:l||n?void 0:e=>Z(1,e),onLeft:l||!n?void 0:e=>Z(-1,e),onRight:l||!n?void 0:e=>Z(1,e),onTab:i?v:void 0,onEnter:v}):void 0),[l,Z,v,t,n,d,i]),m}const Js=(0,a.X$)((e=>{let{isOpen:t,onClose:n,onInsertUserName:r,filteredUsers:l}=e;const o=(0,a.sO)(null),{shouldRender:i,transitionClassNames:c}=(0,_.Z)(t,void 0,void 0,!1),d=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(0,s.Rd)().users.byId,a=n[e];a&&r(a,t)}),[r]),m=(0,a.I4)((e=>{d(e.id,!0)}),[d]),u=Gs({isActive:t,items:l,onSelect:m,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});(0,a.d4)((()=>{Os(".chat-item-clickable",u,o)}),[u]),(0,a.d4)((()=>{l&&!l.length&&n()}),[l,n]);const h=(0,P.Z)(null!=l&&l.length?l:void 0,i),Z=l&&!l.length?h:l;if(!i||Z&&!Z.length)return;const v=(0,X.Z)("MentionTooltip composer-tooltip custom-scroll",c);return a.ZP.createElement("div",{className:v,ref:o},null==Z?void 0:Z.map(((e,t)=>{let{id:n}=e;return a.ZP.createElement(Ae.Z,{key:n,className:"chat-item-clickable scroll-item",onClick:()=>d(n),focus:u===t},a.ZP.createElement(Fe.Z,{userId:n,avatarSize:"small",withUsername:!0}))})))}));var Xs=n(9830);const zs=(0,a.X$)((e=>{let{chatId:t,threadId:n,attachments:s,caption:r,isReady:l,currentUserId:i,groupChatMembers:c,recentEmojis:d,baseEmojiKeywords:m,emojiKeywords:u,addRecentEmoji:Z,onCaptionUpdate:v,onSend:g,onFileAppend:p,onClear:E}=e;const f=(0,Ls.Y)(r),b=(0,a.sO)(),I=(0,P.Z)(s),y=s.length?s:I,N=Boolean(s.length),[k,S,w]=(0,ye.Z)(),M=Boolean(y&&y.every((e=>e.quick))),T=(0,h.Z)(),{isMentionTooltipOpen:A,closeMentionTooltip:L,insertMention:F,mentionFilteredUsers:B}=(0,Rs.Z)(N,f,v,o.nY,c,void 0,i),{isEmojiTooltipOpen:$,closeEmojiTooltip:x,filteredEmojis:D,insertEmoji:O}=(0,As.Z)(N,f,d,o.nY,v,m,u,!l);(0,a.d4)((()=>N?(0,C.Z)(E):void 0),[N,E]);const U=(0,a.I4)((()=>{N&&g()}),[N,g]),G=(0,a.I4)((e=>{e.preventDefault(),w();const{dataTransfer:{files:t}}=e;if(null!=t&&t.length){const e=M?Array.from(t).filter((e=>e.type&&o.dI.has(e.type))):Array.from(t);p(e,M)}}),[M,p,w]);if(!y)return;const J=y.every((e=>o.oG.has(e.mimeType))),X=y.every((e=>o.wG.has(e.mimeType))),z=y.every((e=>e.mimeType.startsWith("audio/")));let _="";return _=T(J?"PreviewSender.SendPhoto":X?"PreviewSender.SendVideo":z?"PreviewSender.SendAudio":"PreviewSender.SendFile",y.length,"i"),a.ZP.createElement(Me.Z,{isOpen:N,onClose:E,header:function(){if(y)return a.ZP.createElement("div",{className:"modal-header-condensed",dir:T.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel attachments",onClick:E},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},_),a.ZP.createElement(R.Z,{color:"primary",size:"smaller",className:"modal-action-button",onClick:U},T("Send")))}(),className:"AttachmentModal "+(k?"hovered":"")},a.ZP.createElement("div",{className:"drop-target",onDragEnter:S,onDrop:G,onDragOver:function(e){e.preventDefault(),e.stopPropagation(),b.current&&(window.clearTimeout(b.current),b.current=void 0)},onDragLeave:e=>{const{relatedTarget:t,target:n}=e;n.matches(".drop-target")&&!t&&(b.current=window.setTimeout(w,150)),n&&n.closest(".AttachmentModal.hovered")||(t&&e.stopPropagation(),w())},"data-attach-description":T("Preview.Dragging.AddItems",10)},M?a.ZP.createElement("div",{className:"media-wrapper custom-scroll"},y.map((e=>e.mimeType.startsWith("image/")?a.ZP.createElement("img",{src:e.blobUrl,alt:""}):a.ZP.createElement("video",{src:e.blobUrl,autoPlay:!0,muted:!0,loop:!0})))):a.ZP.createElement("div",{className:"document-wrapper custom-scroll"},y.map((e=>a.ZP.createElement(Fs.Z,{name:e.filename,extension:(0,Ts.mD)(e.filename,e.mimeType),previewData:e.previewBlobUrl,size:e.size,smaller:!0})))),a.ZP.createElement("div",{className:"attachment-caption-wrapper"},a.ZP.createElement(Js,{isOpen:A,onClose:L,onInsertUserName:F,filteredUsers:B}),a.ZP.createElement(Xs.Z,{isOpen:$,emojis:D,onClose:x,onEmojiSelect:O,addRecentEmoji:Z}),a.ZP.createElement(Bs.Z,{id:"caption-input-text",chatId:t,threadId:n,isAttachmentModalInput:!0,html:r,editableInputId:o.nY,placeholder:T("Caption"),onUpdate:v,onSend:g,canAutoFocus:Boolean(l&&s.length)}))))}));var _s=n(3099);const Ys=(0,a.X$)((e=>{let{isOpen:t,onSend:n,onClear:s}=e;const r=(0,a.sO)(null),l=(0,a.sO)(null),o=(0,a.sO)(null),[i,c]=(0,a.eJ)(""),[d,m]=(0,a.eJ)([""]),[u,Z]=(0,a.eJ)(!0),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1),[E,f]=(0,a.eJ)(),[b,I]=(0,a.eJ)(),[y,N]=(0,a.eJ)(!1),k=(0,h.Z)(),S=(0,a.I4)((e=>{t&&e.current&&e.current.focus()}),[t]);(0,a.d4)((()=>t?(0,C.Z)(s):void 0),[t,s]),(0,a.d4)((()=>{t||(c(""),m([""]),Z(!0),P(!1),p(!1),f(""),I(""),N(!1))}),[t]),(0,a.d4)((()=>S(r)),[S,t]),(0,a.bt)((()=>{const e=o.current;e&&E!==e.innerHTML&&(e.innerHTML=E)}),[E]);const w=(0,a.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];m([...e,""]),requestAnimationFrame((()=>{const e=l.current;e&&(e.classList.toggle("overflown",e.scrollHeight>320),e.scrollTo({top:e.scrollHeight,behavior:"smooth"}))}))}),[]),M=(0,a.I4)((()=>{if(N(!1),!t)return;const e=i.trim().substring(0,255),a=d.map((e=>e.trim().substring(0,100))).filter((e=>e.length));if(!e||a.length<2)return c(e),a.length?a.length<2?w(a):m(a):w(),void N(!0);if(g&&(!b||!a[Number(b)]))return void N(!0);const s={summary:{question:e,answers:a.map(((e,t)=>({text:e.trim(),option:String(t),...String(t)===b&&{correct:!0}}))),...!u&&{isPublic:!0},...v&&{multipleChoice:!0},...g&&{quiz:!0}}};if(g){const{text:e,entities:t}=E&&(0,_s.Z)(E.substring(0,200))||{};s.quiz={correctAnswers:[b],...e&&{solution:e},...t&&{solutionEntities:t}}}n(s)}),[t,i,d,g,b,u,v,n,w,E]),T=(0,a.I4)(((e,t)=>{const n=[...d];n[e]=t,n[n.length-1].trim().length&&n.length<10?w(n):m(n)}),[d,w]),A=(0,a.I4)((e=>{const t=[...d];t.splice(e,1),m(t),requestAnimationFrame((()=>{l.current&&l.current.classList.toggle("overflown",l.current.scrollHeight>320)}))}),[d]),L=(0,a.I4)((e=>{I(e)}),[I]),F=(0,a.I4)((e=>{Z(e.target.checked)}),[]),B=(0,a.I4)((e=>{P(e.target.checked)}),[]),$=(0,a.I4)((e=>{p(e.target.checked)}),[]),x=(0,a.I4)((e=>{13===e.keyCode&&M()}),[M]),D=(0,a.I4)((()=>{if(y&&!i.trim().length)return k("lng_polls_choose_question")}),[y,k,i]),O=(0,a.I4)((e=>{const t=d.map((e=>e.trim())).filter((e=>e.length));if(y&&t.length<2&&!d[e].trim().length)return k("lng_polls_choose_answers")}),[y,k,d]);function U(){return d.map(((e,t)=>a.ZP.createElement("div",{className:"option-wrapper"},a.ZP.createElement(Te.Z,{label:t!==d.length-1||10===d.length?k("OptionHint"):k("CreatePoll.AddOption"),error:O(t),value:e,onChange:e=>T(t,e.currentTarget.value),onKeyPress:x}),t!==d.length-1&&a.ZP.createElement(R.Z,{className:"option-remove-button",round:!0,color:"translucent",size:"smaller",ariaLabel:k("Delete"),onClick:()=>A(t)},a.ZP.createElement("i",{className:"icon-close"})))))}return a.ZP.createElement(Me.Z,{isOpen:t,onClose:s,header:a.ZP.createElement("div",{className:"modal-header-condensed"},a.ZP.createElement(R.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel poll creation",onClick:s},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},k("NewPoll")),a.ZP.createElement(R.Z,{color:"primary",size:"smaller",className:"modal-action-button",onClick:M},k("Create"))),className:"PollModal"},a.ZP.createElement(Te.Z,{ref:r,label:k("AskAQuestion"),value:i,error:D(),onChange:e=>c(e.currentTarget.value),onKeyPress:x}),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"options-list custom-scroll",ref:l},a.ZP.createElement("h3",{className:"options-header"},k("PollOptions")),y&&function(){const e=d.map((e=>e.trim())).filter((e=>e.length));return g&&(!b||!e[Number(b)])&&a.ZP.createElement("p",{className:"error"},k("lng_polls_choose_correct"))}(),g?a.ZP.createElement(at.Z,{name:"correctOption",options:U().map(((e,t)=>({value:String(t),label:e,hidden:t===d.length-1}))),onChange:L}):U()),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"quiz-mode"},a.ZP.createElement(fn.Z,{label:k("PollAnonymous"),checked:u,onChange:F}),a.ZP.createElement(fn.Z,{label:k("PollMultiple"),checked:v,disabled:g,onChange:B}),a.ZP.createElement(fn.Z,{label:k("PollQuiz"),checked:g,disabled:v,onChange:$}),g&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"options-header"},k("lng_polls_solution_title")),a.ZP.createElement("div",{ref:o,className:"form-control",contentEditable:!0,dir:"auto",onChange:e=>f(e.currentTarget.innerHTML)}),a.ZP.createElement("div",{className:"note"},k("CreatePoll.ExplanationInfo")))))}));var Hs=n(6503),Vs=n(4284),qs=n(1367);const js=(0,a.X$)((e=>{let{emoji:t,focus:n,onClick:s}=e;const r=(0,a.I4)((e=>{e.preventDefault(),s(t.native,t.id)}),[t,s]);return a.ZP.createElement("div",{className:"EmojiButton "+(n?"focus":""),onMouseDown:r,title:`:${t.names[0]}:`},i.op?t.native:a.ZP.createElement("img",{src:`./img-apple-64/${t.image}.png`,alt:"",loading:"lazy"}))})),Ks=(0,a.X$)((e=>{let{category:t,index:n,allEmojis:s,observeIntersection:r,shouldRender:l,onEmojiSelect:o}=e;const c=(0,a.sO)(null);(0,Bt._N)(c,r);const d=(0,$n.Z)(l),m=(0,h.Z)(),u=i.wB?Math.floor((b.Z.get().width-8)/44):9,Z=44*Math.ceil(t.emojis.length/u);return a.ZP.createElement("div",{ref:c,key:t.id,id:`emoji-category-${n}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name",dir:"auto"},m("recent"===t.id?"RecentStickers":`Emoji${n}`)),a.ZP.createElement("div",{className:(0,X.Z)("symbol-set-container",d),style:`height: ${Z}px;`,dir:m.isRtl?"rtl":void 0},l&&t.emojis.map((e=>{const t=s[e];if(!t)return;const n="id"in t?t:t[1];return a.ZP.createElement(js,{key:n.id,emoji:n,onClick:o})}))))})),Ws={recent:"icon-recent",people:"icon-smile",nature:"icon-animals",foods:"icon-eats",activity:"icon-sport",places:"icon-car",objects:"icon-lamp",symbols:"icon-language",flags:"icon-flag"},Qs=[];let er,tr,nr;const ar=(0,a.X$)((0,s.c$)((e=>(0,me.ei)(e,["recentEmojis"])))((e=>{let{className:t,onEmojiSelect:s,recentEmojis:r}=e;const l=(0,a.sO)(null),c=(0,a.sO)(null),[d,m]=(0,a.eJ)(),[u,Z]=(0,a.eJ)(),[v,P]=(0,a.eJ)(0),{observe:g}=(0,Bt.S1)({rootRef:l,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("emoji-category-"))return;const n=Number(t.replace("emoji-category-",""));Qs[n]=e.isIntersecting}));const t=Qs.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&P(t[Math.floor(t.length/2)].index)}));(0,Ct.Z)(c.current,!i.wB),(0,a.d4)((()=>{if(!d)return;const e=c.current;if(!e)return;const t=42*v-e.offsetWidth/2+21;(0,qs.Z)(e,t)}),[d,v]);const p=(0,h.Z)(),E=(0,a.Ye)((()=>{if(!d)return Zt.D;const e=[...d];return null!=r&&r.length&&e.unshift({id:"recent",name:p("RecentStickers"),emojis:r}),e}),[d,p,r]);(0,a.d4)((()=>{setTimeout((()=>{const e=()=>{m(nr.categories),Z(nr.emojis)};nr?e():async function(){return er||(er=n.e(501).then(n.t.bind(n,7501,19)),tr=(await er).default,nr=(0,Vs.NM)(tr)),er}().then(e)}),200)}),[]);const C=(0,a.I4)((e=>{P(e);const t=document.getElementById(`emoji-category-${e}`);(0,Ds.Z)(l.current,t,"start",50,800)}),[]),f=(0,a.I4)(((e,t)=>{s(e,t)}),[s]),b=(0,Ft.Z)([],o.kU),I=(0,X.Z)("EmojiPicker",t);return u&&b?a.ZP.createElement("div",{className:I},a.ZP.createElement("div",{ref:c,className:"EmojiPicker-header",dir:p.isRtl?"rtl":""},E.map((function(e,t){const n=Ws[e.id];return n&&a.ZP.createElement(R.Z,{className:"symbol-set-button "+(t===v?"activated":""),round:!0,faded:!0,color:"translucent",onClick:()=>C(t),ariaLabel:e.name},a.ZP.createElement("i",{className:n}))}))),a.ZP.createElement("div",{ref:l,className:(0,X.Z)("EmojiPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},E.map(((e,t)=>a.ZP.createElement(Ks,{category:e,index:t,allEmojis:u,observeIntersection:g,shouldRender:v>=t-1&&v<=t+1,onEmojiSelect:f}))))):a.ZP.createElement("div",{className:I},a.ZP.createElement(we.Z,null))})));var sr=n(6389);const rr=i.wB?8:16,lr=(0,a.X$)((e=>{let{stickerSet:t,loadAndPlay:n,index:s,observeIntersection:r,shouldRender:l,onStickerSelect:c,onStickerUnfave:d}=e;const m=(0,a.sO)(null);(0,Bt._N)(m,r);const u=(0,$n.Z)(l),h=i.wB?Math.floor((b.Z.get().width-8)/(o.Q+rr)):5,Z=Math.ceil(t.count/h)*(o.Q+rr);return a.ZP.createElement("div",{ref:m,key:t.id,id:`sticker-set-${s}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name"},t.title),a.ZP.createElement("div",{className:(0,X.Z)("symbol-set-container",u),style:`height: ${Z}px;`},l&&t.stickers&&t.stickers.map((e=>a.ZP.createElement(On.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:r,noAnimate:!n,onClick:c,clickArg:e,onUnfaveClick:"favorite"===t.id?d:void 0})))))})),or=[],ir=(0,a.X$)((0,s.c$)((e=>{const{setsById:t,added:n,recent:a,favorite:s}=e.stickers;return{recentStickers:a.stickers,favoriteStickers:s.stickers,stickerSetsById:t,addedSetIds:n.setIds,shouldPlay:e.settings.byKey.shouldLoopStickers}}))((e=>{let{chatId:t,threadId:n,className:r,loadAndPlay:l,canSendStickers:c,recentStickers:d,favoriteStickers:m,addedSetIds:u,stickerSetsById:Z,shouldPlay:v,onStickerSelect:P}=e;const{loadRecentStickers:g,addRecentSticker:p,unfaveSticker:E}=(0,s.uC)(),C=(0,a.sO)(null),f=(0,a.sO)(null),[b,I]=(0,a.eJ)(0),y=(0,sr.Z)(t,n),{observe:N}=(0,Bt.S1)({rootRef:C,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("sticker-set-"))return;const n=Number(t.replace("sticker-set-",""));or[n]=e.isIntersecting}));const t=or.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&I(t[Math.floor(t.length/2)].index)})),{observe:k}=(0,Bt.S1)({rootRef:f}),S=(0,h.Z)(),w=Boolean(u),M=(0,a.Ye)((()=>u?[{id:"recent",title:S("RecentStickers"),stickers:d,count:d.length},{id:"favorite",title:S("FavoriteStickers"),stickers:m,count:m.length},...u.map((e=>Z[e])).filter(Boolean)]:Zt.D),[u,S,d,m,Z]),T=(0,a.Ye)((()=>w&&0===M.filter((e=>{var t;return null===(t=e.stickers)||void 0===t?void 0:t.length})).length),[M,w]);(0,a.d4)((()=>{l&&(g(),y({type:"chooseSticker"}))}),[l,g,y]),(0,Ct.Z)(f.current),(0,a.d4)((()=>{if(!w)return;const e=f.current;if(!e)return;const t=52*b-(e.offsetWidth/2-26);(0,qs.Z)(e,t)}),[w,b]);const A=(0,a.I4)((e=>{I(e);const t=document.getElementById(`sticker-set-${e}`);(0,Ds.Z)(C.current,t,"start",void 0,500)}),[]),L=(0,a.I4)((e=>{P(e),p({sticker:e})}),[p,P]),F=(0,a.I4)((e=>{E({sticker:e})}),[E]),B=(0,a.I4)((()=>{y({type:"chooseSticker"})}),[y]),$=(0,Ft.Z)([],o.Y),x=(0,X.Z)("StickerPicker",r);return w&&$&&!T&&c?a.ZP.createElement("div",{className:x},a.ZP.createElement("div",{ref:f,className:"StickerPicker-header no-selection no-scrollbar"},M.map((function(e,t){var n;const s=null===(n=e.stickers)||void 0===n?void 0:n[0],r=(0,X.Z)("symbol-set-button sticker-set-button",t===b&&"activated");return"recent"===e.id||"favorite"===e.id||e.hasThumbnail||!s?a.ZP.createElement(R.Z,{key:e.id,className:r,ariaLabel:e.title,round:!0,faded:"recent"===e.id||"favorite"===e.id,color:"translucent",onClick:()=>A(t)},"recent"===e.id?a.ZP.createElement("i",{className:"icon-recent"}):"favorite"===e.id?a.ZP.createElement("i",{className:"icon-favorite"}):e.isLottie?a.ZP.createElement(xn,{stickerSet:e,observeIntersection:k}):a.ZP.createElement(Dn,{stickerSet:e,observeIntersection:k})):a.ZP.createElement(On.Z,{key:e.id,sticker:s,size:o.DC,title:e.title,className:r,observeIntersection:k,onClick:A,clickArg:t})}))),a.ZP.createElement("div",{ref:C,onMouseMove:B,className:(0,X.Z)("StickerPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},M.map(((e,t)=>a.ZP.createElement(lr,{key:e.id,stickerSet:e,loadAndPlay:Boolean(v&&l),index:t,observeIntersection:N,shouldRender:b>=t-1&&b<=t+1,onStickerSelect:L,onStickerUnfave:F}))))):a.ZP.createElement("div",{className:x},c?T?a.ZP.createElement("div",{className:"picker-disabled"},S("NoStickers")):a.ZP.createElement(we.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},S("ErrorSendRestrictedStickersAll")))})));var cr=n(386);function dr(){return dr=Object.assign||function(e){for(var t=1;t{var t,n;let{gif:s,observeIntersection:l,isDisabled:o,className:i,onClick:c}=e;const d=(0,a.sO)(null),m=(0,a.sO)(null),u=Boolean(null===(t=s.thumbnail)||void 0===t?void 0:t.dataUri),h=`gif${s.id}`,v=(0,Bt.Op)(d,l)&&!o,P=(0,Z.Z)(`${h}?size=m`,!v,r.IU.BlobUrl),g=(0,ea.Z)(null===(n=s.thumbnail)||void 0===n?void 0:n.dataUri,Boolean(P)),p=(0,Z.Z)(h,!v,r.IU.BlobUrl),E=Boolean(v&&p),{isBuffered:C,bufferingHandlers:f}=(0,Y.Z)(!0),b=v&&!C,I=v&&C;(0,V.Z)(m,[E]);const y=(0,a.I4)((()=>c({...s,blobUrl:p})),[c,s,p]),N=(0,X.Z)("GifButton",s.width&&s.height&&s.width({savedGifs:e.gifs.saved.gifs})))((e=>{let{className:t,loadAndPlay:n,canSendGifs:r,savedGifs:l,onGifSelect:c}=e;const{loadSavedGifs:d}=(0,s.uC)(),m=(0,a.sO)(null),{observe:u}=(0,Bt.S1)({rootRef:m,debounceMs:300});(0,a.d4)((()=>{n&&d()}),[n,d]);const h=(0,Ft.Z)([],o.Y);return a.ZP.createElement("div",{ref:m,className:(0,X.Z)("GifPicker",t,i.$b?"no-scrollbar":"custom-scroll")},r?h&&l&&l.length?l.map((e=>a.ZP.createElement(mr,{key:e.id,gif:e,observeIntersection:u,isDisabled:!n,onClick:c}))):h&&l?a.ZP.createElement("div",{className:"picker-disabled"},"No saved GIFs."):a.ZP.createElement(we.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},"Sending GIFs is not allowed in this chat."))})));let hr;!function(e){e[e.Emoji=0]="Emoji",e[e.Stickers=1]="Stickers",e[e.GIFs=2]="GIFs"}(hr||(hr={}));const Zr=Object.values(hr).filter((e=>"string"==typeof e)),vr={[hr.Emoji]:"icon-smile",[hr.Stickers]:"icon-stickers",[hr.GIFs]:"icon-gifs"},Pr=(0,a.X$)((e=>{let{activeTab:t,onSwitchTab:n,onRemoveSymbol:s,onSearchOpen:r}=e;const l=(0,h.Z)();function o(e){return a.ZP.createElement(R.Z,{className:"symbol-tab-button "+(t===e?"activated":""),onClick:()=>n(e),ariaLabel:Zr[e],round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:vr[e]}))}const i=(0,a.I4)((()=>{r(t===hr.Stickers?"stickers":"gifs")}),[t,r]);return a.ZP.createElement("div",{className:"SymbolMenu-footer",onClick:function(e){e.stopPropagation()},dir:l.isRtl?"rtl":void 0},t!==hr.Emoji&&a.ZP.createElement(R.Z,{className:"symbol-search-button",ariaLabel:t===hr.Stickers?"Search Stickers":"Search GIFs",round:!0,faded:!0,color:"translucent",onClick:i},a.ZP.createElement("i",{className:"icon-search"})),o(hr.Emoji),o(hr.Stickers),o(hr.GIFs),t===hr.Emoji&&a.ZP.createElement(R.Z,{className:"symbol-delete-button",onClick:s,ariaLabel:"Remove Symbol",round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:"icon-delete-left"})))}));let gr=!1;const pr=(0,a.X$)((0,s.c$)((e=>({isLeftColumnShown:e.isLeftColumnShown})))((e=>{let{chatId:t,threadId:n,isOpen:s,canSendStickers:r,canSendGifs:l,isLeftColumnShown:o,onLoad:c,onClose:d,onEmojiSelect:m,onStickerSelect:u,onGifSelect:Z,onRemoveSymbol:v,onSearchOpen:P,addRecentEmoji:g}=e;const[p,E]=(0,a.eJ)(0),[C,f]=(0,a.eJ)([]),[b,I]=(0,Hs.Z)(s,d,void 0,i.wB),{shouldRender:y,transitionClassNames:N}=(0,_.Z)(s,d,!1,!1);!gr&&s&&(gr=!0),(0,a.d4)((()=>{c()}),[c]),(0,a.bt)((()=>{if(i.wB)return s&&(document.body.classList.add("enable-symbol-menu-transforms"),document.body.classList.add("is-symbol-menu-open")),()=>{s&&(0,G.T2)((()=>{document.body.classList.remove("is-symbol-menu-open"),setTimeout((()=>{document.body.classList.remove("enable-symbol-menu-transforms")}),350)}))}}),[s]);const k=(0,a.sO)(C);k.current=C,(0,a.d4)((()=>{k.current.length&&(k.current.forEach((e=>{g({emoji:e})})),f([]))}),[s,p,g]);const S=(0,a.I4)(((e,t)=>{f((e=>[...e,t])),m(e)}),[m]),w=(0,a.I4)((e=>{d(),P(e)}),[d,P]),M=(0,a.I4)((e=>{u(e,!0)}),[u]),T=(0,h.Z)();function A(e,o){switch(p){case hr.Emoji:return a.ZP.createElement(ar,{className:"picker-tab",onEmojiSelect:S});case hr.Stickers:return a.ZP.createElement(ir,{className:"picker-tab",loadAndPlay:!!r&&s&&(e||o),canSendStickers:r,onStickerSelect:M,chatId:t,threadId:n});case hr.GIFs:return a.ZP.createElement(ur,{className:"picker-tab",loadAndPlay:!!l&&s&&(e||o),canSendGifs:l,onGifSelect:Z})}}const F=a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"SymbolMenu-main",onClick:function(e){e.stopPropagation()}},gr&&a.ZP.createElement(L.Z,{name:"slide",activeKey:p,renderCount:Zr.length},A)),i.wB&&a.ZP.createElement(R.Z,{round:!0,faded:!0,color:"translucent",ariaLabel:T("Close"),className:"symbol-close-button",size:"tiny",onClick:d},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Pr,{activeTab:p,onSwitchTab:E,onRemoveSymbol:v,onSearchOpen:w}));if(i.wB){if(!y)return;const e=(0,X.Z)("SymbolMenu mobile-menu",N,!o&&"middle-column-open");return a.ZP.createElement(Ns.Z,null,a.ZP.createElement("div",{className:e},F))}return a.ZP.createElement(Ps.Z,{isOpen:s,positionX:"left",positionY:"bottom",onClose:d,className:"SymbolMenu",onCloseAnimationEnd:d,onMouseEnter:i.$b?void 0:b,onMouseLeave:i.$b?void 0:I,noCloseOnBackdrop:!i.$b},F)}))),Er=(0,a.X$)((e=>{let{isOpen:t,canAttachMedia:n,canAttachPolls:s,onFileSelect:r,onPollCreate:l,onClose:c}=e;const[d,m]=(0,Hs.Z)(t,c),u=(0,a.I4)(((e,t)=>{const{files:n}=e.target;n&&n.length>0&&r(Array.from(n),t)}),[r]),Z=(0,a.I4)((()=>{Yn(Array.from(o.dI).join(","),(e=>u(e,!0)))}),[u]),v=(0,a.I4)((()=>{Yn("*",(e=>u(e,!1)))}),[u]),P=(0,h.Z)();return a.ZP.createElement(Ps.Z,{isOpen:t,autoClose:!0,positionX:"right",positionY:"bottom",onClose:c,className:"AttachMenu fluid",onCloseAnimationEnd:c,onMouseEnter:i.$b?void 0:d,onMouseLeave:i.$b?void 0:m,noCloseOnBackdrop:!i.$b},!n&&a.ZP.createElement(B.Z,{className:"media-disabled",disabled:!0},"Posting media content is not allowed in this group."),n&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(B.Z,{icon:"photo",onClick:Z},P("AttachmentMenu.PhotoOrVideo")),a.ZP.createElement(B.Z,{icon:"document",onClick:v},P("AttachDocument"))),s&&a.ZP.createElement(B.Z,{icon:"poll",onClick:l},P("Poll")))})),Cr=(0,a.X$)((e=>{let{withAvatar:t,focus:n,botCommand:s,bot:r,onClick:l}=e;return a.ZP.createElement(Ae.Z,{key:s.command,className:(0,X.Z)("BotCommand chat-item-clickable scroll-item",t&&"with-avatar"),multiline:!0,onClick:()=>l(s),focus:n},t&&a.ZP.createElement(ge.Z,{size:"small",user:r}),a.ZP.createElement("div",{className:"content-inner"},a.ZP.createElement("span",{className:"title"},"/",s.command),a.ZP.createElement("span",{className:"subtitle"},(0,Pe.Z)(s.description))))})),fr=(0,a.X$)((0,s.c$)((e=>({usersById:e.users.byId})))((e=>{let{usersById:t,isOpen:n,withUsername:r,botCommands:l,onClick:o,onClose:i}=e;const{sendBotCommand:c}=(0,s.uC)(),d=(0,a.sO)(null),{shouldRender:m,transitionClassNames:u}=(0,_.Z)(n,void 0,void 0,!1),h=(0,a.I4)((e=>{let{botId:n,command:a}=e;const s=t[n];c({command:`/${a}${r&&s?`@${s.username}`:""}`,botId:n}),o()}),[o,c,t,r]),Z=Gs({isActive:n,items:l,onSelect:h,onClose:i});(0,a.d4)((()=>{l&&!l.length&&i()}),[l,i]),(0,a.d4)((()=>{Os(".chat-item-clickable",Z,d)}),[Z]);const v=(0,P.Z)(l&&l.length?l:void 0,m),g=l&&!l.length?v:l;if(!m||g&&!g.length)return;const p=(0,X.Z)("BotCommandTooltip composer-tooltip custom-scroll",u);return a.ZP.createElement("div",{className:p,ref:d},g&&g.map(((e,n)=>a.ZP.createElement(Cr,{key:`${e.botId}_${e.command}`,botCommand:e,bot:t[e.botId],withAvatar:!0,onClick:h,focus:Z===n}))))}))),br=(0,a.X$)((e=>{let{isOpen:t,botCommands:n,onClose:r}=e;const{sendBotCommand:l}=(0,s.uC)(),[o,c]=(0,Hs.Z)(t,r,void 0,i.wB),d=(0,a.I4)((e=>{l({command:`/${e.command}`,botId:e.botId}),r()}),[r,l]);return a.ZP.createElement(Ps.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:r,className:"BotCommandMenu",onCloseAnimationEnd:r,onMouseEnter:i.$b?void 0:o,onMouseLeave:i.$b?void 0:c,noCloseOnBackdrop:!i.$b},n.map((e=>a.ZP.createElement(Cr,{key:e.command,botCommand:e,onClick:d}))))})),Ir=(0,a.X$)((0,s.c$)((e=>{const{stickers:t}=e.stickers.forEmoji;return{stickers:t}}))((e=>{let{chatId:t,threadId:n,isOpen:r,onStickerSelect:l,stickers:c}=e;const{clearStickersForEmoji:d}=(0,s.uC)(),m=(0,a.sO)(null),{shouldRender:u,transitionClassNames:h}=(0,_.Z)(r,void 0,void 0,!1),Z=(0,P.Z)(c,!0),v=c||Z,g=(0,sr.Z)(t,n),{observe:p}=(0,Bt.S1)({rootRef:m,throttleMs:200});(0,a.d4)((()=>r?(0,C.Z)(d):void 0),[r,d]);const E=(0,X.Z)("StickerTooltip composer-tooltip custom-scroll",h,!(null!=v&&v.length)&&"hidden");return a.ZP.createElement("div",{ref:m,className:E,onMouseEnter:i.$b?void 0:()=>{document.body.classList.add("no-select")},onMouseLeave:i.$b?void 0:()=>{document.body.classList.remove("no-select")},onMouseMove:()=>{g({type:"chooseSticker"})}},u&&v?v.map((e=>a.ZP.createElement(On.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:p,onClick:l,clickArg:e}))):u?a.ZP.createElement(we.Z,null):void 0)}))),yr=(0,a.X$)((e=>{let{isOpen:t,onSilentSend:n,onScheduleSend:s,onClose:r,onCloseAnimationEnd:l}=e;const[o,c]=(0,Hs.Z)(t,r),d=(0,h.Z)();return a.ZP.createElement(Ps.Z,{isOpen:t,autoClose:!0,positionX:"right",positionY:"bottom",className:"CustomSendMenu",onClose:r,onCloseAnimationEnd:l,onMouseEnter:i.$b?void 0:o,onMouseLeave:i.$b?void 0:c,noCloseOnBackdrop:!i.$b},n&&a.ZP.createElement(B.Z,{icon:"mute",onClick:n},d("SendWithoutSound")),s&&a.ZP.createElement(B.Z,{icon:"schedule",onClick:s},d("ScheduleMessage")))}));var Nr=n(2420),kr=n(3283),Sr=n(2678);const wr=(0,a.X$)((e=>{let{isOpen:t,emojis:n,onClose:s,onEmojiSelect:r,addRecentEmoji:l}=e;const o=(0,a.sO)(null),{shouldRender:c,transitionClassNames:d}=(0,_.Z)(t,void 0,void 0,!1),m=(0,Sr.Z)(n.length?n:void 0,350)||[],u=(0,a.I4)((e=>{r(e.native),l({emoji:e.id})}),[l,r]),h=(0,a.I4)(((e,t)=>{r(e),l({emoji:t})}),[l,r]),Z=Gs({isActive:t,isHorizontal:!0,items:n,onSelect:u,onClose:s});(0,a.d4)((()=>{!function(e,t){const n=t.current;if(!n)return;const{visibleIndexes:a,allElements:s}=$s(n,".EmojiButton",8,!0,!0,!0);if(!s.length||!s[e])return;const r=a[0];if(!a.includes(e)||e===r&&!xs(n,s[r],!0)){const t="start"==(e>a[a.length-1]?"start":"end")?44*e:0;(0,qs.Z)(n,t)}}(Z,o)}),[Z]);const v=(0,X.Z)("EmojiTooltip composer-tooltip custom-scroll-x",d);return a.ZP.createElement("div",{ref:o,className:v,onMouseEnter:i.$b?void 0:()=>{document.body.classList.add("no-select")},onMouseLeave:i.$b?void 0:()=>{document.body.classList.remove("no-select")}},c&&m?m.map(((e,t)=>a.ZP.createElement(js,{key:e.id,emoji:e,focus:Z===t,onClick:h}))):c?a.ZP.createElement(we.Z,null):void 0)})),Mr=(0,a.X$)((e=>{let{title:t,description:n,thumbnail:s,thumbUrl:r,focus:l,transitionClassNames:o="",onClick:i}=e,c="";const d=(0,Z.Z)(s?`webDocument:${s.url}`:void 0);return r=r||d,r?c=a.ZP.createElement("img",{src:r,className:o,alt:"",decoding:"async",draggable:"false"}):t&&(c=(0,ot.Xv)(t,1)),a.ZP.createElement(Ae.Z,{focus:l,className:"BaseResult chat-item-clickable",onMouseDown:cr.b,onClick:i},a.ZP.createElement("span",{className:"thumb"},"string"==typeof c?(0,Pe.Z)(c):c),a.ZP.createElement("div",{className:"content-inner"},t&&a.ZP.createElement("div",{className:"title"},t),n&&a.ZP.createElement("div",{className:"description"},n)))})),Tr=(0,a.X$)((e=>{var t;let n,s,r,{focus:l,isForGallery:o,inlineResult:i,onClick:c}=e;"photo"in i&&(n=i.photo),"thumbnail"in i&&(s=i.thumbnail),"webThumbnail"in i&&o&&(r=i.webThumbnail);const d=(0,Z.Z)(r?`webDocument:${r.url}`:void 0),m=(0,Z.Z)(n&&`photo${n.id}?size=m`),u=(0,$n.Z)(m),h=(0,a.I4)((()=>{c(i)}),[i,c]);var v,P;if(o)return a.ZP.createElement("div",{className:"MediaResult chat-item-clickable",onClick:h},a.ZP.createElement("img",{src:(null===(v=n)||void 0===v||null===(P=v.thumbnail)||void 0===P?void 0:P.dataUri)||d,alt:""}),a.ZP.createElement("img",{src:m,className:(0,X.Z)("full-media",u),alt:""}));const{title:g,description:p}=i;return a.ZP.createElement(Mr,{focus:l,thumbUrl:m||(null===(t=s)||void 0===t?void 0:t.dataUri)||d,transitionClassNames:u,title:g,description:p,onClick:h})})),Rr=(0,a.X$)((e=>{let{focus:t,inlineResult:n,onClick:s}=e;const{title:r,url:l,description:o,webThumbnail:i}=n,c=(0,a.I4)((()=>{s(n)}),[n,s]);return a.ZP.createElement(Mr,{focus:t,thumbnail:i,title:r||l,description:o,onClick:c})})),Ar=(0,a.X$)((e=>{let{inlineResult:t,observeIntersection:n,onClick:s}=e;const{gif:r}=t,l=(0,a.I4)((()=>{s(t)}),[t,s]);if(r)return a.ZP.createElement(mr,{gif:r,observeIntersection:n,className:"chat-item-clickable",onClick:l})})),Lr=(0,a.X$)((e=>{let{inlineResult:t,observeIntersection:n,onClick:s}=e;const{sticker:r}=t;if(r)return a.ZP.createElement(On.Z,{sticker:r,size:o.zq,observeIntersection:n,title:r.emoji,className:"chat-item-clickable",onClick:s,clickArg:t})})),Fr=(0,G.P2)((e=>e()),500,!0),Br=(0,a.X$)((e=>{let{isOpen:t,botId:n,isGallery:r,inlineBotResults:o,switchPm:c,loadMore:d,onClose:m,onSelectResult:u}=e;const{openChat:h,startBot:Z}=(0,s.uC)(),v=(0,a.sO)(null),{shouldRender:g,transitionClassNames:p}=(0,_.Z)(t,void 0,void 0,!1),{observe:E}=(0,Bt.S1)({rootRef:v,debounceMs:200,isDisabled:!t}),C=(0,a.I4)((e=>{let{direction:t}=e;t===l.Uq.Backwards&&Fr(d)}),[d]),f=Gs({isActive:t,shouldRemoveSelectionOnReset:r,noArrowNavigation:r,items:o,onSelect:u,onClose:m});(0,a.d4)((()=>{Os(".chat-item-clickable",f,v)}),[f]);const b=(0,a.I4)((()=>{h({id:n}),Z({botId:n,param:c.startParam})}),[n,h,Z,c]),I=(0,P.Z)(null!=o&&o.length?o:void 0,g),y=o&&!o.length?I:o;if(!g||!(null!=y&&y.length||c))return;const N=(0,X.Z)("InlineBotTooltip composer-tooltip",i.$b?"no-scrollbar":"custom-scroll",r&&"gallery",p);return a.ZP.createElement(Re.Z,{ref:v,className:N,items:y,itemSelector:".chat-item-clickable",noFastList:!0,onLoadMore:C,sensitiveArea:160},c&&a.ZP.createElement(Ae.Z,{ripple:!0,className:"switch-pm scroll-item",onClick:b},a.ZP.createElement("span",{className:"title"},c.text)),(null==y?void 0:y.length)&&y.map(((e,t)=>{switch(e.type){case"gif":return a.ZP.createElement(Ar,{key:e.id,inlineResult:e,observeIntersection:E,onClick:u});case"photo":return a.ZP.createElement(Tr,{key:e.id,isForGallery:r,inlineResult:e,onClick:u});case"sticker":return a.ZP.createElement(Lr,{key:e.id,inlineResult:e,observeIntersection:E,onClick:u});case"video":case"file":case"game":return a.ZP.createElement(Tr,{key:e.id,focus:f===t,inlineResult:e,onClick:u});case"article":case"audio":return a.ZP.createElement(Rr,{key:e.id,focus:f===t,inlineResult:e,onClick:u});default:return}})))})),$r=(0,a.X$)((e=>{let{isOpen:t,onClose:n,chatId:r,selectedSendAsId:l,sendAsIds:o}=e;const{saveDefaultSendAs:c}=(0,s.uC)(),d=(0,s.Rd)().users.byId,m=(0,s.Rd)().chats.byId,u=(0,h.Z)(),Z=(0,a.sO)(null),[v,P,p]=(0,Hs.Z)(t,n,void 0);(0,a.d4)((()=>{t&&p()}),[t,p]);const E=(0,a.I4)((e=>{n(),c({chatId:r,sendAsId:e})}),[r,n,c]),C=Gs({isActive:t,items:o,onSelect:E,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});return(0,a.d4)((()=>{Os(".chat-item-clickable",C,Z)}),[C]),(0,a.d4)((()=>{o&&!o.length&&n()}),[o,n]),a.ZP.createElement(Ps.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:n,className:"SendAsMenu",onCloseAnimationEnd:n,onMouseEnter:i.$b?void 0:v,onMouseLeave:i.$b?void 0:P,noCloseOnBackdrop:!i.$b},a.ZP.createElement("div",{className:"send-as-title",dir:"auto"},u("SendMessageAsTitle")),d&&m&&(null==o?void 0:o.map(((e,t)=>{const n=(0,g.YC)(e)?d[e]:void 0,s=n?void 0:m[e],r=n?(0,g.Js)(n):null==s?void 0:s.title;return a.ZP.createElement(Ae.Z,{key:e,className:"SendAsItem chat-item-clickable scroll-item with-avatar",onClick:()=>E(e),focus:C===t},a.ZP.createElement(ge.Z,{size:"small",user:n,chat:s,className:(0,X.Z)(l===e&&"selected")}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,Pe.Z)(r))),a.ZP.createElement("span",{className:"subtitle"},n?u("VoipGroupPersonalAccount"):u("Subscribers",null==s?void 0:s.membersCount,"i"))))}))))}));var xr=n(6844);const Dr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n),s=a&&(0,p.Zw)(e,a.id);if(!a||!s)return{};const{query:r,results:l}=(0,p.n5)(e)||{},{totalCount:o,foundIds:i}=l||{};return{chat:a,messagesById:s,query:r,totalCount:o,foundIds:i}}))((e=>{let{chatId:t,threadId:n,onClose:r,isActive:l,chat:o,messagesById:i,query:c,totalCount:d,foundIds:m}=e;const{searchTextMessagesLocal:Z,focusMessage:v}=(0,s.uC)(),P=(0,a.sO)(null),E=(0,h.Z)();(0,u.ZP)(l,r);const[C,f]=(0,Ne.Z)(Z,m),b=(0,a.Ye)((()=>c&&null!=C&&C.length&&i?C.map((e=>{const a=i[e];if(!a)return;const r=a.senderId?(0,p.dy)((0,s.Rd)(),a.senderId):void 0;let l;if(o&&(0,g.eA)(o))l=o;else if(a.forwardInfo){const{isChannelPost:e,fromChatId:t}=a.forwardInfo;l=e&&t?(0,p.Z1)((0,s.Rd)(),t):void 0}else l=a.senderId?(0,p.Z1)((0,s.Rd)(),a.senderId):void 0;return{message:a,senderUser:r,senderChat:l,onClick:()=>v({chatId:t,threadId:n,messageId:e})}})).filter(Boolean):Zt.D),[c,C,i,o,v,t,n]),I=(0,ke.Z)(P,!0,(e=>{const t=null==b?void 0:b[-1===e?0:e];t&&t.onClick()}),".ListItem-button",!0),N=(null==C?void 0:C[0])===(null==m?void 0:m[0]);return a.ZP.createElement(Re.Z,{ref:P,className:"RightSearch custom-scroll",items:b,preloadBackwards:0,onLoadMore:f,onKeyDown:I},N&&a.ZP.createElement("p",{key:"helper-text",className:"helper-text",dir:"auto"},c?0!==d&&b.length?1===d?"1 message found":`${b.length&&(d||b.length)} messages found`:E("lng_search_no_results"):E("lng_dlg_search_for_messages")),b.map((e=>{let{message:t,senderUser:n,senderChat:s,onClick:r}=e;const l=s?(0,g.U)(E,s):(0,g.Js)(n),o=(0,y.e)(E,t,void 0,c);return a.ZP.createElement(Ae.Z,{key:t.id,teactOrderKey:-t.date,className:"chat-item-clickable search-result-message m-0",onClick:r},a.ZP.createElement(ge.Z,{chat:s,user:n}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},l&&(0,Pe.Z)(l)),a.ZP.createElement(xr.Z,{message:t})),a.ZP.createElement("div",{className:"subtitle",dir:"auto"},o)))})))})));var Or=n(9290);const Ur=(0,a.X$)((0,s.c$)(((e,t)=>{let{stickerSetId:n}=t;return{set:(0,p.Ny)(e,n),shouldPlay:(0,p.yB)(e)}}))((e=>{let{stickerSetId:t,observeIntersection:n,set:r,shouldPlay:l,isSomeModalOpen:i,onModalToggle:c}=e;const{loadStickers:d,toggleStickerSet:m}=(0,s.uC)(),u=(0,h.Z)(),Z=r&&Boolean(r.installedDate),v=Boolean(null==r?void 0:r.stickers),[P,g,p]=(0,ye.Z)();(0,Or.Z)((()=>{c(P)}),[P,c]);const E=(0,a.Ye)((()=>{if(!r)return[];const e=(r.covers||[]).map((e=>{let{id:t}=e;return t})),t=r.stickers?r.stickers.filter((t=>{let{id:n}=t;return!e.includes(n)})):[];return[...r.covers||[],...t].slice(0,5)}),[r]);(0,a.d4)((()=>{!v&&E.length<5&&d({stickerSetId:t})}),[v,E.length,d,t]);const C=(0,a.I4)((()=>{m({stickerSetId:t})}),[m,t]);if(!r)return;const f=E.length>0;return a.ZP.createElement("div",{key:r.id,className:"sticker-set",dir:u.isRtl?"rtl":void 0},a.ZP.createElement("div",{className:"sticker-set-header"},a.ZP.createElement("div",{className:"title-wrapper"},a.ZP.createElement("h3",{className:"title",dir:"auto"},r.title),a.ZP.createElement("p",{className:"count",dir:"auto"},u("Stickers",r.count,"i"))),a.ZP.createElement(R.Z,{className:Z?"is-added":void 0,color:"primary",size:"tiny",pill:!0,fluid:!0,onClick:C},u(Z?"Stickers.Installed":"Stickers.Install"))),a.ZP.createElement("div",{className:"sticker-set-main"},!f&&a.ZP.createElement(J.Z,null),f&&E.map((e=>a.ZP.createElement(On.Z,{sticker:e,size:o.Y7,observeIntersection:n,noAnimate:!l||P||i,onClick:g})))),f&&a.ZP.createElement(Gn.Z,{isOpen:P,fromSticker:E[0],onClose:p}))}))),Gr=(0,G.P2)((e=>e()),6e4,!0),Jr=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.y5)(e),{query:n,resultIds:a}=t||{},{featured:s}=e.stickers;return{query:n,featuredIds:s.setIds,resultIds:a}}))((e=>{let{onClose:t,isActive:n,query:r,featuredIds:l,resultIds:o}=e;const{loadFeaturedStickers:i}=(0,s.uC)(),c=(0,a.sO)(null),d=(0,h.Z)(),[m,Z]=(0,a.eJ)(!1),{observe:v}=(0,Bt.S1)({rootRef:c,throttleMs:200});return(0,a.d4)((()=>{Gr((()=>{i()}))})),(0,u.ZP)(n,t),a.ZP.createElement("div",{ref:c,className:"StickerSearch custom-scroll",dir:d.isRtl?"rtl":void 0},function(){if(void 0!==r)return!r&&l?l.map((e=>a.ZP.createElement(Ur,{key:e,stickerSetId:e,observeIntersection:v,isSomeModalOpen:m,onModalToggle:Z}))):o?o.length?o.map((e=>a.ZP.createElement(Ur,{key:e,stickerSetId:e,observeIntersection:v,isSomeModalOpen:m,onModalToggle:Z}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},"Nothing found."):a.ZP.createElement(we.Z,null)}())}))),Xr=(0,a.X$)((0,s.c$)((e=>{const t=(0,p.yN)(e),{query:n,results:a}=t||{},{chatId:s}=(0,p.Bt)(e)||{},r=s?(0,p.Z1)(e,s):void 0;return{query:n,results:a,chat:r,isChatWithBot:r?(0,p.xo)(e,r):void 0}}))((e=>{let{onClose:t,isActive:n,query:r,results:l,chat:o,isChatWithBot:c}=e;const{searchMoreGifs:d,sendMessage:m,setGifSearchQuery:Z}=(0,s.uC)(),v=(0,a.sO)(null),{observe:P}=(0,Bt.S1)({rootRef:v,debounceMs:300}),{canSendGifs:p}=(0,g.H5)(o,c),E=(0,a.I4)((e=>{p&&m({gif:e}),i.$b&&Z({query:void 0})}),[p,m,Z]),C=(0,h.Z)();(0,u.ZP)(n,t);const f=Boolean(void 0!==r&&l&&l.length);return a.ZP.createElement("div",{className:"GifSearch",dir:C.isRtl?"rtl":void 0},a.ZP.createElement(Re.Z,{ref:v,className:(0,X.Z)("gif-container custom-scroll",f&&"grid"),items:l,itemSelector:".GifButton",preloadBackwards:96,noFastList:!0,onLoadMore:d},function(){if(void 0!==r)return l?l.length?l.map((e=>a.ZP.createElement(mr,{key:e.id,gif:e,observeIntersection:P,onClick:E}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},C("NoGIFsFound")):a.ZP.createElement(we.Z,null)}()))}))),zr=(0,a.X$)((0,s.c$)(((e,t)=>{let{answer:n}=t;const{voters:a,offsets:s}=e.pollResults;return{voters:null==a?void 0:a[n.option],offset:(null==s?void 0:s[n.option])||""}}))((e=>{let{chat:t,message:n,answer:r,answerVote:l,totalVoters:o,voters:i,offset:c}=e;const{loadPollOptionResults:d,openChat:m,closePollResults:u}=(0,s.uC)(),Z=(0,P.Z)(l.votersCount),[v,g]=(0,a.eJ)(!0),p=Boolean(i),{option:E,text:C}=r,f=(0,h.Z)();(0,a.d4)((()=>{p&&Z===l.votersCount||d({chat:t,messageId:n.id,option:E,offset:c,limit:4,shouldResetVoters:!0})}),[l.votersCount,p]);const b=(0,a.I4)((()=>{g(!0),d({chat:t,messageId:n.id,option:E,offset:c,limit:50})}),[t,d,n.id,c,E]);(0,a.d4)((()=>{g(!1)}),[i]);const I=(0,a.I4)((e=>{m({id:e}),u()}),[u,m]);return a.ZP.createElement("div",{className:"PollAnswerResults"},a.ZP.createElement("div",{className:"poll-voters"},i?i.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable",onClick:()=>I(e)},a.ZP.createElement(Fe.Z,{avatarSize:"tiny",userId:e,forceShowSelf:!0,noStatusOrTyping:!0})))):a.ZP.createElement(we.Z,null),i&&function(){const e=l.votersCount-i.length;return l.votersCount>4&&e>0&&a.ZP.createElement(wn,{count:e,itemName:"voter",isLoading:v,onClick:b})}()),a.ZP.createElement("div",{className:"answer-head",dir:f.isRtl?"rtl":void 0},a.ZP.createElement("span",{className:"answer-title",dir:"auto"},C),a.ZP.createElement("span",{className:"answer-percent",dir:f.isRtl?"auto":void 0},(y=l.votersCount,(N=o)>0?(y/N*100).toFixed():0),"%")));var y,N}))),_r=(0,a.X$)((0,s.c$)((e=>{const{pollResults:{chatId:t,messageId:n},lastSyncTime:a}=e;return t&&n?{chat:(0,p.Z1)(e,t),message:(0,p.hj)(e,t,n),lastSyncTime:a}:{}}))((e=>{let{onClose:t,isActive:n,chat:s,message:r,lastSyncTime:l}=e;const o=(0,h.Z)();if((0,u.ZP)(n,t),!r||!s)return a.ZP.createElement(we.Z,null);const{summary:i,results:c}=(0,g.t9)(r);if(!c.results)return;const d=(0,me.ee)(c.results,"option");return a.ZP.createElement("div",{className:"PollResults",dir:o.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"poll-question",dir:"auto"},(0,Pe.Z)(i.question,["emoji","br"])),a.ZP.createElement("div",{className:"poll-results-list custom-scroll"},l&&i.answers.map((e=>a.ZP.createElement(zr,{key:`${r.id}-${e.option}`,chat:s,message:r,answer:e,answerVote:d[e.option],totalVoters:c.totalVoters}))),!l&&a.ZP.createElement(we.Z,null)))}))),Yr="Please provide first name",Hr=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;const a=(0,p.dy)(e,n),s=(0,p.Z1)(e,n),{progress:r}=e.management;return{user:a,progress:r,isMuted:(0,g.i4)(s,(0,p.dZ)(e),(0,p.NJ)(e))}}))((e=>{let{userId:t,user:n,progress:r,isMuted:o,onClose:i,isActive:c}=e;const{updateContact:d,deleteContact:m,closeManagement:Z}=(0,s.uC)(),[v,P,g]=(0,ye.Z)(),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(),b=(0,h.Z)();(0,u.ZP)(c,i);const I=n&&n.firstName||"",y=n&&n.lastName||"",[N,k]=(0,a.eJ)(I),[S,w]=(0,a.eJ)(y),[M,T]=(0,a.eJ)(!o);(0,a.d4)((()=>{T(!o)}),[o]),(0,a.d4)((()=>{E(!1),g()}),[g,t]),(0,a.d4)((()=>{k(I),w(y)}),[I,y,n]),(0,a.d4)((()=>{r===l.wv.Complete&&(E(!1),f(void 0),g())}),[g,r]);const R=(0,a.I4)((e=>{k(e.target.value),E(!0)}),[]),A=(0,a.I4)((e=>{w(e.target.value),E(!0)}),[]),L=(0,a.I4)((e=>{T(e.target.checked),E(!0)}),[]),F=(0,a.I4)((()=>{const e=N.trim(),n=S.trim();e.length||f(Yr),d({userId:t,isMuted:!M,firstName:e,lastName:n})}),[N,S,d,t,M]),B=(0,a.I4)((()=>{m({userId:t}),g(),Z()}),[g,Z,m,t]);if(!n)return;const $=r===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Fe.Z,{userId:n.id,avatarSize:"jumbo",status:"original name",withFullInfo:!0}),a.ZP.createElement(Te.Z,{id:"user-first-name",label:b("UserInfo.FirstNamePlaceholder"),onChange:R,value:N,error:C===Yr?C:void 0}),a.ZP.createElement(Te.Z,{id:"user-last-name",label:b("UserInfo.LastNamePlaceholder"),onChange:A,value:S}),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(fn.Z,{checked:M,label:b("Notifications"),subLabel:b(M?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),onChange:L}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:P},b("DeleteContact")))),a.ZP.createElement(mn.Z,{isShown:p,onClick:F,disabled:$,ariaLabel:b("Save")},$?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:v,onClose:g,text:b("AreYouSureDeleteContact"),confirmLabel:b("DeleteContact"),confirmHandler:B,confirmIsDestructive:!0}))}))),Vr="Group title can't be empty",qr=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,p.Z1)(e,s),{progress:l}=e.management,o=Boolean(null===(n=r.fullInfo)||void 0===n?void 0:n.linkedChatId),i=(0,g.G9)(r),{invites:c}=e.management.byChatId[s]||{};return{chat:r,progress:l,isBasicGroup:i,hasLinkedChannel:o,canChangeInfo:i?r.isCreator:(0,g.VE)(r,"changeInfo"),canBanUsers:i?r.isCreator:(0,g.VE)(r,"banUsers"),canInvite:i?r.isCreator:(0,g.VE)(r,"inviteUsers"),exportedInvites:c,lastSyncTime:e.lastSyncTime,availableReactionsCount:null===(a=e.availableReactions)||void 0===a?void 0:a.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d;let{chatId:m,chat:v,progress:P,isBasicGroup:p,hasLinkedChannel:E,canChangeInfo:C,canBanUsers:f,canInvite:b,onScreenSelect:I,onClose:y,isActive:N,exportedInvites:k,lastSyncTime:S,availableReactionsCount:w}=e;const{togglePreHistoryHidden:M,updateChat:T,deleteChat:R,leaveChannel:A,deleteChannel:L,closeManagement:F,openChat:B,loadExportedChatInvites:$,loadChatJoinRequests:x}=(0,s.uC)(),[D,O,U]=(0,ye.Z)(),G=v.title,X=v.fullInfo&&v.fullInfo.about||"",[z,_]=(0,a.eJ)(!1),[Y,H]=(0,a.eJ)(G||""),[V,q]=(0,a.eJ)(X),[j,K]=(0,a.eJ)(),[W,Q]=(0,a.eJ)(),ee=(0,g.RT)(v),te=(0,Z.Z)(ee,!1,r.IU.BlobUrl),ne=(0,h.Z)();(0,u.ZP)(N,y),(0,a.d4)((()=>{S&&b&&($({chatId:m}),$({chatId:m,isRevoked:!0}),x({chatId:m}))}),[m,$,S,b,x]),(0,a.d4)((()=>{P===l.wv.Complete&&(_(!1),Q(void 0))}),[P]);const ae=(0,a.I4)((()=>{I(l.u1.ChatPrivacyType)}),[I]),se=(0,a.I4)((()=>{I(l.u1.Discussion)}),[I]),re=(0,a.I4)((()=>{I(l.u1.Reactions)}),[I]),le=(0,a.I4)((()=>{I(l.u1.GroupPermissions)}),[I]),oe=(0,a.I4)((()=>{I(l.u1.ChatAdministrators)}),[I]),ie=(0,a.I4)((e=>{K(e),_(!0)}),[]),ce=(0,a.I4)((e=>{H(e.target.value),_(!0)}),[]),de=(0,a.I4)((e=>{q(e.target.value),_(!0)}),[]),me=(0,a.I4)((()=>{const e=Y.trim(),t=V.trim();e.length?T({chatId:m,title:e,about:t,photo:j}):Q(Vr)}),[V,m,j,Y,T]),ue=(0,a.I4)((()=>{I(l.u1.GroupMembers)}),[I]),he=(0,a.I4)((()=>{if(!v.fullInfo)return;const{isPreHistoryHidden:e}=v.fullInfo;M({chatId:v.id,isEnabled:!e})}),[v,M]),Ze=(null===(t=v.fullInfo)||void 0===t||null===(n=t.enabledReactions)||void 0===n?void 0:n.length)||0,ve=(0,a.Ye)((()=>{if(!v.defaultBannedRights)return 0;let e=["sendMessages","sendMedia","embedLinks","sendPolls","changeInfo","inviteUsers","pinMessages"].filter((e=>!v.defaultBannedRights[e])).length;const{sendStickers:t,sendGifs:n}=v.defaultBannedRights;return t||n||(e+=1),e}),[v]),ge=(null===(o=v.fullInfo)||void 0===o||null===(i=o.adminMembers)||void 0===i?void 0:i.length)||0,pe=(0,a.I4)((()=>{p?R({chatId:v.id}):v.isCreator?L({chatId:v.id}):A({chatId:v.id}),U(),F(),B({id:void 0})}),[p,v.isCreator,v.id,U,F,A,L,R,B]);if(v.isRestricted)return;const Ee=P===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(dn.Z,{currentAvatarBlobUrl:te,onChange:ie,disabled:!C}),a.ZP.createElement(Te.Z,{id:"group-title",label:ne("GroupName"),onChange:ce,value:Y,error:W===Vr?W:void 0,disabled:!C}),a.ZP.createElement(Te.Z,{id:"group-about",className:"mb-2",label:ne("DescriptionPlaceholder"),onChange:de,value:V,disabled:!C}),v.isCreator&&a.ZP.createElement(Ae.Z,{icon:"lock",multiline:!0,onClick:ae},a.ZP.createElement("span",{className:"title"},ne("GroupType")),a.ZP.createElement("span",{className:"subtitle"},v.username?ne("TypePublic"):ne("TypePrivate"))),E&&a.ZP.createElement(Ae.Z,{icon:"message",multiline:!0,onClick:se},a.ZP.createElement("span",{className:"title"},ne("LinkedChannel")),a.ZP.createElement("span",{className:"subtitle"},ne("DiscussionUnlink"))),a.ZP.createElement(Ae.Z,{icon:"permissions",multiline:!0,onClick:le,disabled:!f},a.ZP.createElement("span",{className:"title"},ne("ChannelPermissions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},ve,"/",8)),a.ZP.createElement(Ae.Z,{icon:"reactions",multiline:!0,onClick:re,disabled:!C},a.ZP.createElement("span",{className:"title"},ne("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},Ze,"/",w)),a.ZP.createElement(Ae.Z,{icon:"admin",multiline:!0,onClick:oe},a.ZP.createElement("span",{className:"title"},ne("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(ge))),b&&a.ZP.createElement(Ae.Z,{icon:"link",onClick:()=>{I(l.u1.Invites)},multiline:!0,disabled:!k},a.ZP.createElement("span",{className:"title"},ne("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},k?(0,ot.kh)(k.length):ne("Loading"))),Boolean(null===(c=v.joinRequests)||void 0===c?void 0:c.length)&&a.ZP.createElement(Ae.Z,{icon:"add-user-filled",onClick:()=>{I(l.u1.JoinRequests)},multiline:!0},a.ZP.createElement("span",{className:"title"},ne("MemberRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(v.joinRequests.length)))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"group",multiline:!0,onClick:ue},a.ZP.createElement("span",{className:"title"},ne("GroupMembers")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(null!==(d=v.membersCount)&&void 0!==d?d:0))),v.fullInfo&&a.ZP.createElement("div",{className:"ListItem narrow no-selection"},a.ZP.createElement(fn.Z,{checked:!v.fullInfo.isPreHistoryHidden,label:ne("ChatHistory"),onChange:he,disabled:!f}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:O},ne("DeleteMega")))),a.ZP.createElement(mn.Z,{isShown:z,onClick:me,disabled:Ee,ariaLabel:ne("Save")},Ee?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:D,onClose:U,textParts:(0,Pe.Z)(p||!v.isCreator?ne("AreYouSureDeleteAndExit"):ne("AreYouSureDeleteThisChatWithGroup",v.title),["br","simple_markdown"]),confirmLabel:p||!v.isCreator?ne("DeleteMega"):ne("DeleteGroupForAll"),confirmHandler:pe,confirmIsDestructive:!0}))}))),jr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,p.Z1)(e,n),currentUserId:e.currentUserId}}))((e=>{let{onScreenSelect:t,onChatMemberSelect:n,chat:r,currentUserId:o,onClose:i,isActive:c}=e;const{updateChatDefaultBannedRights:d}=(0,s.uC)(),[m,Z]=(0,a.eJ)({}),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1),E=(0,h.Z)();(0,u.ZP)(c,i);const C=(0,a.I4)((()=>{t(l.u1.GroupRemovedUsers)}),[t]),f=(0,a.I4)((()=>{t(l.u1.GroupUserPermissionsCreate)}),[t]),b=(0,a.I4)((e=>{n(e.userId,e.promotedByUserId===o),t(l.u1.GroupUserPermissions)}),[o,n,t]);(0,a.d4)((()=>{Z((null==r?void 0:r.defaultBannedRights)||{}),P(!1),setTimeout((()=>{p(!1)}),250)}),[r]);const I=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}Z((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),P(!0)}),[]),y=(0,a.I4)((()=>{r&&(p(!0),d({chatId:r.id,bannedRights:m}))}),[r,m,d]),N=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.kickedMembers?r.fullInfo.kickedMembers.length:0),[r]),k=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.members?r.fullInfo.members.filter((e=>{let{bannedRights:t}=e;return Boolean(t)})):[]),[r]),S=(0,a.I4)((e=>{const{bannedRights:t}=e;if(!t||!r)return;const{defaultBannedRights:n}=r;return Object.keys(t).reduce(((e,a)=>{if(!t[a]||null!=n&&n[a]||"sendInline"===a||"viewMessages"===a||"sendGames"===a)return e;const s=function(e){switch(e){case"sendMessages":return"UserRestrictionsNoSend";case"sendMedia":return"UserRestrictionsNoSendMedia";case"sendStickers":return"UserRestrictionsNoSendStickers";case"embedLinks":return"UserRestrictionsNoEmbedLinks";case"sendPolls":return"UserRestrictionsNoSendPolls";case"changeInfo":return"UserRestrictionsNoChangeInfo";case"inviteUsers":return"UserRestrictionsInviteUsers";case"pinMessages":return"UserRestrictionsPinMessages";default:return}}(a);if(!s)return e;const r=E(s);return`${e}${e.length?`, ${r}`:r}`}),"")}),[r,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("ChannelPermissionsHeader")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMessages",checked:!m.sendMessages,label:E("UserRestrictionsSend"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMedia",checked:!m.sendMedia,label:E("UserRestrictionsSendMedia"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:E("UserRestrictionsSendStickers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendPolls",checked:!m.sendPolls,label:E("UserRestrictionsSendPolls"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"embedLinks",checked:!m.embedLinks,label:E("UserRestrictionsEmbedLinks"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:E("UserRestrictionsInviteUsers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"pinMessages",checked:!m.pinMessages,label:E("UserRestrictionsPinMessages"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!m.changeInfo,label:E("UserRestrictionsChangeInfo"),blocking:!0,onChange:I}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete-user",multiline:!0,narrow:!0,onClick:C},a.ZP.createElement("span",{className:"title"},E("ChannelBlockedUsers")),a.ZP.createElement("span",{className:"subtitle"},N))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("PrivacyExceptions")),a.ZP.createElement(Ae.Z,{icon:"add-user",onClick:f},E("ChannelAddException")),k.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable exceptions-member",onClick:()=>b(e)},a.ZP.createElement(Fe.Z,{userId:e.userId,status:S(e)})))))),a.ZP.createElement(mn.Z,{isShown:v,onClick:y,ariaLabel:E("Save"),disabled:g},g?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Kr=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e;return{currentUserId:t}}))((e=>{var t;let{chat:n,currentUserId:r,isOpen:l,onClose:o}=e;const{loadMoreMembers:i,deleteChatMember:c}=(0,s.uC)(),d=(0,h.Z)(),[m,u]=(0,a.eJ)(""),Z=(0,a.sO)(null),v=(0,a.Ye)((()=>{var e;const t=((null===(e=n.fullInfo)||void 0===e?void 0:e.members)||[]).reduce(((e,t)=>(t.isAdmin||t.isOwner||t.userId===r||e.push(t.userId),e)),[]),a=(0,s.Rd)().users.byId;return(0,g.kK)(t,a,m)}),[null===(t=n.fullInfo)||void 0===t?void 0:t.members,r,m]),P=(0,a.I4)((e=>{c({chatId:n.id,userId:e}),o()}),[n.id,c,o]);return a.ZP.createElement(Be,{isOpen:l,chatOrUserIds:v,filterRef:Z,filterPlaceholder:d("ChannelBlockUser"),filter:m,onFilterChange:u,loadMore:i,onSelectChatOrUser:P,onClose:o})}))),Wr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n),{byId:s}=e.users;return{chat:a,usersById:s,canDeleteMembers:a&&((0,g.VE)(a,"banUsers")||a.isCreator)}}))((e=>{let{chat:t,usersById:n,canDeleteMembers:r,onClose:l,isActive:o}=e;const{updateChatMemberBannedRights:i}=(0,s.uC)(),c=(0,h.Z)(),[d,m,Z]=(0,ye.Z)();(0,u.ZP)(o,l);const v=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.kickedMembers?t.fullInfo.kickedMembers:[]),[t]),P=(0,a.I4)((e=>{if(!e.kickedByUserId)return;const t=n[e.kickedByUserId];return t?c("UserRemovedBy",(0,g.Js)(t)):void 0}),[c,n]),p=(0,a.I4)((e=>{if(t)return[{title:c("Unblock"),icon:"delete",destructive:!0,handler:()=>i({chatId:t.id,userId:e.userId,bannedRights:{}})}]}),[c,t,i]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:c.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted"},c("NoBlockedGroup2")),v.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable",ripple:!0,contextActions:p(e)},a.ZP.createElement(Fe.Z,{userId:e.userId,status:P(e)})))),r&&a.ZP.createElement(mn.Z,{isShown:!0,onClick:m,ariaLabel:c("Channel.EditAdmin.Permission.BanUsers")},a.ZP.createElement("i",{className:"icon-add-user-filled"})),t&&r&&a.ZP.createElement(Kr,{chat:t,isOpen:d,onClose:Z}))))}))),Qr="Channel title can't be empty",el=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),{progress:r}=e.management,l=Boolean(null==s?void 0:s.isSignaturesShown),{invites:o}=e.management.byChatId[a]||{};return{chat:s,progress:r,isSignaturesShown:l,canChangeInfo:(0,g.VE)(s,"changeInfo"),canInvite:(0,g.VE)(s,"inviteUsers"),lastSyncTime:e.lastSyncTime,exportedInvites:o,availableReactionsCount:null===(n=e.availableReactions)||void 0===n?void 0:n.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d,m;let{chatId:v,chat:P,progress:p,isSignaturesShown:E,canChangeInfo:C,canInvite:f,exportedInvites:b,lastSyncTime:I,availableReactionsCount:y,onScreenSelect:N,onClose:k,isActive:S}=e;const{updateChat:w,toggleSignatures:M,closeManagement:T,leaveChannel:R,deleteChannel:A,openChat:L,loadExportedChatInvites:F,loadChatJoinRequests:B}=(0,s.uC)(),$=P&&P.title||"",x=null!=P&&P.fullInfo&&P.fullInfo.about||"",D=null==P||null===(t=P.fullInfo)||void 0===t?void 0:t.linkedChatId,[O,U,G]=(0,ye.Z)(),[X,z]=(0,a.eJ)(!1),[_,Y]=(0,a.eJ)($),[H,V]=(0,a.eJ)(x),[q,j]=(0,a.eJ)(),[K,W]=(0,a.eJ)(),Q=P&&(0,g.RT)(P),ee=(0,Z.Z)(Q,!1,r.IU.BlobUrl),te=(0,h.Z)();(0,u.ZP)(S,k),(0,a.d4)((()=>{I&&(F({chatId:v}),F({chatId:v,isRevoked:!0}),B({chatId:v}))}),[v,F,I,B]),(0,a.d4)((()=>{p===l.wv.Complete&&(z(!1),W(void 0))}),[p]);const ne=(null==P||null===(n=P.fullInfo)||void 0===n||null===(o=n.adminMembers)||void 0===o?void 0:o.length)||0,ae=(0,a.I4)((()=>{N(l.u1.ChatPrivacyType)}),[N]),se=(0,a.I4)((()=>{N(l.u1.Discussion)}),[N]),re=(0,a.I4)((()=>{N(l.u1.Reactions)}),[N]),le=(0,a.I4)((()=>{N(l.u1.ChatAdministrators)}),[N]),oe=(0,a.I4)((e=>{j(e),z(!0)}),[]),ie=(0,a.I4)((e=>{Y(e.target.value),z(!0)}),[]),ce=(0,a.I4)((e=>{V(e.target.value),z(!0)}),[]),de=(0,a.I4)((()=>{const e=_.trim(),t=H.trim();e.length?w({chatId:v,title:e,about:t,photo:q}):W(Qr)}),[H,v,q,_,w]),me=(0,a.I4)((()=>{M({chatId:v,isEnabled:!E})}),[v,E,M]),ue=(0,a.I4)((()=>{N(l.u1.ChannelSubscribers)}),[N]),he=(0,a.I4)((()=>{P.isCreator?A({chatId:P.id}):R({chatId:P.id}),G(),T(),L({id:void 0})}),[P.isCreator,P.id,G,T,R,A,L]),Ze=(null===(i=P.fullInfo)||void 0===i||null===(c=i.enabledReactions)||void 0===c?void 0:c.length)||0;if(P.isRestricted)return;const ve=p===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(dn.Z,{currentAvatarBlobUrl:ee,onChange:oe,disabled:!C}),a.ZP.createElement(Te.Z,{id:"channel-title",label:te("EnterChannelName"),onChange:ie,value:_,error:K===Qr?K:void 0,disabled:!C}),a.ZP.createElement(Te.Z,{id:"channel-about",className:"mb-2",label:te("DescriptionPlaceholder"),onChange:ce,value:H,disabled:!C}),P.isCreator&&a.ZP.createElement(Ae.Z,{icon:"lock",multiline:!0,onClick:ae},a.ZP.createElement("span",{className:"title"},te("ChannelType")),a.ZP.createElement("span",{className:"subtitle"},P.username?te("TypePublic"):te("TypePrivate"))),a.ZP.createElement(Ae.Z,{icon:"message",multiline:!0,onClick:se,disabled:!C},a.ZP.createElement("span",{className:"title"},te("Discussion")),a.ZP.createElement("span",{className:"subtitle"},te(D?"DiscussionUnlink":"Add"))),a.ZP.createElement(Ae.Z,{icon:"admin",multiline:!0,onClick:le},a.ZP.createElement("span",{className:"title"},te("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},ne)),f&&a.ZP.createElement(Ae.Z,{icon:"link",onClick:()=>{N(l.u1.Invites)},multiline:!0,disabled:!b},a.ZP.createElement("span",{className:"title"},te("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},b?(0,ot.kh)(b.length):te("Loading"))),Boolean(null===(d=P.joinRequests)||void 0===d?void 0:d.length)&&a.ZP.createElement(Ae.Z,{icon:"add-user-filled",onClick:()=>{N(l.u1.JoinRequests)},multiline:!0},a.ZP.createElement("span",{className:"title"},te("SubscribeRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ot.kh)(P.joinRequests.length))),a.ZP.createElement(Ae.Z,{icon:"reactions",multiline:!0,onClick:re,disabled:!C},a.ZP.createElement("span",{className:"title"},te("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},Ze,"/",y)),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(fn.Z,{checked:E,label:te("ChannelSignMessages"),onChange:me}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"group",multiline:!0,onClick:ue},a.ZP.createElement("span",{className:"title",dir:"auto"},te("ChannelSubscribers")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},te("Subscribers",null!==(m=P.membersCount)&&void 0!==m?m:0,"i")))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:U},P.isCreator?te("ChannelDelete"):te("LeaveChannel")))),a.ZP.createElement(mn.Z,{isShown:X,onClick:de,disabled:ve,ariaLabel:te("Save")},ve?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:O,onClose:G,text:P.isCreator?te("ChannelDeleteAlert"):te("ChannelLeaveAlert"),confirmLabel:P.isCreator?te("ChannelDelete"):te("LeaveChannel"),confirmHandler:he,confirmIsDestructive:!0}))})));var tl=n(88);const nl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n),{isUsernameAvailable:s}=(0,p.aW)(e,n);return{chat:a,isChannel:(0,g.eA)(a),progress:e.management.progress,isUsernameAvailable:s,isProtected:null==a?void 0:a.isProtected}}))((e=>{var t;let{chat:n,onClose:r,isActive:o,isChannel:i,progress:c,isUsernameAvailable:d,isProtected:m}=e;const{checkPublicLink:Z,updatePublicLink:v,updatePrivateLink:P,toggleIsProtected:g}=(0,s.uC)(),p=Boolean(n.username),E=null===(t=n.fullInfo)||void 0===t?void 0:t.inviteLink,[C,f]=(0,a.eJ)(p?"public":"private"),[b,I]=(0,a.eJ)(),[y,N,k]=(0,ye.Z)(),S=Boolean("public"===C&&b&&d||"private"===C&&p);(0,u.ZP)(o,r),(0,a.d4)((()=>{C&&!E&&P()}),[C,E,P]);const w=(0,a.I4)((e=>{f(e)}),[]),M=(0,a.I4)((e=>{g({chatId:n.id,isProtected:"protected"===e})}),[n.id,g]),T=(0,a.I4)((()=>{v({username:"public"===C?b:""})}),[C,v,b]),R=(0,a.I4)((()=>{k(),P()}),[k,P]),A=(0,h.Z)(),L=i?"Channel":"Mega",F=i?"Channel":"Group",B=[{value:"private",label:A(`${L}Private`),subLabel:A(`${L}PrivateInfo`)},{value:"public",label:A(`${L}Public`),subLabel:A(`${L}PublicInfo`)}],$=[{value:"allowed",label:A("ChannelVisibility.Forwarding.Enabled")},{value:"protected",label:A("ChannelVisibility.Forwarding.Disabled")}],x=c===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(`${F}Type`)),a.ZP.createElement(at.Z,{selected:C,name:"channel-type",options:B,onChange:w})),"private"===C?a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},E?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(tl.Z,{url:E,className:"group-link",text:E}),a.ZP.createElement("p",{className:"section-info",dir:A.isRtl?"rtl":void 0},A(`${L}PrivateLinkHelp`)),a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:N},A("RevokeLink")),a.ZP.createElement(Xe.Z,{isOpen:y,onClose:k,text:A("RevokeAlert"),confirmLabel:A("RevokeButton"),confirmHandler:R,confirmIsDestructive:!0})):a.ZP.createElement(we.Z,null)):a.ZP.createElement("div",{className:"section no-border"},a.ZP.createElement(Pn,{asLink:!0,currentUsername:n.username,isLoading:x,isUsernameAvailable:d,checkUsername:Z,onChange:I}),a.ZP.createElement("p",{className:"section-info",dir:"auto"},A(`${F}.Username.CreatePublicLinkHelp`))),a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(i?"ChannelVisibility.Forwarding.ChannelTitle":"ChannelVisibility.Forwarding.GroupTitle")),a.ZP.createElement(at.Z,{selected:m?"protected":"allowed",name:"channel-type",options:$,onChange:M}),a.ZP.createElement("p",{className:"section-info"},A(i?"ChannelVisibility.Forwarding.ChannelInfo":"ChannelVisibility.Forwarding.GroupInfo")))),a.ZP.createElement(mn.Z,{isShown:S,disabled:x,ariaLabel:A("Save"),onClick:T},x?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),al=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),{forDiscussionIds:r,byId:l}=e.chats;return{chat:s,chatsByIds:l,forDiscussionIds:r,linkedChat:null!=s&&null!==(n=s.fullInfo)&&void 0!==n&&n.linkedChatId?(0,p.Z1)(e,s.fullInfo.linkedChatId):void 0,isChannel:s&&(0,g.eA)(s)}}))((e=>{let{chat:t,onClose:n,isActive:r,chatId:i,chatsByIds:c,linkedChat:d,forDiscussionIds:m,isChannel:Z,onScreenSelect:v}=e;const{loadGroupsForDiscussion:P,linkDiscussionGroup:g,unlinkDiscussionGroup:p}=(0,s.uC)(),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),[I,y]=(0,a.eJ)(!1),N=(0,a.I4)((()=>y(!0)),[]),[k,S,w]=(0,ye.Z)(),[M,T,R]=(0,ye.Z)(),A=(0,h.Z)(),L=null==d?void 0:d.id;(0,u.ZP)(r,n),(0,a.d4)((()=>{P()}),[P]),(0,a.d4)((()=>{f||(0,dt.Z)("DiscussionGroups").then(b)}),[f]);const F=(0,a.I4)((()=>{w(),p({channelId:Z?i:L}),Z||v(l.u1.Initial)}),[w,p,Z,i,L,v]),B=(0,a.I4)((()=>{R(),g({channelId:i,chatId:E})}),[R,g,i,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},f&&a.ZP.createElement(mt.Z,{id:"discussionGroupsDucks",size:o.bM,animationData:f,play:I,noLoop:!0,onLoad:N})),d&&a.ZP.createElement("div",null,a.ZP.createElement(Ae.Z,{className:"chat-item-clickable",inactive:!0},a.ZP.createElement(Le.Z,{chatId:d.id})),a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:S},A(Z?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel")),a.ZP.createElement(Xe.Z,{isOpen:k,onClose:w,header:a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(ge.Z,{size:"tiny",chat:d}),a.ZP.createElement("div",{className:"modal-title"},A(Z?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"))),textParts:(0,Pe.Z)(A(Z?"DiscussionUnlinkChannelAlert":"DiscussionUnlinkGroupAlert",d.title),["br","simple_markdown"]),confirmLabel:A(Z?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"),confirmHandler:F,confirmIsDestructive:!0})),!d&&a.ZP.createElement("div",null,a.ZP.createElement("p",{className:"section-help",dir:"auto"},A("DiscussionChannelHelp")),a.ZP.createElement("div",{teactFastList:!0},a.ZP.createElement(Ae.Z,{key:"create-group",icon:"group",ripple:!0,teactOrderKey:0,className:"not-implemented"},A("DiscussionCreateGroup")),m?m.map(((e,t)=>a.ZP.createElement(Ae.Z,{key:e,teactOrderKey:t+1,className:"chat-item-clickable scroll-item",onClick:()=>{C(e),T()}},a.ZP.createElement(Le.Z,{chatId:e})))):a.ZP.createElement(St.Z,{key:"nothing-found",teactOrderKey:0,text:"No discussion groups found"})),a.ZP.createElement("p",{className:"mt-4 mb-0 section-help",dir:"auto"},A("DiscussionChannelHelp2")),a.ZP.createElement(Xe.Z,{isOpen:M,onClose:R,header:function(){const e=c[E];if(e)return a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(ge.Z,{size:"tiny",chat:e}),a.ZP.createElement("div",{className:"modal-title"},A("Channel.DiscussionGroup.LinkGroup")))}(),textParts:function(){const e=c[E];if(e)return e.hasPrivateLink?(0,Pe.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?`,["br","simple_markdown"]):(0,Pe.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?\n\nAnyone from the channel will be able to see messages in this group.`,["br","simple_markdown"])}(),confirmLabel:A("DiscussionLinkGroup"),confirmHandler:B,isButtonsInOneRow:!0})))))}))),sl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,p.Z1)(e,n);return{chat:s,isFormFullyDisabled:!(s.isCreator||a)}}))((e=>{let{chat:t,selectedChatMemberId:n,onScreenSelect:r,isFormFullyDisabled:o,onClose:i,isActive:c}=e;const{updateChatMemberBannedRights:d}=(0,s.uC)(),[m,Z]=(0,a.eJ)({}),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1),[E,C,f]=(0,ye.Z)(),b=(0,h.Z)();(0,u.ZP)(c,i);const I=(0,a.Ye)((()=>{if(t&&t.fullInfo&&t.fullInfo.members)return t.fullInfo.members.find((e=>{let{userId:t}=e;return t===n}))}),[t,n]);(0,a.d4)((()=>{null!=t&&t.fullInfo&&n&&!I&&r(l.u1.GroupPermissions)}),[t,r,I,n]),(0,a.d4)((()=>{Z((null==I?void 0:I.bannedRights)||(null==t?void 0:t.defaultBannedRights)||{}),P(!1),p(!1)}),[t,I]);const y=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}Z((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),P(!0)}),[]),N=(0,a.I4)((()=>{t&&n&&(p(!0),d({chatId:t.id,userId:n,bannedRights:m}))}),[t,n,m,d]),k=(0,a.I4)((()=>{t&&n&&d({chatId:t.id,userId:n,bannedRights:{viewMessages:!0}})}),[t,n,d]),S=(0,a.I4)((e=>!!o||!(!t||!t.defaultBannedRights)&&t.defaultBannedRights[e]),[t,o]);if(I)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Fe.Z,{userId:I.userId})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},b("UserRestrictionsCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMessages",checked:!m.sendMessages,label:b("UserRestrictionsSend"),blocking:!0,disabled:S("sendMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendMedia",checked:!m.sendMedia,label:b("UserRestrictionsSendMedia"),blocking:!0,disabled:S("sendMedia"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:b("UserRestrictionsSendStickers"),blocking:!0,disabled:S("sendStickers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"sendPolls",checked:!m.sendPolls,label:b("UserRestrictionsSendPolls"),blocking:!0,disabled:S("sendPolls"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"embedLinks",checked:!m.embedLinks,label:b("UserRestrictionsEmbedLinks"),blocking:!0,disabled:S("embedLinks"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:b("UserRestrictionsInviteUsers"),blocking:!0,disabled:S("inviteUsers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"pinMessages",checked:!m.pinMessages,label:b("UserRestrictionsPinMessages"),blocking:!0,disabled:S("pinMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!m.changeInfo,label:b("UserRestrictionsChangeInfo"),blocking:!0,disabled:S("changeInfo"),onChange:y}))),!o&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"delete-user",ripple:!0,destructive:!0,onClick:C},b("UserRestrictionsBlock")))),a.ZP.createElement(mn.Z,{isShown:v,onClick:N,ariaLabel:b("Save"),disabled:g},g?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Xe.Z,{isOpen:E,onClose:f,text:"Are you sure you want to ban and remove this user from the group?",confirmLabel:"Remove",confirmHandler:k,confirmIsDestructive:!0}))}))),rl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n);return{chat:a,currentUserId:e.currentUserId,isChannel:(0,g.eA)(a)}}))((e=>{let{chat:t,isChannel:n,currentUserId:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d}=e;const m=(0,h.Z)();(0,u.ZP)(d,c);const Z=(0,a.Ye)((()=>t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),v=(0,a.I4)((e=>{i(e.userId,e.promotedByUserId===r),o(l.u1.ChatAdminRights)}),[r,i,o]),P=(0,a.I4)((()=>{o(l.u1.GroupAddAdmins)}),[o]),p=(0,a.I4)((e=>{if(e.isOwner)return m("ChannelCreator");const t=(0,s.Rd)().users.byId,n=e.promotedByUserId?t[e.promotedByUserId]:void 0;return n?m("EditAdminPromotedBy",(0,g.Js)(n)):m("ChannelAdmin")}),[m]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{icon:"recent",multiline:!0,onClick:function(){o(l.u1.GroupRecentActions)}},a.ZP.createElement("span",{className:"title"},m("EventLog")),a.ZP.createElement("span",{className:"subtitle"},m(n?"EventLogInfoDetailChannel":"EventLogInfoDetail")))),a.ZP.createElement("div",{className:"section",dir:m.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted",dir:"auto"},n?"You can add administrators to help you manage your channel.":"You can add administrators to help you manage your group."),Z.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable",onClick:()=>v(e)},a.ZP.createElement(Fe.Z,{userId:e.userId,status:p(e),forceShowSelf:!0})))),a.ZP.createElement(mn.Z,{isShown:!0,onClick:P,ariaLabel:m("Channel.Management.AddModerator")},a.ZP.createElement("i",{className:"icon-add-user-filled"})))))}))),ll=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,p.Z1)(e,n)}}))((e=>{let{chat:t,onClose:n,isActive:s}=e;const r=(0,h.Z)();(0,u.ZP)(s,n);const l=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),o=(0,a.I4)((e=>e.isOwner?r("ChannelCreator"):r("ChannelAdmin")),[r]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},"Actions"),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllEvents"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewAdmins"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewMembers"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterChannelInfo"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterDeletedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterEditedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterLeavingMembers"),onChange:void 0}))),a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},r("Channel.Management.Title")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllAdmins"),onChange:void 0})),l.map((e=>a.ZP.createElement(Ae.Z,{key:e.userId,className:"chat-item-clickable picker-list-item",onClick:void 0,ripple:!0},a.ZP.createElement(fn.Z,{label:"",checked:!0}),a.ZP.createElement(Fe.Z,{userId:e.userId,status:o(e),forceShowSelf:!0})))))))}))),ol=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,p.Z1)(e,n),{byId:r}=e.users,{currentUserId:l}=e;return{chat:s,usersById:r,currentUserId:l,isChannel:(0,g.eA)(s),isFormFullyDisabled:!(s.isCreator||a),defaultRights:s.adminRights}}))((e=>{var t;let{isNewAdmin:n,selectedUserId:r,defaultRights:o,onScreenSelect:i,chat:c,usersById:d,currentUserId:m,isChannel:Z,isFormFullyDisabled:v,onClose:P,isActive:p}=e;const{updateChatAdmin:E}=(0,s.uC)(),[C,f]=(0,a.eJ)({}),[b,I]=(0,a.eJ)(Boolean(n)),[y,N]=(0,a.eJ)(!1),[k,S,w]=(0,ye.Z)(),[M,T]=(0,a.eJ)(""),R=(0,h.Z)();(0,u.ZP)(p,P);const A=(0,a.Ye)((()=>{var e,t;const a=null===(e=c.fullInfo)||void 0===e||null===(t=e.adminMembers)||void 0===t?void 0:t.find((e=>{let{userId:t}=e;return t===r}));if(!n||!a&&r){if(n){const e=(0,s.Rd)().users.byId[r];return e?{userId:e.id,adminRights:o,customTitle:R("ChannelAdmin"),isOwner:!1,promotedByUserId:void 0}:void 0}return a}}),[null===(t=c.fullInfo)||void 0===t?void 0:t.adminMembers,o,n,R,r]);(0,a.d4)((()=>{null!=c&&c.fullInfo&&r&&!A&&i(l.u1.ChatAdministrators)}),[c,i,A,r]),(0,a.d4)((()=>{f((null==A?void 0:A.adminRights)||{}),T(((null==A?void 0:A.customTitle)||"").substr(0,16)),I(Boolean(n)),N(!1)}),[o,n,A]);const L=(0,a.I4)((e=>{const{name:t}=e.target;f((e=>{return{...e,[t]:(n=e[t],!n||void 0)};var n})),I(!0)}),[]),F=(0,a.I4)((()=>{r&&(N(!0),E({chatId:c.id,userId:r,adminRights:C,customTitle:M}))}),[r,E,c.id,C,M]),B=(0,a.I4)((()=>{r&&(E({chatId:c.id,userId:r,adminRights:{}}),w())}),[c.id,w,r,E]),$=(0,a.I4)((e=>!((0,g.G9)(c)||!v&&c.adminRights&&c.adminRights[e])),[c,v]),x=(0,a.Ye)((()=>{if(n||!A)return;if(A.isOwner)return R("ChannelCreator");const e=A.promotedByUserId?d[A.promotedByUserId]:void 0;return e?R("EditAdminPromotedBy",(0,g.Js)(e)):R("ChannelAdmin")}),[n,A,d,R]),D=(0,a.I4)((e=>{const{value:t}=e.target;T(t),I(!0)}),[]);if(A)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ae.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Fe.Z,{userId:A.userId,status:x,forceShowSelf:!0})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},R("EditAdminWhatCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"changeInfo",checked:Boolean(C.changeInfo),label:R(Z?"EditAdminChangeChannelInfo":"EditAdminChangeGroupInfo"),blocking:!0,disabled:$("changeInfo"),onChange:L})),Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"postMessages",checked:Boolean(C.postMessages),label:R("EditAdminPostMessages"),blocking:!0,disabled:$("postMessages"),onChange:L})),Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"editMessages",checked:Boolean(C.editMessages),label:R("EditAdminEditMessages"),blocking:!0,disabled:$("editMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"deleteMessages",checked:Boolean(C.deleteMessages),label:R(Z?"EditAdminDeleteMessages":"EditAdminGroupDeleteMessages"),blocking:!0,disabled:$("deleteMessages"),onChange:L})),!Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"banUsers",checked:Boolean(C.banUsers),label:R("EditAdminBanUsers"),blocking:!0,disabled:$("banUsers"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"inviteUsers",checked:Boolean(C.inviteUsers),label:R("EditAdminAddUsers"),blocking:!0,disabled:$("inviteUsers"),onChange:L})),!Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"pinMessages",checked:Boolean(C.pinMessages),label:R("EditAdminPinMessages"),blocking:!0,disabled:$("pinMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"addAdmins",checked:Boolean(C.addAdmins),label:R("EditAdminAddAdmins"),blocking:!0,disabled:$("addAdmins"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"manageCall",checked:Boolean(C.manageCall),label:R("StartVoipChatPermission"),blocking:!0,disabled:$("manageCall"),onChange:L})),!Z&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"anonymous",checked:Boolean(C.anonymous),label:R("EditAdminSendAnonymously"),blocking:!0,disabled:$("anonymous"),onChange:L})),v&&a.ZP.createElement("p",{className:"section-info mb-4",dir:"auto"},R("Channel.EditAdmin.CannotEdit")),!Z&&a.ZP.createElement(Te.Z,{id:"admin-title",label:R("EditAdminRank"),onChange:D,value:M,disabled:v,maxLength:16}),m!==r&&!v&&!n&&a.ZP.createElement(Ae.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:S},R("EditAdminRemoveAdmin")))),a.ZP.createElement(mn.Z,{isShown:b,onClick:F,ariaLabel:R("Save"),disabled:y},y?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),!n&&a.ZP.createElement(Xe.Z,{isOpen:k,onClose:w,text:"Are you sure you want to dismiss this admin?",confirmLabel:R("Channel.Admin.Dismiss"),confirmHandler:B,confirmIsDestructive:!0}))}))),il=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,p.Z1)(e,s),{statusesById:l}=e.users,o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.members,i=null==r||null===(a=r.fullInfo)||void 0===a?void 0:a.adminMembers,c=r&&(0,g.eA)(r),{userIds:d}=e.contactList||{},{query:m,fetchingStatus:u,globalUserIds:h,localUserIds:Z}=e.userSearch;return{members:o,adminMembers:i,userStatusesById:l,isChannel:c,localContactIds:d,searchQuery:m,isSearching:u,globalUserIds:h,localUserIds:Z,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{noAdmins:t,members:n,adminMembers:r,userStatusesById:o,isChannel:i,isActive:c,globalUserIds:d,localContactIds:m,localUserIds:Z,isSearching:v,searchQuery:P,serverTimeOffset:p,onClose:E,onScreenSelect:C,onChatMemberSelect:f}=e;const{openChat:b,setUserSearchQuery:I,loadContactList:y}=(0,s.uC)(),N=(0,h.Z)(),k=(0,a.sO)(null),S=(0,a.sO)(null),w=(0,a.Ye)((()=>t&&(null==r?void 0:r.map((e=>{let{userId:t}=e;return t})))||[]),[r,t]),M=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId;if(!n||!e)return[];const a=(0,g.Z0)(n.map((e=>{let{userId:t}=e;return t})),e,o,void 0,p);return t?a.filter((e=>!w.includes(e))):a}),[n,o,p,t,w]),T=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,n=(0,s.Rd)().chats.byId,a=Boolean(P),r=a?m?(0,g.kK)(m,e,P):[]:M;return(0,g.ih)((0,me.Tw)([...r,...a&&Z||[],...a&&d||[]]).filter((n=>{const a=e[n];return!a||(i||a.canBeInvitedToGroup||!(0,g.cS)(a))&&(!t||!w.includes(n))})),n,!0)}),[M,m,P,Z,d,i,t,w]),[R,A]=(0,Ne.Z)(y,T,Boolean(P)),L=(0,a.I4)((e=>{t?(f(e,!1),C(l.u1.ChatNewAdminRights)):b({id:e})}),[t,f,C,b]),F=(0,a.I4)((e=>{I({query:e.target.value})}),[I]),B=(0,ke.Z)(S,c,(e=>{R&&R.length>0&&L(R[-1===e?0:e])}),".ListItem-button",!0);return(0,u.ZP)(c,E),a.ZP.createElement("div",{className:"Management"},t&&a.ZP.createElement("div",{className:"Management__filter",dir:N.isRtl?"rtl":void 0},a.ZP.createElement(Te.Z,{ref:k,value:P,onChange:F,placeholder:N("Search")})),a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},null!=R&&R.length?a.ZP.createElement(Re.Z,{className:"picker-list custom-scroll",items:T,onLoadMore:A,noScrollRestore:Boolean(P),ref:S,onKeyDown:B},R.map((e=>a.ZP.createElement(Ae.Z,{key:e,className:"chat-item-clickable scroll-item",onClick:()=>L(e)},a.ZP.createElement(Fe.Z,{userId:e,forceShowSelf:!0}))))):v||!R||R.length?a.ZP.createElement(we.Z,null):a.ZP.createElement(St.Z,{teactOrderKey:0,key:"nothing-found",text:i?"No subscribers found":"No members found"}))))}))),cl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a),{byId:r,statusesById:l}=e.users;return{members:null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.members,usersById:r,userStatusesById:l,isChannel:s&&(0,g.eA)(s),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{usersById:t,userStatusesById:n,members:s,isChannel:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,serverTimeOffset:m}=e;(0,u.ZP)(d,c);const h=(0,a.Ye)((()=>{if(s&&t)return(0,g.Z0)(s.filter((e=>!e.isOwner)).map((e=>{let{userId:t}=e;return t})),t,n,void 0,m)}),[s,m,t,n]),Z=(0,a.I4)((e=>{i(e),o(l.u1.GroupUserPermissions)}),[i,o]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",teactFastList:!0},h?h.map(((e,t)=>a.ZP.createElement(Ae.Z,{key:e,teactOrderKey:t,className:"chat-item-clickable scroll-item",onClick:()=>Z(e)},a.ZP.createElement(Fe.Z,{userId:e,forceShowSelf:!0})))):a.ZP.createElement(St.Z,{teactOrderKey:0,key:"nothing-found",text:r?"No subscribers found":"No members found"}))))})));var dl=n(2357),ml=n(2267);function ul(e,t){const{isPermanent:n,usage:a=0,date:s}=e,{isPermanent:r,usage:l=0,date:o}=t;return n||r?Number(n)-Number(r):a||l?l-a:o-s}const hl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{invites:a,revokedInvites:s}=e.management.byChatId[n],r=(0,p.Z1)(e,n),l=r&&(0,g.eA)(r);return{exportedInvites:a,revokedExportedInvites:s,chat:r,serverTimeOffset:e.serverTimeOffset,isChannel:l}}))((e=>{let{chatId:t,chat:n,exportedInvites:r,revokedExportedInvites:c,isActive:m,isChannel:Z,serverTimeOffset:v,onClose:P,onScreenSelect:g}=e;const{setEditingExportedInvite:p,showNotification:E,editExportedChatInvite:C,deleteExportedChatInvite:f,deleteRevokedExportedChatInvites:b,setOpenedInviteInfo:I}=(0,s.uC)(),y=(0,h.Z)(),[N,k,S]=(0,ye.Z)(),[w,M,T]=(0,ye.Z)(),[A,L]=(0,a.eJ)(),[$,x,D]=(0,ye.Z)(),[O,U]=(0,a.eJ)(),[G,J]=(0,a.eJ)(),[X,z]=(0,a.eJ)(!1),_=(0,a.I4)((()=>z(!0)),[]);(0,a.d4)((()=>{G||(0,dt.Z)("Invite").then(J)}),[G]),(0,u.ZP)(m,P);const Y=(0,a.Ye)((()=>{if(r)return r.some((e=>{let{expireDate:t}=e;return t&&t-(0,ml.b)(v){H()}),Y?1e3:void 0);const V=null==r?void 0:r.find((e=>{let{isPermanent:t}=e;return t})),q=null!=n&&n.username?`t.me/${n.username}`:null==V?void 0:V.link,K=(0,a.Ye)((()=>{const e=null!=n&&n.username?r:null==r?void 0:r.filter((e=>{let{isPermanent:t}=e;return!t}));return null==e?void 0:e.sort(ul)}),[null==n?void 0:n.username,r]),W=(0,a.I4)((e=>{const{link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l}=e;C({chatId:t,link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l,isRevoked:!0})}),[t,C]),Q=(0,a.I4)((e=>{L(e),M()}),[M]),ee=(0,a.I4)((()=>{A&&(W(A),L(void 0),T())}),[T,W,A]),te=(0,a.I4)((()=>{g(l.u1.EditInvite)}),[g]),ne=(0,a.I4)((()=>{V&&Q(V)}),[Q,V]),ae=(0,a.I4)((()=>{b({chatId:t}),S()}),[t,S,b]),se=(0,a.I4)((e=>{I({chatId:t,invite:e}),g(l.u1.InviteInfo)}),[t,g,I]),re=(0,a.I4)((e=>{f({chatId:t,link:e.link})}),[t,f]),le=(0,a.I4)((e=>{U(e),x()}),[x]),oe=(0,a.I4)((()=>{O&&(re(O),U(void 0),D())}),[D,re,O]),ie=(0,a.I4)((e=>{(0,ss.TE)(e),E({message:y("LinkCopied")})}),[y,E]),ce=(0,a.I4)((()=>{ie(q)}),[ie,q]),de=e=>{const{usage:t=0,usageLimit:n,expireDate:a,isPermanent:s,requested:r,isRevoked:l}=e;let o="";if(o=!l&&n&&t0?y("InviteLink.ExpiresIn",(0,j.D)(y,e)):y("InviteLink.Expired")}else s&&(o+=` • ${y("Permanent")}`);return o},me=e=>{const n=[];return n.push({title:y("Copy"),icon:"copy",handler:()=>ie(e.link)}),e.isPermanent||e.isRevoked||n.push({title:y("Edit"),icon:"edit",handler:()=>(e=>{p({chatId:t,invite:e}),g(l.u1.EditInvite)})(e)}),e.isRevoked?n.push({title:y("DeleteLink"),icon:"delete",handler:()=>le(e),destructive:!0}):n.push({title:y("RevokeButton"),icon:"delete",handler:()=>Q(e),destructive:!0}),n},ue=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(R.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"Actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);return a.ZP.createElement("div",{className:"Management ManageInvites"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},G&&a.ZP.createElement(mt.Z,{id:"inviteDuck",size:o.jV,animationData:G,play:X,onLoad:_})),a.ZP.createElement("p",{className:"text-muted"},y(Z?"PrimaryLinkHelpChannel":"PrimaryLinkHelp"))),q&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",{className:"text-muted"},null!=n&&n.username?y("PublicLink"):y("lng_create_permanent_link_title")),a.ZP.createElement("div",{className:"primary-link"},a.ZP.createElement("input",{className:"form-control primary-link-input",value:q,readOnly:!0,onClick:ce}),a.ZP.createElement(F.Z,{className:"primary-link-more-menu",trigger:ue,positionX:"right"},a.ZP.createElement(B.Z,{icon:"copy",onClick:ce},y("Copy")),!(null!=n&&n.username)&&a.ZP.createElement(B.Z,{icon:"delete",onClick:ne,destructive:!0},y("RevokeButton")))),a.ZP.createElement(R.Z,{onClick:ce},y("CopyLink"))),a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement(R.Z,{isText:!0,key:"create",className:"create-link",onClick:te},y("CreateNewLink")),(!K||!K.length)&&a.ZP.createElement(St.Z,{text:"No links found",key:"nothing"}),null==K?void 0:K.map((e=>a.ZP.createElement(Ae.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>se(e),contextActions:me(e),key:e.link},a.ZP.createElement("span",{className:"title invite-title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},de(e))))),a.ZP.createElement("p",{className:"text-muted hint",key:"links-hint"},y("ManageLinksInfoHelp"))),c&&Boolean(c.length)&&a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement("p",{className:"text-muted",key:"title"},y("RevokedLinks")),a.ZP.createElement(Ae.Z,{icon:"delete",destructive:!0,key:"delete",onClick:k},a.ZP.createElement("span",{className:"title"},y("DeleteAllRevokedLinks"))),null==c?void 0:c.map((e=>a.ZP.createElement(Ae.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>se(e),contextActions:me(e),key:e.link},a.ZP.createElement("span",{className:"title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},de(e))))))),a.ZP.createElement(Xe.Z,{isOpen:N,onClose:S,title:y("DeleteAllRevokedLinks"),text:y("DeleteAllRevokedLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("DeleteAll"),confirmHandler:ae}),a.ZP.createElement(Xe.Z,{isOpen:w,onClose:T,title:y("RevokeLink"),text:y("RevokeAlert"),confirmIsDestructive:!0,confirmLabel:y("RevokeButton"),confirmHandler:ee}),a.ZP.createElement(Xe.Z,{isOpen:$,onClose:D,title:y("DeleteLink"),text:y("DeleteLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("Delete"),confirmHandler:oe}))}))),Zl=[1,10,100],vl={hour:36e5,day:864e5,week:6048e5},Pl=vl.hour,gl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{editingInvite:a}=e.management.byChatId[n];return{editingInvite:a,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,editingInvite:n,isActive:r,serverTimeOffset:o,onClose:i,onScreenSelect:c}=e;const{editExportedChatInvite:d,exportChatInvite:m}=(0,s.uC)(),Z=(0,h.Z)(),[v,P,g]=(0,ye.Z)(),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(""),[b,I]=(0,a.eJ)(Date.now()+Pl),[y,N]=(0,a.eJ)("unlimited"),[k,S]=(0,a.eJ)(10),[w,M]=(0,a.eJ)("0"),[T,A]=(0,a.eJ)(!1);(0,u.ZP)(r,i),(0,Or.Z)((e=>{let[t]=e;if(t!==n)if(n){const{title:e,usageLimit:t,expireDate:a,isRequestNeeded:s}=n;if(e&&f(e),t&&(M(Zl.includes(t)?t.toString():"custom"),S(t)),a){const e=(0,ml.b)(o)+Pl;N("custom"),I(1e3*Math.max(a,e))}s&&E(!0)}else f(""),N("unlimited"),M("0"),I(1e3*(0,ml.b)(o)+Pl),S(10),E(!1)}),[n,o]);const L=(0,a.I4)((e=>{E(e.target.checked)}),[]),F=(0,a.I4)((e=>{f(e.target.value)}),[]),B=(0,a.I4)((e=>{S(Number.parseInt(e.target.value,10))}),[]),$=(0,a.I4)((e=>{I(e.getTime()),g()}),[g]),x=(0,a.I4)((()=>{A(!0);const e="custom"===w?k:w;let a;switch(y){case"custom":a=(0,ml.b)(o)+(b-Date.now())/1e3;break;case"hour":case"day":case"week":a=(0,ml.b)(o)+vl[y]/1e3;break;default:a=void 0}n?d({link:n.link,chatId:t,title:C,isRequestNeeded:p,expireDate:a,usageLimit:e}):m({chatId:t,title:C,isRequestNeeded:p,expireDate:a,usageLimit:e}),c(l.u1.Invites)}),[t,b,k,d,n,m,p,y,w,C,c,o]);return a.ZP.createElement("div",{className:"Management ManageInvite"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(fn.Z,{label:Z("ApproveNewMembers"),subLabel:Z("ApproveNewMembersDescription"),checked:p,onChange:L})),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Te.Z,{className:"link-name",placeholder:Z("LinkNameHint"),value:C,onChange:F}),a.ZP.createElement("p",{className:"text-muted hint"},Z("LinkNameHelp"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},Z("LimitByPeriod")),a.ZP.createElement(at.Z,{name:"expireOptions",options:[{value:"hour",label:Z("Hours",1)},{value:"day",label:Z("Days",1)},{value:"week",label:Z("Weeks",1)},{value:"unlimited",label:Z("NoLimit")},{value:"custom",label:Z("lng_group_invite_expire_custom")}],onChange:N,selected:y}),"custom"===y&&a.ZP.createElement(R.Z,{className:"expire-limit",isText:!0,onClick:P},(0,j.Tu)(Z,b)," ",(0,j.mr)(Z,b)),a.ZP.createElement("p",{className:"text-muted hint"},Z("TimeLimitHelp"))),!p&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},Z("LimitNumberOfUses")),a.ZP.createElement(at.Z,{name:"usageOptions",options:[...Zl.map((e=>({value:e.toString(),label:e}))),{value:"0",label:Z("NoLimit")},{value:"custom",label:Z("lng_group_invite_usage_custom")}],onChange:M,selected:w}),"custom"===w&&a.ZP.createElement("input",{className:"form-control usage-limit",type:"number",min:"1",max:"99999",value:k,onChange:B}),a.ZP.createElement("p",{className:"text-muted hint"},Z("UsesLimitHelp"))),a.ZP.createElement(mn.Z,{isShown:!0,onClick:x,disabled:T,ariaLabel:Z(n?"SaveLink":"CreateLink")},a.ZP.createElement("i",{className:"icon-check"}))),a.ZP.createElement(je,{isOpen:v,isFutureMode:!0,withTimePicker:!0,onClose:g,onSubmit:$,selectedAt:b,submitButtonLabel:Z("Save")}))}))),pl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,p.Z1)(e,a);return{enabledReactions:null===(n=s.fullInfo)||void 0===n?void 0:n.enabledReactions,availableReactions:e.availableReactions,chat:s}}))((e=>{let{availableReactions:t,enabledReactions:n,chat:r,isActive:l,onClose:o}=e;const{setChatEnabledReactions:i}=(0,s.uC)(),c=(0,h.Z)(),[d,m]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(!1),[P,g]=(0,a.eJ)(n||[]);(0,u.ZP)(l,o);const p=(0,a.I4)((()=>{r&&(v(!0),i({chatId:r.id,enabledReactions:P}))}),[r,P,i]);(0,a.d4)((()=>{n&&(v(!1),m(!1),g(n))}),[n]);const E=(0,a.I4)((e=>{if(!r||!t)return;const{name:n,checked:a}=e.currentTarget,s="all"===n?a?t.map((e=>e.reaction)):[]:a?[...P,n]:P.filter((e=>e!==n));g(s),m(!0)}),[t,r,P]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:"all",checked:!P||P.length>0,label:c("EnableReactions"),onChange:E})),null==t?void 0:t.filter((e=>!e.isInactive)).map((e=>{let{reaction:t,title:n}=e;return a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(fn.Z,{name:t,checked:!P||(null==P?void 0:P.includes(t)),disabled:0===(null==P?void 0:P.length),label:a.ZP.createElement("div",{className:"Reaction"},a.ZP.createElement(it.Z,{reaction:t}),n),onChange:E}))})))),a.ZP.createElement(mn.Z,{isShown:d,onClick:p,ariaLabel:c("Save"),disabled:Z},Z?a.ZP.createElement(J.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),El=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{inviteInfo:a}=e.management.byChatId[n],{invite:s,importers:r,requesters:l}=a||{},o=(0,p.Z1)(e,n);return{invite:s,importers:r,requesters:l,isChannel:o&&(0,g.eA)(o),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,invite:n,importers:r,requesters:l,isChannel:o,isActive:i,serverTimeOffset:c,onClose:d}=e;const{showNotification:m,loadChatInviteImporters:Z,loadChatInviteRequesters:v,openChat:P}=(0,s.uC)(),g=(0,h.Z)(),{usage:p=0,usageLimit:E,link:C,adminId:f}=n||{},b=(null==n?void 0:n.expireDate)&&1e3*(n.expireDate-(0,ml.b)(c))+Date.now(),I=((null==n?void 0:n.expireDate)||0)-(0,ml.b)(c)<0;(0,a.d4)((()=>{C&&(Z({chatId:t,link:C}),v({chatId:t,link:C}))}),[t,C,Z,v]);const y=(0,a.I4)((()=>{(0,ss.TE)(n.link),m({message:g("LinkCopied")})}),[n,g,m]);return(0,u.ZP)(i,d),a.ZP.createElement("div",{className:"Management ManageInviteInfo"},a.ZP.createElement("div",{className:"custom-scroll"},!n&&a.ZP.createElement("p",{className:"text-muted"},g("Loading")),n&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"link-title"},n.title||n.link),a.ZP.createElement("input",{className:"form-control",value:n.link,readOnly:!0,onClick:y}),a.ZP.createElement(R.Z,{className:"copy-link",onClick:y},g("CopyLink")),b&&a.ZP.createElement("p",{className:"text-muted"},I?g("ExpiredLink"):g("LinkExpiresIn",`${(0,j.Tu)(g,b)} ${(0,j.mr)(g,b)}`))),f&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,g("LinkCreatedeBy")),a.ZP.createElement(Ae.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>P({id:f})},a.ZP.createElement(Fe.Z,{userId:f,status:(0,j.ZK)(g,1e3*n.date,!0),forceShowSelf:!0}))),(()=>{if(null!=r&&r.length||null==l||!l.length)return r?a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,r.length?g("PeopleJoined",p):g("NoOneJoined")),a.ZP.createElement("p",{className:"text-muted"},!r.length&&(E?g("PeopleCanJoinViaLinkCount",E-p):g("NoOneJoinedYet")),r.map((e=>a.ZP.createElement(Ae.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>P({id:e.userId})},a.ZP.createElement(Fe.Z,{userId:e.userId,status:(0,j.ZK)(g,1e3*e.date,!0),forceShowSelf:!0})))))):a.ZP.createElement(J.Z,null)})(),(()=>{if(null==n||!n.isRevoked){if(!l&&r)return a.ZP.createElement(J.Z,null);if(null!=l&&l.length)return a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,g(o?"SubscribeRequests":"MemberRequests")),a.ZP.createElement("p",{className:"text-muted"},l.map((e=>a.ZP.createElement(Ae.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>P({id:e.userId})},a.ZP.createElement(Fe.Z,{userId:e.userId,status:(0,j.ZK)(g,1e3*e.date,!0),forceShowSelf:!0}))))))}})())))}))),Cl=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;return{user:(0,p.dy)(e,n),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{userId:t,about:n,date:r,isChannel:l,user:o,serverTimeOffset:i,chatId:c}=e;const{openChat:d,hideChatJoinRequest:m}=(0,s.uC)(),u=(0,X.y)("JoinRequest"),Z=(0,h.Z)(),v=(0,g.Js)(o),P=1e3*(r-(0,ml.b)(i))+Date.now(),p=(0,j.zk)(new Date(P))?(0,j.mr)(Z,P):(0,j.j1)(Z,P,!0,!1,!0),E=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!0})}),[c,m,t]),C=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!1})}),[c,m,t]);return a.ZP.createElement("div",{className:u("&")},a.ZP.createElement("div",{className:u("top")},a.ZP.createElement("div",{className:u("user"),onClick:()=>{d({id:t})}},a.ZP.createElement(ge.Z,{key:t,size:"medium",user:o}),a.ZP.createElement("div",{className:u("user-info")},a.ZP.createElement("div",{className:u("user-name")},v),a.ZP.createElement("div",{className:u("user-subtitle")},n))),a.ZP.createElement("div",{className:u("date")},p)),a.ZP.createElement("div",{className:u("buttons")},a.ZP.createElement(R.Z,{className:u("button"),onClick:E},Z(l?"ChannelAddToChannel":"ChannelAddToGroup")),a.ZP.createElement(R.Z,{className:u("button"),isText:!0,onClick:C},Z("DismissRequest"))))}))),fl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,p.Z1)(e,n);return{chat:a,serverTimeOffset:e.serverTimeOffset,isChannel:a&&(0,g.eA)(a)}}))((e=>{var t,n,r;let{chat:l,chatId:i,isActive:c,isChannel:d,onClose:m}=e;const{hideAllChatJoinRequests:Z,loadChatJoinRequests:v}=(0,s.uC)(),[P,p,E]=(0,ye.Z)(),[C,f,b]=(0,ye.Z)(),I=(0,h.Z)(),[y,N]=(0,a.eJ)(),[k,S]=(0,a.eJ)(!1),w=(0,a.I4)((()=>S(!0)),[]);(0,a.d4)((()=>{y||(0,dt.Z)("JoinRequest").then(N)}),[y]),(0,u.ZP)(c,m),(0,a.d4)((()=>{null!=l&&l.joinRequests||(0,g.YC)(i)||v({chatId:i})}),[l,i,v]);const M=(0,a.I4)((()=>{Z({chatId:i,isApproved:!0}),E()}),[Z,i,E]),T=(0,a.I4)((()=>{Z({chatId:i,isApproved:!1}),b()}),[Z,i,b]);return a.ZP.createElement("div",{className:"Management ManageJoinRequests"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},y&&a.ZP.createElement(mt.Z,{id:"joinRequestDucks",size:o.PM,animationData:y,play:k,onLoad:w})),Boolean(null==l||null===(t=l.joinRequests)||void 0===t?void 0:t.length)&&a.ZP.createElement("div",{className:"bulk-actions"},a.ZP.createElement(R.Z,{className:"bulk-action-button",onClick:p},"Accept all"),a.ZP.createElement(R.Z,{className:"bulk-action-button",onClick:f,isText:!0},"Dismiss all"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"custom-scroll",teactFastList:!0},a.ZP.createElement("p",{key:"title"},null!=l&&l.joinRequests?l.joinRequests.length?I("JoinRequests",l.joinRequests.length):I("NoMemberRequests"):I("Loading")),!(null!=l&&l.joinRequests)&&a.ZP.createElement(J.Z,{key:"loading"}),0===(null==l||null===(n=l.joinRequests)||void 0===n?void 0:n.length)&&a.ZP.createElement("p",{className:"text-muted",key:"empty"},I(d?"NoSubscribeRequestsDescription":"NoMemberRequestsDescription")),null==l||null===(r=l.joinRequests)||void 0===r?void 0:r.map((e=>{let{userId:t,about:n,date:s}=e;return a.ZP.createElement(Cl,{userId:t,about:n,date:s,isChannel:d,chatId:i,key:t})})))),a.ZP.createElement(Xe.Z,{isOpen:P,onClose:E,title:"Accept all requests?",text:"Are you sure you want to accept all requests?",confirmHandler:M}),a.ZP.createElement(Xe.Z,{isOpen:C,onClose:b,title:"Reject all requests?",text:"Are you sure you want to reject all requests?",confirmHandler:T}))}))),bl=(0,a.X$)((0,s.c$)((e=>({managementType:(0,p.pP)(e)})))((e=>{let{chatId:t,currentScreen:n,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,managementType:m}=e;switch(n){case l.u1.Initial:switch(m){case"user":return a.ZP.createElement(Hr,{key:t,userId:t,onClose:c,isActive:d});case"group":return a.ZP.createElement(qr,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChatPrivacyType,l.u1.Discussion,l.u1.GroupPermissions,l.u1.ChatAdministrators,l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)});case"channel":return a.ZP.createElement(el,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChannelSubscribers,l.u1.ChatAdministrators,l.u1.Discussion,l.u1.ChatPrivacyType,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)})}break;case l.u1.ChatPrivacyType:return a.ZP.createElement(nl,{chatId:t,isActive:d,onClose:c});case l.u1.Discussion:return a.ZP.createElement(al,{chatId:t,onScreenSelect:o,isActive:d,onClose:c});case l.u1.GroupPermissions:return a.ZP.createElement(jr,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.GroupRemovedUsers:return a.ZP.createElement(Wr,{chatId:t,isActive:d,onClose:c});case l.u1.GroupUserPermissionsCreate:return a.ZP.createElement(cl,{chatId:t,onChatMemberSelect:i,onScreenSelect:o,isActive:d||[l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.GroupUserPermissions:return a.ZP.createElement(sl,{chatId:t,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChatAdministrators:return a.ZP.createElement(rl,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n),onClose:c});case l.u1.GroupRecentActions:return a.ZP.createElement(ll,{chatId:t,isActive:d,onClose:c});case l.u1.ChatNewAdminRights:case l.u1.ChatAdminRights:return a.ZP.createElement(ol,{chatId:t,isNewAdmin:n===l.u1.ChatNewAdminRights,selectedUserId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChannelSubscribers:case l.u1.GroupMembers:return a.ZP.createElement(il,{chatId:t,isActive:d,onClose:c});case l.u1.Invites:return a.ZP.createElement(hl,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.EditInvite:return a.ZP.createElement(gl,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.GroupAddAdmins:return a.ZP.createElement(il,{chatId:t,noAdmins:!0,isActive:d,onClose:c,onScreenSelect:o,onChatMemberSelect:i});case l.u1.Reactions:return a.ZP.createElement(pl,{chatId:t,isActive:d,onClose:c});case l.u1.InviteInfo:return a.ZP.createElement(El,{chatId:t,isActive:d,onClose:c});case l.u1.JoinRequests:return a.ZP.createElement(fl,{chatId:t,isActive:d,onClose:c})}})));var Il=n(9937);const yl=/^4[0-9]{12}(?:[0-9]{1,3})?$/,Nl=/^5[1-5][0-9]{11,14}$/,kl=/^2[2-7][0-9]{11,14}$/;let Sl;!function(e){e[e.Default=0]="Default",e[e.Visa=1]="Visa",e[e.Mastercard=2]="Mastercard"}(Sl||(Sl={}));const wl={[Sl.Default]:"",[Sl.Visa]:"visa",[Sl.Mastercard]:"mastercard"};function Ml(e){return e=e.replace(/\s/g,""),yl.test(e)?Sl.Visa:Nl.test(e)||kl.test(e)?Sl.Mastercard:Sl.Default}const Tl={},Rl=/(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,3})?(\d{1,3})?/,Al="AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234".split("\n").map((e=>({id:e.substr(0,2),flag:e.substr(2,4),code:`+${e.match(/\d+/)[0]}`,name:e.split(/\d+/)[1],phoneFormat:function(e){if(!e)return Rl;const t=e[0];let n;if(!Tl[t]){const e=t.split("").map(Number);n=e.reduce(((e,t,n)=>`${e}(\\d{1,${t}})${n>0?"?":""}`),""),Tl[t]=new RegExp(`${n}${"()?".repeat(5-e.length)}`)}return Tl[t]}(e.match(/\d+$/))}))),Ll={streetLine1:"",streetLine2:"",city:"",state:"",countryIso2:"",postCode:"",fullName:"",email:"",phone:"",shipping:"",cardNumber:"",cardholder:"",expiry:"",cvv:"",billingCountry:"",billingZip:"",saveInfo:!0,saveCredentials:!1,formErrors:{}},Fl=(e,t)=>{switch(t.type){case"changeAddress1":return{...e,streetLine1:t.payload,formErrors:{...e.formErrors,streetLine1:void 0}};case"changeAddress2":return{...e,streetLine2:t.payload,formErrors:{...e.formErrors,streetLine2:void 0}};case"changeCity":return{...e,city:t.payload,formErrors:{...e.formErrors,city:void 0}};case"changeState":return{...e,state:t.payload,formErrors:{...e.formErrors,state:void 0}};case"changeCountry":return{...e,countryIso2:t.payload,billingCountry:Bl(t.payload),formErrors:{...e.formErrors,countryIso2:void 0}};case"changePostCode":return{...e,postCode:t.payload,formErrors:{...e.formErrors,postCode:void 0}};case"changeFullName":return{...e,fullName:t.payload,formErrors:{...e.formErrors,fullName:void 0}};case"changeEmail":return{...e,email:t.payload,formErrors:{...e.formErrors,email:void 0}};case"changePhone":return{...e,phone:t.payload,formErrors:{...e.formErrors,phone:void 0}};case"changeShipping":return{...e,shipping:t.payload};case"changeCardNumber":return{...e,cardNumber:t.payload,formErrors:{...e.formErrors,cardNumber:void 0}};case"changeCardholder":return{...e,cardholder:t.payload,formErrors:{...e.formErrors,cardholder:void 0}};case"changeExpiryDate":return{...e,expiry:t.payload,formErrors:{...e.formErrors,expiry:void 0}};case"changeCvvCode":return{...e,cvv:t.payload,formErrors:{...e.formErrors,cvv:void 0}};case"changeBillingCountry":return{...e,billingCountry:t.payload,formErrors:{...e.formErrors,billingCountry:void 0}};case"changeBillingZip":return{...e,billingZip:t.payload,formErrors:{...e.formErrors,billingZip:void 0}};case"changeSaveInfo":return{...e,saveInfo:t.payload};case"changeSaveCredentials":return{...e,saveCredentials:t.payload};case"updateUserInfo":return t.payload.countryIso2?{...e,...t.payload,billingCountry:Bl(t.payload.countryIso2)}:{...e,...t.payload};case"setFormErrors":return{...e,formErrors:{...e.formErrors,...t.payload}};default:return e}};function Bl(e){const t=Al.find((t=>{let{id:n}=t;return n===e}));return t?t.name:""}function $l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:400;(0,a.d4)((()=>{i.$b||setTimeout((()=>{(0,G.T2)((()=>{e.current&&e.current.focus()}))}),t)}),[e,t])}const xl=(0,a.X$)((e=>{const{id:t,value:n,label:s,hasArrow:r,error:l,ref:o,placeholder:i,onChange:c,children:d}=e,m=l||s,u=(0,X.Z)("input-group",n&&"touched",l&&"error",m&&"with-label",r&&"with-arrow","input-group");return a.ZP.createElement("div",{className:u},a.ZP.createElement("select",{className:"form-control",id:t,value:n||"",onChange:c,placeholder:i||s,ref:o},d),m&&t&&a.ZP.createElement("label",{htmlFor:t},m))})),Dl=(0,a.X$)((e=>{let{state:t,needEmail:n,needPhone:s,needName:r,needAddress:l,dispatch:o}=e;const i=(0,a.sO)(null),c=(0,a.sO)(null),d=(0,a.sO)(null);(0,a.d4)((()=>{d.current&&d.current.value!==t.countryIso2&&(d.current.value=t.countryIso2)}),[t.countryIso2]);const m=(0,h.Z)();$l(i);const u=(0,a.I4)((e=>{o({type:"changeAddress1",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeAddress2",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeCity",payload:e.target.value})}),[o]),P=(0,a.I4)((e=>{o({type:"changeState",payload:e.target.value})}),[o]),g=(0,a.I4)((e=>{o({type:"changeCountry",payload:e.target.value})}),[o]),p=(0,a.I4)((e=>{o({type:"changePostCode",payload:e.target.value})}),[o]),E=(0,a.I4)((e=>{o({type:"changeFullName",payload:e.target.value})}),[o]),C=(0,a.I4)((e=>{o({type:"changeEmail",payload:e.target.value})}),[o]),f=(0,a.I4)((e=>{let{value:t}=e.target;t=`+${t.replace(/\D/g,"")}`,c.current&&(c.current.value=t),o({type:"changePhone",payload:t})}),[o]),b=(0,a.I4)((e=>{o({type:"changeSaveInfo",payload:e.target.value})}),[o]),{formErrors:I}=t;return a.ZP.createElement("div",{className:"ShippingInfo"},a.ZP.createElement("form",null,l?a.ZP.createElement("div",null,a.ZP.createElement("h5",null,m("PaymentShippingAddress")),a.ZP.createElement(Te.Z,{ref:i,label:"Address1 (Street)",onChange:u,value:t.streetLine1,inputMode:"text",error:I.streetLine1}),a.ZP.createElement(Te.Z,{label:"Address2 (Street)",onChange:Z,value:t.streetLine2,inputMode:"text",error:I.streetLine2}),a.ZP.createElement(Te.Z,{label:"City",onChange:v,value:t.city,inputMode:"text",error:I.city}),a.ZP.createElement(Te.Z,{label:"State",onChange:P,value:t.state,inputMode:"text",error:I.state}),a.ZP.createElement(xl,{label:"Country",placeholder:"Country",onChange:g,value:t.countryIso2,hasArrow:Boolean(!0),id:"shipping-country",error:I.countryIso2,ref:d},Al.map((e=>{let{name:t,id:n}=e;return a.ZP.createElement("option",{value:n,className:"county-item"},t)}))),a.ZP.createElement(Te.Z,{label:"Post Code",onChange:p,value:t.postCode,inputMode:"text",error:I.postCode})):void 0,r||n||s?a.ZP.createElement("h5",null,m("PaymentShippingReceiver")):void 0,r&&a.ZP.createElement(Te.Z,{label:"Full name",onChange:E,value:t.fullName,inputMode:"text",error:I.fullName}),n&&a.ZP.createElement(Te.Z,{label:"Email",onChange:C,value:t.email,inputMode:"email",error:I.email}),s&&a.ZP.createElement(Te.Z,{label:"Phone number",onChange:f,value:t.phone,inputMode:"tel",error:I.phone,ref:c}),a.ZP.createElement(fn.Z,{label:m("PaymentShippingSave"),subLabel:m("PaymentShippingSaveInfo"),checked:Boolean(t.saveInfo),onChange:b})))})),Ol=(0,a.X$)((e=>{let{state:t,shippingOptions:n,currency:s,dispatch:r}=e;const l=(0,h.Z)();(0,a.d4)((()=>{n&&!t.shipping&&r({type:"changeShipping",payload:n[0].id})}),[n,t.shipping,r]);const o=(0,a.I4)((e=>{r({type:"changeShipping",payload:e})}),[r]),i=(0,a.Ye)((()=>n.map((e=>{let{id:t,title:n,amount:a}=e;return{label:n,subLabel:(0,Il.x)(a,s,l.code),value:t}}))),[n,s,l.code]);return a.ZP.createElement("div",{className:"Shipping"},a.ZP.createElement("form",null,a.ZP.createElement("p",null,"Select shipping method"),a.ZP.createElement(at.Z,{name:"shipping-options",options:i,onChange:o,selected:t.shipping})))}));function Ul(e,t,n,s){let r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return a.ZP.createElement("div",{className:"price-info-item "+(r?"price-info-item-main":"")},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("div",{className:"value"},(0,Il.x)(n,s,e)))}function Gl(e,t,n){return a.ZP.createElement("div",{className:"checkout-info-item"},a.ZP.createElement("i",{className:e}," "),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("p",{className:"data"},n)))}const Jl=(0,a.X$)((e=>{let{invoiceContent:t,prices:n,shippingPrices:s,checkoutInfo:r,currency:l,totalPrice:o}=e;const i=(0,h.Z)(),{photoUrl:c,title:d,text:m}=t||{},{paymentMethod:u,paymentProvider:Z,shippingAddress:v,name:P,phone:g,shippingMethod:p}=r||{};return a.ZP.createElement("div",{className:"Checkout"},a.ZP.createElement("div",{className:"description has-image"},c&&a.ZP.createElement("img",{src:c,alt:""}),a.ZP.createElement("div",{className:"text"},a.ZP.createElement("h5",null,d),a.ZP.createElement("p",null,m))),a.ZP.createElement("div",{className:"price-info"},n&&n.map((e=>Ul(i.code,e.label,e.amount,l))),s&&s.map((e=>Ul(i.code,e.label,e.amount,l))),void 0!==o&&Ul(i.code,i("Checkout.TotalAmount"),o,l,!0)),a.ZP.createElement("div",{className:"invoice-info"},u&&Gl("icon-card",u,"Payment method"),Z&&Gl("stripe-provider",Z,"Payment provider"),v&&Gl("icon-location",v,"Shipping address"),P&&Gl("icon-user",P,"Name"),g&&Gl("icon-phone",g,"Phone number"),p&&Gl("icon-truck",p,"Shipping method")))})),Xl=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,a.sO)(null),l=(0,a.I4)((e=>{if("Backspace"===e.key&&"/"===t.charAt(t.length-1)){const e=t.slice(0,t.length-1);r.current&&(r.current.value=e)}}),[t]),o=(0,a.I4)((e=>{s(function(e){const t=(e=e.replace(/[^\d]/g,"").slice(0,4)).match(/.{1,2}/g);return null!=t&&t[0]&&Number(t[0])>12&&(t[0]="12"),null!=t&&t[0]&&2===t[0].length&&!t[1]&&(t[1]=""),t?t.join("/"):""}(e.target.value))}),[s]);return a.ZP.createElement(Te.Z,{label:"Expiry date",ref:r,onChange:o,onKeyDown:l,value:t,error:n,inputMode:"numeric",maxLength:5})}));var zl=n(6352),_l=n(5753);const Yl=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,a.sO)(null);$l(r);const[l,o]=(0,a.eJ)(Sl.Default);(0,a.d4)((()=>{const e=Ml(t);o(e)}),[]);const i=(0,a.I4)((e=>{const t=function(e){const t=(e=e.replace(/[^\d]/g,"")).match(/.{1,4}/g);return t?t.join(" "):""}(e.target.value),n=Ml(e.target.value);o(n),s(t),r.current&&(r.current.value=t)}),[s,r]),c=function(e){switch(e){case Sl.Mastercard:return a.ZP.createElement("img",{src:zl,alt:""});case Sl.Visa:return a.ZP.createElement("img",{src:_l,alt:""});default:return}}(l);return a.ZP.createElement("div",{className:"CardInput"},a.ZP.createElement("span",{className:"left-addon"},c),a.ZP.createElement(Te.Z,{ref:r,label:"Card number",onChange:i,value:t,inputMode:"numeric",className:l?"has-left-addon":"",error:n,maxLength:23}))})),Hl=(0,a.X$)((e=>{let{state:t,canSaveCredentials:n,needCardholderName:s,needCountry:r,needZip:l,dispatch:o}=e;const i=(0,a.sO)(null);(0,a.d4)((()=>{i.current&&i.current.value!==t.billingCountry&&(i.current.value=t.billingCountry)}),[t.billingCountry]);const c=(0,a.I4)((e=>{o({type:"changeCardNumber",payload:e})}),[o]),d=(0,a.I4)((e=>{o({type:"changeCardholder",payload:e.target.value.toUpperCase()})}),[o]),m=(0,a.I4)((e=>{o({type:"changeExpiryDate",payload:e})}),[o]),u=(0,a.I4)((e=>{o({type:"changeCvvCode",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeBillingCountry",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeBillingZip",payload:e.target.value})}),[o]),P=(0,a.I4)((e=>{o({type:"changeSaveCredentials",payload:e.target.value})}),[o]),g=(0,h.Z)(),{formErrors:p={}}=t;return a.ZP.createElement("div",{className:"PaymentInfo"},a.ZP.createElement("form",null,a.ZP.createElement("h5",null,g("PaymentCardTitle")),a.ZP.createElement(Yl,{onChange:c,value:t.cardNumber,error:p.cardNumber}),s&&a.ZP.createElement(Te.Z,{label:"Name on card",onChange:d,value:t.cardholder,inputMode:"text",error:p.cardholder}),a.ZP.createElement("section",{className:"inline-inputs"},a.ZP.createElement(Xl,{value:t.expiry,onChange:m,error:p.expiry}),a.ZP.createElement(Te.Z,{label:"CVV code",onChange:u,value:t.cvv,inputMode:"numeric",maxLength:3,error:p.cvv})),r||l?a.ZP.createElement("h5",null,g("PaymentBillingAddress")):void 0,r&&a.ZP.createElement(xl,{label:"Country",placeholder:"Country",onChange:Z,value:t.billingCountry,hasArrow:Boolean(!0),id:"billing-country",error:p.billingCountry,ref:i},Al.map((e=>{let{name:t}=e;return a.ZP.createElement("option",{value:t,className:"county-item"},t)}))),l&&a.ZP.createElement(Te.Z,{label:"Post Code",onChange:v,value:t.billingZip,inputMode:"text",error:p.billingZip}),n&&a.ZP.createElement(fn.Z,{label:g("PaymentCardSavePaymentInformation"),checked:t.saveCredentials,onChange:P})))})),Vl=(0,a.X$)((0,s.c$)((e=>{const{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,invoice:r,invoiceContent:l,nativeProvider:o,nativeParams:i,passwordMissing:c,error:d}=e.payment,m=Boolean(r&&(!o||"stripe"!==o)),{needCardholderName:u,needCountry:h,needZip:Z}=i||{},{nameRequested:v,phoneRequested:P,emailRequested:g,shippingAddressRequested:p,flexible:E,phoneToProvider:C,emailToProvider:f,currency:b,prices:I}=r||{};return{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,nativeProvider:o,passwordMissing:c,nameRequested:v,shippingAddressRequested:p,phoneRequested:P,emailRequested:g,flexible:E,phoneToProvider:C,emailToProvider:f,currency:b,prices:I,isProviderError:m,invoiceContent:l,needCardholderName:u,needCountry:h,needZip:Z,error:d}}))((e=>{let{isOpen:t,onClose:n,step:r,shippingOptions:o,savedInfo:i,canSaveCredentials:c,nameRequested:d,shippingAddressRequested:m,phoneRequested:u,emailRequested:Z,phoneToProvider:v,emailToProvider:P,currency:g,passwordMissing:p,isProviderError:E,invoiceContent:C,nativeProvider:f,prices:b,needCardholderName:I,needCountry:y,needZip:N,error:k}=e;const{validateRequestedInfo:S,sendPaymentForm:w,setPaymentStep:M,sendCredentialsInfo:T,clearPaymentError:A}=(0,s.uC)(),[F,B]=(0,nn.Z)(Fl,Ll),[$,x]=(0,a.eJ)(!1),D=(0,h.Z)();(0,a.d4)((()=>{(r||k)&&x(!1)}),[r,k]),(0,a.d4)((()=>{null!=k&&k.field&&B({type:"setFormErrors",payload:{[k.field]:k.message}})}),[k,B]),(0,a.d4)((()=>{if(i){const{name:e,phone:t,email:n,shippingAddress:a}=i;B({type:"updateUserInfo",payload:{fullName:e,phone:t&&"+"!==t.charAt(0)?`+${t}`:t,email:n,...a||{}}})}}),[i,B]);const O=(0,a.I4)((()=>{A()}),[A]),U=(0,a.Ye)((()=>r!==l.KB.Checkout?0:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;const a=t?jl(t,n):[];let s=0;const r=e.concat(a||[]);return s=r.reduce(((e,t)=>e+t.amount),s),s}(b,o,F.shipping)),[r,F.shipping,b,o]),G=(0,a.Ye)((()=>{if(r===l.KB.Checkout)return function(e,t,n){const a=`${function(e){const t=Ml(e);return wl[t]||""}(e.cardNumber)} *${e.cardNumber.slice(-4)}`,s=e.streetLine1?`${e.streetLine1}, ${e.city}, ${e.countryIso2}`:void 0,{phone:r,fullName:l}=e,o=t?ql(t,e.shipping):void 0;return{paymentMethod:a,paymentProvider:n,shippingAddress:s,name:l,phone:r,shippingMethod:null==o?void 0:o.title}}(F,o,f||"")}),[r,F,o,f]),X=(0,a.I4)((()=>{const{saveInfo:e}=F,t=function(e){const{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l,fullName:o,phone:i,email:c}=e;return{name:o,phone:i,email:c,shippingAddress:{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l}}}(F);S({requestInfo:t,saveInfo:e})}),[S,F]),z=(0,a.I4)((()=>{const e=function(e){const{cardNumber:t,cardholder:n,expiry:a,cvv:s,billingCountry:r,billingZip:l}=e,[o,i]=a.split("/");return{data:{cardNumber:t,cardholder:n,expiryMonth:o,expiryYear:i,cvv:s,country:r,zip:l}}}(F);T({credentials:e})}),[T,F]),_=(0,a.I4)((()=>{w({shippingOptionId:F.shipping,saveCredentials:F.saveCredentials})}),[w,F]),Y=(0,a.I4)((e=>{M({step:e})}),[M]),H=(0,a.I4)((()=>{switch(x(!0),r){case l.KB.ShippingInfo:return X();case l.KB.Shipping:return Y(l.KB.PaymentInfo);case l.KB.PaymentInfo:return z();case l.KB.Checkout:return _();default:return()=>{}}}),[r,X,Y,z,_]),V=(0,a.Ye)((()=>{switch(r){case l.KB.ShippingInfo:return D("PaymentShippingInfo");case l.KB.Shipping:return D("PaymentShippingMethod");case l.KB.PaymentInfo:return D("PaymentCardInfo");case l.KB.Checkout:return D("PaymentCheckout");default:return""}}),[r,D]),q=(0,a.Ye)((()=>r===l.KB.Checkout?D("Checkout.PayPrice",(0,Il.x)(U,g,D.code)):D("Next")),[r,D,g,U]);return E?a.ZP.createElement(Me.Z,{className:"error",isOpen:t,onClose:n},a.ZP.createElement("p",null,"Sorry, Telegram WebZ doesn't support payments with this provider yet. ",a.ZP.createElement("br",null),"Please use one of our mobile apps to do this."),a.ZP.createElement(R.Z,{isText:!0,onClick:n},D("OK"))):a.ZP.createElement(Me.Z,{className:"PaymentModal",isOpen:t,onClose:n},a.ZP.createElement("div",{className:"header",dir:D.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null,V)),void 0!==r?a.ZP.createElement(L.Z,{name:"slide",activeKey:r},(()=>a.ZP.createElement("div",{className:"content custom-scroll"},function(e){switch(e){case l.KB.ShippingInfo:return a.ZP.createElement(Dl,{state:F,dispatch:B,needAddress:Boolean(m),needEmail:Boolean(Z||P),needPhone:Boolean(u||v),needName:Boolean(d)});case l.KB.Shipping:return a.ZP.createElement(Ol,{state:F,dispatch:B,shippingOptions:o||[],currency:g});case l.KB.PaymentInfo:return a.ZP.createElement(Hl,{state:F,dispatch:B,canSaveCredentials:Boolean(!p&&c),needCardholderName:I,needCountry:y,needZip:N});case l.KB.Checkout:return a.ZP.createElement(Jl,{prices:b,shippingPrices:F.shipping&&o?jl(o,F.shipping):void 0,totalPrice:U,invoiceContent:C,checkoutInfo:G,currency:g});default:return}}(r)))):a.ZP.createElement("div",{className:"empty-content"},a.ZP.createElement(J.Z,{color:"gray"})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(R.Z,{type:"submit",onClick:H,disabled:$,isLoading:$},q)),k&&!k.field&&function(){if(k)return a.ZP.createElement(Me.Z,{className:"error",isOpen:Boolean(k),onClose:O},a.ZP.createElement("h4",null,k.description||"Error"),a.ZP.createElement("p",null,k.description||"Error"),a.ZP.createElement(R.Z,{isText:!0,onClick:A},D("OK")))}())})));function ql(e,t){return e.find((e=>{let{id:n}=e;return n===t}))}function jl(e,t){const n=ql(e,t);return null==n?void 0:n.prices}const Kl=(0,a.X$)((0,s.c$)((e=>{const{receipt:t}=e.payment,{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}=t||{};return{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}}))((e=>{let{isOpen:t,onClose:n,prices:s,shippingPrices:r,totalAmount:l,currency:o,info:i,photoUrl:c,text:d,title:m,credentialsTitle:u,shippingMethod:Z}=e;const v=(0,h.Z)(),P=(0,a.Ye)((()=>function(e,t,n){if(!t)return{paymentMethod:e};const{shippingAddress:a}=t,s=null!=a&&a.streetLine1?`${a.streetLine1}, ${a.city}, ${a.countryIso2}`:void 0,{phone:r,name:l}=t;return{paymentMethod:e,paymentProvider:"Stripe",shippingAddress:s,name:l,phone:r,shippingMethod:n}}(u,i,Z)),[i,Z,u]);return a.ZP.createElement(Me.Z,{className:"PaymentModal PaymentModal-receipt",isOpen:t,onClose:n},a.ZP.createElement("div",null,a.ZP.createElement("div",{className:"header",dir:v.isRtl?"rtl":void 0},a.ZP.createElement(R.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null," ",v("PaymentReceipt")," ")),a.ZP.createElement("div",{className:"receipt-content custom-scroll"},a.ZP.createElement(Jl,{prices:s,shippingPrices:r,totalPrice:l,invoiceContent:{photoUrl:c,text:d,title:m},checkoutInfo:P,currency:o}))))})))},9364:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),s=n(3716),r=n(7361),l=n(6752),o=n(9107),i=n(231);const c=r.wB?550:400,d=(0,a.X$)((e=>{let{isLoading:t=!1,isPasswordVisible:n,error:d,hint:m,placeholder:u="Password",submitLabel:h="Next",clearError:Z,onChangePasswordVisibility:v,onInputChange:P,onSubmit:g}=e;const p=(0,a.sO)(null),E=(0,o.Z)(),[C,f]=(0,a.eJ)(""),[b,I]=(0,a.eJ)(!1);return(0,a.d4)((()=>{r.$b||setTimeout((()=>{p.current.focus()}),c)}),[]),(0,a.d4)((()=>{d&&requestAnimationFrame((()=>{p.current.focus(),p.current.select()}))}),[d]),a.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),t||b&&g(C)},autoComplete:"off"},a.ZP.createElement("div",{className:(0,l.Z)("input-group password-input",C&&"touched",d&&"error"),dir:E.isRtl?"rtl":void 0},a.ZP.createElement("input",{ref:p,className:"form-control",type:n?"text":"password",id:"sign-in-password",value:C||"",autoComplete:"current-password",onChange:function(e){d&&Z();const{target:t}=e;f(t.value),I(t.value.length>=s.lo),P&&P(t.value)},dir:"auto"}),a.ZP.createElement("label",null,d||m||u),a.ZP.createElement("div",{className:"toggle-password",onClick:function(){v(!n)},role:"button",tabIndex:0,title:"Toggle password visibility"},a.ZP.createElement("i",{className:n?"icon-eye":"icon-eye-closed"}))),b&&a.ZP.createElement(i.Z,{type:"submit",ripple:!0,isLoading:t},h))}))},3490:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),s=n(3716),r=n(7361),l=n(7324),o=n(7799);const i=[0,50],c=[0,20],d=[20,0],m=r.wB?s.qp:s.z7,u=(0,a.X$)((e=>{let{isPasswordVisible:t,isBig:n}=e;const[r,u]=(0,a.eJ)(),[h,Z]=(0,a.eJ)(),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1);(0,a.d4)((()=>{r?setTimeout((()=>p(!0)),2e3):(0,l.Z)("MonkeyClose").then(u)}),[r]),(0,a.d4)((()=>{h||(0,l.Z)("MonkeyPeek").then(Z)}),[h]);const E=(0,a.I4)((()=>P(!0)),[]);return a.ZP.createElement("div",{id:"monkey",className:n?"big":""},!v&&a.ZP.createElement("div",{className:"monkey-preview"}),r&&a.ZP.createElement(o.Z,{id:"closeMonkey",size:n?s.K2:m,className:g?"hidden":"shown",animationData:r,playSegment:i,noLoop:!0,onLoad:E}),h&&a.ZP.createElement(o.Z,{id:"peekMonkey",size:n?s.K2:m,className:g?"shown":"hidden",animationData:h,playSegment:t?c:d,noLoop:!0}))}))},710:(e,t,n)=>{n.d(t,{Z:()=>P});var a=n(4050),s=n(6752),r=n(3716),l=n(1394),o=n(9107),i=n(231),c=n(3103),d=n(4288);const m={type:"blob",quality:1,format:"jpeg",circle:!1,size:{width:1024,height:1024}};let u,h,Z;const v=(0,a.X$)((e=>{let{file:t,onChange:s,onClose:v}=e;const[P,g]=(0,a.eJ)(!1);(0,a.d4)((()=>{t&&(P?async function(e){try{const t=document.getElementById("avatar-crop");if(!t)return;const{offsetWidth:n,offsetHeight:a}=t;Z=new u(t,{enableZoom:!0,boundary:{width:n,height:a},viewport:{width:n-16,height:a-16,type:"circle"}});const s=await(0,l.YJ)(e);await Z.bind({url:s})}catch(e){r.eM&&console.error(e)}}(t):async function(){return h||(h=Promise.all([n.e(99),n.e(472)]).then(n.bind(n,3472)),u=(await h).default),h}().then((()=>g(!0))))}),[t,P]);const p=(0,o.Z)();return a.ZP.createElement(c.Z,{isOpen:Boolean(t),onClose:v,title:"Drag to reposition",className:"CropModal",hasCloseButton:!0},P?a.ZP.createElement("div",{id:"avatar-crop"}):a.ZP.createElement(d.Z,null),a.ZP.createElement(i.Z,{className:"confirm-button",round:!0,color:"primary",onClick:async function(){if(!Z)return;const e=await Z.result(m),t="string"==typeof e?e:(0,l.hl)(e,"avatar.jpg");s(t)},ariaLabel:p("CropImage")},a.ZP.createElement("i",{className:"icon-check"})))})),P=(0,a.X$)((e=>{let{title:t="Change your profile picture",disabled:n,currentAvatarBlobUrl:r,onChange:l}=e;const[o,i]=(0,a.eJ)(),[c,d]=(0,a.eJ)(r);(0,a.d4)((()=>{d(r)}),[r]);const m=(0,s.Z)(c&&"filled",n&&"disabled");return a.ZP.createElement("div",{className:"AvatarEditable"},a.ZP.createElement("label",{className:m,role:"button",tabIndex:0,title:t},a.ZP.createElement("input",{type:"file",onChange:function(e){const t=e.target;t&&t.files&&t.files[0]&&(i(t.files[0]),t.value="")},accept:"image/png, image/jpeg"}),a.ZP.createElement("i",{className:"icon-camera-add"}),c&&a.ZP.createElement("img",{src:c,alt:"Avatar"})),a.ZP.createElement(v,{file:o,onClose:function(){i(void 0)},onChange:function(e){i(void 0),l(e),c&&URL.revokeObjectURL(c),d(URL.createObjectURL(e))}}))}))},6352:(e,t,n)=>{e.exports=n.p+"mastercard.4216118edafe23cc2dec..svg"},5753:(e,t,n)=>{e.exports=n.p+"visa.e5a7c336e1deb4b92a63..svg"}}]); -//# sourceMappingURL=126.6c11ab2d3cdbd7baf2dd.js.map \ No newline at end of file diff --git a/dist/126.6c11ab2d3cdbd7baf2dd.js.map b/dist/126.6c11ab2d3cdbd7baf2dd.js.map deleted file mode 100644 index 7353de311..000000000 --- a/dist/126.6c11ab2d3cdbd7baf2dd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"126.6c11ab2d3cdbd7baf2dd.js","mappings":"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","sources":["webpack://telegram-t/./src/components/mediaViewer/helpers/ghostAnimation.ts","webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.tsx","webpack://telegram-t/./src/hooks/useFullscreen.ts","webpack://telegram-t/./src/components/mediaViewer/helpers/formatFileSize.ts","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.tsx","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.tsx","webpack://telegram-t/./src/hooks/useTimeout.ts","webpack://telegram-t/./src/components/mediaViewer/PanZoom.tsx","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.tsx","webpack://telegram-t/./src/components/mediaViewer/SlideTransition.tsx","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.tsx","webpack://telegram-t/./src/components/common/ChatOrUserPicker.tsx","webpack://telegram-t/./src/components/main/ForwardPicker.tsx","webpack://telegram-t/./src/components/main/Dialogs.tsx","webpack://telegram-t/./src/components/main/Notifications.tsx","webpack://telegram-t/./src/components/main/SafeLinkModal.tsx","webpack://telegram-t/./src/components/common/CalendarModal.tsx","webpack://telegram-t/./src/components/main/HistoryCalendar.tsx","webpack://telegram-t/./src/components/common/DeleteMessageModal.tsx","webpack://telegram-t/./src/components/common/PinMessageModal.tsx","webpack://telegram-t/./src/components/common/UnpinAllMessagesModal.tsx","webpack://telegram-t/./src/components/middle/DeleteSelectedMessageModal.tsx","webpack://telegram-t/./src/components/common/ReportMessageModal.tsx","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.tsx","webpack://telegram-t/./src/components/common/SeenByModal.tsx","webpack://telegram-t/./src/components/middle/ReactorListModal.tsx","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.tsx","webpack://telegram-t/./src/hooks/useSelectWithEnter.ts","webpack://telegram-t/./src/components/left/search/LeftSearchResultChat.tsx","webpack://telegram-t/./src/components/left/search/RecentContacts.tsx","webpack://telegram-t/./src/components/left/search/ChatMessage.tsx","webpack://telegram-t/./src/components/left/search/DateSuggest.tsx","webpack://telegram-t/./src/components/left/search/ChatResults.tsx","webpack://telegram-t/./src/components/left/search/ChatMessageResults.tsx","webpack://telegram-t/./src/components/left/search/helpers/createMapStateToProps.ts","webpack://telegram-t/./src/components/left/search/MediaResults.tsx","webpack://telegram-t/./src/components/left/search/LinkResults.tsx","webpack://telegram-t/./src/components/left/search/FileResults.tsx","webpack://telegram-t/./src/components/left/search/AudioResults.tsx","webpack://telegram-t/./src/components/left/search/LeftSearch.tsx","webpack://telegram-t/./src/hooks/reducers/useTwoFaReducer.ts","webpack://telegram-t/./src/components/left/settings/SettingsHeader.tsx","webpack://telegram-t/./src/components/left/settings/SettingsMain.tsx","webpack://telegram-t/./src/components/common/UsernameInput.tsx","webpack://telegram-t/./src/components/left/settings/SettingsEditProfile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsDataStorage.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersMain.tsx","webpack://telegram-t/./src/components/ui/ShowMoreButton.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersEdit.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatFilters.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCoverAnimated.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCover.tsx","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneral.tsx","webpack://telegram-t/./src/util/systemFilesDialog.ts","webpack://telegram-t/./src/util/colors.ts","webpack://telegram-t/./src/components/left/settings/WallpaperTile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.tsx","webpack://telegram-t/./src/components/left/settings/SettingsNotifications.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacy.tsx","webpack://telegram-t/./src/components/left/settings/SettingsLanguage.tsx","webpack://telegram-t/./src/components/left/settings/helper/privacy.ts","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibility.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyActiveSessions.tsx","webpack://telegram-t/./src/components/left/settings/BlockUserModal.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyBlockedUsers.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEnabled.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaPassword.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaStart.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaSkippableForm.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaCongratulations.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEmailCode.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFa.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibilityExceptionList.tsx","webpack://telegram-t/./src/components/left/settings/SettingsQuickReaction.tsx","webpack://telegram-t/./src/components/left/settings/Settings.tsx","webpack://telegram-t/./src/components/left/main/ContactList.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep1.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep2.tsx","webpack://telegram-t/./src/components/left/newChat/NewChat.tsx","webpack://telegram-t/./src/components/left/ArchivedChats.tsx","webpack://telegram-t/./src/components/left/ChatFolderModal.tsx","webpack://telegram-t/./src/components/middle/message/helpers/copyOptions.ts","webpack://telegram-t/./src/util/scrollLock.ts","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.tsx","webpack://telegram-t/./src/components/middle/message/ReactionSelector.tsx","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.tsx","webpack://telegram-t/./src/components/middle/message/ContextMenuContainer.tsx","webpack://telegram-t/./src/components/common/StickerSetModal.tsx","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.tsx","webpack://telegram-t/./src/components/middle/MobileSearch.tsx","webpack://telegram-t/./src/util/findInViewport.ts","webpack://telegram-t/./src/util/isFullyVisible.ts","webpack://telegram-t/./src/util/setTooltipItemVisible.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useKeyboardNavigation.ts","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.tsx","webpack://telegram-t/./src/components/middle/composer/PollModal.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiButton.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiCategory.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSet.tsx","webpack://telegram-t/./src/components/middle/composer/StickerPicker.tsx","webpack://telegram-t/./src/components/common/GifButton.tsx","webpack://telegram-t/./src/components/middle/composer/GifPicker.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenuFooter.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.tsx","webpack://telegram-t/./src/components/middle/composer/AttachMenu.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommand.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.tsx","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/ArticleResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/GifResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/StickerResult.tsx","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.tsx","webpack://telegram-t/./src/components/right/RightSearch.tsx","webpack://telegram-t/./src/components/right/StickerSetResult.tsx","webpack://telegram-t/./src/components/right/StickerSearch.tsx","webpack://telegram-t/./src/components/right/GifSearch.tsx","webpack://telegram-t/./src/components/right/PollAnswerResults.tsx","webpack://telegram-t/./src/components/right/PollResults.tsx","webpack://telegram-t/./src/components/right/management/ManageUser.tsx","webpack://telegram-t/./src/components/right/management/ManageGroup.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupPermissions.tsx","webpack://telegram-t/./src/components/right/management/RemoveGroupUserModal.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupRemovedUsers.tsx","webpack://telegram-t/./src/components/right/management/ManageChannel.tsx","webpack://telegram-t/./src/components/right/management/ManageChatPrivacyType.tsx","webpack://telegram-t/./src/components/right/management/ManageDiscussion.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissions.tsx","webpack://telegram-t/./src/components/right/management/ManageChatAdministrators.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupRecentActions.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupAdminRights.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupMembers.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissionsCreate.tsx","webpack://telegram-t/./src/components/right/management/ManageInvites.tsx","webpack://telegram-t/./src/components/right/management/ManageInvite.tsx","webpack://telegram-t/./src/components/right/management/ManageReactions.tsx","webpack://telegram-t/./src/components/right/management/ManageInviteInfo.tsx","webpack://telegram-t/./src/components/right/management/JoinRequest.tsx","webpack://telegram-t/./src/components/right/management/ManageJoinRequests.tsx","webpack://telegram-t/./src/components/right/management/Management.tsx","webpack://telegram-t/./src/components/common/helpers/detectCardType.ts","webpack://telegram-t/./src/util/countries.ts","webpack://telegram-t/./src/hooks/reducers/usePaymentReducer.ts","webpack://telegram-t/./src/hooks/useFocusAfterAnimation.tsx","webpack://telegram-t/./src/components/ui/Select.tsx","webpack://telegram-t/./src/components/payment/ShippingInfo.tsx","webpack://telegram-t/./src/components/payment/Shipping.tsx","webpack://telegram-t/./src/components/payment/Checkout.tsx","webpack://telegram-t/./src/components/payment/ExpiryInput.tsx","webpack://telegram-t/./src/components/middle/helpers/inputFormatters.ts","webpack://telegram-t/./src/components/payment/CardInput.tsx","webpack://telegram-t/./src/components/payment/PaymentInfo.tsx","webpack://telegram-t/./src/components/payment/PaymentModal.tsx","webpack://telegram-t/./src/components/payment/ReceiptModal.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx"],"sourcesContent":["import { ApiMessage, ApiDimensions } from '../../../api/types';\n\nimport { MediaViewerOrigin } from '../../../types';\n\nimport { ANIMATION_END_DELAY } from '../../../config';\nimport {\n calculateDimensions,\n getMediaViewerAvailableDimensions,\n MEDIA_VIEWER_MEDIA_QUERY,\n REM,\n} from '../../common/helpers/mediaDimensions';\nimport windowSize from '../../../util/windowSize';\nimport stopEvent from '../../../util/stopEvent';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\n\nconst ANIMATION_DURATION = 200;\n\nexport function animateOpening(\n hasFooter: boolean,\n origin: MediaViewerOrigin,\n bestImageData: string,\n dimensions: ApiDimensions,\n isVideo: boolean,\n message?: ApiMessage,\n) {\n const { mediaEl: fromImage } = getNodes(origin, message);\n if (!fromImage) {\n return;\n }\n\n const { width: windowWidth } = windowSize.get();\n const {\n width: availableWidth, height: availableHeight,\n } = getMediaViewerAvailableDimensions(hasFooter, isVideo);\n const { width: toWidth, height: toHeight } = calculateDimensions(\n availableWidth, availableHeight, dimensions.width, dimensions.height,\n );\n const toLeft = (windowWidth - toWidth) / 2;\n const toTop = getTopOffset(hasFooter) + (availableHeight - toHeight) / 2;\n\n let {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n const uncovered = uncover(toWidth, toHeight, fromTop, fromLeft, fromWidth, fromHeight);\n fromTop = uncovered.top;\n fromLeft = uncovered.left;\n fromWidth = uncovered.width;\n fromHeight = uncovered.height;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n const fromScaleX = fromWidth / toWidth;\n const fromScaleY = fromHeight / toHeight;\n\n const ghost = createGhost(bestImageData || fromImage);\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n applyShape(ghost, origin);\n\n document.body.classList.add('ghost-animating');\n\n requestAnimationFrame(() => {\n document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n ghost.style.transform = '';\n clearShape(ghost);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nexport function animateClosing(origin: MediaViewerOrigin, bestImageData: string, message?: ApiMessage) {\n const { container, mediaEl: toImage } = getNodes(origin, message);\n if (!toImage) {\n return;\n }\n\n const fromImage = document.getElementById('MediaViewer')!.querySelector(\n '.MediaViewerSlide--active img, .MediaViewerSlide--active video',\n );\n if (!fromImage || !toImage) {\n return;\n }\n\n const {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n const {\n top: targetTop, left: toLeft, width: toWidth, height: toHeight,\n } = toImage.getBoundingClientRect();\n\n let toTop = targetTop;\n if (!isElementInViewport(container)) {\n const { height: windowHeight } = windowSize.get();\n toTop = targetTop < fromTop ? -toHeight : windowHeight;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n let fromScaleX = fromWidth / toWidth;\n let fromScaleY = fromHeight / toHeight;\n\n const shouldFadeOut = (\n [MediaViewerOrigin.Inline, MediaViewerOrigin.ScheduledInline].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n ) || (\n [MediaViewerOrigin.Album, MediaViewerOrigin.ScheduledAlbum].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n );\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n if (fromScaleX > fromScaleY) {\n fromScaleX = fromScaleY;\n } else if (fromScaleY > fromScaleX) {\n fromScaleY = fromScaleX;\n }\n }\n\n const existingGhost = document.getElementsByClassName('ghost')[0] as HTMLDivElement;\n\n const ghost = existingGhost || createGhost(bestImageData || toImage, origin);\n if (!existingGhost) {\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n }\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n const {\n top,\n left,\n width,\n height,\n } = existingGhost.getBoundingClientRect();\n const scaleX = width / toWidth;\n const scaleY = height / toHeight;\n\n applyStyles(ghost, {\n transition: 'none',\n top: `${toTop}px`,\n left: `${toLeft}px`,\n transformOrigin: 'top left',\n transform: `translate3d(${left - toLeft}px, ${top - toTop}px, 0) scale(${scaleX}, ${scaleY})`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n });\n }\n document.body.classList.add('ghost-animating');\n if (!existingGhost) document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n existingGhost.style.transition = '';\n }\n\n ghost.style.transform = '';\n\n if (shouldFadeOut) {\n ghost.style.opacity = '0';\n }\n\n applyShape(ghost, origin);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nfunction createGhost(source: string | HTMLImageElement | HTMLVideoElement, origin?: MediaViewerOrigin) {\n const ghost = document.createElement('div');\n ghost.classList.add('ghost');\n\n const img = new Image();\n img.draggable = false;\n img.oncontextmenu = stopEvent;\n\n if (typeof source === 'string') {\n img.src = source;\n } else if (source instanceof HTMLVideoElement) {\n img.src = source.poster;\n } else {\n img.src = source.src;\n }\n\n ghost.appendChild(img);\n\n if (origin === MediaViewerOrigin.ProfileAvatar || origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('ProfileInfo');\n if (origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('self');\n }\n const profileInfo = document.querySelector(\n origin === MediaViewerOrigin.ProfileAvatar\n ? '#RightColumn .ProfileInfo .info'\n : '#Settings .ProfileInfo .info',\n );\n if (profileInfo) {\n ghost.appendChild(profileInfo.cloneNode(true));\n }\n }\n\n return ghost;\n}\n\nfunction uncover(realWidth: number, realHeight: number, top: number, left: number, width: number, height: number) {\n if (realWidth === realHeight) {\n const size = Math.max(width, height) * (realWidth / realHeight);\n left -= (size - width) / 2;\n top -= (size - height) / 2;\n width = size;\n height = size;\n } else if (realWidth > realHeight) {\n const srcWidth = width;\n width = height * (realWidth / realHeight);\n left -= (width - srcWidth) / 2;\n } else if (realHeight > realWidth) {\n const srcHeight = height;\n height = width * (realHeight / realWidth);\n top -= (height - srcHeight) / 2;\n }\n\n return {\n top, left, width, height,\n };\n}\n\nfunction isElementInViewport(el: HTMLElement) {\n if (el.style.display === 'none') {\n return false;\n }\n\n const rect = el.getBoundingClientRect();\n const { height: windowHeight } = windowSize.get();\n\n return (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n}\n\nfunction isMessageImageFullyVisible(container: HTMLElement, imageEl: HTMLElement) {\n const messageListElement = document.querySelector('.Transition__slide--active > .MessageList')!;\n let imgOffsetTop = container.offsetTop + imageEl.closest('.content-inner, .WebPage')!.offsetTop;\n if (container.id.includes('album-media-')) {\n imgOffsetTop += container.parentElement!.offsetTop + container.closest('.Message')!.offsetTop;\n }\n\n return imgOffsetTop > messageListElement.scrollTop\n && imgOffsetTop + imageEl.offsetHeight < messageListElement.scrollTop + messageListElement.offsetHeight;\n}\n\nfunction getTopOffset(hasFooter: boolean) {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n let topOffsetRem = 4.125;\n if (hasFooter && !IS_TOUCH_ENV) {\n topOffsetRem += mql.matches ? 0.875 : 2.125;\n }\n\n return topOffsetRem * REM;\n}\n\nfunction applyStyles(element: HTMLElement, styles: Record) {\n Object.assign(element.style, styles);\n}\n\nfunction getNodes(origin: MediaViewerOrigin, message?: ApiMessage) {\n let containerSelector;\n let mediaSelector;\n\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n containerSelector = `.Transition__slide--active > .MessageList #album-media-${message!.id}`;\n mediaSelector = '.full-media';\n break;\n\n case MediaViewerOrigin.SharedMedia:\n containerSelector = `#shared-media${message!.id}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.SearchResult:\n containerSelector = `#search-media${message!.id}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n containerSelector = '.MiddleHeader .Transition__slide--active .ChatInfo .Avatar';\n mediaSelector = 'img.avatar-media';\n break;\n\n case MediaViewerOrigin.SettingsAvatar:\n containerSelector = '#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = 'img.avatar-media';\n break;\n\n case MediaViewerOrigin.ProfileAvatar:\n containerSelector = '#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = 'img.avatar-media';\n break;\n\n case MediaViewerOrigin.ScheduledInline:\n case MediaViewerOrigin.Inline:\n default:\n containerSelector = `.Transition__slide--active > .MessageList #message${message!.id}`;\n mediaSelector = '.message-content .full-media, .message-content .thumbnail';\n }\n\n const container = document.querySelector(containerSelector)!;\n const mediaEls = container && container.querySelectorAll(mediaSelector);\n\n return {\n container,\n mediaEl: mediaEls?.[mediaEls.length - 1],\n };\n}\n\nfunction applyShape(ghost: HTMLDivElement, origin: MediaViewerOrigin) {\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n case MediaViewerOrigin.Inline:\n case MediaViewerOrigin.ScheduledInline:\n ghost.classList.add('rounded-corners');\n break;\n\n case MediaViewerOrigin.SharedMedia:\n case MediaViewerOrigin.SettingsAvatar:\n case MediaViewerOrigin.ProfileAvatar:\n case MediaViewerOrigin.SearchResult:\n (ghost.firstChild as HTMLElement).style.objectFit = 'cover';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n ghost.classList.add('circle');\n break;\n }\n}\n\nfunction clearShape(ghost: HTMLDivElement) {\n (ghost.firstChild as HTMLElement).style.objectFit = 'default';\n ghost.classList.remove('rounded-corners', 'circle');\n}\n","import React, {\n FC,\n memo,\n useCallback,\n useMemo,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getMessageMediaHash } from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport { selectIsDownloading, selectIsMessageProtected } from '../../modules/selectors';\n\nimport Button from '../ui/Button';\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './MediaViewerActions.scss';\n\ntype StateProps = {\n isDownloading: boolean;\n isProtected?: boolean;\n};\n\ntype OwnProps = {\n mediaData?: string;\n isVideo: boolean;\n isZoomed: boolean;\n message?: ApiMessage;\n fileName?: string;\n isAvatar?: boolean;\n onCloseMediaViewer: NoneToVoidFunction;\n onForward: NoneToVoidFunction;\n onZoomToggle: NoneToVoidFunction;\n};\n\nconst MediaViewerActions: FC = ({\n mediaData,\n isVideo,\n isZoomed,\n message,\n fileName,\n isAvatar,\n isDownloading,\n isProtected,\n onCloseMediaViewer,\n onForward,\n onZoomToggle,\n}) => {\n const {\n downloadMessageMedia,\n cancelMessageMediaDownload,\n } = getDispatch();\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n message && getMessageMediaHash(message, 'download'),\n !isDownloading,\n );\n\n const handleDownloadClick = useCallback(() => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message });\n } else {\n downloadMessageMedia({ message });\n }\n }, [cancelMessageMediaDownload, downloadMessageMedia, isDownloading, message]);\n\n const lang = useLang();\n\n const MenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n function renderDownloadButton() {\n if (isProtected) {\n return undefined;\n }\n\n return isVideo ? (\n \n {isDownloading ? (\n \n ) : (\n \n )}\n \n ) : (\n \n \n \n );\n }\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (isProtected) {\n return undefined;\n }\n\n return (\n
\n \n {!isAvatar && (\n \n {lang('Forward')}\n \n )}\n {isVideo ? (\n \n {isDownloading ? `${Math.round(downloadProgress * 100)}% Downloading...` : 'Download'}\n \n ) : (\n \n {lang('AccActionDownload')}\n \n )}\n \n {isDownloading && }\n
\n );\n }\n\n return (\n
\n {!isAvatar && !isProtected && (\n <>\n \n \n \n \n )}\n {renderDownloadButton()}\n \n \n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message }): StateProps => {\n const isDownloading = message ? selectIsDownloading(global, message) : false;\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n isDownloading,\n isProtected,\n };\n },\n)(MediaViewerActions));\n","import React, { FC, useEffect, useState } from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { throttle } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport { REM } from '../common/helpers/mediaDimensions';\n\nimport './MediaViewerFooter.scss';\n\nconst RESIZE_THROTTLE_MS = 500;\n\ntype OwnProps = {\n text: TextPart | TextPart[];\n onClick: () => void;\n isHidden?: boolean;\n isForVideo: boolean;\n};\n\nconst MediaViewerFooter: FC = ({\n text = '', isHidden, isForVideo, onClick,\n}) => {\n const [isMultiline, setIsMultiline] = useState(false);\n useEffect(() => {\n const footerContent = document.querySelector('.MediaViewerFooter .media-text') as HTMLDivElement | null;\n\n const checkIsMultiline = () => {\n const height = footerContent ? footerContent.clientHeight : 0;\n\n setIsMultiline(height > REM * 2);\n };\n\n // First run for initial detection of multiline footer text\n checkIsMultiline();\n\n const handleResize = throttle(checkIsMultiline, RESIZE_THROTTLE_MS, true);\n\n window.addEventListener('resize', handleResize, false);\n\n return () => {\n window.removeEventListener('resize', handleResize, false);\n };\n }, []);\n\n function stopEvent(e: React.MouseEvent) {\n if (text) {\n e.stopPropagation();\n }\n }\n\n const classNames = buildClassName(\n 'MediaViewerFooter',\n isForVideo && 'is-for-video',\n isHidden && 'is-hidden',\n );\n\n return (\n
\n {text && (\n
\n

{text}

\n
\n )}\n
\n );\n};\n\nexport default MediaViewerFooter;\n","import { useLayoutEffect, useState } from '../lib/teact/teact';\nimport { PLATFORM_ENV } from '../util/environment';\n\ntype RefType = {\n current: HTMLElement | null;\n};\n\ntype ReturnType = [boolean, () => void, () => void] | [false];\ntype CallbackType = (isPlayed: boolean) => void;\n\nconst prop = getBrowserFullscreenElementProp();\n\nexport default function useFullscreenStatus(elRef: RefType, setIsPlayed: CallbackType): ReturnType {\n const [isFullscreen, setIsFullscreen] = useState(Boolean(prop && document[prop]));\n\n const setFullscreen = () => {\n if (!elRef.current || !(prop || PLATFORM_ENV === 'iOS')) {\n return;\n }\n\n if (elRef.current.requestFullscreen) {\n elRef.current.requestFullscreen();\n } else if (elRef.current.webkitRequestFullscreen) {\n elRef.current.webkitRequestFullscreen();\n } else if (elRef.current.webkitEnterFullscreen) {\n elRef.current.webkitEnterFullscreen();\n } else if (elRef.current.mozRequestFullScreen) {\n elRef.current.mozRequestFullScreen();\n }\n\n setIsFullscreen(true);\n };\n\n const exitFullscreen = () => {\n if (!elRef.current) {\n return;\n }\n\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n\n setIsFullscreen(false);\n };\n\n useLayoutEffect(() => {\n const listener = () => { setIsFullscreen(Boolean(prop && document[prop])); };\n const listenerEnter = () => { setIsFullscreen(true); };\n const listenerExit = () => {\n setIsFullscreen(false);\n setIsPlayed(false);\n };\n const video = elRef.current;\n\n document.addEventListener('fullscreenchange', listener, false);\n document.addEventListener('webkitfullscreenchange', listener, false);\n document.addEventListener('mozfullscreenchange', listener, false);\n\n if (video) {\n video.addEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.addEventListener('webkitendfullscreen', listenerExit, false);\n }\n\n return () => {\n document.removeEventListener('fullscreenchange', listener, false);\n document.removeEventListener('webkitfullscreenchange', listener, false);\n document.removeEventListener('mozfullscreenchange', listener, false);\n if (video) {\n video.removeEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.removeEventListener('webkitendfullscreen', listenerExit, false);\n }\n };\n // eslint-disable-next-line\n }, []);\n\n if (!prop && PLATFORM_ENV !== 'iOS') {\n return [false];\n }\n\n return [isFullscreen, setFullscreen, exitFullscreen];\n}\n\nfunction getBrowserFullscreenElementProp() {\n if (typeof document.fullscreenElement !== 'undefined') {\n return 'fullscreenElement';\n } else if (typeof document.mozFullScreenElement !== 'undefined') {\n return 'mozFullScreenElement';\n } else if (typeof document.webkitFullscreenElement !== 'undefined') {\n return 'webkitFullscreenElement';\n }\n\n return '';\n}\n","const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];\n\nconst formatFileSize = (bytes: number) => {\n const number = bytes === 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));\n\n return `${(bytes / 1024 ** Math.floor(number)).toFixed(1)} ${units[number]}`;\n};\n\nexport default formatFileSize;\n","import React, {\n FC, useState, useEffect, useRef, useCallback,\n} from '../../lib/teact/teact';\nimport buildClassName from '../../util/buildClassName';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { formatMediaDuration } from '../../util/dateFormat';\nimport formatFileSize from './helpers/formatFileSize';\nimport useLang from '../../hooks/useLang';\nimport { captureEvents } from '../../util/captureEvents';\n\nimport Button from '../ui/Button';\n\nimport './VideoPlayerControls.scss';\n\ntype IProps = {\n bufferedProgress: number;\n currentTime: number;\n duration: number;\n fileSize: number;\n isForceVisible: boolean;\n isForceMobileVersion?: boolean;\n isPlayed: boolean;\n isFullscreenSupported: boolean;\n isFullscreen: boolean;\n onChangeFullscreen: (e: React.MouseEvent) => void;\n onPlayPause: (e: React.MouseEvent) => void;\n onSeek: (position: number) => void;\n};\n\nconst stopEvent = (e: React.MouseEvent) => {\n e.stopPropagation();\n};\n\nconst HIDE_CONTROLS_TIMEOUT_MS = 800;\n\nconst VideoPlayerControls: FC = ({\n bufferedProgress,\n currentTime,\n duration,\n fileSize,\n isForceVisible,\n isForceMobileVersion,\n isPlayed,\n isFullscreenSupported,\n isFullscreen,\n onChangeFullscreen,\n onPlayPause,\n onSeek,\n}) => {\n const [isVisible, setVisibility] = useState(true);\n // eslint-disable-next-line no-null/no-null\n const seekerRef = useRef(null);\n const isSeeking = useRef(false);\n\n useEffect(() => {\n if (isForceVisible) {\n setVisibility(isForceVisible);\n }\n }, [isForceVisible]);\n\n useEffect(() => {\n let timeout: number | undefined;\n\n if (!isForceVisible) {\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setVisibility(false);\n } else {\n timeout = window.setTimeout(() => {\n setVisibility(false);\n }, HIDE_CONTROLS_TIMEOUT_MS);\n }\n }\n\n return () => {\n if (timeout) {\n window.clearTimeout(timeout);\n }\n };\n }, [isForceVisible]);\n\n useEffect(() => {\n if (isVisible || isForceVisible) {\n document.body.classList.add('video-controls-visible');\n }\n\n return () => {\n document.body.classList.remove('video-controls-visible');\n };\n }, [isForceVisible, isVisible]);\n\n const lang = useLang();\n\n const handleSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (isSeeking.current && seekerRef.current) {\n const { width, left } = seekerRef.current.getBoundingClientRect();\n const clientX = e instanceof MouseEvent ? e.clientX : e.targetTouches[0].clientX;\n onSeek(Math.max(Math.min(duration * ((clientX - left) / width), duration), 0));\n }\n }, [duration, onSeek]);\n\n const handleStartSeek = useCallback((e: MouseEvent | TouchEvent) => {\n isSeeking.current = true;\n handleSeek(e);\n }, [handleSeek]);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n }, []);\n\n useEffect(() => {\n if (!seekerRef.current || !isVisible) return undefined;\n return captureEvents(seekerRef.current, {\n onCapture: handleStartSeek,\n onRelease: handleStopSeek,\n onClick: handleStopSeek,\n onDrag: handleSeek,\n });\n }, [isVisible, handleStartSeek, handleSeek, handleStopSeek]);\n\n const isActive = isVisible || isForceVisible;\n\n return (\n \n {renderSeekLine(currentTime, duration, bufferedProgress, seekerRef)}\n \n \n \n {renderTime(currentTime, duration)}\n {bufferedProgress < 1 && renderFileSize(bufferedProgress, fileSize)}\n {isFullscreenSupported && (\n \n \n \n )}\n
\n );\n};\n\nfunction renderTime(currentTime: number, duration: number) {\n return (\n
\n {`${formatMediaDuration(currentTime)} / ${formatMediaDuration(duration)}`}\n
\n );\n}\n\nfunction renderFileSize(loadedPercent: number, totalSize: number) {\n return (\n
\n {`${formatFileSize(totalSize * loadedPercent)} / ${formatFileSize(totalSize)}`}\n
\n );\n}\n\nfunction renderSeekLine(\n currentTime: number, duration: number, bufferedProgress: number, seekerRef: React.RefObject,\n) {\n const percentagePlayed = (currentTime / duration) * 100;\n const percentageBuffered = bufferedProgress * 100;\n\n return (\n
\n
\n \n \n
\n
\n );\n}\n\nexport default VideoPlayerControls;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { ApiDimensions } from '../../api/types';\n\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useBuffering from '../../hooks/useBuffering';\nimport useFullscreenStatus from '../../hooks/useFullscreen';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport safePlay from '../../util/safePlay';\n\nimport VideoPlayerControls from './VideoPlayerControls';\nimport ProgressSpinner from '../ui/ProgressSpinner';\nimport Button from '../ui/Button';\n\nimport './VideoPlayer.scss';\n\ntype OwnProps = {\n url?: string;\n isGif?: boolean;\n posterData?: string;\n posterSize?: ApiDimensions;\n loadProgress?: number;\n fileSize: number;\n isMediaViewerOpen?: boolean;\n noPlay?: boolean;\n onClose: (e: React.MouseEvent) => void;\n};\n\nconst MOBILE_VERSION_CONTROL_WIDTH = 400;\n\nconst VideoPlayer: FC = ({\n url,\n isGif,\n posterData,\n posterSize,\n loadProgress,\n fileSize,\n isMediaViewerOpen,\n noPlay,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n const [isPlayed, setIsPlayed] = useState(!IS_TOUCH_ENV || !IS_IOS);\n const [currentTime, setCurrentTime] = useState(0);\n const [isControlsVisible, setIsControlsVisible] = useState(true);\n\n const [isFullscreen, setFullscreen, exitFullscreen] = useFullscreenStatus(videoRef, setIsPlayed);\n\n const { isBuffered, bufferedProgress, bufferingHandlers } = useBuffering();\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(!isBuffered, undefined, undefined, 'slow');\n const {\n shouldRender: shouldRenderPlayButton,\n transitionClassNames: playButtonClassNames,\n } = useShowTransition(IS_IOS && !isPlayed && !shouldRenderSpinner, undefined, undefined, 'slow');\n\n useEffect(() => {\n if (noPlay || !isMediaViewerOpen) {\n videoRef.current!.pause();\n } else if (url && !IS_TOUCH_ENV) {\n // Chrome does not automatically start playing when `url` becomes available (even with `autoPlay`),\n // so we force it here. Contrary, iOS does not allow to call `play` without mouse event,\n // so we need to use `autoPlay` instead to allow pre-buffering.\n safePlay(videoRef.current!);\n }\n }, [noPlay, isMediaViewerOpen, url]);\n\n useEffect(() => {\n if (videoRef.current!.currentTime === videoRef.current!.duration) {\n setCurrentTime(0);\n setIsPlayed(false);\n } else {\n setCurrentTime(videoRef.current!.currentTime);\n }\n }, [currentTime]);\n\n const togglePlayState = useCallback((e: React.MouseEvent | KeyboardEvent) => {\n e.stopPropagation();\n if (isPlayed) {\n videoRef.current!.pause();\n setIsPlayed(false);\n } else {\n safePlay(videoRef.current!);\n setIsPlayed(true);\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setIsControlsVisible(false);\n }\n }\n }, [isPlayed]);\n\n useVideoCleanup(videoRef, []);\n\n const handleMouseOver = useCallback(() => {\n setIsControlsVisible(true);\n }, []);\n\n const handleMouseOut = useCallback(() => {\n setIsControlsVisible(false);\n }, []);\n\n const handleTimeUpdate = useCallback((e: React.SyntheticEvent) => {\n setCurrentTime(e.currentTarget.currentTime);\n }, []);\n\n const handleEnded = useCallback(() => {\n setCurrentTime(0);\n setIsPlayed(false);\n setIsControlsVisible(true);\n }, []);\n\n const handleFullscreenChange = useCallback(() => {\n if (isFullscreen && exitFullscreen) {\n exitFullscreen();\n } else if (!isFullscreen && setFullscreen) {\n setFullscreen();\n }\n }, [exitFullscreen, isFullscreen, setFullscreen]);\n\n const handleSeek = useCallback((position: number) => {\n videoRef.current!.currentTime = position;\n }, []);\n\n const toggleControls = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n setIsControlsVisible(!isControlsVisible);\n }, [isControlsVisible]);\n\n useEffect(() => {\n const togglePayingStateBySpace = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n togglePlayState(e);\n }\n };\n\n document.addEventListener('keydown', togglePayingStateBySpace, false);\n\n return () => {\n document.removeEventListener('keydown', togglePayingStateBySpace, false);\n };\n }, [togglePlayState]);\n\n const wrapperStyle = posterSize && `width: ${posterSize.width}px; height: ${posterSize.height}px`;\n const videoStyle = `background-image: url(${posterData})`;\n\n return (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n setIsPlayed(true) : undefined}\n onEnded={handleEnded}\n onClick={!IS_SINGLE_COLUMN_LAYOUT ? togglePlayState : undefined}\n onDoubleClick={handleFullscreenChange}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...bufferingHandlers}\n onTimeUpdate={handleTimeUpdate}\n >\n {url && }\n \n
\n {shouldRenderPlayButton && (\n \n )}\n {shouldRenderSpinner && (\n
\n {!isBuffered &&
Buffering...
}\n \n
\n )}\n {!isGif && !shouldRenderSpinner && (\n \n )}\n \n );\n};\n\nexport default memo(VideoPlayer);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport {\n getChatAvatarHash,\n getMessageDocument,\n getMessageFileSize,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../modules/helpers';\nimport {\n selectChat, selectChatMessage, selectIsMessageProtected, selectScheduledMessage, selectUser,\n} from '../../modules/selectors';\nimport { AVATAR_FULL_DIMENSIONS, calculateMediaViewerDimensions } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport stopEvent from '../../util/stopEvent';\n\nimport Spinner from '../ui/Spinner';\nimport MediaViewerFooter from './MediaViewerFooter';\nimport VideoPlayer from './VideoPlayer';\n\nimport './MediaViewerContent.scss';\n\ntype OwnProps = {\n messageId?: number;\n chatId?: string;\n threadId?: number;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isActive?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n onFooterClick: () => void;\n isFooterHidden?: boolean;\n};\n\ntype StateProps = {\n chatId?: string;\n messageId?: number;\n senderId?: string;\n threadId?: number;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n origin?: MediaViewerOrigin;\n isProtected?: boolean;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewerContent: FC = (props) => {\n const {\n messageId,\n isActive,\n avatarOwner,\n chatId,\n message,\n profilePhotoIndex,\n origin,\n animationLevel,\n onClose,\n onFooterClick,\n isFooterHidden,\n isProtected,\n } = props;\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const { isGif } = video || webPageVideo || {};\n\n const isOpen = Boolean(avatarOwner || messageId);\n const isAvatar = Boolean(avatarOwner);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n const isGhostAnimation = animationLevel === 2;\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const {\n mediaData: fullMediaBlobUrl,\n loadProgress,\n } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const videoSize = message ? getMessageFileSize(message) : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n if (isAvatar) {\n return (\n
\n {renderPhoto(\n fullMediaBlobUrl || previewBlobUrl,\n calculateMediaViewerDimensions(AVATAR_FULL_DIMENSIONS, false),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n
\n );\n }\n\n if (!message) return undefined;\n const textParts = renderMessageText(message);\n const hasFooter = Boolean(textParts);\n\n return (\n \n {isProtected &&
}\n {isPhoto && renderPhoto(\n localBlobUrl || fullMediaBlobUrl || previewBlobUrl || pictogramBlobUrl,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n {isVideo && ((!isActive && IS_TOUCH_ENV) ? renderVideoPreview(\n bestImageData,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter, false),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n ) : (\n \n ))}\n {textParts && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, ownProps): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = ownProps;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return {};\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return {};\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n origin,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return {};\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return {};\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n };\n },\n)(MediaViewerContent));\n\nfunction renderPhoto(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n return blobUrl\n ? (\n \n )\n : (\n \n \n \n );\n}\n\nfunction renderVideoPreview(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n const wrapperStyle = imageSize && `width: ${imageSize.width}px; height: ${imageSize.height}px`;\n const videoStyle = `background-image: url(${blobUrl})`;\n return blobUrl\n ? (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n )\n : (\n \n \n \n );\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MediaViewerOrigin } from '../../types';\n\nimport useDebounce from '../../hooks/useDebounce';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { animateNumber, timingFunctions } from '../../util/animation';\nimport arePropsShallowEqual from '../../util/arePropsShallowEqual';\nimport { captureEvents, IOS_SCREEN_EDGE_THRESHOLD, RealTouchEvent } from '../../util/captureEvents';\nimport { IS_IOS, IS_TOUCH_ENV } from '../../util/environment';\nimport { debounce } from '../../util/schedulers';\n\nimport MediaViewerContent from './MediaViewerContent';\n\nimport './MediaViewerSlides.scss';\nimport useTimeout from '../../hooks/useTimeout';\n\ntype OwnProps = {\n messageId?: number;\n getMessageId: (fromId?: number, direction?: number) => number | undefined;\n isVideo?: boolean;\n isGif?: boolean;\n isPhoto?: boolean;\n isOpen?: boolean;\n selectMessage: (id?: number) => void;\n chatId?: string;\n threadId?: number;\n isActive?: boolean;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isZoomed?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n hasFooter?: boolean;\n onFooterClick: () => void;\n};\n\nconst SWIPE_X_THRESHOLD = 50;\nconst SWIPE_Y_THRESHOLD = 50;\nconst SLIDES_GAP = 40;\nconst ANIMATION_DURATION = 350;\nconst DEBOUNCE_MESSAGE = 350;\nconst DEBOUNCE_SWIPE = 500;\nconst DEBOUNCE_ACTIVE = 800;\nconst MAX_ZOOM = 4;\nconst MIN_ZOOM = 0.6;\nconst DOUBLE_TAP_ZOOM = 3;\nconst CLICK_X_THRESHOLD = 40;\nlet cancelAnimation: Function | undefined;\n\ntype Transform = {\n x: number;\n y: number;\n scale: number;\n};\n\nenum SwipeDirection {\n Horizontal,\n Vertical,\n}\n\nconst MediaViewerSlides: FC = ({\n messageId,\n getMessageId,\n selectMessage,\n isVideo,\n isGif,\n isPhoto,\n isOpen,\n isActive,\n hasFooter,\n ...rest\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const activeSlideRef = useRef(null);\n const transformRef = useRef({ x: 0, y: 0, scale: 1 });\n const swipeDirectionRef = useRef(undefined);\n const isActiveRef = useRef(true);\n const [activeMessageId, setActiveMessageId] = useState(messageId);\n const forceUpdate = useForceUpdate();\n const [isFooterHidden, setIsFooterHidden] = useState(true);\n\n const {\n isZoomed,\n onClose,\n } = rest;\n\n const setTransform = useCallback((value: Transform) => {\n transformRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const setIsActive = useCallback((value: boolean) => {\n isActiveRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const debounceSetMessage = useDebounce(DEBOUNCE_MESSAGE, true);\n const debounceSwipeDirection = useDebounce(DEBOUNCE_SWIPE, true);\n const debounceActive = useDebounce(DEBOUNCE_ACTIVE, true);\n\n const handleToggleFooterVisibility = useCallback((e: React.MouseEvent) => {\n if (!IS_TOUCH_ENV || !hasFooter || (!isPhoto && !isGif)) return;\n if (e.pageX < CLICK_X_THRESHOLD) return;\n if (e.pageX > window.innerWidth - CLICK_X_THRESHOLD) return;\n setIsFooterHidden(!isFooterHidden);\n }, [hasFooter, isFooterHidden, isGif, isPhoto]);\n\n useTimeout(() => setIsFooterHidden(false), ANIMATION_DURATION - 150);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV || !containerRef.current || isZoomed || !activeMessageId) {\n return undefined;\n }\n let lastTransform = { x: 0, y: 0, scale: 1 };\n const lastDragOffset = {\n x: 0,\n y: 0,\n };\n const lastZoomCenter = {\n x: 0,\n y: 0,\n };\n const panDelta = {\n x: 0,\n y: 0,\n };\n let lastGestureTime = Date.now();\n let initialContentRect: DOMRect;\n let content: HTMLElement | null;\n const setLastGestureTime = debounce(() => {\n lastGestureTime = Date.now();\n }, 500, false, true);\n\n const changeSlide = (e: MouseEvent) => {\n if (transformRef.current.scale !== 1) return false;\n let direction = 0;\n if (e.pageX < CLICK_X_THRESHOLD) {\n direction = -1;\n } else if (e.pageX > window.innerWidth - CLICK_X_THRESHOLD) {\n direction = 1;\n }\n const mId = getMessageId(activeMessageId, direction);\n if (mId) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n transformRef.current.x += offset;\n isActiveRef.current = false;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n debounceActive(() => {\n setIsActive(true);\n });\n lastTransform = { x: 0, y: 0, scale: 1 };\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: 1,\n }),\n });\n }\n return direction !== 0;\n };\n\n return captureEvents(containerRef.current, {\n isNotPassive: true,\n excludedClosestSelector: '.VideoPlayerControls, .MediaViewerFooter',\n onCapture: () => {\n lastGestureTime = Date.now();\n if (arePropsShallowEqual(transformRef.current, { x: 0, y: 0, scale: 1 })) {\n if (!activeSlideRef.current) return;\n content = activeSlideRef.current.querySelector('img, video');\n if (!content) return;\n // Store initial content rect, without transformations\n initialContentRect = content.getBoundingClientRect();\n }\n },\n onDrag: (event, captureEvent, {\n dragOffsetX,\n dragOffsetY,\n }) => {\n // Avoid conflicts with swipe-to-back gestures\n if (IS_IOS) {\n const { pageX } = (captureEvent as RealTouchEvent).touches[0];\n if (pageX <= IOS_SCREEN_EDGE_THRESHOLD || pageX >= window.innerWidth - IOS_SCREEN_EDGE_THRESHOLD) {\n return;\n }\n }\n if (cancelAnimation) {\n cancelAnimation();\n cancelAnimation = undefined;\n }\n panDelta.x = lastDragOffset.x - dragOffsetX;\n panDelta.y = lastDragOffset.y - dragOffsetY;\n lastDragOffset.x = dragOffsetX;\n lastDragOffset.y = dragOffsetY;\n const absOffsetX = Math.abs(dragOffsetX);\n const absOffsetY = Math.abs(dragOffsetY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n const h = 10;\n\n // If user is inactive but is still touching the screen\n // we reset last gesture time\n setLastGestureTime();\n\n // If image is scaled we just need to pan it\n if (scale !== 1) {\n if ('touches' in event && event.touches.length === 1) {\n setTransform({\n x: lastTransform.x + dragOffsetX,\n y: lastTransform.y + dragOffsetY,\n scale,\n });\n }\n return;\n }\n if (swipeDirectionRef.current !== SwipeDirection.Vertical) {\n // If user is swiping horizontally or horizontal shift is dominant\n // we change only horizontal position\n if (swipeDirectionRef.current === SwipeDirection.Horizontal\n || Math.abs(x) > h || (absOffsetX > h && absOffsetY < h)) {\n swipeDirectionRef.current = SwipeDirection.Horizontal;\n isActiveRef.current = false;\n setTransform({\n x: dragOffsetX,\n y: 0,\n scale,\n });\n return;\n }\n }\n // If vertical shift is dominant we change only vertical position\n if (swipeDirectionRef.current === SwipeDirection.Vertical\n || Math.abs(y) > h || (absOffsetY > h && absOffsetX < h)) {\n swipeDirectionRef.current = SwipeDirection.Vertical;\n setTransform({\n x: 0,\n y: dragOffsetY,\n scale,\n });\n }\n },\n onZoom: (e, {\n zoomFactor,\n initialCenterX,\n initialCenterY,\n dragOffsetX,\n dragOffsetY,\n currentCenterX,\n currentCenterY,\n }) => {\n // Calculate current scale based on zoom factor and limits, add max zoom margin for bounce back effect\n const scale = Math.min(MAX_ZOOM * 3, Math.max(lastTransform.scale * zoomFactor, MIN_ZOOM));\n const scaleFactor = scale / lastTransform.scale;\n const offsetX = Math.abs(Math.min(lastTransform.x, 0));\n const offsetY = Math.abs(Math.min(lastTransform.y, 0));\n\n // Calculate new center relative to the shifted image\n const scaledCenterX = offsetX + initialCenterX;\n const scaledCenterY = offsetY + initialCenterY;\n\n // Save last zoom center for bounce back effect\n lastZoomCenter.x = currentCenterX;\n lastZoomCenter.y = currentCenterY;\n\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (scaledCenterX - scaleFactor * scaledCenterX);\n const scaleOffsetY = (scaledCenterY - scaleFactor * scaledCenterY);\n\n setTransform({\n x: lastTransform.x + scaleOffsetX + dragOffsetX,\n y: lastTransform.y + scaleOffsetY + dragOffsetY,\n scale,\n });\n },\n onClick(e) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n onDoubleClick(e, {\n centerX,\n centerY,\n }) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n return undefined;\n }\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (centerX - DOUBLE_TAP_ZOOM * centerX);\n const scaleOffsetY = (centerY - DOUBLE_TAP_ZOOM * centerY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n if (scale === 1) {\n if (x !== 0 || y !== 0) return undefined;\n lastTransform = {\n x: scaleOffsetX,\n y: scaleOffsetY,\n scale: DOUBLE_TAP_ZOOM,\n };\n } else {\n lastTransform = {\n x: 0,\n y: 0,\n scale: 1,\n };\n }\n return animateNumber({\n from: [x, y, scale],\n to: [lastTransform.x, lastTransform.y, lastTransform.scale],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n },\n onRelease: () => {\n const absX = Math.abs(transformRef.current.x);\n const absY = Math.abs(transformRef.current.y);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n\n debounceSwipeDirection(() => {\n swipeDirectionRef.current = undefined;\n });\n debounceActive(() => {\n setIsActive(true);\n });\n\n // If scale is less than 1 we need to bounce back\n if (scale < 1) {\n lastTransform = { x: 0, y: 0, scale: 1 };\n return animateNumber({\n from: [x, y, scale],\n to: [0, 0, 1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n }\n if (scale > 1) {\n if (!content || !initialContentRect) {\n lastTransform = {\n x,\n y,\n scale,\n };\n return undefined;\n }\n // Get current content boundaries\n const boundaries = content.getBoundingClientRect();\n const s1 = Math.min(scale, MAX_ZOOM);\n const scaleFactor = s1 / scale;\n\n // Calculate new position based on the last zoom center to keep the zoom center\n // at the same position when bouncing back from max zoom\n let x1 = x * scaleFactor + (lastZoomCenter.x - scaleFactor * lastZoomCenter.x);\n let y1 = y * scaleFactor + (lastZoomCenter.y - scaleFactor * lastZoomCenter.y);\n\n // Arbitrary pan velocity coefficient\n const k = 0.15;\n\n // If scale didn't change, we need to add inertia to pan gesture\n if (lastTransform.scale === scale) {\n // Calculate user gesture velocity\n const Vx = Math.abs(lastDragOffset.x) / (Date.now() - lastGestureTime);\n const Vy = Math.abs(lastDragOffset.y) / (Date.now() - lastGestureTime);\n\n // Add extra distance based on gesture velocity and last pan delta\n x1 -= Math.abs(lastDragOffset.x) * Vx * k * panDelta.x;\n y1 -= Math.abs(lastDragOffset.y) * Vy * k * panDelta.y;\n }\n\n // If content is outside window we calculate offset boundaries\n // based on initial content rect and current scale\n if (boundaries.width > window.innerWidth) {\n const minOffsetX = -initialContentRect.left * s1;\n const maxOffsetX = window.innerWidth - initialContentRect.right * s1;\n x1 = Math.min(minOffsetX, Math.max(maxOffsetX, x1));\n } else {\n // Else we center the content on the screen\n x1 = (window.innerWidth - window.innerWidth * s1) / 2;\n }\n\n if (boundaries.height > window.innerHeight) {\n const minOffsetY = -initialContentRect.top * s1;\n const maxOffsetY = window.innerHeight - initialContentRect.bottom * s1;\n y1 = Math.min(minOffsetY, Math.max(maxOffsetY, y1));\n } else {\n y1 = (window.innerHeight - window.innerHeight * s1) / 2;\n }\n lastTransform = {\n x: x1,\n y: y1,\n scale: s1,\n };\n cancelAnimation = animateNumber({\n from: [x, y, scale],\n to: [x1, y1, s1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n return undefined;\n }\n lastTransform = {\n x,\n y,\n scale,\n };\n if (absY >= SWIPE_Y_THRESHOLD) return onClose();\n // Bounce back if vertical swipe is below threshold\n if (absY > 0) {\n return animateNumber({\n from: y,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: 0,\n y: value,\n scale,\n }),\n });\n }\n // Get horizontal swipe direction\n const direction = x < 0 ? 1 : -1;\n const mId = getMessageId(activeMessageId, x < 0 ? 1 : -1);\n // Get the direction of the last pan gesture.\n // Could be different from the total horizontal swipe direction\n // if user starts a swipe in one direction and then changes the direction\n // we need to cancel slide transition\n const dirX = panDelta.x < 0 ? -1 : 1;\n if (mId && absX >= SWIPE_X_THRESHOLD && direction === dirX) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n // If image is shifted by more than SWIPE_X_THRESHOLD,\n // We shift everything by one screen width and then set new active message id\n transformRef.current.x += offset;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n }\n // Then we always return to the original position\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: transformRef.current.scale,\n }),\n });\n return undefined;\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isZoomed,\n onClose,\n setTransform,\n getMessageId,\n activeMessageId,\n setIsActive,\n ]);\n\n if (!activeMessageId) return undefined;\n\n const nextMessageId = getMessageId(activeMessageId, 1);\n const previousMessageId = getMessageId(activeMessageId, -1);\n const offsetX = transformRef.current.x;\n const offsetY = transformRef.current.y;\n const { scale } = transformRef.current;\n\n return (\n
\n {previousMessageId && scale === 1 && (\n
\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n
\n )}\n {activeMessageId && (\n \n \n
\n )}\n {nextMessageId && scale === 1 && (\n
\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n
\n )}\n \n );\n};\n\nexport default memo(MediaViewerSlides);\n\nfunction getAnimationStyle(x = 0, y = 0, scale = 1) {\n return `transform: translate3d(${x.toFixed(3)}px, ${y.toFixed(3)}px, 0px) scale(${scale.toFixed(3)});`;\n}\n","import { useEffect, useLayoutEffect, useRef } from '../lib/teact/teact';\n\nfunction useTimeout(callback: () => void, delay: number | null) {\n const savedCallback = useRef(callback);\n\n useLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (typeof delay !== 'number') {\n return undefined;\n }\n const id = setTimeout(() => savedCallback.current(), delay);\n return () => clearTimeout(id);\n }, [delay]);\n}\n\nexport default useTimeout;\n","/*\n @source https://github.com/ajainarayanan/react-pan-zoom\n\n Heavily inspired/lifted from this idea: https://stackoverflow.com/a/39311435/661768\n without jqueryUI or jquery dependency.\n*/\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nimport './PanZoom.scss';\n\nexport interface IDragData {\n x: number;\n y: number;\n dx: number;\n dy: number;\n}\n\nexport interface OwnProps {\n children: any;\n className?: string;\n noWrap: boolean;\n canPan: boolean;\n zoomLevel: number;\n panDeltaX: number;\n panDeltaY: number;\n onPan?: (x: number, y: number) => void;\n}\n\nconst INITIAL_MATRIX = [\n 1, 0, 0, 1, 0, 0,\n];\n\nconst SCALE_VALUES = {\n 1: 1,\n 1.5: 1.5,\n 2: 2.2,\n 2.5: 3.3,\n 3: 5.5,\n};\n\nconst ZOOM_SAFE_AREA = 150;\n\nfunction calculateSafeZoneOnZoom(oldScale: number, matrixData: number[], wrapper: HTMLDivElement | null) {\n const image = wrapper && wrapper.querySelector('.Transition__slide--active img');\n if (!wrapper || !image) {\n return matrixData;\n }\n const wrapperRect = wrapper.getBoundingClientRect();\n const imageRect = image.getBoundingClientRect();\n\n const newImgWidth = (imageRect.width / oldScale) * matrixData[0];\n const newImgHeight = (imageRect.height / oldScale) * matrixData[3];\n const newImgX = (wrapperRect.width - newImgWidth) / 2 + matrixData[4];\n const newImgY = (wrapperRect.height - newImgHeight) / 2 + matrixData[5];\n if (wrapperRect.width && wrapperRect.width - ZOOM_SAFE_AREA < newImgX) {\n matrixData[4] -= newImgX + wrapperRect.width - ZOOM_SAFE_AREA;\n } else if (newImgWidth && newImgWidth + newImgX < ZOOM_SAFE_AREA) {\n matrixData[4] -= newImgWidth + newImgX - ZOOM_SAFE_AREA;\n }\n if (wrapperRect.height && wrapperRect.height - ZOOM_SAFE_AREA < newImgY) {\n matrixData[5] -= newImgY + wrapperRect.height - ZOOM_SAFE_AREA;\n } else if (newImgHeight && newImgHeight + newImgY < ZOOM_SAFE_AREA) {\n matrixData[5] -= newImgHeight + newImgY - ZOOM_SAFE_AREA;\n }\n\n return matrixData;\n}\n\nconst PanZoom: FC = ({\n children,\n className,\n noWrap,\n canPan,\n zoomLevel,\n panDeltaX,\n panDeltaY,\n onPan,\n}) => {\n const tunedZoomLevel = SCALE_VALUES[zoomLevel as keyof typeof SCALE_VALUES] || zoomLevel;\n const [isDragging, setIsDragging] = useState(false);\n const [dragData, setDragData] = useState({\n dx: panDeltaX, dy: panDeltaY, x: 0, y: 0,\n });\n // [zoom, skew, skew, zoom, dx, dy] - see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix()\n const [matrixData, setMatrixData] = useState(INITIAL_MATRIX);\n // Used to set cursor while moving.\n // eslint-disable-next-line no-null/no-null\n const panWrapperRef = useRef(null);\n // Used to set transform for pan.\n // eslint-disable-next-line no-null/no-null\n const panContainerRef = useRef(null);\n\n useEffect(() => {\n const newZoomLevel = tunedZoomLevel || matrixData[0];\n const newPandx = panDeltaX || matrixData[4];\n const newPandy = panDeltaY || matrixData[5];\n\n const newMatrixData = [...matrixData];\n if (matrixData[0] !== newZoomLevel) {\n newMatrixData[0] = newZoomLevel || newMatrixData[0];\n newMatrixData[3] = newZoomLevel || newMatrixData[3];\n }\n if (matrixData[4] !== newPandx) {\n newMatrixData[4] = newPandx;\n }\n if (matrixData[5] !== newPandy) {\n newMatrixData[5] = newPandy;\n }\n\n if (!areSortedArraysEqual(matrixData, newMatrixData)) {\n setMatrixData(calculateSafeZoneOnZoom(matrixData[0], newMatrixData, panWrapperRef.current));\n }\n // eslint-disable-next-line\n }, [panDeltaX, panDeltaY, tunedZoomLevel]);\n\n useEffect(() => {\n if (!canPan) {\n setMatrixData(INITIAL_MATRIX);\n }\n }, [canPan]);\n\n useEffect(() => {\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }, [noWrap, matrixData]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!canPan) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n const offsetX = matrixData[4];\n const offsetY = matrixData[5];\n const newDragData: IDragData = {\n dx: offsetX,\n dy: offsetY,\n x: e.pageX,\n y: e.pageY,\n };\n setDragData(newDragData);\n setIsDragging(true);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.add('move');\n }\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.remove('move');\n }\n\n if (onPan) {\n onPan(matrixData[4], matrixData[5]);\n }\n };\n\n function getNewMatrixData(x: number, y: number): number[] {\n const newMatrixData = [...matrixData];\n const deltaX = dragData.x - x;\n const deltaY = dragData.y - y;\n newMatrixData[4] = dragData.dx - deltaX;\n newMatrixData[5] = dragData.dy - deltaY;\n\n return newMatrixData;\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (isDragging) {\n const newMatrixData = getNewMatrixData(e.pageX, e.pageY);\n setMatrixData(newMatrixData);\n\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }\n };\n\n if (noWrap) {\n return children;\n }\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(PanZoom);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getSenderTitle, isUserId } from '../../modules/helpers';\nimport { formatMediaDateTime } from '../../util/dateFormat';\nimport renderText from '../common/helpers/renderText';\nimport {\n selectChat,\n selectChatMessage,\n selectSender,\n selectUser,\n} from '../../modules/selectors';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from '../common/Avatar';\n\nimport './SenderInfo.scss';\n\ntype OwnProps = {\n chatId?: string;\n messageId?: number;\n isAvatar?: boolean;\n};\n\ntype StateProps = {\n sender?: ApiUser | ApiChat;\n message?: ApiMessage;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst SenderInfo: FC = ({\n chatId,\n messageId,\n sender,\n isAvatar,\n message,\n}) => {\n const {\n closeMediaViewer,\n focusMessage,\n toggleChatInfo,\n } = getDispatch();\n\n const handleFocusMessage = useCallback(() => {\n closeMediaViewer();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, messageId });\n }\n }, [chatId, focusMessage, toggleChatInfo, messageId, closeMediaViewer]);\n\n const lang = useLang();\n\n if (!sender || (!message && !isAvatar)) {\n return undefined;\n }\n\n const senderTitle = getSenderTitle(lang, sender);\n\n return (\n
\n {isUserId(sender.id) ? (\n \n ) : (\n \n )}\n
\n
\n {senderTitle && renderText(senderTitle)}\n
\n
\n {isAvatar\n ? lang('lng_mediaview_profile_photo')\n : formatMediaDateTime(lang, message!.date * 1000, true)}\n
\n
\n
\n );\n};\n\nexport default withGlobal(\n (global, { chatId, messageId, isAvatar }): StateProps => {\n if (isAvatar && chatId) {\n return {\n sender: isUserId(chatId) ? selectUser(global, chatId) : selectChat(global, chatId),\n };\n }\n\n if (!messageId || !chatId) {\n return {};\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n message,\n sender: message && selectSender(global, message),\n };\n },\n)(SenderInfo);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\n\nimport Transition, { TransitionProps } from '../ui/Transition';\n\nconst SlideTransition: FC = ({ children, ...props }) => {\n if (IS_TOUCH_ENV) return children(true, true, 1);\n // eslint-disable-next-line react/jsx-props-no-spreading\n return {children};\n};\n\nexport default SlideTransition;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport './ZoomControls.scss';\n\ntype OwnProps = {\n isShown: boolean;\n onChangeZoom: (level: number, canCloseZoom?: boolean) => void;\n};\n\nexport const MAX_ZOOM_LEVEL = 3;\nexport const MIN_ZOOM_LEVEL = 1;\nconst ONE_STEP_PERCENT = 100 / (MAX_ZOOM_LEVEL - MIN_ZOOM_LEVEL);\nconst RESET_ZOOM_LEVEL = 1.5;\n\nconst ZoomControls: FC = ({ isShown, onChangeZoom }) => {\n const { transitionClassNames } = useShowTransition(isShown);\n const prevIsShown = usePrevious(isShown);\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [zoomLevel, setZoomLevel] = useState(1);\n const isSeeking = useRef(false);\n\n useEffect(() => {\n if (isShown && !prevIsShown) {\n setZoomLevel(RESET_ZOOM_LEVEL);\n }\n }, [isShown, prevIsShown]);\n\n const handleZoomOut = () => {\n if (inputRef.current) {\n setZoomLevel(Math.max(MIN_ZOOM_LEVEL, zoomLevel - 0.5));\n }\n };\n\n const handleZoomIn = () => {\n if (inputRef.current) {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, zoomLevel + 0.5));\n }\n };\n\n const handleStartSeek = useCallback(() => {\n isSeeking.current = true;\n }, []);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n if (zoomLevel === 1) {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }\n }, [onChangeZoom, zoomLevel]);\n\n const handleSeeklineChange = (e:React.ChangeEvent) => {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, Math.max(Number(e.target.value), MIN_ZOOM_LEVEL)));\n };\n\n useEffect(() => {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }, [zoomLevel, onChangeZoom]);\n\n const lang = useLang();\n\n const className = buildClassName(\n 'ZoomControls',\n transitionClassNames,\n );\n\n return (\n
\n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n );\n};\n\nexport default memo(ZoomControls);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport usePrevious from '../../hooks/usePrevious';\nimport {\n getChatAvatarHash,\n getChatMediaMessageIds,\n getMessageDocument,\n getMessageFileName,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../modules/helpers';\nimport {\n selectChat,\n selectChatMessage,\n selectChatMessages,\n selectCurrentMediaSearch,\n selectListedIds,\n selectOutlyingIds,\n selectScheduledMessage,\n selectScheduledMessages,\n selectUser,\n} from '../../modules/selectors';\nimport { stopCurrentAudio } from '../../util/audioPlayer';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport { captureEvents } from '../../util/captureEvents';\nimport windowSize from '../../util/windowSize';\nimport { AVATAR_FULL_DIMENSIONS, MEDIA_VIEWER_MEDIA_QUERY } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport { animateClosing, animateOpening } from './helpers/ghostAnimation';\n\nimport Button from '../ui/Button';\nimport ShowTransition from '../ui/ShowTransition';\nimport Transition from '../ui/Transition';\nimport MediaViewerActions from './MediaViewerActions';\nimport MediaViewerSlides from './MediaViewerSlides';\nimport PanZoom from './PanZoom';\nimport SenderInfo from './SenderInfo';\nimport SlideTransition from './SlideTransition';\nimport ZoomControls from './ZoomControls';\n\nimport './MediaViewer.scss';\n\ntype StateProps = {\n chatId?: string;\n threadId?: number;\n messageId?: number;\n senderId?: string;\n origin?: MediaViewerOrigin;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n chatMessages?: Record;\n collectionIds?: number[];\n animationLevel: 0 | 1 | 2;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewer: FC = ({\n chatId,\n threadId,\n messageId,\n senderId,\n origin,\n avatarOwner,\n profilePhotoIndex,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n}) => {\n const {\n openMediaViewer,\n closeMediaViewer,\n openForwardMenu,\n focusMessage,\n toggleChatInfo,\n } = getDispatch();\n\n const isOpen = Boolean(avatarOwner || messageId);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const { isGif } = video || webPageVideo || {};\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const isAvatar = Boolean(avatarOwner);\n\n /* Navigation */\n const singleMessageId = webPagePhoto || webPageVideo ? messageId : undefined;\n\n const messageIds = useMemo(() => {\n return singleMessageId\n ? [singleMessageId]\n : getChatMediaMessageIds(chatMessages || {}, collectionIds || [], isFromSharedMedia);\n }, [singleMessageId, chatMessages, collectionIds, isFromSharedMedia]);\n\n const selectedMediaMessageIndex = messageId ? messageIds.indexOf(messageId) : -1;\n const isFirst = selectedMediaMessageIndex === 0 || selectedMediaMessageIndex === -1;\n const isLast = selectedMediaMessageIndex === messageIds.length - 1 || selectedMediaMessageIndex === -1;\n\n /* Animation */\n const animationKey = useRef();\n const prevSenderId = usePrevious(senderId);\n if (isOpen && (!prevSenderId || prevSenderId !== senderId || !animationKey.current)) {\n animationKey.current = selectedMediaMessageIndex;\n }\n const slideAnimation = animationLevel >= 1 && !IS_TOUCH_ENV ? 'mv-slide' : 'none';\n const headerAnimation = animationLevel === 2 ? 'slide-fade' : 'none';\n const isGhostAnimation = animationLevel === 2;\n\n /* Controls */\n const [canPanZoomWrap, setCanPanZoomWrap] = useState(false);\n const [isZoomed, setIsZoomed] = useState(false);\n const [zoomLevel, setZoomLevel] = useState(1);\n const [panDelta, setPanDelta] = useState({\n x: 0,\n y: 0,\n });\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const { mediaData: fullMediaBlobUrl } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const fileName = message\n ? getMessageFileName(message)\n : isAvatar\n ? `avatar${avatarOwner!.id}-${profilePhotoIndex}.jpg`\n : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n useEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return;\n }\n\n document.body.classList.toggle('is-media-viewer-open', isOpen);\n }, [isOpen]);\n\n const forceUpdate = useForceUpdate();\n useEffect(() => {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', forceUpdate);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(forceUpdate);\n }\n\n return () => {\n if (typeof mql.removeEventListener === 'function') {\n mql.removeEventListener('change', forceUpdate);\n } else if (typeof mql.removeListener === 'function') {\n mql.removeListener(forceUpdate);\n }\n };\n }, [forceUpdate]);\n\n const prevMessage = usePrevious(message);\n const prevOrigin = usePrevious(origin);\n const prevAvatarOwner = usePrevious(avatarOwner);\n const prevBestImageData = usePrevious(bestImageData);\n const textParts = message ? renderMessageText(message) : undefined;\n const hasFooter = Boolean(textParts);\n\n useEffect(() => {\n if (isGhostAnimation && isOpen && !prevMessage && !prevAvatarOwner) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateOpening(hasFooter, origin!, bestImageData!, dimensions, isVideo, message);\n }\n\n if (isGhostAnimation && !isOpen && (prevMessage || prevAvatarOwner)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateClosing(prevOrigin!, prevBestImageData!, prevMessage || undefined);\n }\n }, [\n isGhostAnimation, isOpen, origin, prevOrigin, message, prevMessage, prevAvatarOwner,\n bestImageData, prevBestImageData, dimensions, isVideo, hasFooter,\n ]);\n\n useEffect(() => {\n let timer: number | undefined;\n\n if (isZoomed) {\n setCanPanZoomWrap(true);\n } else {\n timer = window.setTimeout(() => {\n setCanPanZoomWrap(false);\n }, ANIMATION_DURATION);\n }\n\n return () => {\n if (timer) {\n window.clearTimeout(timer);\n }\n };\n }, [isZoomed]);\n\n const closeZoom = () => {\n setIsZoomed(false);\n setZoomLevel(1);\n setPanDelta({\n x: 0,\n y: 0,\n });\n };\n\n const handleZoomToggle = useCallback(() => {\n setIsZoomed(!isZoomed);\n setZoomLevel(!isZoomed ? 1.5 : 1);\n if (isZoomed) {\n setPanDelta({\n x: 0,\n y: 0,\n });\n }\n }, [isZoomed]);\n\n const handleZoomValue = useCallback((level: number, canCloseZoom = false) => {\n setZoomLevel(level);\n if (level === 1 && canCloseZoom) {\n closeZoom();\n }\n }, []);\n\n const close = useCallback(() => {\n closeMediaViewer();\n closeZoom();\n }, [closeMediaViewer]);\n\n const handleFooterClick = useCallback(() => {\n close();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, threadId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, threadId, messageId });\n }\n }, [close, chatId, threadId, focusMessage, toggleChatInfo, messageId]);\n\n const handleForward = useCallback(() => {\n openForwardMenu({\n fromChatId: chatId,\n messageIds: [messageId],\n });\n closeZoom();\n }, [openForwardMenu, chatId, messageId]);\n\n const selectMessage = useCallback((id?: number) => openMediaViewer({\n chatId,\n threadId,\n messageId: id,\n origin,\n }, {\n forceOnHeavyAnimation: true,\n }), [chatId, openMediaViewer, origin, threadId]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(() => {\n if (isZoomed) {\n closeZoom();\n } else {\n close();\n }\n }) : undefined), [close, isOpen, isZoomed]);\n\n useEffect(() => {\n if (isVideo && !isGif) {\n stopCurrentAudio();\n }\n }, [isGif, isVideo]);\n\n // Prevent refresh when rotating device to watch a video\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [isOpen]);\n\n const getMessageId = useCallback((fromId?: number, direction?: number): number | undefined => {\n if (!fromId) return undefined;\n const index = messageIds.indexOf(fromId);\n if ((direction === -1 && index > 0) || (direction === 1 && index < messageIds.length - 1)) {\n return messageIds[index + direction];\n }\n return undefined;\n }, [messageIds]);\n\n const nextMessageId = getMessageId(messageId, 1);\n const previousMessageId = getMessageId(messageId, -1);\n\n const handlePan = useCallback((x: number, y: number) => {\n setPanDelta({\n x,\n y,\n });\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isOpen, closeMediaViewer, openMediaViewer, {\n chatId,\n threadId,\n messageId,\n origin,\n avatarOwnerId: avatarOwner && avatarOwner.id,\n });\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n switch (e.key) {\n case 'Left': // IE/Edge specific value\n case 'ArrowLeft':\n selectMessage(previousMessageId);\n break;\n\n case 'Right': // IE/Edge specific value\n case 'ArrowRight':\n selectMessage(nextMessageId);\n break;\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n }, [isOpen, nextMessageId, previousMessageId, selectMessage]);\n\n useEffect(() => {\n if (isZoomed || IS_TOUCH_ENV) return undefined;\n const element = document.querySelector('.MediaViewerSlide--active');\n if (!element) {\n return undefined;\n }\n\n const shouldCloseOnVideo = isGif && !IS_IOS;\n\n return captureEvents(element, {\n // eslint-disable-next-line max-len\n excludedClosestSelector: `.backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer${!shouldCloseOnVideo ? ', .VideoPlayer' : ''}`,\n onClick: close,\n });\n }, [close, isGif, isZoomed, messageId]);\n\n function renderSenderInfo() {\n return isAvatar ? (\n \n ) : (\n \n );\n }\n\n return (\n \n {() => (\n <>\n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n {renderSenderInfo}\n \n \n
\n \n \n {(isActive: boolean) => (\n \n )}\n \n \n {!isFirst && !IS_TOUCH_ENV && (\n selectMessage(previousMessageId)}\n />\n )}\n {!isLast && !IS_TOUCH_ENV && (\n selectMessage(nextMessageId)}\n />\n )}\n \n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = global.mediaViewer;\n const {\n animationLevel,\n } = global.settings.byKey;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return { animationLevel };\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return { animationLevel };\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n animationLevel,\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n animationLevel,\n origin,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return { animationLevel };\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return { animationLevel };\n }\n\n let chatMessages: Record | undefined;\n\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n chatMessages = selectScheduledMessages(global, chatId);\n } else {\n chatMessages = selectChatMessages(global, chatId);\n }\n let collectionIds: number[] | undefined;\n\n if (origin === MediaViewerOrigin.Inline || origin === MediaViewerOrigin.Album) {\n collectionIds = selectOutlyingIds(global, chatId, threadId) || selectListedIds(global, chatId, threadId);\n } else if (origin === MediaViewerOrigin.SharedMedia) {\n const currentSearch = selectCurrentMediaSearch(global);\n const { foundIds } = (currentSearch && currentSearch.resultsByType && currentSearch.resultsByType.media) || {};\n collectionIds = foundIds;\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n };\n },\n)(MediaViewer));\n","import { RefObject } from 'react';\nimport React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\n\nimport { CHAT_HEIGHT_PX } from '../../config';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';\nimport { isUserId } from '../../modules/helpers';\n\nimport Loading from '../ui/Loading';\nimport Modal from '../ui/Modal';\nimport InputText from '../ui/InputText';\nimport Button from '../ui/Button';\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport GroupChatInfo from './GroupChatInfo';\nimport PrivateChatInfo from './PrivateChatInfo';\n\nimport './ChatOrUserPicker.scss';\n\nexport type OwnProps = {\n currentUserId?: string;\n chatOrUserIds: string[];\n isOpen: boolean;\n filterRef: RefObject;\n filterPlaceholder: string;\n filter: string;\n loadMore?: NoneToVoidFunction;\n onFilterChange: (filter: string) => void;\n onSelectChatOrUser: (chatOrUserId: string) => void;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst ChatOrUserPicker: FC = ({\n isOpen,\n currentUserId,\n chatOrUserIds,\n filterRef,\n filter,\n filterPlaceholder,\n loadMore,\n onFilterChange,\n onSelectChatOrUser,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const lang = useLang();\n const [viewportIds, getMore] = useInfiniteScroll(loadMore, chatOrUserIds, Boolean(filter));\n\n const resetFilter = useCallback(() => {\n onFilterChange('');\n }, [onFilterChange]);\n useInputFocusOnOpen(filterRef, isOpen, resetFilter);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n onFilterChange(e.currentTarget.value);\n }, [onFilterChange]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n onSelectChatOrUser(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n const modalHeader = (\n
\n \n \n \n \n
\n );\n\n const viewportOffset = chatOrUserIds!.indexOf(viewportIds![0]);\n\n return (\n \n {viewportIds?.length ? (\n \n {viewportIds.map((id, i) => (\n onSelectChatOrUser(id)}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n \n ) : viewportIds && !viewportIds.length ? (\n

{lang('lng_blocked_list_not_found')}

\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(ChatOrUserPicker);\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat, MAIN_THREAD_ID } from '../../api/types';\n\nimport {\n filterChatsByName,\n filterUsersByName,\n getCanPostInChat,\n sortChatIds,\n} from '../../modules/helpers';\nimport { unique } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport useFlag from '../../hooks/useFlag';\n\nimport ChatOrUserPicker from '../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n chatsById: Record;\n activeListIds?: string[];\n archivedListIds?: string[];\n pinnedIds?: string[];\n contactIds?: string[];\n currentUserId?: string;\n};\n\nconst ForwardPicker: FC = ({\n chatsById,\n activeListIds,\n archivedListIds,\n pinnedIds,\n contactIds,\n currentUserId,\n isOpen,\n}) => {\n const {\n setForwardChatId,\n exitForwardMode,\n } = getDispatch();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const [isShown, markIsShown, unmarkIsShown] = useFlag();\n useEffect(() => {\n if (isOpen) {\n markIsShown();\n }\n }, [isOpen, markIsShown]);\n\n const chatAndContactIds = useMemo(() => {\n if (!isOpen) {\n return undefined;\n }\n\n let priorityIds = pinnedIds || [];\n if (currentUserId) {\n priorityIds = unique([currentUserId, ...priorityIds]);\n }\n\n const chatIds = [\n ...(activeListIds || []),\n ...(archivedListIds || []),\n ].filter((id) => {\n const chat = chatsById[id];\n\n return chat && getCanPostInChat(chat, MAIN_THREAD_ID);\n });\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return sortChatIds(unique([\n ...filterChatsByName(lang, chatIds, chatsById, filter, currentUserId),\n ...(contactIds ? filterUsersByName(contactIds, usersById, filter) : []),\n ]), chatsById, undefined, priorityIds);\n }, [activeListIds, archivedListIds, chatsById, contactIds, currentUserId, filter, isOpen, lang, pinnedIds]);\n\n const handleSelectUser = useCallback((userId: string) => {\n setForwardChatId({ id: userId });\n }, [setForwardChatId]);\n\n const renderingChatAndContactIds = useCurrentOrPrev(chatAndContactIds, true)!;\n\n if (!isOpen && !isShown) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsById,\n listIds,\n orderedPinnedIds,\n },\n currentUserId,\n } = global;\n\n return {\n chatsById,\n activeListIds: listIds.active,\n archivedListIds: listIds.archived,\n pinnedIds: orderedPinnedIds.active,\n contactIds: global.contactList?.userIds,\n currentUserId,\n };\n },\n)(ForwardPicker));\n","import React, { FC, memo, useEffect } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiContact, ApiError, ApiInviteInfo, ApiPhoto,\n} from '../../api/types';\n\nimport getReadableErrorText from '../../util/getReadableErrorText';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\n\nimport './Dialogs.scss';\n\ntype StateProps = {\n dialogs: (ApiError | ApiInviteInfo)[];\n};\n\nconst Dialogs: FC = ({ dialogs }) => {\n const {\n dismissDialog,\n acceptInviteConfirmation,\n sendMessage,\n showNotification,\n } = getDispatch();\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n const lang = useLang();\n\n useEffect(() => {\n if (dialogs.length > 0) {\n openModal();\n }\n }, [dialogs, openModal]);\n\n if (!dialogs.length) {\n return undefined;\n }\n\n function renderInviteHeader(title: string, photo?: ApiPhoto) {\n return (\n
\n {photo && }\n
\n {renderText(title)}\n
\n \n
\n );\n }\n\n const renderInvite = (invite: ApiInviteInfo) => {\n const {\n hash, title, about, participantsCount, isChannel, photo, isRequestNeeded,\n } = invite;\n\n const handleJoinClick = () => {\n acceptInviteConfirmation({\n hash,\n });\n showNotification({\n message: isChannel ? lang('RequestToJoinChannelSentDescription') : lang('RequestToJoinGroupSentDescription'),\n });\n closeModal();\n };\n\n const participantsText = isChannel\n ? lang('Subscribers', participantsCount, 'i')\n : lang('Members', participantsCount, 'i');\n\n const joinText = isChannel ? lang('ChannelJoin') : lang('JoinGroup');\n const requestToJoinText = isChannel\n ? lang('MemberRequests.RequestToJoinChannel') : lang('MemberRequests.RequestToJoinGroup');\n\n return (\n \n {participantsCount !== undefined &&

{participantsText}

}\n {about &&

{renderText(about, ['br'])}

}\n {isRequestNeeded && (\n

\n {isChannel\n ? lang('MemberRequests.RequestToJoinDescriptionChannel')\n : lang('MemberRequests.RequestToJoinDescriptionGroup')}\n

\n )}\n \n \n \n );\n };\n\n const renderContactRequest = (contactRequest: ApiContact) => {\n const handleConfirm = () => {\n sendMessage({\n contact: pick(contactRequest, ['firstName', 'lastName', 'phoneNumber']),\n });\n closeModal();\n };\n\n return (\n \n {lang('AreYouSureShareMyContactInfoBot')}\n
\n \n \n
\n \n );\n };\n\n const renderError = (error: ApiError) => {\n return (\n \n {error.hasErrorKey ? getReadableErrorText(error) : renderText(error.message!, ['emoji', 'br'])}\n
\n \n
\n \n );\n };\n\n const renderDialog = (dialog: ApiError | ApiInviteInfo | ApiContact) => {\n if ('hash' in dialog) {\n return renderInvite(dialog);\n }\n\n if ('phoneNumber' in dialog) {\n return renderContactRequest(dialog);\n }\n\n return renderError(dialog);\n };\n\n return (\n
\n {Boolean(dialogs.length) && renderDialog(dialogs[dialogs.length - 1])}\n
\n );\n};\n\nfunction getErrorHeader(error: ApiError) {\n if (error.isSlowMode) {\n return 'Slowmode enabled';\n }\n\n if (!error.hasErrorKey) {\n return 'Telegram';\n }\n\n return 'Something went wrong';\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['dialogs']),\n)(Dialogs));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiNotification } from '../../api/types';\n\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\n\nimport Notification from '../ui/Notification';\n\ntype StateProps = {\n notifications: ApiNotification[];\n};\n\nconst Notifications: FC = ({ notifications }) => {\n const { dismissNotification } = getDispatch();\n\n if (!notifications.length) {\n return undefined;\n }\n\n return (\n
\n {notifications.map(({ message, localId }) => (\n dismissNotification({ localId })}\n />\n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['notifications']),\n)(Notifications));\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport { ensureProtocol } from '../../util/ensureProtocol';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\n\nexport type OwnProps = {\n url?: string;\n};\n\nconst SafeLinkModal: FC = ({ url }) => {\n const { toggleSafeLinkModal } = getDispatch();\n\n const lang = useLang();\n\n const handleOpen = useCallback(() => {\n window.open(ensureProtocol(url));\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal, url]);\n\n const handleDismiss = useCallback(() => {\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal]);\n\n const renderingUrl = useCurrentOrPrev(url);\n\n return (\n \n );\n};\n\nexport default memo(SafeLinkModal);\n","import React, {\n FC, memo, useState, useEffect, useMemo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport { formatTime, formatDateToString, getDayStart } from '../../util/dateFormat';\nimport useLang, { LangFn } from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './CalendarModal.scss';\n\nconst MAX_SAFE_DATE = 2147483647 * 1000; // API has int for dates\nconst MIN_SAFE_DATE = 0;\n\nexport type OwnProps = {\n selectedAt?: number;\n minAt?: number;\n maxAt?: number;\n isFutureMode?: boolean;\n isPastMode?: boolean;\n isOpen: boolean;\n withTimePicker?: boolean;\n submitButtonLabel?: string;\n secondButtonLabel?: string;\n onClose: () => void;\n onSubmit: (date: Date) => void;\n onSecondButtonClick?: NoneToVoidFunction;\n};\n\nconst WEEKDAY_LETTERS = [\n 'lng_weekday1',\n 'lng_weekday2',\n 'lng_weekday3',\n 'lng_weekday4',\n 'lng_weekday5',\n 'lng_weekday6',\n 'lng_weekday7',\n];\n\nconst CalendarModal: FC = ({\n selectedAt,\n minAt,\n maxAt,\n isFutureMode,\n isPastMode,\n isOpen,\n withTimePicker,\n submitButtonLabel,\n secondButtonLabel,\n onClose,\n onSubmit,\n onSecondButtonClick,\n}) => {\n const lang = useLang();\n const now = new Date();\n\n const minDate = useMemo(() => {\n if (isFutureMode && !minAt) return new Date();\n return new Date(Math.max(minAt || MIN_SAFE_DATE, MIN_SAFE_DATE));\n }, [isFutureMode, minAt]);\n const maxDate = useMemo(() => {\n if (isPastMode && !maxAt) return new Date();\n return new Date(Math.min(maxAt || MAX_SAFE_DATE, MAX_SAFE_DATE));\n }, [isPastMode, maxAt]);\n\n const passedSelectedDate = useMemo(() => (selectedAt ? new Date(selectedAt) : new Date()), [selectedAt]);\n const prevIsOpen = usePrevious(isOpen);\n const [isTimeInputFocused, markTimeInputAsFocused, unmarkTimeInputAsFocused] = useFlag(false);\n\n const [selectedDate, setSelectedDate] = useState(passedSelectedDate);\n const [currentMonthAndYear, setCurrentMonthAndYear] = useState(\n new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1),\n );\n const [selectedHours, setSelectedHours] = useState(\n formatInputTime(passedSelectedDate.getHours()),\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n formatInputTime(passedSelectedDate.getMinutes()),\n );\n\n const selectedDay = formatDay(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate());\n const currentYear = currentMonthAndYear.getFullYear();\n const currentMonth = currentMonthAndYear.getMonth();\n\n useEffect(() => {\n if (!prevIsOpen && isOpen) {\n setSelectedDate(passedSelectedDate);\n setCurrentMonthAndYear(new Date(passedSelectedDate.getFullYear(), passedSelectedDate.getMonth(), 1));\n if (withTimePicker) {\n setSelectedHours(formatInputTime(passedSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(passedSelectedDate.getMinutes()));\n }\n }\n }, [passedSelectedDate, isOpen, prevIsOpen, withTimePicker]);\n\n useEffect(() => {\n if (isFutureMode && !isTimeInputFocused && selectedDate.getTime() < minDate.getTime()) {\n setSelectedDate(minDate);\n setSelectedHours(formatInputTime(minDate.getHours()));\n setSelectedMinutes(formatInputTime(minDate.getMinutes()));\n }\n }, [isFutureMode, isTimeInputFocused, minDate, selectedDate]);\n\n useEffect(() => {\n if (isPastMode && !isTimeInputFocused && selectedDate.getTime() > maxDate.getTime()) {\n setSelectedDate(maxDate);\n setSelectedHours(formatInputTime(maxDate.getHours()));\n setSelectedMinutes(formatInputTime(maxDate.getMinutes()));\n }\n }, [isFutureMode, isPastMode, isTimeInputFocused, maxDate, minDate, selectedDate]);\n\n useEffect(() => {\n if (selectedAt) {\n const newSelectedDate = new Date(selectedAt);\n setSelectedDate(newSelectedDate);\n setSelectedHours(formatInputTime(newSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(newSelectedDate.getMinutes()));\n }\n }, [selectedAt]);\n\n const shouldDisableNextMonth = (isPastMode && currentYear >= now.getFullYear() && currentMonth >= now.getMonth())\n || (maxDate && currentYear >= maxDate.getFullYear() && currentMonth >= maxDate.getMonth());\n const shouldDisablePrevMonth = isFutureMode && currentYear <= now.getFullYear() && currentMonth <= now.getMonth();\n\n const { prevMonthGrid, currentMonthGrid, nextMonthGrid } = useMemo(() => (\n buildCalendarGrid(currentYear, currentMonth)\n ), [currentMonth, currentYear]);\n\n const submitLabel = useMemo(() => {\n return submitButtonLabel || formatSubmitLabel(lang, selectedDate);\n }, [lang, selectedDate, submitButtonLabel]);\n\n function handlePrevMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() - 1);\n\n return dateCopy;\n });\n }\n\n function handleNextMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() + 1);\n\n return dateCopy;\n });\n }\n\n function handleDateSelect(date: number) {\n setSelectedDate((d) => {\n const dateCopy = new Date(d);\n dateCopy.setDate(date);\n dateCopy.setMonth(currentMonth);\n dateCopy.setFullYear(currentYear);\n\n return dateCopy;\n });\n }\n\n function handleSubmit() {\n onSubmit(selectedDate);\n }\n\n const handleChangeHours = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedHours('');\n e.target.value = '';\n return;\n }\n\n const hours = Math.max(0, Math.min(Number(value), 23));\n\n const date = new Date(selectedDate.getTime());\n date.setHours(hours);\n setSelectedDate(date);\n\n const hoursStr = formatInputTime(hours);\n setSelectedHours(hoursStr);\n e.target.value = hoursStr;\n }, [selectedDate]);\n\n const handleChangeMinutes = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedMinutes('');\n e.target.value = '';\n return;\n }\n\n const minutes = Math.max(0, Math.min(Number(value), 59));\n\n const date = new Date(selectedDate.getTime());\n date.setMinutes(minutes);\n setSelectedDate(date);\n\n const minutesStr = formatInputTime(minutes);\n setSelectedMinutes(minutesStr);\n e.target.value = minutesStr;\n }, [selectedDate]);\n\n function renderTimePicker() {\n return (\n
\n \n :\n \n
\n );\n }\n\n return (\n \n
\n
\n \n \n \n\n

\n {lang(`lng_month${currentMonth + 1}`)}\n {' '}\n {currentYear}\n

\n\n \n \n \n\n \n \n \n
\n
\n\n
\n
\n {WEEKDAY_LETTERS.map((day) => (\n
\n {lang(day)}\n
\n ))}\n {prevMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n {currentMonthGrid.map((gridDate) => (\n handleDateSelect(gridDate)}\n className={buildClassName(\n 'day-button',\n isDisabledDay(\n currentYear, currentMonth, gridDate, minDate, maxDate,\n )\n ? 'disabled'\n : `${gridDate ? 'clickable' : ''}`,\n selectedDay === formatDay(currentYear, currentMonth, gridDate) && 'selected',\n )}\n >\n {Boolean(gridDate) && (\n {gridDate}\n )}\n
\n ))}\n {nextMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n
\n \n\n {withTimePicker && renderTimePicker()}\n\n
\n \n {secondButtonLabel && (\n \n )}\n
\n \n );\n};\n\nfunction buildCalendarGrid(year: number, month: number) {\n const prevMonthGrid: number[] = [];\n const currentMonthGrid: number[] = [];\n const nextMonthGrid: number[] = [];\n\n const date = new Date();\n date.setDate(1);\n date.setMonth(month);\n date.setFullYear(year);\n const firstDay = date.getDay();\n const totalDaysInPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = 1; i < firstDay; i++) {\n prevMonthGrid.push(totalDaysInPrevMonth - firstDay + i + 1);\n }\n\n while (date.getMonth() === month) {\n const gridDate = date.getDate();\n currentMonthGrid.push(gridDate);\n date.setDate(gridDate + 1);\n }\n\n const lastRowDaysCount = (currentMonthGrid.length + prevMonthGrid.length) % 7;\n if (lastRowDaysCount > 0) {\n for (let i = 1; i <= 7 - lastRowDaysCount; i++) {\n nextMonthGrid.push(i);\n }\n }\n\n return { prevMonthGrid, currentMonthGrid, nextMonthGrid };\n}\n\nfunction isDisabledDay(year: number, month: number, day: number, minDate?: Date, maxDate?: Date) {\n const selectedDay = new Date(year, month, day);\n const fixedMinDate = minDate && getDayStart(minDate);\n const fixedMaxDate = maxDate && getDayStart(maxDate);\n\n if (fixedMaxDate && selectedDay > fixedMaxDate) {\n return true;\n } else if (fixedMinDate && selectedDay < fixedMinDate) {\n return true;\n }\n\n return false;\n}\n\nfunction formatInputTime(value: string | number) {\n return String(value).padStart(2, '0');\n}\n\nfunction formatDay(year: number, month: number, day: number) {\n return `${year}-${month + 1}-${day}`;\n}\n\nfunction formatSubmitLabel(lang: LangFn, date: Date) {\n const day = formatDateToString(date, lang.code);\n const today = formatDateToString(new Date(), lang.code);\n\n if (day === today) {\n return lang('Conversation.ScheduleMessage.SendToday', formatTime(lang, date));\n }\n\n return lang('Conversation.ScheduleMessage.SendOn', [day, formatTime(lang, date)]);\n}\n\nexport default memo(CalendarModal);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport useLang from '../../hooks/useLang';\n\nimport CalendarModal from '../common/CalendarModal';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n selectedAt?: number;\n};\n\nconst HistoryCalendar: FC = ({\n isOpen, selectedAt,\n}) => {\n const { searchMessagesByDate, closeHistoryCalendar } = getDispatch();\n\n const handleJumpToDate = useCallback((date: Date) => {\n searchMessagesByDate({ timestamp: date.valueOf() / 1000 });\n closeHistoryCalendar();\n }, [closeHistoryCalendar, searchMessagesByDate]);\n\n const lang = useLang();\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return { selectedAt: global.historyCalendarSelectedAt };\n },\n)(HistoryCalendar));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\nimport { IAlbum } from '../../types';\n\nimport {\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectUser,\n} from '../../modules/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../modules/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n message: ApiMessage;\n album?: IAlbum;\n onClose: () => void;\n};\n\ntype StateProps = {\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteMessageModal: FC = ({\n isOpen,\n isSchedule,\n message,\n album,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n } = getDispatch();\n\n const handleDeleteMessageForAll = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n deleteMessages({ messageIds, shouldDeleteForAll: true });\n onClose();\n }, [deleteMessages, message.id, onClose, album]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n if (isSchedule) {\n deleteScheduledMessages({ messageIds });\n } else {\n deleteMessages({\n messageIds,\n shouldDeleteForAll: false,\n });\n }\n onClose();\n }, [album, message.id, isSchedule, onClose, deleteScheduledMessages, deleteMessages]);\n\n const lang = useLang();\n\n return (\n \n

{lang('AreYouSureDeleteSingleMessage')}

\n {willDeleteForCurrentUserOnly && (\n

{lang('lng_delete_for_me_chat_hint', 1, 'i')}

\n )}\n {willDeleteForAll && (\n

{lang('lng_delete_for_everyone_hint', 1, 'i')}

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { message, isSchedule }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const { canDeleteForAll } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const chat = selectChat(global, message.chatId);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteMessageModal));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { selectChat, selectIsChatWithSelf, selectUser } from '../../modules/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n isChatChannel,\n} from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n messageId: number;\n onClose: () => void;\n};\n\ntype StateProps = {\n isChannel: boolean;\n isPrivateChat: boolean;\n isChatWithSelf: boolean;\n isGroup: boolean;\n isSuperGroup: boolean;\n canPinForAll: boolean;\n contactName?: string;\n};\n\nconst PinMessageModal: FC = ({\n isOpen,\n messageId,\n chatId,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n onClose,\n}) => {\n const { pinMessage } = getDispatch();\n\n const handlePinMessageForAll = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false,\n });\n onClose();\n }, [pinMessage, chatId, messageId, onClose]);\n\n const handlePinMessage = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false, isOneSide: true, isSilent: true,\n });\n onClose();\n }, [chatId, messageId, onClose, pinMessage]);\n\n const lang = useLang();\n\n function renderMessage() {\n if (isChannel) {\n return lang('PinMessageAlertChannel');\n }\n\n if (isGroup || isSuperGroup) {\n return lang('PinMessageAlert');\n }\n\n return lang('PinMessageAlertChat');\n }\n\n return (\n \n

{renderMessage()}

\n \n {canPinForAll && (\n \n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const isPrivateChat = isUserId(chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const chat = selectChat(global, chatId);\n const isChannel = Boolean(chat) && isChatChannel(chat);\n const isGroup = Boolean(chat) && isChatBasicGroup(chat);\n const isSuperGroup = Boolean(chat) && isChatSuperGroup(chat);\n const canPinForAll = (isPrivateChat && !isChatWithSelf) || isSuperGroup || isGroup;\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n return {\n isPrivateChat,\n isChatWithSelf,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n };\n },\n)(PinMessageModal));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId?: string;\n pinnedMessagesCount?: number;\n onClose: () => void;\n onUnpin: () => void;\n};\n\nconst UnpinAllMessagesModal: FC = ({\n isOpen,\n pinnedMessagesCount = 0,\n onClose,\n onUnpin,\n}) => {\n const lang = useLang();\n\n return (\n \n

{lang('Chat.UnpinAllMessagesConfirmation', pinnedMessagesCount, 'i')}

\n \n \n \n );\n};\n\nexport default memo(UnpinAllMessagesModal);\n","import React, {\n FC, useCallback, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { selectCanDeleteSelectedMessages, selectCurrentChat, selectUser } from '../../modules/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n selectedMessageIds?: number[];\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteSelectedMessageModal: FC = ({\n isOpen,\n isSchedule,\n selectedMessageIds,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n exitMessageSelectMode,\n } = getDispatch();\n\n const prevIsOpen = usePrevious(isOpen);\n\n const handleDeleteMessageForAll = useCallback(() => {\n onClose();\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: true });\n }, [deleteMessages, selectedMessageIds, onClose]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n if (isSchedule) {\n deleteScheduledMessages({ messageIds: selectedMessageIds });\n } else {\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: false });\n }\n\n onClose();\n }, [isSchedule, onClose, deleteScheduledMessages, selectedMessageIds, deleteMessages]);\n\n const lang = useLang();\n\n // Returning `undefined` from FC instead of `` doesn't trigger useHistoryBack\n useEffect(() => {\n if (!isOpen && prevIsOpen) {\n exitMessageSelectMode();\n }\n }, [exitMessageSelectMode, isOpen, prevIsOpen]);\n\n if (!selectedMessageIds) {\n return undefined;\n }\n\n return (\n \n

{lang('AreYouSureDeleteFewMessages')}

\n {willDeleteForCurrentUserOnly && (\n

This will delete them just for you, not for other participants in the chat.

\n )}\n {willDeleteForAll && (\n

This will delete them for everyone in this chat.

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { isSchedule }): StateProps => {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { canDeleteForAll } = selectCanDeleteSelectedMessages(global);\n const chat = selectCurrentChat(global);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n selectedMessageIds,\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteSelectedMessageModal));\n","import { ChangeEvent } from 'react';\n\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport { ApiReportReason } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport RadioGroup from '../ui/RadioGroup';\nimport InputText from '../ui/InputText';\n\nexport type OwnProps = {\n isOpen: boolean;\n messageIds?: number[];\n onClose: () => void;\n};\n\nconst ReportMessageModal: FC = ({\n isOpen,\n messageIds,\n onClose,\n}) => {\n const {\n reportMessages,\n exitMessageSelectMode,\n } = getDispatch();\n\n const [selectedReason, setSelectedReason] = useState('spam');\n const [description, setDescription] = useState('');\n\n const handleReport = () => {\n reportMessages({ messageIds, reason: selectedReason, description });\n exitMessageSelectMode();\n onClose();\n };\n\n const handleSelectReason = useCallback((value: string) => {\n setSelectedReason(value as ApiReportReason);\n }, []);\n\n const handleDescriptionChange = useCallback((e: ChangeEvent) => {\n setDescription(e.target.value);\n }, []);\n\n const lang = useLang();\n\n const REPORT_OPTIONS: { value: ApiReportReason; label: string }[] = [\n { value: 'spam', label: lang('lng_report_reason_spam') },\n { value: 'violence', label: lang('lng_report_reason_violence') },\n { value: 'pornography', label: lang('lng_report_reason_pornography') },\n { value: 'childAbuse', label: lang('lng_report_reason_child_abuse') },\n { value: 'copyright', label: lang('ReportPeer.ReasonCopyright') },\n { value: 'other', label: lang('lng_report_reason_other') },\n ];\n\n if (!messageIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport default memo(ReportMessageModal);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { MessageListType } from '../../global/types';\n\nimport {\n selectCanDeleteSelectedMessages,\n selectCanDownloadSelectedMessages,\n selectCanReportSelectedMessages,\n selectCurrentMessageList,\n selectHasProtectedMessage,\n selectSelectedMessagesCount,\n} from '../../modules/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport DeleteSelectedMessageModal from './DeleteSelectedMessageModal';\nimport ReportMessageModal from '../common/ReportMessageModal';\n\nimport './MessageSelectToolbar.scss';\n\nexport type OwnProps = {\n isActive?: boolean;\n canPost?: boolean;\n messageListType?: MessageListType;\n};\n\ntype StateProps = {\n isSchedule: boolean;\n selectedMessagesCount?: number;\n canDeleteMessages?: boolean;\n canReportMessages?: boolean;\n canDownloadMessages?: boolean;\n hasProtectedMessage?: boolean;\n selectedMessageIds?: number[];\n};\n\nconst MessageSelectToolbar: FC = ({\n canPost,\n isActive,\n messageListType,\n isSchedule,\n selectedMessagesCount,\n canDeleteMessages,\n canReportMessages,\n canDownloadMessages,\n hasProtectedMessage,\n selectedMessageIds,\n}) => {\n const {\n exitMessageSelectMode,\n openForwardMenuForSelectedMessages,\n downloadSelectedMessages,\n } = getDispatch();\n\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isReportModalOpen, openReportModal, closeReportModal] = useFlag();\n\n useEffect(() => {\n return isActive && !isDeleteModalOpen && !isReportModalOpen\n ? captureKeyboardListeners({\n onBackspace: openDeleteModal,\n onDelete: openDeleteModal,\n onEsc: exitMessageSelectMode,\n })\n : undefined;\n }, [isActive, isDeleteModalOpen, isReportModalOpen, openDeleteModal, exitMessageSelectMode]);\n\n const handleDownload = useCallback(() => {\n downloadSelectedMessages();\n exitMessageSelectMode();\n }, [downloadSelectedMessages, exitMessageSelectMode]);\n\n const prevSelectedMessagesCount = usePrevious(selectedMessagesCount || undefined, true);\n const renderingSelectedMessagesCount = isActive ? selectedMessagesCount : prevSelectedMessagesCount;\n\n const lang = useLang();\n\n const formattedMessagesCount = lang('VoiceOver.Chat.MessagesSelected', renderingSelectedMessagesCount, 'i');\n\n const className = buildClassName(\n 'MessageSelectToolbar',\n canPost && 'with-composer',\n isActive && 'shown',\n );\n\n const renderButton = (\n icon: string, label: string, onClick: AnyToVoidFunction, disabled?: boolean, destructive?: boolean,\n ) => {\n return (\n \n \n \n );\n };\n\n return (\n
\n
\n \n \n \n \n {formattedMessagesCount}\n \n\n {Boolean(selectedMessagesCount) && (\n
\n {messageListType !== 'scheduled' && (\n renderButton(\n 'forward', lang('Chat.ForwardActionHeader'), openForwardMenuForSelectedMessages, hasProtectedMessage,\n )\n )}\n {canReportMessages && (\n renderButton('flag', lang('Conversation.ReportMessages'), openReportModal)\n )}\n {canDownloadMessages && (\n renderButton('download', lang('lng_media_download'), handleDownload, hasProtectedMessage)\n )}\n {renderButton('delete', lang('EditAdminGroupDeleteMessages'), openDeleteModal, !canDeleteMessages, true)}\n
\n )}\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { type: messageListType, chatId } = selectCurrentMessageList(global) || {};\n const { canDelete } = selectCanDeleteSelectedMessages(global);\n const canReport = selectCanReportSelectedMessages(global);\n const canDownload = selectCanDownloadSelectedMessages(global);\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const hasProtectedMessage = chatId ? selectHasProtectedMessage(global, chatId, selectedMessageIds) : false;\n\n return {\n isSchedule: messageListType === 'scheduled',\n selectedMessagesCount: selectSelectedMessagesCount(global),\n canDeleteMessages: canDelete,\n canReportMessages: canReport,\n canDownloadMessages: canDownload,\n selectedMessageIds,\n hasProtectedMessage,\n };\n },\n)(MessageSelectToolbar));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../modules/selectors';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport PrivateChatInfo from './PrivateChatInfo';\nimport ListItem from '../ui/ListItem';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = {\n memberIds?: string[];\n};\n\nconst CLOSE_ANIMATION_DURATION = 100;\n\nconst SeenByModal: FC = ({\n isOpen,\n memberIds,\n}) => {\n const {\n openChat,\n closeSeenByModal,\n } = getDispatch();\n\n const lang = useLang();\n\n const handleClick = useCallback((userId: string) => {\n closeSeenByModal();\n\n setTimeout(() => {\n openChat({ id: userId });\n }, CLOSE_ANIMATION_DURATION);\n }, [closeSeenByModal, openChat]);\n\n const renderingMemberIds = useCurrentOrPrev(memberIds, true);\n\n return (\n \n
\n {renderingMemberIds && renderingMemberIds.map((userId) => (\n handleClick(userId)}\n >\n \n \n ))}\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.seenByModal || {};\n if (!chatId || !messageId) {\n return {};\n }\n\n return {\n memberIds: selectChatMessage(global, chatId, messageId)?.seenByUserIds,\n };\n },\n)(SeenByModal));\n","import React, {\n FC, useCallback, memo, useMemo, useEffect, useState, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\nimport { LoadMoreDirection } from '../../types';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../modules/selectors';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { getUserFullName } from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useFlag from '../../hooks/useFlag';\nimport buildClassName from '../../util/buildClassName';\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport { unique } from '../../util/iteratees';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\nimport ListItem from '../ui/ListItem';\nimport ReactionStaticEmoji from '../common/ReactionStaticEmoji';\nimport Loading from '../ui/Loading';\n\nimport './ReactorListModal.scss';\n\nconst MIN_REACTIONS_COUNT_FOR_FILTERS = 10;\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = Pick & {\n chatId?: string;\n messageId?: number;\n};\n\nconst ReactorListModal: FC = ({\n isOpen,\n reactors,\n reactions,\n chatId,\n messageId,\n seenByUserIds,\n}) => {\n const {\n loadReactors,\n closeReactorListModal,\n openChat,\n } = getDispatch();\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n const lang = useLang();\n const [isClosing, startClosing, stopClosing] = useFlag(false);\n const [chosenTab, setChosenTab] = useState(undefined);\n const canShowFilters = reactors && reactions && reactors.count >= MIN_REACTIONS_COUNT_FOR_FILTERS\n && reactions.results.length > 1;\n const chatIdRef = useRef();\n\n useEffect(() => {\n if (isClosing && !isOpen) {\n stopClosing();\n setChosenTab(undefined);\n }\n }, [isClosing, isOpen, stopClosing]);\n\n const handleCloseAnimationEnd = useCallback(() => {\n if (chatIdRef.current) {\n openChat({ id: chatIdRef.current });\n }\n closeReactorListModal();\n }, [closeReactorListModal, openChat]);\n\n const handleClose = useCallback(() => {\n startClosing();\n }, [startClosing]);\n\n const handleClick = useCallback((userId: string) => {\n chatIdRef.current = userId;\n handleClose();\n }, [handleClose]);\n\n const handleLoadMore = useCallback(() => {\n loadReactors({\n chatId,\n messageId,\n });\n }, [chatId, loadReactors, messageId]);\n\n const allReactions = useMemo(() => {\n return reactors?.reactions ? unique(reactors.reactions.map((l) => l.reaction)) : [];\n }, [reactors?.reactions]);\n\n const userIds = useMemo(() => {\n if (chosenTab) {\n return reactors?.reactions.filter((l) => l.reaction === chosenTab).map((l) => l.userId);\n }\n return unique(reactors?.reactions.map((l) => l.userId).concat(seenByUserIds || []) || []);\n }, [chosenTab, reactors?.reactions, seenByUserIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n handleLoadMore, userIds, reactors && reactors.nextOffset === undefined,\n );\n\n useEffect(() => {\n getMore?.({ direction: LoadMoreDirection.Backwards });\n }, [getMore]);\n\n return (\n \n {canShowFilters && (\n
\n setChosenTab(undefined)}\n >\n \n {reactors?.count && formatIntegerCompact(reactors.count)}\n \n {allReactions.map((reaction) => {\n const count = reactions?.results.find((l) => l.reaction === reaction)?.count;\n return (\n setChosenTab(reaction)}\n >\n \n {count && formatIntegerCompact(count)}\n \n );\n })}\n
\n )}\n\n
\n {viewportIds?.length ? (\n \n {viewportIds?.map(\n (userId) => {\n const user = usersById[userId];\n const fullName = getUserFullName(user);\n const reaction = reactors?.reactions.find((l) => l.userId === userId)?.reaction;\n return (\n handleClick(userId)}\n >\n \n
\n

{fullName && renderText(fullName)}

\n
\n {reaction && }\n \n );\n },\n )}\n \n ) : }\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.reactorModal || {};\n const message = chatId && messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n\n return {\n chatId,\n messageId,\n reactions: message?.reactions,\n reactors: message?.reactors,\n seenByUserIds: message?.seenByUserIds,\n };\n },\n)(ReactorListModal));\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ActiveEmojiInteraction } from '../../global/types';\nimport { ApiMediaFormat } from '../../api/types';\n\nimport { IS_ANDROID } from '../../util/environment';\nimport useFlag from '../../hooks/useFlag';\nimport useMedia from '../../hooks/useMedia';\nimport buildClassName from '../../util/buildClassName';\nimport {\n selectAnimatedEmojiEffect,\n} from '../../modules/selectors';\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from '../common/helpers/animatedAssets';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\n\nimport AnimatedSticker from '../common/AnimatedSticker';\n\nimport './EmojiInteractionAnimation.scss';\n\nexport type OwnProps = {\n emojiInteraction: ActiveEmojiInteraction;\n};\n\ntype StateProps = {\n effectAnimationId?: string;\n localEffectAnimation?: string;\n isReversed?: boolean;\n};\n\nconst HIDE_ANIMATION_DURATION = 250;\nconst PLAYING_DURATION = 3000;\nconst EFFECT_SIZE = 240;\n\nconst EmojiInteractionAnimation: FC = ({\n emojiInteraction,\n effectAnimationId,\n localEffectAnimation,\n isReversed,\n}) => {\n const { stopActiveEmojiInteraction } = getDispatch();\n\n const [isHiding, startHiding] = useFlag(false);\n const [isPlaying, startPlaying] = useFlag(false);\n\n const stop = useCallback(() => {\n startHiding();\n setTimeout(() => {\n stopActiveEmojiInteraction();\n }, HIDE_ANIMATION_DURATION);\n }, [startHiding, stopActiveEmojiInteraction]);\n\n useEffect(() => {\n document.addEventListener('touchstart', stop);\n document.addEventListener('touchmove', stop);\n document.addEventListener('mousedown', stop);\n document.addEventListener('wheel', stop);\n\n return () => {\n document.removeEventListener('touchstart', stop);\n document.removeEventListener('touchmove', stop);\n document.removeEventListener('mousedown', stop);\n document.removeEventListener('wheel', stop);\n };\n }, [stop]);\n\n useLayoutEffect(() => {\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n setTimeout(() => {\n stop();\n dispatchHeavyAnimationStop();\n }, PLAYING_DURATION);\n }, [stop]);\n\n const effectAnimationData = useMedia(`sticker${effectAnimationId}`, !effectAnimationId, ApiMediaFormat.Lottie);\n\n const [localEffectAnimationData, setLocalEffectAnimationData] = useState();\n useEffect(() => {\n if (localEffectAnimation) {\n getAnimationData(localEffectAnimation as keyof typeof ANIMATED_STICKERS_PATHS).then((data) => {\n setLocalEffectAnimationData(data);\n });\n }\n }, [localEffectAnimation]);\n\n const scale = (emojiInteraction.startSize || 0) / EFFECT_SIZE;\n\n return (\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { emojiInteraction }): StateProps => {\n const animatedEffect = emojiInteraction.animatedEffect !== undefined\n && selectAnimatedEmojiEffect(global, emojiInteraction.animatedEffect);\n return {\n effectAnimationId: animatedEffect ? animatedEffect.id : undefined,\n localEffectAnimation: !animatedEffect && emojiInteraction.animatedEffect\n && Object.keys(ANIMATED_STICKERS_PATHS).includes(emojiInteraction.animatedEffect)\n ? emojiInteraction.animatedEffect : undefined,\n isReversed: emojiInteraction.isReversed,\n };\n },\n)(EmojiInteractionAnimation));\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nconst useSendWithEnter = (\n onSelect: NoneToVoidFunction,\n) => {\n // eslint-disable-next-line no-null/no-null\n const buttonRef = useRef(null);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n const isFocused = buttonRef.current === document.activeElement;\n\n if (isFocused) {\n onSelect();\n }\n }, [onSelect]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown, false);\n\n return () => window.removeEventListener('keydown', handleKeyDown, false);\n }, [handleKeyDown]);\n\n return buttonRef;\n};\n\nexport default useSendWithEnter;\n","import React, {\n FC, memo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport useChatContextActions from '../../../hooks/useChatContextActions';\nimport useFlag from '../../../hooks/useFlag';\nimport { isUserId, getPrivateChatUserId, selectIsChatMuted } from '../../../modules/helpers';\nimport {\n selectChat, selectUser, selectIsChatPinned, selectNotifySettings, selectNotifyExceptions,\n} from '../../../modules/selectors';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport DeleteChatModal from '../../common/DeleteChatModal';\nimport ListItem from '../../ui/ListItem';\nimport ChatFolderModal from '../ChatFolderModal.async';\n\ntype OwnProps = {\n chatId: string;\n withUsername?: boolean;\n onClick: (id: string) => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n user?: ApiUser;\n isPinned?: boolean;\n isMuted?: boolean;\n canChangeFolder?: boolean;\n};\n\nconst LeftSearchResultChat: FC = ({\n chatId,\n withUsername,\n onClick,\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n}) => {\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isChatFolderModalOpen, openChatFolderModal, closeChatFolderModal] = useFlag();\n\n const contextActions = useChatContextActions({\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n handleDelete: openDeleteModal,\n handleChatFolderChange: openChatFolderModal,\n }, true);\n\n const handleClick = () => {\n onClick(chatId);\n };\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n {isUserId(chatId) ? (\n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const privateChatUserId = chat && getPrivateChatUserId(chat);\n const user = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n const isPinned = selectIsChatPinned(global, chatId);\n const isMuted = chat\n ? selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global))\n : undefined;\n\n return {\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder: Boolean(global.chatFolders.orderedIds?.length),\n };\n },\n)(LeftSearchResultChat));\n","import React, {\n FC, useEffect, useCallback, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { getUserFirstOrLastName } from '../../../modules/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport { throttle } from '../../../util/schedulers';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport LeftSearchResultChat from './LeftSearchResultChat';\n\nimport './RecentContacts.scss';\n\ntype OwnProps = {\n onReset: () => void;\n};\n\ntype StateProps = {\n topUserIds?: string[];\n usersById: Record;\n recentlyFoundChatIds?: string[];\n};\n\nconst SEARCH_CLOSE_TIMEOUT_MS = 250;\nconst NBSP = '\\u00A0';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst RecentContacts: FC = ({\n topUserIds, usersById, recentlyFoundChatIds,\n onReset,\n}) => {\n const {\n loadTopUsers, loadContactList, openChat,\n addRecentlyFoundChatId, clearRecentlyFoundChats,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const topUsersRef = useRef(null);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadTopUsers();\n // Loading full contact list for quick local search before user enters the query\n loadContactList();\n });\n }, [loadTopUsers, loadContactList]);\n\n useHorizontalScroll(topUsersRef.current, !topUserIds);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n onReset();\n setTimeout(() => {\n addRecentlyFoundChatId({ id });\n }, SEARCH_CLOSE_TIMEOUT_MS);\n }, [openChat, addRecentlyFoundChatId, onReset]);\n\n const lang = useLang();\n\n return (\n
\n {topUserIds && (\n
\n
\n {topUserIds.map((userId) => (\n
handleClick(userId)} dir={lang.isRtl ? 'rtl' : undefined}>\n \n
{renderText(getUserFirstOrLastName(usersById[userId]) || NBSP)}
\n
\n ))}\n
\n
\n )}\n {recentlyFoundChatIds && (\n
\n

\n {lang('Recent')}\n\n \n \n \n

\n {recentlyFoundChatIds.map((id) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: topUserIds } = global.topPeers;\n const usersById = global.users.byId;\n const { recentlyFoundChatIds } = global.globalSearch;\n\n return {\n topUserIds,\n usersById,\n recentlyFoundChatIds,\n };\n },\n)(RecentContacts));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiUser, ApiMessage, ApiMessageOutgoingStatus,\n} from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport {\n getChatTitle,\n getPrivateChatUserId,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageRoundVideo,\n} from '../../../modules/helpers';\nimport { selectChat, selectUser } from '../../../modules/selectors';\nimport renderText from '../../common/helpers/renderText';\nimport useMedia from '../../../hooks/useMedia';\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useLang, { LangFn } from '../../../hooks/useLang';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport Avatar from '../../common/Avatar';\nimport VerifiedIcon from '../../common/VerifiedIcon';\nimport ListItem from '../../ui/ListItem';\nimport Link from '../../ui/Link';\n\nimport './ChatMessage.scss';\n\ntype OwnProps = {\n searchQuery?: string;\n message: ApiMessage;\n chatId: string;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n privateChatUser?: ApiUser;\n lastMessageOutgoingStatus?: ApiMessageOutgoingStatus;\n lastSyncTime?: number;\n};\n\nconst ChatMessage: FC = ({\n message,\n searchQuery,\n chatId,\n chat,\n privateChatUser,\n lastSyncTime,\n}) => {\n const { focusMessage } = getDispatch();\n\n const mediaThumbnail = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));\n const isRoundVideo = Boolean(getMessageRoundVideo(message));\n\n const handleClick = useCallback(() => {\n focusMessage({ chatId, messageId: message.id });\n }, [chatId, focusMessage, message.id]);\n\n const lang = useLang();\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n \n
\n
\n
\n

{renderText(getChatTitle(lang, chat, privateChatUser))}

\n {chat.isVerified && }\n
\n
\n \n {formatPastTimeShort(lang, message.date * 1000)}\n \n
\n\n
\n
\n
\n {renderSummary(lang, message, mediaBlobUrl || mediaThumbnail, searchQuery, isRoundVideo)}\n
\n
\n
\n \n );\n};\n\nfunction renderSummary(\n lang: LangFn, message: ApiMessage, blobUrl?: string, searchQuery?: string, isRoundVideo?: boolean,\n) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message, undefined, searchQuery);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true, searchQuery)}\n \n );\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return {};\n }\n\n const privateChatUserId = getPrivateChatUserId(chat);\n\n return {\n chat,\n lastSyncTime: global.lastSyncTime,\n ...(privateChatUserId && { privateChatUser: selectUser(global, privateChatUserId) }),\n };\n },\n)(ChatMessage));\n","import React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { formatDateToString } from '../../../util/dateFormat';\n\nimport './DateSuggest.scss';\n\nconst SUGGESTION_COUNT = 8;\n\nexport type OwnProps = {\n searchDate: string;\n onSelect: (value: Date) => void;\n};\n\nconst DateSuggest: FC = ({\n searchDate, onSelect,\n}) => {\n const suggestions = useMemo(() => getSuggestionsFromDate(searchDate), [searchDate]);\n return (\n
\n {suggestions.map(({ date, text }) => {\n return (\n onSelect(date)}\n className=\"date-item\"\n key={text}\n >\n \n {text}\n \n );\n })}\n
\n );\n};\n\nfunction getSuggestionsFromDate(searchDate: string) {\n const hasYear = searchDate.match(/^\\d{2,4}-\\d{2}-\\d{2}$/g);\n if (hasYear) {\n const date = new Date(searchDate);\n return [{ date, text: formatDateToString(date) }];\n }\n\n const suggestion = [];\n const currentDate = new Date();\n const currentYear = currentDate.getFullYear();\n const latestYear = currentDate.getTime() > (new Date(`${currentYear}-${searchDate}`)).getTime()\n ? currentYear\n : currentYear - 1;\n\n for (let i = 0; i < SUGGESTION_COUNT; i++) {\n const date = new Date(`${latestYear - i}-${searchDate}`);\n suggestion.push({ date, text: formatDateToString(date) });\n }\n\n return suggestion;\n}\n\nexport default memo(DateSuggest);\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { unique } from '../../../util/iteratees';\nimport {\n sortChatIds,\n filterUsersByName,\n} from '../../../modules/helpers';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport LeftSearchResultChat from './LeftSearchResultChat';\nimport RecentContacts from './RecentContacts';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\nimport Link from '../../ui/Link';\nimport NothingFound from '../../common/NothingFound';\nimport PickerSelectedItem from '../../common/PickerSelectedItem';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n searchDate?: number;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n localContactIds?: string[];\n localChatIds?: string[];\n localUserIds?: string[];\n globalChatIds?: string[];\n globalUserIds?: string[];\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH = 4;\nconst LESS_LIST_ITEMS_AMOUNT = 5;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatResults: FC = ({\n searchQuery, searchDate, dateSearchQuery, currentUserId,\n localContactIds, localChatIds, localUserIds, globalChatIds, globalUserIds,\n foundIds, globalMessagesByChatId, chatsById, fetchingStatus, lastSyncTime,\n onReset, onSearchDateSelect,\n}) => {\n const {\n openChat, addRecentlyFoundChatId, searchMessagesGlobal, setGlobalSearchChatId,\n } = getDispatch();\n\n const lang = useLang();\n\n const [shouldShowMoreLocal, setShouldShowMoreLocal] = useState(false);\n const [shouldShowMoreGlobal, setShouldShowMoreGlobal] = useState(false);\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const handleChatClick = useCallback(\n (id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n\n if (id !== currentUserId) {\n addRecentlyFoundChatId({ id });\n }\n\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n onReset();\n }\n },\n [currentUserId, openChat, addRecentlyFoundChatId, onReset],\n );\n\n const handlePickerItemClick = useCallback((id: string) => {\n setGlobalSearchChatId({ id });\n }, [setGlobalSearchChatId]);\n\n const localResults = useMemo(() => {\n if (!searchQuery || (searchQuery.startsWith('@') && searchQuery.length < 2)) {\n return MEMO_EMPTY_ARRAY;\n }\n\n const contactIdsWithMe = [\n ...(currentUserId ? [currentUserId] : []),\n ...(localContactIds || []),\n ];\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = filterUsersByName(\n contactIdsWithMe, usersById, searchQuery, currentUserId, lang('SavedMessages'),\n );\n\n return [\n ...sortChatIds(unique([\n ...(foundContactIds || []),\n ...(localChatIds || []),\n ...(localUserIds || []),\n ]), chatsById, undefined, currentUserId ? [currentUserId] : undefined),\n ];\n }, [searchQuery, currentUserId, localContactIds, lang, localChatIds, localUserIds, chatsById]);\n\n const globalResults = useMemo(() => {\n if (!searchQuery || searchQuery.length < MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH || !globalChatIds || !globalUserIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return sortChatIds(\n unique([...globalChatIds, ...globalUserIds]),\n chatsById,\n true,\n );\n }, [chatsById, globalChatIds, globalUserIds, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if ((!searchQuery && !searchDate) || !foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId, searchQuery, searchDate]);\n\n const handleClickShowMoreLocal = useCallback(() => {\n setShouldShowMoreLocal(!shouldShowMoreLocal);\n }, [shouldShowMoreLocal]);\n\n const handleClickShowMoreGlobal = useCallback(() => {\n setShouldShowMoreGlobal(!shouldShowMoreGlobal);\n }, [shouldShowMoreGlobal]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages\n && !localResults.length && !globalResults.length && !foundMessages.length;\n\n if (!searchQuery && !searchDate) {\n return ;\n }\n\n return (\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {Boolean(localResults.length) && (\n
\n {localResults.map((id) => (\n \n ))}\n
\n )}\n {Boolean(localResults.length) && (\n
\n

\n {localResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreLocal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionDialogs')}\n

\n {localResults.map((id, index) => {\n if (!shouldShowMoreLocal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(globalResults.length) && (\n
\n

\n {globalResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreGlobal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionGlobal')}\n

\n {globalResults.map((id, index) => {\n if (!shouldShowMoreGlobal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(foundMessages.length) && (\n
\n

{lang('SearchMessages')}

\n {foundMessages.map(renderFoundMessage)}\n
\n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n\n const { userIds: localContactIds } = global.contactList || {};\n\n if (!localContactIds) {\n return {\n chatsById,\n };\n }\n\n const {\n currentUserId, messages, lastSyncTime,\n } = global;\n const {\n fetchingStatus, globalResults, localResults, resultsByType,\n } = global.globalSearch;\n const { chatIds: globalChatIds, userIds: globalUserIds } = globalResults || {};\n const { chatIds: localChatIds, userIds: localUserIds } = localResults || {};\n const { byChatId: globalMessagesByChatId } = messages;\n const foundIds = resultsByType?.text?.foundIds;\n\n return {\n currentUserId,\n localContactIds,\n localChatIds,\n localUserIds,\n globalChatIds,\n globalUserIds,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatMessageResults: FC = ({\n searchQuery,\n currentUserId,\n dateSearchQuery,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n onSearchDateSelect,\n}) => {\n const { searchMessagesGlobal } = getDispatch();\n\n const lang = useLang();\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n chatId: currentUserId,\n });\n });\n }\n }, [currentUserId, lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages && !foundMessages.length;\n\n return (\n
\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {foundMessages.map(renderFoundMessage)}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n const { currentUserId, messages: { byChatId: globalMessagesByChatId }, lastSyncTime } = global;\n const { fetchingStatus, resultsByType } = global.globalSearch;\n\n const { foundIds } = (resultsByType?.text) || {};\n\n return {\n currentUserId,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatMessageResults));\n","import { GlobalState } from '../../../../global/types';\nimport {\n ApiChat, ApiGlobalMessageSearchType, ApiMessage, ApiUser,\n} from '../../../../api/types';\nimport { ISettings } from '../../../../types';\n\nimport { selectChat, selectTheme } from '../../../../modules/selectors';\n\nexport type StateProps = {\n theme: ISettings['theme'];\n isLoading?: boolean;\n chatsById: Record;\n usersById: Record;\n globalMessagesByChatId?: Record }>;\n foundIds?: string[];\n lastSyncTime?: number;\n searchChatId?: string;\n activeDownloads: Record;\n isChatProtected?: boolean;\n};\n\nexport function createMapStateToProps(type: ApiGlobalMessageSearchType) {\n return (global: GlobalState, props: any) => {\n const { byId: chatsById } = global.chats;\n const { byId: usersById } = global.users;\n const {\n fetchingStatus, resultsByType, chatId,\n } = global.globalSearch;\n\n // One component is used for two different types of results.\n // The differences between them are only in the isVoice property.\n // The rest of the search results use their own personal components.\n const currentType = type !== 'audio' ? type : (props?.isVoice ? 'voice' : 'audio');\n\n const { byChatId: globalMessagesByChatId } = global.messages;\n const foundIds = resultsByType?.[currentType]?.foundIds;\n\n const activeDownloads = global.activeDownloads.byChatId;\n\n return {\n theme: selectTheme(global),\n isLoading: foundIds === undefined\n || (fetchingStatus ? Boolean(fetchingStatus.chats || fetchingStatus.messages) : false),\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n searchChatId: chatId,\n activeDownloads,\n isChatProtected: chatId ? selectChat(global, chatId)?.isProtected : undefined,\n lastSyncTime: global.lastSyncTime,\n };\n };\n}\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { LoadMoreDirection, MediaViewerOrigin } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport buildClassName from '../../../util/buildClassName';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Media from '../../common/Media';\nimport ChatMessage from './ChatMessage';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'media';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst MediaResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n openMediaViewer,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleSelectMedia = useCallback((messageId: number, chatId: string) => {\n openMediaViewer({\n chatId,\n messageId,\n origin: MediaViewerOrigin.SearchResult,\n });\n }, [openMediaViewer]);\n\n function renderGallery() {\n return (\n
\n {foundMessages.map((message) => (\n \n ))}\n
\n );\n }\n\n function renderSearchResult() {\n return foundMessages.map((message) => (\n \n ));\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n const isMediaGrid = canRenderContents && foundIds && foundIds.length > 0 && !searchQuery;\n const isMessageList = canRenderContents && foundIds && foundIds.length > 0 && searchQuery;\n\n const classNames = buildClassName(\n 'search-content custom-scroll',\n isMessageList && 'chat-list',\n );\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {isMediaGrid && renderGallery()}\n {isMessageList && renderSearchResult()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(MediaResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport WebLink from '../../common/WebLink';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'links';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst LinkResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(LinkResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport { getMessageDocument } from '../../../modules/helpers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport Document from '../../common/Document';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'documents';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst FileResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n activeDownloads,\n lastSyncTime,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n const message = globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n\n return message && getMessageDocument(message) ? message : undefined;\n }).filter(Boolean) as ApiMessage[];\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

{formatMonthAndYear(lang, new Date(message.date * 1000))}

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(FileResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { AudioOrigin, LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Audio from '../../common/Audio';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n isVoice?: boolean;\n searchQuery?: string;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst AudioResults: FC = ({\n theme,\n isVoice,\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n activeDownloads,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n openAudioPlayer,\n } = getDispatch();\n\n const lang = useLang();\n const currentType = isVoice ? 'voice' : 'audio';\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: currentType,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [currentType, lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n const handlePlayAudio = useCallback((messageId: number, chatId: string) => {\n openAudioPlayer({ chatId, messageId });\n }, [openAudioPlayer]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps('audio'),\n)(AudioResults));\n","import React, {\n FC, memo, useCallback, useState, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalSearchContent } from '../../../types';\n\nimport { parseDateString } from '../../../util/dateFormat';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport TabList from '../../ui/TabList';\nimport Transition from '../../ui/Transition';\nimport ChatResults from './ChatResults';\nimport UserChatResults from './ChatMessageResults';\nimport MediaResults from './MediaResults';\nimport LinkResults from './LinkResults';\nimport FileResults from './FileResults';\nimport AudioResults from './AudioResults';\n\nimport './LeftSearch.scss';\n\nexport type OwnProps = {\n searchQuery?: string;\n searchDate?: number;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentContent?: GlobalSearchContent;\n chatId?: string;\n};\n\nconst TABS = [\n { type: GlobalSearchContent.ChatList, title: 'SearchAllChatsShort' },\n { type: GlobalSearchContent.Media, title: 'SharedMediaTab2' },\n { type: GlobalSearchContent.Links, title: 'SharedLinksTab2' },\n { type: GlobalSearchContent.Files, title: 'SharedFilesTab2' },\n { type: GlobalSearchContent.Music, title: 'SharedMusicTab2' },\n { type: GlobalSearchContent.Voice, title: 'SharedVoiceTab2' },\n];\n\nconst CHAT_TABS = [\n { type: GlobalSearchContent.ChatList, title: 'All Messages' },\n ...TABS.slice(1),\n];\n\nconst TRANSITION_RENDER_COUNT = Object.keys(GlobalSearchContent).length / 2;\n\nconst LeftSearch: FC = ({\n searchQuery,\n searchDate,\n isActive,\n currentContent = GlobalSearchContent.ChatList,\n chatId,\n onReset,\n}) => {\n const {\n setGlobalSearchContent,\n setGlobalSearchDate,\n } = getDispatch();\n\n const lang = useLang();\n const [activeTab, setActiveTab] = useState(currentContent);\n const dateSearchQuery = useMemo(() => parseDateString(searchQuery), [searchQuery]);\n\n const handleSwitchTab = useCallback((index: number) => {\n const tab = TABS[index];\n setGlobalSearchContent({ content: tab.type });\n setActiveTab(index);\n }, [setGlobalSearchContent]);\n\n const handleSearchDateSelect = useCallback((value: Date) => {\n setGlobalSearchDate({ date: value.getTime() / 1000 });\n }, [setGlobalSearchDate]);\n\n useHistoryBack(isActive, onReset, undefined, undefined, true);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, undefined, '.ListItem-button', true);\n\n return (\n
\n \n \n {() => {\n switch (currentContent) {\n case GlobalSearchContent.ChatList:\n if (chatId) {\n return (\n \n );\n }\n return (\n \n );\n case GlobalSearchContent.Media:\n return ;\n case GlobalSearchContent.Links:\n return ;\n case GlobalSearchContent.Files:\n return ;\n case GlobalSearchContent.Music:\n return (\n \n );\n case GlobalSearchContent.Voice:\n return (\n \n );\n default:\n return undefined;\n }\n }}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentContent, chatId } = global.globalSearch;\n\n return { currentContent, chatId };\n },\n)(LeftSearch));\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\n\nexport type TwoFaActions = (\n 'setCurrentPassword' | 'setPassword' | 'setHint' | 'setEmail' | 'reset'\n);\nexport type TwoFaDispatch = Dispatch;\n\nexport type TwoFaState = {\n currentPassword: string;\n password: string;\n hint: string;\n email: string;\n};\n\nconst INITIAL_STATE: TwoFaState = {\n currentPassword: '',\n password: '',\n hint: '',\n email: '',\n};\n\nconst twoFaReducer: StateReducer = (\n state,\n action,\n) => {\n switch (action.type) {\n case 'setCurrentPassword':\n return {\n ...state,\n currentPassword: action.payload,\n };\n\n case 'setPassword':\n return {\n ...state,\n password: action.payload,\n };\n\n case 'setHint':\n return {\n ...state,\n hint: action.payload,\n };\n\n case 'setEmail':\n return {\n ...state,\n email: action.payload,\n };\n\n case 'reset':\n return INITIAL_STATE;\n\n default:\n return state;\n }\n};\n\nconst useTwoFaReducer = () => {\n return useReducer(twoFaReducer, INITIAL_STATE);\n};\n\nexport default useTwoFaReducer;\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport useLang from '../../../hooks/useLang';\n\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n currentScreen: SettingsScreens;\n editedFolderId?: number;\n onReset: () => void;\n onSaveFilter: () => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n};\n\nconst SettingsHeader: FC = ({\n currentScreen,\n editedFolderId,\n onReset,\n onSaveFilter,\n onScreenSelect,\n}) => {\n const {\n signOut,\n deleteChatFolder,\n } = getDispatch();\n\n const [isSignOutDialogOpen, setIsSignOutDialogOpen] = useState(false);\n const [isDeleteFolderDialogOpen, setIsDeleteFolderDialogOpen] = useState(false);\n\n const openSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(true);\n }, []);\n\n const closeSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(false);\n }, []);\n\n const openDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(true);\n }, []);\n\n const closeDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(false);\n }, []);\n\n const handleSignOutMessage = useCallback(() => {\n closeSignOutConfirmation();\n signOut();\n }, [closeSignOutConfirmation, signOut]);\n\n const handleDeleteFolderMessage = useCallback(() => {\n closeDeleteFolderConfirmation();\n deleteChatFolder({ id: editedFolderId });\n onReset();\n }, [editedFolderId, closeDeleteFolderConfirmation, deleteChatFolder, onReset]);\n\n const SettingsMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n const lang = useLang();\n\n function renderHeaderContent() {\n switch (currentScreen) {\n case SettingsScreens.EditProfile:\n return

{lang('lng_settings_information')}

;\n case SettingsScreens.General:\n return

{lang('General')}

;\n case SettingsScreens.QuickReaction:\n return

{lang('DoubleTapSetting')}

;\n case SettingsScreens.Notifications:\n return

{lang('Notifications')}

;\n case SettingsScreens.DataStorage:\n return

{lang('DataSettings')}

;\n case SettingsScreens.Privacy:\n return

{lang('PrivacySettings')}

;\n case SettingsScreens.Language:\n return

{lang('Language')}

;\n\n case SettingsScreens.GeneralChatBackground:\n return

{lang('ChatBackground')}

;\n case SettingsScreens.GeneralChatBackgroundColor:\n return

{lang('SetColor')}

;\n\n case SettingsScreens.PrivacyPhoneNumber:\n return

{lang('PrivacyPhone')}

;\n case SettingsScreens.PrivacyLastSeen:\n return

{lang('PrivacyLastSeen')}

;\n case SettingsScreens.PrivacyProfilePhoto:\n return

{lang('Privacy.ProfilePhoto')}

;\n case SettingsScreens.PrivacyForwarding:\n return

{lang('PrivacyForwards')}

;\n case SettingsScreens.PrivacyGroupChats:\n return

{lang('AutodownloadGroupChats')}

;\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return

{lang('AlwaysShareWith')}

;\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return

{lang('NeverShareWith')}

;\n\n case SettingsScreens.PrivacyActiveSessions:\n return

{lang('SessionsTitle')}

;\n case SettingsScreens.PrivacyBlockedUsers:\n return

{lang('BlockedUsers')}

;\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaEnabled:\n return

{lang('TwoStepVerification')}

;\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return

{lang('PleaseEnterCurrentPassword')}

;\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return

{lang('PleaseReEnterPassword')}

;\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaChangePasswordHint:\n return

{lang('PasswordHint')}

;\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaRecoveryEmail:\n return

{lang('RecoveryEmailTitle')}

;\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return

Recovery Email Code

;\n case SettingsScreens.TwoFaCongratulations:\n return

{lang('TwoStepVerificationPasswordSet')}

;\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return

{lang('PleaseEnterCurrentPassword')}

;\n\n case SettingsScreens.Folders:\n return

{lang('Filters')}

;\n case SettingsScreens.FoldersCreateFolder:\n return

{lang('FilterNew')}

;\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n
\n

{lang('FilterEdit')}

\n\n {editedFolderId && (\n \n \n {lang('Delete')}\n \n \n )}\n
\n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n
\n {(currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersIncludedChatsFromChatList) ? (\n

{lang('FilterInclude')}

\n ) : (\n

{lang('FilterExclude')}

\n )}\n\n \n \n \n
\n );\n\n default:\n return (\n
\n

{lang('SETTINGS')}

\n\n onScreenSelect(SettingsScreens.EditProfile)}\n ariaLabel={lang('lng_settings_information')}\n >\n \n \n \n {lang('LogOutTitle')}\n \n
\n );\n }\n }\n\n return (\n
\n \n \n \n {renderHeaderContent()}\n \n \n
\n );\n};\n\nexport default memo(SettingsHeader);\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ProfileInfo from '../../common/ProfileInfo';\nimport ChatExtra from '../../common/ChatExtra';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUser?: ApiUser;\n lastSyncTime?: number;\n};\n\nconst SettingsMain: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentUser,\n lastSyncTime,\n}) => {\n const { loadProfilePhotos } = getDispatch();\n\n const lang = useLang();\n const profileId = currentUser?.id;\n\n useEffect(() => {\n if (profileId && lastSyncTime) {\n loadProfilePhotos({ profileId });\n }\n }, [lastSyncTime, profileId, loadProfilePhotos]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Main);\n\n return (\n
\n
\n {currentUser && (\n \n )}\n {currentUser && (\n \n )}\n onScreenSelect(SettingsScreens.General)}\n >\n {lang('Telegram.GeneralSettingsViewController')}\n \n onScreenSelect(SettingsScreens.Notifications)}\n >\n {lang('Notifications')}\n \n onScreenSelect(SettingsScreens.Privacy)}\n >\n {lang('PrivacySettings')}\n \n onScreenSelect(SettingsScreens.DataStorage)}\n >\n {lang('DataSettings')}\n \n onScreenSelect(SettingsScreens.Folders)}\n >\n {lang('Filters')}\n \n onScreenSelect(SettingsScreens.Language)}\n >\n {lang('Language')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId, lastSyncTime } = global;\n\n return {\n currentUser: currentUserId ? selectUser(global, currentUserId) : undefined,\n lastSyncTime,\n };\n },\n)(SettingsMain));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\n\ntype OwnProps = {\n currentUsername?: string;\n asLink?: boolean;\n isLoading?: boolean;\n isUsernameAvailable?: boolean;\n checkUsername: AnyToVoidFunction;\n onChange: (value: string | false) => void;\n};\n\nconst MIN_USERNAME_LENGTH = 5;\nconst MAX_USERNAME_LENGTH = 32;\nconst LINK_PREFIX = 'https://t.me/';\nconst LINK_PREFIX_REGEX = /https:\\/\\/t\\.me\\/?/i;\nconst USERNAME_REGEX = /^([a-zA-Z0-9_]+)$/;\n\nconst runDebouncedForCheckUsername = debounce((cb) => cb(), 250, false);\n\nfunction isUsernameValid(username: string) {\n return username.length >= MIN_USERNAME_LENGTH\n && username.length <= MAX_USERNAME_LENGTH\n && USERNAME_REGEX.test(username);\n}\n\nconst SettingsEditProfile: FC = ({\n currentUsername,\n asLink,\n isLoading,\n isUsernameAvailable,\n checkUsername,\n onChange,\n}) => {\n const [username, setUsername] = useState(currentUsername || '');\n\n const lang = useLang();\n const langPrefix = asLink ? 'SetUrl' : 'Username';\n const label = asLink ? lang('SetUrlPlaceholder') : lang('Username');\n\n const [usernameSuccess, usernameError] = useMemo(() => {\n if (!username.length) {\n return [];\n }\n\n if (username.length < MIN_USERNAME_LENGTH) {\n return [undefined, `${label} is too short`];\n }\n if (username.length > MAX_USERNAME_LENGTH) {\n return [undefined, `${label} is too long`];\n }\n if (!USERNAME_REGEX.test(username)) {\n return [undefined, `${label} contains invalid characters`];\n }\n\n if (isUsernameAvailable === undefined) {\n return [];\n }\n\n // Variable `isUsernameAvailable` is initialized with `undefined`, so a strict false check is required\n return [\n isUsernameAvailable ? lang(`${langPrefix}Available`, 'Username') : undefined,\n isUsernameAvailable === false ? lang(`${langPrefix}InUse`) : undefined,\n ];\n }, [username, isUsernameAvailable, lang, langPrefix, label]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [asLink, currentUsername]);\n\n const handleUsernameChange = useCallback((e: ChangeEvent) => {\n const newUsername = e.target.value.trim().replace(LINK_PREFIX_REGEX, '');\n setUsername(newUsername);\n e.target.value = `${asLink ? LINK_PREFIX : ''}${newUsername}`;\n\n const isValid = isUsernameValid(newUsername);\n\n if (isValid) {\n runDebouncedForCheckUsername(() => {\n checkUsername({ username: newUsername });\n });\n }\n\n if (onChange) {\n onChange(isValid ? newUsername : false);\n }\n }, [asLink, checkUsername, onChange]);\n\n return (\n \n );\n};\n\nexport default memo(SettingsEditProfile);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiMediaFormat } from '../../../api/types';\nimport { ProfileEditProgress, SettingsScreens } from '../../../types';\n\nimport { throttle } from '../../../util/schedulers';\nimport { selectUser } from '../../../modules/selectors';\nimport { getChatAvatarHash } from '../../../modules/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport InputText from '../../ui/InputText';\nimport renderText from '../../common/helpers/renderText';\nimport UsernameInput from '../../common/UsernameInput';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentAvatarHash?: string;\n currentFirstName?: string;\n currentLastName?: string;\n currentBio?: string;\n currentUsername?: string;\n progress?: ProfileEditProgress;\n isUsernameAvailable?: boolean;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst MAX_BIO_LENGTH = 70;\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide your first name';\nconst ERROR_BIO_TOO_LONG = 'Bio can\\' be longer than 70 characters';\n\nconst SettingsEditProfile: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n}) => {\n const {\n loadCurrentUser,\n updateProfile,\n checkUsername,\n } = getDispatch();\n\n const lang = useLang();\n\n const [isUsernameTouched, setIsUsernameTouched] = useState(false);\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n\n const [photo, setPhoto] = useState();\n const [firstName, setFirstName] = useState(currentFirstName || '');\n const [lastName, setLastName] = useState(currentLastName || '');\n const [bio, setBio] = useState(currentBio || '');\n const [username, setUsername] = useState(currentUsername || '');\n\n const currentAvatarBlobUrl = useMedia(currentAvatarHash, false, ApiMediaFormat.BlobUrl);\n\n const isLoading = progress === ProfileEditProgress.InProgress;\n const isUsernameError = username === false;\n\n const isSaveButtonShown = useMemo(() => {\n if (isUsernameError) {\n return false;\n }\n\n return Boolean(photo) || isProfileFieldsTouched || isUsernameAvailable === true;\n }, [photo, isProfileFieldsTouched, isUsernameError, isUsernameAvailable]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.EditProfile);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadCurrentUser();\n });\n }, [loadCurrentUser]);\n\n useEffect(() => {\n setPhoto(undefined);\n }, [currentAvatarBlobUrl]);\n\n useEffect(() => {\n setFirstName(currentFirstName || '');\n setLastName(currentLastName || '');\n setBio(currentBio || '');\n }, [currentFirstName, currentLastName, currentBio]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [currentUsername]);\n\n useEffect(() => {\n if (progress === ProfileEditProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setIsUsernameTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handlePhotoChange = useCallback((newPhoto: File) => {\n setPhoto(newPhoto);\n }, []);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleBioChange = useCallback((e: ChangeEvent) => {\n setBio(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUsernameChange = useCallback((value: string | false) => {\n setUsername(value);\n setIsUsernameTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n const trimmedBio = bio.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n return;\n }\n\n if (trimmedBio.length > MAX_BIO_LENGTH) {\n setError(ERROR_BIO_TOO_LONG);\n return;\n }\n\n updateProfile({\n photo,\n ...(isProfileFieldsTouched && {\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n bio: trimmedBio,\n }),\n ...(isUsernameTouched && {\n username,\n }),\n });\n }, [\n photo,\n firstName, lastName, bio, isProfileFieldsTouched,\n username, isUsernameTouched,\n updateProfile,\n ]);\n\n return (\n
\n
\n
\n \n \n \n \n\n

\n {renderText(lang('lng_settings_about_bio'), ['br', 'simple_markdown'])}\n

\n
\n\n
\n

{lang('Username')}

\n\n \n\n

\n {renderText(lang('UsernameHelp'), ['br', 'simple_markdown'])}\n

\n {username && (\n

\n {lang('lng_username_link')}
\n https://t.me/{username}\n

\n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n const { progress, isUsernameAvailable } = global.profileEdit || {};\n const currentUser = currentUserId ? selectUser(global, currentUserId) : undefined;\n\n if (!currentUser) {\n return {\n progress,\n isUsernameAvailable,\n };\n }\n\n const {\n firstName: currentFirstName,\n lastName: currentLastName,\n username: currentUsername,\n fullInfo,\n } = currentUser;\n const { bio: currentBio } = fullInfo || {};\n const currentAvatarHash = getChatAvatarHash(currentUser);\n\n return {\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n };\n },\n)(SettingsEditProfile));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ISettings } from '../../../types';\n\nimport { AUTODOWNLOAD_FILESIZE_MB_LIMITS } from '../../../config';\nimport { pick } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsDataStorage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n canAutoPlayGifs,\n canAutoPlayVideos,\n autoLoadFileMaxSizeMb,\n}) => {\n const { setSettingOption } = getDispatch();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const renderFileSizeCallback = useCallback((value: number) => {\n return lang('AutodownloadSizeLimitUpTo', lang('FileSize.MB', String(AUTODOWNLOAD_FILESIZE_MB_LIMITS[value]), 'i'));\n }, [lang]);\n\n const handleFileSizeChange = useCallback((value: number) => {\n setSettingOption({ autoLoadFileMaxSizeMb: AUTODOWNLOAD_FILESIZE_MB_LIMITS[value] });\n }, [setSettingOption]);\n\n function renderContentSizeSlider() {\n const value = AUTODOWNLOAD_FILESIZE_MB_LIMITS.indexOf(autoLoadFileMaxSizeMb);\n\n return (\n
\n \n
\n );\n }\n\n function renderAutoDownloadBlock(\n title: string,\n key: 'Photo' | 'Video' | 'File',\n canAutoLoadFromContacts: boolean,\n canAutoLoadInPrivateChats: boolean,\n canAutoLoadInGroups: boolean,\n canAutoLoadInChannels: boolean,\n ) {\n return (\n
\n

{title}

\n\n setSettingOption({ [`canAutoLoad${key}FromContacts`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InPrivateChats`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InGroups`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InChannels`]: isChecked })}\n />\n\n {key === 'File' && renderContentSizeSlider()}\n
\n );\n }\n\n return (\n
\n {renderAutoDownloadBlock(\n lang('AutoDownloadPhotosTitle'),\n 'Photo',\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n )}\n {renderAutoDownloadBlock(\n lang('AutoDownloadVideosTitle'),\n 'Video',\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n )}\n {renderAutoDownloadBlock(\n 'Auto-download files', // Proper translation is not available yet\n 'File',\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n )}\n\n
\n

{lang('AutoplayMedia')}

\n\n setSettingOption({ canAutoPlayGifs: isChecked })}\n />\n setSettingOption({ canAutoPlayVideos: isChecked })}\n />\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return pick(global.settings.byKey, [\n 'canAutoLoadPhotoFromContacts',\n 'canAutoLoadPhotoInPrivateChats',\n 'canAutoLoadPhotoInGroups',\n 'canAutoLoadPhotoInChannels',\n 'canAutoLoadVideoFromContacts',\n 'canAutoLoadVideoInPrivateChats',\n 'canAutoLoadVideoInGroups',\n 'canAutoLoadVideoInChannels',\n 'canAutoLoadFileFromContacts',\n 'canAutoLoadFileInPrivateChats',\n 'canAutoLoadFileInGroups',\n 'canAutoLoadFileInChannels',\n 'canAutoPlayGifs',\n 'canAutoPlayVideos',\n 'autoLoadFileMaxSizeMb',\n ]);\n },\n)(SettingsDataStorage));\n","import React, {\n FC, memo, useMemo, useCallback, useState, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { throttle } from '../../../../util/schedulers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport { getFolderDescriptionText } from '../../../../modules/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForChatsCount } from '../../../../hooks/useFolderManager';\n\nimport ListItem from '../../../ui/ListItem';\nimport Button from '../../../ui/Button';\nimport Loading from '../../../ui/Loading';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\n\ntype OwnProps = {\n isActive?: boolean;\n onCreateFolder: () => void;\n onEditFolder: (folder: ApiChatFolder) => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n orderedFolderIds?: number[];\n foldersById: Record;\n recommendedChatFolders?: ApiChatFolder[];\n};\n\nconst runThrottledForLoadRecommended = throttle((cb) => cb(), 60000, true);\n\nconst MAX_ALLOWED_FOLDERS = 10;\n\nconst SettingsFoldersMain: FC = ({\n isActive,\n onCreateFolder,\n onEditFolder,\n onScreenSelect,\n onReset,\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n}) => {\n const {\n loadRecommendedChatFolders,\n addChatFolder,\n showDialog,\n } = getDispatch();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersAll').then(setAnimationData);\n }\n }, [animationData]);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottledForLoadRecommended(() => {\n loadRecommendedChatFolders();\n });\n }, [loadRecommendedChatFolders]);\n\n const handleCreateFolder = useCallback(() => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n onCreateFolder();\n }, [foldersById, showDialog, onCreateFolder]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Folders);\n\n const chatsCountByFolderId = useFolderManagerForChatsCount();\n const userFolders = useMemo(() => {\n if (!orderedFolderIds) {\n return undefined;\n }\n\n return orderedFolderIds.map((id) => {\n const folder = foldersById[id];\n\n return {\n id: folder.id,\n title: folder.title,\n subtitle: getFolderDescriptionText(lang, folder, chatsCountByFolderId[folder.id]),\n };\n });\n }, [orderedFolderIds, foldersById, lang, chatsCountByFolderId]);\n\n const handleCreateFolderFromRecommended = useCallback((folder: ApiChatFolder) => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n addChatFolder({ folder });\n }, [foldersById, addChatFolder, showDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n

\n {lang('CreateNewFilterInfo')}\n

\n\n \n \n {lang('CreateNewFilter')}\n \n
\n\n
\n

{lang('Filters')}

\n\n {userFolders?.length ? userFolders.map((folder) => (\n onEditFolder(foldersById[folder.id])}\n >\n {folder.title}\n {folder.subtitle}\n \n )) : userFolders && !userFolders.length ? (\n

\n You have no folders yet.\n

\n ) : }\n
\n\n {(recommendedChatFolders && Boolean(recommendedChatFolders.length)) && (\n
\n

\n {lang('FilterRecommended')}\n

\n\n {recommendedChatFolders.map((folder) => (\n handleCreateFolderFromRecommended(folder)}\n >\n
\n
\n {folder.title}\n {folder.description}\n
\n\n \n {lang('Add')}\n \n
\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n orderedIds: orderedFolderIds,\n byId: foldersById,\n recommended: recommendedChatFolders,\n } = global.chatFolders;\n\n return {\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n };\n },\n)(SettingsFoldersMain));\n","import React, { FC } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\n\nimport './ShowMoreButton.scss';\n\ntype OwnProps = {\n count: number;\n itemName: string;\n itemPluralName?: string;\n isLoading?: boolean;\n onClick: () => void;\n};\n\nconst ShowMoreButton: FC = ({\n count,\n itemName,\n itemPluralName,\n isLoading,\n onClick,\n}) => {\n const lang = useLang();\n\n return (\n \n \n Show {count} more {count > 1 ? itemPluralName || `${itemName}s` : itemName}\n \n );\n};\n\nexport default ShowMoreButton;\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { findIntersectionWithSet } from '../../../../util/iteratees';\nimport { isUserId } from '../../../../modules/helpers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport {\n EXCLUDED_CHAT_TYPES,\n FolderEditDispatch,\n FoldersState,\n INCLUDED_CHAT_TYPES,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\nimport InputText from '../../../ui/InputText';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport FloatingActionButton from '../../../ui/FloatingActionButton';\nimport Spinner from '../../../ui/Spinner';\nimport ShowMoreButton from '../../../ui/ShowMoreButton';\n\ntype OwnProps = {\n state: FoldersState;\n dispatch: FolderEditDispatch;\n onAddIncludedChats: () => void;\n onAddExcludedChats: () => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n onBack: () => void;\n};\n\ntype StateProps = {\n loadedActiveChatIds?: string[];\n loadedArchivedChatIds?: string[];\n};\n\nconst SUBMIT_TIMEOUT = 500;\n\nconst INITIAL_CHATS_LIMIT = 5;\n\nconst ERROR_NO_TITLE = 'Please provide a title for this folder.';\nconst ERROR_NO_CHATS = 'ChatList.Filter.Error.Empty';\n\nconst SettingsFoldersEdit: FC = ({\n state,\n dispatch,\n onAddIncludedChats,\n onAddExcludedChats,\n isActive,\n onScreenSelect,\n onReset,\n onBack,\n loadedActiveChatIds,\n loadedArchivedChatIds,\n}) => {\n const {\n editChatFolder,\n addChatFolder,\n } = getDispatch();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n const [isIncludedChatsListExpanded, setIsIncludedChatsListExpanded] = useState(false);\n const [isExcludedChatsListExpanded, setIsExcludedChatsListExpanded] = useState(false);\n\n const {\n selectedChatIds: includedChatIds,\n selectedChatTypes: includedChatTypes,\n } = selectChatFilters(state, 'included');\n const {\n selectedChatIds: excludedChatIds,\n selectedChatTypes: excludedChatTypes,\n } = selectChatFilters(state, 'excluded');\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersNew').then(setAnimationData);\n }\n }, [animationData]);\n\n useEffect(() => {\n setIsIncludedChatsListExpanded(false);\n setIsExcludedChatsListExpanded(false);\n }, [state.folderId]);\n\n const [visibleIncludedChatIds, visibleExcludedChatIds] = useMemo(() => {\n const allLoadedChatsSet = new Set([\n ...(loadedActiveChatIds || []),\n ...(loadedArchivedChatIds || []),\n ]);\n\n const loadedIncludedChatIds = findIntersectionWithSet(includedChatIds, allLoadedChatsSet);\n const loadedExcludedChatIds = findIntersectionWithSet(excludedChatIds, allLoadedChatsSet);\n\n return [\n isIncludedChatsListExpanded\n ? loadedIncludedChatIds\n : loadedIncludedChatIds.slice(0, INITIAL_CHATS_LIMIT - includedChatTypes.length),\n isExcludedChatsListExpanded\n ? loadedExcludedChatIds\n : loadedExcludedChatIds.slice(0, INITIAL_CHATS_LIMIT - excludedChatTypes.length),\n ];\n }, [\n excludedChatIds, includedChatIds, includedChatTypes, excludedChatTypes,\n isExcludedChatsListExpanded, isIncludedChatsListExpanded,\n loadedActiveChatIds, loadedArchivedChatIds,\n ]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onBack, onScreenSelect, state.mode === 'edit'\n ? SettingsScreens.FoldersEditFolder\n : SettingsScreens.FoldersCreateFolder);\n\n function handleChange(event: React.ChangeEvent) {\n const { currentTarget } = event;\n dispatch({ type: 'setTitle', payload: currentTarget.value.trim() });\n }\n\n function handleSubmit() {\n const { title } = state.folder;\n\n if (!title) {\n dispatch({ type: 'setError', payload: ERROR_NO_TITLE });\n return;\n }\n\n if (!includedChatIds.length && !Object.keys(includedChatTypes).length) {\n dispatch({ type: 'setError', payload: ERROR_NO_CHATS });\n return;\n }\n\n dispatch({ type: 'setIsLoading', payload: true });\n if (state.mode === 'edit') {\n editChatFolder({ id: state.folderId, folderUpdate: state.folder });\n } else {\n addChatFolder({ folder: state.folder });\n }\n\n setTimeout(() => {\n onReset();\n }, SUBMIT_TIMEOUT);\n }\n\n function renderChatType(key: string, mode: 'included' | 'excluded') {\n const chatType = mode === 'included'\n ? INCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key)\n : EXCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key);\n\n if (!chatType) {\n return undefined;\n }\n\n return (\n \n {lang(chatType.title)}\n \n );\n }\n\n function renderChats(mode: 'included' | 'excluded') {\n const selectedChatTypes = mode === 'included' ? includedChatTypes : excludedChatTypes;\n const visibleChatIds = mode === 'included' ? visibleIncludedChatIds : visibleExcludedChatIds;\n\n const isExpanded = mode === 'included' ? isIncludedChatsListExpanded : isExcludedChatsListExpanded;\n const allChatIds = mode === 'included' ? includedChatIds : excludedChatIds;\n const leftChatsCount = allChatIds.length - selectedChatTypes.length - visibleChatIds.length;\n const clickHandler = mode === 'included'\n ? () => setIsIncludedChatsListExpanded(true)\n : () => setIsExcludedChatsListExpanded(true);\n\n return (\n <>\n {selectedChatTypes.map((key) => renderChatType(key, mode))}\n {visibleChatIds.map((id) => (\n \n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n {(!isExpanded && leftChatsCount > 0) && (\n \n )}\n \n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n {state.mode === 'create' && (\n

\n {lang('FilterIncludeInfo')}\n

\n )}\n\n \n
\n\n
\n {state.error && state.error === ERROR_NO_CHATS && (\n

\n {lang(state.error)}\n

\n )}\n\n

{lang('FilterInclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('included')}\n
\n\n
\n

{lang('FilterExclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('excluded')}\n
\n
\n\n \n {state.isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { listIds } = global.chats;\n\n return {\n loadedActiveChatIds: listIds.active,\n loadedArchivedChatIds: listIds.archived,\n };\n },\n)(SettingsFoldersEdit));\n","import React, {\n FC, useCallback, useRef, useEffect, memo,\n} from '../../../../lib/teact/teact';\n\nimport { isUserId } from '../../../../modules/helpers';\nimport {\n INCLUDED_CHAT_TYPES,\n EXCLUDED_CHAT_TYPES,\n FolderChatType,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useInfiniteScroll from '../../../../hooks/useInfiniteScroll';\nimport useLang from '../../../../hooks/useLang';\n\nimport Checkbox from '../../../ui/Checkbox';\nimport InputText from '../../../ui/InputText';\nimport ListItem from '../../../ui/ListItem';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport PickerSelectedItem from '../../../common/PickerSelectedItem';\nimport InfiniteScroll from '../../../ui/InfiniteScroll';\nimport Loading from '../../../ui/Loading';\n\nimport '../../../common/Picker.scss';\nimport './SettingsFoldersChatsPicker.scss';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n chatIds: string[];\n selectedIds: string[];\n selectedChatTypes: string[];\n filterValue?: string;\n onSelectedIdsChange: (ids: string[]) => void;\n onSelectedChatTypesChange: (types: string[]) => void;\n onFilterChange: (value: string) => void;\n};\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\n\nconst MAX_CHATS = 100;\nconst MAX_FULL_ITEMS = 10;\nconst ALWAYS_FULL_ITEMS_COUNT = 5;\n\nconst SettingsFoldersChatsPicker: FC = ({\n mode,\n chatIds,\n selectedIds,\n selectedChatTypes,\n filterValue,\n onSelectedIdsChange,\n onSelectedChatTypesChange,\n onFilterChange,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const chatTypes = mode === 'included' ? INCLUDED_CHAT_TYPES : EXCLUDED_CHAT_TYPES;\n const shouldMinimize = selectedIds.length + selectedChatTypes.length > MAX_FULL_ITEMS;\n const hasMaxChats = selectedIds.length >= MAX_CHATS;\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n });\n }, FOCUS_DELAY_MS);\n }, []);\n\n const handleItemClick = useCallback((id: string) => {\n const newSelectedIds = [...selectedIds];\n if (newSelectedIds.includes(id)) {\n newSelectedIds.splice(newSelectedIds.indexOf(id), 1);\n } else {\n newSelectedIds.push(id);\n }\n onSelectedIdsChange(newSelectedIds);\n }, [selectedIds, onSelectedIdsChange]);\n\n const handleChatTypeClick = useCallback((key: FolderChatType['key']) => {\n const newSelectedChatTypes = [...selectedChatTypes];\n if (newSelectedChatTypes.includes(key)) {\n newSelectedChatTypes.splice(newSelectedChatTypes.indexOf(key), 1);\n } else {\n newSelectedChatTypes.push(key);\n }\n onSelectedChatTypesChange(newSelectedChatTypes);\n }, [selectedChatTypes, onSelectedChatTypesChange]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n onFilterChange(value);\n }, [onFilterChange]);\n\n const lang = useLang();\n\n function renderSelectedChatType(key: string) {\n const selectedType = chatTypes.find(({ key: typeKey }) => key === typeKey);\n if (!selectedType) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n function renderChatType(type: FolderChatType) {\n return (\n handleChatTypeClick(type.key)}\n ripple\n >\n \n

{lang(type.title)}

\n \n \n );\n }\n\n function renderItem(id: string) {\n const isSelected = selectedIds.includes(id);\n\n return (\n handleItemClick(id)}\n ripple\n disabled={!isSelected && hasMaxChats}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n \n );\n }\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, chatIds, Boolean(filterValue));\n\n return (\n
\n
\n {selectedChatTypes.map(renderSelectedChatType)}\n {selectedIds.map((id, i) => (\n \n ))}\n {!hasMaxChats ? (\n \n ) : (\n

\n {`Sorry, you can't add more than ${MAX_CHATS} chats.`}\n

\n )}\n
\n \n {(!viewportIds || !viewportIds.length || viewportIds.includes(chatIds[0])) && (\n <>\n

\n {lang('FilterChatTypes')}\n

\n {chatTypes.map(renderChatType)}\n
\n

\n {lang('FilterChats')}\n

\n \n )}\n\n {viewportIds?.length ? (\n viewportIds.map(renderItem)\n ) : viewportIds && !viewportIds.length ? (\n

Sorry, nothing found.

\n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(SettingsFoldersChatsPicker);\n","import React, {\n FC, memo, useMemo, useCallback,\n} from '../../../../lib/teact/teact';\nimport { getGlobal } from '../../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { unique } from '../../../../util/iteratees';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../../config';\nimport { filterChatsByName } from '../../../../modules/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../../hooks/useFolderManager';\nimport {\n FoldersState,\n FolderEditDispatch,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersChatsPicker from './SettingsFoldersChatsPicker';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFoldersChatFilters: FC = ({\n mode,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const { chatFilter } = state;\n const { selectedChatIds, selectedChatTypes } = selectChatFilters(state, mode, true);\n\n const lang = useLang();\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = [...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []];\n return unique([\n ...selectedChatIds,\n ...filterChatsByName(lang, chatIds, chatsById, chatFilter),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedChatIds, lang, chatFilter]);\n\n const handleFilterChange = useCallback((newFilter: string) => {\n dispatch({\n type: 'setChatFilter',\n payload: newFilter,\n });\n }, [dispatch]);\n\n const handleSelectedIdsChange = useCallback((ids: string[]) => {\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: { ...state.includeFilters, includedChatIds: ids },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: { ...state.excludeFilters, excludedChatIds: ids },\n });\n }\n }, [mode, state, dispatch]);\n\n const handleSelectedChatTypesChange = useCallback((keys: string[]) => {\n const newFilters: Record = {};\n keys.forEach((key) => {\n newFilters[key] = true;\n });\n\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: {\n includedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: {\n excludedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n }\n }, [mode, selectedChatIds, dispatch]);\n\n useHistoryBack(\n isActive, onReset, onScreenSelect,\n mode === 'included' ? SettingsScreens.FoldersIncludedChats : SettingsScreens.FoldersExcludedChats,\n );\n\n if (!displayedIds) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default memo(SettingsFoldersChatFilters);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { FolderEditDispatch, FoldersState } from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersMain from './SettingsFoldersMain';\nimport SettingsFoldersEdit from './SettingsFoldersEdit';\nimport SettingsFoldersChatFilters from './SettingsFoldersChatFilters';\n\nimport './SettingsFolders.scss';\n\nconst TRANSITION_DURATION = 200;\n\nexport type OwnProps = {\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFolders: FC = ({\n currentScreen,\n shownScreen,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n dispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (state.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n state.mode, dispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleCreateFolder = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n }, [onScreenSelect, dispatch]);\n\n const handleEditFolder = useCallback((folder: ApiChatFolder) => {\n dispatch({ type: 'editFolder', payload: folder });\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }, [dispatch, onScreenSelect]);\n\n const handleAddIncludedChats = useCallback(() => {\n dispatch({ type: 'editIncludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersIncludedChatsFromChatList\n : SettingsScreens.FoldersIncludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n const handleAddExcludedChats = useCallback(() => {\n dispatch({ type: 'editExcludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersExcludedChatsFromChatList\n : SettingsScreens.FoldersExcludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n switch (currentScreen) {\n case SettingsScreens.Folders:\n return (\n \n );\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(SettingsFolders);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport { getFirstLetters } from '../../../util/textFormat';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n size?: number;\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCoverAnimated: FC = ({\n size = STICKER_SIZE_PICKER_HEADER,\n stickerSet,\n observeIntersection,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaHash = `stickerSet${stickerSet.id}`;\n const lottieData = useMedia(mediaHash, !isIntersecting, ApiMediaFormat.Lottie);\n const transitionClassNames = useMediaTransition(lottieData);\n\n const firstLetters = useMemo(() => {\n if (lottieData) return undefined;\n\n return getFirstLetters(stickerSet.title, 2);\n }, [lottieData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {lottieData && (\n \n )}\n
\n );\n};\n\nexport default memo(StickerSetCoverAnimated);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiStickerSet } from '../../../api/types';\n\nimport { IS_WEBM_SUPPORTED } from '../../../util/environment';\nimport { getFirstLetters } from '../../../util/textFormat';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\n\ntype OwnProps = {\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCover: FC = ({ stickerSet, observeIntersection }) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaData = useMedia(stickerSet.hasThumbnail && `stickerSet${stickerSet.id}`, !isIntersecting);\n const transitionClassNames = useMediaTransition(mediaData);\n const isGif = stickerSet.isGifs;\n\n const firstLetters = useMemo(() => {\n if ((isGif && !IS_WEBM_SUPPORTED) || !mediaData) return getFirstLetters(stickerSet.title, 2);\n }, [isGif, mediaData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {isGif ? (\n
\n );\n};\n\nexport default memo(StickerSetCover);\n","import React, {\n FC, memo,\n} from '../../../lib/teact/teact';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_GENERAL_SETTINGS } from '../../../config';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport useLang from '../../../hooks/useLang';\n\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport StickerSetCoverAnimated from '../../middle/composer/StickerSetCoverAnimated';\nimport StickerSetCover from '../../middle/composer/StickerSetCover';\nimport StickerButton from '../../common/StickerButton';\n\nimport './SettingsStickerSet.scss';\n\ntype OwnProps = {\n stickerSet?: ApiStickerSet;\n observeIntersection: ObserveFn;\n onClick: (value: ApiSticker) => void;\n};\n\nconst SettingsStickerSet: FC = ({\n stickerSet,\n observeIntersection,\n onClick,\n}) => {\n const lang = useLang();\n\n if (!stickerSet || !stickerSet.stickers) {\n return undefined;\n }\n\n const firstSticker = stickerSet.stickers?.[0];\n\n if (stickerSet.hasThumbnail || !firstSticker) {\n return (\n firstSticker && onClick(firstSticker)}\n >\n \n {stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n } else {\n return (\n onClick(firstSticker)}\n >\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n }\n};\n\nexport default memo(SettingsStickerSet);\n","import React, {\n FC, useCallback, memo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ISettings, TimeFormat } from '../../../types';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { IS_IOS, IS_MAC_OS, IS_TOUCH_ENV } from '../../../util/environment';\nimport { pick } from '../../../util/iteratees';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RangeSlider from '../../ui/RangeSlider';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup, { IRadioOption } from '../../ui/RadioGroup';\nimport SettingsStickerSet from './SettingsStickerSet';\nimport StickerSetModal from '../../common/StickerSetModal.async';\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Pick & {\n stickerSetIds?: string[];\n stickerSetsById?: Record;\n defaultReaction?: string;\n };\n\nconst ANIMATION_LEVEL_OPTIONS = [\n 'Solid and Steady',\n 'Nice and Fast',\n 'Lots of Stuff',\n];\n\nconst TIME_FORMAT_OPTIONS: IRadioOption[] = [{\n label: '12-hour',\n value: '12h',\n}, {\n label: '24-hour',\n value: '24h',\n}];\n\nconst SettingsGeneral: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n stickerSetIds,\n stickerSetsById,\n defaultReaction,\n messageTextSize,\n animationLevel,\n messageSendKeyCombo,\n shouldSuggestStickers,\n shouldLoopStickers,\n timeFormat,\n}) => {\n const {\n setSettingOption,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const stickerSettingsRef = useRef(null);\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: stickerSettingsRef });\n const [isModalOpen, openModal, closeModal] = useFlag();\n const [sticker, setSticker] = useState();\n\n const lang = useLang();\n\n const KEYBOARD_SEND_OPTIONS = !IS_TOUCH_ENV ? [\n { value: 'enter', label: lang('lng_settings_send_enter'), subLabel: 'New line by Shift + Enter' },\n {\n value: 'ctrl-enter',\n label: lang(IS_MAC_OS ? 'lng_settings_send_cmdenter' : 'lng_settings_send_ctrlenter'),\n subLabel: 'New line by Enter',\n },\n ] : undefined;\n\n const handleAnimationLevelChange = useCallback((newLevel: number) => {\n ANIMATION_LEVEL_OPTIONS.forEach((_, i) => {\n document.body.classList.toggle(`animation-level-${i}`, newLevel === i);\n });\n\n setSettingOption({ animationLevel: newLevel });\n }, [setSettingOption]);\n\n const handleMessageTextSizeChange = useCallback((newSize: number) => {\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(newSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(newSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${newSize}px`);\n document.documentElement.setAttribute('data-message-text-size', newSize.toString());\n\n setSettingOption({ messageTextSize: newSize });\n }, [setSettingOption]);\n\n const handleTimeFormatChange = useCallback((newTimeFormat: string) => {\n setSettingOption({ timeFormat: newTimeFormat });\n setSettingOption({ wasTimeFormatSetManually: true });\n\n setTimeFormat(newTimeFormat as TimeFormat);\n }, [setSettingOption]);\n\n const handleStickerSetClick = useCallback((value: ApiSticker) => {\n setSticker(value);\n openModal();\n }, [openModal]);\n\n const stickerSets = stickerSetIds && stickerSetIds.map((id: string) => {\n return stickerSetsById?.[id]?.installedDate ? stickerSetsById[id] : false;\n }).filter(Boolean as any);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n return (\n
\n
\n

{lang('SETTINGS')}

\n\n \n\n onScreenSelect(SettingsScreens.GeneralChatBackground)}\n >\n {lang('ChatBackground')}\n \n
\n\n
\n

\n Time Format\n

\n \n
\n\n
\n

\n Animation Level\n

\n

\n Choose the desired animations amount.\n

\n\n \n
\n\n {KEYBOARD_SEND_OPTIONS && (\n
\n

{lang('VoiceOver.Keyboard')}

\n\n setSettingOption({ messageSendKeyCombo: value })}\n selected={messageSendKeyCombo}\n />\n
\n )}\n\n
\n

{lang('AccDescrStickers')}

\n\n {defaultReaction && (\n onScreenSelect(SettingsScreens.QuickReaction)}\n >\n \n
{lang('DoubleTapSetting')}
\n \n )}\n\n setSettingOption({ shouldSuggestStickers: isChecked })}\n />\n setSettingOption({ shouldLoopStickers: isChecked })}\n />\n\n
\n {stickerSets && stickerSets.map((stickerSet: ApiStickerSet) => (\n \n ))}\n
\n {sticker && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n ...pick(global.settings.byKey, [\n 'messageTextSize',\n 'animationLevel',\n 'messageSendKeyCombo',\n 'shouldSuggestStickers',\n 'shouldLoopStickers',\n 'isSensitiveEnabled',\n 'canChangeSensitive',\n 'timeFormat',\n ]),\n stickerSetIds: global.stickers.added.setIds,\n stickerSetsById: global.stickers.setsById,\n defaultReaction: global.appConfig?.defaultReaction,\n };\n },\n)(SettingsGeneral));\n","let fileSelector: HTMLInputElement;\n\nexport function openSystemFilesDialog(accept = '*', callback: (e: Event) => void, noMultiple = false) {\n if (!fileSelector) {\n fileSelector = document.createElement('input');\n fileSelector.setAttribute('type', 'file');\n }\n\n fileSelector.setAttribute('accept', accept);\n\n if (noMultiple) {\n fileSelector.removeAttribute('multiple');\n } else {\n fileSelector.setAttribute('multiple', 'multiple');\n }\n\n // eslint-disable-next-line no-null/no-null\n fileSelector.onchange = null;\n fileSelector.value = '';\n fileSelector.onchange = callback;\n\n fileSelector.click();\n}\n","/* eslint-disable eqeqeq */\n/* eslint-disable prefer-template */\n/* eslint-disable prefer-const */\n/* eslint-disable prefer-destructuring */\n/* eslint-disable one-var */\n/* eslint-disable one-var-declaration-per-line */\n\nimport { preloadImage } from './files';\n\n/**\n * HEX > RGB\n * input: 'xxxxxx' (ex. 'ed15fa') case-insensitive\n * output: [r, g, b] ([0-255, 0-255, 0-255])\n */\nexport function hex2rgb(param: string): [number, number, number] {\n return [\n parseInt(param.substring(0, 2), 16),\n parseInt(param.substring(2, 4), 16),\n parseInt(param.substring(4, 6), 16),\n ];\n}\n\n/**\n * RGB > HEX\n * input: [r, g, b] ([0-255, 0-255, 0-255])\n * output: 'xxxxxx' (ex. 'ff0000')\n */\nexport function rgb2hex(param: [number, number, number]) {\n const p0 = param[0].toString(16);\n const p1 = param[1].toString(16);\n const p2 = param[2].toString(16);\n return (p0.length == 1 ? '0' + p0 : p0) + (p1.length == 1 ? '0' + p1 : p1) + (p2.length == 1 ? '0' + p2 : p2);\n}\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nexport function rgb2hsb([r, g, b]: [number, number, number]): [number, number, number] {\n r /= 255;\n g /= 255;\n b /= 255;\n\n let max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h!: number, s: number, v: number = max;\n\n let d = max - min;\n s = max == 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, v];\n}\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nexport function hsb2rgb([h, s, v]: [number, number, number]): [number, number, number] {\n let r!: number, g!: number, b!: number;\n\n let i = Math.floor(h * 6);\n let f = h * 6 - i;\n let p = v * (1 - s);\n let q = v * (1 - f * s);\n let t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n ];\n}\n\nexport async function getAverageColor(url: string): Promise<[number, number, number]> {\n // Only visit every 5 pixels\n const blockSize = 5;\n const defaultRGB: [number, number, number] = [0, 0, 0];\n let data;\n let width;\n let height;\n let i = -4;\n let length;\n let rgb: [number, number, number] = [0, 0, 0];\n let count = 0;\n\n const canvas = document.createElement('canvas');\n const context = canvas.getContext && canvas.getContext('2d');\n if (!context) {\n return defaultRGB;\n }\n\n const image = await preloadImage(url);\n height = image.naturalHeight || image.offsetHeight || image.height;\n width = image.naturalWidth || image.offsetWidth || image.width;\n canvas.height = height;\n canvas.width = width;\n\n context.drawImage(image, 0, 0);\n\n try {\n data = context.getImageData(0, 0, width, height);\n } catch (e) {\n return defaultRGB;\n }\n\n length = data.data.length;\n\n // eslint-disable-next-line no-cond-assign\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb[0] += data.data[i];\n rgb[1] += data.data[i + 1];\n rgb[2] += data.data[i + 2];\n }\n\n rgb[0] = Math.floor(rgb[0] / count);\n rgb[1] = Math.floor(rgb[1] / count);\n rgb[2] = Math.floor(rgb[2] / count);\n\n return rgb;\n}\n\n// eslint-disable-next-line max-len\n// Function was adapted from https://github.com/telegramdesktop/tdesktop/blob/35ff621b5b52f7e3553fb0f990ea13ade7101b8e/Telegram/SourceFiles/data/data_wall_paper.cpp#L518\nexport function getPatternColor(rgbColor: [number, number, number]) {\n let [hue, saturation, value] = rgb2hsb(rgbColor);\n\n saturation = Math.min(1, saturation + 0.05 + 0.1 * (1 - saturation));\n value = value > 0.5\n ? Math.max(0, value * 0.65)\n : Math.max(0, Math.min(1, 1 - value * 0.65));\n\n return `hsla(${hue * 360}, ${saturation * 100}%, ${value * 100}%, .4)`;\n}\n","import React, {\n FC, memo, useCallback, useEffect, useState, useRef,\n} from '../../../lib/teact/teact';\nimport { ApiWallpaper } from '../../../api/types';\nimport { ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\n\nimport { CUSTOM_BG_CACHE_NAME } from '../../../config';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { fetchBlob } from '../../../util/files';\nimport buildClassName from '../../../util/buildClassName';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useCanvasBlur from '../../../hooks/useCanvasBlur';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nimport './WallpaperTile.scss';\n\ntype OwnProps = {\n wallpaper: ApiWallpaper;\n theme: ThemeKey;\n isSelected: boolean;\n onClick: (slug: string) => void;\n};\n\nconst WallpaperTile: FC = ({\n wallpaper,\n theme,\n isSelected,\n onClick,\n}) => {\n const { slug, document } = wallpaper;\n const localMediaHash = `wallpaper${document.id!}`;\n const localBlobUrl = document.previewBlobUrl;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`);\n const thumbRef = useCanvasBlur(document.thumbnail?.dataUri, Boolean(previewBlobUrl), true);\n const { transitionClassNames } = useShowTransition(\n Boolean(previewBlobUrl || localBlobUrl),\n undefined,\n undefined,\n 'slow',\n );\n const [isLoadAllowed, setIsLoadAllowed] = useState(false);\n const {\n mediaData: fullMedia, loadProgress,\n } = useMediaWithLoadProgress(localMediaHash, !isLoadAllowed);\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n const { shouldRender: shouldRenderSpinner, transitionClassNames: spinnerClassNames } = useShowTransition(\n (isLoadAllowed && !fullMedia) || slug === UPLOADING_WALLPAPER_SLUG,\n undefined,\n wasLoadDisabled,\n 'slow',\n );\n // To prevent triggering of the effect for useCallback\n const cacheKeyRef = useRef();\n cacheKeyRef.current = theme;\n\n const handleSelect = useCallback(() => {\n (async () => {\n const blob = await fetchBlob(fullMedia!);\n await cacheApi.save(CUSTOM_BG_CACHE_NAME, cacheKeyRef.current!, blob);\n onClick(slug);\n })();\n }, [fullMedia, onClick, slug]);\n\n useEffect(() => {\n if (fullMedia) {\n handleSelect();\n }\n }, [fullMedia, handleSelect]);\n\n const handleClick = useCallback(() => {\n if (fullMedia) {\n handleSelect();\n } else {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n }\n }, [fullMedia, handleSelect]);\n\n const className = buildClassName(\n 'WallpaperTile',\n isSelected && 'selected',\n );\n\n return (\n
\n
\n \n \n {shouldRenderSpinner && (\n
\n \n
\n )}\n
\n
\n );\n};\n\nexport default memo(WallpaperTile);\n","import React, {\n FC, memo, useEffect, useCallback, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\nimport { ApiWallpaper } from '../../../api/types';\n\nimport { DARK_THEME_PATTERN_COLOR, DEFAULT_PATTERN_COLOR } from '../../../config';\nimport { throttle } from '../../../util/schedulers';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport { getAverageColor, getPatternColor, rgb2hex } from '../../../util/colors';\nimport { selectTheme } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Loading from '../../ui/Loading';\nimport WallpaperTile from './WallpaperTile';\n\nimport './SettingsGeneralBackground.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n background?: string;\n isBlurred?: boolean;\n loadedWallpapers?: ApiWallpaper[];\n theme: ThemeKey;\n};\n\nconst SUPPORTED_TYPES = 'image/jpeg';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n}) => {\n const {\n loadWallpapers,\n uploadWallpaper,\n setThemeSettings,\n } = getDispatch();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadWallpapers();\n });\n }, [loadWallpapers]);\n\n const handleFileSelect = useCallback((e: Event) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n uploadWallpaper(files[0]);\n }\n }, [uploadWallpaper]);\n\n const handleUploadWallpaper = useCallback(() => {\n openSystemFilesDialog(SUPPORTED_TYPES, handleFileSelect, true);\n }, [handleFileSelect]);\n\n const handleSetColor = useCallback(() => {\n onScreenSelect(SettingsScreens.GeneralChatBackgroundColor);\n }, [onScreenSelect]);\n\n const handleResetToDefault = useCallback(() => {\n setThemeSettings({\n theme,\n background: undefined,\n backgroundColor: undefined,\n isBlurred: true,\n patternColor: theme === 'dark' ? DARK_THEME_PATTERN_COLOR : DEFAULT_PATTERN_COLOR,\n });\n }, [setThemeSettings, theme]);\n\n const handleWallPaperSelect = useCallback((slug: string) => {\n setThemeSettings({ theme: themeRef.current, background: slug });\n const currentWallpaper = loadedWallpapers && loadedWallpapers.find((wallpaper) => wallpaper.slug === slug);\n if (currentWallpaper?.document.thumbnail) {\n getAverageColor(currentWallpaper.document.thumbnail.dataUri)\n .then((color) => {\n const patternColor = getPatternColor(color);\n const rgbColor = `#${rgb2hex(color)}`;\n setThemeSettings({ theme: themeRef.current, backgroundColor: rgbColor, patternColor });\n });\n }\n }, [loadedWallpapers, setThemeSettings]);\n\n const handleWallPaperBlurChange = useCallback((e: React.ChangeEvent) => {\n setThemeSettings({ theme: themeRef.current, isBlurred: e.target.checked });\n }, [setThemeSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackground);\n\n const isUploading = loadedWallpapers?.[0] && loadedWallpapers[0].slug === UPLOADING_WALLPAPER_SLUG;\n\n return (\n
\n
\n \n {lang('UploadImage')}\n \n\n \n {lang('SetColor')}\n \n\n \n {lang('ThemeResetToDefaults')}\n \n\n \n
\n\n {loadedWallpapers ? (\n
\n {loadedWallpapers.map((wallpaper) => (\n \n ))}\n
\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, isBlurred } = global.settings.themes[theme] || {};\n const { loadedWallpapers } = global.settings;\n\n return {\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent, MutableRefObject, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens, ThemeKey } from '../../../types';\n\nimport { pick } from '../../../util/iteratees';\nimport {\n getPatternColor, hex2rgb, hsb2rgb, rgb2hex, rgb2hsb,\n} from '../../../util/colors';\nimport { captureEvents, RealTouchEvent } from '../../../util/captureEvents';\nimport { selectTheme } from '../../../modules/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\n\nimport './SettingsGeneralBackgroundColor.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n backgroundColor?: string;\n theme: ThemeKey;\n};\n\ninterface CanvasRects {\n colorRect: {\n offsetLeft: number;\n top: number;\n width: number;\n height: number;\n };\n hueRect: {\n offsetLeft: number;\n width: number;\n };\n}\n\nconst DEFAULT_HSB = rgb2hsb(hex2rgb('e6ebee'));\nconst PREDEFINED_COLORS = [\n '#e6ebee', '#b2cee1', '#008dd0', '#c6e7cb', '#c4e1a6', '#60b16e',\n '#ccd0af', '#a6a997', '#7a7072', '#fdd7af', '#fdb76e', '#dd8851',\n];\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n theme,\n backgroundColor,\n}) => {\n const { setThemeSettings } = getDispatch();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const colorPickerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const huePickerRef = useRef(null);\n const isFirstRunRef = useRef(true);\n\n const [hsb, setHsb] = useState(getInitialHsb(backgroundColor));\n // Cache for drag handlers\n const hsbRef = useRef(hsb);\n useEffect(() => {\n hsbRef.current = hsb;\n }, [hsb]);\n\n const [isDragging, markIsDragging, unmarkIsDragging] = useFlag();\n const [rgbInput, setRgbInput] = useState('');\n const [hexInput, setHexInput] = useState('');\n\n const rectsRef = useRef();\n const colorCtxRef = useRef();\n\n // Setup: cache rects, subscribe for drag events\n useEffect(() => {\n // We use `offsetLeft` instead of `left` to support screen transition\n const colorRect = {\n offsetLeft: colorPickerRef.current!.offsetLeft,\n ...pick(colorPickerRef.current!.getBoundingClientRect(), ['top', 'width', 'height']),\n };\n const hueRect = {\n offsetLeft: huePickerRef.current!.offsetLeft,\n ...pick(huePickerRef.current!.getBoundingClientRect(), ['width']),\n };\n\n rectsRef.current = { colorRect, hueRect };\n\n function handleColorDrag(e: MouseEvent | RealTouchEvent) {\n const colorPosition = [\n Math.min(Math.max(0, e.pageX! - colorRect.offsetLeft), colorRect.width - 1),\n Math.min(Math.max(0, e.pageY! - colorRect.top + containerRef.current!.scrollTop), colorRect.height - 1),\n ];\n\n const { huePosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(colorPickerRef.current!, {\n onCapture: handleColorDrag,\n onDrag: handleColorDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n\n function handleHueDrag(e: MouseEvent | RealTouchEvent) {\n const { colorPosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n const huePosition = Math.min(Math.max(0, e.pageX! - hueRect.offsetLeft), hueRect.width - 1);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(huePickerRef.current!, {\n onCapture: handleHueDrag,\n onDrag: handleHueDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n }, [markIsDragging, unmarkIsDragging]);\n\n const { colorPosition = [0, 0], huePosition = 0 } = rectsRef.current ? hsb2positions(hsb, rectsRef.current) : {};\n const hex = rgb2hex(hsb2rgb(hsb));\n const hue = hsb[0];\n const hueHex = rgb2hex(hsb2rgb([hue, 1, 1]));\n\n // Save value and update inputs when HSL changes\n useEffect(() => {\n const rgb = hsb2rgb(hsb);\n const color = `#${rgb2hex(rgb)}`;\n\n setRgbInput(rgb.join(', '));\n setHexInput(color);\n\n if (!isFirstRunRef.current) {\n const patternColor = getPatternColor(rgb);\n setThemeSettings({\n theme: themeRef.current,\n background: undefined,\n backgroundColor: color,\n patternColor,\n });\n }\n isFirstRunRef.current = false;\n }, [hsb, setThemeSettings]);\n\n // Redraw color picker when hue changes\n useEffect(() => {\n drawColor(colorPickerRef.current!.firstChild as HTMLCanvasElement, hue, colorCtxRef, rectsRef);\n }, [hue]);\n\n // Initially draw hue picker\n useEffect(() => {\n drawHue(huePickerRef.current!.firstChild as HTMLCanvasElement);\n }, []);\n\n const handleRgbChange = useCallback((e: ChangeEvent) => {\n const rgbValue = e.currentTarget.value.replace(/[^\\d, ]/g, '').slice(0, 13);\n\n if (rgbValue.match(/^\\d{1,3},\\s?\\d{1,3},\\s?\\d{1,3}$/)) {\n const rgb = rgbValue.split(',').map((channel) => Number(channel.trim())) as [number, number, number];\n setHsb(rgb2hsb(rgb));\n }\n\n e.currentTarget.value = rgbValue;\n }, []);\n\n const handleHexChange = useCallback((e: ChangeEvent) => {\n const hexValue = e.currentTarget.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n\n if (hexValue.match(/^#?[0-9a-fA-F]{6}$/)) {\n setHsb(rgb2hsb(hex2rgb(hexValue.replace('#', ''))));\n }\n\n e.currentTarget.value = hexValue;\n }, []);\n\n const handlePredefinedColorClick = useCallback((e: React.MouseEvent) => {\n setHsb(rgb2hsb(hex2rgb(e.currentTarget.dataset.color!.replace('#', ''))));\n }, []);\n\n const className = buildClassName(\n 'SettingsGeneralBackgroundColor settings-content custom-scroll',\n isDragging && 'is-dragging',\n );\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackgroundColor);\n\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n {PREDEFINED_COLORS.map((color) => (\n \n ))}\n
\n
\n );\n};\n\nfunction getInitialHsb(backgroundColor?: string) {\n return backgroundColor && backgroundColor.startsWith('#')\n ? rgb2hsb(hex2rgb(backgroundColor.replace('#', '')))\n : DEFAULT_HSB;\n}\n\nfunction hsb2positions(hsb: [number, number, number], rects: CanvasRects) {\n return {\n colorPosition: [\n Math.round((hsb[1]) * (rects.colorRect.width - 1)),\n Math.round((1 - hsb[2]) * (rects.colorRect.height - 1)),\n ],\n huePosition: Math.round(hsb[0] * (rects.hueRect.width - 1)),\n };\n}\n\nfunction positions2hsb(\n { colorPosition, huePosition }: { colorPosition: number[]; huePosition: number },\n rects: CanvasRects,\n): [number, number, number] {\n return [\n huePosition / (rects.hueRect.width - 1),\n colorPosition[0] / (rects.colorRect.width - 1),\n 1 - colorPosition[1] / (rects.colorRect.height - 1),\n ];\n}\n\nfunction drawColor(\n canvas: HTMLCanvasElement,\n hue: number,\n colorCtxRef: MutableRefObject,\n rectsRef: RefObject,\n) {\n let w: number;\n let h: number;\n let ctx: CanvasRenderingContext2D;\n\n if (!colorCtxRef.current || !rectsRef.current) {\n // First run\n w = canvas.offsetWidth;\n h = canvas.offsetHeight;\n ctx = canvas.getContext('2d')!;\n\n canvas.width = w;\n canvas.height = h;\n\n colorCtxRef.current = ctx;\n } else {\n w = rectsRef.current.colorRect.width;\n h = rectsRef.current.colorRect.height;\n ctx = colorCtxRef.current;\n }\n\n const imgData = ctx!.createImageData(w, h);\n const pixels = imgData.data;\n const col = hsb2rgb([hue, 1, 1]);\n\n let index = 0;\n\n for (let y = 0; y < h; y++) {\n const perY = 1 - y / (h - 1);\n const st = [255 * perY, 255 * perY, 255 * perY];\n const ed = [col[0] * perY, col[1] * perY, col[2] * perY];\n for (let x = 0; x < w; x++) {\n const perX = x / (w - 1);\n pixels[index++] = st[0] + (ed[0] - st[0]) * perX;\n pixels[index++] = st[1] + (ed[1] - st[1]) * perX;\n pixels[index++] = st[2] + (ed[2] - st[2]) * perX;\n pixels[index++] = 255;\n }\n }\n\n ctx!.putImageData(imgData, 0, 0);\n}\n\nfunction drawHue(canvas: HTMLCanvasElement) {\n const w = canvas.offsetWidth;\n const h = 1;\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext('2d')!;\n\n const imgData = ctx.createImageData(w, h);\n const pixels = imgData.data;\n\n let index = 0;\n\n for (let x = 0; x < w; x++) {\n const hue = x / (w - 1);\n const rgb = hsb2rgb([hue, 1, 1]);\n /* eslint-disable prefer-destructuring */\n pixels[index++] = rgb[0];\n pixels[index++] = rgb[1];\n pixels[index++] = rgb[2];\n /* eslint-enable prefer-destructuring */\n pixels[index++] = 255;\n }\n\n ctx.putImageData(imgData, 0, 0);\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { backgroundColor } = global.settings.themes[theme] || {};\n return {\n backgroundColor,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent } from 'react';\nimport useDebounce from '../../../hooks/useDebounce';\nimport React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { playNotifySound } from '../../../util/notifications';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPrivateChatsNotifications: boolean;\n hasPrivateChatsMessagePreview: boolean;\n hasGroupNotifications: boolean;\n hasGroupMessagePreview: boolean;\n hasBroadcastNotifications: boolean;\n hasBroadcastMessagePreview: boolean;\n hasContactJoinedNotifications: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nconst SettingsNotifications: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPrivateChatsNotifications,\n hasPrivateChatsMessagePreview,\n hasGroupNotifications,\n hasGroupMessagePreview,\n hasBroadcastNotifications,\n hasBroadcastMessagePreview,\n hasContactJoinedNotifications,\n hasPushNotifications,\n hasWebNotifications,\n notificationSoundVolume,\n}) => {\n const {\n loadNotificationSettings,\n updateContactSignUpNotification,\n updateNotificationSettings,\n updateWebNotificationSettings,\n } = getDispatch();\n\n useEffect(() => {\n loadNotificationSettings();\n }, [loadNotificationSettings]);\n\n const runDebounced = useDebounce(500, true);\n\n const handleSettingsChange = useCallback((\n e: ChangeEvent,\n peerType: 'contact' | 'group' | 'broadcast',\n setting: 'silent' | 'showPreviews',\n ) => {\n const currentIsSilent = peerType === 'contact'\n ? !hasPrivateChatsNotifications\n : !(peerType === 'group' ? hasGroupNotifications : hasBroadcastNotifications);\n const currentShouldShowPreviews = peerType === 'contact'\n ? hasPrivateChatsMessagePreview\n : (peerType === 'group' ? hasGroupMessagePreview : hasBroadcastMessagePreview);\n\n updateNotificationSettings({\n peerType,\n ...(setting === 'silent' && { isSilent: !e.target.checked, shouldShowPreviews: currentShouldShowPreviews }),\n ...(setting === 'showPreviews' && { shouldShowPreviews: e.target.checked, isSilent: currentIsSilent }),\n });\n }, [\n hasBroadcastMessagePreview, hasBroadcastNotifications,\n hasGroupMessagePreview, hasGroupNotifications,\n hasPrivateChatsMessagePreview, hasPrivateChatsNotifications,\n updateNotificationSettings,\n ]);\n\n const handleContactNotificationChange = useCallback((e: ChangeEvent) => {\n updateContactSignUpNotification({\n isSilent: !e.target.checked,\n });\n }, [updateContactSignUpNotification]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Notifications);\n\n return (\n
\n
\n

\n Web notifications\n

\n {\n updateWebNotificationSettings({ hasWebNotifications: e.target.checked });\n }}\n />\n {\n updateWebNotificationSettings({ hasPushNotifications: e.target.checked });\n }}\n />\n
\n {\n updateWebNotificationSettings({ notificationSoundVolume: volume });\n runDebounced(() => playNotifySound(undefined, volume));\n }}\n />\n
\n
\n
\n

\n {lang('AutodownloadPrivateChats')}\n

\n\n {\n handleSettingsChange(e, 'contact', 'silent');\n }}\n />\n {\n handleSettingsChange(e, 'contact', 'showPreviews');\n }}\n />\n
\n\n
\n

{lang('FilterGroups')}

\n\n {\n handleSettingsChange(e, 'group', 'silent');\n }}\n />\n {\n handleSettingsChange(e, 'group', 'showPreviews');\n }}\n />\n
\n\n
\n

{lang('FilterChannels')}

\n\n {\n handleSettingsChange(e, 'broadcast', 'silent');\n }}\n />\n {\n handleSettingsChange(e, 'broadcast', 'showPreviews');\n }}\n />\n
\n\n
\n

{lang('PhoneOther')}

\n\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n hasPrivateChatsNotifications: Boolean(global.settings.byKey.hasPrivateChatsNotifications),\n hasPrivateChatsMessagePreview: Boolean(global.settings.byKey.hasPrivateChatsMessagePreview),\n hasGroupNotifications: Boolean(global.settings.byKey.hasGroupNotifications),\n hasGroupMessagePreview: Boolean(global.settings.byKey.hasGroupMessagePreview),\n hasBroadcastNotifications: Boolean(global.settings.byKey.hasBroadcastNotifications),\n hasBroadcastMessagePreview: Boolean(global.settings.byKey.hasBroadcastMessagePreview),\n hasContactJoinedNotifications: Boolean(global.settings.byKey.hasContactJoinedNotifications),\n hasWebNotifications: global.settings.byKey.hasWebNotifications,\n hasPushNotifications: global.settings.byKey.hasPushNotifications,\n notificationSoundVolume: global.settings.byKey.notificationSoundVolume,\n };\n },\n)(SettingsNotifications));\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { PrivacyVisibility, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPassword?: boolean;\n blockedCount: number;\n sessionsCount: number;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n visibilityPrivacyPhoneNumber?: PrivacyVisibility;\n visibilityPrivacyLastSeen?: PrivacyVisibility;\n visibilityPrivacyProfilePhoto?: PrivacyVisibility;\n visibilityPrivacyForwarding?: PrivacyVisibility;\n visibilityPrivacyGroupChats?: PrivacyVisibility;\n};\n\nconst SettingsPrivacy: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPassword,\n blockedCount,\n sessionsCount,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber,\n visibilityPrivacyLastSeen,\n visibilityPrivacyProfilePhoto,\n visibilityPrivacyForwarding,\n visibilityPrivacyGroupChats,\n\n}) => {\n const {\n loadPrivacySettings,\n loadBlockedContacts,\n loadAuthorizations,\n loadContentSettings,\n updateContentSettings,\n } = getDispatch();\n\n useEffect(() => {\n loadBlockedContacts();\n loadAuthorizations();\n loadPrivacySettings();\n loadContentSettings();\n }, [loadBlockedContacts, loadAuthorizations, loadPrivacySettings, loadContentSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Privacy);\n\n function getVisibilityValue(visibility?: PrivacyVisibility) {\n switch (visibility) {\n case 'everybody':\n return lang('P2PEverybody');\n\n case 'contacts':\n return lang('P2PContacts');\n\n case 'nobody':\n return lang('P2PNobody');\n }\n\n return undefined;\n }\n\n return (\n
\n
\n onScreenSelect(SettingsScreens.PrivacyBlockedUsers)}\n >\n
\n {lang('BlockedUsers')}\n {blockedCount > 0 && (\n \n {lang('Users', blockedCount)}\n \n )}\n
\n \n onScreenSelect(\n hasPassword ? SettingsScreens.TwoFaEnabled : SettingsScreens.TwoFaDisabled,\n )}\n >\n
\n {lang('TwoStepVerification')}\n \n {lang(hasPassword ? 'PasswordOn' : 'PasswordOff')}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyActiveSessions)}\n >\n
\n {lang('SessionsTitle')}\n {sessionsCount > 0 && (\n \n {sessionsCount === 1 ? '1 session' : `${sessionsCount} sessions`}\n \n )}\n
\n \n
\n\n
\n

{lang('PrivacyTitle')}

\n\n onScreenSelect(SettingsScreens.PrivacyPhoneNumber)}\n >\n
\n {lang('PrivacyPhoneTitle')}\n \n {getVisibilityValue(visibilityPrivacyPhoneNumber)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyLastSeen)}\n >\n
\n {lang('LastSeenTitle')}\n \n {getVisibilityValue(visibilityPrivacyLastSeen)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyProfilePhoto)}\n >\n
\n {lang('PrivacyProfilePhotoTitle')}\n \n {getVisibilityValue(visibilityPrivacyProfilePhoto)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyForwarding)}\n >\n
\n {lang('PrivacyForwardsTitle')}\n \n {getVisibilityValue(visibilityPrivacyForwarding)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyGroupChats)}\n >\n
\n {lang('WhoCanAddMe')}\n \n {getVisibilityValue(visibilityPrivacyGroupChats)}\n \n
\n \n
\n\n {canChangeSensitive && (\n
\n

\n {lang('lng_settings_sensitive_title')}\n

\n \n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: {\n byKey: { hasPassword, isSensitiveEnabled, canChangeSensitive },\n privacy,\n },\n blocked,\n activeSessions,\n } = global;\n\n return {\n hasPassword,\n blockedCount: blocked.totalCount,\n sessionsCount: activeSessions.length,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber: privacy.phoneNumber?.visibility,\n visibilityPrivacyLastSeen: privacy.lastSeen?.visibility,\n visibilityPrivacyProfilePhoto: privacy.profilePhoto?.visibility,\n visibilityPrivacyForwarding: privacy.forwards?.visibility,\n visibilityPrivacyGroupChats: privacy.chatInvite?.visibility,\n };\n },\n)(SettingsPrivacy));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ISettings, LangCode, SettingsScreens } from '../../../types';\nimport { ApiLanguage } from '../../../api/types';\n\nimport { setLanguage } from '../../../util/langProvider';\n\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsLanguage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n languages,\n language,\n}) => {\n const {\n loadLanguages,\n setSettingOption,\n } = getDispatch();\n\n const [selectedLanguage, setSelectedLanguage] = useState(language);\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n // TODO Throttle\n useEffect(() => {\n loadLanguages();\n }, [loadLanguages]);\n\n const handleChange = useCallback((langCode: string) => {\n setSelectedLanguage(langCode);\n markIsLoading();\n\n void setLanguage(langCode as LangCode, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: langCode });\n });\n }, [markIsLoading, unmarkIsLoading, setSettingOption]);\n\n const options = useMemo(() => {\n return languages ? buildOptions(languages) : undefined;\n }, [languages]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Language);\n\n return (\n
\n {options ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nfunction buildOptions(languages: ApiLanguage[]) {\n const currentLangCode = (window.navigator.language || 'en').toLowerCase();\n const shortLangCode = currentLangCode.substr(0, 2);\n\n return languages.map(({ langCode, nativeName, name }) => ({\n value: langCode,\n label: nativeName,\n subLabel: name,\n })).sort((a) => {\n return currentLangCode && (a.value === currentLangCode || a.value === shortLangCode) ? -1 : 0;\n });\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n languages: global.settings.byKey.languages,\n language: global.settings.byKey.language,\n };\n },\n)(SettingsLanguage));\n","import { ApiPrivacyKey, SettingsScreens } from '../../../../types';\n\nexport function getPrivacyKey(screen: SettingsScreens): ApiPrivacyKey | undefined {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return 'phoneNumber';\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return 'lastSeen';\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return 'profilePhoto';\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return 'forwards';\n case SettingsScreens.PrivacyGroupChats:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return 'chatInvite';\n }\n\n return undefined;\n}\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport { getPrivacyKey } from './helper/privacy';\n\ntype OwnProps = {\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Partial & {\n chatsById?: Record;\n usersById?: Record;\n };\n\nconst SettingsPrivacyVisibility: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n visibility,\n allowUserIds,\n allowChatIds,\n blockUserIds,\n blockChatIds,\n chatsById,\n}) => {\n const { setPrivacyVisibility } = getDispatch();\n\n const lang = useLang();\n\n const visibilityOptions = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyGroupChats:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n ];\n\n default:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n { value: 'nobody', label: lang('P2PNobody') },\n ];\n }\n }, [lang, screen]);\n\n const exceptionLists = {\n shouldShowDenied: visibility !== 'nobody',\n shouldShowAllowed: visibility !== 'everybody',\n };\n\n const privacyKey = getPrivacyKey(screen);\n\n const headerText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return lang('PrivacyPhoneTitle');\n case SettingsScreens.PrivacyLastSeen:\n return lang('LastSeenTitle');\n case SettingsScreens.PrivacyProfilePhoto:\n return lang('PrivacyProfilePhotoTitle');\n case SettingsScreens.PrivacyForwarding:\n return lang('PrivacyForwardsTitle');\n case SettingsScreens.PrivacyGroupChats:\n return lang('WhoCanAddMe');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const descriptionText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyLastSeen:\n return lang('CustomHelp');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n const allowedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberAllowedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenAllowedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoAllowedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingAllowedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsAllowedContacts;\n }\n })();\n\n const deniedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberDeniedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenDeniedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoDeniedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingDeniedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsDeniedContacts;\n }\n })();\n\n const allowedCount = useMemo(() => {\n if (!allowUserIds || !allowChatIds || !chatsById) {\n return 0;\n }\n\n return allowChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, allowUserIds.length);\n }, [allowChatIds, allowUserIds, chatsById]);\n\n const blockCount = useMemo(() => {\n if (!blockUserIds || !blockChatIds || !chatsById) {\n return 0;\n }\n\n return blockChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, blockUserIds.length);\n }, [blockChatIds, blockUserIds, chatsById]);\n\n const handleVisibilityChange = useCallback((value) => {\n setPrivacyVisibility({\n privacyKey,\n visibility: value,\n });\n }, [privacyKey, setPrivacyVisibility]);\n\n return (\n
\n
\n

{headerText}

\n\n \n\n {descriptionText && (\n

{descriptionText}

\n )}\n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n {exceptionLists.shouldShowAllowed && (\n {\n onScreenSelect(allowedContactsScreen);\n }}\n >\n
\n {allowedCount > 0 && +{allowedCount}}\n {lang('AlwaysShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n {exceptionLists.shouldShowDenied && (\n {\n onScreenSelect(deniedContactsScreen);\n }}\n >\n
\n {blockCount > 0 && −{blockCount}}\n {lang('NeverShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n let privacySettings: ApiPrivacySettings | undefined;\n\n const {\n chats: { byId: chatsById },\n settings: { privacy },\n } = global;\n\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n privacySettings = privacy.phoneNumber;\n break;\n\n case SettingsScreens.PrivacyLastSeen:\n privacySettings = privacy.lastSeen;\n break;\n\n case SettingsScreens.PrivacyProfilePhoto:\n privacySettings = privacy.profilePhoto;\n break;\n\n case SettingsScreens.PrivacyForwarding:\n privacySettings = privacy.forwards;\n break;\n\n case SettingsScreens.PrivacyGroupChats:\n privacySettings = privacy.chatInvite;\n break;\n }\n\n if (!privacySettings) {\n return {};\n }\n\n return {\n ...privacySettings,\n chatsById,\n };\n },\n)(SettingsPrivacyVisibility));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiSession } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n activeSessions: ApiSession[];\n};\n\nconst SettingsPrivacyActiveSessions: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n activeSessions,\n}) => {\n const {\n loadAuthorizations,\n terminateAuthorization,\n terminateAllAuthorizations,\n } = getDispatch();\n\n const [isConfirmTerminateAllDialogOpen, openConfirmTerminateAllDialog, closeConfirmTerminateAllDialog] = useFlag();\n useEffect(() => {\n loadAuthorizations();\n }, [loadAuthorizations]);\n\n const handleTerminateSessionClick = useCallback((hash: string) => {\n terminateAuthorization({ hash });\n }, [terminateAuthorization]);\n\n const handleTerminateAllSessions = useCallback(() => {\n closeConfirmTerminateAllDialog();\n terminateAllAuthorizations();\n }, [closeConfirmTerminateAllDialog, terminateAllAuthorizations]);\n\n const currentSession = useMemo(() => {\n return activeSessions.find((session) => session.isCurrent);\n }, [activeSessions]);\n\n const otherSessions = useMemo(() => {\n return activeSessions.filter((session) => !session.isCurrent);\n }, [activeSessions]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyActiveSessions);\n\n function renderCurrentSession(session: ApiSession) {\n return (\n
\n

\n {lang('AuthSessions.CurrentSession')}\n

\n\n \n
\n {session.appName}\n {getDeviceEnvironment(session)}\n {session.ip} - {getLocation(session)}\n
\n
\n\n \n {lang('TerminateAllSessions')}\n \n
\n );\n }\n\n function renderOtherSessions(sessions: ApiSession[]) {\n return (\n
\n

\n {lang('OtherSessions')}\n

\n\n {sessions.map(renderSession)}\n
\n );\n }\n\n function renderSession(session: ApiSession) {\n return (\n {\n handleTerminateSessionClick(session.hash);\n },\n }]}\n className=\"no-icon\"\n >\n
\n {formatPastTimeShort(lang, session.dateActive * 1000)}\n {session.appName}\n {getDeviceEnvironment(session)}\n {session.ip} - {getLocation(session)}\n
\n \n );\n }\n\n return (\n
\n {currentSession && renderCurrentSession(currentSession)}\n {otherSessions && renderOtherSessions(otherSessions)}\n {otherSessions && (\n \n )}\n
\n );\n};\n\nfunction getLocation(session: ApiSession) {\n return [session.region, session.country].filter(Boolean).join(', ');\n}\n\nfunction getDeviceEnvironment(session: ApiSession) {\n return `${session.deviceModel}${session.deviceModel ? ', ' : ''} ${session.platform} ${session.systemVersion}`;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n activeSessions: global.activeSessions,\n };\n },\n)(SettingsPrivacyActiveSessions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { filterUsersByName, getUserFullName } from '../../../modules/helpers';\nimport { unique } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n blockedIds: string[];\n contactIds?: string[];\n localContactIds?: string[];\n currentUserId?: string;\n};\n\nconst BlockUserModal: FC = ({\n usersById,\n blockedIds,\n contactIds,\n localContactIds,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadContactList,\n setUserSearchQuery,\n blockContact,\n } = getDispatch();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n useEffect(() => {\n setUserSearchQuery({ query: filter });\n }, [filter, setUserSearchQuery]);\n\n const filteredContactIds = useMemo(() => {\n const availableContactIds = unique([\n ...(contactIds || []),\n ...(localContactIds || []),\n ].filter((contactId) => {\n return contactId !== currentUserId && !blockedIds.includes(contactId);\n }));\n\n return filterUsersByName(availableContactIds, usersById, filter)\n .sort((firstId, secondId) => {\n const firstName = getUserFullName(usersById[firstId]) || '';\n const secondName = getUserFullName(usersById[secondId]) || '';\n\n return firstName.localeCompare(secondName);\n });\n }, [blockedIds, contactIds, currentUserId, filter, localContactIds, usersById]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n const { id: contactId, accessHash } = usersById[userId] || {};\n if (!contactId || !accessHash) {\n return;\n }\n blockContact({ contactId, accessHash });\n onClose();\n }, [blockContact, onClose, usersById]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n users: {\n byId: usersById,\n },\n blocked: {\n ids: blockedIds,\n },\n contactList,\n currentUserId,\n } = global;\n\n return {\n usersById,\n blockedIds,\n contactIds: contactList?.userIds,\n localContactIds: global.userSearch.localUserIds,\n currentUserId,\n };\n },\n)(BlockUserModal));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiCountryCode, ApiUser } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { CHAT_HEIGHT_PX } from '../../../config';\nimport { formatPhoneNumberWithCode } from '../../../util/phoneNumber';\nimport {\n getChatTitle, getUserFullName, isUserId,\n} from '../../../modules/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Avatar from '../../common/Avatar';\nimport Loading from '../../ui/Loading';\nimport BlockUserModal from './BlockUserModal';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsByIds: Record;\n usersByIds: Record;\n blockedIds: string[];\n phoneCodeList: ApiCountryCode[];\n};\n\nconst SettingsPrivacyBlockedUsers: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n chatsByIds,\n usersByIds,\n blockedIds,\n phoneCodeList,\n}) => {\n const { unblockContact } = getDispatch();\n\n const lang = useLang();\n const [isBlockUserModalOpen, openBlockUserModal, closeBlockUserModal] = useFlag();\n const handleUnblockClick = useCallback((contactId: string) => {\n unblockContact({ contactId });\n }, [unblockContact]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyBlockedUsers);\n\n function renderContact(contactId: string, i: number, viewportOffset: number) {\n const isPrivate = isUserId(contactId);\n const user = isPrivate ? usersByIds[contactId] : undefined;\n const chat = !isPrivate ? chatsByIds[contactId] : undefined;\n\n const className = buildClassName(\n 'Chat chat-item-clickable blocked-list-item small-icon',\n isPrivate ? 'private' : 'group',\n );\n\n return (\n {\n handleUnblockClick(contactId);\n },\n }]}\n style={`top: ${(viewportOffset + i) * CHAT_HEIGHT_PX}px;`}\n >\n \n
\n

{renderText((isPrivate ? getUserFullName(user) : getChatTitle(lang, chat!)) || '')}

\n {user?.phoneNumber && (\n
{formatPhoneNumberWithCode(phoneCodeList, user.phoneNumber)}
\n )}\n {user && !user.phoneNumber && user.username && (\n
@{user.username}
\n )}\n
\n \n );\n }\n\n return (\n
\n
\n
\n

\n {lang('BlockedUsersInfo')}\n

\n
\n\n
\n {blockedIds?.length ? (\n
\n {blockedIds!.map((contactId, i) => renderContact(contactId, i, 0))}\n
\n ) : blockedIds && !blockedIds.length ? (\n
{lang('NoBlocked')}
\n ) : (\n \n )}\n
\n
\n\n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsByIds,\n },\n users: {\n byId: usersByIds,\n },\n blocked: {\n ids,\n },\n countryList: {\n phoneCodes: phoneCodeList,\n },\n } = global;\n\n return {\n chatsByIds,\n usersByIds,\n blockedIds: ids,\n phoneCodeList,\n };\n },\n)(SettingsPrivacyBlockedUsers));\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaEnabled: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaEnabled);\n\n return (\n
\n
\n \n\n

\n {renderText(lang('EnabledPasswordText'), ['br'])}\n

\n
\n\n
\n onScreenSelect(SettingsScreens.TwoFaChangePasswordCurrent)}\n >\n {lang('ChangePassword')}\n \n onScreenSelect(SettingsScreens.TwoFaTurnOff)}\n >\n {lang('TurnPasswordOff')}\n \n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCurrentPassword)}\n >\n {lang('SetRecoveryEmail')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaEnabled));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport PasswordMonkey from '../../../common/PasswordMonkey';\nimport PasswordForm from '../../../common/PasswordForm';\n\ntype OwnProps = {\n screen: SettingsScreens;\n error?: string;\n isLoading?: boolean;\n expectedPassword?: string;\n placeholder?: string;\n hint?: string;\n submitLabel?: string;\n clearError?: NoneToVoidFunction;\n onSubmit: (password: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst EQUAL_PASSWORD_ERROR = 'Passwords Should Be Equal';\n\nconst SettingsTwoFaPassword: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n error,\n isLoading,\n expectedPassword,\n placeholder = 'Current Password',\n hint,\n submitLabel,\n clearError,\n onSubmit,\n}) => {\n const [validationError, setValidationError] = useState('');\n const [shouldShowPassword, setShouldShowPassword] = useState(false);\n\n const handleSubmit = useCallback((newPassword) => {\n if (expectedPassword && newPassword !== expectedPassword) {\n setValidationError(EQUAL_PASSWORD_ERROR);\n } else {\n onSubmit(newPassword);\n }\n }, [onSubmit, expectedPassword]);\n\n const handleClearError = useCallback(() => {\n if (clearError) {\n clearError();\n }\n setValidationError('');\n }, [clearError]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(SettingsTwoFaPassword);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n onStart: NoneToVoidFunction;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaStart: FC = ({\n isActive, onScreenSelect, onReset, animatedEmoji, onStart,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaDisabled);\n\n return (\n
\n
\n \n\n

\n {lang('SetAdditionalPasswordInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaStart));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useFlag from '../../../../hooks/useFlag';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport Modal from '../../../ui/Modal';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n icon: 'hint' | 'email';\n type?: 'text' | 'email';\n isLoading?: boolean;\n error?: string;\n placeholder: string;\n shouldConfirm?: boolean;\n clearError?: NoneToVoidFunction;\n onSubmit: (value?: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaSkippableForm: FC = ({\n animatedEmoji,\n type = 'text',\n isLoading,\n error,\n placeholder,\n shouldConfirm,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n const [isConfirmShown, markIsConfirmShown, unmarkIsConfirmShown] = useFlag(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n setValue(e.target.value);\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!inputRef.current) {\n return;\n }\n\n onSubmit(value);\n };\n\n const handleSkip = () => {\n onSubmit();\n };\n\n const handleSkipConfirm = () => {\n unmarkIsConfirmShown();\n onSubmit();\n };\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n
\n \n\n {value ? (\n \n ) : (\n \n {lang('YourEmailSkip')}\n \n )}\n \n {shouldConfirm && (\n \n {renderText(lang('YourEmailSkipWarningText'), ['br', 'simple_markdown'])}\n
\n \n {lang('YourEmailSkip')}\n \n \n {lang('Cancel')}\n \n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal((global, { icon }) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, icon === 'email' ? '💌' : '💡'),\n };\n})(SettingsTwoFaSkippableForm));\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaCongratulations: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n const handleClick = () => {\n onScreenSelect(SettingsScreens.Privacy);\n };\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaCongratulations);\n\n return (\n
\n
\n \n\n

\n {lang('TwoStepVerificationPasswordSetInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🥳'),\n };\n})(SettingsTwoFaCongratulations));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../modules/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n isLoading?: boolean;\n error?: string;\n clearError: NoneToVoidFunction;\n onSubmit: (hint: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n codeLength: number;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaEmailCode: FC = ({\n animatedEmoji,\n codeLength,\n isLoading,\n error,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const handleInputChange = (e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n const newValue = e.target.value.slice(0, codeLength);\n\n if (newValue.length === codeLength) {\n onSubmit(newValue);\n }\n\n setValue(newValue);\n e.target.value = newValue;\n };\n\n return (\n
\n
\n \n
\n\n
\n \n {isLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '💌'),\n codeLength: global.twoFaSettings.waitingEmailCodeLength,\n };\n})(SettingsTwoFaEmailCode));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../../global/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { TwoFaDispatch, TwoFaState } from '../../../../hooks/reducers/useTwoFaReducer';\nimport useLang from '../../../../hooks/useLang';\n\nimport SettingsTwoFaEnabled from './SettingsTwoFaEnabled';\nimport SettingsTwoFaPassword from './SettingsTwoFaPassword';\nimport SettingsTwoFaStart from './SettingsTwoFaStart';\nimport SettingsTwoFaSkippableForm from './SettingsTwoFaSkippableForm';\nimport SettingsTwoFaCongratulations from './SettingsTwoFaCongratulations';\nimport SettingsTwoFaEmailCode from './SettingsTwoFaEmailCode';\n\nexport type OwnProps = {\n state: TwoFaState;\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n dispatch: TwoFaDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = GlobalState['twoFaSettings'];\n\nconst SettingsTwoFa: FC = ({\n currentScreen,\n shownScreen,\n state,\n hint,\n isLoading,\n error,\n waitingEmailCodeLength,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const {\n updatePassword,\n checkPassword,\n clearTwoFaError,\n updateRecoveryEmail,\n provideTwoFaEmailCode,\n clearPassword,\n } = getDispatch();\n\n useEffect(() => {\n if (waitingEmailCodeLength) {\n if (currentScreen === SettingsScreens.TwoFaNewPasswordEmail) {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmailCode);\n } else if (currentScreen === SettingsScreens.TwoFaRecoveryEmail) {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCode);\n }\n }\n }, [currentScreen, onScreenSelect, waitingEmailCodeLength]);\n\n const handleStartWizard = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.TwoFaNewPassword);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPassword = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordHint);\n }, [onScreenSelect]);\n\n const handleNewPasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmail);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updatePassword({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleChangePasswordCurrent = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordNew);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleChangePasswordNew = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaChangePasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleChangePasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordHint);\n }, [onScreenSelect]);\n\n const handleChangePasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n updatePassword({\n ...state,\n hint: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleTurnOff = useCallback((value: string) => {\n clearPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.Privacy);\n },\n });\n }, [clearPassword, onScreenSelect]);\n\n const handleRecoveryEmailCurrentPassword = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmail);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleRecoveryEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updateRecoveryEmail({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updateRecoveryEmail]);\n\n const handleEmailCode = useCallback((code: string) => {\n provideTwoFaEmailCode({ code });\n }, [provideTwoFaEmailCode]);\n\n const lang = useLang();\n\n switch (currentScreen) {\n case SettingsScreens.TwoFaDisabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n return (\n \n );\n\n case SettingsScreens.TwoFaCongratulations:\n return (\n \n );\n\n case SettingsScreens.TwoFaEnabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordCurrent:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordNew:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaTurnOff:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({ ...global.twoFaSettings }),\n)(SettingsTwoFa));\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../config';\nimport { unique } from '../../../util/iteratees';\nimport { filterChatsByName, isChatGroup, isUserId } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../hooks/useFolderManager';\nimport { getPrivacyKey } from './helper/privacy';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\nexport type OwnProps = {\n isAllowList?: boolean;\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n settings?: ApiPrivacySettings;\n};\n\nconst SettingsPrivacyVisibilityExceptionList: FC = ({\n isAllowList,\n screen,\n isActive,\n onScreenSelect,\n onReset,\n currentUserId,\n settings,\n}) => {\n const { setPrivacySettings } = getDispatch();\n\n const lang = useLang();\n\n const selectedContactIds = useMemo(() => {\n if (!settings) {\n return [];\n }\n\n if (isAllowList) {\n return [...settings.allowUserIds, ...settings.allowChatIds];\n } else {\n return [...settings.blockUserIds, ...settings.blockChatIds];\n }\n }, [isAllowList, settings]);\n const [searchQuery, setSearchQuery] = useState('');\n const [isSubmitShown, setIsSubmitShown] = useState(false);\n const [newSelectedContactIds, setNewSelectedContactIds] = useState(selectedContactIds);\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = unique([...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []])\n .filter((chatId) => {\n const chat = chatsById[chatId];\n return chat && ((isUserId(chat.id) && chat.id !== currentUserId) || isChatGroup(chat));\n });\n\n return unique([\n ...selectedContactIds,\n ...filterChatsByName(lang, chatIds, chatsById, searchQuery),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedContactIds, lang, searchQuery, currentUserId]);\n\n const handleSelectedContactIdsChange = useCallback((value: string[]) => {\n setNewSelectedContactIds(value);\n setIsSubmitShown(true);\n }, []);\n\n const handleSubmit = useCallback(() => {\n setPrivacySettings({\n privacyKey: getPrivacyKey(screen),\n isAllowList: Boolean(isAllowList),\n contactsIds: newSelectedContactIds,\n });\n\n onScreenSelect(SettingsScreens.Privacy);\n }, [isAllowList, newSelectedContactIds, onScreenSelect, screen, setPrivacySettings]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n \n\n \n \n \n
\n );\n};\n\nfunction getCurrentPrivacySettings(global: GlobalState, screen: SettingsScreens) {\n const { privacy } = global.settings;\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return privacy.phoneNumber;\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return privacy.lastSeen;\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return privacy.profilePhoto;\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return privacy.forwards;\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return privacy.chatInvite;\n }\n\n return undefined;\n}\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n return {\n currentUserId: global.currentUserId,\n settings: getCurrentPrivacySettings(global, screen),\n };\n },\n)(SettingsPrivacyVisibilityExceptionList));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport RadioGroup from '../../ui/RadioGroup';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n selectedReaction?: string;\n};\n\nconst SettingsQuickReaction: FC = ({\n isActive,\n onReset,\n onScreenSelect,\n availableReactions,\n selectedReaction,\n}) => {\n const { setDefaultReaction } = getDispatch();\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const options = availableReactions?.filter((l) => !l.isInactive).map((l) => {\n return {\n label: <>{l.title},\n value: l.reaction,\n };\n }) || [];\n\n const handleChange = useCallback((reaction: string) => {\n setDefaultReaction({ reaction });\n }, [setDefaultReaction]);\n\n return (\n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global) => {\n const { availableReactions, appConfig } = global;\n\n return {\n availableReactions,\n selectedReaction: appConfig?.defaultReaction,\n };\n },\n)(SettingsQuickReaction));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch, FoldersState } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\nimport useTwoFaReducer from '../../../hooks/reducers/useTwoFaReducer';\n\nimport Transition from '../../ui/Transition';\nimport SettingsHeader from './SettingsHeader';\nimport SettingsMain from './SettingsMain';\nimport SettingsEditProfile from './SettingsEditProfile';\nimport SettingsDataStorage from './SettingsDataStorage';\nimport SettingsFolders from './folders/SettingsFolders';\nimport SettingsGeneral from './SettingsGeneral';\nimport SettingsGeneralBackground from './SettingsGeneralBackground';\nimport SettingsGeneralBackgroundColor from './SettingsGeneralBackgroundColor';\nimport SettingsNotifications from './SettingsNotifications';\nimport SettingsPrivacy from './SettingsPrivacy';\nimport SettingsLanguage from './SettingsLanguage';\nimport SettingsPrivacyVisibility from './SettingsPrivacyVisibility';\nimport SettingsPrivacyActiveSessions from './SettingsPrivacyActiveSessions';\nimport SettingsPrivacyBlockedUsers from './SettingsPrivacyBlockedUsers';\nimport SettingsTwoFa from './twoFa/SettingsTwoFa';\nimport SettingsPrivacyVisibilityExceptionList from './SettingsPrivacyVisibilityExceptionList';\nimport SettingsQuickReaction from './SettingsQuickReaction';\n\nimport './Settings.scss';\n\nconst TRANSITION_RENDER_COUNT = Object.keys(SettingsScreens).length / 2;\nconst TRANSITION_DURATION = 200;\n\nconst TWO_FA_SCREENS = [\n SettingsScreens.TwoFaDisabled,\n SettingsScreens.TwoFaNewPassword,\n SettingsScreens.TwoFaNewPasswordConfirm,\n SettingsScreens.TwoFaNewPasswordHint,\n SettingsScreens.TwoFaNewPasswordEmail,\n SettingsScreens.TwoFaNewPasswordEmailCode,\n SettingsScreens.TwoFaCongratulations,\n SettingsScreens.TwoFaEnabled,\n SettingsScreens.TwoFaChangePasswordCurrent,\n SettingsScreens.TwoFaChangePasswordNew,\n SettingsScreens.TwoFaChangePasswordConfirm,\n SettingsScreens.TwoFaChangePasswordHint,\n SettingsScreens.TwoFaTurnOff,\n SettingsScreens.TwoFaRecoveryEmailCurrentPassword,\n SettingsScreens.TwoFaRecoveryEmail,\n SettingsScreens.TwoFaRecoveryEmailCode,\n];\n\nconst FOLDERS_SCREENS = [\n SettingsScreens.Folders,\n SettingsScreens.FoldersCreateFolder,\n SettingsScreens.FoldersEditFolder,\n SettingsScreens.FoldersEditFolderFromChatList,\n SettingsScreens.FoldersIncludedChats,\n SettingsScreens.FoldersIncludedChatsFromChatList,\n SettingsScreens.FoldersExcludedChats,\n SettingsScreens.FoldersExcludedChatsFromChatList,\n];\n\nconst PRIVACY_SCREENS = [\n SettingsScreens.PrivacyBlockedUsers,\n SettingsScreens.PrivacyActiveSessions,\n];\n\nconst PRIVACY_PHONE_NUMBER_SCREENS = [\n SettingsScreens.PrivacyPhoneNumberAllowedContacts,\n SettingsScreens.PrivacyPhoneNumberDeniedContacts,\n];\n\nconst PRIVACY_LAST_SEEN_PHONE_SCREENS = [\n SettingsScreens.PrivacyLastSeenAllowedContacts,\n SettingsScreens.PrivacyLastSeenDeniedContacts,\n];\n\nconst PRIVACY_PROFILE_PHOTO_SCREENS = [\n SettingsScreens.PrivacyProfilePhotoAllowedContacts,\n SettingsScreens.PrivacyProfilePhotoDeniedContacts,\n];\n\nconst PRIVACY_FORWARDING_SCREENS = [\n SettingsScreens.PrivacyForwardingAllowedContacts,\n SettingsScreens.PrivacyForwardingDeniedContacts,\n];\n\nconst PRIVACY_GROUP_CHATS_SCREENS = [\n SettingsScreens.PrivacyGroupChatsAllowedContacts,\n SettingsScreens.PrivacyGroupChatsDeniedContacts,\n];\n\nexport type OwnProps = {\n isActive: boolean;\n currentScreen: SettingsScreens;\n foldersState: FoldersState;\n foldersDispatch: FolderEditDispatch;\n onScreenSelect: (screen: SettingsScreens) => void;\n shouldSkipTransition?: boolean;\n onReset: () => void;\n};\n\nconst Settings: FC = ({\n isActive,\n currentScreen,\n foldersState,\n foldersDispatch,\n onScreenSelect,\n onReset,\n shouldSkipTransition,\n}) => {\n const [twoFaState, twoFaDispatch] = useTwoFaReducer();\n\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n foldersDispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (foldersState.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n foldersState.mode, foldersDispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleSaveFilter = useCallback(() => {\n foldersDispatch({ type: 'saveFilters' });\n handleReset();\n }, [foldersDispatch, handleReset]);\n\n function renderCurrentSectionContent(isScreenActive: boolean, screen: SettingsScreens) {\n const privacyAllowScreens: Record = {\n [SettingsScreens.PrivacyPhoneNumber]: PRIVACY_PHONE_NUMBER_SCREENS.includes(screen),\n [SettingsScreens.PrivacyLastSeen]: PRIVACY_LAST_SEEN_PHONE_SCREENS.includes(screen),\n [SettingsScreens.PrivacyProfilePhoto]: PRIVACY_PROFILE_PHOTO_SCREENS.includes(screen),\n [SettingsScreens.PrivacyForwarding]: PRIVACY_FORWARDING_SCREENS.includes(screen),\n [SettingsScreens.PrivacyGroupChats]: PRIVACY_GROUP_CHATS_SCREENS.includes(screen),\n };\n\n const isTwoFaScreen = TWO_FA_SCREENS.includes(screen);\n const isFoldersScreen = FOLDERS_SCREENS.includes(screen);\n const isPrivacyScreen = PRIVACY_SCREENS.includes(screen)\n || isTwoFaScreen\n || Object.keys(privacyAllowScreens).includes(screen.toString())\n || Object.values(privacyAllowScreens).find((key) => key === true);\n\n switch (currentScreen) {\n case SettingsScreens.Main:\n return (\n \n );\n case SettingsScreens.EditProfile:\n return (\n \n );\n case SettingsScreens.General:\n return (\n \n );\n case SettingsScreens.QuickReaction:\n return (\n \n );\n case SettingsScreens.Notifications:\n return (\n \n );\n case SettingsScreens.DataStorage:\n return (\n \n );\n case SettingsScreens.Privacy:\n return (\n \n );\n case SettingsScreens.Language:\n return (\n \n );\n case SettingsScreens.GeneralChatBackground:\n return (\n \n );\n case SettingsScreens.GeneralChatBackgroundColor:\n return (\n \n );\n case SettingsScreens.PrivacyActiveSessions:\n return (\n \n );\n case SettingsScreens.PrivacyBlockedUsers:\n return (\n \n );\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyGroupChats:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return (\n \n );\n\n case SettingsScreens.Folders:\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaNewPasswordConfirm:\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaCongratulations:\n case SettingsScreens.TwoFaEnabled:\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n case SettingsScreens.TwoFaChangePasswordHint:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n case SettingsScreens.TwoFaRecoveryEmail:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n }\n\n function renderCurrentSection(isScreenActive: boolean, isFrom: boolean, currentKey: SettingsScreens) {\n return (\n <>\n \n {renderCurrentSectionContent(isScreenActive, currentKey)}\n \n );\n }\n\n return (\n \n {renderCurrentSection}\n \n );\n};\n\nexport default memo(Settings);\n","import React, {\n FC, useEffect, useCallback, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser, ApiUserStatus } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, sortUserIds } from '../../../modules/helpers';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport ListItem from '../../ui/ListItem';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n filter: string;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n contactIds?: string[];\n serverTimeOffset: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst ContactList: FC = ({\n isActive,\n filter,\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset,\n onReset,\n}) => {\n const {\n loadContactList,\n openChat,\n } = getDispatch();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n useHistoryBack(isActive, onReset);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n }, [openChat]);\n\n const listIds = useMemo(() => {\n if (!contactIds) {\n return undefined;\n }\n\n const filteredIds = filterUsersByName(contactIds, usersById, filter);\n\n return sortUserIds(filteredIds, usersById, userStatusesById, undefined, serverTimeOffset);\n }, [contactIds, filter, usersById, userStatusesById, serverTimeOffset]);\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, listIds, Boolean(filter));\n\n return (\n \n {viewportIds?.length ? (\n viewportIds.map((id) => (\n handleClick(id)}\n ripple={!IS_SINGLE_COLUMN_LAYOUT}\n >\n \n \n ))\n ) : viewportIds && !viewportIds.length ? (\n

\n {filter.length ? 'No contacts matched your search.' : 'Contact list is empty.'}\n

\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: contactIds } = global.contactList || {};\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n\n return {\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ContactList));\n","import React, {\n FC, useCallback, useEffect, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { unique } from '../../../util/iteratees';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, isUserBot, sortChatIds } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Button from '../../ui/Button';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n selectedMemberIds: string[];\n onSelectedMemberIdsChange: (ids: string[]) => void;\n onNextStep: () => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsById: Record;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst NewChatStep1: FC = ({\n isChannel,\n isActive,\n selectedMemberIds,\n onSelectedMemberIdsChange,\n onNextStep,\n onReset,\n chatsById,\n localContactIds,\n searchQuery,\n isSearching,\n localUserIds,\n globalUserIds,\n}) => {\n const {\n loadContactList,\n setGlobalSearchQuery,\n } = getDispatch();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const handleFilterChange = useCallback((query: string) => {\n setGlobalSearchQuery({ query });\n }, [setGlobalSearchQuery]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : [];\n\n return sortChatIds(\n unique([\n ...foundContactIds,\n ...(localUserIds || []),\n ...(globalUserIds || []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return !user.isSelf && (user.canBeInvitedToGroup || !isUserBot(user));\n }),\n chatsById,\n false,\n selectedMemberIds,\n );\n }, [localContactIds, chatsById, searchQuery, localUserIds, globalUserIds, selectedMemberIds]);\n\n const handleNextStep = useCallback(() => {\n if (selectedMemberIds.length || isChannel) {\n setGlobalSearchQuery({ query: '' });\n onNextStep();\n }\n }, [selectedMemberIds.length, isChannel, setGlobalSearchQuery, onNextStep]);\n\n return (\n
\n
\n \n \n \n

{lang('GroupAddMembers')}

\n
\n
\n \n\n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: localContactIds } = global.contactList || {};\n const { byId: chatsById } = global.chats;\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalResults,\n localResults,\n } = global.globalSearch;\n const { userIds: globalUserIds } = globalResults || {};\n const { userIds: localUserIds } = localResults || {};\n\n return {\n chatsById,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus?.chats,\n globalUserIds,\n localUserIds,\n };\n },\n)(NewChatStep1));\n","import React, {\n FC, useState, useCallback, useEffect, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ChatCreationProgress } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport Button from '../../ui/Button';\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n memberIds: string[];\n onReset: (forceReturnToChatList?: boolean) => void;\n};\n\ntype StateProps = {\n creationProgress?: ChatCreationProgress;\n creationError?: string;\n};\n\n// TODO @implement\nconst MAX_USERS_FOR_LEGACY_CHAT = 199; // Accounting for current user\n\nconst NewChatStep2: FC = ({\n isChannel,\n isActive,\n memberIds,\n onReset,\n creationProgress,\n creationError,\n}) => {\n const {\n createGroupChat,\n createChannel,\n } = getDispatch();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const [title, setTitle] = useState('');\n const [about, setAbout] = useState('');\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n\n const chatTitleEmptyError = 'Chat title can\\'t be empty';\n const channelTitleEmptyError = 'Channel title can\\'t be empty';\n const chatTooManyUsersError = 'Sorry, creating supergroups is not yet supported';\n\n const isLoading = creationProgress === ChatCreationProgress.InProgress;\n\n const handleTitleChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n const newValue = value.replace(/^\\s+/, '');\n\n setTitle(newValue);\n\n if (newValue !== value) {\n e.currentTarget.value = newValue;\n }\n }, []);\n\n const handleDescriptionChange = useCallback((e: React.ChangeEvent) => {\n setAbout(e.currentTarget.value);\n }, []);\n\n const handleCreateGroup = useCallback(() => {\n if (!title.length) {\n setError(chatTitleEmptyError);\n return;\n }\n\n if (memberIds.length > MAX_USERS_FOR_LEGACY_CHAT) {\n setError(chatTooManyUsersError);\n return;\n }\n\n createGroupChat({\n title,\n photo,\n memberIds,\n });\n }, [title, memberIds, createGroupChat, photo, chatTitleEmptyError, chatTooManyUsersError]);\n\n const handleCreateChannel = useCallback(() => {\n if (!title.length) {\n setError(channelTitleEmptyError);\n return;\n }\n\n createChannel({\n title,\n about,\n photo,\n memberIds,\n });\n }, [title, createChannel, about, photo, memberIds, channelTitleEmptyError]);\n\n useEffect(() => {\n if (creationProgress === ChatCreationProgress.Complete) {\n onReset(true);\n }\n }, [creationProgress, onReset]);\n\n const renderedError = (creationError && lang(creationError)) || (\n error !== chatTitleEmptyError && error !== channelTitleEmptyError\n ? error\n : undefined\n );\n\n return (\n
\n
\n onReset()}\n ariaLabel=\"Return to member selection\"\n >\n \n \n

{lang(isChannel ? 'NewChannel' : 'NewGroup')}

\n
\n
\n \n \n {isChannel && (\n <>\n \n

{lang('DescriptionInfo')}

\n \n )}\n\n {renderedError && (\n

{renderedError}

\n )}\n\n {memberIds.length > 0 && (\n <>\n

{lang('GroupInfo.ParticipantCount', memberIds.length, 'i')}

\n\n
\n {memberIds.map((id) => (\n \n \n \n ))}\n
\n \n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n progress: creationProgress,\n error: creationError,\n } = global.chatCreation || {};\n\n return {\n creationProgress,\n creationError,\n };\n },\n)(NewChatStep2));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\n\nimport { LeftColumnContent } from '../../../types';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\n\nimport Transition from '../../ui/Transition';\nimport NewChatStep1 from './NewChatStep1';\nimport NewChatStep2 from './NewChatStep2';\n\nimport './NewChat.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n isChannel?: boolean;\n content: LeftColumnContent;\n onContentChange: (content: LeftColumnContent) => void;\n onReset: () => void;\n};\n\nconst RENDER_COUNT = Object.keys(LeftColumnContent).length / 2;\n\nconst NewChat: FC = ({\n isActive,\n isChannel = false,\n content,\n onContentChange,\n onReset,\n}) => {\n const [newChatMemberIds, setNewChatMemberIds] = useState([]);\n\n const handleNextStep = useCallback(() => {\n onContentChange(isChannel ? LeftColumnContent.NewChannelStep2 : LeftColumnContent.NewGroupStep2);\n }, [isChannel, onContentChange]);\n\n return (\n \n {(isStepActive) => {\n switch (content) {\n case LeftColumnContent.NewChannelStep1:\n case LeftColumnContent.NewGroupStep1:\n return (\n \n );\n case LeftColumnContent.NewChannelStep2:\n case LeftColumnContent.NewGroupStep2:\n return (\n \n );\n default:\n return undefined;\n }\n }}\n \n );\n};\n\nexport default memo(NewChat);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from '../ui/Button';\nimport ChatList from './main/ChatList';\nimport { LeftColumnContent } from '../../types';\n\nimport './ArchivedChats.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n onReset: () => void;\n onContentChange: (content: LeftColumnContent) => void;\n};\n\nconst ArchivedChats: FC = ({ isActive, onReset, onContentChange }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onContentChange, LeftColumnContent.Archived);\n\n return (\n
\n
\n \n \n \n

{lang('ArchivedChats')}

\n
\n \n
\n );\n};\n\nexport default memo(ArchivedChats);\n","import React, {\n FC, useCallback, memo, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChatFolder } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport CheckboxGroup from '../ui/CheckboxGroup';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n};\n\ntype StateProps = {\n foldersById?: Record;\n folderOrderedIds?: number[];\n};\n\nconst ChatFolderModal: FC = ({\n isOpen,\n chatId,\n foldersById,\n folderOrderedIds,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const { editChatFolders } = getDispatch();\n\n const lang = useLang();\n\n const initialSelectedFolderIds = useMemo(() => {\n if (!foldersById) {\n return [];\n }\n\n return Object.keys(foldersById).reduce((result, folderId) => {\n const { includedChatIds, pinnedChatIds } = foldersById[Number(folderId)];\n if (includedChatIds.includes(chatId) || pinnedChatIds?.includes(chatId)) {\n result.push(folderId);\n }\n\n return result;\n }, [] as string[]);\n }, [chatId, foldersById]);\n\n const [selectedFolderIds, setSelectedFolderIds] = useState(initialSelectedFolderIds);\n\n const folders = useMemo(() => {\n return folderOrderedIds?.map((folderId) => ({\n label: foldersById ? foldersById[folderId].title : '',\n value: String(folderId),\n })) || [];\n }, [folderOrderedIds, foldersById]);\n\n const handleSubmit = useCallback(() => {\n const idsToRemove = initialSelectedFolderIds.filter((id) => !selectedFolderIds.includes(id)).map(Number);\n const idsToAdd = selectedFolderIds.filter((id) => !initialSelectedFolderIds.includes(id)).map(Number);\n\n editChatFolders({ chatId, idsToRemove, idsToAdd });\n onClose();\n }, [chatId, editChatFolders, initialSelectedFolderIds, onClose, selectedFolderIds]);\n\n if (!foldersById || !folderOrderedIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: foldersById, orderedIds: folderOrderedIds } = global.chatFolders;\n\n return {\n foldersById,\n folderOrderedIds,\n };\n },\n)(ChatFolderModal));\n","import { ApiMediaFormat, ApiMessage } from '../../../../api/types';\n\nimport * as mediaLoader from '../../../../util/mediaLoader';\nimport {\n getMessageMediaHash,\n getMessagePhoto,\n getMessageText,\n getMessageTextWithSpoilers,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n hasMessageLocalBlobUrl,\n} from '../../../../modules/helpers';\nimport { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard';\n\ntype ICopyOptions = {\n label: string;\n handler: () => void;\n}[];\n\nexport function getMessageCopyOptions(\n message: ApiMessage, afterEffect?: () => void, onCopyLink?: () => void,\n): ICopyOptions {\n const options: ICopyOptions = [];\n const text = getMessageText(message);\n const photo = getMessagePhoto(message)\n || (!getMessageWebPageVideo(message) ? getMessageWebPagePhoto(message) : undefined);\n const mediaHash = getMessageMediaHash(message, 'inline');\n const canImageBeCopied = photo && (mediaHash || hasMessageLocalBlobUrl(message)) && CLIPBOARD_ITEM_SUPPORTED;\n const selection = window.getSelection();\n\n if (canImageBeCopied) {\n options.push({\n label: 'lng_context_copy_image',\n handler: () => {\n Promise.resolve(mediaHash ? mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl) : photo!.blobUrl)\n .then(copyImageToClipboard);\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (text) {\n // Detect if the user has selection in the current message\n const hasSelection = Boolean((\n selection?.anchorNode?.parentNode\n && (selection.anchorNode.parentNode as HTMLElement).closest('.Message .content-inner')\n && selection.toString().replace(/(?:\\r\\n|\\r|\\n)/g, '') !== ''\n ));\n\n options.push({\n label: getCopyLabel(hasSelection),\n handler: () => {\n const clipboardText = hasSelection && selection ? selection.toString() : getMessageTextWithSpoilers(message)!;\n copyTextToClipboard(clipboardText);\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (onCopyLink) {\n options.push({\n label: 'lng_context_copy_message_link',\n handler: () => {\n onCopyLink();\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n return options;\n}\n\nfunction getCopyLabel(hasSelection: boolean): string {\n if (hasSelection) {\n return 'lng_context_copy_selected';\n }\n return 'lng_context_copy_text';\n}\n","let scrollLockEl: HTMLElement | null | undefined;\nlet excludedClosestSelector: string | undefined;\n\nconst IGNORED_KEYS: Record = {\n Down: true,\n ArrowDown: true,\n Up: true,\n ArrowUp: true,\n Left: true,\n ArrowLeft: true,\n Right: true,\n ArrowRight: true,\n ' ': true,\n PageUp: true,\n PageDown: true,\n End: true,\n Home: true,\n Tab: true,\n};\n\nfunction isTextBox(target: EventTarget | null) {\n if (!target || !(target instanceof HTMLElement)) return false;\n const element = target;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'textarea') return true;\n if (tagName !== 'input') return false;\n const type = element.getAttribute('type');\n if (!type) return false;\n const inputTypes = [\n 'text', 'password', 'number', 'email', 'tel', 'url',\n 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week',\n ];\n return inputTypes.indexOf(type.toLowerCase()) > -1;\n}\n\nexport const getTouchY = (e: WheelEvent | TouchEvent | React.WheelEvent | React.TouchEvent) => {\n return ('changedTouches' in e ? e.changedTouches[0].clientY : 0);\n};\n\nconst preventDefault = (e: WheelEvent | TouchEvent) => {\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (\n !scrollLockEl\n // Allow overlay scrolling\n || !scrollLockEl.contains(e.target as HTMLElement)\n // Prevent top overscroll\n || (scrollLockEl.scrollTop <= 0 && deltaY <= 0)\n // Prevent bottom overscroll\n || (scrollLockEl.scrollTop >= (scrollLockEl.scrollHeight - scrollLockEl.offsetHeight) && deltaY >= 0)\n ) {\n if (excludedClosestSelector && (e.target as HTMLElement).closest(excludedClosestSelector)) return;\n e.preventDefault();\n }\n};\n\nfunction preventDefaultForScrollKeys(e: KeyboardEvent) {\n if (IGNORED_KEYS[e.key] && !isTextBox(e.target)) {\n e.preventDefault();\n }\n}\n\nexport function disableScrolling(el?: HTMLElement | null, _excludedClosestSelector?: string) {\n scrollLockEl = el;\n excludedClosestSelector = _excludedClosestSelector;\n // Disable scrolling in Chrome\n document.addEventListener('wheel', preventDefault, { passive: false });\n document.addEventListener('touchmove', preventDefault, { passive: false });\n document.onkeydown = preventDefaultForScrollKeys;\n}\n\nexport function enableScrolling() {\n scrollLockEl = undefined;\n excludedClosestSelector = undefined;\n document.removeEventListener('wheel', preventDefault); // Enable scrolling in Chrome\n document.removeEventListener('touchmove', preventDefault);\n // eslint-disable-next-line no-null/no-null\n document.onkeydown = null;\n}\n","import React, {\n FC, memo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMediaFormat } from '../../../api/types';\n\nimport useMedia from '../../../hooks/useMedia';\nimport useFlag from '../../../hooks/useFlag';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\nimport './ReactionSelectorReaction.scss';\n\nconst REACTION_SIZE = 32;\n\ntype OwnProps = {\n reaction: ApiAvailableReaction;\n previewIndex: number;\n isReady?: boolean;\n onSendReaction: (reaction: string, x: number, y: number) => void;\n};\n\nconst cn = createClassNameBuilder('ReactionSelectorReaction');\n\nconst ReactionSelectorReaction: FC = ({ reaction, previewIndex, onSendReaction, isReady }) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const mediaData = useMedia(`document${reaction.selectAnimation?.id}`, !isReady, ApiMediaFormat.Lottie);\n\n const [isActivated, activate, deactivate] = useFlag();\n const [isAnimationLoaded, markAnimationLoaded] = useFlag();\n\n const shouldRenderAnimated = Boolean(isReady && mediaData);\n const { transitionClassNames: animatedClassNames } = useShowTransition(shouldRenderAnimated);\n const { shouldRender: shouldRenderStatic, transitionClassNames: staticClassNames } = useShowTransition(\n !isReady || !isAnimationLoaded, undefined, true,\n );\n\n function handleClick() {\n if (!containerRef.current) return;\n const { x, y } = containerRef.current.getBoundingClientRect();\n\n onSendReaction(reaction.reaction, x, y);\n }\n\n return (\n \n {shouldRenderStatic && (\n \n )}\n {shouldRenderAnimated && (\n \n )}\n
\n );\n};\n\nexport default memo(ReactionSelectorReaction);\n","import React, {\n FC, memo, useLayoutEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useFlag from '../../../hooks/useFlag';\nimport { getTouchY } from '../../../util/scrollLock';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport ReactionSelectorReaction from './ReactionSelectorReaction';\n\nimport './ReactionSelector.scss';\n\ntype OwnProps = {\n enabledReactions?: string[];\n onSendReaction: (reaction: string, x: number, y: number) => void;\n isPrivate?: boolean;\n availableReactions?: ApiAvailableReaction[];\n isReady?: boolean;\n};\n\nconst cn = createClassNameBuilder('ReactionSelector');\n\nconst ReactionSelector: FC = ({\n availableReactions,\n enabledReactions,\n onSendReaction,\n isPrivate,\n isReady,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const itemsScrollRef = useRef(null);\n const [isHorizontalScrollEnabled, enableHorizontalScroll] = useFlag(false);\n useHorizontalScroll(itemsScrollRef.current, !isHorizontalScrollEnabled);\n\n useLayoutEffect(() => {\n enableHorizontalScroll();\n }, [enableHorizontalScroll]);\n\n const handleWheel = (e: React.WheelEvent | React.TouchEvent) => {\n if (!itemsScrollRef) return;\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (deltaY) {\n e.preventDefault();\n }\n };\n\n if ((!isPrivate && !enabledReactions?.length) || !availableReactions) return undefined;\n\n return (\n
\n
\n
\n
\n
\n {availableReactions?.map((reaction, i) => {\n if (reaction.isInactive\n || (!isPrivate && (!enabledReactions || !enabledReactions.includes(reaction.reaction)))) return undefined;\n return (\n \n );\n })}\n
\n
\n
\n );\n};\n\nexport default memo(ReactionSelector);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage, ApiUser } from '../../../api/types';\nimport { IAnchorPosition } from '../../../types';\n\nimport { getMessageCopyOptions } from './helpers/copyOptions';\nimport { disableScrolling, enableScrolling } from '../../../util/scrollLock';\nimport useContextMenuPosition from '../../../hooks/useContextMenuPosition';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport Avatar from '../../common/Avatar';\nimport ReactionSelector from './ReactionSelector';\n\nimport './MessageContextMenu.scss';\n\ntype OwnProps = {\n availableReactions?: ApiAvailableReaction[];\n isOpen: boolean;\n anchor: IAnchorPosition;\n message: ApiMessage;\n canSendNow?: boolean;\n enabledReactions?: string[];\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n isPrivate?: boolean;\n canDownload?: boolean;\n isDownloading?: boolean;\n canShowSeenBy?: boolean;\n seenByRecentUsers?: ApiUser[];\n onReply: () => void;\n onEdit: () => void;\n onPin: () => void;\n onUnpin: () => void;\n onForward: () => void;\n onDelete: () => void;\n onReport: () => void;\n onFaveSticker: () => void;\n onUnfaveSticker: () => void;\n onSelect: () => void;\n onSend: () => void;\n onReschedule: () => void;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onCopyLink?: () => void;\n onDownload?: () => void;\n onShowSeenBy?: () => void;\n onShowReactors?: () => void;\n onSendReaction: (reaction: string | undefined, x: number, y: number) => void;\n};\n\nconst SCROLLBAR_WIDTH = 10;\nconst REACTION_BUBBLE_EXTRA_WIDTH = 32;\nconst ANIMATION_DURATION = 200;\n\nconst MessageContextMenu: FC = ({\n availableReactions,\n isOpen,\n message,\n isPrivate,\n enabledReactions,\n anchor,\n canSendNow,\n canReschedule,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n isDownloading,\n canShowSeenBy,\n canShowReactionsCount,\n canRemoveReaction,\n canShowReactionList,\n seenByRecentUsers,\n onReply,\n onEdit,\n onPin,\n onUnpin,\n onForward,\n onDelete,\n onReport,\n onFaveSticker,\n onUnfaveSticker,\n onSelect,\n onSend,\n onReschedule,\n onClose,\n onCloseAnimationEnd,\n onCopyLink,\n onDownload,\n onShowSeenBy,\n onShowReactors,\n onSendReaction,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const scrollableRef = useRef(null);\n const copyOptions = getMessageCopyOptions(message, onClose, canCopyLink ? onCopyLink : undefined);\n const noReactions = !isPrivate && !enabledReactions?.length;\n const withReactions = canShowReactionList && !noReactions;\n\n const [isReady, markIsReady, unmarkIsReady] = useFlag();\n\n const getTriggerElement = useCallback(() => {\n return document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id=\"${message.id}\"]`);\n }, [message.id]);\n\n const getRootElement = useCallback(\n () => document.querySelector('.Transition__slide--active > .MessageList'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => document.querySelector('.MessageContextMenu .bubble'),\n [],\n );\n\n const getLayout = useCallback(() => {\n const extraHeightAudioPlayer = (IS_SINGLE_COLUMN_LAYOUT\n && (document.querySelector('.AudioPlayer-content'))?.offsetHeight) || 0;\n const pinnedElement = document.querySelector('.HeaderPinnedMessage-wrapper');\n const extraHeightPinned = (((IS_SINGLE_COLUMN_LAYOUT && !extraHeightAudioPlayer)\n || (!IS_SINGLE_COLUMN_LAYOUT && pinnedElement?.classList.contains('full-width')))\n && pinnedElement?.offsetHeight) || 0;\n\n return {\n extraPaddingX: SCROLLBAR_WIDTH,\n extraTopPadding: (document.querySelector('.MiddleHeader')!).offsetHeight,\n marginSides: withReactions ? REACTION_BUBBLE_EXTRA_WIDTH : undefined,\n extraMarginTop: extraHeightPinned + extraHeightAudioPlayer,\n };\n }, [withReactions]);\n\n const handleRemoveReaction = useCallback(() => {\n onSendReaction(undefined, 0, 0);\n }, [onSendReaction]);\n\n useEffect(() => {\n if (!isOpen) {\n unmarkIsReady();\n return;\n }\n\n setTimeout(() => {\n markIsReady();\n }, ANIMATION_DURATION);\n }, [isOpen, markIsReady, unmarkIsReady]);\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style, menuStyle, withScroll,\n } = useContextMenuPosition(anchor, getTriggerElement, getRootElement, getMenuElement, getLayout);\n\n useEffect(() => {\n disableScrolling(withScroll ? scrollableRef.current : undefined, '.ReactionSelector');\n\n return enableScrolling;\n }, [withScroll]);\n\n const lang = useLang();\n\n return (\n \n {canShowReactionList && (\n \n )}\n\n \n {canRemoveReaction && Remove Reaction}\n {canSendNow && {lang('MessageScheduleSend')}}\n {canReschedule && (\n {lang('MessageScheduleEditTime')}\n )}\n {canReply && {lang('Reply')}}\n {canEdit && {lang('Edit')}}\n {canFaveSticker && (\n {lang('AddToFavorites')}\n )}\n {canUnfaveSticker && (\n {lang('Stickers.RemoveFromFavorites')}\n )}\n {canCopy && copyOptions.map((options) => (\n {lang(options.label)}\n ))}\n {canPin && {lang('DialogPin')}}\n {canUnpin && {lang('DialogUnpin')}}\n {canDownload && (\n \n {isDownloading ? lang('lng_context_cancel_download') : lang('lng_media_download')}\n \n )}\n {canForward && {lang('Forward')}}\n {canSelect && {lang('Common.Select')}}\n {canReport && {lang('lng_context_report_msg')}}\n {(canShowSeenBy || canShowReactionsCount) && (\n \n {canShowReactionsCount && message.reactors?.count ? (\n canShowSeenBy && message.seenByUserIds?.length\n ? lang('Chat.OutgoingContextMixedReactionCount', [message.reactors.count, message.seenByUserIds.length])\n : lang('Chat.ContextReactionCount', message.reactors.count, 'i')\n ) : (\n message.seenByUserIds?.length\n ? lang('Conversation.ContextMenuSeen', message.seenByUserIds.length, 'i')\n : lang('Conversation.ContextMenuNoViews')\n )}\n
\n {seenByRecentUsers?.map((user) => (\n \n ))}\n
\n \n )}\n {canDelete && {lang('Delete')}}\n
\n \n );\n};\n\nexport default memo(MessageContextMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { MessageListType } from '../../../global/types';\nimport { ApiAvailableReaction, ApiMessage } from '../../../api/types';\nimport { IAlbum, IAnchorPosition } from '../../../types';\nimport {\n selectActiveDownloadIds,\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectIsMessageProtected,\n} from '../../../modules/selectors';\nimport {\n isActionMessage, isChatChannel,\n isChatGroup, isOwnMessage, areReactionsEmpty, isUserId, isMessageLocal,\n} from '../../../modules/helpers';\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';\nimport { getDayStartAt } from '../../../util/dateFormat';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport { REM } from '../../common/helpers/mediaDimensions';\n\nimport DeleteMessageModal from '../../common/DeleteMessageModal';\nimport ReportMessageModal from '../../common/ReportMessageModal';\nimport PinMessageModal from '../../common/PinMessageModal';\nimport MessageContextMenu from './MessageContextMenu';\nimport CalendarModal from '../../common/CalendarModal';\nimport buildClassName from '../../../util/buildClassName';\n\nconst START_SIZE = 2 * REM;\n\nexport type OwnProps = {\n isOpen: boolean;\n chatUsername?: string;\n message: ApiMessage;\n album?: IAlbum;\n anchor: IAnchorPosition;\n messageListType: MessageListType;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n noOptions?: boolean;\n canSendNow?: boolean;\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n isPrivate?: boolean;\n hasFullInfo?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n canDownload?: boolean;\n activeDownloads: number[];\n canShowSeenBy?: boolean;\n enabledReactions?: string[];\n};\n\nconst ContextMenuContainer: FC = ({\n availableReactions,\n isOpen,\n messageListType,\n chatUsername,\n message,\n album,\n anchor,\n onClose,\n onCloseAnimationEnd,\n noOptions,\n canSendNow,\n hasFullInfo,\n canReschedule,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canShowReactionsCount,\n canShowReactionList,\n canRemoveReaction,\n canEdit,\n enabledReactions,\n isPrivate,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n activeDownloads,\n canShowSeenBy,\n}) => {\n const {\n setReplyingToId,\n setEditingId,\n pinMessage,\n openForwardMenu,\n faveSticker,\n unfaveSticker,\n toggleMessageSelection,\n sendScheduledMessages,\n rescheduleMessage,\n downloadMessageMedia,\n cancelMessageMediaDownload,\n loadSeenBy,\n openSeenByModal,\n sendReaction,\n openReactorListModal,\n loadFullChat,\n loadReactors,\n } = getDispatch();\n\n const { transitionClassNames } = useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const [isReportModalOpen, setIsReportModalOpen] = useState(false);\n const [isPinModalOpen, setIsPinModalOpen] = useState(false);\n const [isCalendarOpen, openCalendar, closeCalendar] = useFlag();\n\n useEffect(() => {\n if (canShowSeenBy && isOpen) {\n loadSeenBy({ chatId: message.chatId, messageId: message.id });\n }\n }, [loadSeenBy, isOpen, message.chatId, message.id, canShowSeenBy]);\n\n useEffect(() => {\n if (canShowReactionsCount && isOpen) {\n loadReactors({ chatId: message.chatId, messageId: message.id });\n }\n }, [canShowReactionsCount, isOpen, loadReactors, message.chatId, message.id]);\n\n useEffect(() => {\n if (!hasFullInfo && !isPrivate && isOpen) {\n loadFullChat({ chatId: message.chatId });\n }\n }, [hasFullInfo, isOpen, isPrivate, loadFullChat, message.chatId]);\n\n const seenByRecentUsers = useMemo(() => {\n if (message.reactions?.recentReactions?.length) {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return message.reactions?.recentReactions?.slice(0, 3).map(({ userId }) => usersById[userId]).filter(Boolean);\n }\n\n if (!message.seenByUserIds) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n return message.seenByUserIds?.slice(0, 3).map((id) => usersById[id]).filter(Boolean);\n }, [message.reactions?.recentReactions, message.seenByUserIds]);\n\n const isDownloading = album ? album.messages.some((msg) => activeDownloads.includes(msg.id))\n : activeDownloads.includes(message.id);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const handleReport = useCallback(() => {\n setIsMenuOpen(false);\n setIsReportModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closeReportModal = useCallback(() => {\n setIsReportModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closePinModal = useCallback(() => {\n setIsPinModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleCloseCalendar = useCallback(() => {\n closeCalendar();\n onClose();\n }, [closeCalendar, onClose]);\n\n const handleReply = useCallback(() => {\n setReplyingToId({ messageId: message.id });\n closeMenu();\n }, [setReplyingToId, message.id, closeMenu]);\n\n const handleEdit = useCallback(() => {\n setEditingId({ messageId: message.id });\n closeMenu();\n }, [setEditingId, message.id, closeMenu]);\n\n const handlePin = useCallback(() => {\n setIsMenuOpen(false);\n setIsPinModalOpen(true);\n }, []);\n\n const handleUnpin = useCallback(() => {\n pinMessage({ messageId: message.id, isUnpin: true });\n closeMenu();\n }, [pinMessage, message.id, closeMenu]);\n\n const handleForward = useCallback(() => {\n closeMenu();\n if (album?.messages) {\n const messageIds = album.messages.map(({ id }) => id);\n openForwardMenu({ fromChatId: message.chatId, messageIds });\n } else {\n openForwardMenu({ fromChatId: message.chatId, messageIds: [message.id] });\n }\n }, [openForwardMenu, message, closeMenu, album]);\n\n const handleFaveSticker = useCallback(() => {\n closeMenu();\n faveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, faveSticker]);\n\n const handleUnfaveSticker = useCallback(() => {\n closeMenu();\n unfaveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, unfaveSticker]);\n\n const handleSelectMessage = useCallback(() => {\n const params = album?.messages\n ? {\n messageId: message.id,\n childMessageIds: album.messages.map(({ id }) => id),\n withShift: false,\n }\n : { messageId: message.id, withShift: false };\n\n toggleMessageSelection(params);\n closeMenu();\n }, [closeMenu, message.id, toggleMessageSelection, album]);\n\n const handleScheduledMessageSend = useCallback(() => {\n sendScheduledMessages({ chatId: message.chatId, id: message.id });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendScheduledMessages]);\n\n const handleOpenCalendar = useCallback(() => {\n setIsMenuOpen(false);\n openCalendar();\n }, [openCalendar]);\n\n const handleOpenSeenByModal = useCallback(() => {\n closeMenu();\n openSeenByModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, message.chatId, message.id, openSeenByModal]);\n\n const handleOpenReactorListModal = useCallback(() => {\n closeMenu();\n openReactorListModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, openReactorListModal, message.chatId, message.id]);\n\n const handleRescheduleMessage = useCallback((date: Date) => {\n rescheduleMessage({\n chatId: message.chatId,\n messageId: message.id,\n scheduledAt: Math.round(date.getTime() / 1000),\n });\n }, [message.chatId, message.id, rescheduleMessage]);\n\n const handleCopyLink = useCallback(() => {\n copyTextToClipboard(`https://t.me/${chatUsername || `c/${message.chatId.replace('-', '')}`}/${message.id}`);\n closeMenu();\n }, [chatUsername, closeMenu, message.chatId, message.id]);\n\n const handleDownloadClick = useCallback(() => {\n (album?.messages || [message]).forEach((msg) => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message: msg });\n } else {\n downloadMessageMedia({ message: msg });\n }\n });\n closeMenu();\n }, [album, message, closeMenu, isDownloading, cancelMessageMediaDownload, downloadMessageMedia]);\n\n const handleSendReaction = useCallback((reaction: string | undefined, x: number, y: number) => {\n sendReaction({\n chatId: message.chatId, messageId: message.id, reaction, x, y, startSize: START_SIZE,\n });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendReaction]);\n\n const reportMessageIds = useMemo(() => (album ? album.messages : [message]).map(({ id }) => id), [album, message]);\n\n if (noOptions) {\n closeMenu();\n\n return undefined;\n }\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n return (\n
\n \n \n \n \n {canReschedule && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message, messageListType }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const activeDownloads = selectActiveDownloadIds(global, message.chatId);\n const chat = selectChat(global, message.chatId);\n const { seenByExpiresAt, seenByMaxChatMembers } = global.appConfig || {};\n const {\n noOptions,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canEdit,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const isPinned = messageListType === 'pinned';\n const isScheduled = messageListType === 'scheduled';\n const isChannel = chat && isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const canShowSeenBy = Boolean(chat\n && seenByMaxChatMembers\n && seenByExpiresAt\n && isChatGroup(chat)\n && isOwnMessage(message)\n && !isScheduled\n && chat.membersCount\n && chat.membersCount < seenByMaxChatMembers\n && message.date > Date.now() / 1000 - seenByExpiresAt);\n const isPrivate = chat && isUserId(chat.id);\n const isAction = isActionMessage(message);\n const canShowReactionsCount = !isLocal && !isChannel && !isScheduled && !isAction && !isPrivate && message.reactions\n && !areReactionsEmpty(message.reactions) && message.reactions.canSeeList;\n const canRemoveReaction = isPrivate && message.reactions?.results?.some((l) => l.isChosen);\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n availableReactions: global.availableReactions,\n noOptions,\n canSendNow: isScheduled,\n canReschedule: isScheduled,\n canReply: !isPinned && !isScheduled && canReply,\n canPin: !isScheduled && canPin,\n canUnpin: !isScheduled && canUnpin,\n canDelete,\n canReport,\n canEdit: !isPinned && canEdit,\n canForward: !isProtected && !isScheduled && canForward,\n canFaveSticker: !isScheduled && canFaveSticker,\n canUnfaveSticker: !isScheduled && canUnfaveSticker,\n canCopy: !isProtected && canCopy,\n canCopyLink: !isProtected && !isScheduled && canCopyLink,\n canSelect,\n canDownload: !isProtected && canDownload,\n activeDownloads,\n canShowSeenBy,\n enabledReactions: chat?.fullInfo?.enabledReactions,\n isPrivate,\n hasFullInfo: Boolean(chat?.fullInfo),\n canShowReactionsCount,\n canShowReactionList: !isLocal && !isAction && !isScheduled && chat?.id !== SERVICE_NOTIFICATIONS_USER_ID,\n canRemoveReaction,\n };\n },\n)(ContextMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiSticker, ApiStickerSet } from '../../api/types';\n\nimport { STICKER_SIZE_MODAL } from '../../config';\nimport {\n selectChat, selectCurrentMessageList, selectStickerSet, selectStickerSetByShortName,\n} from '../../modules/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\nimport { getAllowedAttachmentOptions, getCanPostInChat } from '../../modules/helpers';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Loading from '../ui/Loading';\nimport StickerButton from './StickerButton';\n\nimport './StickerSetModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n fromSticker?: ApiSticker;\n stickerSetShortName?: string;\n onClose: () => void;\n};\n\ntype StateProps = {\n canSendStickers?: boolean;\n stickerSet?: ApiStickerSet;\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerSetModal: FC = ({\n isOpen,\n fromSticker,\n stickerSetShortName,\n stickerSet,\n canSendStickers,\n onClose,\n}) => {\n const {\n loadStickers,\n toggleStickerSet,\n sendMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const lang = useLang();\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE, isDisabled: !isOpen });\n\n useEffect(() => {\n if (isOpen) {\n if (fromSticker) {\n const { stickerSetId, stickerSetAccessHash } = fromSticker;\n loadStickers({\n stickerSetId,\n stickerSetAccessHash,\n });\n } else if (stickerSetShortName) {\n loadStickers({\n stickerSetShortName,\n });\n }\n }\n }, [isOpen, fromSticker, loadStickers, stickerSetShortName]);\n\n const handleSelect = useCallback((sticker: ApiSticker) => {\n sticker = {\n ...sticker,\n isPreloadedGlobally: true,\n };\n\n sendMessage({ sticker });\n onClose();\n }, [onClose, sendMessage]);\n\n const handleButtonClick = useCallback(() => {\n if (stickerSet) {\n toggleStickerSet({ stickerSetId: stickerSet.id });\n onClose();\n }\n }, [onClose, stickerSet, toggleStickerSet]);\n\n return (\n \n {stickerSet?.stickers ? (\n <>\n
\n {stickerSet.stickers.map((sticker) => (\n \n ))}\n
\n
\n \n {lang(\n stickerSet.installedDate ? 'StickerPack.RemoveStickerCount' : 'StickerPack.AddStickerCount',\n stickerSet.count,\n 'i',\n )}\n \n
\n \n ) : (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { fromSticker, stickerSetShortName }): StateProps => {\n const currentMessageList = selectCurrentMessageList(global);\n const { chatId, threadId } = currentMessageList || {};\n const chat = chatId && selectChat(global, chatId);\n const sendOptions = chat ? getAllowedAttachmentOptions(chat) : undefined;\n const canSendStickers = Boolean(\n chat && threadId && getCanPostInChat(chat, threadId) && sendOptions?.canSendStickers,\n );\n\n return {\n canSendStickers,\n stickerSet: fromSticker\n ? selectStickerSet(global, fromSticker.stickerSetId)\n : stickerSetShortName\n ? selectStickerSetByShortName(global, stickerSetShortName)\n : undefined,\n };\n },\n)(StickerSetModal));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat } from '../../api/types';\nimport { IAnchorPosition } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { disableScrolling, enableScrolling } from '../../util/scrollLock';\nimport {\n selectChat, selectNotifySettings, selectNotifyExceptions, selectUser,\n} from '../../modules/selectors';\nimport {\n isUserId, getCanDeleteChat, selectIsChatMuted, getCanAddContact,\n} from '../../modules/helpers';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Portal from '../ui/Portal';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\nimport DeleteChatModal from '../common/DeleteChatModal';\n\nimport './HeaderMenuContainer.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n isOpen: boolean;\n withExtraActions: boolean;\n anchor: IAnchorPosition;\n isChannel?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n canSubscribe?: boolean;\n canSearch?: boolean;\n canCall?: boolean;\n canMute?: boolean;\n canLeave?: boolean;\n canEnterVoiceChat?: boolean;\n canCreateVoiceChat?: boolean;\n onSubscribeChannel: () => void;\n onSearchClick: () => void;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isPrivate?: boolean;\n isMuted?: boolean;\n canAddContact?: boolean;\n canDeleteChat?: boolean;\n hasLinkedChat?: boolean;\n};\n\nconst HeaderMenuContainer: FC = ({\n chatId,\n isOpen,\n withExtraActions,\n anchor,\n isChannel,\n canStartBot,\n canRestartBot,\n canSubscribe,\n canSearch,\n canCall,\n canMute,\n canLeave,\n canEnterVoiceChat,\n canCreateVoiceChat,\n chat,\n isPrivate,\n isMuted,\n canDeleteChat,\n hasLinkedChat,\n canAddContact,\n onSubscribeChannel,\n onSearchClick,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const {\n updateChatMutedState,\n enterMessageSelectMode,\n sendBotCommand,\n restartBot,\n joinGroupCall,\n createGroupCall,\n openLinkedChat,\n addContact,\n openCallFallbackConfirm,\n } = getDispatch();\n\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const { x, y } = anchor;\n\n useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const handleToggleMuteClick = useCallback(() => {\n updateChatMutedState({ chatId, isMuted: !isMuted });\n closeMenu();\n }, [chatId, closeMenu, isMuted, updateChatMutedState]);\n\n const handleEnterVoiceChatClick = useCallback(() => {\n if (canCreateVoiceChat) {\n // TODO show popup to schedule\n createGroupCall({\n chatId,\n });\n } else {\n joinGroupCall({\n chatId,\n });\n }\n closeMenu();\n }, [closeMenu, canCreateVoiceChat, chatId, joinGroupCall, createGroupCall]);\n\n const handleLinkedChatClick = useCallback(() => {\n openLinkedChat({ id: chatId });\n closeMenu();\n }, [chatId, closeMenu, openLinkedChat]);\n\n const handleAddContactClick = useCallback(() => {\n addContact({ userId: chatId });\n closeMenu();\n }, [addContact, chatId, closeMenu]);\n\n const handleSubscribe = useCallback(() => {\n onSubscribeChannel();\n closeMenu();\n }, [closeMenu, onSubscribeChannel]);\n\n const handleCall = useCallback(() => {\n openCallFallbackConfirm();\n closeMenu();\n }, [closeMenu, openCallFallbackConfirm]);\n\n const handleSearch = useCallback(() => {\n onSearchClick();\n closeMenu();\n }, [closeMenu, onSearchClick]);\n\n const handleSelectMessages = useCallback(() => {\n enterMessageSelectMode();\n closeMenu();\n }, [closeMenu, enterMessageSelectMode]);\n\n useEffect(() => {\n disableScrolling();\n\n return enableScrolling;\n }, []);\n\n const lang = useLang();\n\n return (\n \n
\n \n {withExtraActions && canStartBot && (\n \n {lang('BotStart')}\n \n )}\n {withExtraActions && canRestartBot && (\n \n {lang('BotRestart')}\n \n )}\n {withExtraActions && canSubscribe && (\n \n {lang(isChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n )}\n {canAddContact && (\n \n {lang('AddContact')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canCall && (\n \n {lang('Call')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canSearch && (\n \n {lang('Search')}\n \n )}\n {canMute && (\n \n {lang(isMuted ? 'ChatsUnmute' : 'ChatsMute')}\n \n )}\n {(canEnterVoiceChat || canCreateVoiceChat) && (\n \n {lang(canCreateVoiceChat ? 'StartVoipChat' : 'VoipGroupJoinCall')}\n \n )}\n {hasLinkedChat && (\n \n {lang(isChannel ? 'ViewDiscussion' : 'lng_profile_view_channel')}\n \n )}\n \n {lang('ReportSelectMessages')}\n \n {canLeave && (\n \n {lang(isPrivate\n ? 'DeleteChatUser'\n : (canDeleteChat ? 'GroupInfo.DeleteAndExit' : (isChannel ? 'LeaveChannel' : 'Group.LeaveGroup')))}\n \n )}\n \n {chat && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n const isPrivate = isUserId(chat.id);\n const user = isPrivate ? selectUser(global, chatId) : undefined;\n const canAddContact = user && getCanAddContact(user);\n\n return {\n chat,\n isMuted: selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global)),\n isPrivate,\n canAddContact,\n canDeleteChat: getCanDeleteChat(chat),\n hasLinkedChat: Boolean(chat?.fullInfo?.linkedChatId),\n };\n },\n)(HeaderMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState, useLayoutEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat } from '../../api/types';\n\nimport { debounce } from '../../util/schedulers';\nimport { selectCurrentTextSearch, selectCurrentChat } from '../../modules/selectors';\nimport { getDayStartAt } from '../../util/dateFormat';\n\nimport Button from '../ui/Button';\nimport SearchInput from '../ui/SearchInput';\n\nimport './MobileSearch.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n};\n\ntype StateProps = {\n isActive?: boolean;\n chat?: ApiChat;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n isHistoryCalendarOpen?: boolean;\n};\n\nconst runDebouncedForSearch = debounce((cb) => cb(), 200, false);\n\nconst MobileSearchFooter: FC = ({\n isActive,\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen,\n}) => {\n const {\n setLocalTextSearchQuery,\n searchTextMessagesLocal,\n focusMessage,\n closeLocalTextSearch,\n openHistoryCalendar,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n // Fix for iOS keyboard\n useEffect(() => {\n const { visualViewport } = window as any;\n if (!visualViewport) {\n return undefined;\n }\n\n const mainEl = document.getElementById('Main') as HTMLDivElement;\n const handleResize = () => {\n const { activeElement } = document;\n if (activeElement && (activeElement === inputRef.current)) {\n const { pageTop, height } = visualViewport;\n mainEl.style.transform = `translateY(${pageTop}px)`;\n mainEl.style.height = `${height}px`;\n document.documentElement.scrollTop = pageTop;\n } else {\n mainEl.style.transform = '';\n mainEl.style.height = '';\n }\n };\n\n visualViewport.addEventListener('resize', handleResize);\n\n return () => {\n visualViewport.removeEventListener('resize', handleResize);\n };\n }, []);\n\n // Focus message\n useEffect(() => {\n if (chat?.id && foundIds?.length) {\n focusMessage({ chatId: chat.id, messageId: foundIds[0] });\n setFocusedIndex(0);\n } else {\n setFocusedIndex(-1);\n }\n }, [chat?.id, focusMessage, foundIds]);\n\n // Disable native up/down buttons on iOS\n useEffect(() => {\n Array.from(document.querySelectorAll('input')).forEach((input) => {\n input.disabled = Boolean(isActive && input !== inputRef.current);\n });\n\n Array.from(document.querySelectorAll('div[contenteditable]')).forEach((div) => {\n div.contentEditable = isActive ? 'false' : 'true';\n });\n }, [isActive]);\n\n // Blur on exit\n useEffect(() => {\n if (!isActive) {\n inputRef.current!.blur();\n }\n }, [isActive]);\n\n useLayoutEffect(() => {\n const searchInput = document.querySelector('#MobileSearch input')!;\n searchInput.blur();\n }, [isHistoryCalendarOpen]);\n\n const handleMessageSearchQueryChange = useCallback((newQuery: string) => {\n setLocalTextSearchQuery({ query: newQuery });\n\n if (newQuery.length) {\n runDebouncedForSearch(searchTextMessagesLocal);\n }\n }, [searchTextMessagesLocal, setLocalTextSearchQuery]);\n\n const handleUp = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex + 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n const handleDown = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex - 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n return (\n
\n
\n \n \n \n \n
\n
\n
\n {query ? (\n foundIds?.length ? (\n `${focusedIndex + 1} of ${totalCount}`\n ) : foundIds && !foundIds.length ? (\n 'No results'\n ) : (\n ''\n )\n ) : (\n openHistoryCalendar({ selectedAt: getDayStartAt(Date.now()) })}\n ariaLabel=\"Search messages by date\"\n >\n \n \n )}\n
\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen: Boolean(global.historyCalendarSelectedAt),\n };\n },\n)(MobileSearchFooter));\n","export default function findInViewport(\n container: HTMLElement,\n selectorOrElements: string | NodeListOf,\n margin = 0,\n isDense = false,\n shouldContainBottom = false,\n isHorizontal = false,\n) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const allElements = typeof selectorOrElements === 'string'\n ? container.querySelectorAll(selectorOrElements)\n : selectorOrElements;\n const { length } = allElements;\n const visibleIndexes: number[] = [];\n let isFound = false;\n\n for (let i = 0; i < length; i++) {\n const element = allElements[i];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const isVisible = shouldContainBottom\n ? y2 >= viewportY1 - margin && y2 <= viewportY2 + margin\n : y1 <= viewportY2 + margin && y2 >= viewportY1 - margin;\n\n if (isVisible) {\n visibleIndexes.push(i);\n isFound = true;\n } else if (isFound && !isDense) {\n break;\n }\n }\n\n return { allElements, visibleIndexes };\n}\n","function isFullyVisible(container: HTMLElement, element: HTMLElement, isHorizontal = false) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n return y1 > viewportY1 && y2 < viewportY2;\n}\n\nexport default isFullyVisible;\n","import findInViewport from './findInViewport';\nimport isFullyVisible from './isFullyVisible';\nimport fastSmoothScroll from './fastSmoothScroll';\n\nconst VIEWPORT_MARGIN = 8;\nconst SCROLL_MARGIN = 10;\n\nexport default function setTooltipItemVisible(selector: string, index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container || index < 0) {\n return;\n }\n const { visibleIndexes, allElements } = findInViewport(\n container,\n selector,\n VIEWPORT_MARGIN,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first]))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n fastSmoothScroll(container, allElements[index], position, SCROLL_MARGIN);\n }\n}\n","import { useCallback, useEffect, useState } from '../../../../lib/teact/teact';\nimport captureKeyboardListeners from '../../../../util/captureKeyboardListeners';\nimport cycleRestrict from '../../../../util/cycleRestrict';\n\nexport function useKeyboardNavigation({\n isActive,\n isHorizontal,\n shouldSaveSelectionOnUpdateItems,\n shouldRemoveSelectionOnReset,\n noArrowNavigation,\n items,\n shouldSelectOnTab,\n onSelect,\n onClose,\n}: {\n isActive: boolean;\n isHorizontal?: boolean;\n shouldSaveSelectionOnUpdateItems?: boolean;\n shouldRemoveSelectionOnReset?: boolean;\n noArrowNavigation?: boolean;\n items?: any[];\n shouldSelectOnTab?: boolean;\n onSelect: AnyToVoidFunction;\n onClose: NoneToVoidFunction;\n}) {\n const [selectedItemIndex, setSelectedItemIndex] = useState(-1);\n\n const getSelectedIndex = useCallback((newIndex: number) => {\n if (!items) {\n return -1;\n }\n\n return cycleRestrict(items.length, newIndex);\n }, [items]);\n\n const handleArrowKey = useCallback((value: number, e: KeyboardEvent) => {\n e.preventDefault();\n setSelectedItemIndex((index) => (getSelectedIndex(index + value)));\n }, [setSelectedItemIndex, getSelectedIndex]);\n\n const handleItemSelect = useCallback((e: KeyboardEvent) => {\n if (items && items.length && selectedItemIndex > -1) {\n const item = items[selectedItemIndex];\n if (item) {\n e.preventDefault();\n onSelect(item);\n }\n }\n }, [items, onSelect, selectedItemIndex]);\n\n const isSelectionOutOfRange = !items || selectedItemIndex > items.length - 1;\n useEffect(() => {\n if (!shouldSaveSelectionOnUpdateItems || isSelectionOutOfRange) {\n setSelectedItemIndex(shouldRemoveSelectionOnReset ? -1 : 0);\n }\n }, [isSelectionOutOfRange, shouldRemoveSelectionOnReset, shouldSaveSelectionOnUpdateItems]);\n\n useEffect(() => (isActive ? captureKeyboardListeners({\n onEsc: onClose,\n onUp: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onDown: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onLeft: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onRight: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onTab: shouldSelectOnTab ? handleItemSelect : undefined,\n onEnter: handleItemSelect,\n }) : undefined), [\n noArrowNavigation, handleArrowKey, handleItemSelect, isActive, isHorizontal, onClose, shouldSelectOnTab,\n ]);\n\n return selectedItemIndex;\n}\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nimport './MentionTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onInsertUserName: (user: ApiUser, forceFocus?: boolean) => void;\n filteredUsers?: ApiUser[];\n};\n\nconst MentionTooltip: FC = ({\n isOpen,\n onClose,\n onInsertUserName,\n filteredUsers,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleUserSelect = useCallback((userId: string, forceFocus = false) => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const user = usersById[userId];\n if (!user) {\n return;\n }\n\n onInsertUserName(user, forceFocus);\n }, [onInsertUserName]);\n\n const handleSelectMention = useCallback((member: ApiUser) => {\n handleUserSelect(member.id, true);\n }, [handleUserSelect]);\n\n const selectedMentionIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: filteredUsers,\n onSelect: handleSelectMention,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedMentionIndex, containerRef);\n }, [selectedMentionIndex]);\n\n useEffect(() => {\n if (filteredUsers && !filteredUsers.length) {\n onClose();\n }\n }, [filteredUsers, onClose]);\n\n const prevChatMembers = usePrevious(\n filteredUsers?.length\n ? filteredUsers\n : undefined,\n shouldRender,\n );\n const renderedChatMembers = filteredUsers && !filteredUsers.length\n ? prevChatMembers\n : filteredUsers;\n\n if (!shouldRender || (renderedChatMembers && !renderedChatMembers.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'MentionTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedChatMembers?.map(({ id }, index) => (\n handleUserSelect(id)}\n focus={selectedMentionIndex === index}\n >\n \n \n ))}\n
\n );\n};\n\nexport default memo(MentionTooltip);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAttachment, ApiChatMember } from '../../../api/types';\n\nimport {\n CONTENT_TYPES_WITH_PREVIEW,\n EDITABLE_INPUT_MODAL_ID,\n SUPPORTED_IMAGE_CONTENT_TYPES,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n} from '../../../config';\nimport { getFileExtension } from '../../common/helpers/documentInfo';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useMentionTooltip from './hooks/useMentionTooltip';\nimport useEmojiTooltip from './hooks/useEmojiTooltip';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { useStateRef } from '../../../hooks/useStateRef';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport File from '../../common/File';\nimport MessageInput from './MessageInput';\nimport MentionTooltip from './MentionTooltip';\nimport EmojiTooltip from './EmojiTooltip.async';\n\nimport './AttachmentModal.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n attachments: ApiAttachment[];\n caption: string;\n isReady?: boolean;\n currentUserId?: string;\n groupChatMembers?: ApiChatMember[];\n recentEmojis: string[];\n baseEmojiKeywords?: Record;\n emojiKeywords?: Record;\n addRecentEmoji: AnyToVoidFunction;\n onCaptionUpdate: (html: string) => void;\n onSend: () => void;\n onFileAppend: (files: File[], isQuick: boolean) => void;\n onClear: () => void;\n};\n\nconst DROP_LEAVE_TIMEOUT_MS = 150;\n\nconst AttachmentModal: FC = ({\n chatId,\n threadId,\n attachments,\n caption,\n isReady,\n currentUserId,\n groupChatMembers,\n recentEmojis,\n baseEmojiKeywords,\n emojiKeywords,\n addRecentEmoji,\n onCaptionUpdate,\n onSend,\n onFileAppend,\n onClear,\n}) => {\n const captionRef = useStateRef(caption);\n const hideTimeoutRef = useRef();\n const prevAttachments = usePrevious(attachments);\n const renderingAttachments = attachments.length ? attachments : prevAttachments;\n const isOpen = Boolean(attachments.length);\n const [isHovered, markHovered, unmarkHovered] = useFlag();\n const isQuick = Boolean(renderingAttachments && renderingAttachments.every((a) => a.quick));\n const lang = useLang();\n\n const {\n isMentionTooltipOpen, closeMentionTooltip, insertMention, mentionFilteredUsers,\n } = useMentionTooltip(\n isOpen,\n captionRef,\n onCaptionUpdate,\n EDITABLE_INPUT_MODAL_ID,\n groupChatMembers,\n undefined,\n currentUserId,\n );\n const {\n isEmojiTooltipOpen, closeEmojiTooltip, filteredEmojis, insertEmoji,\n } = useEmojiTooltip(\n isOpen,\n captionRef,\n recentEmojis,\n EDITABLE_INPUT_MODAL_ID,\n onCaptionUpdate,\n baseEmojiKeywords,\n emojiKeywords,\n !isReady,\n );\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n\n const sendAttachments = useCallback(() => {\n if (isOpen) {\n onSend();\n }\n }, [isOpen, onSend]);\n\n const handleDragLeave = (e: React.DragEvent) => {\n const { relatedTarget: toTarget, target: fromTarget } = e;\n\n // Esc button pressed during drag event\n if ((fromTarget as HTMLDivElement).matches('.drop-target') && !toTarget) {\n hideTimeoutRef.current = window.setTimeout(unmarkHovered, DROP_LEAVE_TIMEOUT_MS);\n }\n\n // Prevent DragLeave event from firing when the pointer moves inside the AttachmentModal drop target\n if (fromTarget && (fromTarget as HTMLElement).closest('.AttachmentModal.hovered')) {\n return;\n }\n\n if (toTarget) {\n e.stopPropagation();\n }\n\n unmarkHovered();\n };\n\n const handleFilesDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n unmarkHovered();\n\n const { dataTransfer: { files } } = e;\n\n if (files?.length) {\n const newFiles = isQuick\n ? Array.from(files).filter((file) => {\n return file.type && CONTENT_TYPES_WITH_PREVIEW.has(file.type);\n })\n : Array.from(files);\n\n onFileAppend(newFiles, isQuick);\n }\n }, [isQuick, onFileAppend, unmarkHovered]);\n\n function handleDragOver(e: React.MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (hideTimeoutRef.current) {\n window.clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = undefined;\n }\n }\n\n if (!renderingAttachments) {\n return undefined;\n }\n\n const areAllPhotos = renderingAttachments.every((a) => SUPPORTED_IMAGE_CONTENT_TYPES.has(a.mimeType));\n const areAllVideos = renderingAttachments.every((a) => SUPPORTED_VIDEO_CONTENT_TYPES.has(a.mimeType));\n const areAllAudios = renderingAttachments.every((a) => a.mimeType.startsWith('audio/'));\n\n let title = '';\n if (areAllPhotos) {\n title = lang('PreviewSender.SendPhoto', renderingAttachments.length, 'i');\n } else if (areAllVideos) {\n title = lang('PreviewSender.SendVideo', renderingAttachments.length, 'i');\n } else if (areAllAudios) {\n title = lang('PreviewSender.SendAudio', renderingAttachments.length, 'i');\n } else {\n title = lang('PreviewSender.SendFile', renderingAttachments.length, 'i');\n }\n\n function renderHeader() {\n if (!renderingAttachments) {\n return undefined;\n }\n\n return (\n
\n \n
{title}
\n \n {lang('Send')}\n \n
\n );\n }\n\n return (\n \n \n {isQuick ? (\n
\n {renderingAttachments.map((attachment) => (\n attachment.mimeType.startsWith('image/')\n ? \"\"\n :
\n ) : (\n
\n {renderingAttachments.map((attachment) => (\n \n ))}\n
\n )}\n\n
\n \n \n \n
\n
\n \n );\n};\n\nexport default memo(AttachmentModal);\n","import { ChangeEvent, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { ApiNewPoll } from '../../../api/types';\n\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport InputText from '../../ui/InputText';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup from '../../ui/RadioGroup';\n\nimport './PollModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onSend: (pollSummary: ApiNewPoll) => void;\n onClear: () => void;\n};\n\nconst MAX_LIST_HEIGHT = 320;\nconst MAX_OPTIONS_COUNT = 10;\nconst MAX_OPTION_LENGTH = 100;\nconst MAX_QUESTION_LENGTH = 255;\nconst MAX_SOLUTION_LENGTH = 200;\n\nconst PollModal: FC = ({ isOpen, onSend, onClear }) => {\n // eslint-disable-next-line no-null/no-null\n const questionInputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const optionsListRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const solutionRef = useRef(null);\n\n const [question, setQuestion] = useState('');\n const [options, setOptions] = useState(['']);\n const [isAnonymous, setIsAnonymous] = useState(true);\n const [isMultipleAnswers, setIsMultipleAnswers] = useState(false);\n const [isQuizMode, setIsQuizMode] = useState(false);\n const [solution, setSolution] = useState();\n const [correctOption, setCorrectOption] = useState();\n const [hasErrors, setHasErrors] = useState(false);\n\n const lang = useLang();\n\n const focusInput = useCallback((ref: RefObject) => {\n if (isOpen && ref.current) {\n ref.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n useEffect(() => {\n if (!isOpen) {\n setQuestion('');\n setOptions(['']);\n setIsAnonymous(true);\n setIsMultipleAnswers(false);\n setIsQuizMode(false);\n setSolution('');\n setCorrectOption('');\n setHasErrors(false);\n }\n }, [isOpen]);\n\n useEffect(() => focusInput(questionInputRef), [focusInput, isOpen]);\n\n useLayoutEffect(() => {\n const solutionEl = solutionRef.current;\n\n if (solutionEl && solution !== solutionEl.innerHTML) {\n solutionEl.innerHTML = solution;\n }\n }, [solution]);\n\n const addNewOption = useCallback((newOptions: string[] = []) => {\n setOptions([...newOptions, '']);\n requestAnimationFrame(() => {\n const list = optionsListRef.current;\n if (!list) {\n return;\n }\n\n list.classList.toggle('overflown', list.scrollHeight > MAX_LIST_HEIGHT);\n list.scrollTo({ top: list.scrollHeight, behavior: 'smooth' });\n });\n }, []);\n\n const handleCreate = useCallback(() => {\n setHasErrors(false);\n if (!isOpen) {\n return;\n }\n\n const questionTrimmed = question.trim().substring(0, MAX_QUESTION_LENGTH);\n const optionsTrimmed = options.map((o) => o.trim().substring(0, MAX_OPTION_LENGTH)).filter((o) => o.length);\n\n if (!questionTrimmed || optionsTrimmed.length < 2) {\n setQuestion(questionTrimmed);\n if (optionsTrimmed.length) {\n if (optionsTrimmed.length < 2) {\n addNewOption(optionsTrimmed);\n } else {\n setOptions(optionsTrimmed);\n }\n } else {\n addNewOption();\n }\n setHasErrors(true);\n return;\n }\n\n if (isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)])) {\n setHasErrors(true);\n return;\n }\n\n const answers = optionsTrimmed\n .map((text, index) => ({\n text: text.trim(),\n option: String(index),\n ...(String(index) === correctOption && { correct: true }),\n }));\n\n const payload: ApiNewPoll = {\n summary: {\n question: questionTrimmed,\n answers,\n ...(!isAnonymous && { isPublic: true }),\n ...(isMultipleAnswers && { multipleChoice: true }),\n ...(isQuizMode && { quiz: true }),\n },\n };\n\n if (isQuizMode) {\n const { text, entities } = (solution && parseMessageInput(solution.substring(0, MAX_SOLUTION_LENGTH))) || {};\n\n payload.quiz = {\n correctAnswers: [correctOption],\n ...(text && { solution: text }),\n ...(entities && { solutionEntities: entities }),\n };\n }\n\n onSend(payload);\n }, [\n isOpen,\n question,\n options,\n isQuizMode,\n correctOption,\n isAnonymous,\n isMultipleAnswers,\n onSend,\n addNewOption,\n solution,\n ]);\n\n const updateOption = useCallback((index: number, text: string) => {\n const newOptions = [...options];\n newOptions[index] = text;\n if (newOptions[newOptions.length - 1].trim().length && newOptions.length < MAX_OPTIONS_COUNT) {\n addNewOption(newOptions);\n } else {\n setOptions(newOptions);\n }\n }, [options, addNewOption]);\n\n const removeOption = useCallback((index: number) => {\n const newOptions = [...options];\n newOptions.splice(index, 1);\n setOptions(newOptions);\n requestAnimationFrame(() => {\n if (!optionsListRef.current) {\n return;\n }\n\n optionsListRef.current.classList.toggle('overflown', optionsListRef.current.scrollHeight > MAX_LIST_HEIGHT);\n });\n }, [options]);\n\n const handleCorrectOptionChange = useCallback((newValue: string) => {\n setCorrectOption(newValue);\n }, [setCorrectOption]);\n\n const handleIsAnonymousChange = useCallback((e: ChangeEvent) => {\n setIsAnonymous(e.target.checked);\n }, []);\n\n const handleMultipleAnswersChange = useCallback((e: ChangeEvent) => {\n setIsMultipleAnswers(e.target.checked);\n }, []);\n\n const handleQuizModeChange = useCallback((e: ChangeEvent) => {\n setIsQuizMode(e.target.checked);\n }, []);\n\n const handleKeyPress = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n handleCreate();\n }\n }, [handleCreate]);\n\n const getQuestionError = useCallback(() => {\n if (hasErrors && !question.trim().length) {\n return lang('lng_polls_choose_question');\n }\n\n return undefined;\n }, [hasErrors, lang, question]);\n\n const getOptionsError = useCallback((index: number) => {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n if (hasErrors && optionsTrimmed.length < 2 && !options[index].trim().length) {\n return lang('lng_polls_choose_answers');\n }\n return undefined;\n }, [hasErrors, lang, options]);\n\n function renderHeader() {\n return (\n
\n \n
{lang('NewPoll')}
\n \n {lang('Create')}\n \n
\n );\n }\n\n function renderOptions() {\n return options.map((option, index) => (\n
\n updateOption(index, e.currentTarget.value)}\n onKeyPress={handleKeyPress}\n />\n {index !== options.length - 1 && (\n removeOption(index)}\n >\n \n \n )}\n
\n ));\n }\n\n function renderRadioOptions() {\n return renderOptions()\n .map((label, index) => ({ value: String(index), label, hidden: index === options.length - 1 }));\n }\n\n function renderQuizNoOptionError() {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n\n return isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)]) && (\n

{lang('lng_polls_choose_correct')}

\n );\n }\n\n return (\n \n setQuestion(e.currentTarget.value)}\n onKeyPress={handleKeyPress}\n />\n
\n\n
\n

{lang('PollOptions')}

\n\n {hasErrors && renderQuizNoOptionError()}\n {isQuizMode ? (\n \n ) : (\n renderOptions()\n )}\n\n
\n\n
\n\n
\n \n \n \n {isQuizMode && (\n <>\n

{lang('lng_polls_solution_title')}

\n setSolution(e.currentTarget.innerHTML)}\n />\n
{lang('CreatePoll.ExplanationInfo')}
\n \n )}\n
\n \n );\n};\n\nexport default memo(PollModal);\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\n\nimport './EmojiButton.scss';\n\ntype OwnProps = {\n emoji: Emoji;\n focus?: boolean;\n onClick: (emoji: string, name: string) => void;\n};\n\nconst EmojiButton: FC = ({ emoji, focus, onClick }) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n // Preventing safari from losing focus on Composer MessageInput\n e.preventDefault();\n\n onClick(emoji.native, emoji.id);\n }, [emoji, onClick]);\n\n return (\n \n {IS_EMOJI_SUPPORTED ? emoji.native : \"\"}\n
\n );\n};\n\nexport default memo(EmojiButton);\n","import React, { FC, memo, useRef } from '../../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport windowSize from '../../../util/windowSize';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport useLang from '../../../hooks/useLang';\n\nimport EmojiButton from './EmojiButton';\n\nconst EMOJIS_PER_ROW_ON_DESKTOP = 9;\nconst EMOJI_MARGIN = 4;\nconst MOBILE_CONTAINER_PADDING = 8;\nconst EMOJI_SIZE = 40;\n\ntype OwnProps = {\n category: EmojiCategory;\n index: number;\n allEmojis: AllEmojis;\n observeIntersection: ObserveFn;\n shouldRender: boolean;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\nconst EmojiCategory: FC = ({\n category, index, allEmojis, observeIntersection, shouldRender, onEmojiSelect,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const lang = useLang();\n\n const emojisPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (EMOJI_SIZE + EMOJI_MARGIN))\n : EMOJIS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(category.emojis.length / emojisPerRow) * (EMOJI_SIZE + EMOJI_MARGIN);\n\n return (\n \n

\n {lang(category.id === 'recent' ? 'RecentStickers' : `Emoji${index}`)}\n

\n \n {shouldRender && category.emojis.map((name) => {\n const emoji = allEmojis[name];\n // Recent emojis may contain emoticons that are no longer in the list\n if (!emoji) {\n return undefined;\n }\n // Some emojis have multiple skins and are represented as an Object with emojis for all skins.\n // For now, we select only the first emoji with 'neutral' skin.\n const displayedEmoji = 'id' in emoji ? emoji : emoji[1];\n\n return (\n \n );\n })}\n
\n \n );\n};\n\nexport default memo(EmojiCategory);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\n\nimport { MENU_TRANSITION_DURATION } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport {\n EmojiModule,\n EmojiRawData,\n EmojiData,\n uncompressEmoji,\n} from '../../../util/emoji';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport { pick } from '../../../util/iteratees';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Loading from '../../ui/Loading';\nimport EmojiCategory from './EmojiCategory';\n\nimport './EmojiPicker.scss';\n\ntype OwnProps = {\n className?: string;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\ntype StateProps = Pick;\ntype EmojiCategoryData = { id: string; name: string; emojis: string[] };\n\nconst ICONS_BY_CATEGORY: Record = {\n recent: 'icon-recent',\n people: 'icon-smile',\n nature: 'icon-animals',\n foods: 'icon-eats',\n activity: 'icon-sport',\n places: 'icon-car',\n objects: 'icon-lamp',\n symbols: 'icon-language',\n flags: 'icon-flag',\n};\n\nconst OPEN_ANIMATION_DELAY = 200;\n// Only a few categories are above this height.\nconst SMOOTH_SCROLL_DISTANCE = 800;\nconst FOCUS_MARGIN = 50;\nconst HEADER_BUTTON_WIDTH = 42; // px. Includes margins\nconst INTERSECTION_THROTTLE = 200;\n\nconst categoryIntersections: boolean[] = [];\n\nlet emojiDataPromise: Promise;\nlet emojiRawData: EmojiRawData;\nlet emojiData: EmojiData;\n\nconst EmojiPicker: FC = ({\n className, onEmojiSelect, recentEmojis,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n\n const [categories, setCategories] = useState();\n const [emojis, setEmojis] = useState();\n const [activeCategoryIndex, setActiveCategoryIndex] = useState(0);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('emoji-category-')) {\n return;\n }\n\n const index = Number(id.replace('emoji-category-', ''));\n categoryIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = categoryIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveCategoryIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n\n useHorizontalScroll(headerRef.current, !IS_SINGLE_COLUMN_LAYOUT);\n\n // Scroll header when active set updates\n useEffect(() => {\n if (!categories) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeCategoryIndex * HEADER_BUTTON_WIDTH - header.offsetWidth / 2 + HEADER_BUTTON_WIDTH / 2;\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [categories, activeCategoryIndex]);\n\n const lang = useLang();\n\n const allCategories = useMemo(() => {\n if (!categories) {\n return MEMO_EMPTY_ARRAY;\n }\n const themeCategories = [...categories];\n if (recentEmojis?.length) {\n themeCategories.unshift({\n id: 'recent',\n name: lang('RecentStickers'),\n emojis: recentEmojis,\n });\n }\n\n return themeCategories;\n }, [categories, lang, recentEmojis]);\n\n // Initialize data on first render.\n useEffect(() => {\n setTimeout(() => {\n const exec = () => {\n setCategories(emojiData.categories);\n\n setEmojis(emojiData.emojis as AllEmojis);\n };\n\n if (emojiData) {\n exec();\n } else {\n ensureEmojiData()\n .then(exec);\n }\n }, OPEN_ANIMATION_DELAY);\n }, []);\n\n const selectCategory = useCallback((index: number) => {\n setActiveCategoryIndex(index);\n const categoryEl = document.getElementById(`emoji-category-${index}`)!;\n fastSmoothScroll(containerRef.current!, categoryEl, 'start', FOCUS_MARGIN, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n onEmojiSelect(emoji, name);\n }, [onEmojiSelect]);\n\n const canRenderContents = useAsyncRendering([], MENU_TRANSITION_DURATION);\n\n function renderCategoryButton(category: EmojiCategoryData, index: number) {\n const icon = ICONS_BY_CATEGORY[category.id];\n\n return icon && (\n selectCategory(index)}\n ariaLabel={category.name}\n >\n \n \n );\n }\n\n const containerClassName = buildClassName('EmojiPicker', className);\n\n if (!emojis || !canRenderContents) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n
\n {allCategories.map(renderCategoryButton)}\n
\n \n {allCategories.map((category, i) => (\n = i - 1 && activeCategoryIndex <= i + 1}\n onEmojiSelect={handleEmojiSelect}\n />\n ))}\n
\n \n );\n};\n\nasync function ensureEmojiData() {\n if (!emojiDataPromise) {\n emojiDataPromise = import('emoji-data-ios/emoji-data.json') as unknown as Promise;\n emojiRawData = (await emojiDataPromise).default;\n\n emojiData = uncompressEmoji(emojiRawData);\n }\n\n return emojiDataPromise;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['recentEmojis']),\n)(EmojiPicker));\n","import React, { FC, memo, useRef } from '../../../lib/teact/teact';\n\nimport { ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport windowSize from '../../../util/windowSize';\nimport StickerButton from '../../common/StickerButton';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport buildClassName from '../../../util/buildClassName';\n\ntype OwnProps = {\n stickerSet: StickerSetOrRecent;\n loadAndPlay: boolean;\n index: number;\n observeIntersection: ObserveFn;\n shouldRender: boolean;\n onStickerSelect: (sticker: ApiSticker) => void;\n onStickerUnfave: (sticker: ApiSticker) => void;\n};\n\nconst STICKERS_PER_ROW_ON_DESKTOP = 5;\nconst STICKER_MARGIN = IS_SINGLE_COLUMN_LAYOUT ? 8 : 16;\nconst MOBILE_CONTAINER_PADDING = 8;\n\nconst StickerSet: FC = ({\n stickerSet,\n loadAndPlay,\n index,\n observeIntersection,\n shouldRender,\n onStickerSelect,\n onStickerUnfave,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const stickersPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (STICKER_SIZE_PICKER + STICKER_MARGIN))\n : STICKERS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(stickerSet.count / stickersPerRow) * (STICKER_SIZE_PICKER + STICKER_MARGIN);\n\n return (\n \n

{stickerSet.title}

\n \n {shouldRender && stickerSet.stickers && stickerSet.stickers.map((sticker) => (\n \n ))}\n \n \n );\n};\n\nexport default memo(StickerSet);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiStickerSet, ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION, STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\n\nimport Loading from '../../ui/Loading';\nimport Button from '../../ui/Button';\nimport StickerButton from '../../common/StickerButton';\nimport StickerSet from './StickerSet';\nimport StickerSetCover from './StickerSetCover';\nimport StickerSetCoverAnimated from './StickerSetCoverAnimated';\n\nimport './StickerPicker.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId?: number;\n className: string;\n loadAndPlay: boolean;\n canSendStickers: boolean;\n onStickerSelect: (sticker: ApiSticker) => void;\n};\n\ntype StateProps = {\n recentStickers: ApiSticker[];\n favoriteStickers: ApiSticker[];\n stickerSetsById: Record;\n addedSetIds?: string[];\n shouldPlay?: boolean;\n};\n\nconst SMOOTH_SCROLL_DISTANCE = 500;\nconst HEADER_BUTTON_WIDTH = 52; // px (including margin)\nconst STICKER_INTERSECTION_THROTTLE = 200;\n\nconst stickerSetIntersections: boolean[] = [];\n\nconst StickerPicker: FC = ({\n chatId,\n threadId,\n className,\n loadAndPlay,\n canSendStickers,\n recentStickers,\n favoriteStickers,\n addedSetIds,\n stickerSetsById,\n shouldPlay,\n onStickerSelect,\n}) => {\n const {\n loadRecentStickers,\n addRecentSticker,\n unfaveSticker,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n const [activeSetIndex, setActiveSetIndex] = useState(0);\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: STICKER_INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('sticker-set-')) {\n return;\n }\n\n const index = Number(id.replace('sticker-set-', ''));\n stickerSetIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = stickerSetIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveSetIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: headerRef });\n\n const lang = useLang();\n\n const areAddedLoaded = Boolean(addedSetIds);\n\n const allSets = useMemo(() => {\n if (!addedSetIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return [\n {\n id: 'recent',\n title: lang('RecentStickers'),\n stickers: recentStickers,\n count: recentStickers.length,\n },\n {\n id: 'favorite',\n title: lang('FavoriteStickers'),\n stickers: favoriteStickers,\n count: favoriteStickers.length,\n },\n ...addedSetIds.map((id) => stickerSetsById[id]).filter(Boolean),\n ];\n }, [addedSetIds, lang, recentStickers, favoriteStickers, stickerSetsById]);\n\n const noPopulatedSets = useMemo(() => (\n areAddedLoaded\n && allSets.filter((set) => set.stickers?.length).length === 0\n ), [allSets, areAddedLoaded]);\n\n useEffect(() => {\n if (loadAndPlay) {\n loadRecentStickers();\n sendMessageAction({ type: 'chooseSticker' });\n }\n }, [loadAndPlay, loadRecentStickers, sendMessageAction]);\n\n useHorizontalScroll(headerRef.current);\n\n // Scroll container and header when active set changes\n useEffect(() => {\n if (!areAddedLoaded) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeSetIndex * HEADER_BUTTON_WIDTH - (header.offsetWidth / 2 - HEADER_BUTTON_WIDTH / 2);\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [areAddedLoaded, activeSetIndex]);\n\n const selectStickerSet = useCallback((index: number) => {\n setActiveSetIndex(index);\n const stickerSetEl = document.getElementById(`sticker-set-${index}`)!;\n fastSmoothScroll(containerRef.current!, stickerSetEl, 'start', undefined, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker) => {\n onStickerSelect(sticker);\n addRecentSticker({ sticker });\n }, [addRecentSticker, onStickerSelect]);\n\n const handleStickerUnfave = useCallback((sticker: ApiSticker) => {\n unfaveSticker({ sticker });\n }, [unfaveSticker]);\n\n const handleMouseMove = useCallback(() => {\n sendMessageAction({ type: 'chooseSticker' });\n }, [sendMessageAction]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n function renderCover(stickerSet: StickerSetOrRecent, index: number) {\n const firstSticker = stickerSet.stickers?.[0];\n const buttonClassName = buildClassName(\n 'symbol-set-button sticker-set-button',\n index === activeSetIndex && 'activated',\n );\n\n if (stickerSet.id === 'recent' || stickerSet.id === 'favorite' || stickerSet.hasThumbnail || !firstSticker) {\n return (\n selectStickerSet(index)}\n >\n {stickerSet.id === 'recent' ? (\n \n ) : stickerSet.id === 'favorite' ? (\n \n ) : stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n );\n } else {\n return (\n \n );\n }\n }\n\n const fullClassName = buildClassName('StickerPicker', className);\n\n if (!areAddedLoaded || !canRenderContents || noPopulatedSets || !canSendStickers) {\n return (\n
\n {!canSendStickers ? (\n
{lang('ErrorSendRestrictedStickersAll')}
\n ) : noPopulatedSets ? (\n
{lang('NoStickers')}
\n ) : (\n \n )}\n
\n );\n }\n\n return (\n
\n \n {allSets.map(renderCover)}\n
\n \n {allSets.map((stickerSet, i) => (\n = i - 1 && activeSetIndex <= i + 1}\n onStickerSelect={handleStickerSelect}\n onStickerUnfave={handleStickerUnfave}\n />\n ))}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n setsById,\n added,\n recent,\n favorite,\n } = global.stickers;\n\n return {\n recentStickers: recent.stickers,\n favoriteStickers: favorite.stickers,\n stickerSetsById: setsById,\n addedSetIds: added.setIds,\n shouldPlay: global.settings.byKey.shouldLoopStickers,\n };\n },\n)(StickerPicker));\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiVideo } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport useBuffering from '../../hooks/useBuffering';\nimport useCanvasBlur from '../../hooks/useCanvasBlur';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\n\nimport Spinner from '../ui/Spinner';\n\nimport './GifButton.scss';\n\ntype OwnProps = {\n gif: ApiVideo;\n observeIntersection: ObserveFn;\n isDisabled?: boolean;\n className?: string;\n onClick: (gif: ApiVideo) => void;\n};\n\nconst GifButton: FC = ({\n gif, observeIntersection, isDisabled, className, onClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n\n const hasThumbnail = Boolean(gif.thumbnail?.dataUri);\n const localMediaHash = `gif${gif.id}`;\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const loadAndPlay = isIntersecting && !isDisabled;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const thumbRef = useCanvasBlur(gif.thumbnail?.dataUri, Boolean(previewBlobUrl));\n const videoData = useMedia(localMediaHash, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const shouldRenderVideo = Boolean(loadAndPlay && videoData);\n const { isBuffered, bufferingHandlers } = useBuffering(true);\n const shouldRenderSpinner = loadAndPlay && !isBuffered;\n const isVideoReady = loadAndPlay && isBuffered;\n\n useVideoCleanup(videoRef, [shouldRenderVideo]);\n\n const handleClick = useCallback(\n () => onClick({\n ...gif,\n blobUrl: videoData,\n }),\n [onClick, gif, videoData],\n );\n\n const fullClassName = buildClassName(\n 'GifButton',\n gif.width && gif.height && gif.width < gif.height ? 'vertical' : 'horizontal',\n localMediaHash,\n className,\n );\n\n return (\n \n {hasThumbnail && (\n \n )}\n {previewBlobUrl && !isVideoReady && (\n \n )}\n {shouldRenderVideo && (\n \n \n \n )}\n {shouldRenderSpinner && (\n \n )}\n \n );\n};\n\nexport default memo(GifButton);\n","import React, {\n FC, useEffect, memo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiVideo } from '../../../api/types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\n\nimport Loading from '../../ui/Loading';\nimport GifButton from '../../common/GifButton';\n\nimport './GifPicker.scss';\n\ntype OwnProps = {\n className: string;\n loadAndPlay: boolean;\n canSendGifs: boolean;\n onGifSelect: (gif: ApiVideo) => void;\n};\n\ntype StateProps = {\n savedGifs?: ApiVideo[];\n};\n\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifPicker: FC = ({\n className,\n loadAndPlay,\n canSendGifs,\n savedGifs,\n onGifSelect,\n}) => {\n const { loadSavedGifs } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n useEffect(() => {\n if (loadAndPlay) {\n loadSavedGifs();\n }\n }, [loadAndPlay, loadSavedGifs]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n return (\n \n {!canSendGifs ? (\n
Sending GIFs is not allowed in this chat.
\n ) : canRenderContents && savedGifs && savedGifs.length ? (\n savedGifs.map((gif) => (\n \n ))\n ) : canRenderContents && savedGifs ? (\n
No saved GIFs.
\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n savedGifs: global.gifs.saved.gifs,\n };\n },\n)(GifPicker));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\ntype OwnProps = {\n activeTab: SymbolMenuTabs;\n onSwitchTab: (tab: SymbolMenuTabs) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n};\n\nexport enum SymbolMenuTabs {\n 'Emoji',\n 'Stickers',\n 'GIFs',\n}\n\n// Getting enum string values for display in Tabs.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\nexport const SYMBOL_MENU_TAB_TITLES = Object.values(SymbolMenuTabs)\n .filter((value): value is string => typeof value === 'string');\n\nconst SYMBOL_MENU_TAB_ICONS = {\n [SymbolMenuTabs.Emoji]: 'icon-smile',\n [SymbolMenuTabs.Stickers]: 'icon-stickers',\n [SymbolMenuTabs.GIFs]: 'icon-gifs',\n};\n\nconst SymbolMenuFooter: FC = ({\n activeTab, onSwitchTab, onRemoveSymbol, onSearchOpen,\n}) => {\n const lang = useLang();\n\n function renderTabButton(tab: SymbolMenuTabs) {\n return (\n onSwitchTab(tab)}\n ariaLabel={SYMBOL_MENU_TAB_TITLES[tab]}\n round\n faded\n color=\"translucent\"\n >\n \n \n );\n }\n\n const handleSearchOpen = useCallback(() => {\n onSearchOpen(activeTab === SymbolMenuTabs.Stickers ? 'stickers' : 'gifs');\n }, [activeTab, onSearchOpen]);\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n return (\n
\n {activeTab !== SymbolMenuTabs.Emoji && (\n \n \n \n )}\n\n {renderTabButton(SymbolMenuTabs.Emoji)}\n {renderTabButton(SymbolMenuTabs.Stickers)}\n {renderTabButton(SymbolMenuTabs.GIFs)}\n\n {activeTab === SymbolMenuTabs.Emoji && (\n \n \n \n )}\n
\n );\n};\n\nexport default memo(SymbolMenuFooter);\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiSticker, ApiVideo } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { fastRaf } from '../../../util/schedulers';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Menu from '../../ui/Menu';\nimport Transition from '../../ui/Transition';\nimport EmojiPicker from './EmojiPicker';\nimport StickerPicker from './StickerPicker';\nimport GifPicker from './GifPicker';\nimport SymbolMenuFooter, { SYMBOL_MENU_TAB_TITLES, SymbolMenuTabs } from './SymbolMenuFooter';\nimport Portal from '../../ui/Portal';\n\nimport './SymbolMenu.scss';\n\nconst ANIMATION_DURATION = 350;\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n onLoad: () => void;\n onClose: () => void;\n onEmojiSelect: (emoji: string) => void;\n onStickerSelect: (sticker: ApiSticker, shouldPreserveInput?: boolean) => void;\n onGifSelect: (gif: ApiVideo) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n addRecentEmoji: AnyToVoidFunction;\n};\n\ntype StateProps = {\n isLeftColumnShown: boolean;\n};\n\nlet isActivated = false;\n\nconst SymbolMenu: FC = ({\n chatId,\n threadId,\n isOpen,\n canSendStickers,\n canSendGifs,\n isLeftColumnShown,\n onLoad,\n onClose,\n onEmojiSelect,\n onStickerSelect,\n onGifSelect,\n onRemoveSymbol,\n onSearchOpen,\n addRecentEmoji,\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [recentEmojis, setRecentEmojis] = useState([]);\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, onClose, false, false);\n\n if (!isActivated && isOpen) {\n isActivated = true;\n }\n\n useEffect(() => {\n onLoad();\n }, [onLoad]);\n\n useLayoutEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return undefined;\n }\n\n if (isOpen) {\n document.body.classList.add('enable-symbol-menu-transforms');\n document.body.classList.add('is-symbol-menu-open');\n }\n\n return () => {\n if (isOpen) {\n fastRaf(() => {\n document.body.classList.remove('is-symbol-menu-open');\n setTimeout(() => {\n document.body.classList.remove('enable-symbol-menu-transforms');\n }, ANIMATION_DURATION);\n });\n }\n };\n }, [isOpen]);\n\n const recentEmojisRef = useRef(recentEmojis);\n recentEmojisRef.current = recentEmojis;\n useEffect(() => {\n if (!recentEmojisRef.current.length) {\n return;\n }\n\n recentEmojisRef.current.forEach((name) => {\n addRecentEmoji({ emoji: name });\n });\n\n setRecentEmojis([]);\n }, [isOpen, activeTab, addRecentEmoji]);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n setRecentEmojis((emojis) => {\n return [...emojis, name];\n });\n\n onEmojiSelect(emoji);\n }, [onEmojiSelect]);\n\n const handleSearch = useCallback((type: 'stickers' | 'gifs') => {\n onClose();\n onSearchOpen(type);\n }, [onClose, onSearchOpen]);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker) => {\n onStickerSelect(sticker, true);\n }, [onStickerSelect]);\n\n const lang = useLang();\n\n function renderContent(isActive: boolean, isFrom: boolean) {\n switch (activeTab) {\n case SymbolMenuTabs.Emoji:\n return (\n \n );\n case SymbolMenuTabs.Stickers:\n return (\n \n );\n case SymbolMenuTabs.GIFs:\n return (\n \n );\n }\n\n return undefined;\n }\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n const content = (\n <>\n
\n {isActivated && (\n \n {renderContent}\n \n )}\n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n \n );\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'SymbolMenu mobile-menu',\n transitionClassNames,\n !isLeftColumnShown && 'middle-column-open',\n );\n\n return (\n \n
\n {content}\n
\n
\n );\n }\n\n return (\n \n {content}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isLeftColumnShown: global.isLeftColumnShown,\n };\n },\n)(SymbolMenu));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { CONTENT_TYPES_WITH_PREVIEW } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './AttachMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n onFileSelect: (files: File[], isQuick: boolean) => void;\n onPollCreate: () => void;\n onClose: () => void;\n};\n\nconst AttachMenu: FC = ({\n isOpen, canAttachMedia, canAttachPolls, onFileSelect, onPollCreate, onClose,\n}) => {\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n\n const handleFileSelect = useCallback((e: Event, isQuick: boolean) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n onFileSelect(Array.from(files), isQuick);\n }\n }, [onFileSelect]);\n\n const handleQuickSelect = useCallback(() => {\n openSystemFilesDialog(\n Array.from(CONTENT_TYPES_WITH_PREVIEW).join(','),\n (e) => handleFileSelect(e, true),\n );\n }, [handleFileSelect]);\n\n const handleDocumentSelect = useCallback(() => {\n openSystemFilesDialog('*', (e) => handleFileSelect(e, false));\n }, [handleFileSelect]);\n\n const lang = useLang();\n\n return (\n \n {/*\n ** Using ternary operator here causes some attributes from first clause\n ** transferring to the fragment content in the second clause\n */}\n {!canAttachMedia && (\n Posting media content is not allowed in this group.\n )}\n {canAttachMedia && (\n <>\n \n {lang('AttachmentMenu.PhotoOrVideo')}\n \n {lang('AttachDocument')}\n \n )}\n {canAttachPolls && (\n {lang('Poll')}\n )}\n \n );\n};\n\nexport default memo(AttachMenu);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\n\nimport './BotCommand.scss';\n\ntype OwnProps = {\n botCommand: ApiBotCommand;\n bot?: ApiUser;\n withAvatar?: boolean;\n focus?: boolean;\n onClick: (botCommand: ApiBotCommand) => void;\n};\n\nconst BotCommand: FC = ({\n withAvatar,\n focus,\n botCommand,\n bot,\n onClick,\n}) => {\n return (\n onClick(botCommand)}\n focus={focus}\n >\n {withAvatar && (\n \n )}\n
\n /{botCommand.command}\n {renderText(botCommand.description)}\n
\n \n );\n};\n\nexport default memo(BotCommand);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport BotCommand from './BotCommand';\n\nimport './BotCommandTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n withUsername?: boolean;\n botCommands?: ApiBotCommand[];\n onClick: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n};\n\nconst BotCommandTooltip: FC = ({\n usersById,\n isOpen,\n withUsername,\n botCommands,\n onClick,\n onClose,\n}) => {\n const { sendBotCommand } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleSendCommand = useCallback(({ botId, command }: ApiBotCommand) => {\n const bot = usersById[botId];\n sendBotCommand({\n command: `/${command}${withUsername && bot ? `@${bot.username}` : ''}`,\n botId,\n });\n onClick();\n }, [onClick, sendBotCommand, usersById, withUsername]);\n\n const selectedCommandIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: botCommands,\n onSelect: handleSendCommand,\n onClose,\n });\n\n useEffect(() => {\n if (botCommands && !botCommands.length) {\n onClose();\n }\n }, [botCommands, onClose]);\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedCommandIndex, containerRef);\n }, [selectedCommandIndex]);\n\n const prevCommands = usePrevious(botCommands && botCommands.length ? botCommands : undefined, shouldRender);\n const renderedCommands = botCommands && !botCommands.length ? prevCommands : botCommands;\n\n if (!shouldRender || (renderedCommands && !renderedCommands.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'BotCommandTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedCommands && renderedCommands.map((chatBotCommand, index) => (\n \n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({\n usersById: global.users.byId,\n }),\n)(BotCommandTooltip));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\n\nimport Menu from '../../ui/Menu';\nimport BotCommand from './BotCommand';\n\nimport './BotCommandMenu.scss';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nexport type OwnProps = {\n isOpen: boolean;\n botCommands: ApiBotCommand[];\n onClose: NoneToVoidFunction;\n};\n\nconst BotCommandMenu: FC = ({\n isOpen, botCommands, onClose,\n}) => {\n const { sendBotCommand } = getDispatch();\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n\n const handleClick = useCallback((botCommand: ApiBotCommand) => {\n sendBotCommand({\n command: `/${botCommand.command}`,\n botId: botCommand.botId,\n });\n onClose();\n }, [onClose, sendBotCommand]);\n\n return (\n \n {botCommands.map((botCommand) => (\n \n ))}\n \n );\n};\n\nexport default memo(BotCommandMenu);\n","import React, {\n FC, memo, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\n\nimport Loading from '../../ui/Loading';\nimport StickerButton from '../../common/StickerButton';\n\nimport './StickerTooltip.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n onStickerSelect: (sticker: ApiSticker) => void;\n};\n\ntype StateProps = {\n stickers?: ApiSticker[];\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerTooltip: FC = ({\n chatId,\n threadId,\n isOpen,\n onStickerSelect,\n stickers,\n}) => {\n const { clearStickersForEmoji } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const prevStickers = usePrevious(stickers, true);\n const displayedStickers = stickers || prevStickers;\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n useEffect(() => (isOpen ? captureEscKeyListener(clearStickersForEmoji) : undefined), [isOpen, clearStickersForEmoji]);\n\n const handleMouseEnter = () => {\n document.body.classList.add('no-select');\n };\n\n const handleMouseMove = () => {\n sendMessageAction({ type: 'chooseSticker' });\n };\n\n const handleMouseLeave = () => {\n document.body.classList.remove('no-select');\n };\n\n const className = buildClassName(\n 'StickerTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n !(displayedStickers?.length) && 'hidden',\n );\n\n return (\n \n {shouldRender && displayedStickers ? (\n displayedStickers.map((sticker) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { stickers } = global.stickers.forEmoji;\n\n return { stickers };\n },\n)(StickerTooltip));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './CustomSendMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onSilentSend?: NoneToVoidFunction;\n onScheduleSend?: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst CustomSendMenu: FC = ({\n isOpen, onSilentSend, onScheduleSend, onClose, onCloseAnimationEnd,\n}) => {\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n\n const lang = useLang();\n\n return (\n \n {onSilentSend && {lang('SendWithoutSound')}}\n {onScheduleSend && {lang('ScheduleMessage')}}\n \n );\n};\n\nexport default memo(CustomSendMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport findInViewport from '../../../util/findInViewport';\nimport isFullyVisible from '../../../util/isFullyVisible';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevDuringAnimation from '../../../hooks/usePrevDuringAnimation';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport Loading from '../../ui/Loading';\nimport EmojiButton from './EmojiButton';\n\nimport './EmojiTooltip.scss';\n\nconst VIEWPORT_MARGIN = 8;\nconst EMOJI_BUTTON_WIDTH = 44;\nconst CLOSE_DURATION = 350;\n\nfunction setItemVisible(index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container) {\n return;\n }\n\n const { visibleIndexes, allElements } = findInViewport(\n container,\n '.EmojiButton',\n VIEWPORT_MARGIN,\n true,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first], true))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n const newLeft = position === 'start' ? index * EMOJI_BUTTON_WIDTH : 0;\n\n fastSmoothScrollHorizontal(container, newLeft);\n }\n}\n\nexport type OwnProps = {\n isOpen: boolean;\n onEmojiSelect: (text: string) => void;\n onClose: NoneToVoidFunction;\n addRecentEmoji: AnyToVoidFunction;\n emojis: Emoji[];\n};\n\nconst EmojiTooltip: FC = ({\n isOpen,\n emojis,\n onClose,\n onEmojiSelect,\n addRecentEmoji,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const listEmojis: Emoji[] = usePrevDuringAnimation(emojis.length ? emojis : undefined, CLOSE_DURATION) || [];\n\n const handleSelectEmoji = useCallback((emoji: Emoji) => {\n onEmojiSelect(emoji.native);\n addRecentEmoji({ emoji: emoji.id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const handleClick = useCallback((native: string, id: string) => {\n onEmojiSelect(native);\n addRecentEmoji({ emoji: id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n isHorizontal: true,\n items: emojis,\n onSelect: handleSelectEmoji,\n onClose,\n });\n\n useEffect(() => {\n setItemVisible(selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const handleMouseEnter = () => {\n document.body.classList.add('no-select');\n };\n\n const handleMouseLeave = () => {\n document.body.classList.remove('no-select');\n };\n\n const className = buildClassName(\n 'EmojiTooltip composer-tooltip custom-scroll-x',\n transitionClassNames,\n );\n\n return (\n \n {shouldRender && listEmojis ? (\n listEmojis.map((emoji, index) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(EmojiTooltip);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiWebDocument } from '../../../../api/types';\n\nimport { getFirstLetters } from '../../../../util/textFormat';\nimport renderText from '../../../common/helpers/renderText';\nimport useMedia from '../../../../hooks/useMedia';\n\nimport ListItem from '../../../ui/ListItem';\n\nimport './BaseResult.scss';\nimport { preventMessageInputBlurWithBubbling } from '../../helpers/preventMessageInputBlur';\n\nexport type OwnProps = {\n focus?: boolean;\n thumbnail?: ApiWebDocument;\n thumbUrl?: string;\n title?: string;\n description?: string;\n transitionClassNames?: string;\n onClick: NoneToVoidFunction;\n};\n\nconst BaseResult: FC = ({\n title,\n description,\n thumbnail,\n thumbUrl,\n focus,\n transitionClassNames = '',\n onClick,\n}) => {\n let content: string | undefined = '';\n\n const thumbnailDataUrl = useMedia(thumbnail ? `webDocument:${thumbnail.url}` : undefined);\n thumbUrl = thumbUrl || thumbnailDataUrl;\n\n if (thumbUrl) {\n content = (\n \"\"\n );\n } else if (title) {\n content = getFirstLetters(title, 1);\n }\n\n return (\n \n \n {typeof content === 'string' ? renderText(content) : content}\n \n
\n {title && (
{title}
)}\n {description && (
{description}
)}\n
\n \n );\n};\n\nexport default memo(BaseResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiPhoto, ApiThumbnail, ApiWebDocument,\n} from '../../../../api/types';\n\nimport buildClassName from '../../../../util/buildClassName';\nimport useMedia from '../../../../hooks/useMedia';\nimport useMediaTransition from '../../../../hooks/useMediaTransition';\n\nimport BaseResult from './BaseResult';\n\nimport './MediaResult.scss';\n\nexport type OwnProps = {\n focus?: boolean;\n isForGallery?: boolean;\n inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst MediaResult: FC = ({\n focus, isForGallery, inlineResult, onClick,\n}) => {\n let photo: ApiPhoto | undefined;\n let thumbnail: ApiThumbnail | undefined;\n let webThumbnail: ApiWebDocument | undefined;\n\n if ('photo' in inlineResult) {\n photo = inlineResult.photo;\n }\n // For results with type=video (for example @stikstokbot)\n if ('thumbnail' in inlineResult) {\n thumbnail = inlineResult.thumbnail;\n }\n if ('webThumbnail' in inlineResult && isForGallery) {\n webThumbnail = inlineResult.webThumbnail;\n }\n\n const thumbnailDataUrl = useMedia(webThumbnail ? `webDocument:${webThumbnail.url}` : undefined);\n const mediaBlobUrl = useMedia(photo && `photo${photo.id}?size=m`);\n const transitionClassNames = useMediaTransition(mediaBlobUrl);\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n if (isForGallery) {\n return (\n
\n \"\"\n \"\"\n
\n );\n }\n\n const { title, description } = inlineResult;\n\n return (\n \n );\n};\n\nexport default memo(MediaResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineResult } from '../../../../api/types';\n\nimport BaseResult from './BaseResult';\n\nexport type OwnProps = {\n focus?: boolean;\n inlineResult: ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst ArticleResult: FC = ({ focus, inlineResult, onClick }) => {\n const {\n title, url, description, webThumbnail,\n } = inlineResult;\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n return (\n \n );\n};\n\nexport default memo(ArticleResult);\n","import React, {\n FC, memo, useCallback,\n} from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult } from '../../../../api/types';\n\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport GifButton from '../../../common/GifButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst GifResult: FC = ({\n inlineResult, observeIntersection, onClick,\n}) => {\n const { gif } = inlineResult;\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n if (!gif) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(GifResult);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult } from '../../../../api/types';\n\nimport { STICKER_SIZE_INLINE_BOT_RESULT } from '../../../../config';\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport StickerButton from '../../../common/StickerButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst StickerResult: FC = ({ inlineResult, observeIntersection, onClick }) => {\n const { sticker } = inlineResult;\n\n if (!sticker) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(StickerResult);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { throttle } from '../../../util/schedulers';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport MediaResult from './inlineResults/MediaResult';\nimport ArticleResult from './inlineResults/ArticleResult';\nimport GifResult from './inlineResults/GifResult';\nimport StickerResult from './inlineResults/StickerResult';\nimport ListItem from '../../ui/ListItem';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\nimport './InlineBotTooltip.scss';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nexport type OwnProps = {\n isOpen: boolean;\n botId?: string;\n isGallery?: boolean;\n inlineBotResults?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n switchPm?: ApiBotInlineSwitchPm;\n onSelectResult: (inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult) => void;\n loadMore: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\nconst InlineBotTooltip: FC = ({\n isOpen,\n botId,\n isGallery,\n inlineBotResults,\n switchPm,\n loadMore,\n onClose,\n onSelectResult,\n}) => {\n const {\n openChat,\n startBot,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n isDisabled: !isOpen,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (direction === LoadMoreDirection.Backwards) {\n runThrottled(loadMore);\n }\n }, [loadMore]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n shouldRemoveSelectionOnReset: isGallery,\n noArrowNavigation: isGallery,\n items: inlineBotResults,\n onSelect: onSelectResult,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const handleSendPm = useCallback(() => {\n openChat({ id: botId });\n startBot({ botId, param: switchPm!.startParam });\n }, [botId, openChat, startBot, switchPm]);\n\n const prevInlineBotResults = usePrevious(\n inlineBotResults?.length\n ? inlineBotResults\n : undefined,\n shouldRender,\n );\n const renderedInlineBotResults = inlineBotResults && !inlineBotResults.length\n ? prevInlineBotResults\n : inlineBotResults;\n\n if (!shouldRender || !(renderedInlineBotResults?.length || switchPm)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'InlineBotTooltip composer-tooltip',\n IS_TOUCH_ENV ? 'no-scrollbar' : 'custom-scroll',\n isGallery && 'gallery',\n transitionClassNames,\n );\n\n function renderSwitchPm() {\n return (\n \n {switchPm!.text}\n \n );\n }\n\n function renderContent() {\n return renderedInlineBotResults!.map((inlineBotResult, index) => {\n switch (inlineBotResult.type) {\n case 'gif':\n return (\n \n );\n\n case 'photo':\n return (\n \n );\n\n case 'sticker':\n return (\n \n );\n\n case 'video':\n case 'file':\n case 'game':\n return (\n \n );\n case 'article':\n case 'audio':\n return (\n \n );\n\n default:\n return undefined;\n }\n });\n }\n\n return (\n \n {switchPm && renderSwitchPm()}\n {renderedInlineBotResults?.length && renderContent()}\n \n );\n};\n\nexport default memo(InlineBotTooltip);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\n\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport renderText from '../../common/helpers/renderText';\nimport { getUserFullName, isUserId } from '../../../modules/helpers';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport { getDispatch, getGlobal } from '../../../lib/teact/teactn';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\nimport Menu from '../../ui/Menu';\n\nimport './SendAsMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n chatId?: string;\n selectedSendAsId?: string;\n sendAsIds?: string[];\n};\n\nconst SendAsMenu: FC = ({\n isOpen,\n onClose,\n chatId,\n selectedSendAsId,\n sendAsIds,\n}) => {\n const { saveDefaultSendAs } = getDispatch();\n\n // No need for expensive global updates on users and chats, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [handleMouseEnter, handleMouseLeave, markMouseInside] = useMouseInside(isOpen, onClose, undefined);\n\n useEffect(() => {\n if (isOpen) {\n markMouseInside();\n }\n }, [isOpen, markMouseInside]);\n\n const handleUserSelect = useCallback((id: string) => {\n onClose();\n saveDefaultSendAs({ chatId, sendAsId: id });\n }, [chatId, onClose, saveDefaultSendAs]);\n\n const selectedSendAsIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: sendAsIds,\n onSelect: handleUserSelect,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedSendAsIndex, containerRef);\n }, [selectedSendAsIndex]);\n\n useEffect(() => {\n if (sendAsIds && !sendAsIds.length) {\n onClose();\n }\n }, [sendAsIds, onClose]);\n\n return (\n \n
{lang('SendMessageAsTitle')}
\n {usersById && chatsById && sendAsIds?.map((id, index) => {\n const user = isUserId(id) ? usersById[id] : undefined;\n const chat = !user ? chatsById[id] : undefined;\n const fullName = user ? getUserFullName(user) : chat?.title;\n\n return (\n handleUserSelect(id)}\n focus={selectedSendAsIndex === index}\n >\n \n
\n
\n

{fullName && renderText(fullName)}

\n
\n {user\n ? lang('VoipGroupPersonalAccount')\n : lang('Subscribers', chat?.membersCount, 'i')}\n \n
\n \n );\n })}\n \n );\n};\n\nexport default memo(SendAsMenu);\n","import React, {\n FC, useMemo, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage, ApiUser, ApiChat } from '../../api/types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\nimport {\n selectUser,\n selectChatMessages,\n selectChat,\n selectCurrentTextSearch,\n} from '../../modules/selectors';\nimport {\n getChatTitle,\n getUserFullName,\n isChatChannel,\n} from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { renderMessageSummary } from '../common/helpers/renderMessageText';\nimport renderText from '../common/helpers/renderText';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport LastMessageMeta from '../common/LastMessageMeta';\nimport Avatar from '../common/Avatar';\n\nimport './RightSearch.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n messagesById?: Record;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n};\n\nconst RightSearch: FC = ({\n chatId,\n threadId,\n onClose,\n isActive,\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n}) => {\n const {\n searchTextMessagesLocal,\n focusMessage,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n const [viewportIds, getMore] = useInfiniteScroll(searchTextMessagesLocal, foundIds);\n\n const viewportResults = useMemo(() => {\n if (!query || !viewportIds?.length || !messagesById) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return viewportIds.map((id) => {\n const message = messagesById[id];\n if (!message) {\n return undefined;\n }\n\n const senderUser = message.senderId ? selectUser(getGlobal(), message.senderId) : undefined;\n\n let senderChat;\n if (chat && isChatChannel(chat)) {\n senderChat = chat;\n } else if (message.forwardInfo) {\n const { isChannelPost, fromChatId } = message.forwardInfo;\n senderChat = isChannelPost && fromChatId ? selectChat(getGlobal(), fromChatId) : undefined;\n } else {\n senderChat = message.senderId ? selectChat(getGlobal(), message.senderId) : undefined;\n }\n\n return {\n message,\n senderUser,\n senderChat,\n onClick: () => focusMessage({ chatId, threadId, messageId: id }),\n };\n }).filter(Boolean);\n }, [query, viewportIds, messagesById, chat, focusMessage, chatId, threadId]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, true, (index) => {\n const foundResult = viewportResults?.[index === -1 ? 0 : index];\n if (foundResult) {\n foundResult.onClick();\n }\n }, '.ListItem-button', true);\n\n const renderSearchResult = ({\n message, senderUser, senderChat, onClick,\n }: {\n message: ApiMessage;\n senderUser?: ApiUser;\n senderChat?: ApiChat;\n onClick: NoneToVoidFunction;\n }) => {\n const title = senderChat ? getChatTitle(lang, senderChat) : getUserFullName(senderUser);\n const text = renderMessageSummary(lang, message, undefined, query);\n\n return (\n \n \n
\n
\n

{title && renderText(title)}

\n \n
\n
\n {text}\n
\n
\n \n );\n };\n\n const isOnTop = viewportIds?.[0] === foundIds?.[0];\n\n return (\n \n {isOnTop && (\n

\n {!query ? (\n lang('lng_dlg_search_for_messages')\n ) : (totalCount === 0 || !viewportResults.length) ? (\n lang('lng_search_no_results')\n ) : totalCount === 1 ? (\n '1 message found'\n ) : (\n `${(viewportResults.length && (totalCount || viewportResults.length))} messages found`\n )}\n

\n )}\n {viewportResults.map(renderSearchResult)}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const messagesById = chat && selectChatMessages(global, chat.id);\n if (!chat || !messagesById) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n };\n },\n)(RightSearch));\n","import React, {\n FC, useEffect, memo, useMemo, useCallback,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiStickerSet } from '../../api/types';\nimport { ObserveFn } from '../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_SEARCH } from '../../config';\nimport { selectShouldLoopStickers, selectStickerSet } from '../../modules/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport useOnChange from '../../hooks/useOnChange';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport StickerButton from '../common/StickerButton';\nimport StickerSetModal from '../common/StickerSetModal.async';\nimport Spinner from '../ui/Spinner';\n\ntype OwnProps = {\n stickerSetId: string;\n observeIntersection: ObserveFn;\n isSomeModalOpen: boolean;\n onModalToggle: (isOpen: boolean) => void;\n};\n\ntype StateProps = {\n set?: ApiStickerSet;\n shouldPlay?: boolean;\n};\n\nconst STICKERS_TO_DISPLAY = 5;\n\nconst StickerSetResult: FC = ({\n stickerSetId, observeIntersection, set, shouldPlay,\n isSomeModalOpen, onModalToggle,\n}) => {\n const { loadStickers, toggleStickerSet } = getDispatch();\n\n const lang = useLang();\n const isAdded = set && Boolean(set.installedDate);\n const areStickersLoaded = Boolean(set?.stickers);\n\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n useOnChange(() => {\n onModalToggle(isModalOpen);\n }, [isModalOpen, onModalToggle]);\n\n const displayedStickers = useMemo(() => {\n if (!set) {\n return [];\n }\n\n const coverStickerIds = (set.covers || []).map(({ id }) => id);\n const otherStickers = set.stickers ? set.stickers.filter(({ id }) => !coverStickerIds.includes(id)) : [];\n\n return [...(set.covers || []), ...otherStickers].slice(0, STICKERS_TO_DISPLAY);\n }, [set]);\n\n useEffect(() => {\n // Featured stickers are initialized with one sticker in collection (cover of SickerSet)\n if (!areStickersLoaded && displayedStickers.length < STICKERS_TO_DISPLAY) {\n loadStickers({ stickerSetId });\n }\n }, [areStickersLoaded, displayedStickers.length, loadStickers, stickerSetId]);\n\n const handleAddClick = useCallback(() => {\n toggleStickerSet({ stickerSetId });\n }, [toggleStickerSet, stickerSetId]);\n\n if (!set) {\n return undefined;\n }\n\n const canRenderStickers = displayedStickers.length > 0;\n\n return (\n
\n
\n
\n

{set.title}

\n

{lang('Stickers', set.count, 'i')}

\n
\n \n {lang(isAdded ? 'Stickers.Installed' : 'Stickers.Install')}\n \n
\n
\n {!canRenderStickers && }\n {canRenderStickers && displayedStickers.map((sticker) => (\n \n ))}\n
\n {canRenderStickers && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { stickerSetId }): StateProps => {\n return {\n set: selectStickerSet(global, stickerSetId),\n shouldPlay: selectShouldLoopStickers(global),\n };\n },\n)(StickerSetResult));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { throttle } from '../../util/schedulers';\nimport { selectCurrentStickerSearch } from '../../modules/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Loading from '../ui/Loading';\nimport StickerSetResult from './StickerSetResult';\n\nimport './StickerSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n featuredIds?: string[];\n resultIds?: string[];\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst StickerSearch: FC = ({\n onClose,\n isActive,\n query,\n featuredIds,\n resultIds,\n}) => {\n const { loadFeaturedStickers } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadFeaturedStickers();\n });\n });\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!query && featuredIds) {\n return featuredIds.map((id) => (\n \n ));\n }\n\n if (resultIds) {\n if (!resultIds.length) {\n return

Nothing found.

;\n }\n\n return resultIds.map((id) => (\n \n ));\n }\n\n return ;\n }\n\n return (\n
\n {renderContent()}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentStickerSearch(global);\n const { query, resultIds } = currentSearch || {};\n const { featured } = global.stickers;\n\n return {\n query,\n featuredIds: featured.setIds,\n resultIds,\n };\n },\n)(StickerSearch));\n","import React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat, ApiVideo } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport {\n selectCurrentGifSearch,\n selectChat,\n selectIsChatWithBot,\n selectCurrentMessageList,\n} from '../../modules/selectors';\nimport { getAllowedAttachmentOptions } from '../../modules/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport GifButton from '../common/GifButton';\nimport Loading from '../ui/Loading';\n\nimport './GifSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n results?: ApiVideo[];\n chat?: ApiChat;\n isChatWithBot?: boolean;\n};\n\nconst PRELOAD_BACKWARDS = 96; // GIF Search bot results are multiplied by 24\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifSearch: FC = ({\n onClose,\n isActive,\n query,\n results,\n chat,\n isChatWithBot,\n}) => {\n const {\n searchMoreGifs,\n sendMessage,\n setGifSearchQuery,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n const { canSendGifs } = getAllowedAttachmentOptions(chat, isChatWithBot);\n\n const handleGifClick = useCallback((gif: ApiVideo) => {\n if (canSendGifs) {\n sendMessage({ gif });\n }\n\n if (IS_TOUCH_ENV) {\n setGifSearchQuery({ query: undefined });\n }\n }, [canSendGifs, sendMessage, setGifSearchQuery]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!results) {\n return (\n \n );\n }\n\n if (!results.length) {\n return (\n

{lang('NoGIFsFound')}

\n );\n }\n\n return results.map((gif) => (\n \n ));\n }\n\n const hasResults = Boolean(query !== undefined && results && results.length);\n\n return (\n
\n \n {renderContent()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentGifSearch(global);\n const { query, results } = currentSearch || {};\n const { chatId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const isChatWithBot = chat ? selectIsChatWithBot(global, chat) : undefined;\n\n return {\n query,\n results,\n chat,\n isChatWithBot,\n };\n },\n)(GifSearch));\n","import React, {\n FC, useCallback, useState, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat,\n ApiMessage,\n ApiPollAnswer,\n ApiPollResult,\n} from '../../api/types';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\n\nimport ShowMoreButton from '../ui/ShowMoreButton';\nimport Loading from '../ui/Loading';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from '../common/PrivateChatInfo';\n\nimport './PollAnswerResults.scss';\n\ntype OwnProps = {\n chat: ApiChat;\n message: ApiMessage;\n answer: ApiPollAnswer;\n answerVote: ApiPollResult;\n totalVoters: number;\n};\n\ntype StateProps = {\n voters?: string[];\n offset: string;\n};\n\nconst INITIAL_LIMIT = 4;\nconst VIEW_MORE_LIMIT = 50;\n\nconst PollAnswerResults: FC = ({\n chat,\n message,\n answer,\n answerVote,\n totalVoters,\n voters,\n offset,\n}) => {\n const {\n loadPollOptionResults,\n openChat,\n closePollResults,\n } = getDispatch();\n\n const prevVotersCount = usePrevious(answerVote.votersCount);\n const [isLoading, setIsLoading] = useState(true);\n const areVotersLoaded = Boolean(voters);\n const { option, text } = answer;\n const lang = useLang();\n\n useEffect(() => {\n // For update when new votes arrive or when the user takes back his vote\n if (!areVotersLoaded || prevVotersCount !== answerVote.votersCount) {\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: INITIAL_LIMIT, shouldResetVoters: true,\n });\n }\n // eslint-disable-next-line\n }, [answerVote.votersCount, areVotersLoaded]);\n\n const handleViewMoreClick = useCallback(() => {\n setIsLoading(true);\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: VIEW_MORE_LIMIT,\n });\n }, [chat, loadPollOptionResults, message.id, offset, option]);\n\n useEffect(() => {\n setIsLoading(false);\n }, [voters]);\n\n const handleMemberClick = useCallback((id: string) => {\n openChat({ id });\n closePollResults();\n }, [closePollResults, openChat]);\n\n function renderViewMoreButton() {\n const leftVotersCount = answerVote.votersCount - voters!.length;\n\n return answerVote.votersCount > INITIAL_LIMIT && leftVotersCount > 0 && (\n \n );\n }\n\n return (\n
\n
\n {voters\n ? voters.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))\n : }\n {voters && renderViewMoreButton()}\n
\n
\n {text}\n \n {getPercentage(answerVote.votersCount, totalVoters)}%\n \n
\n
\n );\n};\n\nfunction getPercentage(value: number, total: number) {\n return total > 0 ? ((value / total) * 100).toFixed() : 0;\n}\n\nexport default memo(withGlobal(\n (global, { answer }: OwnProps): StateProps => {\n const { voters, offsets } = global.pollResults;\n\n return {\n voters: voters?.[answer.option],\n offset: (offsets?.[answer.option]) || '',\n };\n },\n)(PollAnswerResults));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMessage, ApiChat } from '../../api/types';\nimport { selectChat, selectChatMessage } from '../../modules/selectors';\nimport { buildCollectionByKey } from '../../util/iteratees';\nimport { getMessagePoll } from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport PollAnswerResults from './PollAnswerResults';\nimport Loading from '../ui/Loading';\n\nimport './PollResults.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n message?: ApiMessage;\n lastSyncTime?: number;\n};\n\nconst PollResults: FC = ({\n onClose,\n isActive,\n chat,\n message,\n lastSyncTime,\n}) => {\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n if (!message || !chat) {\n return ;\n }\n\n const { summary, results } = getMessagePoll(message)!;\n if (!results.results) {\n return undefined;\n }\n\n const resultsByOption = buildCollectionByKey(results.results, 'option');\n\n return (\n
\n

{renderText(summary.question, ['emoji', 'br'])}

\n
\n {lastSyncTime && summary.answers.map((answer) => (\n \n ))}\n {!lastSyncTime && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n pollResults: { chatId, messageId },\n lastSyncTime,\n } = global;\n\n if (!chatId || !messageId) {\n return {};\n }\n\n const chat = selectChat(global, chatId);\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n chat,\n message,\n lastSyncTime,\n };\n },\n)(PollResults));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport {\n selectChat, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../../../modules/selectors';\nimport { selectIsChatMuted } from '../../../modules/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n userId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n progress?: ManagementProgress;\n isMuted?: boolean;\n};\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide first name';\n\nconst ManageUser: FC = ({\n userId,\n user,\n progress,\n isMuted,\n onClose,\n isActive,\n}) => {\n const {\n updateContact,\n deleteContact,\n closeManagement,\n } = getDispatch();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const currentFirstName = user ? (user.firstName || '') : '';\n const currentLastName = user ? (user.lastName || '') : '';\n\n const [firstName, setFirstName] = useState(currentFirstName);\n const [lastName, setLastName] = useState(currentLastName);\n const [isNotificationsEnabled, setIsNotificationsEnabled] = useState(!isMuted);\n\n useEffect(() => {\n setIsNotificationsEnabled(!isMuted);\n }, [isMuted]);\n\n useEffect(() => {\n setIsProfileFieldsTouched(false);\n closeDeleteDialog();\n }, [closeDeleteDialog, userId]);\n\n useEffect(() => {\n setFirstName(currentFirstName);\n setLastName(currentLastName);\n }, [currentFirstName, currentLastName, user]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n closeDeleteDialog();\n }\n }, [closeDeleteDialog, progress]);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleNotificationChange = useCallback((e: ChangeEvent) => {\n setIsNotificationsEnabled(e.target.checked);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n }\n\n updateContact({\n userId,\n isMuted: !isNotificationsEnabled,\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n });\n }, [firstName, lastName, updateContact, userId, isNotificationsEnabled]);\n\n const handleDeleteContact = useCallback(() => {\n deleteContact({ userId });\n closeDeleteDialog();\n closeManagement();\n }, [closeDeleteDialog, closeManagement, deleteContact, userId]);\n\n if (!user) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n \n {lang('DeleteContact')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n const chat = selectChat(global, userId)!;\n const { progress } = global.management;\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n\n return {\n user, progress, isMuted,\n };\n },\n)(ManageUser));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport {\n ApiChat, ApiChatBannedRights, ApiExportedInvite, ApiMediaFormat,\n} from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight, isChatBasicGroup } from '../../../modules/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { selectChat } from '../../../modules/selectors';\nimport { formatInteger } from '../../../util/textFormat';\nimport renderText from '../../common/helpers/renderText';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isBasicGroup: boolean;\n hasLinkedChannel: boolean;\n canChangeInfo?: boolean;\n canBanUsers?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst GROUP_TITLE_EMPTY = 'Group title can\\'t be empty';\n\n// Some checkboxes control multiple rights, and some rights are not controlled from Permissions screen,\n// so we need to define the amount manually\nconst TOTAL_PERMISSIONS_COUNT = 8;\n\nconst ManageGroup: FC = ({\n chatId,\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo,\n canBanUsers,\n canInvite,\n onScreenSelect,\n onClose,\n isActive,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n}) => {\n const {\n togglePreHistoryHidden,\n updateChat,\n deleteChat,\n leaveChannel,\n deleteChannel,\n closeManagement,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getDispatch();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const currentTitle = chat.title;\n const currentAbout = chat.fullInfo ? (chat.fullInfo.about || '') : '';\n\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle || '');\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime && canInvite) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, canInvite, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickPermissions = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = () => {\n onScreenSelect(ManagementScreens.Invites);\n };\n\n const handleClickRequests = () => {\n onScreenSelect(ManagementScreens.JoinRequests);\n };\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateGroup = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(GROUP_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleClickMembers = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupMembers);\n }, [onScreenSelect]);\n\n const handleTogglePreHistory = useCallback(() => {\n if (!chat.fullInfo) {\n return;\n }\n\n const { isPreHistoryHidden } = chat.fullInfo;\n\n togglePreHistoryHidden({ chatId: chat.id, isEnabled: !isPreHistoryHidden });\n }, [chat, togglePreHistoryHidden]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n const enabledPermissionsCount = useMemo(() => {\n if (!chat.defaultBannedRights) {\n return 0;\n }\n\n let totalCount = [\n 'sendMessages',\n 'sendMedia',\n 'embedLinks',\n 'sendPolls',\n 'changeInfo',\n 'inviteUsers',\n 'pinMessages',\n ].filter(\n (key) => !chat.defaultBannedRights![key as keyof ApiChatBannedRights],\n ).length;\n\n const { sendStickers, sendGifs } = chat.defaultBannedRights;\n\n // These two rights are controlled with a single checkbox\n if (!sendStickers && !sendGifs) {\n totalCount += 1;\n }\n\n return totalCount;\n }, [chat]);\n\n const adminsCount = (chat.fullInfo?.adminMembers?.length) || 0;\n\n const handleDeleteGroup = useCallback(() => {\n if (isBasicGroup) {\n deleteChat({ chatId: chat.id });\n } else if (!chat.isCreator) {\n leaveChannel({ chatId: chat.id });\n } else {\n deleteChannel({ chatId: chat.id });\n }\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [\n isBasicGroup, chat.isCreator, chat.id,\n closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, deleteChat, openChat,\n ]);\n\n if (chat.isRestricted) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('GroupType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n {hasLinkedChannel && (\n \n {lang('LinkedChannel')}\n {lang('DiscussionUnlink')}\n \n )}\n \n {lang('ChannelPermissions')}\n \n {enabledPermissionsCount}/{TOTAL_PERMISSIONS_COUNT}\n \n \n\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n \n {lang('ChannelAdministrators')}\n {formatInteger(adminsCount)}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('MemberRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n
\n
\n \n {lang('GroupMembers')}\n {formatInteger(chat.membersCount ?? 0)}\n \n\n {chat.fullInfo && (\n
\n \n
\n )}\n
\n
\n \n {lang('DeleteMega')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const hasLinkedChannel = Boolean(chat.fullInfo?.linkedChatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'changeInfo'),\n canBanUsers: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'banUsers'),\n canInvite: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'inviteUsers'),\n exportedInvites: invites,\n lastSyncTime: global.lastSyncTime,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageGroup));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatBannedRights, ApiChatMember } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../modules/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n currentUserId?: string;\n};\n\nconst FLOATING_BUTTON_ANIMATION_TIMEOUT_MS = 250;\n\nfunction getLangKeyForBannedRightKey(key: string) {\n switch (key) {\n case 'sendMessages':\n return 'UserRestrictionsNoSend';\n case 'sendMedia':\n return 'UserRestrictionsNoSendMedia';\n case 'sendStickers':\n return 'UserRestrictionsNoSendStickers';\n case 'embedLinks':\n return 'UserRestrictionsNoEmbedLinks';\n case 'sendPolls':\n return 'UserRestrictionsNoSendPolls';\n case 'changeInfo':\n return 'UserRestrictionsNoChangeInfo';\n case 'inviteUsers':\n return 'UserRestrictionsInviteUsers';\n case 'pinMessages':\n return 'UserRestrictionsPinMessages';\n default:\n return undefined;\n }\n}\n\nconst ManageGroupPermissions: FC = ({\n onScreenSelect,\n onChatMemberSelect,\n chat,\n currentUserId,\n onClose,\n isActive,\n}) => {\n const { updateChatDefaultBannedRights } = getDispatch();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const handleRemovedUsersClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupRemovedUsers);\n }, [onScreenSelect]);\n\n const handleAddExceptionClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupUserPermissionsCreate);\n }, [onScreenSelect]);\n\n const handleExceptionMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n useEffect(() => {\n setPermissions((chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setTimeout(() => {\n setIsLoading(false);\n }, FLOATING_BUTTON_ANIMATION_TIMEOUT_MS);\n }, [chat]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat) {\n return;\n }\n\n setIsLoading(true);\n updateChatDefaultBannedRights({ chatId: chat.id, bannedRights: permissions });\n }, [chat, permissions, updateChatDefaultBannedRights]);\n\n const removedUsersCount = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return 0;\n }\n\n return chat.fullInfo.kickedMembers.length;\n }, [chat]);\n\n const exceptionMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return [];\n }\n\n return chat.fullInfo.members.filter(({ bannedRights }) => Boolean(bannedRights));\n }, [chat]);\n\n const getMemberExceptions = useCallback((member: ApiChatMember) => {\n const { bannedRights } = member;\n if (!bannedRights || !chat) {\n return undefined;\n }\n\n const { defaultBannedRights } = chat;\n\n return Object.keys(bannedRights).reduce((result, key) => {\n if (\n !bannedRights[key as keyof ApiChatBannedRights]\n || (defaultBannedRights?.[key as keyof ApiChatBannedRights])\n || key === 'sendInline' || key === 'viewMessages' || key === 'sendGames'\n ) {\n return result;\n }\n\n const langKey = getLangKeyForBannedRightKey(key);\n\n if (!langKey) {\n return result;\n }\n\n const translatedString = lang(langKey);\n\n return `${result}${!result.length ? translatedString : `, ${translatedString}`}`;\n }, '');\n }, [chat, lang]);\n\n return (\n
\n
\n
\n

{lang('ChannelPermissionsHeader')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n {lang('ChannelBlockedUsers')}\n {removedUsersCount}\n \n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n \n {lang('ChannelAddException')}\n \n\n {exceptionMembers.map((member) => (\n handleExceptionMemberClick(member)}\n >\n \n \n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat, currentUserId: global.currentUserId };\n },\n)(ManageGroupPermissions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { filterUsersByName } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n chat: ApiChat;\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n currentUserId?: string;\n};\n\nconst RemoveGroupUserModal: FC = ({\n chat,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadMoreMembers,\n deleteChatMember,\n } = getDispatch();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const usersId = useMemo(() => {\n const availableMemberIds = (chat.fullInfo?.members || [])\n .reduce((acc: string[], member) => {\n if (!member.isAdmin && !member.isOwner && member.userId !== currentUserId) {\n acc.push(member.userId);\n }\n return acc;\n }, []);\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return filterUsersByName(availableMemberIds, usersById, filter);\n }, [chat.fullInfo?.members, currentUserId, filter]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n deleteChatMember({ chatId: chat.id, userId });\n onClose();\n }, [chat.id, deleteChatMember, onClose]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n\n return { currentUserId };\n },\n)(RemoveGroupUserModal));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatMember, ApiUser } from '../../../api/types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport { getHasAdminRight, getUserFullName } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport RemoveGroupUserModal from './RemoveGroupUserModal';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n usersById: Record;\n canDeleteMembers?: boolean;\n};\n\nconst ManageGroupRemovedUsers: FC = ({\n chat,\n usersById,\n canDeleteMembers,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getDispatch();\n\n const lang = useLang();\n const [isRemoveUserModalOpen, openRemoveUserModal, closeRemoveUserModal] = useFlag();\n\n useHistoryBack(isActive, onClose);\n\n const removedMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return [];\n }\n\n return chat.fullInfo.kickedMembers;\n }, [chat]);\n\n const getRemovedBy = useCallback((member: ApiChatMember) => {\n if (!member.kickedByUserId) {\n return undefined;\n }\n\n const kickedByUser = usersById[member.kickedByUserId];\n if (!kickedByUser) {\n return undefined;\n }\n\n return lang('UserRemovedBy', getUserFullName(kickedByUser));\n }, [lang, usersById]);\n\n const getContextActions = useCallback((member: ApiChatMember) => {\n if (!chat) {\n return undefined;\n }\n\n return [{\n title: lang('Unblock'),\n icon: 'delete',\n destructive: true,\n handler: () => updateChatMemberBannedRights({\n chatId: chat.id,\n userId: member.userId,\n bannedRights: {},\n }),\n }];\n }, [lang, chat, updateChatMemberBannedRights]);\n\n return (\n
\n
\n
\n

{lang('NoBlockedGroup2')}

\n\n {removedMembers.map((member) => (\n \n \n \n ))}\n {canDeleteMembers && (\n \n \n \n )}\n {chat && canDeleteMembers && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById } = global.users;\n const canDeleteMembers = chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);\n\n return { chat, usersById, canDeleteMembers };\n },\n)(ManageGroupRemovedUsers));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport { ApiChat, ApiExportedInvite, ApiMediaFormat } from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight } from '../../../modules/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../modules/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { formatInteger } from '../../../util/textFormat';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isSignaturesShown: boolean;\n canChangeInfo?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst CHANNEL_TITLE_EMPTY = 'Channel title can\\'t be empty';\n\nconst ManageChannel: FC = ({\n chatId,\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo,\n canInvite,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n onScreenSelect,\n onClose,\n isActive,\n}) => {\n const {\n updateChat,\n toggleSignatures,\n closeManagement,\n leaveChannel,\n deleteChannel,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getDispatch();\n\n const currentTitle = chat ? (chat.title || '') : '';\n const currentAbout = chat?.fullInfo ? (chat.fullInfo.about || '') : '';\n const hasLinkedChat = chat?.fullInfo?.linkedChatId;\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle);\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = chat && getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const adminsCount = (chat?.fullInfo?.adminMembers?.length) || 0;\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = () => {\n onScreenSelect(ManagementScreens.Invites);\n };\n\n const handleClickRequests = () => {\n onScreenSelect(ManagementScreens.JoinRequests);\n };\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateChannel = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(CHANNEL_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleToggleSignatures = useCallback(() => {\n toggleSignatures({ chatId, isEnabled: !isSignaturesShown });\n }, [chatId, isSignaturesShown, toggleSignatures]);\n\n const handleClickSubscribers = useCallback(() => {\n onScreenSelect(ManagementScreens.ChannelSubscribers);\n }, [onScreenSelect]);\n\n const handleDeleteChannel = useCallback(() => {\n if (chat.isCreator) {\n deleteChannel({ chatId: chat.id });\n } else {\n leaveChannel({ chatId: chat.id });\n }\n\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [chat.isCreator, chat.id, closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, openChat]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n if (chat.isRestricted) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('ChannelType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n \n {lang('Discussion')}\n {hasLinkedChat ? lang('DiscussionUnlink') : lang('Add')}\n \n \n {lang('ChannelAdministrators')}\n {adminsCount}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('SubscribeRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n
\n \n
\n
\n
\n \n {lang('ChannelSubscribers')}\n {lang('Subscribers', chat.membersCount ?? 0, 'i')}\n \n
\n
\n \n {chat.isCreator ? lang('ChannelDelete') : lang('LeaveChannel')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const isSignaturesShown = Boolean(chat?.isSignaturesShown);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo: getHasAdminRight(chat, 'changeInfo'),\n canInvite: getHasAdminRight(chat, 'inviteUsers'),\n lastSyncTime: global.lastSyncTime,\n exportedInvites: invites,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageChannel));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport { selectChat, selectManagement } from '../../../modules/selectors';\nimport { isChatChannel } from '../../../modules/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport SafeLink from '../../common/SafeLink';\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport UsernameInput from '../../common/UsernameInput';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype PrivacyType = 'private' | 'public';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n isChannel: boolean;\n progress?: ManagementProgress;\n isUsernameAvailable?: boolean;\n isProtected?: boolean;\n};\n\nconst ManageChatPrivacyType: FC = ({\n chat,\n onClose,\n isActive,\n isChannel,\n progress,\n isUsernameAvailable,\n isProtected,\n}) => {\n const {\n checkPublicLink,\n updatePublicLink,\n updatePrivateLink,\n toggleIsProtected,\n } = getDispatch();\n\n const isPublic = Boolean(chat.username);\n const privateLink = chat.fullInfo?.inviteLink;\n\n const [privacyType, setPrivacyType] = useState(isPublic ? 'public' : 'private');\n const [username, setUsername] = useState();\n const [isRevokeConfirmDialogOpen, openRevokeConfirmDialog, closeRevokeConfirmDialog] = useFlag();\n\n const canUpdate = Boolean(\n (privacyType === 'public' && username && isUsernameAvailable)\n || (privacyType === 'private' && isPublic),\n );\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (privacyType && !privateLink) {\n updatePrivateLink();\n }\n }, [privacyType, privateLink, updatePrivateLink]);\n\n const handleOptionChange = useCallback((value: string) => {\n setPrivacyType(value as PrivacyType);\n }, []);\n\n const handleForwardingOptionChange = useCallback((value: string) => {\n toggleIsProtected({\n chatId: chat.id,\n isProtected: value === 'protected',\n });\n }, [chat.id, toggleIsProtected]);\n\n const handleSave = useCallback(() => {\n updatePublicLink({ username: privacyType === 'public' ? username : '' });\n }, [privacyType, updatePublicLink, username]);\n\n const handleRevokePrivateLink = useCallback(() => {\n closeRevokeConfirmDialog();\n updatePrivateLink();\n }, [closeRevokeConfirmDialog, updatePrivateLink]);\n\n const lang = useLang();\n const langPrefix1 = isChannel ? 'Channel' : 'Mega';\n const langPrefix2 = isChannel ? 'Channel' : 'Group';\n\n const options = [\n { value: 'private', label: lang(`${langPrefix1}Private`), subLabel: lang(`${langPrefix1}PrivateInfo`) },\n { value: 'public', label: lang(`${langPrefix1}Public`), subLabel: lang(`${langPrefix1}PublicInfo`) },\n ];\n\n const forwardingOptions = [{\n value: 'allowed',\n label: lang('ChannelVisibility.Forwarding.Enabled'),\n }, {\n value: 'protected',\n label: lang('ChannelVisibility.Forwarding.Disabled'),\n }];\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n

{lang(`${langPrefix2}Type`)}

\n \n
\n {privacyType === 'private' ? (\n
\n {privateLink ? (\n <>\n \n

\n {lang(`${langPrefix1}PrivateLinkHelp`)}\n

\n\n \n {lang('RevokeLink')}\n \n \n \n ) : (\n \n )}\n
\n ) : (\n
\n \n

\n {lang(`${langPrefix2}.Username.CreatePublicLinkHelp`)}\n

\n
\n )}\n
\n

\n {lang(isChannel ? 'ChannelVisibility.Forwarding.ChannelTitle' : 'ChannelVisibility.Forwarding.GroupTitle')}\n

\n \n

\n {isChannel\n ? lang('ChannelVisibility.Forwarding.ChannelInfo')\n : lang('ChannelVisibility.Forwarding.GroupInfo')}\n

\n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { isUsernameAvailable } = selectManagement(global, chatId)!;\n\n return {\n chat,\n isChannel: isChatChannel(chat),\n progress: global.management.progress,\n isUsernameAvailable,\n isProtected: chat?.isProtected,\n };\n },\n)(ManageChatPrivacyType));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_DISCUSSION_GROUPS } from '../../../config';\nimport { selectChat } from '../../../modules/selectors';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport useFlag from '../../../hooks/useFlag';\nimport renderText from '../../common/helpers/renderText';\nimport Avatar from '../../common/Avatar';\nimport { isChatChannel } from '../../../modules/helpers';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n chatsByIds: Record;\n linkedChat?: ApiChat;\n forDiscussionIds?: string[];\n isChannel?: boolean;\n};\n\nconst ManageDiscussion: FC = ({\n chat,\n onClose,\n isActive,\n chatId,\n chatsByIds,\n linkedChat,\n forDiscussionIds,\n isChannel,\n onScreenSelect,\n}) => {\n const {\n loadGroupsForDiscussion,\n linkDiscussionGroup,\n unlinkDiscussionGroup,\n } = getDispatch();\n\n const [linkedGroupId, setLinkedGroupId] = useState();\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n const [isConfirmUnlinkGroupDialogOpen, openConfirmUnlinkGroupDialog, closeConfirmUnlinkGroupDialog] = useFlag();\n const [isConfirmLinkGroupDialogOpen, openConfirmLinkGroupDialog, closeConfirmLinkGroupDialog] = useFlag();\n const lang = useLang();\n const linkedChatId = linkedChat?.id;\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n loadGroupsForDiscussion();\n }, [loadGroupsForDiscussion]);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('DiscussionGroups').then(setAnimationData);\n }\n }, [animationData]);\n\n const handleUnlinkGroupSessions = useCallback(() => {\n closeConfirmUnlinkGroupDialog();\n unlinkDiscussionGroup({ channelId: isChannel ? chatId : linkedChatId });\n if (!isChannel) {\n onScreenSelect(ManagementScreens.Initial);\n }\n }, [closeConfirmUnlinkGroupDialog, unlinkDiscussionGroup, isChannel, chatId, linkedChatId, onScreenSelect]);\n\n const handleLinkGroupSessions = useCallback(() => {\n closeConfirmLinkGroupDialog();\n linkDiscussionGroup({ channelId: chatId, chatId: linkedGroupId });\n }, [closeConfirmLinkGroupDialog, linkDiscussionGroup, chatId, linkedGroupId]);\n\n const onDiscussionClick = (groupId: string) => {\n setLinkedGroupId(groupId);\n openConfirmLinkGroupDialog();\n };\n\n function renderUnlinkGroupHeader() {\n return (\n
\n \n
\n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n
\n
\n );\n }\n\n function renderLinkGroupHeader() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n return (\n
\n \n
\n {lang('Channel.DiscussionGroup.LinkGroup')}\n
\n
\n );\n }\n\n function renderLinkGroupConfirmText() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n if (linkedGroup.hasPrivateLink) {\n return renderText(\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPublicAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n return renderText(\n // eslint-disable-next-line max-len\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?\\n\\nAnyone from the channel will be able to see messages in this group.`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPrivateAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n function renderLinkedGroup() {\n return (\n
\n \n \n \n \n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n \n \n
\n );\n }\n\n function renderDiscussionGroups() {\n return (\n
\n

{lang('DiscussionChannelHelp')}

\n\n
\n \n {lang('DiscussionCreateGroup')}\n \n {forDiscussionIds ? (\n forDiscussionIds.map((id, i) => (\n {\n onDiscussionClick(id);\n }}\n >\n \n \n ))\n ) : (\n \n )}\n
\n

{lang('DiscussionChannelHelp2')}

\n \n
\n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n {linkedChat && renderLinkedGroup()}\n {!linkedChat && renderDiscussionGroups()}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { forDiscussionIds, byId: chatsByIds } = global.chats;\n const linkedChat = chat?.fullInfo?.linkedChatId\n ? selectChat(global, chat.fullInfo.linkedChatId)\n : undefined;\n\n return {\n chat,\n chatsByIds,\n forDiscussionIds,\n linkedChat,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageDiscussion));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatBannedRights } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n chatId: string;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isFormFullyDisabled?: boolean;\n};\n\nconst ManageGroupUserPermissions: FC = ({\n chat,\n selectedChatMemberId,\n onScreenSelect,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getDispatch();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isBanConfirmationDialogOpen, openBanConfirmationDialog, closeBanConfirmationDialog] = useFlag();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return undefined;\n }\n\n return chat.fullInfo.members.find(({ userId }) => userId === selectedChatMemberId);\n }, [chat, selectedChatMemberId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedChatMemberId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedChatMemberId]);\n\n useEffect(() => {\n setPermissions((selectedChatMember?.bannedRights) || (chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setIsLoading(false);\n }, [chat, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n setIsLoading(true);\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: permissions,\n });\n }, [chat, selectedChatMemberId, permissions, updateChatMemberBannedRights]);\n\n const handleBanFromGroup = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: {\n viewMessages: true,\n },\n });\n }, [chat, selectedChatMemberId, updateChatMemberBannedRights]);\n\n const getControlIsDisabled = useCallback((key: Exclude) => {\n if (isFormFullyDisabled) {\n return true;\n }\n\n if (!chat || !chat.defaultBannedRights) {\n return false;\n }\n\n return chat.defaultBannedRights[key];\n }, [chat, isFormFullyDisabled]);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('UserRestrictionsCanDo')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n {!isFormFullyDisabled && (\n
\n \n {lang('UserRestrictionsBlock')}\n \n
\n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return { chat, isFormFullyDisabled };\n },\n)(ManageGroupUserPermissions));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatMember } from '../../../api/types';\n\nimport { getUserFullName, isChatChannel } from '../../../modules/helpers';\nimport { selectChat } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n currentUserId?: string;\n isChannel: boolean;\n};\n\nconst ManageChatAdministrators: FC = ({\n chat,\n isChannel,\n currentUserId,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n function handleRecentActionsClick() {\n onScreenSelect(ManagementScreens.GroupRecentActions);\n }\n\n const adminMembers = useMemo(() => {\n if (!chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const handleAdminMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.ChatAdminRights);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n const handleAddAdminClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupAddAdmins);\n }, [onScreenSelect]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const promotedByUser = member.promotedByUserId ? usersById[member.promotedByUserId] : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n \n {lang('EventLog')}\n {lang(isChannel ? 'EventLogInfoDetailChannel' : 'EventLogInfoDetail')}\n \n
\n\n
\n

\n {isChannel\n ? 'You can add administrators to help you manage your channel.'\n : 'You can add administrators to help you manage your group.'}\n

\n\n {adminMembers.map((member) => (\n handleAdminMemberClick(member)}\n >\n \n \n ))}\n\n \n \n \n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n chat,\n currentUserId: global.currentUserId,\n isChannel: isChatChannel(chat),\n };\n },\n)(ManageChatAdministrators));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatMember } from '../../../api/types';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../modules/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n};\n\nconst ManageGroupRecentActions: FC = ({ chat, onClose, isActive }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const adminMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n

Actions

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n

{lang('Channel.Management.Title')}

\n\n
\n \n
\n\n {adminMembers.map((member) => (\n \n \n \n \n ))}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat };\n },\n)(ManageGroupRecentActions));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiChatAdminRights, ApiUser } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport { getUserFullName, isChatBasicGroup, isChatChannel } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport InputText from '../../ui/InputText';\n\ntype OwnProps = {\n chatId: string;\n selectedUserId?: string;\n isPromotedByCurrentUser?: boolean;\n isNewAdmin?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n usersById: Record;\n currentUserId?: string;\n isChannel: boolean;\n isFormFullyDisabled: boolean;\n defaultRights?: ApiChatAdminRights;\n};\n\nconst CUSTOM_TITLE_MAX_LENGTH = 16;\n\nconst ManageGroupAdminRights: FC = ({\n isNewAdmin,\n selectedUserId,\n defaultRights,\n onScreenSelect,\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatAdmin } = getDispatch();\n\n const [permissions, setPermissions] = useState({});\n const [isTouched, setIsTouched] = useState(Boolean(isNewAdmin));\n const [isLoading, setIsLoading] = useState(false);\n const [isDismissConfirmationDialogOpen, openDismissConfirmationDialog, closeDismissConfirmationDialog] = useFlag();\n const [customTitle, setCustomTitle] = useState('');\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n const selectedAdminMember = chat.fullInfo?.adminMembers?.find(({ userId }) => userId === selectedUserId);\n\n // If `selectedAdminMember` variable is filled with a value, then we have already saved the administrator,\n // so now we need to return to the list of administrators\n if (isNewAdmin && (selectedAdminMember || !selectedUserId)) {\n return undefined;\n }\n\n if (isNewAdmin) {\n const user = getGlobal().users.byId[selectedUserId!];\n\n return user ? {\n userId: user.id,\n adminRights: defaultRights,\n customTitle: lang('ChannelAdmin'),\n isOwner: false,\n promotedByUserId: undefined,\n } : undefined;\n }\n\n return selectedAdminMember;\n }, [chat.fullInfo?.adminMembers, defaultRights, isNewAdmin, lang, selectedUserId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedUserId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedUserId]);\n\n useEffect(() => {\n setPermissions(selectedChatMember?.adminRights || {});\n setCustomTitle((selectedChatMember?.customTitle || '').substr(0, CUSTOM_TITLE_MAX_LENGTH));\n setIsTouched(Boolean(isNewAdmin));\n setIsLoading(false);\n }, [defaultRights, isNewAdmin, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as keyof ApiChatAdminRights]),\n }));\n setIsTouched(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n setIsLoading(true);\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: permissions,\n customTitle,\n });\n }, [selectedUserId, updateChatAdmin, chat.id, permissions, customTitle]);\n\n const handleDismissAdmin = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: {},\n });\n closeDismissConfirmationDialog();\n }, [chat.id, closeDismissConfirmationDialog, selectedUserId, updateChatAdmin]);\n\n const getControlIsDisabled = useCallback((key: keyof ApiChatAdminRights) => {\n if (isChatBasicGroup(chat)) {\n return false;\n }\n\n if (isFormFullyDisabled || !chat.adminRights) {\n return true;\n }\n\n return !chat.adminRights![key];\n }, [chat, isFormFullyDisabled]);\n\n const memberStatus = useMemo(() => {\n if (isNewAdmin || !selectedChatMember) {\n return undefined;\n }\n\n if (selectedChatMember.isOwner) {\n return lang('ChannelCreator');\n }\n\n const promotedByUser = selectedChatMember.promotedByUserId\n ? usersById[selectedChatMember.promotedByUserId]\n : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [isNewAdmin, selectedChatMember, usersById, lang]);\n\n const handleCustomTitleChange = useCallback((e) => {\n const { value } = e.target;\n setCustomTitle(value);\n setIsTouched(true);\n }, []);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('EditAdminWhatCanDo')}

\n\n
\n \n
\n {isChannel && (\n
\n \n
\n )}\n {isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n\n {isFormFullyDisabled && (\n

\n {lang('Channel.EditAdmin.CannotEdit')}\n

\n )}\n\n {!isChannel && (\n \n )}\n\n {currentUserId !== selectedUserId && !isFormFullyDisabled && !isNewAdmin && (\n \n {lang('EditAdminRemoveAdmin')}\n \n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n {!isNewAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { byId: usersById } = global.users;\n const { currentUserId } = global;\n const isChannel = isChatChannel(chat);\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return {\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n defaultRights: chat.adminRights,\n };\n },\n)(ManageGroupAdminRights));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChatMember, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { unique } from '../../../util/iteratees';\nimport { selectChat } from '../../../modules/selectors';\nimport {\n sortUserIds, isChatChannel, filterUsersByName, sortChatIds, isUserBot,\n} from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport NothingFound from '../../common/NothingFound';\nimport ListItem from '../../ui/ListItem';\nimport InputText from '../../ui/InputText';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Loading from '../../ui/Loading';\n\ntype OwnProps = {\n chatId: string;\n isActive: boolean;\n noAdmins?: boolean;\n onClose: NoneToVoidFunction;\n onScreenSelect?: (screen: ManagementScreens) => void;\n onChatMemberSelect?: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n};\n\ntype StateProps = {\n userStatusesById: Record;\n members?: ApiChatMember[];\n adminMembers?: ApiChatMember[];\n isChannel?: boolean;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n serverTimeOffset: number;\n};\n\nconst ManageGroupMembers: FC = ({\n noAdmins,\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n isActive,\n globalUserIds,\n localContactIds,\n localUserIds,\n isSearching,\n searchQuery,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n onChatMemberSelect,\n}) => {\n const { openChat, setUserSearchQuery, loadContactList } = getDispatch();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const adminIds = useMemo(() => {\n return noAdmins ? adminMembers?.map(({ userId }) => userId) || [] : [];\n }, [adminMembers, noAdmins]);\n\n const memberIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n if (!members || !usersById) {\n return [];\n }\n\n const userIds = sortUserIds(\n members.map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n\n return noAdmins ? userIds.filter((userId) => !adminIds.includes(userId)) : userIds;\n }, [members, userStatusesById, serverTimeOffset, noAdmins, adminIds]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n const shouldUseSearchResults = Boolean(searchQuery);\n const listedIds = !shouldUseSearchResults\n ? memberIds\n : (localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : []);\n\n return sortChatIds(\n unique([\n ...listedIds,\n ...(shouldUseSearchResults ? localUserIds || [] : []),\n ...(shouldUseSearchResults ? globalUserIds || [] : []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return (isChannel || user.canBeInvitedToGroup || !isUserBot(user))\n && (!noAdmins || !adminIds.includes(contactId));\n }),\n chatsById,\n true,\n );\n }, [memberIds, localContactIds, searchQuery, localUserIds, globalUserIds, isChannel, noAdmins, adminIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(loadContactList, displayedIds, Boolean(searchQuery));\n\n const handleMemberClick = useCallback((id: string) => {\n if (noAdmins) {\n onChatMemberSelect!(id, false);\n onScreenSelect!(ManagementScreens.ChatNewAdminRights);\n } else {\n openChat({ id });\n }\n }, [noAdmins, onChatMemberSelect, onScreenSelect, openChat]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n setUserSearchQuery({ query: e.target.value });\n }, [setUserSearchQuery]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n handleMemberClick(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n useHistoryBack(isActive, onClose);\n\n function renderSearchField() {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n {noAdmins && renderSearchField()}\n
\n
\n {viewportIds?.length ? (\n \n {viewportIds.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))}\n \n ) : !isSearching && viewportIds && !viewportIds.length ? (\n \n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const adminMembers = chat?.fullInfo?.adminMembers;\n const isChannel = chat && isChatChannel(chat);\n const { userIds: localContactIds } = global.contactList || {};\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalUserIds,\n localUserIds,\n } = global.userSearch;\n\n return {\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus,\n globalUserIds,\n localUserIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupMembers));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChatMember, ApiUser, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport { sortUserIds, isChatChannel } from '../../../modules/helpers';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n members?: ApiChatMember[];\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageGroupUserPermissionsCreate: FC = ({\n usersById,\n userStatusesById,\n members,\n isChannel,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n serverTimeOffset,\n}) => {\n useHistoryBack(isActive, onClose);\n\n const memberIds = useMemo(() => {\n if (!members || !usersById) {\n return undefined;\n }\n\n return sortUserIds(\n members.filter((member) => !member.isOwner).map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n }, [members, serverTimeOffset, usersById, userStatusesById]);\n\n const handleExceptionMemberClick = useCallback((memberId: string) => {\n onChatMemberSelect(memberId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [onChatMemberSelect, onScreenSelect]);\n\n return (\n
\n
\n
\n {memberIds ? (\n memberIds.map((id, i) => (\n handleExceptionMemberClick(id)}\n >\n \n \n ))\n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const isChannel = chat && isChatChannel(chat);\n\n return {\n members,\n usersById,\n userStatusesById,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupUserPermissionsCreate));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_INVITES } from '../../../config';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatCountdown, MILLISECONDS_IN_DAY } from '../../../util/dateFormat';\nimport useInterval from '../../../hooks/useInterval';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\nimport { selectChat } from '../../../modules/selectors';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { getServerTime } from '../../../util/serverTime';\nimport useFlag from '../../../hooks/useFlag';\nimport { isChatChannel } from '../../../modules/helpers';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport Button from '../../ui/Button';\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n exportedInvites?: ApiExportedInvite[];\n revokedExportedInvites?: ApiExportedInvite[];\n serverTimeOffset: number;\n};\n\nconst BULLET = '\\u2022';\n\nfunction inviteComparator(i1: ApiExportedInvite, i2: ApiExportedInvite) {\n const { isPermanent: i1IsPermanent, usage: i1Usage = 0, date: i1Date } = i1;\n const { isPermanent: i2IsPermanent, usage: i2Usage = 0, date: i2Date } = i2;\n if (i1IsPermanent || i2IsPermanent) return Number(i1IsPermanent) - Number(i2IsPermanent);\n if (i1Usage || i2Usage) return i2Usage - i1Usage;\n return i2Date - i1Date;\n}\n\nconst ManageInvites: FC = ({\n chatId,\n chat,\n exportedInvites,\n revokedExportedInvites,\n isActive,\n isChannel,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const {\n setEditingExportedInvite,\n showNotification,\n editExportedChatInvite,\n deleteExportedChatInvite,\n deleteRevokedExportedChatInvites,\n setOpenedInviteInfo,\n } = getDispatch();\n\n const lang = useLang();\n\n const [isDeleteRevokeAllDialogOpen, openDeleteRevokeAllDialog, closeDeleteRevokeAllDialog] = useFlag();\n const [isRevokeDialogOpen, openRevokeDialog, closeRevokeDialog] = useFlag();\n const [revokingInvite, setRevokingInvite] = useState();\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [deletingInvite, setDeletingInvite] = useState();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('Invite').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n const hasDetailedCountdown = useMemo(() => {\n if (!exportedInvites) return undefined;\n return exportedInvites\n .some(({ expireDate }) => (\n expireDate && (expireDate - getServerTime(serverTimeOffset) < MILLISECONDS_IN_DAY / 1000)\n ));\n }, [exportedInvites, serverTimeOffset]);\n const forceUpdate = useForceUpdate();\n useInterval(() => {\n forceUpdate();\n }, hasDetailedCountdown ? 1000 : undefined);\n\n const primaryInvite = exportedInvites?.find(({ isPermanent }) => isPermanent);\n const primaryInviteLink = chat?.username ? `t.me/${chat.username}` : primaryInvite?.link;\n const temporalInvites = useMemo(() => {\n const invites = chat?.username ? exportedInvites : exportedInvites?.filter(({ isPermanent }) => !isPermanent);\n return invites?.sort(inviteComparator);\n }, [chat?.username, exportedInvites]);\n\n const editInvite = (invite: ApiExportedInvite) => {\n setEditingExportedInvite({ chatId, invite });\n onScreenSelect(ManagementScreens.EditInvite);\n };\n\n const revokeInvite = useCallback((invite: ApiExportedInvite) => {\n const {\n link, title, isRequestNeeded, expireDate, usageLimit,\n } = invite;\n editExportedChatInvite({\n chatId,\n link,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n isRevoked: true,\n });\n }, [chatId, editExportedChatInvite]);\n\n const askToRevoke = useCallback((invite: ApiExportedInvite) => {\n setRevokingInvite(invite);\n openRevokeDialog();\n }, [openRevokeDialog]);\n\n const handleRevoke = useCallback(() => {\n if (!revokingInvite) return;\n revokeInvite(revokingInvite);\n setRevokingInvite(undefined);\n closeRevokeDialog();\n }, [closeRevokeDialog, revokeInvite, revokingInvite]);\n\n const handleCreateNewClick = useCallback(() => {\n onScreenSelect(ManagementScreens.EditInvite);\n }, [onScreenSelect]);\n\n const handlePrimaryRevoke = useCallback(() => {\n if (primaryInvite) {\n askToRevoke(primaryInvite);\n }\n }, [askToRevoke, primaryInvite]);\n\n const handleDeleteAllRevoked = useCallback(() => {\n deleteRevokedExportedChatInvites({ chatId });\n closeDeleteRevokeAllDialog();\n }, [chatId, closeDeleteRevokeAllDialog, deleteRevokedExportedChatInvites]);\n\n const showInviteInfo = useCallback((invite: ApiExportedInvite) => {\n setOpenedInviteInfo({ chatId, invite });\n onScreenSelect(ManagementScreens.InviteInfo);\n }, [chatId, onScreenSelect, setOpenedInviteInfo]);\n\n const deleteInvite = useCallback((invite: ApiExportedInvite) => {\n deleteExportedChatInvite({ chatId, link: invite.link });\n }, [chatId, deleteExportedChatInvite]);\n\n const askToDelete = useCallback((invite: ApiExportedInvite) => {\n setDeletingInvite(invite);\n openDeleteDialog();\n }, [openDeleteDialog]);\n\n const handleDelete = useCallback(() => {\n if (!deletingInvite) return;\n deleteInvite(deletingInvite);\n setDeletingInvite(undefined);\n closeDeleteDialog();\n }, [closeDeleteDialog, deleteInvite, deletingInvite]);\n\n const copyLink = useCallback((link: string) => {\n copyTextToClipboard(link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [lang, showNotification]);\n\n const handleCopyPrimaryClicked = useCallback(() => {\n copyLink(primaryInviteLink!);\n }, [copyLink, primaryInviteLink]);\n\n const prepareUsageText = (invite: ApiExportedInvite) => {\n const {\n usage = 0, usageLimit, expireDate, isPermanent, requested, isRevoked,\n } = invite;\n let text = '';\n if (!isRevoked && usageLimit && usage < usageLimit) {\n text = lang('CanJoin', usageLimit - usage);\n } else if (usage) {\n text = lang('PeopleJoined', usage);\n } else {\n text = lang('NoOneJoined');\n }\n\n if (isRevoked) {\n text += ` ${BULLET} ${lang('Revoked')}`;\n return text;\n }\n\n if (requested) {\n text += ` ${BULLET} ${lang('JoinRequests', requested)}`;\n }\n\n if (usageLimit !== undefined && usage === usageLimit) {\n text += ` ${BULLET} ${lang('LinkLimitReached')}`;\n } else if (expireDate) {\n const diff = (expireDate - getServerTime(serverTimeOffset)) * 1000;\n text += ` ${BULLET} `;\n if (diff > 0) {\n text += lang('InviteLink.ExpiresIn', formatCountdown(lang, diff));\n } else {\n text += lang('InviteLink.Expired');\n }\n } else if (isPermanent) {\n text += ` ${BULLET} ${lang('Permanent')}`;\n }\n\n return text;\n };\n\n const prepareContextActions = (invite: ApiExportedInvite) => {\n const actions = [];\n actions.push({\n title: lang('Copy'),\n icon: 'copy',\n handler: () => copyLink(invite.link),\n });\n\n if (!invite.isPermanent && !invite.isRevoked) {\n actions.push({\n title: lang('Edit'),\n icon: 'edit',\n handler: () => editInvite(invite),\n });\n }\n\n if (!invite.isRevoked) {\n actions.push({\n title: lang('RevokeButton'),\n icon: 'delete',\n handler: () => askToRevoke(invite),\n destructive: true,\n });\n } else {\n actions.push({\n title: lang('DeleteLink'),\n icon: 'delete',\n handler: () => askToDelete(invite),\n destructive: true,\n });\n }\n return actions;\n };\n\n const PrimaryLinkMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n

{isChannel ? lang('PrimaryLinkHelpChannel') : lang('PrimaryLinkHelp')}

\n
\n {primaryInviteLink && (\n
\n

\n {chat?.username ? lang('PublicLink') : lang('lng_create_permanent_link_title')}\n

\n
\n \n \n {lang('Copy')}\n {!chat?.username && (\n {lang('RevokeButton')}\n )}\n \n
\n \n
\n )}\n
\n \n {(!temporalInvites || !temporalInvites.length) && }\n {temporalInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n

{lang('ManageLinksInfoHelp')}

\n
\n {revokedExportedInvites && Boolean(revokedExportedInvites.length) && (\n
\n

{lang('RevokedLinks')}

\n \n {lang('DeleteAllRevokedLinks')}\n \n {revokedExportedInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n
\n )}\n
\n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { invites, revokedInvites } = global.management.byChatId[chatId];\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n exportedInvites: invites,\n revokedExportedInvites: revokedInvites,\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel,\n };\n },\n)(ManageInvites));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatFullDate, formatTime } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport Checkbox from '../../ui/Checkbox';\nimport InputText from '../../ui/InputText';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Button from '../../ui/Button';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport useOnChange from '../../../hooks/useOnChange';\nimport CalendarModal from '../../common/CalendarModal';\n\nconst DEFAULT_USAGE_LIMITS = [1, 10, 100];\nconst DEFAULT_EXPIRE_DATE = {\n hour: 3600000,\n day: 86400000,\n week: 604800000,\n};\nconst DEFAULT_CUSTOM_EXPIRE_DATE = DEFAULT_EXPIRE_DATE.hour;\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n editingInvite?: ApiExportedInvite;\n serverTimeOffset: number;\n};\n\nconst ManageInvite: FC = ({\n chatId,\n editingInvite,\n isActive,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const { editExportedChatInvite, exportChatInvite } = getDispatch();\n\n const lang = useLang();\n const [isCalendarOpened, openCalendar, closeCalendar] = useFlag();\n const [isRequestNeeded, setIsRequestNeeded] = useState(false);\n const [title, setTitle] = useState('');\n const [customExpireDate, setCustomExpireDate] = useState(Date.now() + DEFAULT_CUSTOM_EXPIRE_DATE);\n const [selectedExpireOption, setSelectedExpireOption] = useState('unlimited');\n const [customUsageLimit, setCustomUsageLimit] = useState(10);\n const [selectedUsageOption, setSelectedUsageOption] = useState('0');\n const [isSubmitBlocked, setIsSubmitBlocked] = useState(false);\n\n useHistoryBack(isActive, onClose);\n\n useOnChange(([oldEditingInvite]) => {\n if (oldEditingInvite === editingInvite) return;\n if (!editingInvite) {\n setTitle('');\n setSelectedExpireOption('unlimited');\n setSelectedUsageOption('0');\n setCustomExpireDate(getServerTime(serverTimeOffset) * 1000 + DEFAULT_CUSTOM_EXPIRE_DATE);\n setCustomUsageLimit(10);\n setIsRequestNeeded(false);\n } else {\n const {\n title: editingTitle, usageLimit, expireDate, isRequestNeeded: editingIsRequestNeeded,\n } = editingInvite;\n if (editingTitle) setTitle(editingTitle);\n if (usageLimit) {\n setSelectedUsageOption(DEFAULT_USAGE_LIMITS.includes(usageLimit) ? usageLimit.toString() : 'custom');\n setCustomUsageLimit(usageLimit);\n }\n if (expireDate) {\n const minSafeDate = getServerTime(serverTimeOffset) + DEFAULT_CUSTOM_EXPIRE_DATE;\n setSelectedExpireOption('custom');\n setCustomExpireDate(Math.max(expireDate, minSafeDate) * 1000);\n }\n if (editingIsRequestNeeded) {\n setIsRequestNeeded(true);\n }\n }\n }, [editingInvite, serverTimeOffset]);\n\n const handleIsRequestChange = useCallback((e: ChangeEvent) => {\n setIsRequestNeeded(e.target.checked);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n }, []);\n\n const handleCustomUsageLimitChange = useCallback((e: ChangeEvent) => {\n setCustomUsageLimit(Number.parseInt(e.target.value, 10));\n }, []);\n\n const handleExpireDateChange = useCallback((date: Date) => {\n setCustomExpireDate(date.getTime());\n closeCalendar();\n }, [closeCalendar]);\n\n const handleSaveClick = useCallback(() => {\n setIsSubmitBlocked(true);\n const usageLimit = selectedUsageOption === 'custom' ? customUsageLimit : selectedUsageOption;\n let expireDate;\n switch (selectedExpireOption) {\n case 'custom':\n expireDate = getServerTime(serverTimeOffset) + (customExpireDate - Date.now()) / 1000;\n break;\n case 'hour':\n case 'day':\n case 'week':\n expireDate = getServerTime(serverTimeOffset) + DEFAULT_EXPIRE_DATE[selectedExpireOption] / 1000;\n break;\n case 'unlimited':\n default:\n expireDate = undefined;\n }\n\n if (editingInvite) {\n editExportedChatInvite({\n link: editingInvite.link,\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n } else {\n exportChatInvite({\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n }\n onScreenSelect(ManagementScreens.Invites);\n }, [\n chatId, customExpireDate, customUsageLimit, editExportedChatInvite, editingInvite,\n exportChatInvite, isRequestNeeded, selectedExpireOption, selectedUsageOption, title, onScreenSelect,\n serverTimeOffset,\n ]);\n\n return (\n
\n
\n
\n \n
\n
\n \n

{lang('LinkNameHelp')}

\n
\n
\n
{lang('LimitByPeriod')}
\n \n {selectedExpireOption === 'custom' && (\n \n )}\n

{lang('TimeLimitHelp')}

\n
\n {!isRequestNeeded && (\n
\n
{lang('LimitNumberOfUses')}
\n ({ value: n.toString(), label: n })),\n {\n value: '0',\n label: lang('NoLimit'),\n },\n {\n value: 'custom',\n label: lang('lng_group_invite_usage_custom'),\n },\n ]}\n onChange={setSelectedUsageOption}\n selected={selectedUsageOption}\n />\n {selectedUsageOption === 'custom' && (\n \n )}\n

{lang('UsesLimitHelp')}

\n
\n )}\n \n \n \n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { editingInvite } = global.management.byChatId[chatId];\n\n return {\n editingInvite,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInvite));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiAvailableReaction, ApiChat } from '../../../api/types';\n\nimport { selectChat } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n availableReactions?: ApiAvailableReaction[];\n enabledReactions?: string[];\n};\n\nconst ManageReactions: FC = ({\n availableReactions,\n enabledReactions,\n chat,\n isActive,\n onClose,\n}) => {\n const { setChatEnabledReactions } = getDispatch();\n\n const lang = useLang();\n const [isTouched, setIsTouched] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [localEnabledReactions, setLocalEnabledReactions] = useState(enabledReactions || []);\n\n useHistoryBack(isActive, onClose);\n\n const handleSaveReactions = useCallback(() => {\n if (!chat) return;\n setIsLoading(true);\n\n setChatEnabledReactions({\n chatId: chat.id,\n enabledReactions: localEnabledReactions,\n });\n }, [chat, localEnabledReactions, setChatEnabledReactions]);\n\n useEffect(() => {\n if (enabledReactions) {\n setIsLoading(false);\n setIsTouched(false);\n setLocalEnabledReactions(enabledReactions);\n }\n }, [enabledReactions]);\n\n const handleReactionChange = useCallback((e: React.ChangeEvent) => {\n if (!chat || !availableReactions) return;\n\n const { name, checked } = e.currentTarget;\n const newEnabledReactions = name === 'all' ? (checked ? availableReactions.map((l) => l.reaction) : [])\n : (!checked\n ? localEnabledReactions.filter((l) => l !== name)\n : [...localEnabledReactions, name]);\n\n setLocalEnabledReactions(newEnabledReactions);\n setIsTouched(true);\n }, [availableReactions, chat, localEnabledReactions]);\n\n return (\n
\n
\n
\n
\n 0}\n label={lang('EnableReactions')}\n onChange={handleReactionChange}\n />\n
\n {availableReactions?.filter((l) => !l.isInactive).map(({ reaction, title }) => (\n
\n \n \n {title}\n
\n )}\n onChange={handleReactionChange}\n />\n
\n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n enabledReactions: chat.fullInfo?.enabledReactions,\n availableReactions: global.availableReactions,\n chat,\n };\n },\n)(ManageReactions));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChatInviteImporter, ApiExportedInvite, ApiUser } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { getServerTime } from '../../../util/serverTime';\nimport { formatFullDate, formatMediaDateTime, formatTime } from '../../../util/dateFormat';\nimport { isChatChannel } from '../../../modules/helpers';\nimport { selectChat } from '../../../modules/selectors';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n invite?: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n admin?: ApiUser;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageInviteInfo: FC = ({\n chatId,\n invite,\n importers,\n requesters,\n isChannel,\n isActive,\n serverTimeOffset,\n onClose,\n}) => {\n const {\n showNotification,\n loadChatInviteImporters,\n loadChatInviteRequesters,\n openChat,\n } = getDispatch();\n\n const lang = useLang();\n const {\n usage = 0, usageLimit, link, adminId,\n } = invite || {};\n const expireDate = invite?.expireDate && (invite.expireDate - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n const isExpired = ((invite?.expireDate || 0) - getServerTime(serverTimeOffset)) < 0;\n\n useEffect(() => {\n if (link) {\n loadChatInviteImporters({ chatId, link });\n loadChatInviteRequesters({ chatId, link });\n }\n }, [chatId, link, loadChatInviteImporters, loadChatInviteRequesters]);\n\n const handleCopyClicked = useCallback(() => {\n copyTextToClipboard(invite!.link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [invite, lang, showNotification]);\n\n useHistoryBack(isActive, onClose);\n\n const renderImporters = () => {\n if (!importers?.length && requesters?.length) return undefined;\n if (!importers) return ;\n return (\n
\n

{importers.length ? lang('PeopleJoined', usage) : lang('NoOneJoined')}

\n

\n {!importers.length && (\n usageLimit ? lang('PeopleCanJoinViaLinkCount', usageLimit - usage) : lang('NoOneJoinedYet')\n )}\n {importers.map((importer) => (\n openChat({ id: importer.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n const renderRequesters = () => {\n if (invite?.isRevoked) return undefined;\n if (!requesters && importers) return ;\n if (!requesters?.length) return undefined;\n return (\n
\n

{isChannel ? lang('SubscribeRequests') : lang('MemberRequests')}

\n

\n {requesters.map((requester) => (\n openChat({ id: requester.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n return (\n
\n
\n {!invite && (\n

{lang('Loading')}

\n )}\n {invite && (\n <>\n
\n

{invite.title || invite.link}

\n \n \n {expireDate && (\n

\n {isExpired\n ? lang('ExpiredLink')\n : lang('LinkExpiresIn', `${formatFullDate(lang, expireDate)} ${formatTime(lang, expireDate)}`)}\n

\n )}\n
\n {adminId && (\n
\n

{lang('LinkCreatedeBy')}

\n openChat({ id: adminId })}\n >\n \n \n
\n )}\n {renderImporters()}\n {renderRequesters()}\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { inviteInfo } = global.management.byChatId[chatId];\n const { invite, importers, requesters } = inviteInfo || {};\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n invite,\n importers,\n requesters,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInviteInfo));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { getUserFullName } from '../../../modules/helpers';\nimport { selectUser } from '../../../modules/selectors';\nimport { formatHumanDate, formatTime, isToday } from '../../../util/dateFormat';\nimport { getServerTime } from '../../../util/serverTime';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\n\nimport './JoinRequest.scss';\n\ntype OwnProps = {\n userId: string;\n about?: string;\n isChannel?: boolean;\n date: number;\n chatId: string;\n};\n\ntype StateProps = {\n user?: ApiUser;\n isSavedMessages?: boolean;\n serverTimeOffset: number;\n};\n\nconst JoinRequest: FC = ({\n userId,\n about,\n date,\n isChannel,\n user,\n serverTimeOffset,\n chatId,\n}) => {\n const { openChat, hideChatJoinRequest } = getDispatch();\n\n const buildClassName = createClassNameBuilder('JoinRequest');\n const lang = useLang();\n\n const fullName = getUserFullName(user);\n const fixedDate = (date - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n\n const dateString = isToday(new Date(fixedDate))\n ? formatTime(lang, fixedDate) : formatHumanDate(lang, fixedDate, true, false, true);\n\n const handleUserClick = () => {\n openChat({ id: userId });\n };\n\n const handleAcceptRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: true });\n }, [chatId, hideChatJoinRequest, userId]);\n\n const handleRejectRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: false });\n }, [chatId, hideChatJoinRequest, userId]);\n\n return (\n
\n
\n
\n \n
\n
{fullName}
\n
{about}
\n
\n
\n
{dateString}
\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n\n return {\n user,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(JoinRequest));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { STICKER_SIZE_JOIN_REQUESTS } from '../../../config';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { selectChat } from '../../../modules/selectors';\nimport { isChatChannel, isUserId } from '../../../modules/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport getAnimationData from '../../common/helpers/animatedAssets';\n\nimport JoinRequest from './JoinRequest';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageJoinRequests: FC = ({\n chat,\n chatId,\n isActive,\n isChannel,\n onClose,\n}) => {\n const { hideAllChatJoinRequests, loadChatJoinRequests } = getDispatch();\n const [isAcceptAllDialogOpen, openAcceptAllDialog, closeAcceptAllDialog] = useFlag();\n const [isRejectAllDialogOpen, openRejectAllDialog, closeRejectAllDialog] = useFlag();\n\n const lang = useLang();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('JoinRequest').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (!chat?.joinRequests && !isUserId(chatId)) {\n loadChatJoinRequests({ chatId });\n }\n }, [chat, chatId, loadChatJoinRequests]);\n\n const handleAcceptAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: true });\n closeAcceptAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeAcceptAllDialog]);\n\n const handleRejectAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: false });\n closeRejectAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeRejectAllDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n {Boolean(chat?.joinRequests?.length) && (\n
\n \n \n
\n )}\n
\n
\n
\n

\n {!chat?.joinRequests ? lang('Loading') : chat.joinRequests.length\n ? lang('JoinRequests', chat.joinRequests.length) : lang('NoMemberRequests')}\n

\n {!chat?.joinRequests && (\n \n )}\n {chat?.joinRequests?.length === 0 && (\n

\n {isChannel ? lang('NoSubscribeRequestsDescription') : lang('NoMemberRequestsDescription')}\n

\n )}\n {chat?.joinRequests?.map(({ userId, about, date }) => (\n \n ))}\n
\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return {\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageJoinRequests));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ManagementScreens, ManagementType } from '../../../types';\n\nimport { selectCurrentManagementType } from '../../../modules/selectors';\n\nimport ManageUser from './ManageUser';\nimport ManageGroup from './ManageGroup';\nimport ManageGroupPermissions from './ManageGroupPermissions';\nimport ManageGroupRemovedUsers from './ManageGroupRemovedUsers';\nimport ManageChannel from './ManageChannel';\nimport ManageChatPrivacyType from './ManageChatPrivacyType';\nimport ManageDiscussion from './ManageDiscussion';\nimport ManageGroupUserPermissions from './ManageGroupUserPermissions';\nimport ManageChatAdministrators from './ManageChatAdministrators';\nimport ManageGroupRecentActions from './ManageGroupRecentActions';\nimport ManageGroupAdminRights from './ManageGroupAdminRights';\nimport ManageGroupMembers from './ManageGroupMembers';\nimport ManageGroupUserPermissionsCreate from './ManageGroupUserPermissionsCreate';\nimport ManageInvites from './ManageInvites';\nimport ManageInvite from './ManageInvite';\nimport ManageReactions from './ManageReactions';\nimport ManageInviteInfo from './ManageInviteInfo';\nimport ManageJoinRequests from './ManageJoinRequests';\n\nexport type OwnProps = {\n chatId: string;\n currentScreen: ManagementScreens;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n managementType?: ManagementType;\n};\n\nconst Management: FC = ({\n chatId,\n currentScreen,\n selectedChatMemberId,\n isPromotedByCurrentUser,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n managementType,\n}) => {\n switch (currentScreen) {\n case ManagementScreens.Initial: {\n switch (managementType) {\n case 'user':\n return (\n \n );\n case 'group':\n return (\n \n );\n case 'channel':\n return (\n \n );\n }\n\n break;\n }\n\n case ManagementScreens.ChatPrivacyType:\n return (\n \n );\n\n case ManagementScreens.Discussion:\n return (\n \n );\n\n case ManagementScreens.GroupPermissions:\n return (\n \n );\n\n case ManagementScreens.GroupRemovedUsers:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissionsCreate:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissions:\n return (\n \n );\n\n case ManagementScreens.ChatAdministrators:\n return (\n \n );\n\n case ManagementScreens.GroupRecentActions:\n return (\n \n );\n\n case ManagementScreens.ChatNewAdminRights:\n case ManagementScreens.ChatAdminRights:\n return (\n \n );\n\n case ManagementScreens.ChannelSubscribers:\n case ManagementScreens.GroupMembers:\n return (\n \n );\n case ManagementScreens.Invites:\n return (\n \n );\n case ManagementScreens.EditInvite:\n return (\n \n );\n case ManagementScreens.GroupAddAdmins:\n return (\n \n );\n\n case ManagementScreens.Reactions:\n return (\n \n );\n case ManagementScreens.InviteInfo:\n return (\n \n );\n case ManagementScreens.JoinRequests:\n return (\n \n );\n }\n\n return undefined; // Never reached\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const managementType = selectCurrentManagementType(global);\n\n return {\n managementType,\n };\n },\n)(Management));\n","const VISA = /^4[0-9]{12}(?:[0-9]{1,3})?$/;\nconst MASTERCARD1 = /^5[1-5][0-9]{11,14}$/;\nconst MASTERCARD2 = /^2[2-7][0-9]{11,14}$/;\n\nexport enum CardType {\n Default,\n Visa,\n Mastercard,\n}\n\nconst cards: Record = {\n [CardType.Default]: '',\n [CardType.Visa]: 'visa',\n [CardType.Mastercard]: 'mastercard',\n};\n\nexport function detectCardType(cardNumber: string): number {\n cardNumber = cardNumber.replace(/\\s/g, '');\n if (VISA.test(cardNumber)) {\n return CardType.Visa;\n }\n if (MASTERCARD1.test(cardNumber) || MASTERCARD2.test(cardNumber)) {\n return CardType.Mastercard;\n }\n return CardType.Default;\n}\n\nexport function detectCardTypeText(cardNumber: string): string {\n const cardType = detectCardType(cardNumber);\n return cards[cardType as number] || '';\n}\n","// This data was received from Telegram Desktop (Telegram/Resources/numbers.txt)\nconst DATA = `AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d\\`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234`;\n\nconst formatsCache: Record = {};\nexport const defaultPhoneNumberFormat = /(\\d{1,3})(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?/;\n\nconst parsed = DATA\n .split('\\n')\n .map((str) => {\n const id = str.substr(0, 2);\n const flag = str.substr(2, 4);\n const code = `+${str.match(/\\d+/)![0]}`;\n const name = str.split(/\\d+/)[1];\n const format = str.match(/\\d+$/);\n const phoneFormat = getPhoneNumberFormat(format);\n\n return {\n id, flag, code, name, phoneFormat,\n };\n });\n\nfunction getPhoneNumberFormat(format: RegExpMatchArray | null) {\n if (!format) {\n return defaultPhoneNumberFormat;\n }\n\n const formatValue = format[0] as string;\n let phoneNumberFormat;\n\n if (!formatsCache[formatValue]) {\n const phoneNumberGroups = formatValue.split('').map(Number);\n phoneNumberFormat = phoneNumberGroups.reduce((result, count, i) => {\n return `${result}(\\\\d{1,${count}})${i > 0 ? '?' : ''}`;\n }, '');\n formatsCache[formatValue] = new RegExp(`${phoneNumberFormat}${'()?'.repeat(5 - phoneNumberGroups.length)}`);\n }\n\n return formatsCache[formatValue];\n}\n\nexport default parsed;\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\nimport countryList from '../../util/countries';\n\nexport type FormState = {\n streetLine1: string;\n streetLine2: string;\n city: string;\n state: string;\n countryIso2: string;\n postCode: string;\n fullName: string;\n email: string;\n phone: string;\n shipping: string;\n cardNumber: string;\n cardholder: string;\n expiry: string;\n cvv: string;\n billingCountry: string;\n billingZip: string;\n saveInfo: boolean;\n saveCredentials: boolean;\n formErrors: Record;\n};\n\nexport type FormActions = (\n 'changeAddress1' | 'changeAddress2' | 'changeCity' | 'changeState' | 'changeCountry' |\n 'changePostCode' | 'changeFullName' | 'changeEmail' | 'changePhone' | 'changeShipping' | 'updateUserInfo' |\n 'changeCardNumber' | 'changeCardholder' | 'changeExpiryDate' | 'changeCvvCode' | 'changeBillingCountry' |\n 'changeBillingZip' | 'changeSaveInfo' | 'changeSaveCredentials' | 'setFormErrors'\n);\nexport type FormEditDispatch = Dispatch;\n\nconst INITIAL_STATE: FormState = {\n streetLine1: '',\n streetLine2: '',\n city: '',\n state: '',\n countryIso2: '',\n postCode: '',\n fullName: '',\n email: '',\n phone: '',\n shipping: '',\n cardNumber: '',\n cardholder: '',\n expiry: '',\n cvv: '',\n billingCountry: '',\n billingZip: '',\n saveInfo: true,\n saveCredentials: false,\n formErrors: {},\n};\n\nconst reducer: StateReducer = (state, action) => {\n switch (action.type) {\n case 'changeAddress1':\n return {\n ...state,\n streetLine1: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine1: undefined,\n },\n };\n case 'changeAddress2':\n return {\n ...state,\n streetLine2: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine2: undefined,\n },\n };\n case 'changeCity':\n return {\n ...state,\n city: action.payload,\n formErrors: {\n ...state.formErrors,\n city: undefined,\n },\n };\n case 'changeState':\n return {\n ...state,\n state: action.payload,\n formErrors: {\n ...state.formErrors,\n state: undefined,\n },\n };\n case 'changeCountry':\n return {\n ...state,\n countryIso2: action.payload,\n billingCountry: getBillingCountry(action.payload),\n formErrors: {\n ...state.formErrors,\n countryIso2: undefined,\n },\n };\n case 'changePostCode':\n return {\n ...state,\n postCode: action.payload,\n formErrors: {\n ...state.formErrors,\n postCode: undefined,\n },\n };\n case 'changeFullName':\n return {\n ...state,\n fullName: action.payload,\n formErrors: {\n ...state.formErrors,\n fullName: undefined,\n },\n };\n case 'changeEmail':\n return {\n ...state,\n email: action.payload,\n formErrors: {\n ...state.formErrors,\n email: undefined,\n },\n };\n case 'changePhone':\n return {\n ...state,\n phone: action.payload,\n formErrors: {\n ...state.formErrors,\n phone: undefined,\n },\n };\n case 'changeShipping':\n return { ...state, shipping: action.payload };\n case 'changeCardNumber':\n return {\n ...state,\n cardNumber: action.payload,\n formErrors: {\n ...state.formErrors,\n cardNumber: undefined,\n },\n };\n case 'changeCardholder':\n return {\n ...state,\n cardholder: action.payload,\n formErrors: {\n ...state.formErrors,\n cardholder: undefined,\n },\n };\n case 'changeExpiryDate':\n return {\n ...state,\n expiry: action.payload,\n formErrors: {\n ...state.formErrors,\n expiry: undefined,\n },\n };\n case 'changeCvvCode':\n return {\n ...state,\n cvv: action.payload,\n formErrors: {\n ...state.formErrors,\n cvv: undefined,\n },\n };\n case 'changeBillingCountry':\n return {\n ...state,\n billingCountry: action.payload,\n formErrors: {\n ...state.formErrors,\n billingCountry: undefined,\n },\n };\n case 'changeBillingZip':\n return {\n ...state,\n billingZip: action.payload,\n formErrors: {\n ...state.formErrors,\n billingZip: undefined,\n },\n };\n case 'changeSaveInfo':\n return { ...state, saveInfo: action.payload };\n case 'changeSaveCredentials':\n return { ...state, saveCredentials: action.payload };\n case 'updateUserInfo':\n if (action.payload.countryIso2) {\n return {\n ...state,\n ...action.payload,\n billingCountry: getBillingCountry(action.payload.countryIso2),\n };\n }\n return { ...state, ...action.payload };\n case 'setFormErrors':\n return {\n ...state,\n formErrors: {\n ...state.formErrors,\n ...action.payload,\n },\n };\n default:\n return state;\n }\n};\n\nfunction getBillingCountry(countryCode: string) {\n const country = countryList.find(({ id }) => id === countryCode);\n return country ? country.name : '';\n}\n\nconst usePaymentReducer = () => {\n return useReducer(reducer, INITIAL_STATE);\n};\n\nexport default usePaymentReducer;\n","import { RefObject } from 'react';\n\nimport { IS_TOUCH_ENV } from '../util/environment';\nimport { fastRaf } from '../util/schedulers';\nimport { useEffect } from '../lib/teact/teact';\n\nconst DEFAULT_DURATION = 400;\n\nexport default function useFocusAfterAnimation(\n ref: RefObject, animationDuration = DEFAULT_DURATION,\n) {\n useEffect(() => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n setTimeout(() => {\n fastRaf(() => {\n if (ref.current) {\n ref.current.focus();\n }\n });\n }, animationDuration);\n }, [ref, animationDuration]);\n}\n","import { ChangeEvent, RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n id?: string;\n value?: string;\n label?: string;\n error?: string;\n ref?: RefObject;\n hasArrow?: boolean;\n placeholder?: string;\n onChange?: (e: ChangeEvent) => void;\n children: any;\n};\n\nconst Select: FC = (props) => {\n const {\n id,\n value,\n label,\n hasArrow,\n error,\n ref,\n placeholder,\n onChange,\n children,\n } = props;\n const labelText = error || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error && 'error',\n labelText && 'with-label',\n hasArrow && 'with-arrow',\n 'input-group',\n );\n\n return (\n
\n \n {children}\n \n {labelText && id && (\n \n )}\n
\n );\n};\n\nexport default memo(Select);\n","import React, {\n FC, useRef, useCallback, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Select from '../ui/Select';\nimport Checkbox from '../ui/Checkbox';\n\nimport './ShippingInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n needEmail: boolean;\n needPhone: boolean;\n needName: boolean;\n needAddress: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst ShippingInfo: FC = ({\n state,\n needEmail,\n needPhone,\n needName,\n needAddress,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const phoneRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.countryIso2) {\n selectCountryRef.current.value = state.countryIso2;\n }\n }, [state.countryIso2]);\n\n const lang = useLang();\n\n useFocusAfterAnimation(inputRef);\n\n const handleAddress1Change = useCallback((e) => {\n dispatch({ type: 'changeAddress1', payload: e.target.value });\n }, [dispatch]);\n\n const handleAddress2Change = useCallback((e) => {\n dispatch({ type: 'changeAddress2', payload: e.target.value });\n }, [dispatch]);\n\n const handleCityChange = useCallback((e) => {\n dispatch({ type: 'changeCity', payload: e.target.value });\n }, [dispatch]);\n\n const handleStateChange = useCallback((e) => {\n dispatch({ type: 'changeState', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handlePostCodeChange = useCallback((e) => {\n dispatch({ type: 'changePostCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleFullNameChange = useCallback((e) => {\n dispatch({ type: 'changeFullName', payload: e.target.value });\n }, [dispatch]);\n\n const handleEmailChange = useCallback((e) => {\n dispatch({ type: 'changeEmail', payload: e.target.value });\n }, [dispatch]);\n\n const handlePhoneChange = useCallback((e) => {\n let { value } = e.target;\n value = `+${value.replace(/\\D/g, '')}`;\n if (phoneRef.current) {\n phoneRef.current.value = value;\n }\n dispatch({ type: 'changePhone', payload: value });\n }, [dispatch]);\n\n const handleSaveInfoChange = useCallback((e) => {\n dispatch({ type: 'changeSaveInfo', payload: e.target.value });\n }, [dispatch]);\n\n const { formErrors } = state;\n return (\n
\n
\n {needAddress ? (\n
\n
{lang('PaymentShippingAddress')}
\n \n \n \n \n \n {countryList.map(({ name, id }) => (\n \n {name}\n \n ))}\n \n\n \n
\n ) : undefined}\n { needName || needEmail || needPhone ? (\n
{lang('PaymentShippingReceiver')}
\n ) : undefined }\n { needName && (\n \n ) }\n { needEmail && (\n \n ) }\n { needPhone && (\n \n ) }\n \n \n
\n );\n};\n\nexport default memo(ShippingInfo);\n","import React, {\n FC, useCallback, memo, useMemo, useEffect,\n} from '../../lib/teact/teact';\n\nimport { ShippingOption } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport RadioGroup from '../ui/RadioGroup';\n\nimport './Shipping.scss';\n\nexport type OwnProps = {\n state: FormState;\n shippingOptions: ShippingOption[];\n currency?: string;\n dispatch: FormEditDispatch;\n};\n\nconst Shipping: FC = ({\n state,\n shippingOptions,\n currency,\n dispatch,\n}) => {\n const lang = useLang();\n\n useEffect(() => {\n if (!shippingOptions || state.shipping) {\n return;\n }\n dispatch({ type: 'changeShipping', payload: shippingOptions[0].id });\n }, [shippingOptions, state.shipping, dispatch]);\n\n const handleShippingSelect = useCallback((value) => {\n dispatch({ type: 'changeShipping', payload: value });\n }, [dispatch]);\n\n const options = useMemo(() => (shippingOptions.map(({ id: value, title: label, amount }) => ({\n label,\n subLabel: formatCurrency(amount, currency, lang.code),\n value,\n }))), [shippingOptions, currency, lang.code]);\n\n return (\n
\n
\n

Select shipping method

\n \n \n
\n );\n};\n\nexport default memo(Shipping);\n","import React, {\n FC, memo,\n} from '../../lib/teact/teact';\n\nimport { LangCode, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport useLang from '../../hooks/useLang';\n\nimport './Checkout.scss';\n\nexport type OwnProps = {\n invoiceContent?: {\n title?: string;\n text?: string;\n photoUrl?: string;\n };\n checkoutInfo?: {\n paymentMethod?: string;\n paymentProvider?: string;\n shippingAddress?: string;\n name?: string;\n phone?: string;\n shippingMethod?: string;\n };\n prices?: Price[];\n totalPrice?: number;\n shippingPrices?: Price[];\n currency?: string;\n};\n\nconst Checkout: FC = ({\n invoiceContent,\n prices,\n shippingPrices,\n checkoutInfo,\n currency,\n totalPrice,\n}) => {\n const lang = useLang();\n\n const { photoUrl, title, text } = invoiceContent || {};\n const {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n } = (checkoutInfo || {});\n\n return (\n
\n
\n {photoUrl && \"\"}\n
\n
{title}
\n

{text}

\n
\n
\n
\n { prices && prices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { shippingPrices && shippingPrices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { totalPrice !== undefined && (\n renderPaymentItem(lang.code, lang('Checkout.TotalAmount'), totalPrice, currency, true)\n ) }\n
\n
\n {paymentMethod && renderCheckoutItem('icon-card', paymentMethod, 'Payment method')}\n {paymentProvider && renderCheckoutItem('stripe-provider', paymentProvider, 'Payment provider')}\n {shippingAddress && renderCheckoutItem('icon-location', shippingAddress, 'Shipping address')}\n {name && renderCheckoutItem('icon-user', name, 'Name')}\n {phone && renderCheckoutItem('icon-phone', phone, 'Phone number')}\n {shippingMethod && renderCheckoutItem('icon-truck', shippingMethod, 'Shipping method')}\n
\n
\n );\n};\n\nfunction renderPaymentItem(\n langCode: LangCode | undefined, title: string, value: number, currency?: string, main = false,\n) {\n return (\n
\n
\n { title }\n
\n
\n {formatCurrency(value, currency, langCode)}\n
\n
\n );\n}\n\nfunction renderCheckoutItem(icon: string, title: string, data: string) {\n return (\n
\n \n
\n
\n { title }\n
\n

\n { data }\n

\n
\n
\n );\n}\n\nexport default memo(Checkout);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { formatCardExpiry } from '../middle/helpers/inputFormatters';\n\nimport InputText from '../ui/InputText';\n\nconst MAX_FIELD_LENGTH = 5;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst ExpiryInput : FC = ({ value, error, onChange }) => {\n // eslint-disable-next-line no-null/no-null\n const expiryInputRef = useRef(null);\n\n const handleKeyDown = useCallback((e) => {\n if (e.key === 'Backspace' && value.charAt(value.length - 1) === '/') {\n const newValue = value.slice(0, value.length - 1);\n if (expiryInputRef.current) {\n expiryInputRef.current.value = newValue;\n }\n }\n }, [value]);\n\n const handleChange = useCallback((e) => {\n onChange(formatCardExpiry(e.target.value));\n }, [onChange]);\n\n return (\n \n );\n};\n\nexport default memo(ExpiryInput);\n","export function formatCardExpiry(input: string) {\n input = input.replace(/[^\\d]/g, '').slice(0, 4);\n const parts = input.match(/.{1,2}/g);\n if (parts?.[0] && Number(parts[0]) > 12) {\n parts[0] = '12';\n }\n if (parts?.[0] && parts[0].length === 2 && !parts[1]) {\n parts[1] = '';\n }\n return parts ? parts.join('/') : '';\n}\n\nexport function formatCardNumber(input: string) {\n input = input.replace(/[^\\d]/g, '');\n const parts = input.match(/.{1,4}/g);\n return parts ? parts.join(' ') : '';\n}\n","import React, {\n FC, memo, useCallback, useState, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport { formatCardNumber } from '../middle/helpers/inputFormatters';\nimport { detectCardType, CardType } from '../common/helpers/detectCardType';\n\nimport InputText from '../ui/InputText';\n\nimport './CardInput.scss';\n\nimport mastercardIconPath from '../../assets/mastercard.svg';\nimport visaIconPath from '../../assets/visa.svg';\n\nconst CARD_NUMBER_MAX_LENGTH = 23;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst CardInput : FC = ({ value, error, onChange }) => {\n // eslint-disable-next-line no-null/no-null\n const cardNumberRef = useRef(null);\n\n useFocusAfterAnimation(cardNumberRef);\n\n const [cardType, setCardType] = useState(CardType.Default);\n useEffect(() => {\n const newCardType = detectCardType(value);\n setCardType(newCardType);\n // eslint-disable-next-line\n }, []);\n\n const handleChange = useCallback((e) => {\n const newValue = formatCardNumber(e.target.value);\n const newCardType = detectCardType(e.target.value);\n setCardType(newCardType);\n onChange(newValue);\n if (cardNumberRef.current) {\n cardNumberRef.current.value = newValue;\n }\n }, [onChange, cardNumberRef]);\n\n const cardIcon = getCardIcon(cardType);\n\n return (\n
\n {cardIcon}\n \n
\n );\n};\n\nexport default memo(CardInput);\n\nfunction getCardIcon(cardType: CardType) {\n switch (cardType) {\n case CardType.Mastercard:\n return \"\";\n case CardType.Visa:\n return \"\";\n default:\n return undefined;\n }\n}\n","import React, {\n FC, useCallback, memo, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Checkbox from '../ui/Checkbox';\nimport Select from '../ui/Select';\nimport ExpiryInput from './ExpiryInput';\nimport CardInput from './CardInput';\n\nimport './PaymentInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n canSaveCredentials: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst PaymentInfo: FC = ({\n state,\n canSaveCredentials,\n needCardholderName,\n needCountry,\n needZip,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.billingCountry) {\n selectCountryRef.current.value = state.billingCountry;\n }\n }, [state.billingCountry]);\n\n const handleCardNumberChange = useCallback((value) => {\n dispatch({ type: 'changeCardNumber', payload: value });\n }, [dispatch]);\n\n const handleCardholderChange = useCallback((e) => {\n dispatch({ type: 'changeCardholder', payload: e.target.value.toUpperCase() });\n }, [dispatch]);\n\n const handleExpiryChange = useCallback((value) => {\n dispatch({ type: 'changeExpiryDate', payload: value });\n }, [dispatch]);\n\n const handleCvvChange = useCallback((e) => {\n dispatch({ type: 'changeCvvCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeBillingCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handleBillingPostCodeChange = useCallback((e) => {\n dispatch({ type: 'changeBillingZip', payload: e.target.value });\n }, [dispatch]);\n\n const handleChangeSaveCredentials = useCallback((e) => {\n dispatch({ type: 'changeSaveCredentials', payload: e.target.value });\n }, [dispatch]);\n\n const lang = useLang();\n\n const { formErrors = {} } = state;\n\n return (\n
\n
\n
{lang('PaymentCardTitle')}
\n \n { needCardholderName && (\n \n )}\n
\n \n \n
\n { needCountry || needZip ? (\n
{lang('PaymentBillingAddress')}
\n ) : undefined }\n { needCountry && (\n \n {\n countryList.map(({ name }) => (\n \n {name}\n \n ))\n }\n \n ) }\n { needZip && (\n \n )}\n { canSaveCredentials && (\n \n ) }\n \n
\n );\n};\n\nexport default memo(PaymentInfo);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\nimport { PaymentStep, ShippingOption, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { detectCardTypeText } from '../common/helpers/detectCardType';\nimport usePaymentReducer, { FormState } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport ShippingInfo from './ShippingInfo';\nimport Shipping from './Shipping';\nimport Checkout from './Checkout';\nimport PaymentInfo from './PaymentInfo';\nimport Button from '../ui/Button';\nimport Modal from '../ui/Modal';\nimport Transition from '../ui/Transition';\nimport Spinner from '../ui/Spinner';\n\nimport './PaymentModal.scss';\n\nconst DEFAULT_PROVIDER = 'stripe';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n nameRequested?: boolean;\n shippingAddressRequested?: boolean;\n phoneRequested?: boolean;\n emailRequested?: boolean;\n flexible?: boolean;\n phoneToProvider?: boolean;\n emailToProvider?: boolean;\n currency?: string;\n prices?: Price[];\n isProviderError: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n};\n\ntype GlobalStateProps = Pick;\n\nconst Invoice: FC = ({\n isOpen,\n onClose,\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n phoneToProvider,\n emailToProvider,\n currency,\n passwordMissing,\n isProviderError,\n invoiceContent,\n nativeProvider,\n prices,\n needCardholderName,\n needCountry,\n needZip,\n error,\n}) => {\n const {\n validateRequestedInfo,\n sendPaymentForm,\n setPaymentStep,\n sendCredentialsInfo,\n clearPaymentError,\n } = getDispatch();\n\n const [paymentState, paymentDispatch] = usePaymentReducer();\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n\n useEffect(() => {\n if (step || error) {\n setIsLoading(false);\n }\n }, [step, error]);\n\n useEffect(() => {\n if (error?.field) {\n paymentDispatch({\n type: 'setFormErrors',\n payload: {\n [error.field]: error.message,\n },\n });\n }\n }, [error, paymentDispatch]);\n\n useEffect(() => {\n if (savedInfo) {\n const {\n name: fullName, phone, email, shippingAddress,\n } = savedInfo;\n paymentDispatch({\n type: 'updateUserInfo',\n payload: {\n fullName,\n phone: phone && phone.charAt(0) !== '+'\n ? `+${phone}`\n : phone,\n email,\n ...(shippingAddress || {}),\n },\n });\n }\n }, [savedInfo, paymentDispatch]);\n\n const handleErrorModalClose = useCallback(() => {\n clearPaymentError();\n }, [clearPaymentError]);\n\n const totalPrice = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return 0;\n }\n\n return getTotalPrice(prices, shippingOptions, paymentState.shipping);\n }, [step, paymentState.shipping, prices, shippingOptions]);\n\n const checkoutInfo = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return undefined;\n }\n return getCheckoutInfo(paymentState, shippingOptions, nativeProvider || '');\n }, [step, paymentState, shippingOptions, nativeProvider]);\n\n function renderError() {\n if (!error) {\n return undefined;\n }\n return (\n \n

{error.description || 'Error'}

\n

{error.description || 'Error'}

\n \n {lang('OK')}\n \n
\n );\n }\n\n function renderModalContent(currentStep: PaymentStep) {\n switch (currentStep) {\n case PaymentStep.ShippingInfo:\n return (\n \n );\n case PaymentStep.Shipping:\n return (\n \n );\n case PaymentStep.PaymentInfo:\n return (\n \n );\n case PaymentStep.Checkout:\n return (\n \n );\n default:\n return undefined;\n }\n }\n\n const validateRequest = useCallback(() => {\n const { saveInfo } = paymentState;\n const requestInfo = getRequestInfo(paymentState);\n validateRequestedInfo({ requestInfo, saveInfo });\n }, [validateRequestedInfo, paymentState]);\n\n const sendCredentials = useCallback(() => {\n const credentials = getCredentials(paymentState);\n sendCredentialsInfo({\n credentials,\n });\n }, [sendCredentialsInfo, paymentState]);\n\n const sendForm = useCallback(() => {\n sendPaymentForm({\n shippingOptionId: paymentState.shipping,\n saveCredentials: paymentState.saveCredentials,\n });\n }, [sendPaymentForm, paymentState]);\n\n const setStep = useCallback((nextStep) => {\n setPaymentStep({ step: nextStep });\n }, [setPaymentStep]);\n\n const handleButtonClick = useCallback(() => {\n setIsLoading(true);\n switch (step) {\n case PaymentStep.ShippingInfo:\n return validateRequest();\n case PaymentStep.Shipping:\n return setStep(PaymentStep.PaymentInfo);\n case PaymentStep.PaymentInfo:\n return sendCredentials();\n case PaymentStep.Checkout:\n return sendForm();\n default:\n return () => {\n };\n }\n }, [step, validateRequest, setStep, sendCredentials, sendForm]);\n\n const modalHeader = useMemo(() => {\n switch (step) {\n case PaymentStep.ShippingInfo:\n return lang('PaymentShippingInfo');\n case PaymentStep.Shipping:\n return lang('PaymentShippingMethod');\n case PaymentStep.PaymentInfo:\n return lang('PaymentCardInfo');\n case PaymentStep.Checkout:\n return lang('PaymentCheckout');\n default:\n return '';\n }\n }, [step, lang]);\n\n const buttonText = useMemo(() => {\n switch (step) {\n case PaymentStep.Checkout:\n return lang('Checkout.PayPrice', formatCurrency(totalPrice, currency, lang.code));\n default:\n return lang('Next');\n }\n }, [step, lang, currency, totalPrice]);\n\n if (isProviderError) {\n return (\n \n

\n Sorry, Telegram WebZ doesn't support payments with this provider yet.
\n Please use one of our mobile apps to do this.\n

\n \n {lang('OK')}\n \n \n );\n }\n\n return (\n \n
\n \n \n \n

{modalHeader}

\n
\n {step !== undefined ? (\n \n {() => (\n
\n {renderModalContent(step)}\n
\n )}\n
\n ) : (\n
\n \n
\n )}\n
\n \n {buttonText}\n \n
\n {error && !error.field && renderError()}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps & GlobalStateProps => {\n const {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n invoice,\n invoiceContent,\n nativeProvider,\n nativeParams,\n passwordMissing,\n error,\n } = global.payment;\n\n const isProviderError = Boolean(invoice && (!nativeProvider || nativeProvider !== DEFAULT_PROVIDER));\n const { needCardholderName, needCountry, needZip } = (nativeParams || {});\n const {\n nameRequested,\n phoneRequested,\n emailRequested,\n shippingAddressRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n } = (invoice || {});\n\n return {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nativeProvider,\n passwordMissing,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n isProviderError,\n invoiceContent,\n needCardholderName,\n needCountry,\n needZip,\n error,\n };\n },\n)(Invoice));\n\nfunction findShippingOption(shippingOptions: ShippingOption[], optionId: string) {\n return shippingOptions.find(({ id }) => id === optionId);\n}\n\nfunction getShippingPrices(shippingOptions: ShippingOption[], shippingOption: string) {\n const option = findShippingOption(shippingOptions, shippingOption);\n return option?.prices;\n}\n\nfunction getTotalPrice(prices: Price[] = [], shippingOptions: ShippingOption[] | undefined, shippingOption: string) {\n const shippingPrices = shippingOptions\n ? getShippingPrices(shippingOptions, shippingOption)\n : [];\n let total = 0;\n const totalPrices = prices.concat(shippingPrices || []);\n total = totalPrices.reduce((acc, cur) => {\n return acc + cur.amount;\n }, total);\n return total;\n}\n\nfunction getCheckoutInfo(state: FormState, shippingOptions: ShippingOption[] | undefined, paymentProvider: string) {\n const cardTypeText = detectCardTypeText(state.cardNumber);\n const paymentMethod = `${cardTypeText} *${state.cardNumber.slice(-4)}`;\n const shippingAddress = state.streetLine1\n ? `${state.streetLine1}, ${state.city}, ${state.countryIso2}`\n : undefined;\n const { phone, fullName: name } = state;\n const shippingOption = shippingOptions ? findShippingOption(shippingOptions, state.shipping) : undefined;\n const shippingMethod = shippingOption?.title;\n return {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n\nfunction getRequestInfo(paymentState: FormState) {\n const {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n fullName: name,\n phone,\n email,\n } = paymentState;\n\n const shippingAddress = {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n };\n\n return {\n name,\n phone,\n email,\n shippingAddress,\n };\n}\n\nfunction getCredentials(paymentState: FormState) {\n const {\n cardNumber, cardholder, expiry, cvv, billingCountry, billingZip,\n } = paymentState;\n const [expiryMonth, expiryYear] = expiry.split('/');\n const data = {\n cardNumber,\n cardholder,\n expiryMonth,\n expiryYear,\n cvv,\n country: billingCountry,\n zip: billingZip,\n };\n\n return {\n data,\n };\n}\n","import React, {\n FC, memo, useMemo,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { Price } from '../../types';\nimport { ApiShippingAddress } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Checkout from './Checkout';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './PaymentModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n prices?: Price[];\n shippingPrices: any;\n totalAmount?: number;\n currency?: string;\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n photoUrl?: string;\n text?: string;\n title?: string;\n credentialsTitle?: string;\n shippingMethod?: string;\n};\n\nconst ReceiptModal: FC = ({\n isOpen,\n onClose,\n prices,\n shippingPrices,\n totalAmount,\n currency,\n info,\n photoUrl,\n text,\n title,\n credentialsTitle,\n shippingMethod,\n}) => {\n const lang = useLang();\n const checkoutInfo = useMemo(() => {\n return getCheckoutInfo(credentialsTitle, info, shippingMethod);\n }, [info, shippingMethod, credentialsTitle]);\n\n return (\n \n
\n
\n \n \n \n

{lang('PaymentReceipt')}

\n
\n
\n \n
\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { receipt } = global.payment;\n const {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n } = (receipt || {});\n\n return {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n };\n },\n)(ReceiptModal));\n\nfunction getCheckoutInfo(paymentMethod?: string,\n info?:\n { phone?: string;\n name?: string;\n shippingAddress?: ApiShippingAddress;\n },\n shippingMethod?: string) {\n if (!info) {\n return { paymentMethod };\n }\n const { shippingAddress } = info;\n const fullAddress = shippingAddress?.streetLine1\n ? `${shippingAddress.streetLine1}, ${shippingAddress.city}, ${shippingAddress.countryIso2}`\n : undefined;\n const { phone, name } = info;\n return {\n paymentMethod,\n paymentProvider: 'Stripe',\n shippingAddress: fullAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n \n \n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import React, {\n FC, useEffect, useState, memo,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n async function handleCropClick() {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n function handleAvatarCrop(croppedImg: File) {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }\n\n function handleModalClose() {\n setSelectedFile(undefined);\n }\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n"],"names":["createGhost","source","origin","ghost","document","createElement","classList","add","img","Image","draggable","oncontextmenu","stopEvent","src","HTMLVideoElement","poster","appendChild","MediaViewerOrigin","profileInfo","querySelector","cloneNode","isMessageImageFullyVisible","container","imageEl","messageListElement","imgOffsetTop","offsetTop","closest","id","includes","parentElement","scrollTop","offsetHeight","applyStyles","element","styles","Object","assign","style","getNodes","message","containerSelector","mediaSelector","mediaEls","querySelectorAll","mediaEl","length","applyShape","firstChild","objectFit","memo","withGlobal","global","isDownloading","selectIsDownloading","isProtected","selectIsMessageProtected","mediaData","isVideo","isZoomed","fileName","isAvatar","onCloseMediaViewer","onForward","onZoomToggle","downloadMessageMedia","cancelMessageMediaDownload","getDispatch","loadProgress","downloadProgress","useMediaWithLoadProgress","getMessageMediaHash","handleDownloadClick","useCallback","lang","useLang","MenuButton","useMemo","onTrigger","isOpen","Button","round","size","color","className","undefined","onClick","ariaLabel","IS_SINGLE_COLUMN_LAYOUT","DropdownMenu","trigger","positionX","MenuItem","icon","Math","href","download","ProgressSpinner","progress","noCross","renderDownloadButton","text","isHidden","isForVideo","isMultiline","setIsMultiline","useState","useEffect","footerContent","checkIsMultiline","height","clientHeight","REM","handleResize","throttle","window","addEventListener","removeEventListener","classNames","buildClassName","e","stopPropagation","dir","prop","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","units","bytes","number","floor","log","toFixed","bufferedProgress","currentTime","duration","fileSize","isForceVisible","isForceMobileVersion","isPlayed","isFullscreenSupported","isFullscreen","onChangeFullscreen","onPlayPause","onSeek","isVisible","setVisibility","seekerRef","useRef","isSeeking","timeout","setTimeout","clearTimeout","body","remove","handleSeek","current","width","left","getBoundingClientRect","clientX","MouseEvent","targetTouches","max","min","handleStartSeek","handleStopSeek","captureEvents","onCapture","onRelease","onDrag","isActive","percentagePlayed","percentageBuffered","ref","renderSeekLine","ripple","formatMediaDuration","renderTime","loadedPercent","totalSize","formatFileSize","url","isGif","posterData","posterSize","isMediaViewerOpen","noPlay","onClose","videoRef","setIsPlayed","IS_TOUCH_ENV","IS_IOS","setCurrentTime","isControlsVisible","setIsControlsVisible","setFullscreen","exitFullscreen","elRef","setIsFullscreen","Boolean","useLayoutEffect","listener","listenerEnter","listenerExit","video","PLATFORM_ENV","requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","mozRequestFullScreen","mozCancelFullScreen","webkitCancelFullScreen","webkitExitFullscreen","useFullscreenStatus","isBuffered","bufferingHandlers","useBuffering","shouldRender","shouldRenderSpinner","transitionClassNames","spinnerClassNames","useShowTransition","shouldRenderPlayButton","playButtonClassNames","pause","safePlay","togglePlayState","useVideoCleanup","handleMouseOver","handleMouseOut","handleTimeUpdate","currentTarget","handleEnded","handleFullscreenChange","position","toggleControls","togglePayingStateBySpace","key","preventDefault","wrapperStyle","videoStyle","onMouseOver","onMouseOut","autoPlay","playsInline","loop","muted","onPlay","onEnded","onDoubleClick","onTimeUpdate","join","square","ownProps","chatId","threadId","messageId","avatarOwnerId","profilePhotoIndex","selectChatMessage","senderId","avatarOwner","selectUser","selectChat","selectScheduledMessage","props","animationLevel","onFooterClick","isFooterHidden","photo","getMessagePhoto","getMessageVideo","webPagePhoto","getMessageWebPagePhoto","webPageVideo","getMessageWebPageVideo","isDocumentPhoto","isMessageDocumentPhoto","isDocumentVideo","isMessageDocumentVideo","isPhoto","isFromSharedMedia","isFromSearch","isGhostAnimation","getMediaHash","isFull","photos","getChatAvatarHash","pictogramBlobUrl","useMedia","ApiMediaFormat","previewMediaHash","previewBlobUrl","fullMediaBlobUrl","getMessageMediaFormat","localBlobUrl","blobUrl","bestImageData","thumbDataUri","useBlurSync","getMessageMediaThumbDataUri","videoSize","getMessageFileSize","dimensions","getMessageDocument","mediaSize","getPhotoFullDimensions","getVideoDimensions","AVATAR_FULL_DIMENSIONS","renderPhoto","calculateMediaViewerDimensions","textParts","renderMessageText","hasFooter","onContextMenu","imageSize","canDrag","Spinner","renderVideoPreview","alt","ANIMATION_DURATION","cancelAnimation","SwipeDirection","getMessageId","selectMessage","rest","containerRef","activeSlideRef","transformRef","x","y","scale","swipeDirectionRef","isActiveRef","activeMessageId","setActiveMessageId","forceUpdate","useForceUpdate","setIsFooterHidden","setTransform","value","setIsActive","debounceSetMessage","useDebounce","debounceSwipeDirection","debounceActive","handleToggleFooterVisibility","pageX","innerWidth","callback","delay","savedCallback","useTimeout","lastTransform","lastDragOffset","lastZoomCenter","panDelta","initialContentRect","content","lastGestureTime","Date","now","setLastGestureTime","debounce","changeSlide","direction","mId","offset","animateNumber","from","to","timing","timingFunctions","onUpdate","isNotPassive","excludedClosestSelector","arePropsShallowEqual","event","captureEvent","dragOffsetX","dragOffsetY","touches","IOS_SCREEN_EDGE_THRESHOLD","absOffsetX","abs","absOffsetY","h","Vertical","Horizontal","onZoom","zoomFactor","initialCenterX","initialCenterY","currentCenterX","currentCenterY","MAX_ZOOM","scaleFactor","scaledCenterX","scaledCenterY","scaleOffsetX","scaleOffsetY","centerX","centerY","absX","absY","boundaries","s1","x1","y1","k","Vx","Vy","minOffsetX","maxOffsetX","right","innerHeight","minOffsetY","top","maxOffsetY","bottom","dirX","nextMessageId","previousMessageId","offsetX","offsetY","getAnimationStyle","INITIAL_MATRIX","SCALE_VALUES","ZOOM_SAFE_AREA","children","noWrap","canPan","zoomLevel","panDeltaX","panDeltaY","onPan","tunedZoomLevel","isDragging","setIsDragging","dragData","setDragData","dx","dy","matrixData","setMatrixData","panWrapperRef","panContainerRef","newZoomLevel","newPandx","newPandy","newMatrixData","areSortedArraysEqual","oldScale","wrapper","image","wrapperRect","imageRect","newImgWidth","newImgHeight","newImgX","newImgY","calculateSafeZoneOnZoom","transform","toString","onMouseDown","newDragData","pageY","onMouseUp","onMouseMove","deltaX","deltaY","getNewMatrixData","sender","isUserId","selectSender","closeMediaViewer","focusMessage","toggleChatInfo","handleFocusMessage","forceSyncOnIOs","senderTitle","getSenderTitle","Avatar","user","chat","renderText","formatMediaDateTime","date","Transition","isShown","onChangeZoom","prevIsShown","usePrevious","inputRef","setZoomLevel","disabled","step","type","onChange","Number","target","mediaViewer","settings","byKey","chatMessages","collectionIds","selectScheduledMessages","selectChatMessages","selectOutlyingIds","selectListedIds","currentSearch","selectCurrentMediaSearch","foundIds","resultsByType","media","openMediaViewer","openForwardMenu","singleMessageId","messageIds","getChatMediaMessageIds","selectedMediaMessageIndex","indexOf","isFirst","isLast","animationKey","prevSenderId","slideAnimation","headerAnimation","canPanZoomWrap","setCanPanZoomWrap","setIsZoomed","setPanDelta","getMessageFileName","toggle","mql","matchMedia","MEDIA_VIEWER_MEDIA_QUERY","addListener","removeListener","prevMessage","prevOrigin","prevAvatarOwner","prevBestImageData","dispatchHeavyAnimationEvent","ANIMATION_END_DELAY","fromImage","windowWidth","windowSize","availableWidth","availableHeight","getMediaViewerAvailableDimensions","toWidth","toHeight","calculateDimensions","toLeft","toTop","topOffsetRem","matches","getTopOffset","fromTop","fromLeft","fromWidth","fromHeight","uncovered","realWidth","realHeight","srcWidth","srcHeight","uncover","fromTranslateX","fromTranslateY","fromScaleX","fromScaleY","requestAnimationFrame","clearShape","contains","removeChild","animateOpening","toImage","getElementById","targetTop","el","display","rect","windowHeight","isElementInViewport","shouldFadeOut","existingGhost","getElementsByClassName","transition","transformOrigin","opacity","animateClosing","timer","closeZoom","handleZoomToggle","handleZoomValue","level","canCloseZoom","close","handleFooterClick","handleForward","fromChatId","forceOnHeavyAnimation","captureEscKeyListener","stopCurrentAudio","fromId","index","handlePan","renderSenderInfo","useHistoryBack","handleKeyDown","shouldCloseOnVideo","ShowTransition","isRtl","activeKey","name","currentUserId","chatOrUserIds","filterRef","filter","filterPlaceholder","loadMore","onFilterChange","onSelectChatOrUser","onCloseAnimationEnd","viewportIds","getMore","useInfiniteScroll","resetFilter","useInputFocusOnOpen","handleFilterChange","useKeyboardListNavigation","modalHeader","InputText","onKeyDown","placeholder","viewportOffset","Modal","header","InfiniteScroll","items","onLoadMore","withAbsolutePositioning","maxHeight","CHAT_HEIGHT_PX","map","i","ListItem","PrivateChatInfo","status","userId","GroupChatInfo","Loading","chats","byId","chatsById","listIds","orderedPinnedIds","activeListIds","active","archivedListIds","archived","pinnedIds","contactIds","contactList","userIds","setForwardChatId","exitForwardMode","setFilter","markIsShown","unmarkIsShown","useFlag","chatAndContactIds","priorityIds","unique","chatIds","getCanPostInChat","MAIN_THREAD_ID","usersById","getGlobal","users","sortChatIds","filterChatsByName","filterUsersByName","handleSelectUser","renderingChatAndContactIds","useCurrentOrPrev","getErrorHeader","error","isSlowMode","hasErrorKey","pick","dialogs","dismissDialog","acceptInviteConfirmation","sendMessage","showNotification","isModalOpen","openModal","closeModal","dialog","contactRequest","invite","hash","title","about","participantsCount","isChannel","isRequestNeeded","participantsText","joinText","requestToJoinText","renderInviteHeader","isText","renderInvite","contact","getReadableErrorText","notifications","dismissNotification","localId","Notification","onDismiss","toggleSafeLinkModal","handleOpen","open","ensureProtocol","handleDismiss","renderingUrl","ConfirmDialog","confirmLabel","confirmHandler","MAX_SAFE_DATE","WEEKDAY_LETTERS","isDisabledDay","year","month","day","minDate","maxDate","selectedDay","fixedMinDate","getDayStart","fixedMaxDate","formatInputTime","String","padStart","formatDay","selectedAt","minAt","maxAt","isFutureMode","isPastMode","withTimePicker","submitButtonLabel","secondButtonLabel","onSubmit","onSecondButtonClick","passedSelectedDate","prevIsOpen","isTimeInputFocused","markTimeInputAsFocused","unmarkTimeInputAsFocused","selectedDate","setSelectedDate","currentMonthAndYear","setCurrentMonthAndYear","getFullYear","getMonth","selectedHours","setSelectedHours","getHours","selectedMinutes","setSelectedMinutes","getMinutes","getDate","currentYear","currentMonth","getTime","newSelectedDate","shouldDisableNextMonth","shouldDisablePrevMonth","prevMonthGrid","currentMonthGrid","nextMonthGrid","setDate","setMonth","setFullYear","firstDay","getDay","totalDaysInPrevMonth","push","gridDate","lastRowDaysCount","buildCalendarGrid","submitLabel","formatDateToString","code","formatTime","formatSubmitLabel","handleChangeHours","replace","hours","setHours","hoursStr","handleChangeMinutes","minutes","setMinutes","minutesStr","d","dateCopy","role","tabIndex","handleDateSelect","inputMode","onFocus","onBlur","historyCalendarSelectedAt","searchMessagesByDate","closeHistoryCalendar","handleJumpToDate","timestamp","valueOf","isSchedule","selectCurrentMessageList","canDeleteForAll","selectAllowedMessageActions","contactName","getUserFirstOrLastName","getPrivateChatUserId","willDeleteForCurrentUserOnly","isChatBasicGroup","willDeleteForAll","isChatSuperGroup","album","deleteMessages","deleteScheduledMessages","handleDeleteMessageForAll","messages","shouldDeleteForAll","handleDeleteMessageForSelf","onEnter","isPrivateChat","isChatWithSelf","selectIsChatWithSelf","isChatChannel","isGroup","isSuperGroup","canPinForAll","pinMessage","handlePinMessageForAll","isUnpin","handlePinMessage","isOneSide","isSilent","pinnedMessagesCount","onUnpin","selectedMessageIds","selectedMessages","selectCanDeleteSelectedMessages","selectCurrentChat","exitMessageSelectMode","reportMessages","selectedReason","setSelectedReason","description","setDescription","handleReport","reason","handleSelectReason","handleDescriptionChange","REPORT_OPTIONS","label","RadioGroup","options","selected","messageListType","canDelete","canReport","selectCanReportSelectedMessages","canDownload","selectCanDownloadSelectedMessages","hasProtectedMessage","selectHasProtectedMessage","selectedMessagesCount","selectSelectedMessagesCount","canDeleteMessages","canReportMessages","canDownloadMessages","canPost","openForwardMenuForSelectedMessages","downloadSelectedMessages","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isReportModalOpen","openReportModal","closeReportModal","captureKeyboardListeners","onBackspace","onDelete","onEsc","handleDownload","prevSelectedMessagesCount","renderingSelectedMessagesCount","formattedMessagesCount","renderButton","destructive","seenByModal","memberIds","seenByUserIds","openChat","closeSeenByModal","handleClick","renderingMemberIds","noStatusOrTyping","reactorModal","reactions","reactors","loadReactors","closeReactorListModal","isClosing","startClosing","stopClosing","chosenTab","setChosenTab","canShowFilters","count","results","chatIdRef","handleCloseAnimationEnd","handleClose","handleLoadMore","allReactions","l","reaction","concat","nextOffset","LoadMoreDirection","formatIntegerCompact","find","ReactionStaticEmoji","fullName","getUserFullName","emojiInteraction","animatedEffect","selectAnimatedEmojiEffect","effectAnimationId","localEffectAnimation","keys","ANIMATED_STICKERS_PATHS","isReversed","stopActiveEmojiInteraction","isHiding","startHiding","isPlaying","startPlaying","stop","dispatchHeavyAnimationStop","effectAnimationData","localEffectAnimationData","setLocalEffectAnimationData","getAnimationData","then","data","startSize","AnimatedSticker","animationData","play","quality","IS_ANDROID","noLoop","onLoad","onSelect","buttonRef","activeElement","privateChatUserId","isPinned","selectIsChatPinned","isMuted","selectIsChatMuted","selectNotifySettings","selectNotifyExceptions","canChangeFolder","chatFolders","orderedIds","withUsername","isChatFolderModalOpen","openChatFolderModal","closeChatFolderModal","contextActions","useChatContextActions","handleDelete","handleChatFolderChange","useSelectWithEnter","avatarSize","DeleteChatModal","runThrottled","cb","topUserIds","topPeers","recentlyFoundChatIds","globalSearch","onReset","loadTopUsers","loadContactList","addRecentlyFoundChatId","clearRecentlyFoundChats","topUsersRef","useHorizontalScroll","shouldReplaceHistory","lastSyncTime","privateChatUser","searchQuery","mediaThumbnail","mediaBlobUrl","isRoundVideo","getMessageRoundVideo","isSavedMessages","isSelf","getChatTitle","isVerified","VerifiedIcon","Link","formatPastTimeShort","renderMessageSummary","renderSummary","searchDate","suggestions","match","suggestion","currentDate","latestYear","getSuggestionsFromDate","localContactIds","fetchingStatus","globalResults","localResults","globalChatIds","globalUserIds","localChatIds","localUserIds","byChatId","globalMessagesByChatId","dateSearchQuery","onSearchDateSelect","searchMessagesGlobal","setGlobalSearchChatId","shouldShowMoreLocal","setShouldShowMoreLocal","shouldShowMoreGlobal","setShouldShowMoreGlobal","query","handleChatClick","handlePickerItemClick","startsWith","MEMO_EMPTY_ARRAY","contactIdsWithMe","foundContactIds","foundMessages","split","sort","a","b","handleClickShowMoreLocal","handleClickShowMoreGlobal","nothingFound","noScrollRestoreOnTop","noFastList","NothingFound","PickerSelectedItem","chatOrUserId","clickArg","createMapStateToProps","currentType","isVoice","activeDownloads","theme","selectTheme","isLoading","searchChatId","isChatProtected","CURRENT_TYPE","observe","observeIntersectionForMedia","useIntersectionObserver","rootRef","throttleMs","handleSelectMedia","canRenderContents","useAsyncRendering","SLIDE_TRANSITION_DURATION","isMediaGrid","isMessageList","itemSelector","Media","idPrefix","observeIntersection","handleMessageFocus","shouldDrawDateDivider","toYearMonth","formatMonthAndYear","WebLink","getSenderName","onMessageClick","Document","withDate","datetime","smaller","onDateClick","openAudioPlayer","handlePlayAudio","Audio","AudioOrigin","TABS","GlobalSearchContent","CHAT_TABS","slice","TRANSITION_RENDER_COUNT","currentContent","setGlobalSearchContent","setGlobalSearchDate","activeTab","setActiveTab","parseDateString","handleSwitchTab","tab","handleSearchDateSelect","TabList","tabs","onSwitchTab","renderCount","INITIAL_STATE","currentPassword","password","hint","email","twoFaReducer","state","action","payload","currentScreen","editedFolderId","onSaveFilter","onScreenSelect","signOut","deleteChatFolder","isSignOutDialogOpen","setIsSignOutDialogOpen","isDeleteFolderDialogOpen","setIsDeleteFolderDialogOpen","openSignOutConfirmation","closeSignOutConfirmation","openDeleteFolderConfirmation","closeDeleteFolderConfirmation","handleSignOutMessage","handleDeleteFolderMessage","SettingsMenuButton","SettingsScreens","renderHeaderContent","confirmIsDestructive","currentUser","loadProfilePhotos","profileId","ProfileInfo","forceShowSelf","ChatExtra","LINK_PREFIX","LINK_PREFIX_REGEX","USERNAME_REGEX","runDebouncedForCheckUsername","currentUsername","asLink","isUsernameAvailable","checkUsername","username","setUsername","langPrefix","usernameSuccess","usernameError","test","handleUsernameChange","newUsername","trim","isValid","isUsernameValid","success","readOnly","ERROR_FIRST_NAME_MISSING","ERROR_BIO_TOO_LONG","profileEdit","firstName","currentFirstName","lastName","currentLastName","fullInfo","bio","currentBio","currentAvatarHash","loadCurrentUser","updateProfile","isUsernameTouched","setIsUsernameTouched","isProfileFieldsTouched","setIsProfileFieldsTouched","setError","setPhoto","setFirstName","setLastName","setBio","currentAvatarBlobUrl","ProfileEditProgress","isUsernameError","isSaveButtonShown","handlePhotoChange","newPhoto","handleFirstNameChange","handleLastNameChange","handleBioChange","handleProfileSave","trimmedFirstName","trimmedLastName","trimmedBio","AvatarEditable","UsernameInput","FloatingActionButton","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb","setSettingOption","renderFileSizeCallback","AUTODOWNLOAD_FILESIZE_MB_LIMITS","handleFileSizeChange","renderAutoDownloadBlock","canAutoLoadFromContacts","canAutoLoadInPrivateChats","canAutoLoadInGroups","canAutoLoadInChannels","Checkbox","checked","onCheck","isChecked","RangeSlider","renderValue","renderContentSizeSlider","runThrottledForLoadRecommended","orderedFolderIds","foldersById","recommended","recommendedChatFolders","onCreateFolder","onEditFolder","loadRecommendedChatFolders","addChatFolder","showDialog","setAnimationData","isAnimationLoaded","setIsAnimationLoaded","handleAnimationLoad","handleCreateFolder","chatsCountByFolderId","useFolderManagerForChatsCount","userFolders","folder","subtitle","getFolderDescriptionText","handleCreateFolderFromRecommended","STICKER_SIZE_FOLDER_SETTINGS","pill","fluid","narrow","multiline","itemName","itemPluralName","ERROR_NO_TITLE","ERROR_NO_CHATS","loadedActiveChatIds","loadedArchivedChatIds","dispatch","onAddIncludedChats","onAddExcludedChats","onBack","editChatFolder","isIncludedChatsListExpanded","setIsIncludedChatsListExpanded","isExcludedChatsListExpanded","setIsExcludedChatsListExpanded","selectedChatIds","includedChatIds","selectedChatTypes","includedChatTypes","selectChatFilters","excludedChatIds","excludedChatTypes","folderId","visibleIncludedChatIds","visibleExcludedChatIds","allLoadedChatsSet","Set","loadedIncludedChatIds","findIntersectionWithSet","loadedExcludedChatIds","renderChats","mode","visibleChatIds","isExpanded","leftChatsCount","clickHandler","chatType","INCLUDED_CHAT_TYPES","typeKey","EXCLUDED_CHAT_TYPES","inactive","renderChatType","isTouched","folderUpdate","selectedIds","filterValue","onSelectedIdsChange","onSelectedChatTypesChange","chatTypes","shouldMinimize","hasMaxChats","focus","handleItemClick","newSelectedIds","splice","handleChatTypeClick","newSelectedChatTypes","selectedType","isMinimized","canClose","isSelected","withChatType","chatFilter","folderAllOrderedIds","useFolderManagerForOrderedIds","ALL_FOLDER_ID","folderArchivedOrderedIds","ARCHIVED_FOLDER_ID","displayedIds","newFilter","handleSelectedIdsChange","ids","includeFilters","excludeFilters","handleSelectedChatTypesChange","newFilters","forEach","shownScreen","handleReset","handleEditFolder","handleAddIncludedChats","handleAddExcludedChats","STICKER_SIZE_PICKER_HEADER","stickerSet","isIntersecting","useIsIntersecting","mediaHash","lottieData","useMediaTransition","firstLetters","getFirstLetters","hasThumbnail","isGifs","IS_WEBM_SUPPORTED","stickers","firstSticker","isLottie","STICKER_SIZE_GENERAL_SETTINGS","StickerButton","sticker","ANIMATION_LEVEL_OPTIONS","TIME_FORMAT_OPTIONS","stickerSetIds","added","setIds","stickerSetsById","setsById","defaultReaction","appConfig","messageTextSize","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","timeFormat","stickerSettingsRef","observeIntersectionForCovers","setSticker","KEYBOARD_SEND_OPTIONS","subLabel","IS_MAC_OS","handleAnimationLevelChange","newLevel","_","handleMessageTextSizeChange","newSize","documentElement","setProperty","setAttribute","handleTimeFormatChange","newTimeFormat","wasTimeFormatSetManually","setTimeFormat","handleStickerSetClick","stickerSets","installedDate","fromSticker","fileSelector","openSystemFilesDialog","accept","noMultiple","removeAttribute","onchange","click","hex2rgb","param","parseInt","substring","rgb2hex","p0","p1","p2","rgb2hsb","r","g","s","v","hsb2rgb","f","p","q","t","getPatternColor","rgbColor","hue","saturation","wallpaper","slug","localMediaHash","thumbRef","useCanvasBlur","thumbnail","dataUri","isLoadAllowed","setIsLoadAllowed","fullMedia","wasLoadDisabled","UPLOADING_WALLPAPER_SLUG","cacheKeyRef","handleSelect","blob","fetchBlob","cacheApi","save","CUSTOM_BG_CACHE_NAME","isAllowed","background","isBlurred","themes","loadedWallpapers","loadWallpapers","uploadWallpaper","setThemeSettings","themeRef","handleFileSelect","files","handleUploadWallpaper","handleSetColor","handleResetToDefault","backgroundColor","patternColor","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","handleWallPaperSelect","currentWallpaper","async","defaultRGB","rgb","canvas","context","getContext","preloadImage","naturalHeight","naturalWidth","offsetWidth","drawImage","getImageData","blockSize","getAverageColor","handleWallPaperBlurChange","isUploading","DEFAULT_HSB","PREDEFINED_COLORS","hsb2positions","hsb","rects","colorPosition","colorRect","huePosition","hueRect","positions2hsb","colorPickerRef","huePickerRef","isFirstRunRef","setHsb","getInitialHsb","hsbRef","markIsDragging","unmarkIsDragging","rgbInput","setRgbInput","hexInput","setHexInput","rectsRef","colorCtxRef","offsetLeft","handleColorDrag","handleHueDrag","selectorToPreventScroll","withCursor","hex","hueHex","w","ctx","imgData","createImageData","pixels","col","perY","st","ed","perX","putImageData","drawColor","drawHue","handleRgbChange","rgbValue","channel","handleHexChange","hexValue","handlePredefinedColorClick","dataset","hasPrivateChatsNotifications","hasPrivateChatsMessagePreview","hasGroupNotifications","hasGroupMessagePreview","hasBroadcastNotifications","hasBroadcastMessagePreview","hasContactJoinedNotifications","hasWebNotifications","hasPushNotifications","notificationSoundVolume","loadNotificationSettings","updateContactSignUpNotification","updateNotificationSettings","updateWebNotificationSettings","runDebounced","handleSettingsChange","peerType","setting","currentIsSilent","currentShouldShowPreviews","shouldShowPreviews","handleContactNotificationChange","volume","playNotifySound","hasPassword","isSensitiveEnabled","canChangeSensitive","privacy","blocked","activeSessions","blockedCount","totalCount","sessionsCount","visibilityPrivacyPhoneNumber","phoneNumber","visibility","visibilityPrivacyLastSeen","lastSeen","visibilityPrivacyProfilePhoto","profilePhoto","visibilityPrivacyForwarding","forwards","visibilityPrivacyGroupChats","chatInvite","loadPrivacySettings","loadBlockedContacts","loadAuthorizations","loadContentSettings","updateContentSettings","getVisibilityValue","languages","language","loadLanguages","selectedLanguage","setSelectedLanguage","markIsLoading","unmarkIsLoading","handleChange","langCode","setLanguage","currentLangCode","navigator","toLowerCase","shortLangCode","substr","nativeName","buildOptions","loadingOption","getPrivacyKey","screen","privacySettings","allowUserIds","allowChatIds","blockUserIds","blockChatIds","setPrivacyVisibility","visibilityOptions","exceptionLists","shouldShowDenied","shouldShowAllowed","privacyKey","headerText","descriptionText","allowedContactsScreen","deniedContactsScreen","allowedCount","reduce","result","membersCount","blockCount","handleVisibilityChange","getLocation","session","region","country","getDeviceEnvironment","deviceModel","platform","systemVersion","terminateAuthorization","terminateAllAuthorizations","isConfirmTerminateAllDialogOpen","openConfirmTerminateAllDialog","closeConfirmTerminateAllDialog","handleTerminateSessionClick","handleTerminateAllSessions","currentSession","isCurrent","otherSessions","appName","ip","sessions","handler","dateActive","blockedIds","userSearch","setUserSearchQuery","blockContact","filteredContactIds","availableContactIds","contactId","firstId","secondId","secondName","localeCompare","handleRemoveUser","accessHash","chatsByIds","usersByIds","countryList","phoneCodes","phoneCodeList","unblockContact","isBlockUserModalOpen","openBlockUserModal","closeBlockUserModal","handleUnblockClick","isPrivate","formatPhoneNumberWithCode","renderContact","animatedEmoji","selectAnimatedEmoji","AnimatedEmoji","expectedPassword","clearError","validationError","setValidationError","shouldShowPassword","setShouldShowPassword","handleSubmit","newPassword","handleClearError","PasswordMonkey","isBig","isPasswordVisible","PasswordForm","onChangePasswordVisibility","onStart","FOCUS_DELAY_TIMEOUT_MS","shouldConfirm","setValue","isConfirmShown","markIsConfirmShown","unmarkIsConfirmShown","codeLength","twoFaSettings","waitingEmailCodeLength","newValue","updatePassword","checkPassword","clearTwoFaError","updateRecoveryEmail","provideTwoFaEmailCode","clearPassword","handleStartWizard","handleNewPassword","handleNewPasswordConfirm","handleNewPasswordHint","handleNewPasswordEmail","onSuccess","handleChangePasswordCurrent","handleChangePasswordNew","handleChangePasswordConfirm","handleChangePasswordHint","handleTurnOff","handleRecoveryEmailCurrentPassword","handleRecoveryEmail","handleEmailCode","getCurrentPrivacySettings","isAllowList","setPrivacySettings","selectedContactIds","setSearchQuery","isSubmitShown","setIsSubmitShown","newSelectedContactIds","setNewSelectedContactIds","isChatGroup","handleSelectedContactIdsChange","contactsIds","Picker","itemIds","searchInputId","availableReactions","selectedReaction","setDefaultReaction","isInactive","TWO_FA_SCREENS","FOLDERS_SCREENS","PRIVACY_SCREENS","PRIVACY_PHONE_NUMBER_SCREENS","PRIVACY_LAST_SEEN_PHONE_SCREENS","PRIVACY_PROFILE_PHOTO_SCREENS","PRIVACY_FORWARDING_SCREENS","PRIVACY_GROUP_CHATS_SCREENS","foldersState","foldersDispatch","shouldSkipTransition","twoFaState","twoFaDispatch","useReducer","handleSaveFilter","renderCurrentSection","isScreenActive","isFrom","currentKey","privacyAllowScreens","isTwoFaScreen","isFoldersScreen","isPrivacyScreen","values","SettingsGeneralBackgroundColor","renderCurrentSectionContent","LAYERS_ANIMATION_NAME","statusesById","userStatusesById","serverTimeOffset","filteredIds","sortUserIds","isSearching","selectedMemberIds","onSelectedMemberIdsChange","onNextStep","setGlobalSearchQuery","canBeInvitedToGroup","isUserBot","handleNextStep","creationProgress","creationError","chatCreation","createGroupChat","createChannel","setTitle","setAbout","chatTitleEmptyError","channelTitleEmptyError","chatTooManyUsersError","ChatCreationProgress","handleTitleChange","handleCreateGroup","handleCreateChannel","renderedError","RENDER_COUNT","LeftColumnContent","onContentChange","newChatMemberIds","setNewChatMemberIds","isStepActive","ChatList","folderType","folderOrderedIds","editChatFolders","initialSelectedFolderIds","pinnedChatIds","selectedFolderIds","setSelectedFolderIds","folders","idsToRemove","idsToAdd","CheckboxGroup","getCopyLabel","hasSelection","scrollLockEl","IGNORED_KEYS","Down","ArrowDown","Up","ArrowUp","Left","ArrowLeft","Right","ArrowRight","PageUp","PageDown","End","Home","Tab","getTouchY","changedTouches","clientY","scrollHeight","preventDefaultForScrollKeys","HTMLElement","tagName","getAttribute","isTextBox","disableScrolling","_excludedClosestSelector","passive","onkeydown","enableScrolling","cn","createClassNameBuilder","previewIndex","onSendReaction","isReady","selectAnimation","isActivated","activate","deactivate","markAnimationLoaded","shouldRenderAnimated","animatedClassNames","shouldRenderStatic","staticClassNames","onMouseEnter","enabledReactions","itemsScrollRef","isHorizontalScrollEnabled","enableHorizontalScroll","handleWheel","onWheelCapture","onTouchMove","anchor","canSendNow","canReschedule","canReply","canEdit","canPin","canUnpin","canForward","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canShowSeenBy","canShowReactionsCount","canRemoveReaction","canShowReactionList","seenByRecentUsers","onReply","onEdit","onPin","onReport","onFaveSticker","onUnfaveSticker","onSend","onReschedule","onCopyLink","onDownload","onShowSeenBy","onShowReactors","menuRef","scrollableRef","copyOptions","afterEffect","getMessageText","canImageBeCopied","hasMessageLocalBlobUrl","CLIPBOARD_ITEM_SUPPORTED","selection","getSelection","Promise","resolve","mediaLoader","copyImageToClipboard","anchorNode","parentNode","clipboardText","getMessageTextWithSpoilers","copyTextToClipboard","getMessageCopyOptions","noReactions","withReactions","markIsReady","unmarkIsReady","getTriggerElement","getRootElement","getMenuElement","getLayout","extraHeightAudioPlayer","pinnedElement","extraHeightPinned","extraPaddingX","extraTopPadding","marginSides","extraMarginTop","handleRemoveReaction","positionY","transformOriginX","transformOriginY","menuStyle","withScroll","useContextMenuPosition","Menu","bubbleStyle","START_SIZE","selectActiveDownloadIds","seenByExpiresAt","seenByMaxChatMembers","noOptions","isScheduled","isLocal","isMessageLocal","isOwnMessage","isAction","isActionMessage","areReactionsEmpty","canSeeList","some","isChosen","hasFullInfo","SERVICE_NOTIFICATIONS_USER_ID","chatUsername","setReplyingToId","setEditingId","faveSticker","unfaveSticker","toggleMessageSelection","sendScheduledMessages","rescheduleMessage","loadSeenBy","openSeenByModal","sendReaction","openReactorListModal","loadFullChat","isMenuOpen","setIsMenuOpen","setIsDeleteModalOpen","setIsReportModalOpen","isPinModalOpen","setIsPinModalOpen","isCalendarOpen","openCalendar","closeCalendar","recentReactions","msg","closeMenu","closePinModal","handleCloseCalendar","handleReply","handleEdit","handlePin","handleUnpin","handleFaveSticker","handleUnfaveSticker","handleSelectMessage","params","childMessageIds","withShift","handleScheduledMessageSend","handleOpenCalendar","handleOpenSeenByModal","handleOpenReactorListModal","handleRescheduleMessage","scheduledAt","handleCopyLink","handleSendReaction","reportMessageIds","scheduledMaxDate","getDayStartAt","stickerSetShortName","currentMessageList","sendOptions","getAllowedAttachmentOptions","canSendStickers","selectStickerSet","stickerSetId","selectStickerSetByShortName","loadStickers","toggleStickerSet","isDisabled","stickerSetAccessHash","isPreloadedGlobally","handleButtonClick","hasCloseButton","STICKER_SIZE_MODAL","isRestricted","canAddContact","getCanAddContact","canDeleteChat","getCanDeleteChat","hasLinkedChat","linkedChatId","withExtraActions","canStartBot","canRestartBot","canSubscribe","canSearch","canCall","canMute","canLeave","canEnterVoiceChat","canCreateVoiceChat","onSubscribeChannel","onSearchClick","updateChatMutedState","enterMessageSelectMode","sendBotCommand","restartBot","joinGroupCall","createGroupCall","openLinkedChat","addContact","openCallFallbackConfirm","handleStartBot","command","handleRestartBot","handleToggleMuteClick","handleEnterVoiceChatClick","handleLinkedChatClick","handleAddContactClick","handleSubscribe","handleCall","handleSearch","handleSelectMessages","Portal","runDebouncedForSearch","selectCurrentTextSearch","isHistoryCalendarOpen","setLocalTextSearchQuery","searchTextMessagesLocal","closeLocalTextSearch","openHistoryCalendar","focusedIndex","setFocusedIndex","visualViewport","mainEl","pageTop","Array","input","div","contentEditable","blur","handleMessageSearchQueryChange","newQuery","handleUp","newFocusIndex","handleDown","SearchInput","findInViewport","selectorOrElements","margin","isDense","shouldContainBottom","isHorizontal","viewportY1","viewportY2","allElements","visibleIndexes","isFound","y2","setTooltipItemVisible","selector","first","isFullyVisible","fastSmoothScroll","useKeyboardNavigation","shouldSaveSelectionOnUpdateItems","shouldRemoveSelectionOnReset","noArrowNavigation","shouldSelectOnTab","selectedItemIndex","setSelectedItemIndex","getSelectedIndex","newIndex","cycleRestrict","handleArrowKey","handleItemSelect","item","isSelectionOutOfRange","onUp","onDown","onLeft","onRight","onTab","onInsertUserName","filteredUsers","handleUserSelect","forceFocus","handleSelectMention","member","selectedMentionIndex","prevChatMembers","renderedChatMembers","attachments","caption","groupChatMembers","recentEmojis","baseEmojiKeywords","emojiKeywords","addRecentEmoji","onCaptionUpdate","onFileAppend","onClear","captionRef","useStateRef","hideTimeoutRef","prevAttachments","renderingAttachments","isHovered","markHovered","unmarkHovered","isQuick","every","quick","isMentionTooltipOpen","closeMentionTooltip","insertMention","mentionFilteredUsers","useMentionTooltip","EDITABLE_INPUT_MODAL_ID","isEmojiTooltipOpen","closeEmojiTooltip","filteredEmojis","insertEmoji","useEmojiTooltip","sendAttachments","handleFilesDrop","dataTransfer","newFiles","file","CONTENT_TYPES_WITH_PREVIEW","areAllPhotos","SUPPORTED_IMAGE_CONTENT_TYPES","mimeType","areAllVideos","SUPPORTED_VIDEO_CONTENT_TYPES","areAllAudios","renderHeader","onDragEnter","onDrop","onDragOver","onDragLeave","relatedTarget","toTarget","fromTarget","attachment","File","filename","extension","getFileExtension","previewData","emojis","onEmojiSelect","MessageInput","isAttachmentModalInput","html","editableInputId","canAutoFocus","questionInputRef","optionsListRef","solutionRef","question","setQuestion","setOptions","isAnonymous","setIsAnonymous","isMultipleAnswers","setIsMultipleAnswers","isQuizMode","setIsQuizMode","solution","setSolution","correctOption","setCorrectOption","hasErrors","setHasErrors","focusInput","solutionEl","innerHTML","addNewOption","newOptions","list","scrollTo","behavior","handleCreate","questionTrimmed","optionsTrimmed","o","summary","answers","option","correct","isPublic","multipleChoice","quiz","entities","parseMessageInput","correctAnswers","solutionEntities","updateOption","removeOption","handleCorrectOptionChange","handleIsAnonymousChange","handleMultipleAnswersChange","handleQuizModeChange","handleKeyPress","keyCode","getQuestionError","getOptionsError","renderOptions","onKeyPress","renderQuizNoOptionError","hidden","emoji","native","names","IS_EMOJI_SUPPORTED","loading","category","allEmojis","useOnIntersect","emojisPerRow","ceil","displayedEmoji","ICONS_BY_CATEGORY","recent","people","nature","foods","activity","places","objects","symbols","flags","categoryIntersections","emojiDataPromise","emojiRawData","emojiData","headerRef","categories","setCategories","setEmojis","activeCategoryIndex","setActiveCategoryIndex","entries","entry","intersectingWithIndexes","newLeft","HEADER_BUTTON_WIDTH","fastSmoothScrollHorizontal","allCategories","themeCategories","unshift","exec","default","uncompressEmoji","ensureEmojiData","selectCategory","categoryEl","handleEmojiSelect","MENU_TRANSITION_DURATION","containerClassName","faded","STICKER_MARGIN","loadAndPlay","onStickerSelect","onStickerUnfave","stickersPerRow","STICKER_SIZE_PICKER","noAnimate","onUnfaveClick","stickerSetIntersections","favorite","recentStickers","favoriteStickers","addedSetIds","shouldPlay","loadRecentStickers","addRecentSticker","activeSetIndex","setActiveSetIndex","sendMessageAction","useSendMessageAction","areAddedLoaded","allSets","noPopulatedSets","set","stickerSetEl","handleStickerSelect","handleStickerUnfave","handleMouseMove","fullClassName","buttonClassName","gif","videoData","shouldRenderVideo","isVideoReady","preventMessageInputBlurWithBubbling","preload","savedGifs","gifs","saved","canSendGifs","onGifSelect","loadSavedGifs","debounceMs","SymbolMenuTabs","SYMBOL_MENU_TAB_TITLES","SYMBOL_MENU_TAB_ICONS","Emoji","Stickers","GIFs","onRemoveSymbol","onSearchOpen","renderTabButton","handleSearchOpen","isLeftColumnShown","setRecentEmojis","handleMouseEnter","handleMouseLeave","useMouseInside","fastRaf","recentEmojisRef","renderContent","onMouseLeave","noCloseOnBackdrop","canAttachMedia","canAttachPolls","onFileSelect","onPollCreate","handleQuickSelect","handleDocumentSelect","autoClose","withAvatar","botCommand","bot","botCommands","handleSendCommand","botId","selectedCommandIndex","prevCommands","renderedCommands","chatBotCommand","forEmoji","clearStickersForEmoji","prevStickers","displayedStickers","onSilentSend","onScheduleSend","listEmojis","usePrevDuringAnimation","handleSelectEmoji","selectedIndex","setItemVisible","thumbUrl","thumbnailDataUrl","decoding","webThumbnail","isForGallery","inlineResult","STICKER_SIZE_INLINE_BOT_RESULT","isGallery","inlineBotResults","switchPm","onSelectResult","startBot","handleSendPm","startParam","prevInlineBotResults","renderedInlineBotResults","sensitiveArea","inlineBotResult","selectedSendAsId","sendAsIds","saveDefaultSendAs","markMouseInside","sendAsId","selectedSendAsIndex","messagesById","viewportResults","senderUser","senderChat","forwardInfo","isChannelPost","foundResult","isOnTop","preloadBackwards","teactOrderKey","LastMessageMeta","selectShouldLoopStickers","isSomeModalOpen","onModalToggle","isAdded","areStickersLoaded","useOnChange","coverStickerIds","covers","otherStickers","handleAddClick","canRenderStickers","STICKER_SIZE_SEARCH","selectCurrentStickerSearch","resultIds","featured","featuredIds","loadFeaturedStickers","setIsModalOpen","selectCurrentGifSearch","isChatWithBot","selectIsChatWithBot","searchMoreGifs","setGifSearchQuery","handleGifClick","hasResults","answer","voters","offsets","pollResults","answerVote","totalVoters","loadPollOptionResults","closePollResults","prevVotersCount","votersCount","setIsLoading","areVotersLoaded","limit","shouldResetVoters","handleViewMoreClick","handleMemberClick","leftVotersCount","renderViewMoreButton","total","getMessagePoll","resultsByOption","buildCollectionByKey","management","updateContact","deleteContact","closeManagement","isDeleteDialogOpen","openDeleteDialog","closeDeleteDialog","isNotificationsEnabled","setIsNotificationsEnabled","ManagementProgress","handleNotificationChange","handleDeleteContact","withFullInfo","GROUP_TITLE_EMPTY","hasLinkedChannel","isBasicGroup","invites","canChangeInfo","isCreator","getHasAdminRight","canBanUsers","canInvite","exportedInvites","availableReactionsCount","togglePreHistoryHidden","updateChat","deleteChat","leaveChannel","deleteChannel","loadExportedChatInvites","loadChatJoinRequests","currentTitle","currentAbout","imageHash","isRevoked","handleClickEditType","ManagementScreens","handleClickDiscussion","handleClickReactions","handleClickPermissions","handleClickAdministrators","handleSetPhoto","handleAboutChange","handleUpdateGroup","trimmedTitle","trimmedAbout","handleClickMembers","handleTogglePreHistory","isPreHistoryHidden","isEnabled","enabledReactionsCount","enabledPermissionsCount","defaultBannedRights","sendStickers","sendGifs","adminsCount","adminMembers","handleDeleteGroup","formatInteger","joinRequests","onChatMemberSelect","updateChatDefaultBannedRights","permissions","setPermissions","havePermissionChanged","setHavePermissionChanged","handleRemovedUsersClick","handleAddExceptionClick","handleExceptionMemberClick","promotedByUserId","handlePermissionChange","getUpdatedPermissionValue","handleSavePermissions","bannedRights","removedUsersCount","kickedMembers","exceptionMembers","members","getMemberExceptions","langKey","getLangKeyForBannedRightKey","translatedString","sendMessages","blocking","sendMedia","sendPolls","embedLinks","inviteUsers","pinMessages","changeInfo","loadMoreMembers","deleteChatMember","usersId","availableMemberIds","acc","isAdmin","isOwner","canDeleteMembers","updateChatMemberBannedRights","isRemoveUserModalOpen","openRemoveUserModal","closeRemoveUserModal","removedMembers","getRemovedBy","kickedByUserId","kickedByUser","getContextActions","CHANNEL_TITLE_EMPTY","isSignaturesShown","toggleSignatures","handleUpdateChannel","handleToggleSignatures","handleClickSubscribers","handleDeleteChannel","selectManagement","checkPublicLink","updatePublicLink","updatePrivateLink","toggleIsProtected","privateLink","inviteLink","privacyType","setPrivacyType","isRevokeConfirmDialogOpen","openRevokeConfirmDialog","closeRevokeConfirmDialog","canUpdate","handleOptionChange","handleForwardingOptionChange","handleSave","handleRevokePrivateLink","langPrefix1","langPrefix2","forwardingOptions","SafeLink","forDiscussionIds","linkedChat","loadGroupsForDiscussion","linkDiscussionGroup","unlinkDiscussionGroup","linkedGroupId","setLinkedGroupId","isConfirmUnlinkGroupDialogOpen","openConfirmUnlinkGroupDialog","closeConfirmUnlinkGroupDialog","isConfirmLinkGroupDialogOpen","openConfirmLinkGroupDialog","closeConfirmLinkGroupDialog","handleUnlinkGroupSessions","channelId","handleLinkGroupSessions","STICKER_SIZE_DISCUSSION_GROUPS","teactFastList","linkedGroup","renderLinkGroupHeader","hasPrivateLink","renderLinkGroupConfirmText","isButtonsInOneRow","isPromotedByCurrentUser","isFormFullyDisabled","selectedChatMemberId","isBanConfirmationDialogOpen","openBanConfirmationDialog","closeBanConfirmationDialog","selectedChatMember","handleBanFromGroup","viewMessages","getControlIsDisabled","handleAdminMemberClick","handleAddAdminClick","getMemberStatus","promotedByUser","defaultRights","adminRights","isNewAdmin","selectedUserId","updateChatAdmin","setIsTouched","isDismissConfirmationDialogOpen","openDismissConfirmationDialog","closeDismissConfirmationDialog","customTitle","setCustomTitle","selectedAdminMember","handleDismissAdmin","memberStatus","handleCustomTitleChange","postMessages","editMessages","banUsers","addAdmins","manageCall","anonymous","maxLength","noAdmins","adminIds","shouldUseSearchResults","listedIds","noScrollRestore","memberId","inviteComparator","i1","i2","isPermanent","i1IsPermanent","usage","i1Usage","i1Date","i2IsPermanent","i2Usage","i2Date","revokedInvites","revokedExportedInvites","setEditingExportedInvite","editExportedChatInvite","deleteExportedChatInvite","deleteRevokedExportedChatInvites","setOpenedInviteInfo","isDeleteRevokeAllDialogOpen","openDeleteRevokeAllDialog","closeDeleteRevokeAllDialog","isRevokeDialogOpen","openRevokeDialog","closeRevokeDialog","revokingInvite","setRevokingInvite","deletingInvite","setDeletingInvite","hasDetailedCountdown","expireDate","getServerTime","MILLISECONDS_IN_DAY","useInterval","primaryInvite","primaryInviteLink","link","temporalInvites","revokeInvite","usageLimit","askToRevoke","handleRevoke","handleCreateNewClick","handlePrimaryRevoke","handleDeleteAllRevoked","showInviteInfo","deleteInvite","askToDelete","copyLink","handleCopyPrimaryClicked","prepareUsageText","requested","diff","formatCountdown","prepareContextActions","actions","editInvite","PrimaryLinkMenuButton","STICKER_SIZE_INVITES","secondaryIcon","DEFAULT_USAGE_LIMITS","DEFAULT_EXPIRE_DATE","hour","week","DEFAULT_CUSTOM_EXPIRE_DATE","editingInvite","exportChatInvite","isCalendarOpened","setIsRequestNeeded","customExpireDate","setCustomExpireDate","selectedExpireOption","setSelectedExpireOption","customUsageLimit","setCustomUsageLimit","selectedUsageOption","setSelectedUsageOption","isSubmitBlocked","setIsSubmitBlocked","oldEditingInvite","editingTitle","editingIsRequestNeeded","minSafeDate","handleIsRequestChange","handleCustomUsageLimitChange","handleExpireDateChange","handleSaveClick","formatFullDate","n","setChatEnabledReactions","localEnabledReactions","setLocalEnabledReactions","handleSaveReactions","handleReactionChange","newEnabledReactions","inviteInfo","importers","requesters","loadChatInviteImporters","loadChatInviteRequesters","adminId","isExpired","handleCopyClicked","importer","renderImporters","requester","renderRequesters","hideChatJoinRequest","fixedDate","dateString","isToday","formatHumanDate","handleAcceptRequest","isApproved","handleRejectRequest","hideAllChatJoinRequests","isAcceptAllDialogOpen","openAcceptAllDialog","closeAcceptAllDialog","isRejectAllDialogOpen","openRejectAllDialog","closeRejectAllDialog","handleAcceptAllRequests","handleRejectAllRequests","STICKER_SIZE_JOIN_REQUESTS","managementType","selectCurrentManagementType","VISA","MASTERCARD1","MASTERCARD2","CardType","cards","Default","Visa","Mastercard","detectCardType","cardNumber","formatsCache","defaultPhoneNumberFormat","str","flag","phoneFormat","format","formatValue","phoneNumberFormat","phoneNumberGroups","RegExp","repeat","getPhoneNumberFormat","streetLine1","streetLine2","city","countryIso2","postCode","phone","shipping","cardholder","expiry","cvv","billingCountry","billingZip","saveInfo","saveCredentials","formErrors","reducer","getBillingCountry","countryCode","useFocusAfterAnimation","animationDuration","hasArrow","labelText","htmlFor","needEmail","needPhone","needName","needAddress","phoneRef","selectCountryRef","handleAddress1Change","handleAddress2Change","handleCityChange","handleStateChange","handleCountryChange","handlePostCodeChange","handleFullNameChange","handleEmailChange","handlePhoneChange","handleSaveInfoChange","shippingOptions","currency","handleShippingSelect","amount","formatCurrency","renderPaymentItem","main","renderCheckoutItem","invoiceContent","prices","shippingPrices","checkoutInfo","totalPrice","photoUrl","paymentMethod","paymentProvider","shippingAddress","shippingMethod","expiryInputRef","charAt","parts","formatCardExpiry","cardNumberRef","cardType","setCardType","newCardType","formatCardNumber","cardIcon","mastercardIconPath","visaIconPath","getCardIcon","canSaveCredentials","needCardholderName","needCountry","needZip","handleCardNumberChange","handleCardholderChange","toUpperCase","handleExpiryChange","handleCvvChange","handleBillingPostCodeChange","handleChangeSaveCredentials","savedInfo","invoice","nativeProvider","nativeParams","passwordMissing","payment","isProviderError","nameRequested","phoneRequested","emailRequested","shippingAddressRequested","flexible","phoneToProvider","emailToProvider","validateRequestedInfo","sendPaymentForm","setPaymentStep","sendCredentialsInfo","clearPaymentError","paymentState","paymentDispatch","field","handleErrorModalClose","PaymentStep","shippingOption","getShippingPrices","totalPrices","cur","getTotalPrice","detectCardTypeText","findShippingOption","getCheckoutInfo","validateRequest","requestInfo","getRequestInfo","sendCredentials","credentials","expiryMonth","expiryYear","zip","getCredentials","sendForm","shippingOptionId","setStep","nextStep","buttonText","currentStep","renderModalContent","renderError","optionId","receipt","info","totalAmount","credentialsTitle","fullAddress","onInputChange","setPassword","canSubmit","setCanSubmit","select","autoComplete","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","STICKER_SIZE","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","isPeekShown","setIsPeekShown","handleFirstMonkeyLoad","STICKER_SIZE_TWO_FA","playSegment","cropperResultOptions","circle","Croppie","croppiePromise","cropper","isCroppieReady","setIsCroppieReady","imgFile","cropContainer","enableZoom","boundary","viewport","blobToDataUri","bind","err","DEBUG","console","initCropper","ensureCroppie","croppedImg","blobToFile","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","labelClassName","URL","revokeObjectURL","createObjectURL"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/133.7825bcf69db105db21d4.css.map b/dist/133.7825bcf69db105db21d4.css.map deleted file mode 100644 index 758b20e25..000000000 --- a/dist/133.7825bcf69db105db21d4.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"133.7825bcf69db105db21d4.css","mappings":"AAAA,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;ACpCJ,OACE,kBACA,uBAGE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDACE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;AC9JF,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDACE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDArEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAmEE,qDAzEJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAuEE,8CA7EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYACE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a","sources":["webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss"],"sourcesContent":["#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n",".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete, &.error, &.confirm, &.pin, &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, .25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 .25rem .5rem .125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform .2s ease, opacity .2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header, %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: .5rem 1.25rem 0 .9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform .25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content, #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: '';\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import '../../styles/mixins';\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform .15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input, i, &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/133.7825bcf69db105db21d4.css b/dist/133.f664a3ff1ab968ba12a0.css similarity index 99% rename from dist/133.7825bcf69db105db21d4.css rename to dist/133.f664a3ff1ab968ba12a0.css index 38ed75e1c..afa906691 100644 --- a/dist/133.7825bcf69db105db21d4.css +++ b/dist/133.f664a3ff1ab968ba12a0.css @@ -3,4 +3,4 @@ .CropModal .modal-dialog{width:calc(100% - 2rem);max-width:35rem;height:calc(100% - 1rem);max-height:35rem;position:relative}.CropModal .modal-content,.CropModal #avatar-crop{overflow:hidden}.CropModal .confirm-button{position:absolute;bottom:1rem;right:1rem;box-shadow:0 1px 2px var(--color-default-shadow)}.CropModal #avatar-crop{max-width:25rem;margin:0 auto;position:relative}.CropModal #avatar-crop::before{content:"";display:block;padding-top:100%}.CropModal #avatar-crop .cr-boundary{position:absolute;top:0;left:0;border-radius:var(--border-radius-messages-small)}.CropModal #avatar-crop .cr-viewport{border:none;box-shadow:0 0 2000px 2000px rgba(127,127,127,.5)}.CropModal #avatar-crop .cr-slider::-webkit-slider-runnable-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-moz-range-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-ms-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-webkit-slider-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-webkit-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.CropModal #avatar-crop .cr-slider::-moz-range-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-moz-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-moz-range-thumb:hover{transform:scale(1.2)}.CropModal #avatar-crop .cr-slider::-ms-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-ms-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-ms-thumb:hover{transform:scale(1.2)} .AvatarEditable label{margin-left:auto;margin-right:auto;width:7.5rem;height:7.5rem;margin-bottom:2rem;display:flex !important;align-items:center;justify-content:center;background-color:var(--color-primary);border-radius:50%;color:#fff;font-size:3rem;cursor:pointer;position:relative;overflow:hidden;outline:none !important}.AvatarEditable label input{display:none}.AvatarEditable label img{position:absolute;top:0;left:0;width:100%;height:100%}.AvatarEditable label i{transform:scale(1);transition:transform .15s linear;z-index:var(--z-register-add-avatar)}.Transition>div:not(.Transition__slide--active) .AvatarEditable label input,.Transition>div:not(.Transition__slide--active) .AvatarEditable label i,.Transition>div:not(.Transition__slide--active) .AvatarEditable label::after,body.animating-right-column .AvatarEditable label input,body.animating-right-column .AvatarEditable label i,body.animating-right-column .AvatarEditable label::after{display:none !important}.Transition>div:not(.Transition__slide--active) .AvatarEditable label img,body.animating-right-column .AvatarEditable label img{position:static !important}.AvatarEditable label:hover i{transform:scale(1.2)}.AvatarEditable label.filled{background-color:var(--color-background)}.AvatarEditable label.filled::after{content:"";display:block;position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.AvatarEditable label.disabled{pointer-events:none}.AvatarEditable label.disabled i{display:none}.AvatarEditable label.disabled::after{display:none} -/*# sourceMappingURL=133.7825bcf69db105db21d4.css.map*/ \ No newline at end of file +/*# sourceMappingURL=133.f664a3ff1ab968ba12a0.css.map*/ \ No newline at end of file diff --git a/dist/133.f664a3ff1ab968ba12a0.css.map b/dist/133.f664a3ff1ab968ba12a0.css.map new file mode 100644 index 000000000..49959b36d --- /dev/null +++ b/dist/133.f664a3ff1ab968ba12a0.css.map @@ -0,0 +1 @@ +{"version":3,"file":"133.f664a3ff1ab968ba12a0.css","mappings":"AAAA,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;ACpCJ,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;ACnKF,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDAEE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDAtEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAoEE,qDA1EJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAwEE,8CA9EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYAGE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a","sources":["webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss"],"sourcesContent":["#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n",".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content,\n #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform 0.15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input,\n i,\n &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/133.7825bcf69db105db21d4.js b/dist/133.f664a3ff1ab968ba12a0.js similarity index 99% rename from dist/133.7825bcf69db105db21d4.js rename to dist/133.f664a3ff1ab968ba12a0.js index b2bb06586..93bd7400f 100644 --- a/dist/133.7825bcf69db105db21d4.js +++ b/dist/133.f664a3ff1ab968ba12a0.js @@ -1,2 +1,2 @@ "use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[133],{1133:(e,t,n)=>{n.r(t),n.d(t,{AuthCode:()=>Z,AuthPassword:()=>P,AuthRegister:()=>w});var a=n(4050),o=n(5116),r=n(7361),s=n(782),l=n(2340),i=n(6590),c=n(9107),d=n(7687),u=n(4288),m=n(3716),p=n(7324),g=n(7799);const h=r.wB?m.qp:m.z7,f=(0,a.X$)((e=>{let{code:t,codeLength:n,trackingDirection:o,isTracking:r,isBig:s}=e;const[l,i]=(0,a.eJ)(),[c,d]=(0,a.eJ)(),[u,f]=(0,a.eJ)(!1),Z=165/n;(0,a.d4)((()=>{l||(0,p.Z)("MonkeyIdle").then(i)}),[l]),(0,a.d4)((()=>{c||(0,p.Z)("MonkeyTracking").then(d)}),[c]);const v=(0,a.I4)((()=>f(!0)),[]);return a.ZP.createElement("div",{id:"monkey",className:s?"big":""},!u&&a.ZP.createElement("div",{className:"monkey-preview"}),l&&a.ZP.createElement(g.Z,{id:"idleMonkey",size:s?m.K2:h,className:r?"hidden":void 0,animationData:l,play:!r,onLoad:v}),c&&a.ZP.createElement(g.Z,{id:"trackingMonkey",size:s?m.K2:h,className:r?"shown":"hidden",animationData:c,playSegment:r?function(){const e=t&&t.length>1||o<0?15+Z*(t.length-1):0,a=t.length===n?180:15+Z*t.length;return o<1?[a,e]:[e,a]}():void 0,speed:2,noLoop:!0}))})),Z=(0,a.X$)((0,o.c$)((e=>(0,s.ei)(e,["authPhoneNumber","authIsCodeViaApp","authIsLoading","authError"])))((e=>{let{authPhoneNumber:t,authIsCodeViaApp:n,authIsLoading:s,authError:m}=e;const{setAuthCode:p,returnToAuthPhoneNumber:g,clearAuthError:h}=(0,o.uC)(),Z=(0,c.Z)(),v=(0,a.sO)(null),[b,P]=(0,a.eJ)(""),[E,y]=(0,a.eJ)(!1),[w,k]=(0,a.eJ)(1);(0,a.d4)((()=>{r.$b||v.current.focus()}),[]),(0,i.ZP)(!0,g);const N=(0,a.I4)((e=>{m&&h();const{currentTarget:t}=e;t.value=t.value.replace(/[^\d]+/,"").substr(0,5),t.value!==b&&(P(t.value),E?t.value.length||y(!1):y(!0),b&&b.length>t.value.length?k(-1):k(1),5===t.value.length&&p({code:t.value}))}),[m,h,b,E,p]);return a.ZP.createElement("div",{id:"auth-code-form",className:"custom-scroll"},a.ZP.createElement("div",{className:"auth-form"},a.ZP.createElement(f,{code:b,codeLength:5,isTracking:E,trackingDirection:w}),a.ZP.createElement("h2",null,t,a.ZP.createElement("div",{className:"auth-number-edit",onClick:g,role:"button",tabIndex:0,title:Z("WrongNumber")},a.ZP.createElement("i",{className:"icon-edit"}))),a.ZP.createElement("p",{className:"note"},(0,l.Z)(Z(n?"SentAppCode":"Login.JustSentSms"),["simple_markdown"])),a.ZP.createElement(d.Z,{ref:v,id:"sign-in-code",label:Z("Code"),onInput:N,value:b,error:m&&Z(m),autoComplete:"one-time-code",inputMode:"numeric"}),s&&a.ZP.createElement(u.Z,null)))})));var v=n(3490),b=n(9364);const P=(0,a.X$)((0,o.c$)((e=>(0,s.ei)(e,["authIsLoading","authError","authHint"])))((e=>{let{authIsLoading:t,authError:n,authHint:r}=e;const{setAuthPassword:s,clearAuthError:l}=(0,o.uC)(),i=(0,c.Z)(),[d,u]=(0,a.eJ)(!1),m=(0,a.I4)((e=>{u(e)}),[]),p=(0,a.I4)((e=>{s({password:e})}),[s]);return a.ZP.createElement("div",{id:"auth-password-form",className:"custom-scroll"},a.ZP.createElement("div",{className:"auth-form"},a.ZP.createElement(v.Z,{isPasswordVisible:d}),a.ZP.createElement("h2",null,i("Login.Header.Password")),a.ZP.createElement("p",{className:"note"},i("Login.EnterPasswordDescription")),a.ZP.createElement(b.Z,{clearError:l,error:n&&i(n),hint:r,isLoading:t,isPasswordVisible:d,onChangePasswordVisibility:m,onSubmit:p})))})));var E=n(231),y=n(710);const w=(0,a.X$)((0,o.c$)((e=>(0,s.ei)(e,["authIsLoading","authError"])))((e=>{let{authIsLoading:t,authError:n}=e;const{signUp:r,clearAuthError:s,uploadProfilePhoto:l}=(0,o.uC)(),i=(0,c.Z)(),[u,m]=(0,a.eJ)(!1),[p,g]=(0,a.eJ)(),[h,f]=(0,a.eJ)(""),[Z,v]=(0,a.eJ)("");return a.ZP.createElement("div",{id:"auth-registration-form",className:"custom-scroll"},a.ZP.createElement("div",{className:"auth-form"},a.ZP.createElement("form",{action:"",method:"post",onSubmit:function(e){e.preventDefault(),r({firstName:h,lastName:Z}),p&&l({file:p})}},a.ZP.createElement(y.Z,{onChange:g}),a.ZP.createElement("h2",null,i("YourName")),a.ZP.createElement("p",{className:"note"},i("Login.Register.Desc")),a.ZP.createElement(d.Z,{id:"registration-first-name",label:i("Login.Register.FirstName.Placeholder"),onChange:function(e){n&&s();const{target:t}=e;f(t.value),m(t.value.length>0)},value:h,error:n&&i(n),autoComplete:"given-name"}),a.ZP.createElement(d.Z,{id:"registration-last-name",label:i("Login.Register.LastName.Placeholder"),onChange:function(e){const{target:t}=e;v(t.value)},value:Z,autoComplete:"family-name"}),u&&a.ZP.createElement(E.Z,{type:"submit",ripple:!0,isLoading:t},i("Next")))))})))},7799:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),o=n(9118),r=n(6752),s=n(8674),l=n(5332);let i,c;async function d(){return i||(i=n.e(941).then(n.bind(n,7941)),c=(await i).default),i}setTimeout(d,3e3);const u=(0,a.X$)((e=>{let{className:t,id:n,animationData:i,play:u,playSegment:m,speed:p,noLoop:g,size:h,quality:f,isLowPriority:Z,color:v,forceOnHeavyAnimation:b,onLoad:P,onEnded:E}=e;const[y,w]=(0,a.eJ)(),k=(0,a.sO)(null),N=(0,a.sO)(!1),C=(0,a.sO)(!1),L=(0,a.sO)(!0),x=(0,a.sO)();x.current=u;const I=(0,a.sO)();I.current=m,(0,a.d4)((()=>{if(y||!i)return;const e=()=>{if(!k.current)return;const e=new c(n,k.current,i,{noLoop:g,size:h,quality:f,isLowPriority:Z},P,v,E);p&&e.setSpeed(p),w(e)};c?e():d().then((()=>{(0,o.T2)((()=>{k.current&&e()}))}))}),[v,y,i,n,Z,g,P,f,h,p,E]),(0,a.d4)((()=>{y&&y.setColor(v)}),[v,y]),(0,a.d4)((()=>()=>{y&&y.destroy()}),[y]);const A=(0,a.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];y&&(x.current||I.current)&&(I.current?y.playSegment(I.current):e?y.goToAndPlay(0):y.play())}),[y]),J=(0,a.I4)((()=>{y&&y.pause()}),[y]),M=(0,a.I4)((()=>{C.current=!0,y&&(N.current||(N.current=y.isPlaying()),J())}),[y,J]),S=(0,a.I4)((()=>{N.current&&A(),N.current=!1,C.current=!1}),[A]),T=(0,a.I4)((()=>{(0,o.T2)(S)}),[S]);(0,a.d4)((()=>{y&&(u||m?C.current?N.current=!0:A(g):C.current?N.current=!1:J())}),[y,u,m,g,A,J]),(0,a.d4)((()=>{y&&(L.current?L.current=!1:i&&(y.changeData(i),A()))}),[A,y,i]),(0,s.ZP)(M,S,b),(0,l.Z)(M,T);const O=(0,r.Z)("AnimatedSticker",t),D=h?`width: ${h}px; height: ${h}px;`:void 0;return a.ZP.createElement("div",{ref:k,className:O,style:D})}))},9364:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),o=n(3716),r=n(7361),s=n(6752),l=n(9107),i=n(231);const c=r.wB?550:400,d=(0,a.X$)((e=>{let{isLoading:t=!1,isPasswordVisible:n,error:d,hint:u,placeholder:m="Password",submitLabel:p="Next",clearError:g,onChangePasswordVisibility:h,onInputChange:f,onSubmit:Z}=e;const v=(0,a.sO)(null),b=(0,l.Z)(),[P,E]=(0,a.eJ)(""),[y,w]=(0,a.eJ)(!1);return(0,a.d4)((()=>{r.$b||setTimeout((()=>{v.current.focus()}),c)}),[]),(0,a.d4)((()=>{d&&requestAnimationFrame((()=>{v.current.focus(),v.current.select()}))}),[d]),a.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),t||y&&Z(P)},autoComplete:"off"},a.ZP.createElement("div",{className:(0,s.Z)("input-group password-input",P&&"touched",d&&"error"),dir:b.isRtl?"rtl":void 0},a.ZP.createElement("input",{ref:v,className:"form-control",type:n?"text":"password",id:"sign-in-password",value:P||"",autoComplete:"current-password",onChange:function(e){d&&g();const{target:t}=e;E(t.value),w(t.value.length>=o.lo),f&&f(t.value)},dir:"auto"}),a.ZP.createElement("label",null,d||u||m),a.ZP.createElement("div",{className:"toggle-password",onClick:function(){h(!n)},role:"button",tabIndex:0,title:"Toggle password visibility"},a.ZP.createElement("i",{className:n?"icon-eye":"icon-eye-closed"}))),y&&a.ZP.createElement(i.Z,{type:"submit",ripple:!0,isLoading:t},p))}))},3490:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),o=n(3716),r=n(7361),s=n(7324),l=n(7799);const i=[0,50],c=[0,20],d=[20,0],u=r.wB?o.qp:o.z7,m=(0,a.X$)((e=>{let{isPasswordVisible:t,isBig:n}=e;const[r,m]=(0,a.eJ)(),[p,g]=(0,a.eJ)(),[h,f]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(!1);(0,a.d4)((()=>{r?setTimeout((()=>v(!0)),2e3):(0,s.Z)("MonkeyClose").then(m)}),[r]),(0,a.d4)((()=>{p||(0,s.Z)("MonkeyPeek").then(g)}),[p]);const b=(0,a.I4)((()=>f(!0)),[]);return a.ZP.createElement("div",{id:"monkey",className:n?"big":""},!h&&a.ZP.createElement("div",{className:"monkey-preview"}),r&&a.ZP.createElement(l.Z,{id:"closeMonkey",size:n?o.K2:u,className:Z?"hidden":"shown",animationData:r,playSegment:i,noLoop:!0,onLoad:b}),p&&a.ZP.createElement(l.Z,{id:"peekMonkey",size:n?o.K2:u,className:Z?"shown":"hidden",animationData:p,playSegment:t?c:d,noLoop:!0}))}))},7324:(e,t,n)=>{n.d(t,{x:()=>r,Z:()=>s});var a=n(6137),o=n(647);const r={MonkeyIdle:n(8760),MonkeyTracking:n(6917),MonkeyClose:n(6257),MonkeyPeek:n(7785),FoldersAll:n(9356),FoldersNew:n(5485),DiscussionGroups:n(6978),CameraFlip:n(5665),HandFilled:n(2456),HandOutline:n(5667),Speaker:n(8763),VoiceAllowTalk:n(401),VoiceMini:n(5106),VoiceMuted:n(487),VoiceOutlined:n(5740),Peach:n(3677),Eggplant:n(5435),Cumshot:n(1879),JoinRequest:n(5095),Invite:n(7879)};function s(e){const t=r[e].replace(window.location.origin,"");return o.he(`file${t}`,a.IU.Lottie)}},710:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),o=n(6752),r=n(3716),s=n(1394),l=n(9107),i=n(231),c=n(3103),d=n(4288);const u={type:"blob",quality:1,format:"jpeg",circle:!1,size:{width:1024,height:1024}};let m,p,g;const h=(0,a.X$)((e=>{let{file:t,onChange:o,onClose:h}=e;const[f,Z]=(0,a.eJ)(!1);(0,a.d4)((()=>{t&&(f?async function(e){try{const t=document.getElementById("avatar-crop");if(!t)return;const{offsetWidth:n,offsetHeight:a}=t;g=new m(t,{enableZoom:!0,boundary:{width:n,height:a},viewport:{width:n-16,height:a-16,type:"circle"}});const o=await(0,s.YJ)(e);await g.bind({url:o})}catch(e){r.eM&&console.error(e)}}(t):async function(){return p||(p=Promise.all([n.e(99),n.e(472)]).then(n.bind(n,3472)),m=(await p).default),p}().then((()=>Z(!0))))}),[t,f]);const v=(0,l.Z)();return a.ZP.createElement(c.Z,{isOpen:Boolean(t),onClose:h,title:"Drag to reposition",className:"CropModal",hasCloseButton:!0},f?a.ZP.createElement("div",{id:"avatar-crop"}):a.ZP.createElement(d.Z,null),a.ZP.createElement(i.Z,{className:"confirm-button",round:!0,color:"primary",onClick:async function(){if(!g)return;const e=await g.result(u),t="string"==typeof e?e:(0,s.hl)(e,"avatar.jpg");o(t)},ariaLabel:v("CropImage")},a.ZP.createElement("i",{className:"icon-check"})))})),f=(0,a.X$)((e=>{let{title:t="Change your profile picture",disabled:n,currentAvatarBlobUrl:r,onChange:s}=e;const[l,i]=(0,a.eJ)(),[c,d]=(0,a.eJ)(r);(0,a.d4)((()=>{d(r)}),[r]);const u=(0,o.Z)(c&&"filled",n&&"disabled");return a.ZP.createElement("div",{className:"AvatarEditable"},a.ZP.createElement("label",{className:u,role:"button",tabIndex:0,title:t},a.ZP.createElement("input",{type:"file",onChange:function(e){const t=e.target;t&&t.files&&t.files[0]&&(i(t.files[0]),t.value="")},accept:"image/png, image/jpeg"}),a.ZP.createElement("i",{className:"icon-camera-add"}),c&&a.ZP.createElement("img",{src:c,alt:"Avatar"})),a.ZP.createElement(h,{file:l,onClose:function(){i(void 0)},onChange:function(e){i(void 0),s(e),c&&URL.revokeObjectURL(c),d(URL.createObjectURL(e))}}))}))},3103:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(4050),o=n(517),r=n(6752),s=n(8674),l=n(1212),i=n(274),c=n(9107),d=n(6590),u=n(231),m=n(2898);const p=e=>{let{dialogRef:t,title:n,className:p,isOpen:g,header:h,hasCloseButton:f,noBackdrop:Z,children:v,onClose:b,onCloseAnimationEnd:P,onEnter:E,shouldSkipHistoryAnimations:y}=e;const{shouldRender:w,transitionClassNames:k}=(0,l.Z)(g,P,y,void 0,y),N=(0,a.sO)(null);(0,a.d4)((()=>g?(0,o.Z)({onEsc:b,onEnter:E}):void 0),[g,b,E]),(0,a.d4)((()=>g&&N.current?function(e){function t(t){if("Tab"!==t.key)return;t.preventDefault(),t.stopPropagation();const n=Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));if(!n.length)return;const a=n.findIndex((e=>e.isSameNode(document.activeElement)));let o=0;a>=0&&(o=t.shiftKey?a>0?a-1:n.length-1:a{document.removeEventListener("keydown",t,!1)}}(N.current):void 0),[g]);const{forceClose:C}=(0,d.ZP)(g,b);(0,a.d4)((()=>()=>{g&&C()}),[]),(0,i.Z)((e=>{let[t]=e;return document.body.classList.toggle("has-open-dialog",g),(g||!g&&void 0!==t)&&(0,s.YW)(200),()=>{document.body.classList.remove("has-open-dialog")}}),[g]);const L=(0,c.Z)();if(!w)return;const x=(0,r.Z)("Modal",p,k,Z&&"transparent-backdrop");return a.ZP.createElement(m.Z,null,a.ZP.createElement("div",{ref:N,className:x,tabIndex:-1,role:"dialog"},a.ZP.createElement("div",{className:"modal-container"},a.ZP.createElement("div",{className:"modal-backdrop",onClick:b}),a.ZP.createElement("div",{className:"modal-dialog",ref:t},h||(n?a.ZP.createElement("div",{className:"modal-header"},f&&a.ZP.createElement(u.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:L("Close"),onClick:b},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},n)):void 0),a.ZP.createElement("div",{className:"modal-content custom-scroll"},v)))))}},2898:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050),o=n(2916);const r=e=>{let{containerId:t,className:n,children:r}=e;const s=(0,a.sO)();return s.current||(s.current=document.createElement("div")),(0,a.bt)((()=>{const e=document.querySelector(t||"#portals");if(!e)return;const a=s.current;return n&&a.classList.add(n),e.appendChild(a),()=>{o.Z.render(void 0,a),e.removeChild(a)}}),[n,t]),o.Z.render(r,s.current)}},5332:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050);function o(e,t){(0,a.d4)((()=>(e&&!document.hasFocus()&&e(),e&&window.addEventListener("blur",e),t&&window.addEventListener("focus",t),()=>{t&&window.removeEventListener("focus",t),e&&window.removeEventListener("blur",e)})),[e,t])}},1879:(e,t,n)=>{e.exports=n.p+"Cumshot.7a17984a6b80787dab34..tgs"},5435:(e,t,n)=>{e.exports=n.p+"Eggplant.7693d877087b802d04be..tgs"},3677:(e,t,n)=>{e.exports=n.p+"Peach.a289b2c54c563f11208f..tgs"},5665:(e,t,n)=>{e.exports=n.p+"CameraFlip.1a9fe44cf01fcb22347d..tgs"},2456:(e,t,n)=>{e.exports=n.p+"HandFilled.f87939d160f1dc288586..tgs"},5667:(e,t,n)=>{e.exports=n.p+"HandOutline.f9831751ba60df30c484..tgs"},8763:(e,t,n)=>{e.exports=n.p+"Speaker.04bb3743412b41ff83c5..tgs"},401:(e,t,n)=>{e.exports=n.p+"VoiceAllowTalk.a9cc7c39ec438973ddc9..tgs"},5106:(e,t,n)=>{e.exports=n.p+"VoiceMini.bf00ffdf69625c579569..tgs"},487:(e,t,n)=>{e.exports=n.p+"VoiceMuted.a4b4ec6bfd7c6c5fb275..tgs"},5740:(e,t,n)=>{e.exports=n.p+"VoiceOutlined.91b394ab3562cdfad6bc..tgs"},7879:(e,t,n)=>{e.exports=n.p+"Invite.4502ec3aa4249d6e6723..tgs"},5095:(e,t,n)=>{e.exports=n.p+"Requests.af9f19772695a8898810..tgs"},6257:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyClose.604c4c833d322b7e6c3e..tgs"},8760:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyIdle.dea4a492c144df84ddab..tgs"},7785:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyPeek.1905436b042520363d7e..tgs"},6917:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyTracking.eb5a7a6f166fb7589c12..tgs"},6978:(e,t,n)=>{e.exports=n.p+"DiscussionGroupsDucks.9ea453d1be9d1b0ee77a..tgs"},9356:(e,t,n)=>{e.exports=n.p+"FoldersAll.3f9f9e243d19f0fbf9aa..tgs"},5485:(e,t,n)=>{e.exports=n.p+"FoldersNew.9a40d71c0c8be70f5bd1..tgs"}}]); -//# sourceMappingURL=133.7825bcf69db105db21d4.js.map \ No newline at end of file +//# sourceMappingURL=133.f664a3ff1ab968ba12a0.js.map \ No newline at end of file diff --git a/dist/133.7825bcf69db105db21d4.js.map b/dist/133.f664a3ff1ab968ba12a0.js.map similarity index 99% rename from dist/133.7825bcf69db105db21d4.js.map rename to dist/133.f664a3ff1ab968ba12a0.js.map index 3c13371ad..bf6f9c034 100644 --- a/dist/133.7825bcf69db105db21d4.js.map +++ b/dist/133.f664a3ff1ab968ba12a0.js.map @@ -1 +1 @@ -{"version":3,"file":"133.7825bcf69db105db21d4.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/TrackingMonkey.tsx","webpack://telegram-t/./src/components/auth/AuthCode.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.tsx","webpack://telegram-t/./src/components/common/AnimatedSticker.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/common/helpers/animatedAssets.ts","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts","webpack://telegram-t/./src/hooks/useBackgroundMode.ts"],"sourcesContent":["import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n code: string;\n codeLength: number;\n trackingDirection: number;\n isTracking: boolean;\n isBig?: boolean;\n};\n\nconst TRACKING_START_FRAME = 15;\nconst TRACKING_END_FRAME = 180;\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst TrackingMonkey: FC = ({\n code,\n codeLength,\n trackingDirection,\n isTracking,\n isBig,\n}) => {\n const [idleMonkeyData, setIdleMonkeyData] = useState();\n const [trackingMonkeyData, setTrackingMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const TRACKING_FRAMES_PER_SYMBOL = (TRACKING_END_FRAME - TRACKING_START_FRAME) / codeLength;\n\n useEffect(() => {\n if (!idleMonkeyData) {\n getAnimationData('MonkeyIdle').then(setIdleMonkeyData);\n }\n }, [idleMonkeyData]);\n\n useEffect(() => {\n if (!trackingMonkeyData) {\n getAnimationData('MonkeyTracking').then(setTrackingMonkeyData);\n }\n }, [trackingMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n function getTrackingFrames(): [number, number] {\n const startFrame = (code && code.length > 1) || trackingDirection < 0\n ? TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * (code.length - 1)\n : 0;\n const endFrame = code.length === codeLength\n ? TRACKING_END_FRAME\n : TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * code.length;\n\n if (trackingDirection < 1) {\n return [\n endFrame,\n startFrame,\n ];\n }\n\n return [\n startFrame,\n endFrame,\n ];\n }\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {idleMonkeyData && (\n \n )}\n {trackingMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(TrackingMonkey);\n","import { FormEvent } from 'react';\nimport React, {\n FC, useState, useEffect, useCallback, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\nimport { GlobalState } from '../../global/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport TrackingMonkey from '../common/TrackingMonkey';\n\ntype StateProps = Pick;\n\nconst CODE_LENGTH = 5;\n\nconst AuthCode: FC = ({\n authPhoneNumber,\n authIsCodeViaApp,\n authIsLoading,\n authError,\n}) => {\n const {\n setAuthCode,\n returnToAuthPhoneNumber,\n clearAuthError,\n } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [code, setCode] = useState('');\n const [isTracking, setIsTracking] = useState(false);\n const [trackingDirection, setTrackingDirection] = useState(1);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, []);\n\n useHistoryBack(true, returnToAuthPhoneNumber);\n\n const onCodeChange = useCallback((e: FormEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n const { currentTarget: target } = e;\n target.value = target.value.replace(/[^\\d]+/, '').substr(0, CODE_LENGTH);\n\n if (target.value === code) {\n return;\n }\n\n setCode(target.value);\n\n if (!isTracking) {\n setIsTracking(true);\n } else if (!target.value.length) {\n setIsTracking(false);\n }\n\n if (code && code.length > target.value.length) {\n setTrackingDirection(-1);\n } else {\n setTrackingDirection(1);\n }\n\n if (target.value.length === CODE_LENGTH) {\n setAuthCode({ code: target.value });\n }\n }, [authError, clearAuthError, code, isTracking, setAuthCode]);\n\n return (\n
\n
\n \n

\n {authPhoneNumber}\n \n \n

\n \n

\n {renderText(lang(authIsCodeViaApp ? 'SentAppCode' : 'Login.JustSentSms'), ['simple_markdown'])}\n

\n \n {authIsLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authPhoneNumber', 'authIsCodeViaApp', 'authIsLoading', 'authError']),\n)(AuthCode));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport MonkeyPassword from '../common/PasswordMonkey';\nimport PasswordForm from '../common/PasswordForm';\n\ntype StateProps = Pick;\n\nconst AuthPassword: FC = ({\n authIsLoading, authError, authHint,\n}) => {\n const { setAuthPassword, clearAuthError } = getDispatch();\n\n const lang = useLang();\n const [showPassword, setShowPassword] = useState(false);\n\n const handleChangePasswordVisibility = useCallback((isVisible) => {\n setShowPassword(isVisible);\n }, []);\n\n const handleSubmit = useCallback((password: string) => {\n setAuthPassword({ password });\n }, [setAuthPassword]);\n\n return (\n
\n
\n \n

{lang('Login.Header.Password')}

\n

{lang('Login.EnterPasswordDescription')}

\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError', 'authHint']),\n)(AuthPassword));\n","import { ChangeEvent } from 'react';\nimport React, { FC, useState, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport InputText from '../ui/InputText';\nimport AvatarEditable from '../ui/AvatarEditable';\n\ntype StateProps = Pick;\n\nconst AuthRegister: FC = ({\n authIsLoading, authError,\n}) => {\n const { signUp, clearAuthError, uploadProfilePhoto } = getDispatch();\n\n const lang = useLang();\n const [isButtonShown, setIsButtonShown] = useState(false);\n const [croppedFile, setCroppedFile] = useState();\n const [firstName, setFirstName] = useState('');\n const [lastName, setLastName] = useState('');\n\n function handleFirstNameChange(event: ChangeEvent) {\n if (authError) {\n clearAuthError();\n }\n\n const { target } = event;\n\n setFirstName(target.value);\n setIsButtonShown(target.value.length > 0);\n }\n\n function handleLastNameChange(event: ChangeEvent) {\n const { target } = event;\n\n setLastName(target.value);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n signUp({ firstName, lastName });\n\n if (croppedFile) {\n uploadProfilePhoto({ file: croppedFile });\n }\n }\n\n return (\n
\n
\n
\n \n

{lang('YourName')}

\n

{lang('Login.Register.Desc')}

\n \n \n {isButtonShown && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError']),\n)(AuthRegister));\n","import React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useHeavyAnimationCheck from '../../hooks/useHeavyAnimationCheck';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\n\ntype OwnProps = {\n className?: string;\n id: string;\n animationData?: string;\n play?: boolean | string;\n playSegment?: [number, number];\n speed?: number;\n noLoop?: boolean;\n size: number;\n quality?: number;\n isLowPriority?: boolean;\n onLoad?: NoneToVoidFunction;\n forceOnHeavyAnimation?: boolean;\n color?: [number, number, number];\n onEnded?: NoneToVoidFunction;\n};\n\ntype RLottieClass = typeof import('../../lib/rlottie/RLottie').default;\ntype RLottieInstance = import('../../lib/rlottie/RLottie').default;\nlet lottiePromise: Promise;\nlet RLottie: RLottieClass;\n\n// Time for the main interface to completely load\nconst LOTTIE_LOAD_DELAY = 3000;\n\nasync function ensureLottie() {\n if (!lottiePromise) {\n lottiePromise = import('../../lib/rlottie/RLottie') as unknown as Promise;\n RLottie = (await lottiePromise as any).default;\n }\n\n return lottiePromise;\n}\n\nsetTimeout(ensureLottie, LOTTIE_LOAD_DELAY);\n\nconst AnimatedSticker: FC = ({\n className,\n id,\n animationData,\n play,\n playSegment,\n speed,\n noLoop,\n size,\n quality,\n isLowPriority,\n color,\n forceOnHeavyAnimation,\n onLoad,\n onEnded,\n}) => {\n const [animation, setAnimation] = useState();\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n const wasPlaying = useRef(false);\n const isFrozen = useRef(false);\n const isFirstRender = useRef(true);\n\n const playRef = useRef();\n playRef.current = play;\n const playSegmentRef = useRef<[number, number]>();\n playSegmentRef.current = playSegment;\n\n useEffect(() => {\n if (animation || !animationData) {\n return;\n }\n\n const exec = () => {\n if (!container.current) {\n return;\n }\n\n const newAnimation = new RLottie(\n id,\n container.current,\n animationData,\n {\n noLoop,\n size,\n quality,\n isLowPriority,\n },\n onLoad,\n color,\n onEnded,\n );\n\n if (speed) {\n newAnimation.setSpeed(speed);\n }\n\n setAnimation(newAnimation);\n };\n\n if (RLottie) {\n exec();\n } else {\n ensureLottie().then(() => {\n fastRaf(() => {\n if (container.current) {\n exec();\n }\n });\n });\n }\n }, [color, animation, animationData, id, isLowPriority, noLoop, onLoad, quality, size, speed, onEnded]);\n\n useEffect(() => {\n if (!animation) return;\n\n animation.setColor(color);\n }, [color, animation]);\n\n useEffect(() => {\n return () => {\n if (animation) {\n animation.destroy();\n }\n };\n }, [animation]);\n\n const playAnimation = useCallback((shouldRestart = false) => {\n if (animation && (playRef.current || playSegmentRef.current)) {\n if (playSegmentRef.current) {\n animation.playSegment(playSegmentRef.current);\n } else if (shouldRestart) {\n animation.goToAndPlay(0);\n } else {\n animation.play();\n }\n }\n }, [animation]);\n\n const pauseAnimation = useCallback(() => {\n if (!animation) {\n return;\n }\n\n animation.pause();\n }, [animation]);\n\n const freezeAnimation = useCallback(() => {\n isFrozen.current = true;\n\n if (!animation) {\n return;\n }\n\n if (!wasPlaying.current) {\n wasPlaying.current = animation.isPlaying();\n }\n\n pauseAnimation();\n }, [animation, pauseAnimation]);\n\n const unfreezeAnimation = useCallback(() => {\n if (wasPlaying.current) {\n playAnimation();\n }\n\n wasPlaying.current = false;\n isFrozen.current = false;\n }, [playAnimation]);\n\n const unfreezeAnimationOnRaf = useCallback(() => {\n fastRaf(unfreezeAnimation);\n }, [unfreezeAnimation]);\n\n useEffect(() => {\n if (!animation) {\n return;\n }\n\n if (play || playSegment) {\n if (isFrozen.current) {\n wasPlaying.current = true;\n } else {\n playAnimation(noLoop);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isFrozen.current) {\n wasPlaying.current = false;\n } else {\n pauseAnimation();\n }\n }\n }, [animation, play, playSegment, noLoop, playAnimation, pauseAnimation]);\n\n useEffect(() => {\n if (animation) {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else if (animationData) {\n animation.changeData(animationData);\n playAnimation();\n }\n }\n }, [playAnimation, animation, animationData]);\n\n useHeavyAnimationCheck(freezeAnimation, unfreezeAnimation, forceOnHeavyAnimation);\n // Pausing frame may not happen in background\n // so we need to make sure it happens right after focusing,\n // then we can play again.\n useBackgroundMode(freezeAnimation, unfreezeAnimationOnRaf);\n\n const fullClassName = buildClassName('AnimatedSticker', className);\n\n const style = size ? `width: ${size}px; height: ${size}px;` : undefined;\n\n return (\n \n );\n};\n\nexport default memo(AnimatedSticker);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n
\n
\n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import { ApiMediaFormat } from '../../../api/types';\n\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nimport MonkeyIdle from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyIdle.tgs';\nimport MonkeyTracking from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyTracking.tgs';\nimport MonkeyClose from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyClose.tgs';\nimport MonkeyPeek from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyPeek.tgs';\n\nimport FoldersAll from '../../../assets/tgs/settings/FoldersAll.tgs';\nimport FoldersNew from '../../../assets/tgs/settings/FoldersNew.tgs';\nimport DiscussionGroups from '../../../assets/tgs/settings/DiscussionGroupsDucks.tgs';\n\nimport CameraFlip from '../../../assets/tgs/calls/CameraFlip.tgs';\nimport HandFilled from '../../../assets/tgs/calls/HandFilled.tgs';\nimport HandOutline from '../../../assets/tgs/calls/HandOutline.tgs';\nimport Speaker from '../../../assets/tgs/calls/Speaker.tgs';\nimport VoiceAllowTalk from '../../../assets/tgs/calls/VoiceAllowTalk.tgs';\nimport VoiceMini from '../../../assets/tgs/calls/VoiceMini.tgs';\nimport VoiceMuted from '../../../assets/tgs/calls/VoiceMuted.tgs';\nimport VoiceOutlined from '../../../assets/tgs/calls/VoiceOutlined.tgs';\n\nimport Peach from '../../../assets/tgs/animatedEmojis/Peach.tgs';\nimport Eggplant from '../../../assets/tgs/animatedEmojis/Eggplant.tgs';\nimport Cumshot from '../../../assets/tgs/animatedEmojis/Cumshot.tgs';\n\nimport JoinRequest from '../../../assets/tgs/invites/Requests.tgs';\nimport Invite from '../../../assets/tgs/invites/Invite.tgs';\n\nexport const ANIMATED_STICKERS_PATHS = {\n MonkeyIdle,\n MonkeyTracking,\n MonkeyClose,\n MonkeyPeek,\n FoldersAll,\n FoldersNew,\n DiscussionGroups,\n CameraFlip,\n HandFilled,\n HandOutline,\n Speaker,\n VoiceAllowTalk,\n VoiceMini,\n VoiceMuted,\n VoiceOutlined,\n Peach,\n Eggplant,\n Cumshot,\n JoinRequest,\n Invite,\n};\n\nexport default function getAnimationData(name: keyof typeof ANIMATED_STICKERS_PATHS) {\n const path = ANIMATED_STICKERS_PATHS[name].replace(window.location.origin, '');\n\n return mediaLoader.fetch(`file${path}`, ApiMediaFormat.Lottie);\n}\n","import React, {\n FC, useEffect, useState, memo,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n async function handleCropClick() {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n function handleAvatarCrop(croppedImg: File) {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }\n\n function handleModalClose() {\n setSelectedFile(undefined);\n }\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: any;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import { FC, useRef, useLayoutEffect } from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: any;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children, elementRef.current);\n};\n\nexport default Portal;\n","import { useEffect } from '../lib/teact/teact';\n\nexport default function useBackgroundMode(\n onBlur?: AnyToVoidFunction,\n onFocus?: AnyToVoidFunction,\n) {\n useEffect(() => {\n if (onBlur && !document.hasFocus()) {\n onBlur();\n }\n\n if (onBlur) {\n window.addEventListener('blur', onBlur);\n }\n\n if (onFocus) {\n window.addEventListener('focus', onFocus);\n }\n\n return () => {\n if (onFocus) {\n window.removeEventListener('focus', onFocus);\n }\n\n if (onBlur) {\n window.removeEventListener('blur', onBlur);\n }\n };\n }, [onBlur, onFocus]);\n}\n"],"names":["STICKER_SIZE","IS_SINGLE_COLUMN_LAYOUT","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","memo","code","codeLength","trackingDirection","isTracking","isBig","idleMonkeyData","setIdleMonkeyData","useState","trackingMonkeyData","setTrackingMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","TRACKING_FRAMES_PER_SYMBOL","useEffect","getAnimationData","then","handleFirstMonkeyLoad","useCallback","id","className","AnimatedSticker","size","STICKER_SIZE_TWO_FA","undefined","animationData","play","onLoad","playSegment","startFrame","length","endFrame","getTrackingFrames","speed","noLoop","withGlobal","global","pick","authPhoneNumber","authIsCodeViaApp","authIsLoading","authError","setAuthCode","returnToAuthPhoneNumber","clearAuthError","getDispatch","lang","useLang","inputRef","useRef","setCode","setIsTracking","setTrackingDirection","IS_TOUCH_ENV","current","focus","useHistoryBack","onCodeChange","e","currentTarget","target","value","replace","substr","onClick","role","tabIndex","title","renderText","InputText","ref","label","onInput","error","autoComplete","inputMode","Loading","authHint","setAuthPassword","showPassword","setShowPassword","handleChangePasswordVisibility","isVisible","handleSubmit","password","isPasswordVisible","PasswordForm","clearError","hint","isLoading","onChangePasswordVisibility","onSubmit","signUp","uploadProfilePhoto","isButtonShown","setIsButtonShown","croppedFile","setCroppedFile","firstName","setFirstName","lastName","setLastName","action","method","event","preventDefault","file","AvatarEditable","onChange","Button","type","ripple","lottiePromise","RLottie","async","ensureLottie","default","setTimeout","quality","isLowPriority","color","forceOnHeavyAnimation","onEnded","animation","setAnimation","container","wasPlaying","isFrozen","isFirstRender","playRef","playSegmentRef","exec","newAnimation","setSpeed","fastRaf","setColor","destroy","playAnimation","shouldRestart","goToAndPlay","pauseAnimation","pause","freezeAnimation","isPlaying","unfreezeAnimation","unfreezeAnimationOnRaf","changeData","useHeavyAnimationCheck","useBackgroundMode","fullClassName","buildClassName","style","FOCUS_DELAY_TIMEOUT_MS","placeholder","submitLabel","onInputChange","setPassword","canSubmit","setCanSubmit","requestAnimationFrame","select","dir","isRtl","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isPeekShown","setIsPeekShown","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","Peach","Eggplant","Cumshot","JoinRequest","Invite","name","path","window","location","origin","mediaLoader","ApiMediaFormat","cropperResultOptions","format","circle","width","height","Croppie","croppiePromise","cropper","onClose","isCroppieReady","setIsCroppieReady","imgFile","cropContainer","document","getElementById","offsetWidth","offsetHeight","enableZoom","boundary","viewport","dataUri","blobToDataUri","bind","url","err","DEBUG","console","initCropper","ensureCroppie","Modal","isOpen","Boolean","hasCloseButton","round","result","croppedImg","blobToFile","ariaLabel","disabled","currentAvatarBlobUrl","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","labelClassName","files","accept","src","alt","URL","revokeObjectURL","createObjectURL","dialogRef","header","noBackdrop","children","onCloseAnimationEnd","onEnter","shouldSkipHistoryAnimations","shouldRender","transitionClassNames","useShowTransition","modalRef","captureKeyboardListeners","onEsc","element","handleKeyDown","key","stopPropagation","focusableElements","Array","from","querySelectorAll","currentFocusedIndex","findIndex","em","isSameNode","activeElement","newFocusedIndex","shiftKey","addEventListener","removeEventListener","trapFocus","forceClose","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","Portal","containerId","elementRef","createElement","useLayoutEffect","querySelector","add","appendChild","TeactDOM","removeChild","onBlur","onFocus","hasFocus"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"133.f664a3ff1ab968ba12a0.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/TrackingMonkey.tsx","webpack://telegram-t/./src/components/auth/AuthCode.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.tsx","webpack://telegram-t/./src/components/common/AnimatedSticker.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/common/helpers/animatedAssets.ts","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts","webpack://telegram-t/./src/hooks/useBackgroundMode.ts"],"sourcesContent":["import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n code: string;\n codeLength: number;\n trackingDirection: number;\n isTracking: boolean;\n isBig?: boolean;\n};\n\nconst TRACKING_START_FRAME = 15;\nconst TRACKING_END_FRAME = 180;\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst TrackingMonkey: FC = ({\n code,\n codeLength,\n trackingDirection,\n isTracking,\n isBig,\n}) => {\n const [idleMonkeyData, setIdleMonkeyData] = useState();\n const [trackingMonkeyData, setTrackingMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const TRACKING_FRAMES_PER_SYMBOL = (TRACKING_END_FRAME - TRACKING_START_FRAME) / codeLength;\n\n useEffect(() => {\n if (!idleMonkeyData) {\n getAnimationData('MonkeyIdle').then(setIdleMonkeyData);\n }\n }, [idleMonkeyData]);\n\n useEffect(() => {\n if (!trackingMonkeyData) {\n getAnimationData('MonkeyTracking').then(setTrackingMonkeyData);\n }\n }, [trackingMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n function getTrackingFrames(): [number, number] {\n const startFrame = (code && code.length > 1) || trackingDirection < 0\n ? TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * (code.length - 1)\n : 0;\n const endFrame = code.length === codeLength\n ? TRACKING_END_FRAME\n : TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * code.length;\n\n if (trackingDirection < 1) {\n return [\n endFrame,\n startFrame,\n ];\n }\n\n return [\n startFrame,\n endFrame,\n ];\n }\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {idleMonkeyData && (\n \n )}\n {trackingMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(TrackingMonkey);\n","import { FormEvent } from 'react';\nimport React, {\n FC, useState, useEffect, useCallback, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\nimport { GlobalState } from '../../global/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport TrackingMonkey from '../common/TrackingMonkey';\n\ntype StateProps = Pick;\n\nconst CODE_LENGTH = 5;\n\nconst AuthCode: FC = ({\n authPhoneNumber,\n authIsCodeViaApp,\n authIsLoading,\n authError,\n}) => {\n const {\n setAuthCode,\n returnToAuthPhoneNumber,\n clearAuthError,\n } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [code, setCode] = useState('');\n const [isTracking, setIsTracking] = useState(false);\n const [trackingDirection, setTrackingDirection] = useState(1);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, []);\n\n useHistoryBack(true, returnToAuthPhoneNumber);\n\n const onCodeChange = useCallback((e: FormEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n const { currentTarget: target } = e;\n target.value = target.value.replace(/[^\\d]+/, '').substr(0, CODE_LENGTH);\n\n if (target.value === code) {\n return;\n }\n\n setCode(target.value);\n\n if (!isTracking) {\n setIsTracking(true);\n } else if (!target.value.length) {\n setIsTracking(false);\n }\n\n if (code && code.length > target.value.length) {\n setTrackingDirection(-1);\n } else {\n setTrackingDirection(1);\n }\n\n if (target.value.length === CODE_LENGTH) {\n setAuthCode({ code: target.value });\n }\n }, [authError, clearAuthError, code, isTracking, setAuthCode]);\n\n return (\n
\n
\n \n

\n {authPhoneNumber}\n \n \n

\n \n

\n {renderText(lang(authIsCodeViaApp ? 'SentAppCode' : 'Login.JustSentSms'), ['simple_markdown'])}\n

\n \n {authIsLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authPhoneNumber', 'authIsCodeViaApp', 'authIsLoading', 'authError']),\n)(AuthCode));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport MonkeyPassword from '../common/PasswordMonkey';\nimport PasswordForm from '../common/PasswordForm';\n\ntype StateProps = Pick;\n\nconst AuthPassword: FC = ({\n authIsLoading, authError, authHint,\n}) => {\n const { setAuthPassword, clearAuthError } = getDispatch();\n\n const lang = useLang();\n const [showPassword, setShowPassword] = useState(false);\n\n const handleChangePasswordVisibility = useCallback((isVisible) => {\n setShowPassword(isVisible);\n }, []);\n\n const handleSubmit = useCallback((password: string) => {\n setAuthPassword({ password });\n }, [setAuthPassword]);\n\n return (\n
\n
\n \n

{lang('Login.Header.Password')}

\n

{lang('Login.EnterPasswordDescription')}

\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError', 'authHint']),\n)(AuthPassword));\n","import { ChangeEvent } from 'react';\nimport React, { FC, useState, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport InputText from '../ui/InputText';\nimport AvatarEditable from '../ui/AvatarEditable';\n\ntype StateProps = Pick;\n\nconst AuthRegister: FC = ({\n authIsLoading, authError,\n}) => {\n const { signUp, clearAuthError, uploadProfilePhoto } = getDispatch();\n\n const lang = useLang();\n const [isButtonShown, setIsButtonShown] = useState(false);\n const [croppedFile, setCroppedFile] = useState();\n const [firstName, setFirstName] = useState('');\n const [lastName, setLastName] = useState('');\n\n function handleFirstNameChange(event: ChangeEvent) {\n if (authError) {\n clearAuthError();\n }\n\n const { target } = event;\n\n setFirstName(target.value);\n setIsButtonShown(target.value.length > 0);\n }\n\n function handleLastNameChange(event: ChangeEvent) {\n const { target } = event;\n\n setLastName(target.value);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n signUp({ firstName, lastName });\n\n if (croppedFile) {\n uploadProfilePhoto({ file: croppedFile });\n }\n }\n\n return (\n
\n
\n
\n \n

{lang('YourName')}

\n

{lang('Login.Register.Desc')}

\n \n \n {isButtonShown && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError']),\n)(AuthRegister));\n","import React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useHeavyAnimationCheck from '../../hooks/useHeavyAnimationCheck';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\n\ntype OwnProps = {\n className?: string;\n id: string;\n animationData?: string;\n play?: boolean | string;\n playSegment?: [number, number];\n speed?: number;\n noLoop?: boolean;\n size: number;\n quality?: number;\n isLowPriority?: boolean;\n onLoad?: NoneToVoidFunction;\n forceOnHeavyAnimation?: boolean;\n color?: [number, number, number];\n onEnded?: NoneToVoidFunction;\n};\n\ntype RLottieClass = typeof import('../../lib/rlottie/RLottie').default;\ntype RLottieInstance = import('../../lib/rlottie/RLottie').default;\nlet lottiePromise: Promise;\nlet RLottie: RLottieClass;\n\n// Time for the main interface to completely load\nconst LOTTIE_LOAD_DELAY = 3000;\n\nasync function ensureLottie() {\n if (!lottiePromise) {\n lottiePromise = import('../../lib/rlottie/RLottie') as unknown as Promise;\n RLottie = (await lottiePromise as any).default;\n }\n\n return lottiePromise;\n}\n\nsetTimeout(ensureLottie, LOTTIE_LOAD_DELAY);\n\nconst AnimatedSticker: FC = ({\n className,\n id,\n animationData,\n play,\n playSegment,\n speed,\n noLoop,\n size,\n quality,\n isLowPriority,\n color,\n forceOnHeavyAnimation,\n onLoad,\n onEnded,\n}) => {\n const [animation, setAnimation] = useState();\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n const wasPlaying = useRef(false);\n const isFrozen = useRef(false);\n const isFirstRender = useRef(true);\n\n const playRef = useRef();\n playRef.current = play;\n const playSegmentRef = useRef<[number, number]>();\n playSegmentRef.current = playSegment;\n\n useEffect(() => {\n if (animation || !animationData) {\n return;\n }\n\n const exec = () => {\n if (!container.current) {\n return;\n }\n\n const newAnimation = new RLottie(\n id,\n container.current,\n animationData,\n {\n noLoop,\n size,\n quality,\n isLowPriority,\n },\n onLoad,\n color,\n onEnded,\n );\n\n if (speed) {\n newAnimation.setSpeed(speed);\n }\n\n setAnimation(newAnimation);\n };\n\n if (RLottie) {\n exec();\n } else {\n ensureLottie().then(() => {\n fastRaf(() => {\n if (container.current) {\n exec();\n }\n });\n });\n }\n }, [color, animation, animationData, id, isLowPriority, noLoop, onLoad, quality, size, speed, onEnded]);\n\n useEffect(() => {\n if (!animation) return;\n\n animation.setColor(color);\n }, [color, animation]);\n\n useEffect(() => {\n return () => {\n if (animation) {\n animation.destroy();\n }\n };\n }, [animation]);\n\n const playAnimation = useCallback((shouldRestart = false) => {\n if (animation && (playRef.current || playSegmentRef.current)) {\n if (playSegmentRef.current) {\n animation.playSegment(playSegmentRef.current);\n } else if (shouldRestart) {\n animation.goToAndPlay(0);\n } else {\n animation.play();\n }\n }\n }, [animation]);\n\n const pauseAnimation = useCallback(() => {\n if (!animation) {\n return;\n }\n\n animation.pause();\n }, [animation]);\n\n const freezeAnimation = useCallback(() => {\n isFrozen.current = true;\n\n if (!animation) {\n return;\n }\n\n if (!wasPlaying.current) {\n wasPlaying.current = animation.isPlaying();\n }\n\n pauseAnimation();\n }, [animation, pauseAnimation]);\n\n const unfreezeAnimation = useCallback(() => {\n if (wasPlaying.current) {\n playAnimation();\n }\n\n wasPlaying.current = false;\n isFrozen.current = false;\n }, [playAnimation]);\n\n const unfreezeAnimationOnRaf = useCallback(() => {\n fastRaf(unfreezeAnimation);\n }, [unfreezeAnimation]);\n\n useEffect(() => {\n if (!animation) {\n return;\n }\n\n if (play || playSegment) {\n if (isFrozen.current) {\n wasPlaying.current = true;\n } else {\n playAnimation(noLoop);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isFrozen.current) {\n wasPlaying.current = false;\n } else {\n pauseAnimation();\n }\n }\n }, [animation, play, playSegment, noLoop, playAnimation, pauseAnimation]);\n\n useEffect(() => {\n if (animation) {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else if (animationData) {\n animation.changeData(animationData);\n playAnimation();\n }\n }\n }, [playAnimation, animation, animationData]);\n\n useHeavyAnimationCheck(freezeAnimation, unfreezeAnimation, forceOnHeavyAnimation);\n // Pausing frame may not happen in background\n // so we need to make sure it happens right after focusing,\n // then we can play again.\n useBackgroundMode(freezeAnimation, unfreezeAnimationOnRaf);\n\n const fullClassName = buildClassName('AnimatedSticker', className);\n\n const style = size ? `width: ${size}px; height: ${size}px;` : undefined;\n\n return (\n \n );\n};\n\nexport default memo(AnimatedSticker);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n
\n
\n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import { ApiMediaFormat } from '../../../api/types';\n\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nimport MonkeyIdle from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyIdle.tgs';\nimport MonkeyTracking from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyTracking.tgs';\nimport MonkeyClose from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyClose.tgs';\nimport MonkeyPeek from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyPeek.tgs';\n\nimport FoldersAll from '../../../assets/tgs/settings/FoldersAll.tgs';\nimport FoldersNew from '../../../assets/tgs/settings/FoldersNew.tgs';\nimport DiscussionGroups from '../../../assets/tgs/settings/DiscussionGroupsDucks.tgs';\n\nimport CameraFlip from '../../../assets/tgs/calls/CameraFlip.tgs';\nimport HandFilled from '../../../assets/tgs/calls/HandFilled.tgs';\nimport HandOutline from '../../../assets/tgs/calls/HandOutline.tgs';\nimport Speaker from '../../../assets/tgs/calls/Speaker.tgs';\nimport VoiceAllowTalk from '../../../assets/tgs/calls/VoiceAllowTalk.tgs';\nimport VoiceMini from '../../../assets/tgs/calls/VoiceMini.tgs';\nimport VoiceMuted from '../../../assets/tgs/calls/VoiceMuted.tgs';\nimport VoiceOutlined from '../../../assets/tgs/calls/VoiceOutlined.tgs';\n\nimport Peach from '../../../assets/tgs/animatedEmojis/Peach.tgs';\nimport Eggplant from '../../../assets/tgs/animatedEmojis/Eggplant.tgs';\nimport Cumshot from '../../../assets/tgs/animatedEmojis/Cumshot.tgs';\n\nimport JoinRequest from '../../../assets/tgs/invites/Requests.tgs';\nimport Invite from '../../../assets/tgs/invites/Invite.tgs';\n\nexport const ANIMATED_STICKERS_PATHS = {\n MonkeyIdle,\n MonkeyTracking,\n MonkeyClose,\n MonkeyPeek,\n FoldersAll,\n FoldersNew,\n DiscussionGroups,\n CameraFlip,\n HandFilled,\n HandOutline,\n Speaker,\n VoiceAllowTalk,\n VoiceMini,\n VoiceMuted,\n VoiceOutlined,\n Peach,\n Eggplant,\n Cumshot,\n JoinRequest,\n Invite,\n};\n\nexport default function getAnimationData(name: keyof typeof ANIMATED_STICKERS_PATHS) {\n const path = ANIMATED_STICKERS_PATHS[name].replace(window.location.origin, '');\n\n return mediaLoader.fetch(`file${path}`, ApiMediaFormat.Lottie);\n}\n","import React, {\n FC, useEffect, useState, memo,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n async function handleCropClick() {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n function handleAvatarCrop(croppedImg: File) {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }\n\n function handleModalClose() {\n setSelectedFile(undefined);\n }\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: any;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import { FC, useRef, useLayoutEffect } from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: any;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children, elementRef.current);\n};\n\nexport default Portal;\n","import { useEffect } from '../lib/teact/teact';\n\nexport default function useBackgroundMode(\n onBlur?: AnyToVoidFunction,\n onFocus?: AnyToVoidFunction,\n) {\n useEffect(() => {\n if (onBlur && !document.hasFocus()) {\n onBlur();\n }\n\n if (onBlur) {\n window.addEventListener('blur', onBlur);\n }\n\n if (onFocus) {\n window.addEventListener('focus', onFocus);\n }\n\n return () => {\n if (onFocus) {\n window.removeEventListener('focus', onFocus);\n }\n\n if (onBlur) {\n window.removeEventListener('blur', onBlur);\n }\n };\n }, [onBlur, onFocus]);\n}\n"],"names":["STICKER_SIZE","IS_SINGLE_COLUMN_LAYOUT","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","memo","code","codeLength","trackingDirection","isTracking","isBig","idleMonkeyData","setIdleMonkeyData","useState","trackingMonkeyData","setTrackingMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","TRACKING_FRAMES_PER_SYMBOL","useEffect","getAnimationData","then","handleFirstMonkeyLoad","useCallback","id","className","AnimatedSticker","size","STICKER_SIZE_TWO_FA","undefined","animationData","play","onLoad","playSegment","startFrame","length","endFrame","getTrackingFrames","speed","noLoop","withGlobal","global","pick","authPhoneNumber","authIsCodeViaApp","authIsLoading","authError","setAuthCode","returnToAuthPhoneNumber","clearAuthError","getDispatch","lang","useLang","inputRef","useRef","setCode","setIsTracking","setTrackingDirection","IS_TOUCH_ENV","current","focus","useHistoryBack","onCodeChange","e","currentTarget","target","value","replace","substr","onClick","role","tabIndex","title","renderText","InputText","ref","label","onInput","error","autoComplete","inputMode","Loading","authHint","setAuthPassword","showPassword","setShowPassword","handleChangePasswordVisibility","isVisible","handleSubmit","password","isPasswordVisible","PasswordForm","clearError","hint","isLoading","onChangePasswordVisibility","onSubmit","signUp","uploadProfilePhoto","isButtonShown","setIsButtonShown","croppedFile","setCroppedFile","firstName","setFirstName","lastName","setLastName","action","method","event","preventDefault","file","AvatarEditable","onChange","Button","type","ripple","lottiePromise","RLottie","async","ensureLottie","default","setTimeout","quality","isLowPriority","color","forceOnHeavyAnimation","onEnded","animation","setAnimation","container","wasPlaying","isFrozen","isFirstRender","playRef","playSegmentRef","exec","newAnimation","setSpeed","fastRaf","setColor","destroy","playAnimation","shouldRestart","goToAndPlay","pauseAnimation","pause","freezeAnimation","isPlaying","unfreezeAnimation","unfreezeAnimationOnRaf","changeData","useHeavyAnimationCheck","useBackgroundMode","fullClassName","buildClassName","style","FOCUS_DELAY_TIMEOUT_MS","placeholder","submitLabel","onInputChange","setPassword","canSubmit","setCanSubmit","requestAnimationFrame","select","dir","isRtl","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isPeekShown","setIsPeekShown","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","Peach","Eggplant","Cumshot","JoinRequest","Invite","name","path","window","location","origin","mediaLoader","ApiMediaFormat","cropperResultOptions","format","circle","width","height","Croppie","croppiePromise","cropper","onClose","isCroppieReady","setIsCroppieReady","imgFile","cropContainer","document","getElementById","offsetWidth","offsetHeight","enableZoom","boundary","viewport","dataUri","blobToDataUri","bind","url","err","DEBUG","console","initCropper","ensureCroppie","Modal","isOpen","Boolean","hasCloseButton","round","result","croppedImg","blobToFile","ariaLabel","disabled","currentAvatarBlobUrl","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","labelClassName","files","accept","src","alt","URL","revokeObjectURL","createObjectURL","dialogRef","header","noBackdrop","children","onCloseAnimationEnd","onEnter","shouldSkipHistoryAnimations","shouldRender","transitionClassNames","useShowTransition","modalRef","captureKeyboardListeners","onEsc","element","handleKeyDown","key","stopPropagation","focusableElements","Array","from","querySelectorAll","currentFocusedIndex","findIndex","em","isSameNode","activeElement","newFocusedIndex","shiftKey","addEventListener","removeEventListener","trapFocus","forceClose","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","Portal","containerId","elementRef","createElement","useLayoutEffect","querySelector","add","appendChild","TeactDOM","removeChild","onBlur","onFocus","hasFocus"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/302.1d8fb1e8ea7f52fb7236.js b/dist/302.fde2dcaf1124227a1d9e.js similarity index 99% rename from dist/302.1d8fb1e8ea7f52fb7236.js rename to dist/302.fde2dcaf1124227a1d9e.js index f8fd2bf9f..ae10c39ac 100644 --- a/dist/302.1d8fb1e8ea7f52fb7236.js +++ b/dist/302.fde2dcaf1124227a1d9e.js @@ -1,2 +1,2 @@ "use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[302],{2275:(t,e,a)=>{a.d(e,{Z:()=>h});var s=a(4050),n=a(5116),o=a(9066),i=a(8415),d=a(2340),r=a(9107),c=a(3103),l=a(231);const h=(0,s.X$)((0,n.c$)(((t,e)=>{let{userId:a}=e;const s=(0,o.jr)(t),n=a&&(0,o.dy)(t,a);return{chat:s,contactName:n?(0,i.Vl)(n):void 0}}))((t=>{let{isOpen:e,chat:a,userId:o,contactName:i,onClose:h}=t;const{deleteChatMember:u}=(0,n.uC)(),p=(0,r.Z)(),f=(0,s.I4)((()=>{u({chatId:a.id,userId:o}),h()}),[a,u,h,o]);if(a&&o)return s.ZP.createElement(c.Z,{isOpen:e,onClose:h,onEnter:f,className:"delete",title:p("GroupRemoved.Remove")},s.ZP.createElement("p",null,(0,d.Z)(p("PeerInfo.Confirm.RemovePeer",i))),s.ZP.createElement(l.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:f},p("lng_box_remove")),s.ZP.createElement(l.Z,{className:"confirm-dialog-button",isText:!0,onClick:h},p("Cancel")))})))},6204:(t,e,a)=>{a.d(e,{f:()=>y,C:()=>b});var s=a(5116),n=a(6137),o=a(1713),i=a(3716),d=a(1226),r=a(9959),c=a(9066),l=a(782),h=a(9118),u=a(8415),p=a(3551),f=a(4446),C=a(2607),I=a(6974);const m=(0,h.P2)((t=>t()),3e3,!0),g=(0,h.Ds)((t=>t()),500,!1,!0);async function v(t,e,a){var o;let h=arguments.length>3&&void 0!==arguments[3]&&arguments[3],u=(0,s.Rd)();const p=await(0,d.t9)("fetchChats",{limit:i.Ov,offsetDate:a,archived:"archived"===t,withPinned:h,serverTimeOffset:u.serverTimeOffset,lastLocalServiceMessage:null===(o=(0,c.VF)(u))||void 0===o?void 0:o.message});if(!p)return;const{chatIds:f}=p;if(f.length>0&&f[0]===e&&f.shift(),u=(0,s.Rd)(),h&&"active"===t){const e=(0,c.jr)(u),a=e?[e]:[],s=(0,c.P2)(u)||[];u.currentUserId&&u.users.byId[u.currentUserId]&&s.push(u.users.byId[u.currentUserId]),u=(0,r.s5)(u,(0,l.ee)(s.concat(p.users),"id")),u=(0,r.ps)(u,p.userStatusesById),u=(0,r.SL)(u,(0,l.ee)(a.concat(p.chats),"id")),u=(0,r.Mg)(u,t,f)}else h&&"archived"===t?(u=(0,r.Sh)(u,(0,l.ee)(p.users,"id")),u=(0,r.zn)(u,p.userStatusesById),u=(0,r.GL)(u,(0,l.ee)(p.chats,"id")),u=(0,r.Mg)(u,t,f)):(u=(0,r.Sh)(u,(0,l.ee)(p.users,"id")),u=(0,r.zn)(u,p.userStatusesById),u=(0,r.GL)(u,(0,l.ee)(p.chats,"id")),u=(0,r.B1)(u,t,f));u=(0,r.vv)(u,t,p),Object.keys(p.draftsById).forEach((t=>{u=(0,r.pf)(u,t,n._f,"draft",p.draftsById[t])})),Object.keys(p.replyingToById).forEach((t=>{u=(0,r.pf)(u,t,n._f,"replyingToId",p.replyingToById[t])})),0!==f.length||u.chats.isFullyLoaded[t]||(u={...u,chats:{...u.chats,isFullyLoaded:{...u.chats.isFullyLoaded,[t]:!0}}}),(0,s.R3)(u)}async function y(t){const e=await(0,d.t9)("fetchFullChat",t);if(!e)return;const{users:a,fullInfo:n,groupCall:o}=e;let i=(0,s.Rd)();if(a&&(i=(0,r.Sh)(i,(0,l.ee)(a,"id"))),o){const t=(0,C.$5)(i,o.id);i=(0,f.AH)(i,o.id,(0,l.CE)(o,["connectionState"]),void 0,t?void 0:o.participantsCount)}return i=(0,r.a4)(i,t.id,{fullInfo:n}),(0,s.R3)(i),e}async function b(t){const e=(0,s.Rd)(),a=(0,c.DI)(e,t);if(a&&!a.isMin)return a;const n=await(0,d.t9)("getChatByUsername",t);return n?((0,s.R3)((0,r.a4)((0,s.Rd)(),n.id,n)),n):void 0}(0,s.Q6)("preloadTopChatMessages",((t,e)=>{(async()=>{const a=new Set;for(let s=0;st!==s&&!a.has(t)));if(!d)return;a.add(d),e.loadViewportMessages({chatId:d,threadId:n._f})}})()})),(0,s.Q6)("openChat",((t,e,a)=>{const{id:s,threadId:o}=a,{currentUserId:i}=t,r=(0,c.Z1)(t,s);if(null!=r&&r.hasUnreadMark&&e.toggleChatUnread({id:s}),r&&r.lastMessage&&r.lastMessage.threadInfo&&e.requestThreadInfoUpdate({chatId:r.lastMessage.threadInfo.chatId,threadId:r.lastMessage.threadInfo.threadId}),r)(0,u.Hp)(r)&&!r.isMin&&e.requestChatUpdate({chatId:s});else if(s===i)(0,d.t9)("fetchChat",{type:"self"});else{const e=(0,c.dy)(t,s);e&&(0,d.t9)("fetchChat",{type:"user",user:e})}o!==n._f&&((0,c.qS)(t,s,o)||e.requestThreadInfoUpdate({chatId:s,threadId:o}))})),(0,s.Q6)("openLinkedChat",((t,e,a)=>{const{id:s}=a,n=(0,c.Z1)(t,s);n&&(async()=>{var t;const a=await(0,d.t9)("fetchFullChat",n);null!=a&&null!==(t=a.fullInfo)&&void 0!==t&&t.linkedChatId&&e.openChat({id:a.fullInfo.linkedChatId})})()})),(0,s.Q6)("focusMessageInComments",((t,e,a)=>{const{chatId:s,threadId:n,messageId:o}=a,i=(0,c.Z1)(t,s);i&&(async()=>{await(0,d.t9)("requestThreadInfoUpdate",{chat:i,threadId:n})&&e.focusMessage({chatId:s,threadId:n,messageId:o})})()})),(0,s.Q6)("openSupportChat",((t,e)=>{const a=(0,c.P_)(t);a?e.openChat({id:a.id,shouldReplaceHistory:!0}):(e.openChat({id:i.AJ,shouldReplaceHistory:!0}),(async()=>{const t=await(0,d.t9)("fetchChat",{type:"support"});t&&e.openChat({id:t.chatId,shouldReplaceHistory:!0})})())})),(0,s.Q6)("openTipsChat",((t,e,a)=>{const{langCode:s}=a,n="pt-br"===s?"BR":i.Db.includes(s)?s.toUpperCase():"";e.openChatByUsername({username:`${i.vi}${n}`})})),(0,s.Q6)("loadAllChats",((t,e,a)=>{const n=a.listType;let{shouldReplace:o,onReplace:d}=a,r=0;(async()=>{for(;o||!(0,s.Rd)().chats.isFullyLoaded[n];){if(r++>=100)return void(i.eM&&console.error("`actions/loadAllChats`: Infinite loop detected"));if("connectionStateReady"!==(t=(0,s.Rd)()).connectionState||"authorizationStateReady"!==t.authState)return;const e=!o&&t.chats.listIds[n],a=e?e.map((e=>t.chats.byId[e])).filter((e=>Boolean(null==e?void 0:e.lastMessage)&&!(0,c.ep)(t,e.id))).sort(((t,e)=>t.lastMessage.date-e.lastMessage.date))[0]:void 0;await v(n,null==a?void 0:a.id,null==a?void 0:a.lastMessage.date,o),o&&(null==d||d(),o=!1)}})()})),(0,s.Q6)("loadFullChat",((t,e,a)=>{const{chatId:s,force:n}=a,o=(0,c.Z1)(t,s);o&&(n?y(o):g((()=>y(o))))})),(0,s.Q6)("loadTopChats",(()=>{m((()=>v("active")))})),(0,s.Q6)("requestChatUpdate",((t,e,a)=>{var s;const{serverTimeOffset:n}=t,{chatId:o}=a,r=(0,c.Z1)(t,o);r&&(0,d.t9)("requestChatUpdate",{chat:r,serverTimeOffset:n,...o===i.aw&&{lastLocalMessage:null===(s=(0,c.VF)(t))||void 0===s?void 0:s.message}})})),(0,s.Q6)("updateChatMutedState",((t,e,a)=>{const{serverTimeOffset:n}=t,{chatId:o,isMuted:i}=a,l=(0,c.Z1)(t,o);l&&((0,s.R3)((0,r.a4)(t,o,{isMuted:i})),(0,d.t9)("updateChatMutedState",{chat:l,isMuted:i,serverTimeOffset:n}))})),(0,s.Q6)("createChannel",((t,e,a)=>{const{title:n,about:i,photo:l,memberIds:h}=a;!async function(t,e,a,n){(0,s.R3)({...(0,s.Rd)(),chatCreation:{progress:o.Nh.InProgress}});const i=await(0,d.t9)("createChannel",{title:t,about:a,users:e});if(!i)return;const{id:c,accessHash:l}=i;let h=(0,s.Rd)();h=(0,r.a4)(h,c,i),h={...h,chatCreation:{...h.chatCreation,progress:i?o.Nh.Complete:o.Nh.Error}},(0,s.R3)(h),(0,s.uC)().openChat({id:c,shouldReplaceHistory:!0}),c&&l&&n&&await(0,d.t9)("editChatPhoto",{chatId:c,accessHash:l,photo:n})}(n,h.map((e=>(0,c.dy)(t,e))).filter(Boolean),i,l)})),(0,s.Q6)("joinChannel",((t,e,a)=>{const{chatId:s}=a,n=(0,c.Z1)(t,s);if(!n)return;const{id:o,accessHash:i}=n;o&&i&&(0,d.t9)("joinChannel",{channelId:o,accessHash:i})})),(0,s.Q6)("deleteChatUser",((t,e,a)=>{var n;const{chatId:o,userId:i}=a,l=(0,c.Z1)(t,o),h=(0,c.dy)(t,i);l&&h&&(t=(0,r.Dd)(t,o),(0,s.R3)(t),(null===(n=(0,c.Bt)(t))||void 0===n?void 0:n.chatId)===o&&e.openChat({id:void 0}),(0,d.t9)("deleteChatUser",{chat:l,user:h}))})),(0,s.Q6)("deleteChat",((t,e,a)=>{var n;const{chatId:o}=a,i=(0,c.Z1)(t,o);i&&(t=(0,r.Dd)(t,o),(0,s.R3)(t),(null===(n=(0,c.Bt)(t))||void 0===n?void 0:n.chatId)===o&&e.openChat({id:void 0}),(0,d.t9)("deleteChat",{chatId:i.id}))})),(0,s.Q6)("leaveChannel",((t,e,a)=>{var n;const{chatId:o}=a,i=(0,c.Z1)(t,o);if(!i)return;t=(0,r.Dd)(t,o),(0,s.R3)(t),(null===(n=(0,c.Bt)(t))||void 0===n?void 0:n.chatId)===o&&e.openChat({id:void 0});const{id:l,accessHash:h}=i;l&&h&&(0,d.t9)("leaveChannel",{channelId:l,accessHash:h})})),(0,s.Q6)("deleteChannel",((t,e,a)=>{var n;const{chatId:o}=a,i=(0,c.Z1)(t,o);if(!i)return;t=(0,r.Dd)(t,o),(0,s.R3)(t),(null===(n=(0,c.Bt)(t))||void 0===n?void 0:n.chatId)===o&&e.openChat({id:void 0});const{id:l,accessHash:h}=i;l&&h&&(0,d.t9)("deleteChannel",{channelId:l,accessHash:h})})),(0,s.Q6)("createGroupChat",((t,e,a)=>{const{title:n,memberIds:i,photo:l}=a;!async function(t,e,a){(0,s.R3)({...(0,s.Rd)(),chatCreation:{progress:o.Nh.InProgress}});try{const n=await(0,d.t9)("createGroupChat",{title:t,users:e});if(!n)return;const{id:i}=n;let c=(0,s.Rd)();c=(0,r.a4)(c,i,n),c={...c,chatCreation:{...c.chatCreation,progress:n?o.Nh.Complete:o.Nh.Error}},(0,s.R3)(c),(0,s.uC)().openChat({id:i,shouldReplaceHistory:!0}),i&&a&&await(0,d.t9)("editChatPhoto",{chatId:i,photo:a})}catch(t){if("USERS_TOO_FEW"===t.message){const t=(0,s.Rd)();(0,s.R3)({...t,chatCreation:{...t.chatCreation,progress:o.Nh.Error,error:"CreateGroupError"}})}}}(n,i.map((e=>(0,c.dy)(t,e))).filter(Boolean),l)})),(0,s.Q6)("toggleChatPinned",((t,e,a)=>{const{id:s,folderId:n}=a,o=(0,c.Z1)(t,s);if(o)if(n){const e=(0,c.Mw)(t,n);if(e){const a=!(0,c.ep)(t,s,n),{pinnedChatIds:o,includedChatIds:i}=e,r=a?[s,...o||[]]:(o||[]).filter((t=>t!==s)),l=[s,...i];(0,d.t9)("editChatFolder",{id:n,folderUpdate:{...e,pinnedChatIds:r,includedChatIds:l}})}}else{const e=(0,c.Ek)(t,s),a=(0,c.ep)(t,s,"archived"===e?i.WS:void 0);(0,d.t9)("toggleChatPinned",{chat:o,shouldBePinned:!a})}})),(0,s.Q6)("toggleChatArchived",((t,e,a)=>{const{id:s}=a,n=(0,c.Z1)(t,s);n&&(0,d.t9)("toggleChatArchived",{chat:n,folderId:(0,u.pE)(n)?0:i.WS})})),(0,s.Q6)("loadChatFolders",(()=>{!async function(){const t=await(0,d.t9)("fetchChatFolders");if(t){const e=(0,s.Rd)();(0,s.R3)({...e,chatFolders:{...e.chatFolders,...t}})}}()})),(0,s.Q6)("loadRecommendedChatFolders",(()=>{!async function(){const t=await(0,d.t9)("fetchRecommendedChatFolders");if(t){const e=(0,s.Rd)();(0,s.R3)({...e,chatFolders:{...e.chatFolders,recommended:t}})}}()})),(0,s.Q6)("editChatFolders",((t,e,a)=>{const{chatId:s,idsToRemove:n,idsToAdd:o}=a;n.forEach((async e=>{const a=(0,c.Mw)(t,e);var n;a&&await(0,d.t9)("editChatFolder",{id:e,folderUpdate:{...a,pinnedChatIds:null===(n=a.pinnedChatIds)||void 0===n?void 0:n.filter((t=>t!==s)),includedChatIds:a.includedChatIds.filter((t=>t!==s))}})})),o.forEach((async e=>{const a=(0,c.Mw)(t,e);a&&await(0,d.t9)("editChatFolder",{id:e,folderUpdate:{...a,includedChatIds:a.includedChatIds.concat(s)}})}))})),(0,s.Q6)("editChatFolder",((t,e,a)=>{const{id:s,folderUpdate:n}=a,o=(0,c.Mw)(t,s);o&&(0,d.t9)("editChatFolder",{id:s,folderUpdate:{id:s,emoticon:o.emoticon,pinnedChatIds:o.pinnedChatIds,...n}})})),(0,s.Q6)("addChatFolder",((t,e,a)=>{const{folder:n}=a,{orderedIds:o}=t.chatFolders;!async function(t,e){const{id:a,description:n,...o}=t;if(await(0,d.t9)("editChatFolder",{id:e+1,folderUpdate:{id:e+1,...o}}),!n)return;const i=(0,s.Rd)(),{recommended:r}=i.chatFolders;r&&(0,s.R3)({...i,chatFolders:{...i.chatFolders,recommended:r.filter((t=>{let{id:e}=t;return e!==a}))}})}(n,null!=o&&o.length?Math.max.apply(Math.max,o):i.WS)})),(0,s.Q6)("deleteChatFolder",((t,e,a)=>{const{id:s}=a;(0,c.Mw)(t,s)&&async function(t){await(0,d.t9)("deleteChatFolder",t)}(s)})),(0,s.Q6)("toggleChatUnread",((t,e,a)=>{const{id:s}=a,{serverTimeOffset:o}=t,i=(0,c.Z1)(t,s);i&&(i.unreadCount?(0,d.t9)("markMessageListRead",{serverTimeOffset:o,chat:i,threadId:n._f}):(0,d.t9)("toggleDialogUnread",{chat:i,hasUnreadMark:!i.hasUnreadMark}))})),(0,s.Q6)("openChatByInvite",((t,e,a)=>{const{hash:s}=a;(async()=>{const t=await(0,d.t9)("openChatByInvite",s);t&&e.openChat({id:t.chatId})})()})),(0,s.Q6)("openTelegramLink",((t,e,a)=>{const{url:s}=a;if(s.match(i.g$))return void(0,p.o)(s.match(i.g$)[0]);const n=new URL(s.startsWith("http")?s:`https://${s}`),[o,d,r]=n.pathname.split("/").filter(Boolean).map((t=>decodeURI(t))),l=Object.fromEntries(n.searchParams);let h;if("joinchat"===o&&(h=d),(o.startsWith(" ")||o.startsWith("+"))&&(h=o.substr(1,o.length-1)),h)return void e.openChatByInvite({hash:h});if("addstickers"===o)return void e.openStickerSetShortName({stickerSetShortName:d});const u=d||void 0,f=r?Number(r):void 0,C=l.comment?Number(l.comment):void 0;if(l.hasOwnProperty("voicechat")||l.hasOwnProperty("livestream"))e.joinVoiceChatByLink({username:o,inviteHash:l.voicechat||l.livestream});else if("c"===o&&u&&f){const a=`-${u}`;if(!(0,c.Z1)(t,a))return void e.showNotification({message:"Chat does not exist"});e.focusMessage({chatId:a,messageId:f})}else e.openChatByUsername({username:o,messageId:f||Number(u),commentId:C,startParam:l.start})})),(0,s.Q6)("acceptInviteConfirmation",((t,e,a)=>{const{hash:s}=a;(async()=>{const t=await(0,d.t9)("importChatInvite",{hash:s});t&&e.openChat({id:t.id})})()})),(0,s.Q6)("openChatByUsername",((t,e,a)=>{const{username:n,messageId:o,commentId:r,startParam:l}=a;(async()=>{const a=(0,c.jr)(t);if(!r)return a&&a.username===n?void e.focusMessage({chatId:a.id,messageId:o}):void await async function(t,e,a,s){t.openChat({id:i.AJ});const n=await b(e);if(!n)return t.openPreviousChat(),void t.showNotification({message:"User does not exist"});a?t.focusMessage({chatId:n.id,messageId:a}):t.openChat({id:n.id}),s&&t.startBot({botId:n.id,param:s})}(e,n,o,l);const{chatId:h,type:u}=(0,c.Bt)(t)||{},p=(0,c.DI)(t,n);if(h&&p&&"thread"===u){const a=(0,c.tZ)(t,h,o);if(a&&a.chatId===h)return void e.focusMessage({chatId:a.chatId,threadId:a.threadId,messageId:r})}o&&await async function(t,e,a,n){t.openChat({id:i.AJ});const o=await b(e);if(!o)return;const r=(0,s.Rd)(),l=(0,c.tZ)(r,o.id,a);let h;if(l)h=l.chatId;else{const t=await(0,d.t9)("requestThreadInfoUpdate",{chat:o,threadId:a});if(!t)return;h=t.discussionChatId}h&&t.focusMessage({chatId:h,threadId:a,messageId:Number(n)})}(e,n,o,r)})()})),(0,s.Q6)("togglePreHistoryHidden",((t,e,a)=>{const{chatId:s,isEnabled:n}=a;let o=(0,c.Z1)(t,s);o&&(async()=>{if((0,u.G9)(o)){if(o=await(0,d.t9)("migrateChat",o),!o)return;e.openChat({id:o.id})}(0,d.t9)("togglePreHistoryHidden",{chat:o,isEnabled:n})})()})),(0,s.Q6)("updateChatDefaultBannedRights",((t,e,a)=>{const{chatId:s,bannedRights:n}=a,o=(0,c.Z1)(t,s);o&&(0,d.t9)("updateChatDefaultBannedRights",{chat:o,bannedRights:n})})),(0,s.Q6)("updateChatMemberBannedRights",((t,e,a)=>{const{chatId:n,userId:o,bannedRights:i}=a;let l=(0,c.Z1)(t,n);const h=(0,c.dy)(t,o);l&&h&&(async()=>{if((0,u.G9)(l)){if(l=await(0,d.t9)("migrateChat",l),!l)return;e.openChat({id:l.id})}await(0,d.t9)("updateChatMemberBannedRights",{chat:l,user:h,bannedRights:i});const t=(0,s.Rd)(),a=(0,c.Z1)(t,n);if(!a||!a.fullInfo)return;const{members:p,kickedMembers:f}=a.fullInfo,C=Boolean(i.viewMessages),I=!Object.keys(i).length;(0,s.R3)((0,r.a4)(t,n,{fullInfo:{...a.fullInfo,...p&&C&&{members:p.filter((t=>t.userId!==o))},...p&&!C&&{members:p.map((t=>t.userId===o?{...t,bannedRights:i}:t))},...I&&f&&{kickedMembers:f.filter((t=>t.userId!==o))}}}))})()})),(0,s.Q6)("updateChatAdmin",((t,e,a)=>{const{chatId:n,userId:o,adminRights:i,customTitle:l}=a;let h=(0,c.Z1)(t,n);const p=(0,c.dy)(t,o);h&&p&&(async()=>{if((0,u.G9)(h)){if(h=await(0,d.t9)("migrateChat",h),!h)return;e.openChat({id:h.id})}await(0,d.t9)("updateChatAdmin",{chat:h,user:p,adminRights:i,customTitle:l});const t=await(0,d.t9)("fetchFullChat",h),a=(0,s.Rd)();if(!t||!t.fullInfo)return;const{adminMembers:c}=t.fullInfo,f=!Object.keys(i).length;(0,s.R3)((0,r.a4)(a,n,{fullInfo:{...t.fullInfo,...c&&f&&{adminMembers:c.filter((t=>t.userId!==o))},...c&&!f&&{adminMembers:c.map((t=>t.userId===o?{...t,adminRights:i,customTitle:l}:t))}}}))})()})),(0,s.Q6)("updateChat",((t,e,a)=>{const{chatId:n,title:i,about:l,photo:h}=a,u=(0,c.Z1)(t,n);u&&(async()=>{(0,s.R3)((0,r.H9)((0,s.Rd)(),o.wv.InProgress)),await Promise.all([u.title!==i?(0,d.t9)("updateChatTitle",u,i):void 0,u.fullInfo&&u.fullInfo.about!==l?(0,d.t9)("updateChatAbout",u,l):void 0,h?(0,d.t9)("editChatPhoto",{chatId:n,accessHash:u.accessHash,photo:h}):void 0]),(0,s.R3)((0,r.H9)((0,s.Rd)(),o.wv.Complete))})()})),(0,s.Q6)("toggleSignatures",((t,e,a)=>{const{chatId:s,isEnabled:n}=a,o=(0,c.Z1)(t,s);o&&(0,d.t9)("toggleSignatures",{chat:o,isEnabled:n})})),(0,s.Q6)("loadGroupsForDiscussion",(()=>{(async()=>{const t=await(0,d.t9)("fetchGroupsForDiscussion");if(!t)return;const e=t.reduce(((t,e)=>(e&&(t[e.id]=e),t)),{}),a=(0,r.fZ)((0,s.Rd)(),e);(0,s.R3)({...a,chats:{...a.chats,forDiscussionIds:Object.keys(e)}})})()})),(0,s.Q6)("linkDiscussionGroup",((t,e,a)=>{const{channelId:s,chatId:n}=a,o=(0,c.Z1)(t,s);let i=(0,c.Z1)(t,n);o&&i&&(async()=>{if((0,u.G9)(i)){if(i=await(0,d.t9)("migrateChat",i),!i)return;e.openChat({id:i.id})}let{fullInfo:t}=i;if(!t){const e=await(0,d.t9)("fetchFullChat",i);if(!e)return;t=e.fullInfo}t.isPreHistoryHidden&&await(0,d.t9)("togglePreHistoryHidden",{chat:i,isEnabled:!1}),(0,d.t9)("setDiscussionGroup",{channel:o,chat:i})})()})),(0,s.Q6)("unlinkDiscussionGroup",((t,e,a)=>{var s;const{channelId:n}=a,o=(0,c.Z1)(t,n);if(!o)return;let i;null!==(s=o.fullInfo)&&void 0!==s&&s.linkedChatId&&(i=(0,c.Z1)(t,o.fullInfo.linkedChatId)),(async()=>{await(0,d.t9)("setDiscussionGroup",{channel:o}),i&&y(i)})()})),(0,s.Q6)("setActiveChatFolder",((t,e,a)=>({...t,chatFolders:{...t.chatFolders,activeChatFolder:a}}))),(0,s.Q6)("loadMoreMembers",(t=>{(async()=>{var e,a;const{chatId:n}=(0,c.Bt)(t)||{},o=n?(0,c.Z1)(t,n):void 0;if(!o||(0,u.G9)(o))return;const i=(null===(e=o.fullInfo)||void 0===e||null===(a=e.members)||void 0===a?void 0:a.length)||void 0,h=await(0,d.t9)("fetchMembers",o.id,o.accessHash,"recent",i);if(!h)return;const{members:p,users:f}=h;p&&p.length&&(t=(0,s.Rd)(),t=(0,r.Sh)(t,(0,l.ee)(f,"id")),t=(0,r.a4)(t,o.id,{fullInfo:{...o.fullInfo,members:[...(o.fullInfo||{}).members||[],...p||[]]}}),(0,s.R3)(t))})()})),(0,s.Q6)("addChatMembers",((t,e,a)=>{const{chatId:s,memberIds:n}=a,i=(0,c.Z1)(t,s),r=n.map((e=>(0,c.dy)(t,e))).filter(Boolean);i&&r.length&&(e.setNewChatMembersDialogState(o.WB.Loading),(async()=>{await(0,d.t9)("addChatMembers",i,r),e.setNewChatMembersDialogState(o.WB.Closed),y(i)})())})),(0,s.Q6)("deleteChatMember",((t,e,a)=>{const{chatId:s,userId:n}=a,o=(0,c.Z1)(t,s),i=(0,c.dy)(t,n);o&&i&&(async()=>{await(0,d.t9)("deleteChatMember",o,i),y(o)})()})),(0,s.Q6)("toggleIsProtected",((t,e,a)=>{const{chatId:s,isProtected:n}=a,o=(0,c.Z1)(t,s);o&&(0,d.t9)("toggleIsProtected",{chat:o,isProtected:n})})),(0,s.Q6)("setChatEnabledReactions",((t,e,a)=>{const{chatId:s,enabledReactions:n}=a,o=(0,c.Z1)(t,s);o&&(async()=>{await(0,d.t9)("setChatEnabledReactions",{chat:o,enabledReactions:n}),await y(o)})()}))},1689:(t,e,a)=>{a.d(e,{FF:()=>M,NH:()=>Q,Mt:()=>Z});var s=a(5116),n=a(2607),o=a(1226),i=a(9066),d=a(4319),r=a(4446),c=a(782),l=a(9959),h=a(6204),u=a(4753),p=a(7361),f=a(711);let C,I;const m=new Audio("./voicechat_join.mp3"),g=new Audio("./voicechat_connecting.mp3");g.loop=!0;const v=new Audio("./voicechat_leave.mp3"),y={join:m,allowTalk:new Audio("./voicechat_onallowtalk.mp3"),leave:v,connecting:g};let b=Promise.resolve();async function w(t){const e=await(0,o.t9)("getGroupCall",{call:t});if(!e)return;let a=(0,s.Rd)();const i=(0,n.$5)(a,t.id);return a=(0,r.AH)(a,t.id,(0,c.CE)(e.groupCall,["connectionState"]),void 0,null!=i&&i.isLoaded?void 0:e.groupCall.participantsCount),a=(0,l.Sh)(a,(0,c.ee)(e.users,"id")),a=(0,l.fZ)(a,(0,c.ee)(e.chats,"id")),(0,s.R3)(a),e.groupCall}async function R(t,e){const a=await(0,o.t9)("fetchGroupCallParticipants",{call:t,offset:e});if(!a)return;let n=(0,s.Rd)();n=(0,l.Sh)(n,(0,c.ee)(a.users,"id")),n=(0,l.fZ)(n,(0,c.ee)(a.chats,"id")),(0,s.R3)(n)}function M(){return C}function Q(){return I}function Z(){var t;null===(t=C)||void 0===t||t.pause(),I=void 0,C=void 0}(0,s.Q6)("toggleGroupCallPanel",(t=>({...t,groupCalls:{...t.groupCalls,isGroupCallPanelHidden:!t.groupCalls.isGroupCallPanelHidden}}))),(0,s.Q6)("subscribeToGroupCallUpdates",((t,e,a)=>{const{subscribed:s,id:i}=a,d=(0,n.$5)(t,i);d&&(async()=>{s&&(await w(d),await R(d)),await(0,o.t9)("toggleGroupCallStartSubscription",{subscribed:s,call:d})})()})),(0,s.Q6)("createGroupCall",((t,e,a)=>{const{chatId:n}=a,d=(0,i.Z1)(t,n);d&&(async()=>{const a=await(0,o.t9)("createGroupCall",{peer:d});a&&(t=(0,s.Rd)(),(0,s.R3)((0,r.AH)(t,a.id,{...a,chatId:n})),e.joinGroupCall({id:a.id,accessHash:a.accessHash}))})()})),(0,s.Q6)("createGroupCallInviteLink",((t,e)=>{const a=(0,n.mU)(t);if(!a||!a.chatId)return;const s=(0,i.Z1)(t,a.chatId);if(!s)return;const r=Boolean(s.username);(async()=>{let{inviteLink:t}=s.fullInfo;r&&(t=await(0,o.t9)("exportGroupCallInvite",{call:a,canSelfUnmute:!1})),t&&((0,d.TE)(t),e.showNotification({message:"Link copied to clipboard"}))})()})),(0,s.Q6)("joinVoiceChatByLink",((t,e,a)=>{const{username:s,inviteHash:n}=a;(async()=>{const t=await(0,h.C)(s);if(!t)return void e.showNotification({message:f.i0("NoUsernameFound")});const a=await(0,h.f)(t);null!=a&&a.groupCall&&e.joinGroupCall({id:a.groupCall.id,accessHash:a.groupCall.accessHash,inviteHash:n})})()})),(0,s.Q6)("joinGroupCall",((t,e,a)=>{if(!p.Bi)return;const{chatId:o,id:i,accessHash:d,inviteHash:c}=a;!function(){const t=new(window.AudioContext||window.webkitAudioContext);C=new Audio,I=t,C.srcObject=(t=>{const e=t.createOscillator(),a=e.connect(t.createMediaStreamDestination());return e.start(),new MediaStream([Object.assign(a.stream.getAudioTracks()[0],{enabled:!1})])})(t),(0,u.Z)(C)}(),(async()=>{var l;await(b?(b=Promise.all(Object.values(y).map((t=>(t.muted=!0,t.volume=1e-4,t.play().then((()=>{t.pause(),t.volume=1,t.currentTime=0,t.muted=!1})))))).then((()=>{b=void 0})),b):Promise.resolve());const{groupCalls:{activeGroupCallId:h}}=t;let u=i?(0,n.$5)(t,i):(0,n.Bj)(t,o);(null===(l=u)||void 0===l?void 0:l.id)!==h?h?e.leaveGroupCall({rejoin:a}):u&&h===u.id?e.toggleGroupCallPanel():(u||i&&d||(u=await w({id:i,accessHash:d})),u&&(t=(0,s.Rd)(),t=(0,r.AH)(t,u.id,{...u,inviteHash:c},void 0,u.participantsCount+1),(0,s.R3)({...t,groupCalls:{...t.groupCalls,activeGroupCallId:u.id,isGroupCallPanelHidden:!1}}))):e.toggleGroupCallPanel()})()})),(0,s.Q6)("playGroupCallSound",((t,e,a)=>{const{sound:s}=a;y[s]&&(b?b.then((()=>{(0,u.Z)(y[s])})):("connecting"!==s&&y.connecting.pause(),(0,u.Z)(y[s])))})),(0,s.Q6)("loadMoreGroupCallParticipants",(t=>{const e=(0,n.mU)(t);e&&R(e,e.nextOffset)})),(0,s.Q6)("openCallFallbackConfirm",(t=>({...t,groupCalls:{...t.groupCalls,isFallbackConfirmOpen:!0}}))),(0,s.Q6)("closeCallFallbackConfirm",(t=>({...t,groupCalls:{...t.groupCalls,isFallbackConfirmOpen:!1}})))},4446:(t,e,a)=>{a.d(e,{AH:()=>d,dc:()=>r,Ic:()=>c,B6:()=>l});var s=a(2607),n=a(782),o=a(6788),i=a(9066);function d(t,e,a,s,o){var i;const d=Object.values({...null===(i=t.groupCalls.byId[e])||void 0===i?void 0:i.participants,...a.participants}).filter((t=>!t.isLeft)).reduce(((t,e)=>(t[e.id]=e,t)),{});return{...t,groupCalls:{...t.groupCalls,byId:{...t.groupCalls.byId,[e]:{...t.groupCalls.byId[e],...(0,n.CE)(a,["participantsCount"]),...s&&{participantsCount:t.groupCalls.byId[e].participantsCount+s},...void 0!==o&&{participantsCount:o},participants:d}}}}}function r(t,e){const a=(0,s.$5)(t,e);if(a&&a.chatId){const e=(0,i.Z1)(t,a.chatId);e&&(t=(0,o.a4)(t,a.chatId,{fullInfo:{...e.fullInfo,groupCallId:void 0}}))}return{...t,groupCalls:{...t.groupCalls,byId:{...(0,n.CE)(t.groupCalls.byId,[e.toString()])}}}}function c(t,e,a){return t.groupCalls.activeGroupCallId?d(t,t.groupCalls.activeGroupCallId,e,void 0,a):t}function l(t,e,a,n){let o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const i=(0,s.$5)(t,e);return i?d(t,e,{participants:{...i.participants,[a]:{...i.participants[a],...n}}},n.isLeft?o?0:-1:i.participants[a]||o?0:1):t}},2607:(t,e,a)=>{a.d(e,{Bj:()=>i,$5:()=>d,GU:()=>r,Ht:()=>c,mU:()=>l,oq:()=>h});var s=a(8857),n=a(8415),o=a(6376);function i(t,e){const a=(0,s.Z1)(t,e);if(a&&a.fullInfo&&a.fullInfo.groupCallId)return d(t,a.fullInfo.groupCallId)}function d(t,e){return t.groupCalls.byId[e]}function r(t,e,a){var s;return null===(s=d(t,e))||void 0===s?void 0:s.participants[a]}function c(t){var e,a;const o=null===(e=l(t))||void 0===e?void 0:e.chatId;if(!o)return!1;const i=(0,s.Z1)(t,o);return!!i&&((0,n.G9)(i)&&i.isCreator||Boolean(null===(a=i.adminRights)||void 0===a?void 0:a.manageCall))}function l(t){const{groupCalls:{activeGroupCallId:e}}=t;if(e)return d(t,e)}function h(t){const e=(0,o.dy)(t,t.currentUserId);return`Calls: ${(0,n.Js)(e)}`}},3551:(t,e,a)=>{a.d(e,{o:()=>o});var s=a(5116),n=a(7361);const o=t=>{const{protocol:e,searchParams:a,pathname:o,hostname:i}=new URL(t);if("tg:"!==e)return;const{openChatByInvite:d,openChatByUsername:r,openStickerSetShortName:c,focusMessage:l,joinVoiceChatByLink:h}=(0,s.uC)(),u=(n.s$?i:o).replace(/^\/\//,""),p={};switch(a.forEach(((t,e)=>{p[e]=t})),u){case"resolve":{const{domain:t,post:e,comment:a,voicechat:s,livestream:n,start:o}=p;"telegrampassport"!==t&&(p.hasOwnProperty("voicechat")||p.hasOwnProperty("livestream")?h({username:t,inviteHash:s||n}):r({username:t,messageId:Number(e),commentId:Number(a),startParam:o}));break}case"privatepost":{const{post:t,channel:e}=p;l({chatId:`-${e}`,id:t});break}case"bg":case"share":case"msg":case"login":default:break;case"join":{const{invite:t}=p;d({hash:t});break}case"addstickers":{const{set:t}=p;c({stickerSetShortName:t});break}}}}}]); -//# sourceMappingURL=302.1d8fb1e8ea7f52fb7236.js.map \ No newline at end of file +//# sourceMappingURL=302.fde2dcaf1124227a1d9e.js.map \ No newline at end of file diff --git a/dist/302.1d8fb1e8ea7f52fb7236.js.map b/dist/302.fde2dcaf1124227a1d9e.js.map similarity index 99% rename from dist/302.1d8fb1e8ea7f52fb7236.js.map rename to dist/302.fde2dcaf1124227a1d9e.js.map index c8aaff297..3ed06f7a7 100644 --- a/dist/302.1d8fb1e8ea7f52fb7236.js.map +++ b/dist/302.fde2dcaf1124227a1d9e.js.map @@ -1 +1 @@ -{"version":3,"file":"302.1d8fb1e8ea7f52fb7236.js","mappings":"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","sources":["webpack://telegram-t/./src/components/right/DeleteMemberModal.tsx","webpack://telegram-t/./src/modules/actions/api/chats.ts","webpack://telegram-t/./src/modules/actions/ui/calls.ts","webpack://telegram-t/./src/modules/reducers/calls.ts","webpack://telegram-t/./src/modules/selectors/calls.ts","webpack://telegram-t/./src/util/deeplink.ts"],"sourcesContent":["import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat } from '../../api/types';\n\nimport { selectCurrentChat, selectUser } from '../../modules/selectors';\nimport { getUserFirstOrLastName } from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n userId?: string;\n onClose: () => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n contactName?: string;\n};\n\nconst DeleteMemberModal: FC = ({\n isOpen,\n chat,\n userId,\n contactName,\n onClose,\n}) => {\n const { deleteChatMember } = getDispatch();\n\n const lang = useLang();\n\n const handleDeleteChatMember = useCallback(() => {\n deleteChatMember({ chatId: chat!.id, userId });\n onClose();\n }, [chat, deleteChatMember, onClose, userId]);\n\n if (!chat || !userId) {\n return undefined;\n }\n\n return (\n \n

{renderText(lang('PeerInfo.Confirm.RemovePeer', contactName))}

\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const chat = selectCurrentChat(global);\n const user = userId && selectUser(global, userId);\n const contactName = user ? getUserFirstOrLastName(user) : undefined;\n\n return {\n chat,\n contactName,\n };\n },\n)(DeleteMemberModal));\n","import {\n addReducer, getDispatch, getGlobal, setGlobal,\n} from '../../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiUser, ApiChatFolder, MAIN_THREAD_ID,\n} from '../../../api/types';\nimport { NewChatMembersProgress, ChatCreationProgress, ManagementProgress } from '../../../types';\nimport { GlobalActions } from '../../../global/types';\n\nimport {\n ARCHIVED_FOLDER_ID,\n TOP_CHAT_MESSAGES_PRELOAD_LIMIT,\n CHAT_LIST_LOAD_SLICE,\n TIPS_USERNAME,\n LOCALIZED_TIPS,\n RE_TG_LINK,\n SERVICE_NOTIFICATIONS_USER_ID,\n TMP_CHAT_ID, ALL_FOLDER_ID, DEBUG,\n} from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport {\n addChats, addUsers, addUserStatuses, replaceThreadParam,\n updateChatListIds, updateChats, updateChat, updateChatListSecondaryInfo,\n updateManagementProgress, leaveChat, replaceUsers, replaceUserStatuses,\n replaceChats, replaceChatListIds,\n} from '../../reducers';\nimport {\n selectChat, selectUser, selectChatListType, selectIsChatPinned,\n selectChatFolder, selectSupportChat, selectChatByUsername, selectThreadTopMessageId,\n selectCurrentMessageList, selectThreadInfo, selectCurrentChat, selectLastServiceNotification,\n selectVisibleUsers,\n} from '../../selectors';\nimport { buildCollectionByKey, omit } from '../../../util/iteratees';\nimport { debounce, pause, throttle } from '../../../util/schedulers';\nimport {\n isChatSummaryOnly, isChatArchived, isChatBasicGroup,\n} from '../../helpers';\nimport { processDeepLink } from '../../../util/deeplink';\nimport { updateGroupCall } from '../../reducers/calls';\nimport { selectGroupCall } from '../../selectors/calls';\nimport { getOrderedIds } from '../../../util/folderManager';\n\nconst TOP_CHAT_MESSAGES_PRELOAD_INTERVAL = 100;\nconst INFINITE_LOOP_MARKER = 100;\n\nconst runThrottledForLoadTopChats = throttle((cb) => cb(), 3000, true);\nconst runDebouncedForLoadFullChat = debounce((cb) => cb(), 500, false, true);\n\naddReducer('preloadTopChatMessages', (global, actions) => {\n (async () => {\n const preloadedChatIds = new Set();\n\n for (let i = 0; i < TOP_CHAT_MESSAGES_PRELOAD_LIMIT; i++) {\n await pause(TOP_CHAT_MESSAGES_PRELOAD_INTERVAL);\n\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const folderAllOrderedIds = getOrderedIds(ALL_FOLDER_ID);\n const nextChatId = folderAllOrderedIds?.find((id) => id !== currentChatId && !preloadedChatIds.has(id));\n if (!nextChatId) {\n return;\n }\n\n preloadedChatIds.add(nextChatId);\n\n actions.loadViewportMessages({ chatId: nextChatId, threadId: MAIN_THREAD_ID });\n }\n })();\n});\n\naddReducer('openChat', (global, actions, payload) => {\n const { id, threadId } = payload!;\n const { currentUserId } = global;\n const chat = selectChat(global, id);\n\n if (chat?.hasUnreadMark) {\n actions.toggleChatUnread({ id });\n }\n\n // Please telegram send us some updates about linked chat 🙏\n if (chat && chat.lastMessage && chat.lastMessage.threadInfo) {\n actions.requestThreadInfoUpdate({\n chatId: chat.lastMessage.threadInfo.chatId,\n threadId: chat.lastMessage.threadInfo.threadId,\n });\n }\n\n if (!chat) {\n if (id === currentUserId) {\n void callApi('fetchChat', { type: 'self' });\n } else {\n const user = selectUser(global, id);\n if (user) {\n void callApi('fetchChat', { type: 'user', user });\n }\n }\n } else if (isChatSummaryOnly(chat) && !chat.isMin) {\n actions.requestChatUpdate({ chatId: id });\n }\n\n if (threadId !== MAIN_THREAD_ID) {\n const topMessageId = selectThreadTopMessageId(global, id, threadId);\n if (!topMessageId) {\n actions.requestThreadInfoUpdate({ chatId: id, threadId });\n }\n }\n});\n\naddReducer('openLinkedChat', (global, actions, payload) => {\n const { id } = payload!;\n const chat = selectChat(global, id);\n if (!chat) {\n return;\n }\n\n (async () => {\n const chatFullInfo = await callApi('fetchFullChat', chat);\n\n if (chatFullInfo?.fullInfo?.linkedChatId) {\n actions.openChat({ id: chatFullInfo.fullInfo.linkedChatId });\n }\n })();\n});\n\naddReducer('focusMessageInComments', (global, actions, payload) => {\n const { chatId, threadId, messageId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n (async () => {\n const result = await callApi('requestThreadInfoUpdate', { chat, threadId });\n if (!result) {\n return;\n }\n\n actions.focusMessage({ chatId, threadId, messageId });\n })();\n});\n\naddReducer('openSupportChat', (global, actions) => {\n const chat = selectSupportChat(global);\n if (chat) {\n actions.openChat({ id: chat.id, shouldReplaceHistory: true });\n return;\n }\n\n actions.openChat({ id: TMP_CHAT_ID, shouldReplaceHistory: true });\n\n (async () => {\n const result = await callApi('fetchChat', { type: 'support' });\n if (result) {\n actions.openChat({ id: result.chatId, shouldReplaceHistory: true });\n }\n })();\n});\n\naddReducer('openTipsChat', (global, actions, payload) => {\n const { langCode } = payload;\n\n const usernamePostfix = langCode === 'pt-br'\n ? 'BR'\n : LOCALIZED_TIPS.includes(langCode) ? (langCode as string).toUpperCase() : '';\n\n actions.openChatByUsername({ username: `${TIPS_USERNAME}${usernamePostfix}` });\n});\n\naddReducer('loadAllChats', (global, actions, payload) => {\n const listType = payload.listType as 'active' | 'archived';\n let { shouldReplace, onReplace } = payload;\n let i = 0;\n\n (async () => {\n while (shouldReplace || !getGlobal().chats.isFullyLoaded[listType]) {\n if (i++ >= INFINITE_LOOP_MARKER) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('`actions/loadAllChats`: Infinite loop detected');\n }\n\n return;\n }\n\n global = getGlobal();\n\n if (global.connectionState !== 'connectionStateReady' || global.authState !== 'authorizationStateReady') {\n return;\n }\n\n const listIds = !shouldReplace && global.chats.listIds[listType];\n const oldestChat = listIds\n ? listIds\n /* eslint-disable @typescript-eslint/no-loop-func */\n .map((id) => global.chats.byId[id])\n .filter((chat) => Boolean(chat?.lastMessage) && !selectIsChatPinned(global, chat.id))\n /* eslint-enable @typescript-eslint/no-loop-func */\n .sort((chat1, chat2) => (chat1.lastMessage!.date - chat2.lastMessage!.date))[0]\n : undefined;\n\n await loadChats(listType, oldestChat?.id, oldestChat?.lastMessage!.date, shouldReplace);\n\n if (shouldReplace) {\n onReplace?.();\n shouldReplace = false;\n }\n }\n })();\n});\n\naddReducer('loadFullChat', (global, actions, payload) => {\n const { chatId, force } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n if (force) {\n loadFullChat(chat);\n } else {\n runDebouncedForLoadFullChat(() => loadFullChat(chat));\n }\n});\n\naddReducer('loadTopChats', () => {\n runThrottledForLoadTopChats(() => loadChats('active'));\n});\n\naddReducer('requestChatUpdate', (global, actions, payload) => {\n const { serverTimeOffset } = global;\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n void callApi('requestChatUpdate', {\n chat,\n serverTimeOffset,\n ...(chatId === SERVICE_NOTIFICATIONS_USER_ID && {\n lastLocalMessage: selectLastServiceNotification(global)?.message,\n }),\n });\n});\n\naddReducer('updateChatMutedState', (global, actions, payload) => {\n const { serverTimeOffset } = global;\n const { chatId, isMuted } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n setGlobal(updateChat(global, chatId, { isMuted }));\n void callApi('updateChatMutedState', { chat, isMuted, serverTimeOffset });\n});\n\naddReducer('createChannel', (global, actions, payload) => {\n const {\n title, about, photo, memberIds,\n } = payload!;\n\n const members = (memberIds as string[])\n .map((id) => selectUser(global, id))\n .filter(Boolean as any);\n\n void createChannel(title, members, about, photo);\n});\n\naddReducer('joinChannel', (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n const { id: channelId, accessHash } = chat;\n\n if (channelId && accessHash) {\n void callApi('joinChannel', { channelId, accessHash });\n }\n});\n\naddReducer('deleteChatUser', (global, actions, payload) => {\n const { chatId, userId }: { chatId: string; userId: string } = payload!;\n const chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n if (!chat || !user) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n void callApi('deleteChatUser', { chat, user });\n});\n\naddReducer('deleteChat', (global, actions, payload) => {\n const { chatId }: { chatId: string } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n void callApi('deleteChat', { chatId: chat.id });\n});\n\naddReducer('leaveChannel', (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n const { id: channelId, accessHash } = chat;\n if (channelId && accessHash) {\n void callApi('leaveChannel', { channelId, accessHash });\n }\n});\n\naddReducer('deleteChannel', (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n const { id: channelId, accessHash } = chat;\n if (channelId && accessHash) {\n void callApi('deleteChannel', { channelId, accessHash });\n }\n});\n\naddReducer('createGroupChat', (global, actions, payload) => {\n const { title, memberIds, photo } = payload!;\n const members = (memberIds as string[])\n .map((id) => selectUser(global, id))\n .filter(Boolean as any);\n\n void createGroupChat(title, members, photo);\n});\n\naddReducer('toggleChatPinned', (global, actions, payload) => {\n const { id, folderId } = payload!;\n const chat = selectChat(global, id);\n if (!chat) {\n return;\n }\n\n if (folderId) {\n const folder = selectChatFolder(global, folderId);\n if (folder) {\n const shouldBePinned = !selectIsChatPinned(global, id, folderId);\n\n const { pinnedChatIds, includedChatIds } = folder;\n const newPinnedIds = shouldBePinned\n ? [id, ...(pinnedChatIds || [])]\n : (pinnedChatIds || []).filter((pinnedId) => pinnedId !== id);\n\n // With both Pin and Unpin we need to re-add a user to the included group\n const newIncludedChatIds = [id, ...includedChatIds];\n\n void callApi('editChatFolder', {\n id: folderId,\n folderUpdate: {\n ...folder,\n pinnedChatIds: newPinnedIds,\n includedChatIds: newIncludedChatIds,\n },\n });\n }\n } else {\n const listType = selectChatListType(global, id);\n const isPinned = selectIsChatPinned(global, id, listType === 'archived' ? ARCHIVED_FOLDER_ID : undefined);\n void callApi('toggleChatPinned', { chat, shouldBePinned: !isPinned });\n }\n});\n\naddReducer('toggleChatArchived', (global, actions, payload) => {\n const { id } = payload!;\n const chat = selectChat(global, id);\n if (chat) {\n void callApi('toggleChatArchived', {\n chat,\n folderId: isChatArchived(chat) ? 0 : ARCHIVED_FOLDER_ID,\n });\n }\n});\n\naddReducer('loadChatFolders', () => {\n void loadChatFolders();\n});\n\naddReducer('loadRecommendedChatFolders', () => {\n void loadRecommendedChatFolders();\n});\n\naddReducer('editChatFolders', (global, actions, payload) => {\n const { chatId, idsToRemove, idsToAdd } = payload!;\n\n (idsToRemove as number[]).forEach(async (id) => {\n const folder = selectChatFolder(global, id);\n if (folder) {\n await callApi('editChatFolder', {\n id,\n folderUpdate: {\n ...folder,\n pinnedChatIds: folder.pinnedChatIds?.filter((pinnedId) => pinnedId !== chatId),\n includedChatIds: folder.includedChatIds.filter((includedId) => includedId !== chatId),\n },\n });\n }\n });\n\n (idsToAdd as number[]).forEach(async (id) => {\n const folder = selectChatFolder(global, id);\n if (folder) {\n await callApi('editChatFolder', {\n id,\n folderUpdate: {\n ...folder,\n includedChatIds: folder.includedChatIds.concat(chatId),\n },\n });\n }\n });\n});\n\naddReducer('editChatFolder', (global, actions, payload) => {\n const { id, folderUpdate } = payload!;\n const folder = selectChatFolder(global, id);\n\n if (folder) {\n void callApi('editChatFolder', {\n id,\n folderUpdate: {\n id,\n emoticon: folder.emoticon,\n pinnedChatIds: folder.pinnedChatIds,\n ...folderUpdate,\n },\n });\n }\n});\n\naddReducer('addChatFolder', (global, actions, payload) => {\n const { folder } = payload!;\n const { orderedIds } = global.chatFolders;\n const maxId = orderedIds?.length ? Math.max.apply(Math.max, orderedIds) : ARCHIVED_FOLDER_ID;\n\n void createChatFolder(folder, maxId);\n});\n\naddReducer('deleteChatFolder', (global, actions, payload) => {\n const { id } = payload!;\n const folder = selectChatFolder(global, id);\n\n if (folder) {\n void deleteChatFolder(id);\n }\n});\n\naddReducer('toggleChatUnread', (global, actions, payload) => {\n const { id } = payload!;\n const { serverTimeOffset } = global;\n const chat = selectChat(global, id);\n if (chat) {\n if (chat.unreadCount) {\n void callApi('markMessageListRead', { serverTimeOffset, chat, threadId: MAIN_THREAD_ID });\n } else {\n void callApi('toggleDialogUnread', {\n chat,\n hasUnreadMark: !chat.hasUnreadMark,\n });\n }\n }\n});\n\naddReducer('openChatByInvite', (global, actions, payload) => {\n const { hash } = payload!;\n\n (async () => {\n const result = await callApi('openChatByInvite', hash);\n if (!result) {\n return;\n }\n\n actions.openChat({ id: result.chatId });\n })();\n});\n\naddReducer('openTelegramLink', (global, actions, payload) => {\n const { url } = payload!;\n if (url.match(RE_TG_LINK)) {\n processDeepLink(url.match(RE_TG_LINK)[0]);\n return;\n }\n\n const uri = new URL(url.startsWith('http') ? url : `https://${url}`);\n const [part1, part2, part3] = uri.pathname.split('/').filter(Boolean).map((l) => decodeURI(l));\n const params = Object.fromEntries(uri.searchParams);\n\n let hash: string | undefined;\n if (part1 === 'joinchat') {\n hash = part2;\n }\n\n if (part1.startsWith(' ') || part1.startsWith('+')) {\n hash = part1.substr(1, part1.length - 1);\n }\n\n if (hash) {\n actions.openChatByInvite({ hash });\n return;\n }\n\n if (part1 === 'addstickers') {\n actions.openStickerSetShortName({\n stickerSetShortName: part2,\n });\n return;\n }\n\n const chatOrChannelPostId = part2 || undefined;\n const messageId = part3 ? Number(part3) : undefined;\n const commentId = params.comment ? Number(params.comment) : undefined;\n\n if (params.hasOwnProperty('voicechat') || params.hasOwnProperty('livestream')) {\n actions.joinVoiceChatByLink({\n username: part1,\n inviteHash: params.voicechat || params.livestream,\n });\n } else if (part1 === 'c' && chatOrChannelPostId && messageId) {\n const chatId = `-${chatOrChannelPostId}`;\n const chat = selectChat(global, chatId);\n if (!chat) {\n actions.showNotification({ message: 'Chat does not exist' });\n return;\n }\n\n actions.focusMessage({\n chatId,\n messageId,\n });\n } else {\n actions.openChatByUsername({\n username: part1,\n messageId: messageId || Number(chatOrChannelPostId),\n commentId,\n startParam: params.start,\n });\n }\n});\n\naddReducer('acceptInviteConfirmation', (global, actions, payload) => {\n const { hash } = payload!;\n (async () => {\n const result = await callApi('importChatInvite', { hash });\n if (!result) {\n return;\n }\n\n actions.openChat({ id: result.id });\n })();\n});\n\naddReducer('openChatByUsername', (global, actions, payload) => {\n const {\n username, messageId, commentId, startParam,\n } = payload!;\n\n (async () => {\n const chat = selectCurrentChat(global);\n\n if (!commentId) {\n if (chat && chat.username === username) {\n actions.focusMessage({ chatId: chat.id, messageId });\n return;\n }\n await openChatByUsername(actions, username, messageId, startParam);\n return;\n }\n\n const { chatId, type } = selectCurrentMessageList(global) || {};\n const usernameChat = selectChatByUsername(global, username);\n if (chatId && usernameChat && type === 'thread') {\n const threadInfo = selectThreadInfo(global, chatId, messageId);\n\n if (threadInfo && threadInfo.chatId === chatId) {\n actions.focusMessage({\n chatId: threadInfo.chatId,\n threadId: threadInfo.threadId,\n messageId: commentId,\n });\n return;\n }\n }\n\n if (!messageId) return;\n\n await openCommentsByUsername(actions, username, messageId, commentId);\n })();\n});\n\naddReducer('togglePreHistoryHidden', (global, actions, payload) => {\n const { chatId, isEnabled } = payload!;\n let chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n void callApi('togglePreHistoryHidden', { chat, isEnabled });\n })();\n});\n\naddReducer('updateChatDefaultBannedRights', (global, actions, payload) => {\n const { chatId, bannedRights } = payload!;\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('updateChatDefaultBannedRights', { chat, bannedRights });\n});\n\naddReducer('updateChatMemberBannedRights', (global, actions, payload) => {\n const { chatId, userId, bannedRights } = payload!;\n let chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n\n if (!chat || !user) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n await callApi('updateChatMemberBannedRights', { chat, user, bannedRights });\n\n const newGlobal = getGlobal();\n const chatAfterUpdate = selectChat(newGlobal, chatId);\n\n if (!chatAfterUpdate || !chatAfterUpdate.fullInfo) {\n return;\n }\n\n const { members, kickedMembers } = chatAfterUpdate.fullInfo;\n\n const isBanned = Boolean(bannedRights.viewMessages);\n const isUnblocked = !Object.keys(bannedRights).length;\n\n setGlobal(updateChat(newGlobal, chatId, {\n fullInfo: {\n ...chatAfterUpdate.fullInfo,\n ...(members && isBanned && {\n members: members.filter((m) => m.userId !== userId),\n }),\n ...(members && !isBanned && {\n members: members.map((m) => (\n m.userId === userId\n ? { ...m, bannedRights }\n : m\n )),\n }),\n ...(isUnblocked && kickedMembers && {\n kickedMembers: kickedMembers.filter((m) => m.userId !== userId),\n }),\n },\n }));\n })();\n});\n\naddReducer('updateChatAdmin', (global, actions, payload) => {\n const {\n chatId, userId, adminRights, customTitle,\n } = payload!;\n let chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n\n if (!chat || !user) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n await callApi('updateChatAdmin', {\n chat, user, adminRights, customTitle,\n });\n\n const chatAfterUpdate = await callApi('fetchFullChat', chat);\n const newGlobal = getGlobal();\n\n if (!chatAfterUpdate || !chatAfterUpdate.fullInfo) {\n return;\n }\n\n const { adminMembers } = chatAfterUpdate.fullInfo;\n\n const isDismissed = !Object.keys(adminRights).length;\n\n setGlobal(updateChat(newGlobal, chatId, {\n fullInfo: {\n ...chatAfterUpdate.fullInfo,\n ...(adminMembers && isDismissed && {\n adminMembers: adminMembers.filter((m) => m.userId !== userId),\n }),\n ...(adminMembers && !isDismissed && {\n adminMembers: adminMembers.map((m) => (\n m.userId === userId\n ? { ...m, adminRights, customTitle }\n : m\n )),\n }),\n },\n }));\n })();\n});\n\naddReducer('updateChat', (global, actions, payload) => {\n const {\n chatId, title, about, photo,\n } = payload!;\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n (async () => {\n setGlobal(updateManagementProgress(getGlobal(), ManagementProgress.InProgress));\n\n await Promise.all([\n chat.title !== title\n ? callApi('updateChatTitle', chat, title)\n : undefined,\n chat.fullInfo && chat.fullInfo.about !== about\n ? callApi('updateChatAbout', chat, about)\n : undefined,\n photo\n ? callApi('editChatPhoto', { chatId, accessHash: chat.accessHash, photo })\n : undefined,\n ]);\n\n setGlobal(updateManagementProgress(getGlobal(), ManagementProgress.Complete));\n })();\n});\n\naddReducer('toggleSignatures', (global, actions, payload) => {\n const { chatId, isEnabled } = payload!;\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('toggleSignatures', { chat, isEnabled });\n});\n\naddReducer('loadGroupsForDiscussion', () => {\n (async () => {\n const groups = await callApi('fetchGroupsForDiscussion');\n if (!groups) {\n return;\n }\n\n const addedById = groups.reduce((result, group) => {\n if (group) {\n result[group.id] = group;\n }\n\n return result;\n }, {} as Record);\n\n const global = addChats(getGlobal(), addedById);\n setGlobal({\n ...global,\n chats: {\n ...global.chats,\n forDiscussionIds: Object.keys(addedById),\n },\n });\n })();\n});\n\naddReducer('linkDiscussionGroup', (global, actions, payload) => {\n const { channelId, chatId } = payload!;\n\n const channel = selectChat(global, channelId);\n let chat = selectChat(global, chatId);\n if (!channel || !chat) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n let { fullInfo } = chat;\n if (!fullInfo) {\n const fullChat = await callApi('fetchFullChat', chat);\n if (!fullChat) {\n return;\n }\n\n fullInfo = fullChat.fullInfo;\n }\n\n if (fullInfo!.isPreHistoryHidden) {\n await callApi('togglePreHistoryHidden', { chat, isEnabled: false });\n }\n\n void callApi('setDiscussionGroup', { channel, chat });\n })();\n});\n\naddReducer('unlinkDiscussionGroup', (global, actions, payload) => {\n const { channelId } = payload!;\n\n const channel = selectChat(global, channelId);\n if (!channel) {\n return;\n }\n\n let chat: ApiChat | undefined;\n if (channel.fullInfo?.linkedChatId) {\n chat = selectChat(global, channel.fullInfo.linkedChatId);\n }\n\n (async () => {\n await callApi('setDiscussionGroup', { channel });\n if (chat) {\n loadFullChat(chat);\n }\n })();\n});\n\naddReducer('setActiveChatFolder', (global, actions, payload) => {\n return {\n ...global,\n chatFolders: {\n ...global.chatFolders,\n activeChatFolder: payload,\n },\n };\n});\n\naddReducer('loadMoreMembers', (global) => {\n (async () => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n if (!chat || isChatBasicGroup(chat)) {\n return;\n }\n\n const offset = (chat.fullInfo?.members?.length) || undefined;\n const result = await callApi('fetchMembers', chat.id, chat.accessHash!, 'recent', offset);\n if (!result) {\n return;\n }\n\n const { members, users } = result;\n if (!members || !members.length) {\n return;\n }\n\n global = getGlobal();\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = updateChat(global, chat.id, {\n fullInfo: {\n ...chat.fullInfo,\n members: [\n ...((chat.fullInfo || {}).members || []),\n ...(members || []),\n ],\n },\n });\n setGlobal(global);\n })();\n});\n\naddReducer('addChatMembers', (global, actions, payload) => {\n const { chatId, memberIds } = payload;\n const chat = selectChat(global, chatId);\n const users = (memberIds as string[]).map((userId) => selectUser(global, userId)).filter(Boolean as any);\n\n if (!chat || !users.length) {\n return;\n }\n\n actions.setNewChatMembersDialogState(NewChatMembersProgress.Loading);\n (async () => {\n await callApi('addChatMembers', chat, users);\n actions.setNewChatMembersDialogState(NewChatMembersProgress.Closed);\n loadFullChat(chat);\n })();\n});\n\naddReducer('deleteChatMember', (global, actions, payload) => {\n const { chatId, userId } = payload;\n const chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n\n if (!chat || !user) {\n return;\n }\n\n (async () => {\n await callApi('deleteChatMember', chat, user);\n loadFullChat(chat);\n })();\n});\n\naddReducer('toggleIsProtected', (global, actions, payload) => {\n const { chatId, isProtected } = payload;\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('toggleIsProtected', { chat, isProtected });\n});\n\naddReducer('setChatEnabledReactions', (global, actions, payload) => {\n const { chatId, enabledReactions } = payload;\n const chat = selectChat(global, chatId);\n\n if (!chat) return;\n\n (async () => {\n await callApi('setChatEnabledReactions', {\n chat,\n enabledReactions,\n });\n\n await loadFullChat(chat);\n })();\n});\n\nasync function loadChats(\n listType: 'active' | 'archived', offsetId?: string, offsetDate?: number, shouldReplace = false,\n) {\n let global = getGlobal();\n\n const result = await callApi('fetchChats', {\n limit: CHAT_LIST_LOAD_SLICE,\n offsetDate,\n archived: listType === 'archived',\n withPinned: shouldReplace,\n serverTimeOffset: global.serverTimeOffset,\n lastLocalServiceMessage: selectLastServiceNotification(global)?.message,\n });\n\n if (!result) {\n return;\n }\n\n const { chatIds } = result;\n\n if (chatIds.length > 0 && chatIds[0] === offsetId) {\n chatIds.shift();\n }\n\n global = getGlobal();\n\n if (shouldReplace && listType === 'active') {\n const currentChat = selectCurrentChat(global);\n const visibleChats = currentChat ? [currentChat] : [];\n\n const visibleUsers = selectVisibleUsers(global) || [];\n if (global.currentUserId && global.users.byId[global.currentUserId]) {\n visibleUsers.push(global.users.byId[global.currentUserId]);\n }\n\n global = replaceUsers(global, buildCollectionByKey(visibleUsers.concat(result.users), 'id'));\n global = replaceUserStatuses(global, result.userStatusesById);\n global = replaceChats(global, buildCollectionByKey(visibleChats.concat(result.chats), 'id'));\n global = replaceChatListIds(global, listType, chatIds);\n } else if (shouldReplace && listType === 'archived') {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addUserStatuses(global, result.userStatusesById);\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n global = replaceChatListIds(global, listType, chatIds);\n } else {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addUserStatuses(global, result.userStatusesById);\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n global = updateChatListIds(global, listType, chatIds);\n }\n\n global = updateChatListSecondaryInfo(global, listType, result);\n\n Object.keys(result.draftsById).forEach((chatId) => {\n global = replaceThreadParam(\n global, chatId, MAIN_THREAD_ID, 'draft', result.draftsById[chatId],\n );\n });\n\n Object.keys(result.replyingToById).forEach((chatId) => {\n global = replaceThreadParam(\n global, chatId, MAIN_THREAD_ID, 'replyingToId', result.replyingToById[chatId],\n );\n });\n\n if (chatIds.length === 0 && !global.chats.isFullyLoaded[listType]) {\n global = {\n ...global,\n chats: {\n ...global.chats,\n isFullyLoaded: {\n ...global.chats.isFullyLoaded,\n [listType]: true,\n },\n },\n };\n }\n\n setGlobal(global);\n}\n\nexport async function loadFullChat(chat: ApiChat) {\n const result = await callApi('fetchFullChat', chat);\n if (!result) {\n return undefined;\n }\n\n const { users, fullInfo, groupCall } = result;\n\n let global = getGlobal();\n if (users) {\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n }\n\n if (groupCall) {\n const existingGroupCall = selectGroupCall(global, groupCall.id!);\n global = updateGroupCall(\n global,\n groupCall.id!,\n omit(groupCall, ['connectionState']),\n undefined,\n existingGroupCall ? undefined : groupCall.participantsCount,\n );\n }\n\n global = updateChat(global, chat.id, { fullInfo });\n\n setGlobal(global);\n\n return result;\n}\n\nasync function createChannel(title: string, users: ApiUser[], about?: string, photo?: File) {\n setGlobal({\n ...getGlobal(),\n chatCreation: {\n progress: ChatCreationProgress.InProgress,\n },\n });\n\n const createdChannel = await callApi('createChannel', { title, about, users });\n if (!createdChannel) {\n return;\n }\n\n const { id: channelId, accessHash } = createdChannel;\n\n let global = getGlobal();\n global = updateChat(global, channelId, createdChannel);\n global = {\n ...global,\n chatCreation: {\n ...global.chatCreation,\n progress: createdChannel ? ChatCreationProgress.Complete : ChatCreationProgress.Error,\n },\n };\n setGlobal(global);\n getDispatch().openChat({ id: channelId, shouldReplaceHistory: true });\n\n if (channelId && accessHash && photo) {\n await callApi('editChatPhoto', { chatId: channelId, accessHash, photo });\n }\n}\n\nasync function createGroupChat(title: string, users: ApiUser[], photo?: File) {\n setGlobal({\n ...getGlobal(),\n chatCreation: {\n progress: ChatCreationProgress.InProgress,\n },\n });\n\n try {\n const createdChat = await callApi('createGroupChat', {\n title,\n users,\n });\n\n if (!createdChat) {\n return;\n }\n\n const { id: chatId } = createdChat;\n\n let global = getGlobal();\n global = updateChat(global, chatId, createdChat);\n global = {\n ...global,\n chatCreation: {\n ...global.chatCreation,\n progress: createdChat ? ChatCreationProgress.Complete : ChatCreationProgress.Error,\n },\n };\n setGlobal(global);\n getDispatch()\n .openChat({\n id: chatId,\n shouldReplaceHistory: true,\n });\n\n if (chatId && photo) {\n await callApi('editChatPhoto', {\n chatId,\n photo,\n });\n }\n } catch (e: any) {\n if (e.message === 'USERS_TOO_FEW') {\n const global = getGlobal();\n setGlobal({\n ...global,\n chatCreation: {\n ...global.chatCreation,\n progress: ChatCreationProgress.Error,\n error: 'CreateGroupError',\n },\n });\n }\n }\n}\n\nasync function loadChatFolders() {\n const chatFolders = await callApi('fetchChatFolders');\n\n if (chatFolders) {\n const global = getGlobal();\n\n setGlobal({\n ...global,\n chatFolders: {\n ...global.chatFolders,\n ...chatFolders,\n },\n });\n }\n}\n\nasync function loadRecommendedChatFolders() {\n const recommendedChatFolders = await callApi('fetchRecommendedChatFolders');\n\n if (recommendedChatFolders) {\n const global = getGlobal();\n\n setGlobal({\n ...global,\n chatFolders: {\n ...global.chatFolders,\n recommended: recommendedChatFolders,\n },\n });\n }\n}\n\nasync function createChatFolder(folder: ApiChatFolder, maxId: number) {\n // Clear fields from recommended folders\n const { id: recommendedId, description, ...newFolder } = folder;\n\n await callApi('editChatFolder', {\n id: maxId + 1,\n folderUpdate: {\n id: maxId + 1,\n ...newFolder,\n },\n });\n\n if (!description) {\n return;\n }\n\n const global = getGlobal();\n const { recommended } = global.chatFolders;\n\n if (recommended) {\n setGlobal({\n ...global,\n chatFolders: {\n ...global.chatFolders,\n recommended: recommended.filter(({ id }) => id !== recommendedId),\n },\n });\n }\n}\n\nasync function deleteChatFolder(id: number) {\n await callApi('deleteChatFolder', id);\n}\n\nexport async function fetchChatByUsername(\n username: string,\n) {\n const global = getGlobal();\n const localChat = selectChatByUsername(global, username);\n if (localChat && !localChat.isMin) {\n return localChat;\n }\n\n const chat = await callApi('getChatByUsername', username);\n if (!chat) {\n return undefined;\n }\n\n setGlobal(updateChat(getGlobal(), chat.id, chat));\n\n return chat;\n}\n\nasync function openChatByUsername(\n actions: GlobalActions,\n username: string,\n channelPostId?: number,\n startParam?: string,\n) {\n // Open temporary empty chat to make the click response feel faster\n actions.openChat({ id: TMP_CHAT_ID });\n\n const chat = await fetchChatByUsername(username);\n\n if (!chat) {\n actions.openPreviousChat();\n actions.showNotification({ message: 'User does not exist' });\n return;\n }\n\n if (channelPostId) {\n actions.focusMessage({ chatId: chat.id, messageId: channelPostId });\n } else {\n actions.openChat({ id: chat.id });\n }\n if (startParam) {\n actions.startBot({ botId: chat.id, param: startParam });\n }\n}\n\nasync function openCommentsByUsername(\n actions: GlobalActions,\n username: string,\n messageId: number,\n commentId: number,\n) {\n actions.openChat({ id: TMP_CHAT_ID });\n\n const chat = await fetchChatByUsername(username);\n\n if (!chat) return;\n\n const global = getGlobal();\n\n const threadInfo = selectThreadInfo(global, chat.id, messageId);\n let discussionChatId: string | undefined;\n\n if (!threadInfo) {\n const result = await callApi('requestThreadInfoUpdate', { chat, threadId: messageId });\n if (!result) return;\n\n discussionChatId = result.discussionChatId;\n } else {\n discussionChatId = threadInfo.chatId;\n }\n\n if (!discussionChatId) return;\n\n actions.focusMessage({\n chatId: discussionChatId,\n threadId: messageId,\n messageId: Number(commentId),\n });\n}\n","import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\nimport { selectActiveGroupCall, selectChatGroupCall, selectGroupCall } from '../../selectors/calls';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat } from '../../selectors';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { ApiGroupCall } from '../../../api/types';\nimport { updateGroupCall } from '../../reducers/calls';\nimport { buildCollectionByKey, omit } from '../../../util/iteratees';\nimport { addChats, addUsers } from '../../reducers';\nimport { fetchChatByUsername, loadFullChat } from '../api/chats';\nimport safePlay from '../../../util/safePlay';\nimport { ARE_CALLS_SUPPORTED } from '../../../util/environment';\nimport * as langProvider from '../../../util/langProvider';\n\n// Workaround for Safari not playing audio without user interaction\nlet audioElement: HTMLAudioElement | undefined;\nlet audioContext: AudioContext | undefined;\n\nconst joinAudio = new Audio('./voicechat_join.mp3');\nconst connectingAudio = new Audio('./voicechat_connecting.mp3');\nconnectingAudio.loop = true;\nconst leaveAudio = new Audio('./voicechat_leave.mp3');\nconst allowTalkAudio = new Audio('./voicechat_onallowtalk.mp3');\n\nconst sounds: Record = {\n join: joinAudio,\n allowTalk: allowTalkAudio,\n leave: leaveAudio,\n connecting: connectingAudio,\n};\n\nlet initializationPromise: Promise | undefined = Promise.resolve();\n\nconst initializeSoundsForSafari = () => {\n if (!initializationPromise) return Promise.resolve();\n\n initializationPromise = Promise.all(Object.values(sounds).map((l) => {\n l.muted = true;\n l.volume = 0.0001;\n return l.play().then(() => {\n l.pause();\n l.volume = 1;\n l.currentTime = 0;\n l.muted = false;\n });\n })).then(() => {\n initializationPromise = undefined;\n });\n\n return initializationPromise;\n};\n\nasync function fetchGroupCall(groupCall: Partial) {\n const result = await callApi('getGroupCall', {\n call: groupCall,\n });\n\n if (!result) return undefined;\n\n let global = getGlobal();\n\n const existingGroupCall = selectGroupCall(global, groupCall.id!);\n\n global = updateGroupCall(\n global,\n groupCall.id!,\n omit(result.groupCall, ['connectionState']),\n undefined,\n existingGroupCall?.isLoaded ? undefined : result.groupCall.participantsCount,\n );\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addChats(global, buildCollectionByKey(result.chats, 'id'));\n\n setGlobal(global);\n\n return result.groupCall;\n}\n\nasync function fetchGroupCallParticipants(groupCall: Partial, nextOffset?: string) {\n const result = await callApi('fetchGroupCallParticipants', {\n call: groupCall as ApiGroupCall,\n offset: nextOffset,\n });\n\n if (!result) return;\n\n let global = getGlobal();\n\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addChats(global, buildCollectionByKey(result.chats, 'id'));\n\n setGlobal(global);\n}\n\naddReducer('toggleGroupCallPanel', (global) => {\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isGroupCallPanelHidden: !global.groupCalls.isGroupCallPanelHidden,\n },\n };\n});\n\naddReducer('subscribeToGroupCallUpdates', (global, actions, payload) => {\n const { subscribed, id } = payload!;\n const groupCall = selectGroupCall(global, id);\n\n if (!groupCall) return;\n\n (async () => {\n if (subscribed) {\n await fetchGroupCall(groupCall);\n await fetchGroupCallParticipants(groupCall);\n }\n\n await callApi('toggleGroupCallStartSubscription', {\n subscribed,\n call: groupCall,\n });\n })();\n});\n\naddReducer('createGroupCall', (global, actions, payload) => {\n const { chatId } = payload;\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n (async () => {\n const result = await callApi('createGroupCall', {\n peer: chat,\n });\n\n if (!result) return;\n\n global = getGlobal();\n setGlobal(updateGroupCall(global, result.id, {\n ...result,\n chatId,\n }));\n\n actions.joinGroupCall({ id: result.id, accessHash: result.accessHash });\n })();\n});\n\naddReducer('createGroupCallInviteLink', (global, actions) => {\n const groupCall = selectActiveGroupCall(global);\n\n if (!groupCall || !groupCall.chatId) {\n return;\n }\n\n const chat = selectChat(global, groupCall.chatId);\n if (!chat) {\n return;\n }\n\n const canInvite = Boolean(chat.username);\n\n (async () => {\n let { inviteLink } = chat.fullInfo!;\n if (canInvite) {\n inviteLink = await callApi('exportGroupCallInvite', {\n call: groupCall,\n canSelfUnmute: false,\n });\n }\n\n if (!inviteLink) {\n return;\n }\n\n copyTextToClipboard(inviteLink);\n actions.showNotification({\n message: 'Link copied to clipboard',\n });\n })();\n});\n\naddReducer('joinVoiceChatByLink', (global, actions, payload) => {\n const { username, inviteHash } = payload!;\n\n (async () => {\n const chat = await fetchChatByUsername(username);\n\n if (!chat) {\n actions.showNotification({ message: langProvider.getTranslation('NoUsernameFound') });\n return;\n }\n\n const full = await loadFullChat(chat);\n\n if (full?.groupCall) {\n actions.joinGroupCall({ id: full.groupCall.id, accessHash: full.groupCall.accessHash, inviteHash });\n }\n })();\n});\n\naddReducer('joinGroupCall', (global, actions, payload) => {\n if (!ARE_CALLS_SUPPORTED) return;\n\n const {\n chatId, id, accessHash, inviteHash,\n } = payload;\n\n createAudioElement();\n\n (async () => {\n await initializeSoundsForSafari();\n const { groupCalls: { activeGroupCallId } } = global;\n let groupCall = id ? selectGroupCall(global, id) : selectChatGroupCall(global, chatId);\n\n if (groupCall?.id === activeGroupCallId) {\n actions.toggleGroupCallPanel();\n return;\n }\n\n if (activeGroupCallId) {\n actions.leaveGroupCall({\n rejoin: payload,\n });\n return;\n }\n\n if (groupCall && activeGroupCallId === groupCall.id) {\n actions.toggleGroupCallPanel();\n return;\n }\n\n if (!groupCall && (!id || !accessHash)) {\n groupCall = await fetchGroupCall({\n id,\n accessHash,\n });\n }\n\n if (!groupCall) return;\n\n global = getGlobal();\n\n global = updateGroupCall(\n global,\n groupCall.id,\n {\n ...groupCall,\n inviteHash,\n },\n undefined,\n groupCall.participantsCount + 1,\n );\n\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n activeGroupCallId: groupCall.id,\n isGroupCallPanelHidden: false,\n },\n });\n })();\n});\n\naddReducer('playGroupCallSound', (global, actions, payload) => {\n const { sound } = payload!;\n\n if (!sounds[sound]) {\n return;\n }\n\n if (initializationPromise) {\n initializationPromise.then(() => {\n safePlay(sounds[sound]);\n });\n } else {\n if (sound !== 'connecting') {\n sounds.connecting.pause();\n }\n safePlay(sounds[sound]);\n }\n});\n\naddReducer('loadMoreGroupCallParticipants', (global) => {\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) {\n return;\n }\n\n void fetchGroupCallParticipants(groupCall, groupCall.nextOffset);\n});\n\nfunction createAudioContext() {\n return (new (window.AudioContext || (window as any).webkitAudioContext)());\n}\n\nconst silence = (ctx: AudioContext) => {\n const oscillator = ctx.createOscillator();\n const dst = oscillator.connect(ctx.createMediaStreamDestination());\n oscillator.start();\n return new MediaStream([Object.assign((dst as any).stream.getAudioTracks()[0], { enabled: false })]);\n};\n\nfunction createAudioElement() {\n const ctx = createAudioContext();\n audioElement = new Audio();\n audioContext = ctx;\n audioElement.srcObject = silence(ctx);\n safePlay(audioElement);\n}\n\nexport function getGroupCallAudioElement() {\n return audioElement;\n}\n\nexport function getGroupCallAudioContext() {\n return audioContext;\n}\n\nexport function removeGroupCallAudioElement() {\n audioElement?.pause();\n audioContext = undefined;\n audioElement = undefined;\n}\n\naddReducer('openCallFallbackConfirm', (global) => {\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isFallbackConfirmOpen: true,\n },\n };\n});\n\naddReducer('closeCallFallbackConfirm', (global) => {\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isFallbackConfirmOpen: false,\n },\n };\n});\n","import { GroupCallParticipant } from '../../lib/secret-sauce';\nimport { GlobalState } from '../../global/types';\nimport { ApiGroupCall } from '../../api/types';\nimport { selectGroupCall } from '../selectors/calls';\nimport { omit } from '../../util/iteratees';\nimport { updateChat } from './chats';\nimport { selectChat } from '../selectors';\n\nexport function updateGroupCall(\n global: GlobalState,\n groupCallId: string,\n groupCallUpdate: Partial,\n addToParticipantCount?: number,\n resetParticipantCount?: number,\n): GlobalState {\n const unfiltered = Object.values({\n ...global.groupCalls.byId[groupCallId]?.participants,\n ...groupCallUpdate.participants,\n });\n const filtered = unfiltered.filter((l) => !l.isLeft);\n const participants = filtered.reduce((acc: Record, el) => {\n acc[el.id] = el;\n return acc;\n }, {});\n\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n byId: {\n ...global.groupCalls.byId,\n [groupCallId]: {\n ...global.groupCalls.byId[groupCallId],\n ...omit(groupCallUpdate, ['participantsCount']),\n ...(addToParticipantCount && {\n participantsCount: global.groupCalls.byId[groupCallId].participantsCount + addToParticipantCount,\n }),\n ...(resetParticipantCount !== undefined && {\n participantsCount: resetParticipantCount,\n }),\n participants,\n },\n },\n },\n };\n}\n\nexport function removeGroupCall(\n global: GlobalState,\n groupCallId: string,\n): GlobalState {\n const groupCall = selectGroupCall(global, groupCallId);\n if (groupCall && groupCall.chatId) {\n const chat = selectChat(global, groupCall.chatId);\n if (chat) {\n global = updateChat(global, groupCall.chatId, {\n fullInfo: {\n ...chat.fullInfo,\n groupCallId: undefined,\n },\n });\n }\n }\n\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n byId: {\n ...omit(global.groupCalls.byId, [groupCallId.toString()]),\n },\n },\n };\n}\n\nexport function updateActiveGroupCall(\n global: GlobalState,\n groupCallUpdate: Partial,\n resetParticipantCount?: number,\n): GlobalState {\n if (!global.groupCalls.activeGroupCallId) {\n return global;\n }\n\n return updateGroupCall(global,\n global.groupCalls.activeGroupCallId,\n groupCallUpdate,\n undefined,\n resetParticipantCount);\n}\n\nexport function updateGroupCallParticipant(\n global: GlobalState,\n groupCallId: string,\n userId: string,\n participantUpdate: Partial,\n noUpdateCount = false,\n) {\n const groupCall = selectGroupCall(global, groupCallId);\n if (!groupCall) {\n return global;\n }\n\n return updateGroupCall(global, groupCallId, {\n participants: {\n ...groupCall.participants,\n [userId]: {\n ...groupCall.participants[userId],\n ...participantUpdate,\n },\n },\n }, participantUpdate.isLeft\n ? (noUpdateCount ? 0 : -1)\n : (groupCall.participants[userId] || noUpdateCount ? 0 : 1));\n}\n","import { GlobalState } from '../../global/types';\nimport { selectChat } from './chats';\nimport { getUserFullName, isChatBasicGroup } from '../helpers';\nimport { selectUser } from './users';\n\nexport function selectChatGroupCall(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.fullInfo || !chat.fullInfo.groupCallId) return undefined;\n\n return selectGroupCall(global, chat.fullInfo.groupCallId);\n}\n\nexport function selectGroupCall(global: GlobalState, groupCallId: string) {\n return global.groupCalls.byId[groupCallId];\n}\n\nexport function selectGroupCallParticipant(global: GlobalState, groupCallId: string, participantId: string) {\n return selectGroupCall(global, groupCallId)?.participants[participantId];\n}\n\nexport function selectIsAdminInActiveGroupCall(global: GlobalState): boolean {\n const chatId = selectActiveGroupCall(global)?.chatId;\n\n if (!chatId) return false;\n\n const chat = selectChat(global, chatId);\n if (!chat) return false;\n\n return (isChatBasicGroup(chat) && chat.isCreator) || Boolean(chat.adminRights?.manageCall);\n}\n\nexport function selectActiveGroupCall(global: GlobalState) {\n const { groupCalls: { activeGroupCallId } } = global;\n if (!activeGroupCallId) {\n return undefined;\n }\n\n return selectGroupCall(global, activeGroupCallId);\n}\n\nexport function selectCallFallbackChannelTitle(global: GlobalState) {\n const currentUser = selectUser(global, global.currentUserId!);\n\n return `Calls: ${getUserFullName(currentUser!)}`;\n}\n","import { getDispatch } from '../lib/teact/teactn';\nimport { IS_SAFARI } from './environment';\n\ntype DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'setlanguage' |\n'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url';\n\nexport const processDeepLink = (url: string) => {\n const {\n protocol, searchParams, pathname, hostname,\n } = new URL(url);\n\n if (protocol !== 'tg:') return;\n\n const {\n openChatByInvite,\n openChatByUsername,\n openStickerSetShortName,\n focusMessage,\n joinVoiceChatByLink,\n } = getDispatch();\n\n // Safari thinks the path in tg://path links is hostname for some reason\n const method = (IS_SAFARI ? hostname : pathname).replace(/^\\/\\//, '') as DeepLinkMethod;\n const params: Record = {};\n searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n switch (method) {\n case 'resolve': {\n const {\n domain, post, comment, voicechat, livestream, start,\n } = params;\n\n if (domain !== 'telegrampassport') {\n if (params.hasOwnProperty('voicechat') || params.hasOwnProperty('livestream')) {\n joinVoiceChatByLink({\n username: domain,\n inviteHash: voicechat || livestream,\n });\n } else {\n openChatByUsername({\n username: domain,\n messageId: Number(post),\n commentId: Number(comment),\n startParam: start,\n });\n }\n }\n break;\n }\n case 'privatepost': {\n const {\n post, channel,\n } = params;\n\n focusMessage({\n chatId: `-${channel}`,\n id: post,\n });\n break;\n }\n case 'bg': {\n // const {\n // slug, color, rotation, mode, intensity, bg_color: bgColor, gradient,\n // } = params;\n break;\n }\n case 'join': {\n const { invite } = params;\n\n openChatByInvite({ hash: invite });\n break;\n }\n case 'addstickers': {\n const { set } = params;\n\n openStickerSetShortName({\n stickerSetShortName: set,\n });\n break;\n }\n case 'share':\n case 'msg': {\n // const { url, text } = params;\n break;\n }\n case 'login': {\n // const { code, token } = params;\n break;\n }\n default:\n // Unsupported deeplink\n\n break;\n }\n};\n"],"names":["memo","withGlobal","global","userId","chat","selectCurrentChat","user","selectUser","contactName","getUserFirstOrLastName","undefined","isOpen","onClose","deleteChatMember","getDispatch","lang","useLang","handleDeleteChatMember","useCallback","chatId","id","onEnter","className","title","renderText","color","isText","onClick","runThrottledForLoadTopChats","throttle","cb","runDebouncedForLoadFullChat","debounce","async","loadChats","listType","offsetId","offsetDate","shouldReplace","getGlobal","result","callApi","limit","CHAT_LIST_LOAD_SLICE","archived","withPinned","serverTimeOffset","lastLocalServiceMessage","selectLastServiceNotification","message","chatIds","length","shift","currentChat","visibleChats","visibleUsers","selectVisibleUsers","currentUserId","users","byId","push","replaceUsers","buildCollectionByKey","concat","replaceUserStatuses","userStatusesById","replaceChats","chats","replaceChatListIds","addUsers","addUserStatuses","updateChats","updateChatListIds","updateChatListSecondaryInfo","Object","keys","draftsById","forEach","replaceThreadParam","MAIN_THREAD_ID","replyingToById","isFullyLoaded","setGlobal","loadFullChat","fullInfo","groupCall","existingGroupCall","selectGroupCall","updateGroupCall","omit","participantsCount","updateChat","fetchChatByUsername","username","localChat","selectChatByUsername","isMin","addReducer","actions","preloadedChatIds","Set","i","TOP_CHAT_MESSAGES_PRELOAD_LIMIT","pause","currentChatId","selectCurrentMessageList","folderAllOrderedIds","getOrderedIds","ALL_FOLDER_ID","nextChatId","find","has","add","loadViewportMessages","threadId","payload","selectChat","hasUnreadMark","toggleChatUnread","lastMessage","threadInfo","requestThreadInfoUpdate","isChatSummaryOnly","requestChatUpdate","type","selectThreadTopMessageId","chatFullInfo","linkedChatId","openChat","messageId","focusMessage","selectSupportChat","shouldReplaceHistory","TMP_CHAT_ID","langCode","usernamePostfix","LOCALIZED_TIPS","toUpperCase","openChatByUsername","TIPS_USERNAME","onReplace","DEBUG","console","error","connectionState","authState","listIds","oldestChat","map","filter","Boolean","selectIsChatPinned","sort","chat1","chat2","date","force","SERVICE_NOTIFICATIONS_USER_ID","lastLocalMessage","isMuted","about","photo","memberIds","chatCreation","progress","ChatCreationProgress","createdChannel","channelId","accessHash","createChannel","leaveChat","createdChat","e","createGroupChat","folderId","folder","selectChatFolder","shouldBePinned","pinnedChatIds","includedChatIds","newPinnedIds","pinnedId","newIncludedChatIds","folderUpdate","selectChatListType","isPinned","ARCHIVED_FOLDER_ID","isChatArchived","chatFolders","loadChatFolders","recommendedChatFolders","recommended","loadRecommendedChatFolders","idsToRemove","idsToAdd","includedId","emoticon","orderedIds","maxId","recommendedId","description","newFolder","createChatFolder","Math","max","apply","deleteChatFolder","unreadCount","hash","url","match","RE_TG_LINK","processDeepLink","uri","URL","startsWith","part1","part2","part3","pathname","split","l","decodeURI","params","fromEntries","searchParams","substr","openChatByInvite","openStickerSetShortName","stickerSetShortName","chatOrChannelPostId","Number","commentId","comment","hasOwnProperty","joinVoiceChatByLink","inviteHash","voicechat","livestream","showNotification","startParam","start","channelPostId","openPreviousChat","startBot","botId","param","usernameChat","selectThreadInfo","discussionChatId","openCommentsByUsername","isEnabled","isChatBasicGroup","bannedRights","newGlobal","chatAfterUpdate","members","kickedMembers","isBanned","viewMessages","isUnblocked","m","adminRights","customTitle","adminMembers","isDismissed","updateManagementProgress","ManagementProgress","Promise","all","groups","addedById","reduce","group","addChats","forDiscussionIds","channel","fullChat","isPreHistoryHidden","activeChatFolder","offset","setNewChatMembersDialogState","NewChatMembersProgress","isProtected","enabledReactions","audioElement","audioContext","joinAudio","Audio","connectingAudio","loop","leaveAudio","sounds","join","allowTalk","leave","connecting","initializationPromise","resolve","fetchGroupCall","call","isLoaded","fetchGroupCallParticipants","nextOffset","getGroupCallAudioElement","getGroupCallAudioContext","removeGroupCallAudioElement","groupCalls","isGroupCallPanelHidden","subscribed","peer","joinGroupCall","selectActiveGroupCall","canInvite","inviteLink","canSelfUnmute","copyTextToClipboard","langProvider","full","ARE_CALLS_SUPPORTED","ctx","window","AudioContext","webkitAudioContext","srcObject","oscillator","createOscillator","dst","connect","createMediaStreamDestination","MediaStream","assign","stream","getAudioTracks","enabled","silence","safePlay","createAudioElement","values","muted","volume","play","then","currentTime","activeGroupCallId","selectChatGroupCall","leaveGroupCall","rejoin","toggleGroupCallPanel","sound","isFallbackConfirmOpen","groupCallId","groupCallUpdate","addToParticipantCount","resetParticipantCount","participants","isLeft","acc","el","removeGroupCall","toString","updateActiveGroupCall","updateGroupCallParticipant","participantUpdate","noUpdateCount","selectGroupCallParticipant","participantId","selectIsAdminInActiveGroupCall","isCreator","manageCall","selectCallFallbackChannelTitle","currentUser","getUserFullName","protocol","hostname","method","IS_SAFARI","replace","value","key","domain","post","invite","set"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"302.fde2dcaf1124227a1d9e.js","mappings":"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","sources":["webpack://telegram-t/./src/components/right/DeleteMemberModal.tsx","webpack://telegram-t/./src/modules/actions/api/chats.ts","webpack://telegram-t/./src/modules/actions/ui/calls.ts","webpack://telegram-t/./src/modules/reducers/calls.ts","webpack://telegram-t/./src/modules/selectors/calls.ts","webpack://telegram-t/./src/util/deeplink.ts"],"sourcesContent":["import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChat } from '../../api/types';\n\nimport { selectCurrentChat, selectUser } from '../../modules/selectors';\nimport { getUserFirstOrLastName } from '../../modules/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n userId?: string;\n onClose: () => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n contactName?: string;\n};\n\nconst DeleteMemberModal: FC = ({\n isOpen,\n chat,\n userId,\n contactName,\n onClose,\n}) => {\n const { deleteChatMember } = getDispatch();\n\n const lang = useLang();\n\n const handleDeleteChatMember = useCallback(() => {\n deleteChatMember({ chatId: chat!.id, userId });\n onClose();\n }, [chat, deleteChatMember, onClose, userId]);\n\n if (!chat || !userId) {\n return undefined;\n }\n\n return (\n \n

{renderText(lang('PeerInfo.Confirm.RemovePeer', contactName))}

\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const chat = selectCurrentChat(global);\n const user = userId && selectUser(global, userId);\n const contactName = user ? getUserFirstOrLastName(user) : undefined;\n\n return {\n chat,\n contactName,\n };\n },\n)(DeleteMemberModal));\n","import {\n addReducer, getDispatch, getGlobal, setGlobal,\n} from '../../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiUser, ApiChatFolder, MAIN_THREAD_ID,\n} from '../../../api/types';\nimport { NewChatMembersProgress, ChatCreationProgress, ManagementProgress } from '../../../types';\nimport { GlobalActions } from '../../../global/types';\n\nimport {\n ARCHIVED_FOLDER_ID,\n TOP_CHAT_MESSAGES_PRELOAD_LIMIT,\n CHAT_LIST_LOAD_SLICE,\n TIPS_USERNAME,\n LOCALIZED_TIPS,\n RE_TG_LINK,\n SERVICE_NOTIFICATIONS_USER_ID,\n TMP_CHAT_ID, ALL_FOLDER_ID, DEBUG,\n} from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport {\n addChats, addUsers, addUserStatuses, replaceThreadParam,\n updateChatListIds, updateChats, updateChat, updateChatListSecondaryInfo,\n updateManagementProgress, leaveChat, replaceUsers, replaceUserStatuses,\n replaceChats, replaceChatListIds,\n} from '../../reducers';\nimport {\n selectChat, selectUser, selectChatListType, selectIsChatPinned,\n selectChatFolder, selectSupportChat, selectChatByUsername, selectThreadTopMessageId,\n selectCurrentMessageList, selectThreadInfo, selectCurrentChat, selectLastServiceNotification,\n selectVisibleUsers,\n} from '../../selectors';\nimport { buildCollectionByKey, omit } from '../../../util/iteratees';\nimport { debounce, pause, throttle } from '../../../util/schedulers';\nimport {\n isChatSummaryOnly, isChatArchived, isChatBasicGroup,\n} from '../../helpers';\nimport { processDeepLink } from '../../../util/deeplink';\nimport { updateGroupCall } from '../../reducers/calls';\nimport { selectGroupCall } from '../../selectors/calls';\nimport { getOrderedIds } from '../../../util/folderManager';\n\nconst TOP_CHAT_MESSAGES_PRELOAD_INTERVAL = 100;\nconst INFINITE_LOOP_MARKER = 100;\n\nconst runThrottledForLoadTopChats = throttle((cb) => cb(), 3000, true);\nconst runDebouncedForLoadFullChat = debounce((cb) => cb(), 500, false, true);\n\naddReducer('preloadTopChatMessages', (global, actions) => {\n (async () => {\n const preloadedChatIds = new Set();\n\n for (let i = 0; i < TOP_CHAT_MESSAGES_PRELOAD_LIMIT; i++) {\n await pause(TOP_CHAT_MESSAGES_PRELOAD_INTERVAL);\n\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const folderAllOrderedIds = getOrderedIds(ALL_FOLDER_ID);\n const nextChatId = folderAllOrderedIds?.find((id) => id !== currentChatId && !preloadedChatIds.has(id));\n if (!nextChatId) {\n return;\n }\n\n preloadedChatIds.add(nextChatId);\n\n actions.loadViewportMessages({ chatId: nextChatId, threadId: MAIN_THREAD_ID });\n }\n })();\n});\n\naddReducer('openChat', (global, actions, payload) => {\n const { id, threadId } = payload!;\n const { currentUserId } = global;\n const chat = selectChat(global, id);\n\n if (chat?.hasUnreadMark) {\n actions.toggleChatUnread({ id });\n }\n\n // Please telegram send us some updates about linked chat 🙏\n if (chat && chat.lastMessage && chat.lastMessage.threadInfo) {\n actions.requestThreadInfoUpdate({\n chatId: chat.lastMessage.threadInfo.chatId,\n threadId: chat.lastMessage.threadInfo.threadId,\n });\n }\n\n if (!chat) {\n if (id === currentUserId) {\n void callApi('fetchChat', { type: 'self' });\n } else {\n const user = selectUser(global, id);\n if (user) {\n void callApi('fetchChat', { type: 'user', user });\n }\n }\n } else if (isChatSummaryOnly(chat) && !chat.isMin) {\n actions.requestChatUpdate({ chatId: id });\n }\n\n if (threadId !== MAIN_THREAD_ID) {\n const topMessageId = selectThreadTopMessageId(global, id, threadId);\n if (!topMessageId) {\n actions.requestThreadInfoUpdate({ chatId: id, threadId });\n }\n }\n});\n\naddReducer('openLinkedChat', (global, actions, payload) => {\n const { id } = payload!;\n const chat = selectChat(global, id);\n if (!chat) {\n return;\n }\n\n (async () => {\n const chatFullInfo = await callApi('fetchFullChat', chat);\n\n if (chatFullInfo?.fullInfo?.linkedChatId) {\n actions.openChat({ id: chatFullInfo.fullInfo.linkedChatId });\n }\n })();\n});\n\naddReducer('focusMessageInComments', (global, actions, payload) => {\n const { chatId, threadId, messageId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n (async () => {\n const result = await callApi('requestThreadInfoUpdate', { chat, threadId });\n if (!result) {\n return;\n }\n\n actions.focusMessage({ chatId, threadId, messageId });\n })();\n});\n\naddReducer('openSupportChat', (global, actions) => {\n const chat = selectSupportChat(global);\n if (chat) {\n actions.openChat({ id: chat.id, shouldReplaceHistory: true });\n return;\n }\n\n actions.openChat({ id: TMP_CHAT_ID, shouldReplaceHistory: true });\n\n (async () => {\n const result = await callApi('fetchChat', { type: 'support' });\n if (result) {\n actions.openChat({ id: result.chatId, shouldReplaceHistory: true });\n }\n })();\n});\n\naddReducer('openTipsChat', (global, actions, payload) => {\n const { langCode } = payload;\n\n const usernamePostfix = langCode === 'pt-br'\n ? 'BR'\n : LOCALIZED_TIPS.includes(langCode) ? (langCode as string).toUpperCase() : '';\n\n actions.openChatByUsername({ username: `${TIPS_USERNAME}${usernamePostfix}` });\n});\n\naddReducer('loadAllChats', (global, actions, payload) => {\n const listType = payload.listType as 'active' | 'archived';\n let { shouldReplace, onReplace } = payload;\n let i = 0;\n\n (async () => {\n while (shouldReplace || !getGlobal().chats.isFullyLoaded[listType]) {\n if (i++ >= INFINITE_LOOP_MARKER) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('`actions/loadAllChats`: Infinite loop detected');\n }\n\n return;\n }\n\n global = getGlobal();\n\n if (global.connectionState !== 'connectionStateReady' || global.authState !== 'authorizationStateReady') {\n return;\n }\n\n const listIds = !shouldReplace && global.chats.listIds[listType];\n const oldestChat = listIds\n ? listIds\n /* eslint-disable @typescript-eslint/no-loop-func */\n .map((id) => global.chats.byId[id])\n .filter((chat) => Boolean(chat?.lastMessage) && !selectIsChatPinned(global, chat.id))\n /* eslint-enable @typescript-eslint/no-loop-func */\n .sort((chat1, chat2) => (chat1.lastMessage!.date - chat2.lastMessage!.date))[0]\n : undefined;\n\n await loadChats(listType, oldestChat?.id, oldestChat?.lastMessage!.date, shouldReplace);\n\n if (shouldReplace) {\n onReplace?.();\n shouldReplace = false;\n }\n }\n })();\n});\n\naddReducer('loadFullChat', (global, actions, payload) => {\n const { chatId, force } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n if (force) {\n loadFullChat(chat);\n } else {\n runDebouncedForLoadFullChat(() => loadFullChat(chat));\n }\n});\n\naddReducer('loadTopChats', () => {\n runThrottledForLoadTopChats(() => loadChats('active'));\n});\n\naddReducer('requestChatUpdate', (global, actions, payload) => {\n const { serverTimeOffset } = global;\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n void callApi('requestChatUpdate', {\n chat,\n serverTimeOffset,\n ...(chatId === SERVICE_NOTIFICATIONS_USER_ID && {\n lastLocalMessage: selectLastServiceNotification(global)?.message,\n }),\n });\n});\n\naddReducer('updateChatMutedState', (global, actions, payload) => {\n const { serverTimeOffset } = global;\n const { chatId, isMuted } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n setGlobal(updateChat(global, chatId, { isMuted }));\n void callApi('updateChatMutedState', { chat, isMuted, serverTimeOffset });\n});\n\naddReducer('createChannel', (global, actions, payload) => {\n const {\n title, about, photo, memberIds,\n } = payload!;\n\n const members = (memberIds as string[])\n .map((id) => selectUser(global, id))\n .filter(Boolean as any);\n\n void createChannel(title, members, about, photo);\n});\n\naddReducer('joinChannel', (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n const { id: channelId, accessHash } = chat;\n\n if (channelId && accessHash) {\n void callApi('joinChannel', { channelId, accessHash });\n }\n});\n\naddReducer('deleteChatUser', (global, actions, payload) => {\n const { chatId, userId }: { chatId: string; userId: string } = payload!;\n const chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n if (!chat || !user) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n void callApi('deleteChatUser', { chat, user });\n});\n\naddReducer('deleteChat', (global, actions, payload) => {\n const { chatId }: { chatId: string } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n void callApi('deleteChat', { chatId: chat.id });\n});\n\naddReducer('leaveChannel', (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n const { id: channelId, accessHash } = chat;\n if (channelId && accessHash) {\n void callApi('leaveChannel', { channelId, accessHash });\n }\n});\n\naddReducer('deleteChannel', (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n global = leaveChat(global, chatId);\n setGlobal(global);\n\n if (selectCurrentMessageList(global)?.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n\n const { id: channelId, accessHash } = chat;\n if (channelId && accessHash) {\n void callApi('deleteChannel', { channelId, accessHash });\n }\n});\n\naddReducer('createGroupChat', (global, actions, payload) => {\n const { title, memberIds, photo } = payload!;\n const members = (memberIds as string[])\n .map((id) => selectUser(global, id))\n .filter(Boolean as any);\n\n void createGroupChat(title, members, photo);\n});\n\naddReducer('toggleChatPinned', (global, actions, payload) => {\n const { id, folderId } = payload!;\n const chat = selectChat(global, id);\n if (!chat) {\n return;\n }\n\n if (folderId) {\n const folder = selectChatFolder(global, folderId);\n if (folder) {\n const shouldBePinned = !selectIsChatPinned(global, id, folderId);\n\n const { pinnedChatIds, includedChatIds } = folder;\n const newPinnedIds = shouldBePinned\n ? [id, ...(pinnedChatIds || [])]\n : (pinnedChatIds || []).filter((pinnedId) => pinnedId !== id);\n\n // With both Pin and Unpin we need to re-add a user to the included group\n const newIncludedChatIds = [id, ...includedChatIds];\n\n void callApi('editChatFolder', {\n id: folderId,\n folderUpdate: {\n ...folder,\n pinnedChatIds: newPinnedIds,\n includedChatIds: newIncludedChatIds,\n },\n });\n }\n } else {\n const listType = selectChatListType(global, id);\n const isPinned = selectIsChatPinned(global, id, listType === 'archived' ? ARCHIVED_FOLDER_ID : undefined);\n void callApi('toggleChatPinned', { chat, shouldBePinned: !isPinned });\n }\n});\n\naddReducer('toggleChatArchived', (global, actions, payload) => {\n const { id } = payload!;\n const chat = selectChat(global, id);\n if (chat) {\n void callApi('toggleChatArchived', {\n chat,\n folderId: isChatArchived(chat) ? 0 : ARCHIVED_FOLDER_ID,\n });\n }\n});\n\naddReducer('loadChatFolders', () => {\n void loadChatFolders();\n});\n\naddReducer('loadRecommendedChatFolders', () => {\n void loadRecommendedChatFolders();\n});\n\naddReducer('editChatFolders', (global, actions, payload) => {\n const { chatId, idsToRemove, idsToAdd } = payload!;\n\n (idsToRemove as number[]).forEach(async (id) => {\n const folder = selectChatFolder(global, id);\n if (folder) {\n await callApi('editChatFolder', {\n id,\n folderUpdate: {\n ...folder,\n pinnedChatIds: folder.pinnedChatIds?.filter((pinnedId) => pinnedId !== chatId),\n includedChatIds: folder.includedChatIds.filter((includedId) => includedId !== chatId),\n },\n });\n }\n });\n\n (idsToAdd as number[]).forEach(async (id) => {\n const folder = selectChatFolder(global, id);\n if (folder) {\n await callApi('editChatFolder', {\n id,\n folderUpdate: {\n ...folder,\n includedChatIds: folder.includedChatIds.concat(chatId),\n },\n });\n }\n });\n});\n\naddReducer('editChatFolder', (global, actions, payload) => {\n const { id, folderUpdate } = payload!;\n const folder = selectChatFolder(global, id);\n\n if (folder) {\n void callApi('editChatFolder', {\n id,\n folderUpdate: {\n id,\n emoticon: folder.emoticon,\n pinnedChatIds: folder.pinnedChatIds,\n ...folderUpdate,\n },\n });\n }\n});\n\naddReducer('addChatFolder', (global, actions, payload) => {\n const { folder } = payload!;\n const { orderedIds } = global.chatFolders;\n const maxId = orderedIds?.length ? Math.max.apply(Math.max, orderedIds) : ARCHIVED_FOLDER_ID;\n\n void createChatFolder(folder, maxId);\n});\n\naddReducer('deleteChatFolder', (global, actions, payload) => {\n const { id } = payload!;\n const folder = selectChatFolder(global, id);\n\n if (folder) {\n void deleteChatFolder(id);\n }\n});\n\naddReducer('toggleChatUnread', (global, actions, payload) => {\n const { id } = payload!;\n const { serverTimeOffset } = global;\n const chat = selectChat(global, id);\n if (chat) {\n if (chat.unreadCount) {\n void callApi('markMessageListRead', { serverTimeOffset, chat, threadId: MAIN_THREAD_ID });\n } else {\n void callApi('toggleDialogUnread', {\n chat,\n hasUnreadMark: !chat.hasUnreadMark,\n });\n }\n }\n});\n\naddReducer('openChatByInvite', (global, actions, payload) => {\n const { hash } = payload!;\n\n (async () => {\n const result = await callApi('openChatByInvite', hash);\n if (!result) {\n return;\n }\n\n actions.openChat({ id: result.chatId });\n })();\n});\n\naddReducer('openTelegramLink', (global, actions, payload) => {\n const { url } = payload!;\n if (url.match(RE_TG_LINK)) {\n processDeepLink(url.match(RE_TG_LINK)[0]);\n return;\n }\n\n const uri = new URL(url.startsWith('http') ? url : `https://${url}`);\n const [part1, part2, part3] = uri.pathname.split('/').filter(Boolean).map((l) => decodeURI(l));\n const params = Object.fromEntries(uri.searchParams);\n\n let hash: string | undefined;\n if (part1 === 'joinchat') {\n hash = part2;\n }\n\n if (part1.startsWith(' ') || part1.startsWith('+')) {\n hash = part1.substr(1, part1.length - 1);\n }\n\n if (hash) {\n actions.openChatByInvite({ hash });\n return;\n }\n\n if (part1 === 'addstickers') {\n actions.openStickerSetShortName({\n stickerSetShortName: part2,\n });\n return;\n }\n\n const chatOrChannelPostId = part2 || undefined;\n const messageId = part3 ? Number(part3) : undefined;\n const commentId = params.comment ? Number(params.comment) : undefined;\n\n if (params.hasOwnProperty('voicechat') || params.hasOwnProperty('livestream')) {\n actions.joinVoiceChatByLink({\n username: part1,\n inviteHash: params.voicechat || params.livestream,\n });\n } else if (part1 === 'c' && chatOrChannelPostId && messageId) {\n const chatId = `-${chatOrChannelPostId}`;\n const chat = selectChat(global, chatId);\n if (!chat) {\n actions.showNotification({ message: 'Chat does not exist' });\n return;\n }\n\n actions.focusMessage({\n chatId,\n messageId,\n });\n } else {\n actions.openChatByUsername({\n username: part1,\n messageId: messageId || Number(chatOrChannelPostId),\n commentId,\n startParam: params.start,\n });\n }\n});\n\naddReducer('acceptInviteConfirmation', (global, actions, payload) => {\n const { hash } = payload!;\n (async () => {\n const result = await callApi('importChatInvite', { hash });\n if (!result) {\n return;\n }\n\n actions.openChat({ id: result.id });\n })();\n});\n\naddReducer('openChatByUsername', (global, actions, payload) => {\n const {\n username, messageId, commentId, startParam,\n } = payload!;\n\n (async () => {\n const chat = selectCurrentChat(global);\n\n if (!commentId) {\n if (chat && chat.username === username) {\n actions.focusMessage({ chatId: chat.id, messageId });\n return;\n }\n await openChatByUsername(actions, username, messageId, startParam);\n return;\n }\n\n const { chatId, type } = selectCurrentMessageList(global) || {};\n const usernameChat = selectChatByUsername(global, username);\n if (chatId && usernameChat && type === 'thread') {\n const threadInfo = selectThreadInfo(global, chatId, messageId);\n\n if (threadInfo && threadInfo.chatId === chatId) {\n actions.focusMessage({\n chatId: threadInfo.chatId,\n threadId: threadInfo.threadId,\n messageId: commentId,\n });\n return;\n }\n }\n\n if (!messageId) return;\n\n await openCommentsByUsername(actions, username, messageId, commentId);\n })();\n});\n\naddReducer('togglePreHistoryHidden', (global, actions, payload) => {\n const { chatId, isEnabled } = payload!;\n let chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n void callApi('togglePreHistoryHidden', { chat, isEnabled });\n })();\n});\n\naddReducer('updateChatDefaultBannedRights', (global, actions, payload) => {\n const { chatId, bannedRights } = payload!;\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('updateChatDefaultBannedRights', { chat, bannedRights });\n});\n\naddReducer('updateChatMemberBannedRights', (global, actions, payload) => {\n const { chatId, userId, bannedRights } = payload!;\n let chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n\n if (!chat || !user) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n await callApi('updateChatMemberBannedRights', { chat, user, bannedRights });\n\n const newGlobal = getGlobal();\n const chatAfterUpdate = selectChat(newGlobal, chatId);\n\n if (!chatAfterUpdate || !chatAfterUpdate.fullInfo) {\n return;\n }\n\n const { members, kickedMembers } = chatAfterUpdate.fullInfo;\n\n const isBanned = Boolean(bannedRights.viewMessages);\n const isUnblocked = !Object.keys(bannedRights).length;\n\n setGlobal(updateChat(newGlobal, chatId, {\n fullInfo: {\n ...chatAfterUpdate.fullInfo,\n ...(members && isBanned && {\n members: members.filter((m) => m.userId !== userId),\n }),\n ...(members && !isBanned && {\n members: members.map((m) => (\n m.userId === userId\n ? { ...m, bannedRights }\n : m\n )),\n }),\n ...(isUnblocked && kickedMembers && {\n kickedMembers: kickedMembers.filter((m) => m.userId !== userId),\n }),\n },\n }));\n })();\n});\n\naddReducer('updateChatAdmin', (global, actions, payload) => {\n const {\n chatId, userId, adminRights, customTitle,\n } = payload!;\n let chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n\n if (!chat || !user) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n await callApi('updateChatAdmin', {\n chat, user, adminRights, customTitle,\n });\n\n const chatAfterUpdate = await callApi('fetchFullChat', chat);\n const newGlobal = getGlobal();\n\n if (!chatAfterUpdate || !chatAfterUpdate.fullInfo) {\n return;\n }\n\n const { adminMembers } = chatAfterUpdate.fullInfo;\n\n const isDismissed = !Object.keys(adminRights).length;\n\n setGlobal(updateChat(newGlobal, chatId, {\n fullInfo: {\n ...chatAfterUpdate.fullInfo,\n ...(adminMembers && isDismissed && {\n adminMembers: adminMembers.filter((m) => m.userId !== userId),\n }),\n ...(adminMembers && !isDismissed && {\n adminMembers: adminMembers.map((m) => (\n m.userId === userId\n ? { ...m, adminRights, customTitle }\n : m\n )),\n }),\n },\n }));\n })();\n});\n\naddReducer('updateChat', (global, actions, payload) => {\n const {\n chatId, title, about, photo,\n } = payload!;\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n (async () => {\n setGlobal(updateManagementProgress(getGlobal(), ManagementProgress.InProgress));\n\n await Promise.all([\n chat.title !== title\n ? callApi('updateChatTitle', chat, title)\n : undefined,\n chat.fullInfo && chat.fullInfo.about !== about\n ? callApi('updateChatAbout', chat, about)\n : undefined,\n photo\n ? callApi('editChatPhoto', { chatId, accessHash: chat.accessHash, photo })\n : undefined,\n ]);\n\n setGlobal(updateManagementProgress(getGlobal(), ManagementProgress.Complete));\n })();\n});\n\naddReducer('toggleSignatures', (global, actions, payload) => {\n const { chatId, isEnabled } = payload!;\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('toggleSignatures', { chat, isEnabled });\n});\n\naddReducer('loadGroupsForDiscussion', () => {\n (async () => {\n const groups = await callApi('fetchGroupsForDiscussion');\n if (!groups) {\n return;\n }\n\n const addedById = groups.reduce((result, group) => {\n if (group) {\n result[group.id] = group;\n }\n\n return result;\n }, {} as Record);\n\n const global = addChats(getGlobal(), addedById);\n setGlobal({\n ...global,\n chats: {\n ...global.chats,\n forDiscussionIds: Object.keys(addedById),\n },\n });\n })();\n});\n\naddReducer('linkDiscussionGroup', (global, actions, payload) => {\n const { channelId, chatId } = payload!;\n\n const channel = selectChat(global, channelId);\n let chat = selectChat(global, chatId);\n if (!channel || !chat) {\n return;\n }\n\n (async () => {\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n let { fullInfo } = chat;\n if (!fullInfo) {\n const fullChat = await callApi('fetchFullChat', chat);\n if (!fullChat) {\n return;\n }\n\n fullInfo = fullChat.fullInfo;\n }\n\n if (fullInfo!.isPreHistoryHidden) {\n await callApi('togglePreHistoryHidden', { chat, isEnabled: false });\n }\n\n void callApi('setDiscussionGroup', { channel, chat });\n })();\n});\n\naddReducer('unlinkDiscussionGroup', (global, actions, payload) => {\n const { channelId } = payload!;\n\n const channel = selectChat(global, channelId);\n if (!channel) {\n return;\n }\n\n let chat: ApiChat | undefined;\n if (channel.fullInfo?.linkedChatId) {\n chat = selectChat(global, channel.fullInfo.linkedChatId);\n }\n\n (async () => {\n await callApi('setDiscussionGroup', { channel });\n if (chat) {\n loadFullChat(chat);\n }\n })();\n});\n\naddReducer('setActiveChatFolder', (global, actions, payload) => {\n return {\n ...global,\n chatFolders: {\n ...global.chatFolders,\n activeChatFolder: payload,\n },\n };\n});\n\naddReducer('loadMoreMembers', (global) => {\n (async () => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n if (!chat || isChatBasicGroup(chat)) {\n return;\n }\n\n const offset = (chat.fullInfo?.members?.length) || undefined;\n const result = await callApi('fetchMembers', chat.id, chat.accessHash!, 'recent', offset);\n if (!result) {\n return;\n }\n\n const { members, users } = result;\n if (!members || !members.length) {\n return;\n }\n\n global = getGlobal();\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = updateChat(global, chat.id, {\n fullInfo: {\n ...chat.fullInfo,\n members: [\n ...((chat.fullInfo || {}).members || []),\n ...(members || []),\n ],\n },\n });\n setGlobal(global);\n })();\n});\n\naddReducer('addChatMembers', (global, actions, payload) => {\n const { chatId, memberIds } = payload;\n const chat = selectChat(global, chatId);\n const users = (memberIds as string[]).map((userId) => selectUser(global, userId)).filter(Boolean as any);\n\n if (!chat || !users.length) {\n return;\n }\n\n actions.setNewChatMembersDialogState(NewChatMembersProgress.Loading);\n (async () => {\n await callApi('addChatMembers', chat, users);\n actions.setNewChatMembersDialogState(NewChatMembersProgress.Closed);\n loadFullChat(chat);\n })();\n});\n\naddReducer('deleteChatMember', (global, actions, payload) => {\n const { chatId, userId } = payload;\n const chat = selectChat(global, chatId);\n const user = selectUser(global, userId);\n\n if (!chat || !user) {\n return;\n }\n\n (async () => {\n await callApi('deleteChatMember', chat, user);\n loadFullChat(chat);\n })();\n});\n\naddReducer('toggleIsProtected', (global, actions, payload) => {\n const { chatId, isProtected } = payload;\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('toggleIsProtected', { chat, isProtected });\n});\n\naddReducer('setChatEnabledReactions', (global, actions, payload) => {\n const { chatId, enabledReactions } = payload;\n const chat = selectChat(global, chatId);\n\n if (!chat) return;\n\n (async () => {\n await callApi('setChatEnabledReactions', {\n chat,\n enabledReactions,\n });\n\n await loadFullChat(chat);\n })();\n});\n\nasync function loadChats(\n listType: 'active' | 'archived', offsetId?: string, offsetDate?: number, shouldReplace = false,\n) {\n let global = getGlobal();\n\n const result = await callApi('fetchChats', {\n limit: CHAT_LIST_LOAD_SLICE,\n offsetDate,\n archived: listType === 'archived',\n withPinned: shouldReplace,\n serverTimeOffset: global.serverTimeOffset,\n lastLocalServiceMessage: selectLastServiceNotification(global)?.message,\n });\n\n if (!result) {\n return;\n }\n\n const { chatIds } = result;\n\n if (chatIds.length > 0 && chatIds[0] === offsetId) {\n chatIds.shift();\n }\n\n global = getGlobal();\n\n if (shouldReplace && listType === 'active') {\n const currentChat = selectCurrentChat(global);\n const visibleChats = currentChat ? [currentChat] : [];\n\n const visibleUsers = selectVisibleUsers(global) || [];\n if (global.currentUserId && global.users.byId[global.currentUserId]) {\n visibleUsers.push(global.users.byId[global.currentUserId]);\n }\n\n global = replaceUsers(global, buildCollectionByKey(visibleUsers.concat(result.users), 'id'));\n global = replaceUserStatuses(global, result.userStatusesById);\n global = replaceChats(global, buildCollectionByKey(visibleChats.concat(result.chats), 'id'));\n global = replaceChatListIds(global, listType, chatIds);\n } else if (shouldReplace && listType === 'archived') {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addUserStatuses(global, result.userStatusesById);\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n global = replaceChatListIds(global, listType, chatIds);\n } else {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addUserStatuses(global, result.userStatusesById);\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n global = updateChatListIds(global, listType, chatIds);\n }\n\n global = updateChatListSecondaryInfo(global, listType, result);\n\n Object.keys(result.draftsById).forEach((chatId) => {\n global = replaceThreadParam(\n global, chatId, MAIN_THREAD_ID, 'draft', result.draftsById[chatId],\n );\n });\n\n Object.keys(result.replyingToById).forEach((chatId) => {\n global = replaceThreadParam(\n global, chatId, MAIN_THREAD_ID, 'replyingToId', result.replyingToById[chatId],\n );\n });\n\n if (chatIds.length === 0 && !global.chats.isFullyLoaded[listType]) {\n global = {\n ...global,\n chats: {\n ...global.chats,\n isFullyLoaded: {\n ...global.chats.isFullyLoaded,\n [listType]: true,\n },\n },\n };\n }\n\n setGlobal(global);\n}\n\nexport async function loadFullChat(chat: ApiChat) {\n const result = await callApi('fetchFullChat', chat);\n if (!result) {\n return undefined;\n }\n\n const { users, fullInfo, groupCall } = result;\n\n let global = getGlobal();\n if (users) {\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n }\n\n if (groupCall) {\n const existingGroupCall = selectGroupCall(global, groupCall.id!);\n global = updateGroupCall(\n global,\n groupCall.id!,\n omit(groupCall, ['connectionState']),\n undefined,\n existingGroupCall ? undefined : groupCall.participantsCount,\n );\n }\n\n global = updateChat(global, chat.id, { fullInfo });\n\n setGlobal(global);\n\n return result;\n}\n\nasync function createChannel(title: string, users: ApiUser[], about?: string, photo?: File) {\n setGlobal({\n ...getGlobal(),\n chatCreation: {\n progress: ChatCreationProgress.InProgress,\n },\n });\n\n const createdChannel = await callApi('createChannel', { title, about, users });\n if (!createdChannel) {\n return;\n }\n\n const { id: channelId, accessHash } = createdChannel;\n\n let global = getGlobal();\n global = updateChat(global, channelId, createdChannel);\n global = {\n ...global,\n chatCreation: {\n ...global.chatCreation,\n progress: createdChannel ? ChatCreationProgress.Complete : ChatCreationProgress.Error,\n },\n };\n setGlobal(global);\n getDispatch().openChat({ id: channelId, shouldReplaceHistory: true });\n\n if (channelId && accessHash && photo) {\n await callApi('editChatPhoto', { chatId: channelId, accessHash, photo });\n }\n}\n\nasync function createGroupChat(title: string, users: ApiUser[], photo?: File) {\n setGlobal({\n ...getGlobal(),\n chatCreation: {\n progress: ChatCreationProgress.InProgress,\n },\n });\n\n try {\n const createdChat = await callApi('createGroupChat', {\n title,\n users,\n });\n\n if (!createdChat) {\n return;\n }\n\n const { id: chatId } = createdChat;\n\n let global = getGlobal();\n global = updateChat(global, chatId, createdChat);\n global = {\n ...global,\n chatCreation: {\n ...global.chatCreation,\n progress: createdChat ? ChatCreationProgress.Complete : ChatCreationProgress.Error,\n },\n };\n setGlobal(global);\n getDispatch()\n .openChat({\n id: chatId,\n shouldReplaceHistory: true,\n });\n\n if (chatId && photo) {\n await callApi('editChatPhoto', {\n chatId,\n photo,\n });\n }\n } catch (e: any) {\n if (e.message === 'USERS_TOO_FEW') {\n const global = getGlobal();\n setGlobal({\n ...global,\n chatCreation: {\n ...global.chatCreation,\n progress: ChatCreationProgress.Error,\n error: 'CreateGroupError',\n },\n });\n }\n }\n}\n\nasync function loadChatFolders() {\n const chatFolders = await callApi('fetchChatFolders');\n\n if (chatFolders) {\n const global = getGlobal();\n\n setGlobal({\n ...global,\n chatFolders: {\n ...global.chatFolders,\n ...chatFolders,\n },\n });\n }\n}\n\nasync function loadRecommendedChatFolders() {\n const recommendedChatFolders = await callApi('fetchRecommendedChatFolders');\n\n if (recommendedChatFolders) {\n const global = getGlobal();\n\n setGlobal({\n ...global,\n chatFolders: {\n ...global.chatFolders,\n recommended: recommendedChatFolders,\n },\n });\n }\n}\n\nasync function createChatFolder(folder: ApiChatFolder, maxId: number) {\n // Clear fields from recommended folders\n const { id: recommendedId, description, ...newFolder } = folder;\n\n await callApi('editChatFolder', {\n id: maxId + 1,\n folderUpdate: {\n id: maxId + 1,\n ...newFolder,\n },\n });\n\n if (!description) {\n return;\n }\n\n const global = getGlobal();\n const { recommended } = global.chatFolders;\n\n if (recommended) {\n setGlobal({\n ...global,\n chatFolders: {\n ...global.chatFolders,\n recommended: recommended.filter(({ id }) => id !== recommendedId),\n },\n });\n }\n}\n\nasync function deleteChatFolder(id: number) {\n await callApi('deleteChatFolder', id);\n}\n\nexport async function fetchChatByUsername(\n username: string,\n) {\n const global = getGlobal();\n const localChat = selectChatByUsername(global, username);\n if (localChat && !localChat.isMin) {\n return localChat;\n }\n\n const chat = await callApi('getChatByUsername', username);\n if (!chat) {\n return undefined;\n }\n\n setGlobal(updateChat(getGlobal(), chat.id, chat));\n\n return chat;\n}\n\nasync function openChatByUsername(\n actions: GlobalActions,\n username: string,\n channelPostId?: number,\n startParam?: string,\n) {\n // Open temporary empty chat to make the click response feel faster\n actions.openChat({ id: TMP_CHAT_ID });\n\n const chat = await fetchChatByUsername(username);\n\n if (!chat) {\n actions.openPreviousChat();\n actions.showNotification({ message: 'User does not exist' });\n return;\n }\n\n if (channelPostId) {\n actions.focusMessage({ chatId: chat.id, messageId: channelPostId });\n } else {\n actions.openChat({ id: chat.id });\n }\n if (startParam) {\n actions.startBot({ botId: chat.id, param: startParam });\n }\n}\n\nasync function openCommentsByUsername(\n actions: GlobalActions,\n username: string,\n messageId: number,\n commentId: number,\n) {\n actions.openChat({ id: TMP_CHAT_ID });\n\n const chat = await fetchChatByUsername(username);\n\n if (!chat) return;\n\n const global = getGlobal();\n\n const threadInfo = selectThreadInfo(global, chat.id, messageId);\n let discussionChatId: string | undefined;\n\n if (!threadInfo) {\n const result = await callApi('requestThreadInfoUpdate', { chat, threadId: messageId });\n if (!result) return;\n\n discussionChatId = result.discussionChatId;\n } else {\n discussionChatId = threadInfo.chatId;\n }\n\n if (!discussionChatId) return;\n\n actions.focusMessage({\n chatId: discussionChatId,\n threadId: messageId,\n messageId: Number(commentId),\n });\n}\n","import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\nimport { selectActiveGroupCall, selectChatGroupCall, selectGroupCall } from '../../selectors/calls';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat } from '../../selectors';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { ApiGroupCall } from '../../../api/types';\nimport { updateGroupCall } from '../../reducers/calls';\nimport { buildCollectionByKey, omit } from '../../../util/iteratees';\nimport { addChats, addUsers } from '../../reducers';\nimport { fetchChatByUsername, loadFullChat } from '../api/chats';\nimport safePlay from '../../../util/safePlay';\nimport { ARE_CALLS_SUPPORTED } from '../../../util/environment';\nimport * as langProvider from '../../../util/langProvider';\n\n// Workaround for Safari not playing audio without user interaction\nlet audioElement: HTMLAudioElement | undefined;\nlet audioContext: AudioContext | undefined;\n\nconst joinAudio = new Audio('./voicechat_join.mp3');\nconst connectingAudio = new Audio('./voicechat_connecting.mp3');\nconnectingAudio.loop = true;\nconst leaveAudio = new Audio('./voicechat_leave.mp3');\nconst allowTalkAudio = new Audio('./voicechat_onallowtalk.mp3');\n\nconst sounds: Record = {\n join: joinAudio,\n allowTalk: allowTalkAudio,\n leave: leaveAudio,\n connecting: connectingAudio,\n};\n\nlet initializationPromise: Promise | undefined = Promise.resolve();\n\nconst initializeSoundsForSafari = () => {\n if (!initializationPromise) return Promise.resolve();\n\n initializationPromise = Promise.all(Object.values(sounds).map((l) => {\n l.muted = true;\n l.volume = 0.0001;\n return l.play().then(() => {\n l.pause();\n l.volume = 1;\n l.currentTime = 0;\n l.muted = false;\n });\n })).then(() => {\n initializationPromise = undefined;\n });\n\n return initializationPromise;\n};\n\nasync function fetchGroupCall(groupCall: Partial) {\n const result = await callApi('getGroupCall', {\n call: groupCall,\n });\n\n if (!result) return undefined;\n\n let global = getGlobal();\n\n const existingGroupCall = selectGroupCall(global, groupCall.id!);\n\n global = updateGroupCall(\n global,\n groupCall.id!,\n omit(result.groupCall, ['connectionState']),\n undefined,\n existingGroupCall?.isLoaded ? undefined : result.groupCall.participantsCount,\n );\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addChats(global, buildCollectionByKey(result.chats, 'id'));\n\n setGlobal(global);\n\n return result.groupCall;\n}\n\nasync function fetchGroupCallParticipants(groupCall: Partial, nextOffset?: string) {\n const result = await callApi('fetchGroupCallParticipants', {\n call: groupCall as ApiGroupCall,\n offset: nextOffset,\n });\n\n if (!result) return;\n\n let global = getGlobal();\n\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addChats(global, buildCollectionByKey(result.chats, 'id'));\n\n setGlobal(global);\n}\n\naddReducer('toggleGroupCallPanel', (global) => {\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isGroupCallPanelHidden: !global.groupCalls.isGroupCallPanelHidden,\n },\n };\n});\n\naddReducer('subscribeToGroupCallUpdates', (global, actions, payload) => {\n const { subscribed, id } = payload!;\n const groupCall = selectGroupCall(global, id);\n\n if (!groupCall) return;\n\n (async () => {\n if (subscribed) {\n await fetchGroupCall(groupCall);\n await fetchGroupCallParticipants(groupCall);\n }\n\n await callApi('toggleGroupCallStartSubscription', {\n subscribed,\n call: groupCall,\n });\n })();\n});\n\naddReducer('createGroupCall', (global, actions, payload) => {\n const { chatId } = payload;\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n (async () => {\n const result = await callApi('createGroupCall', {\n peer: chat,\n });\n\n if (!result) return;\n\n global = getGlobal();\n setGlobal(updateGroupCall(global, result.id, {\n ...result,\n chatId,\n }));\n\n actions.joinGroupCall({ id: result.id, accessHash: result.accessHash });\n })();\n});\n\naddReducer('createGroupCallInviteLink', (global, actions) => {\n const groupCall = selectActiveGroupCall(global);\n\n if (!groupCall || !groupCall.chatId) {\n return;\n }\n\n const chat = selectChat(global, groupCall.chatId);\n if (!chat) {\n return;\n }\n\n const canInvite = Boolean(chat.username);\n\n (async () => {\n let { inviteLink } = chat.fullInfo!;\n if (canInvite) {\n inviteLink = await callApi('exportGroupCallInvite', {\n call: groupCall,\n canSelfUnmute: false,\n });\n }\n\n if (!inviteLink) {\n return;\n }\n\n copyTextToClipboard(inviteLink);\n actions.showNotification({\n message: 'Link copied to clipboard',\n });\n })();\n});\n\naddReducer('joinVoiceChatByLink', (global, actions, payload) => {\n const { username, inviteHash } = payload!;\n\n (async () => {\n const chat = await fetchChatByUsername(username);\n\n if (!chat) {\n actions.showNotification({ message: langProvider.getTranslation('NoUsernameFound') });\n return;\n }\n\n const full = await loadFullChat(chat);\n\n if (full?.groupCall) {\n actions.joinGroupCall({ id: full.groupCall.id, accessHash: full.groupCall.accessHash, inviteHash });\n }\n })();\n});\n\naddReducer('joinGroupCall', (global, actions, payload) => {\n if (!ARE_CALLS_SUPPORTED) return;\n\n const {\n chatId, id, accessHash, inviteHash,\n } = payload;\n\n createAudioElement();\n\n (async () => {\n await initializeSoundsForSafari();\n const { groupCalls: { activeGroupCallId } } = global;\n let groupCall = id ? selectGroupCall(global, id) : selectChatGroupCall(global, chatId);\n\n if (groupCall?.id === activeGroupCallId) {\n actions.toggleGroupCallPanel();\n return;\n }\n\n if (activeGroupCallId) {\n actions.leaveGroupCall({\n rejoin: payload,\n });\n return;\n }\n\n if (groupCall && activeGroupCallId === groupCall.id) {\n actions.toggleGroupCallPanel();\n return;\n }\n\n if (!groupCall && (!id || !accessHash)) {\n groupCall = await fetchGroupCall({\n id,\n accessHash,\n });\n }\n\n if (!groupCall) return;\n\n global = getGlobal();\n\n global = updateGroupCall(\n global,\n groupCall.id,\n {\n ...groupCall,\n inviteHash,\n },\n undefined,\n groupCall.participantsCount + 1,\n );\n\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n activeGroupCallId: groupCall.id,\n isGroupCallPanelHidden: false,\n },\n });\n })();\n});\n\naddReducer('playGroupCallSound', (global, actions, payload) => {\n const { sound } = payload!;\n\n if (!sounds[sound]) {\n return;\n }\n\n if (initializationPromise) {\n initializationPromise.then(() => {\n safePlay(sounds[sound]);\n });\n } else {\n if (sound !== 'connecting') {\n sounds.connecting.pause();\n }\n safePlay(sounds[sound]);\n }\n});\n\naddReducer('loadMoreGroupCallParticipants', (global) => {\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) {\n return;\n }\n\n void fetchGroupCallParticipants(groupCall, groupCall.nextOffset);\n});\n\nfunction createAudioContext() {\n return (new (window.AudioContext || (window as any).webkitAudioContext)());\n}\n\nconst silence = (ctx: AudioContext) => {\n const oscillator = ctx.createOscillator();\n const dst = oscillator.connect(ctx.createMediaStreamDestination());\n oscillator.start();\n return new MediaStream([Object.assign((dst as any).stream.getAudioTracks()[0], { enabled: false })]);\n};\n\nfunction createAudioElement() {\n const ctx = createAudioContext();\n audioElement = new Audio();\n audioContext = ctx;\n audioElement.srcObject = silence(ctx);\n safePlay(audioElement);\n}\n\nexport function getGroupCallAudioElement() {\n return audioElement;\n}\n\nexport function getGroupCallAudioContext() {\n return audioContext;\n}\n\nexport function removeGroupCallAudioElement() {\n audioElement?.pause();\n audioContext = undefined;\n audioElement = undefined;\n}\n\naddReducer('openCallFallbackConfirm', (global) => {\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isFallbackConfirmOpen: true,\n },\n };\n});\n\naddReducer('closeCallFallbackConfirm', (global) => {\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isFallbackConfirmOpen: false,\n },\n };\n});\n","import { GroupCallParticipant } from '../../lib/secret-sauce';\nimport { GlobalState } from '../../global/types';\nimport { ApiGroupCall } from '../../api/types';\nimport { selectGroupCall } from '../selectors/calls';\nimport { omit } from '../../util/iteratees';\nimport { updateChat } from './chats';\nimport { selectChat } from '../selectors';\n\nexport function updateGroupCall(\n global: GlobalState,\n groupCallId: string,\n groupCallUpdate: Partial,\n addToParticipantCount?: number,\n resetParticipantCount?: number,\n): GlobalState {\n const unfiltered = Object.values({\n ...global.groupCalls.byId[groupCallId]?.participants,\n ...groupCallUpdate.participants,\n });\n const filtered = unfiltered.filter((l) => !l.isLeft);\n const participants = filtered.reduce((acc: Record, el) => {\n acc[el.id] = el;\n return acc;\n }, {});\n\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n byId: {\n ...global.groupCalls.byId,\n [groupCallId]: {\n ...global.groupCalls.byId[groupCallId],\n ...omit(groupCallUpdate, ['participantsCount']),\n ...(addToParticipantCount && {\n participantsCount: global.groupCalls.byId[groupCallId].participantsCount + addToParticipantCount,\n }),\n ...(resetParticipantCount !== undefined && {\n participantsCount: resetParticipantCount,\n }),\n participants,\n },\n },\n },\n };\n}\n\nexport function removeGroupCall(\n global: GlobalState,\n groupCallId: string,\n): GlobalState {\n const groupCall = selectGroupCall(global, groupCallId);\n if (groupCall && groupCall.chatId) {\n const chat = selectChat(global, groupCall.chatId);\n if (chat) {\n global = updateChat(global, groupCall.chatId, {\n fullInfo: {\n ...chat.fullInfo,\n groupCallId: undefined,\n },\n });\n }\n }\n\n return {\n ...global,\n groupCalls: {\n ...global.groupCalls,\n byId: {\n ...omit(global.groupCalls.byId, [groupCallId.toString()]),\n },\n },\n };\n}\n\nexport function updateActiveGroupCall(\n global: GlobalState,\n groupCallUpdate: Partial,\n resetParticipantCount?: number,\n): GlobalState {\n if (!global.groupCalls.activeGroupCallId) {\n return global;\n }\n\n return updateGroupCall(global,\n global.groupCalls.activeGroupCallId,\n groupCallUpdate,\n undefined,\n resetParticipantCount);\n}\n\nexport function updateGroupCallParticipant(\n global: GlobalState,\n groupCallId: string,\n userId: string,\n participantUpdate: Partial,\n noUpdateCount = false,\n) {\n const groupCall = selectGroupCall(global, groupCallId);\n if (!groupCall) {\n return global;\n }\n\n return updateGroupCall(global, groupCallId, {\n participants: {\n ...groupCall.participants,\n [userId]: {\n ...groupCall.participants[userId],\n ...participantUpdate,\n },\n },\n }, participantUpdate.isLeft\n ? (noUpdateCount ? 0 : -1)\n : (groupCall.participants[userId] || noUpdateCount ? 0 : 1));\n}\n","import { GlobalState } from '../../global/types';\nimport { selectChat } from './chats';\nimport { getUserFullName, isChatBasicGroup } from '../helpers';\nimport { selectUser } from './users';\n\nexport function selectChatGroupCall(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.fullInfo || !chat.fullInfo.groupCallId) return undefined;\n\n return selectGroupCall(global, chat.fullInfo.groupCallId);\n}\n\nexport function selectGroupCall(global: GlobalState, groupCallId: string) {\n return global.groupCalls.byId[groupCallId];\n}\n\nexport function selectGroupCallParticipant(global: GlobalState, groupCallId: string, participantId: string) {\n return selectGroupCall(global, groupCallId)?.participants[participantId];\n}\n\nexport function selectIsAdminInActiveGroupCall(global: GlobalState): boolean {\n const chatId = selectActiveGroupCall(global)?.chatId;\n\n if (!chatId) return false;\n\n const chat = selectChat(global, chatId);\n if (!chat) return false;\n\n return (isChatBasicGroup(chat) && chat.isCreator) || Boolean(chat.adminRights?.manageCall);\n}\n\nexport function selectActiveGroupCall(global: GlobalState) {\n const { groupCalls: { activeGroupCallId } } = global;\n if (!activeGroupCallId) {\n return undefined;\n }\n\n return selectGroupCall(global, activeGroupCallId);\n}\n\nexport function selectCallFallbackChannelTitle(global: GlobalState) {\n const currentUser = selectUser(global, global.currentUserId!);\n\n return `Calls: ${getUserFullName(currentUser!)}`;\n}\n","import { getDispatch } from '../lib/teact/teactn';\nimport { IS_SAFARI } from './environment';\n\ntype DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'setlanguage' |\n'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url';\n\nexport const processDeepLink = (url: string) => {\n const {\n protocol, searchParams, pathname, hostname,\n } = new URL(url);\n\n if (protocol !== 'tg:') return;\n\n const {\n openChatByInvite,\n openChatByUsername,\n openStickerSetShortName,\n focusMessage,\n joinVoiceChatByLink,\n } = getDispatch();\n\n // Safari thinks the path in tg://path links is hostname for some reason\n const method = (IS_SAFARI ? hostname : pathname).replace(/^\\/\\//, '') as DeepLinkMethod;\n const params: Record = {};\n searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n switch (method) {\n case 'resolve': {\n const {\n domain, post, comment, voicechat, livestream, start,\n } = params;\n\n if (domain !== 'telegrampassport') {\n if (params.hasOwnProperty('voicechat') || params.hasOwnProperty('livestream')) {\n joinVoiceChatByLink({\n username: domain,\n inviteHash: voicechat || livestream,\n });\n } else {\n openChatByUsername({\n username: domain,\n messageId: Number(post),\n commentId: Number(comment),\n startParam: start,\n });\n }\n }\n break;\n }\n case 'privatepost': {\n const {\n post, channel,\n } = params;\n\n focusMessage({\n chatId: `-${channel}`,\n id: post,\n });\n break;\n }\n case 'bg': {\n // const {\n // slug, color, rotation, mode, intensity, bg_color: bgColor, gradient,\n // } = params;\n break;\n }\n case 'join': {\n const { invite } = params;\n\n openChatByInvite({ hash: invite });\n break;\n }\n case 'addstickers': {\n const { set } = params;\n\n openStickerSetShortName({\n stickerSetShortName: set,\n });\n break;\n }\n case 'share':\n case 'msg': {\n // const { url, text } = params;\n break;\n }\n case 'login': {\n // const { code, token } = params;\n break;\n }\n default:\n // Unsupported deeplink\n\n break;\n }\n};\n"],"names":["memo","withGlobal","global","userId","chat","selectCurrentChat","user","selectUser","contactName","getUserFirstOrLastName","undefined","isOpen","onClose","deleteChatMember","getDispatch","lang","useLang","handleDeleteChatMember","useCallback","chatId","id","onEnter","className","title","renderText","color","isText","onClick","runThrottledForLoadTopChats","throttle","cb","runDebouncedForLoadFullChat","debounce","async","loadChats","listType","offsetId","offsetDate","shouldReplace","getGlobal","result","callApi","limit","CHAT_LIST_LOAD_SLICE","archived","withPinned","serverTimeOffset","lastLocalServiceMessage","selectLastServiceNotification","message","chatIds","length","shift","currentChat","visibleChats","visibleUsers","selectVisibleUsers","currentUserId","users","byId","push","replaceUsers","buildCollectionByKey","concat","replaceUserStatuses","userStatusesById","replaceChats","chats","replaceChatListIds","addUsers","addUserStatuses","updateChats","updateChatListIds","updateChatListSecondaryInfo","Object","keys","draftsById","forEach","replaceThreadParam","MAIN_THREAD_ID","replyingToById","isFullyLoaded","setGlobal","loadFullChat","fullInfo","groupCall","existingGroupCall","selectGroupCall","updateGroupCall","omit","participantsCount","updateChat","fetchChatByUsername","username","localChat","selectChatByUsername","isMin","addReducer","actions","preloadedChatIds","Set","i","TOP_CHAT_MESSAGES_PRELOAD_LIMIT","pause","currentChatId","selectCurrentMessageList","folderAllOrderedIds","getOrderedIds","ALL_FOLDER_ID","nextChatId","find","has","add","loadViewportMessages","threadId","payload","selectChat","hasUnreadMark","toggleChatUnread","lastMessage","threadInfo","requestThreadInfoUpdate","isChatSummaryOnly","requestChatUpdate","type","selectThreadTopMessageId","chatFullInfo","linkedChatId","openChat","messageId","focusMessage","selectSupportChat","shouldReplaceHistory","TMP_CHAT_ID","langCode","usernamePostfix","LOCALIZED_TIPS","toUpperCase","openChatByUsername","TIPS_USERNAME","onReplace","DEBUG","console","error","connectionState","authState","listIds","oldestChat","map","filter","Boolean","selectIsChatPinned","sort","chat1","chat2","date","force","SERVICE_NOTIFICATIONS_USER_ID","lastLocalMessage","isMuted","about","photo","memberIds","chatCreation","progress","ChatCreationProgress","createdChannel","channelId","accessHash","createChannel","leaveChat","createdChat","e","createGroupChat","folderId","folder","selectChatFolder","shouldBePinned","pinnedChatIds","includedChatIds","newPinnedIds","pinnedId","newIncludedChatIds","folderUpdate","selectChatListType","isPinned","ARCHIVED_FOLDER_ID","isChatArchived","chatFolders","loadChatFolders","recommendedChatFolders","recommended","loadRecommendedChatFolders","idsToRemove","idsToAdd","includedId","emoticon","orderedIds","maxId","recommendedId","description","newFolder","createChatFolder","Math","max","apply","deleteChatFolder","unreadCount","hash","url","match","RE_TG_LINK","processDeepLink","uri","URL","startsWith","part1","part2","part3","pathname","split","l","decodeURI","params","fromEntries","searchParams","substr","openChatByInvite","openStickerSetShortName","stickerSetShortName","chatOrChannelPostId","Number","commentId","comment","hasOwnProperty","joinVoiceChatByLink","inviteHash","voicechat","livestream","showNotification","startParam","start","channelPostId","openPreviousChat","startBot","botId","param","usernameChat","selectThreadInfo","discussionChatId","openCommentsByUsername","isEnabled","isChatBasicGroup","bannedRights","newGlobal","chatAfterUpdate","members","kickedMembers","isBanned","viewMessages","isUnblocked","m","adminRights","customTitle","adminMembers","isDismissed","updateManagementProgress","ManagementProgress","Promise","all","groups","addedById","reduce","group","addChats","forDiscussionIds","channel","fullChat","isPreHistoryHidden","activeChatFolder","offset","setNewChatMembersDialogState","NewChatMembersProgress","isProtected","enabledReactions","audioElement","audioContext","joinAudio","Audio","connectingAudio","loop","leaveAudio","sounds","join","allowTalk","leave","connecting","initializationPromise","resolve","fetchGroupCall","call","isLoaded","fetchGroupCallParticipants","nextOffset","getGroupCallAudioElement","getGroupCallAudioContext","removeGroupCallAudioElement","groupCalls","isGroupCallPanelHidden","subscribed","peer","joinGroupCall","selectActiveGroupCall","canInvite","inviteLink","canSelfUnmute","copyTextToClipboard","langProvider","full","ARE_CALLS_SUPPORTED","ctx","window","AudioContext","webkitAudioContext","srcObject","oscillator","createOscillator","dst","connect","createMediaStreamDestination","MediaStream","assign","stream","getAudioTracks","enabled","silence","safePlay","createAudioElement","values","muted","volume","play","then","currentTime","activeGroupCallId","selectChatGroupCall","leaveGroupCall","rejoin","toggleGroupCallPanel","sound","isFallbackConfirmOpen","groupCallId","groupCallUpdate","addToParticipantCount","resetParticipantCount","participants","isLeft","acc","el","removeGroupCall","toString","updateActiveGroupCall","updateGroupCallParticipant","participantUpdate","noUpdateCount","selectGroupCallParticipant","participantId","selectIsAdminInActiveGroupCall","isCreator","manageCall","selectCallFallbackChannelTitle","currentUser","getUserFullName","protocol","hostname","method","IS_SAFARI","replace","value","key","domain","post","invite","set"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/354.b73ee1ca5b4052509fe6.js b/dist/354.7bc3c5c13bc07dd188c8.js similarity index 98% rename from dist/354.b73ee1ca5b4052509fe6.js rename to dist/354.7bc3c5c13bc07dd188c8.js index 3470634be..3c55ec115 100644 --- a/dist/354.b73ee1ca5b4052509fe6.js +++ b/dist/354.7bc3c5c13bc07dd188c8.js @@ -1,2 +1,2 @@ (()=>{"use strict";var e,r,t={2993:(e,r,t)=>{var n=t(5802);"undefined"!=typeof window&&window.innerHeight,Math.round(425),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]);const a=new Set(["image/png","image/gif","image/jpeg"]),o=new Set(["video/mp4"]);new Set([...a,...o]),new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]),self.onerror=e=>{console.error(e),i({type:"unhandledError",error:{message:e.error.message||"Uncaught exception in worker"}})},self.addEventListener("unhandledrejection",(e=>{console.error(e),i({type:"unhandledError",error:{message:e.reason.message||"Uncaught rejection in worker"}})}));const s=new Map;function i(e,r){r?postMessage(e,r):postMessage(e)}let c;self.importScripts("rlottie-wasm.js");const l=new Promise((e=>{Module.onRuntimeInitialized=()=>{c={init:Module.cwrap("lottie_init","",[]),destroy:Module.cwrap("lottie_destroy","",["number"]),resize:Module.cwrap("lottie_resize","",["number","number","number"]),buffer:Module.cwrap("lottie_buffer","number",["number"]),render:Module.cwrap("lottie_render","",["number","number"]),loadFromData:Module.cwrap("lottie_load_from_data","number",["number","number"])},e()}})),u=new Map;async function d(e){const r=await fetch(e),t=r.headers.get("Content-Type");if(null!=t&&t.startsWith("text/"))return r.text();const a=await r.arrayBuffer();return(0,n.inflate)(a,{to:"string"})}function m(e,r,t){const n=r?30:60,a=JSON.parse(e).fr||n,o=a%n==0?a/n:1;return{reduceFactor:o,msPerFrame:1e3/(a/o),reducedFramesCount:Math.ceil(t/o)}}var p;p={init:async function(e,r,t,n,a){c||await l;const o=await d(r),s=allocate(intArrayFromString(o),"i8",0),i=c.init(),p=c.loadFromData(i,s);c.resize(i,t,t);const{reduceFactor:g,msPerFrame:f,reducedFramesCount:h}=m(o,n,p);u.set(e,{imgSize:t,reduceFactor:g,handle:i}),a(g,f,h)},changeData:async function(e,r,t,n){c||await l;const a=await d(r),o=allocate(intArrayFromString(a),"i8",0),{handle:s}=u.get(e),i=c.loadFromData(s,o),{reduceFactor:p,msPerFrame:g,reducedFramesCount:f}=m(a,t,i);n(p,g,f)},renderFrames:async function(e,r,t,n){c||await l;const{imgSize:a,reduceFactor:o,handle:s}=u.get(e);for(let e=r;e<=t;e++){const r=e*o;c.render(s,r);const t=c.buffer(s),i=Module.HEAPU8.subarray(t,t+a*a*4);n(e,new Uint8ClampedArray(i).buffer)}},destroy:function(e){const r=u.get(e);c.destroy(r.handle),u.delete(e)}},onmessage=async e=>{const{data:r}=e;switch(r.type){case"callMethod":{const{messageId:e,name:t,args:n}=r;try{if(e){const r=function(){for(var r=arguments.length,t=new Array(r),n=0;n{var e=a.O(void 0,[802],(()=>a(2993)));return a.O(e)},e=[],a.O=(r,t,n,o)=>{if(!t){var s=1/0;for(u=0;u=o)&&Object.keys(a.O).every((e=>a.O[e](t[c])))?t.splice(c--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[t,n,o]},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((r,t)=>(a.f[t](e,r),r)),[])),a.u=e=>e+".8080c8e2ac99944cfa27.js",a.miniCssF=e=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var r=a.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{var e={354:1};a.f.i=(r,t)=>{e[r]||importScripts(a.p+a.u(r))};var r=self.webpackChunktelegram_t=self.webpackChunktelegram_t||[],t=r.push.bind(r);r.push=r=>{var[n,o,s]=r;for(var i in o)a.o(o,i)&&(a.m[i]=o[i]);for(s&&s(a);n.length;)e[n.pop()]=1;t(r)}})(),r=a.x,a.x=()=>a.e(802).then(r),a.x()})(); -//# sourceMappingURL=354.b73ee1ca5b4052509fe6.js.map \ No newline at end of file +//# sourceMappingURL=354.7bc3c5c13bc07dd188c8.js.map \ No newline at end of file diff --git a/dist/354.7bc3c5c13bc07dd188c8.js.map b/dist/354.7bc3c5c13bc07dd188c8.js.map new file mode 100644 index 000000000..69fdbe9e3 --- /dev/null +++ b/dist/354.7bc3c5c13bc07dd188c8.js.map @@ -0,0 +1 @@ +{"version":3,"file":"354.7bc3c5c13bc07dd188c8.js","mappings":"uBAAIA,ECAAC,E,gCCyCkC,oBAAXC,QAA0BA,OAAOC,YAmEzBC,KAAKC,MAAM,KACJ,IAAIC,IAAI,CAChD,aAAc,sBAAuB,iBAAkB,0BAA2B,kBA9G7E,MA2IMC,EAAgC,IAAID,IAAI,CACnD,YAAa,YAAa,eAGfE,EAAgC,IAAIF,IAAI,CACnD,cAGwC,IAAIA,IAAI,IAC7CC,KACAC,IAYyC,IAAIF,IAAI,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OClF3JG,KAAKC,QAAWC,IAEdC,QAAQC,MAAMF,GACdG,EAAa,CAAEC,KAAM,iBAAkBF,MAAO,CAAEG,QAASL,EAAEE,MAAMG,SAAW,mCAG9EP,KAAKQ,iBAAiB,sBAAuBN,IAE3CC,QAAQC,MAAMF,GACdG,EAAa,CAAEC,KAAM,iBAAkBF,MAAO,CAAEG,QAASL,EAAEO,OAAOF,SAAW,qCAjFjF,MAAMG,EAAgB,IAAIC,IAqF1B,SAASN,EAAaO,EAAyBC,GACzCA,EACFC,YAAYF,EAAMC,GAElBC,YAAYF,GClFhB,IAAIG,EAFJf,KAAKgB,cAAc,mBAGnB,MAAMC,EAAoB,IAAIC,SAAeC,IAC3CC,OAAOC,qBAAuB,KAC5BN,EAAa,CACXO,KAAMF,OAAOG,MAAM,cAAe,GAAI,IACtCC,QAASJ,OAAOG,MAAM,iBAAkB,GAAI,CAAC,WAC7CE,OAAQL,OAAOG,MAAM,gBAAiB,GAAI,CAAC,SAAU,SAAU,WAC/DG,OAAQN,OAAOG,MAAM,gBAAiB,SAAU,CAAC,WACjDI,OAAQP,OAAOG,MAAM,gBAAiB,GAAI,CAAC,SAAU,WACrDK,aAAcR,OAAOG,MAAM,wBAAyB,SAAU,CAAC,SAAU,YAG3EJ,QAOEU,EAAY,IAAIlB,IAgDtBmB,eAAeC,EAAYC,GACzB,MAAMC,QAAiBC,MAAMF,GACvBG,EAAcF,EAASG,QAAQC,IAAI,gBAGzC,GAAIF,MAAAA,GAAAA,EAAaG,WAAW,SAC1B,OAAOL,EAASM,OAGlB,MAAMC,QAAoBP,EAASO,cACnC,OAAOC,EAAAA,EAAAA,SAAQD,EAAa,CAAEE,GAAI,WAGpC,SAASC,EAAWC,EAAcC,EAAwBC,GACxD,MACMC,EAASF,EAjEY,GADC,GAmEtBG,EAFgBC,KAAKC,MAAMN,GAEDO,IAAMJ,EAChCK,EAAeJ,EAAYD,GAAW,EAAIC,EAAYD,EAAS,EAErE,MAAO,CACLK,aAAAA,EACAC,WAAY,KAAQL,EAAYI,GAChCE,mBAAoB3D,KAAK4D,KAAKT,EAAcM,ID9FjC,IAAyBI,EAAAA,EC8HlB,CACpBlC,KAjGFQ,eACE2B,EACAzB,EACA0B,EACAb,EACAc,GAEK5C,SACGE,EAGR,MAAM2B,QAAab,EAAYC,GACzB4B,EAAmBC,SAASC,mBAAmBlB,GAAO,KAAM,GAC5DmB,EAAShD,EAAWO,OACpBwB,EAAc/B,EAAWa,aAAamC,EAAQH,GACpD7C,EAAWU,OAAOsC,EAAQL,EAASA,GAEnC,MAAM,aAAEN,EAAF,WAAgBC,EAAhB,mBAA4BC,GAAuBX,EAAWC,EAAMC,EAAeC,GAEzFjB,EAAUmC,IAAIP,EAAK,CAAEC,QAAAA,EAASN,aAAAA,EAAcW,OAAAA,IAC5CJ,EAAOP,EAAcC,EAAYC,IA8EjCW,WA3EFnC,eACE2B,EACAzB,EACAa,EACAc,GAEK5C,SACGE,EAGR,MAAM2B,QAAab,EAAYC,GACzB4B,EAAmBC,SAASC,mBAAmBlB,GAAO,KAAM,IAC5D,OAAEmB,GAAWlC,EAAUQ,IAAIoB,GAC3BX,EAAc/B,EAAWa,aAAamC,EAAQH,IAE9C,aAAER,EAAF,WAAgBC,EAAhB,mBAA4BC,GAAuBX,EAAWC,EAAMC,EAAeC,GACzFa,EAAOP,EAAcC,EAAYC,IA4DjCY,aA/BFpC,eACE2B,EAAaU,EAAmBC,EAAiBC,GAE5CtD,SACGE,EAGR,MAAM,QAAEyC,EAAF,aAAWN,EAAX,OAAyBW,GAAWlC,EAAUQ,IAAIoB,GAExD,IAAK,IAAIa,EAAIH,EAAWG,GAAKF,EAASE,IAAK,CACzC,MAAMC,EAAYD,EAAIlB,EAEtBrC,EAAWY,OAAOoC,EAAQQ,GAC1B,MAAMC,EAAgBzD,EAAWW,OAAOqC,GAClCnD,EAAOQ,OAAOqD,OAAOC,SAASF,EAAeA,EAAiBd,EAAUA,EAAU,GAExFW,EAAWC,EADS,IAAIK,kBAAkB/D,GAAMc,UAiBlDF,QAZF,SAAiBiC,GACf,MAAMmB,EAAW/C,EAAUQ,IAAIoB,GAE/B1C,EAAWS,QAAQoD,EAASb,QAE5BlC,EAAUgD,OAAOpB,KD1HjBqB,UAAYhD,MAAAA,IACV,MAAM,KAAElB,GAASL,EAEjB,OAAQK,EAAKN,MACX,IAAK,aAAc,CACjB,MAAM,UAAEyE,EAAF,KAAaC,EAAb,KAAmBC,GAASrE,EAClC,IACE,GAAImE,EAAW,CACb,MAAMG,EAAW,WAA4B,2BAAxBC,EAAwB,yBAAxBA,EAAwB,gBAC3C,MAAMC,EAAUD,EAAaA,EAAaE,OAAS,GAEnDhF,EAAa,CACXC,KAAM,iBACNyE,UAAAA,EACAI,aAAAA,GACCC,aAAmBE,YAAc,CAACF,QAAWG,IAGlD7E,EAAcsD,IAAIe,EAAWG,GAE7BD,EAAKO,KAAKN,GAGZ,MAAOjD,EAAUpB,SAAuB2C,EAAIwB,MAASC,IAAU,GAE3DF,GACF1E,EACE,CACEC,KAAM,iBACNyE,UAAAA,EACA9C,SAAAA,GAEFpB,GAGJ,MAAOT,GAMH2E,GACF1E,EAAa,CACXC,KAAM,iBACNyE,UAAAA,EACA3E,MAAO,CAAEG,QAASH,EAAMG,WAK1BwE,GACFrE,EAAcmE,OAAOE,GAGvB,MAEF,IAAK,iBAAkB,CACrB,MAAMG,EAAWxE,EAAc2B,IAAIzB,EAAKmE,WACpCG,IACFA,EAASO,YAAa,GAGxB,WEvEJC,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBL,IAAjBM,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CAGjDE,QAAS,IAOV,OAHAE,EAAoBJ,GAAUK,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAGpEI,EAAOD,QAIfH,EAAoBO,EAAIF,EAGxBL,EAAoBQ,EAAI,KAGvB,IAAIC,EAAsBT,EAAoBU,OAAEd,EAAW,CAAC,MAAM,IAAOI,EAAoB,QAE7F,OADsBA,EAAoBU,EAAED,ILhCzC7G,EAAW,GACfoG,EAAoBU,EAAI,CAACC,EAAQC,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,EAAAA,EACnB,IAASrC,EAAI,EAAGA,EAAI/E,EAAS8F,OAAQf,IAAK,CAGzC,IAFA,IAAKiC,EAAUC,EAAIC,GAAYlH,EAAS+E,GACpCsC,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAASlB,OAAQwB,MACpB,EAAXJ,GAAsBC,GAAgBD,IAAaK,OAAOC,KAAKpB,EAAoBU,GAAGW,OAAOvD,GAASkC,EAAoBU,EAAE5C,GAAK8C,EAASM,MAC9IN,EAASU,OAAOJ,IAAK,IAErBD,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbrH,EAAS0H,OAAO3C,IAAK,GACrB,IAAI4C,EAAIV,SACEjB,IAAN2B,IAAiBZ,EAASY,IAGhC,OAAOZ,EAvBNG,EAAWA,GAAY,EACvB,IAAI,IAAInC,EAAI/E,EAAS8F,OAAQf,EAAI,GAAK/E,EAAS+E,EAAI,GAAG,GAAKmC,EAAUnC,IAAK/E,EAAS+E,GAAK/E,EAAS+E,EAAI,GACrG/E,EAAS+E,GAAK,CAACiC,EAAUC,EAAIC,IML/Bd,EAAoBwB,EAAI,GAGxBxB,EAAoBzF,EAAKkH,GACjBlG,QAAQmG,IAAIP,OAAOC,KAAKpB,EAAoBwB,GAAGG,QAAO,CAACC,EAAU9D,KACvEkC,EAAoBwB,EAAE1D,GAAK2D,EAASG,GAC7BA,IACL,KCNJ5B,EAAoB6B,EAAKJ,GAEZA,EAAL,2BCFRzB,EAAoB8B,SAAYL,MCDhCzB,EAAoB+B,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOC,MAAQ,IAAIC,SAAS,cAAb,GACd,MAAO3H,GACR,GAAsB,iBAAXT,OAAqB,OAAOA,QALjB,GCAxBkG,EAAoBmC,EAAI,CAACC,EAAKC,IAAUlB,OAAOmB,UAAUC,eAAejC,KAAK8B,EAAKC,G,MCAlF,IAAIG,EACAxC,EAAoB+B,EAAE1G,gBAAemH,EAAYxC,EAAoB+B,EAAEU,SAAW,IACtF,IAAIC,EAAW1C,EAAoB+B,EAAEW,SACrC,IAAKF,GAAaE,IACbA,EAASC,gBACZH,EAAYE,EAASC,cAAcC,MAC/BJ,GAAW,CACf,IAAIK,EAAUH,EAASI,qBAAqB,UACzCD,EAAQnD,SAAQ8C,EAAYK,EAAQA,EAAQnD,OAAS,GAAGkD,KAK7D,IAAKJ,EAAW,MAAM,IAAIO,MAAM,yDAChCP,EAAYA,EAAUQ,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFhD,EAAoBiD,EAAIT,G,SCXxB,IAAIU,EAAkB,CACrB,IAAK,GAgBNlD,EAAoBwB,EAAE7C,EAAI,CAAC8C,EAASG,KAE/BsB,EAAgBzB,IAElBpG,cAAc2E,EAAoBiD,EAAIjD,EAAoB6B,EAAEJ,KAK/D,IAAI0B,EAAqB9I,KAA6B,uBAAIA,KAA6B,wBAAK,GACxF+I,EAA6BD,EAAmBtD,KAAKwD,KAAKF,GAC9DA,EAAmBtD,KAvBC5E,IACnB,IAAK2F,EAAU0C,EAAaC,GAAWtI,EACvC,IAAI,IAAIgF,KAAYqD,EAChBtD,EAAoBmC,EAAEmB,EAAarD,KACrCD,EAAoBO,EAAEN,GAAYqD,EAAYrD,IAIhD,IADGsD,GAASA,EAAQvD,GACdY,EAASlB,QACdwD,EAAgBtC,EAAS4C,OAAS,EACnCJ,EAA2BnI,K,GXnBxBpB,EAAOmG,EAAoBQ,EAC/BR,EAAoBQ,EAAI,IAChBR,EAAoBzF,EAAE,KAAKkJ,KAAK5J,GYDdmG,EAAoBQ,K","sources":["webpack://telegram-t/webpack/runtime/chunk loaded","webpack://telegram-t/webpack/runtime/startup chunk dependencies","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/util/createWorkerInterface.ts","webpack://telegram-t/./src/lib/rlottie/rlottie.worker.ts","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/importScripts chunk loading","webpack://telegram-t/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(802).then(next);\n};","export const APP_NAME = 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\nexport const APP_REVISION = process.env.APP_REVISION;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v7';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { CancellableCallback, OriginMessageEvent, WorkerMessageData } from './WorkerConnector';\nimport { DEBUG } from '../config';\n\ndeclare const self: WorkerGlobalScope;\n\nhandleErrors();\n\nconst callbackState = new Map();\n\nexport default function createInterface(api: Record) {\n onmessage = async (message: OriginMessageEvent) => {\n const { data } = message;\n\n switch (data.type) {\n case 'callMethod': {\n const { messageId, name, args } = data;\n try {\n if (messageId) {\n const callback = (...callbackArgs: any[]) => {\n const lastArg = callbackArgs[callbackArgs.length - 1];\n\n sendToOrigin({\n type: 'methodCallback',\n messageId,\n callbackArgs,\n }, lastArg instanceof ArrayBuffer ? [lastArg] : undefined);\n };\n\n callbackState.set(messageId, callback);\n\n args.push(callback as never);\n }\n\n const [response, arrayBuffers] = (await api[name](...args)) || [];\n\n if (messageId) {\n sendToOrigin(\n {\n type: 'methodResponse',\n messageId,\n response,\n },\n arrayBuffers,\n );\n }\n } catch (error: any) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n if (messageId) {\n sendToOrigin({\n type: 'methodResponse',\n messageId,\n error: { message: error.message },\n });\n }\n }\n\n if (messageId) {\n callbackState.delete(messageId);\n }\n\n break;\n }\n case 'cancelProgress': {\n const callback = callbackState.get(data.messageId);\n if (callback) {\n callback.isCanceled = true;\n }\n\n break;\n }\n }\n };\n}\n\nfunction handleErrors() {\n self.onerror = (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.error.message || 'Uncaught exception in worker' } });\n };\n\n self.addEventListener('unhandledrejection', (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.reason.message || 'Uncaught rejection in worker' } });\n });\n}\n\nfunction sendToOrigin(data: WorkerMessageData, arrayBuffers?: ArrayBuffer[]) {\n if (arrayBuffers) {\n postMessage(data, arrayBuffers);\n } else {\n postMessage(data);\n }\n}\n","import { inflate } from 'pako/dist/pako_inflate';\nimport createWorkerInterface from '../../util/createWorkerInterface';\nimport { CancellableCallback } from '../../util/WorkerConnector';\n\ndeclare const Module: any;\n\ndeclare function allocate(...args: any[]): string;\n\ndeclare function intArrayFromString(str: String): string;\n\ndeclare const self: WorkerGlobalScope;\n\nself.importScripts('rlottie-wasm.js');\n\nlet rLottieApi: Record;\nconst rLottieApiPromise = new Promise((resolve) => {\n Module.onRuntimeInitialized = () => {\n rLottieApi = {\n init: Module.cwrap('lottie_init', '', []),\n destroy: Module.cwrap('lottie_destroy', '', ['number']),\n resize: Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: Module.cwrap('lottie_buffer', 'number', ['number']),\n render: Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: Module.cwrap('lottie_load_from_data', 'number', ['number', 'number']),\n };\n\n resolve();\n };\n});\n\nconst HIGH_PRIORITY_MAX_FPS = 60;\nconst LOW_PRIORITY_MAX_FPS = 30;\n\nconst renderers = new Map();\n\nasync function init(\n key: string,\n animationData: string,\n imgSize: number,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const handle = rLottieApi.init();\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n rLottieApi.resize(handle, imgSize, imgSize);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n\n renderers.set(key, { imgSize, reduceFactor, handle });\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function changeData(\n key: string,\n animationData: string,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const { handle } = renderers.get(key)!;\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function extractJson(animationData: string) {\n const response = await fetch(animationData);\n const contentType = response.headers.get('Content-Type');\n\n // Support deprecated JSON format cached locally\n if (contentType?.startsWith('text/')) {\n return response.text();\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return inflate(arrayBuffer, { to: 'string' });\n}\n\nfunction calcParams(json: string, isLowPriority: boolean, framesCount: number) {\n const animationData = JSON.parse(json);\n const maxFps = isLowPriority ? LOW_PRIORITY_MAX_FPS : HIGH_PRIORITY_MAX_FPS;\n const sourceFps = animationData.fr || maxFps;\n const reduceFactor = sourceFps % maxFps === 0 ? sourceFps / maxFps : 1;\n\n return {\n reduceFactor,\n msPerFrame: 1000 / (sourceFps / reduceFactor),\n reducedFramesCount: Math.ceil(framesCount / reduceFactor),\n };\n}\n\nasync function renderFrames(\n key: string, fromIndex: number, toIndex: number, onProgress: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const { imgSize, reduceFactor, handle } = renderers.get(key)!;\n\n for (let i = fromIndex; i <= toIndex; i++) {\n const realIndex = i * reduceFactor;\n\n rLottieApi.render(handle, realIndex);\n const bufferPointer = rLottieApi.buffer(handle);\n const data = Module.HEAPU8.subarray(bufferPointer, bufferPointer + (imgSize * imgSize * 4));\n const arrayBuffer = new Uint8ClampedArray(data).buffer;\n onProgress(i, arrayBuffer);\n }\n}\n\nfunction destroy(key: string) {\n const renderer = renderers.get(key)!;\n\n rLottieApi.destroy(renderer.handle);\n\n renderers.delete(key);\n}\n\ncreateWorkerInterface({\n init,\n changeData,\n renderFrames,\n destroy,\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [802], () => (__webpack_require__(2993)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + \"8080c8e2ac99944cfa27\" + \".js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t354: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","window","innerHeight","Math","round","Set","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","self","onerror","e","console","error","sendToOrigin","type","message","addEventListener","reason","callbackState","Map","data","arrayBuffers","postMessage","rLottieApi","importScripts","rLottieApiPromise","Promise","resolve","Module","onRuntimeInitialized","init","cwrap","destroy","resize","buffer","render","loadFromData","renderers","async","extractJson","animationData","response","fetch","contentType","headers","get","startsWith","text","arrayBuffer","inflate","to","calcParams","json","isLowPriority","framesCount","maxFps","sourceFps","JSON","parse","fr","reduceFactor","msPerFrame","reducedFramesCount","ceil","api","key","imgSize","onInit","stringOnWasmHeap","allocate","intArrayFromString","handle","set","changeData","renderFrames","fromIndex","toIndex","onProgress","i","realIndex","bufferPointer","HEAPU8","subarray","Uint8ClampedArray","renderer","delete","onmessage","messageId","name","args","callback","callbackArgs","lastArg","length","ArrayBuffer","undefined","push","isCanceled","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","x","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","r","f","chunkId","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","o","obj","prop","prototype","hasOwnProperty","scriptUrl","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/354.b73ee1ca5b4052509fe6.js.map b/dist/354.b73ee1ca5b4052509fe6.js.map deleted file mode 100644 index 521ee3cee..000000000 --- a/dist/354.b73ee1ca5b4052509fe6.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"354.b73ee1ca5b4052509fe6.js","mappings":"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","sources":["webpack://telegram-t/webpack/runtime/chunk loaded","webpack://telegram-t/webpack/runtime/startup chunk dependencies","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/util/createWorkerInterface.ts","webpack://telegram-t/./src/lib/rlottie/rlottie.worker.ts","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/importScripts chunk loading","webpack://telegram-t/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(802).then(next);\n};","export const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION || 'dev';\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v7';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { CancellableCallback, OriginMessageEvent, WorkerMessageData } from './WorkerConnector';\nimport { DEBUG } from '../config';\n\ndeclare const self: WorkerGlobalScope;\n\nhandleErrors();\n\nconst callbackState = new Map();\n\nexport default function createInterface(api: Record) {\n onmessage = async (message: OriginMessageEvent) => {\n const { data } = message;\n\n switch (data.type) {\n case 'callMethod': {\n const { messageId, name, args } = data;\n try {\n if (messageId) {\n const callback = (...callbackArgs: any[]) => {\n const lastArg = callbackArgs[callbackArgs.length - 1];\n\n sendToOrigin({\n type: 'methodCallback',\n messageId,\n callbackArgs,\n }, lastArg instanceof ArrayBuffer ? [lastArg] : undefined);\n };\n\n callbackState.set(messageId, callback);\n\n args.push(callback as never);\n }\n\n const [response, arrayBuffers] = (await api[name](...args)) || [];\n\n if (messageId) {\n sendToOrigin(\n {\n type: 'methodResponse',\n messageId,\n response,\n },\n arrayBuffers,\n );\n }\n } catch (error: any) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n if (messageId) {\n sendToOrigin({\n type: 'methodResponse',\n messageId,\n error: { message: error.message },\n });\n }\n }\n\n if (messageId) {\n callbackState.delete(messageId);\n }\n\n break;\n }\n case 'cancelProgress': {\n const callback = callbackState.get(data.messageId);\n if (callback) {\n callback.isCanceled = true;\n }\n\n break;\n }\n }\n };\n}\n\nfunction handleErrors() {\n self.onerror = (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.error.message || 'Uncaught exception in worker' } });\n };\n\n self.addEventListener('unhandledrejection', (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.reason.message || 'Uncaught rejection in worker' } });\n });\n}\n\nfunction sendToOrigin(data: WorkerMessageData, arrayBuffers?: ArrayBuffer[]) {\n if (arrayBuffers) {\n postMessage(data, arrayBuffers);\n } else {\n postMessage(data);\n }\n}\n","import { inflate } from 'pako/dist/pako_inflate';\nimport createWorkerInterface from '../../util/createWorkerInterface';\nimport { CancellableCallback } from '../../util/WorkerConnector';\n\ndeclare const Module: any;\n\ndeclare function allocate(...args: any[]): string;\n\ndeclare function intArrayFromString(str: String): string;\n\ndeclare const self: WorkerGlobalScope;\n\nself.importScripts('rlottie-wasm.js');\n\nlet rLottieApi: Record;\nconst rLottieApiPromise = new Promise((resolve) => {\n Module.onRuntimeInitialized = () => {\n rLottieApi = {\n init: Module.cwrap('lottie_init', '', []),\n destroy: Module.cwrap('lottie_destroy', '', ['number']),\n resize: Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: Module.cwrap('lottie_buffer', 'number', ['number']),\n render: Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: Module.cwrap('lottie_load_from_data', 'number', ['number', 'number']),\n };\n\n resolve();\n };\n});\n\nconst HIGH_PRIORITY_MAX_FPS = 60;\nconst LOW_PRIORITY_MAX_FPS = 30;\n\nconst renderers = new Map();\n\nasync function init(\n key: string,\n animationData: string,\n imgSize: number,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const handle = rLottieApi.init();\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n rLottieApi.resize(handle, imgSize, imgSize);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n\n renderers.set(key, { imgSize, reduceFactor, handle });\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function changeData(\n key: string,\n animationData: string,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const { handle } = renderers.get(key)!;\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function extractJson(animationData: string) {\n const response = await fetch(animationData);\n const contentType = response.headers.get('Content-Type');\n\n // Support deprecated JSON format cached locally\n if (contentType?.startsWith('text/')) {\n return response.text();\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return inflate(arrayBuffer, { to: 'string' });\n}\n\nfunction calcParams(json: string, isLowPriority: boolean, framesCount: number) {\n const animationData = JSON.parse(json);\n const maxFps = isLowPriority ? LOW_PRIORITY_MAX_FPS : HIGH_PRIORITY_MAX_FPS;\n const sourceFps = animationData.fr || maxFps;\n const reduceFactor = sourceFps % maxFps === 0 ? sourceFps / maxFps : 1;\n\n return {\n reduceFactor,\n msPerFrame: 1000 / (sourceFps / reduceFactor),\n reducedFramesCount: Math.ceil(framesCount / reduceFactor),\n };\n}\n\nasync function renderFrames(\n key: string, fromIndex: number, toIndex: number, onProgress: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const { imgSize, reduceFactor, handle } = renderers.get(key)!;\n\n for (let i = fromIndex; i <= toIndex; i++) {\n const realIndex = i * reduceFactor;\n\n rLottieApi.render(handle, realIndex);\n const bufferPointer = rLottieApi.buffer(handle);\n const data = Module.HEAPU8.subarray(bufferPointer, bufferPointer + (imgSize * imgSize * 4));\n const arrayBuffer = new Uint8ClampedArray(data).buffer;\n onProgress(i, arrayBuffer);\n }\n}\n\nfunction destroy(key: string) {\n const renderer = renderers.get(key)!;\n\n rLottieApi.destroy(renderer.handle);\n\n renderers.delete(key);\n}\n\ncreateWorkerInterface({\n init,\n changeData,\n renderFrames,\n destroy,\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [802], () => (__webpack_require__(2993)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + \"8080c8e2ac99944cfa27\" + \".js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t354: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","window","innerHeight","Math","round","Set","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","self","onerror","e","console","error","sendToOrigin","type","message","addEventListener","reason","callbackState","Map","data","arrayBuffers","postMessage","rLottieApi","importScripts","rLottieApiPromise","Promise","resolve","Module","onRuntimeInitialized","init","cwrap","destroy","resize","buffer","render","loadFromData","renderers","async","extractJson","animationData","response","fetch","contentType","headers","get","startsWith","text","arrayBuffer","inflate","to","calcParams","json","isLowPriority","framesCount","maxFps","sourceFps","JSON","parse","fr","reduceFactor","msPerFrame","reducedFramesCount","ceil","api","key","imgSize","onInit","stringOnWasmHeap","allocate","intArrayFromString","handle","set","changeData","renderFrames","fromIndex","toIndex","onProgress","i","realIndex","bufferPointer","HEAPU8","subarray","Uint8ClampedArray","renderer","delete","onmessage","messageId","name","args","callback","callbackArgs","lastArg","length","ArrayBuffer","undefined","push","isCanceled","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","x","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","r","f","chunkId","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","o","obj","prop","prototype","hasOwnProperty","scriptUrl","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/47.6587cf7cd58625267285.css b/dist/47.636da8b3a0051a88c67f.css similarity index 91% rename from dist/47.6587cf7cd58625267285.css rename to dist/47.636da8b3a0051a88c67f.css index 331740ba8..3469e09cc 100644 --- a/dist/47.6587cf7cd58625267285.css +++ b/dist/47.636da8b3a0051a88c67f.css @@ -1,10 +1,10 @@ .Modal{position:relative;z-index:var(--z-modal)}.Modal.delete .modal-dialog,.Modal.error .modal-dialog,.Modal.confirm .modal-dialog,.Modal.pin .modal-dialog,.Modal.unpin-all .modal-dialog{max-width:23rem}.Modal.error .modal-content>div{margin-top:1rem}.Modal.narrow .modal-dialog{max-width:20rem}.Modal.report .modal-dialog{max-width:15rem}.Modal .modal-container{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;justify-content:center;align-items:center}.Modal .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;background-color:rgba(0,0,0,.25)}.Modal.transparent-backdrop .modal-backdrop{background-color:transparent}.Modal .modal-dialog{position:relative;display:inline-flex;flex-direction:column;width:100%;max-width:35rem;min-width:17.5rem;margin:2rem auto;background-color:var(--color-background);box-shadow:0 .25rem .5rem .125rem var(--color-default-shadow);border-radius:var(--border-radius-default);transform:translate3d(0, -1rem, 0);transition:transform .2s ease,opacity .2s ease}body.animation-level-0 .Modal .modal-dialog{transition:none;transform:none !important}@media(max-width: 450px){.Modal .modal-dialog{max-width:calc(100vw - 3rem) !important}}.Modal.open .modal-dialog{transform:translate3d(0, 0, 0)}.Modal.closing .modal-dialog{transform:translate3d(0, 1rem, 0)}.Modal .modal-header,.Modal .modal-header-condensed{padding:1rem 1rem 0;display:flex;align-items:center;flex-shrink:0}.Modal .modal-title{font-size:1.25rem;font-weight:500;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.Modal .modal-title:not(:only-child){margin:0 1.3125rem}.Modal .modal-header-condensed{padding:.5rem 1.25rem 0 .9375rem !important}.Modal .modal-header-condensed .modal-action-button{font-size:.875rem;height:2.25rem;width:auto;line-height:1.625rem;margin-left:auto;padding-left:1.25rem;padding-right:1.25rem;min-width:5rem}.Modal .modal-content{width:100%;flex-grow:1;padding:1rem;overflow-y:auto;max-height:90vh}.Modal .modal-content b,.Modal .modal-content strong{word-break:break-word}.Modal .modal-title,.Modal .modal-content,.Modal .modal-content>p{unicode-bidi:plaintext;text-align:initial}.Modal .modal-about{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5;text-overflow:ellipsis;overflow:hidden}.Modal .modal-help{color:var(--color-text-secondary);font-size:.9375rem;line-height:1.3}.Modal .dialog-buttons{display:flex;align-items:flex-end}.Modal .dialog-buttons .confirm-dialog-button+.confirm-dialog-button{margin-left:1rem}.Modal .confirm-dialog-button{width:auto;height:auto;margin-left:auto;text-align:right;font-weight:500;white-space:pre-wrap} .MicrophoneButton{display:flex;justify-content:center;align-items:center;outline:none !important;position:relative;width:6rem;height:6rem;border:0;background:radial-gradient(100% 100% at 100% 0%, #00a0b9 0%, #33c659 55%, #33c659 100%);border-radius:50%;font-size:2rem;color:#fff;transition:.25s ease-out filter}.MicrophoneButton::before{content:"";display:block;position:absolute;width:8rem;height:8rem;background:#64c166;border-radius:50%;filter:blur(10px);opacity:.2;pointer-events:none}body.is-ios .MicrophoneButton::before{display:none}.MicrophoneButton:hover{filter:brightness(0.9)}.MicrophoneButton.crossed{background:radial-gradient(100% 100% at 100% 0%, #00AFFE 0%, #00AFFE 55%, #007FFF 100%)}.MicrophoneButton.crossed::before{background:#00affe}.MicrophoneButton.muted-by-admin{background:radial-gradient(85.5% 103.5% at 87.5% 20.65%, #CE4D74 0%, #3D52DF 100%)}.MicrophoneButton.muted-by-admin::before{background:#3d52df}.MicrophoneButton.is-connecting,.MicrophoneButton.is-connecting:hover{background:#222b34}.MicrophoneButton.is-connecting::before,.MicrophoneButton.is-connecting:hover::before{background:transparent} .participant-menu{position:absolute}.participant-menu .bubble{background:none;border-radius:0;padding:0;border:none !important;box-shadow:none !important;overflow:visible;color:#fff}.participant-menu .bubble .group{box-shadow:0 .25rem .5rem .125rem rgba(16,16,16,.3);overflow:hidden;background:var(--color-background);border-radius:var(--border-radius-default);margin-bottom:.5rem}.participant-menu .volume-control{height:3rem;position:relative;overflow:hidden;cursor:pointer}.participant-menu .volume-control .info{pointer-events:none;position:relative;z-index:1;height:100%;display:flex;flex-direction:row;align-items:center;padding:.75rem 1rem}.participant-menu .volume-control .info .AnimatedSticker{margin-right:2rem}.participant-menu .volume-control.high{--range-color: #4DA6E0}.participant-menu .volume-control.normal{--range-color: #57BC6C}.participant-menu .volume-control.medium{--range-color: #CAA53B}.participant-menu .volume-control.low{--range-color: #CB5757}.participant-menu .volume-control input[type=range]{-webkit-appearance:none;display:block;width:100%;height:.75rem;margin-bottom:.5rem;background:transparent}.participant-menu .volume-control input[type=range]:focus{outline:none}.participant-menu .volume-control input[type=range]::-ms-track{width:100%;cursor:pointer;background:transparent;border-color:transparent;color:transparent}.participant-menu .volume-control input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.participant-menu .volume-control input[type=range]::-moz-slider-thumb{-moz-appearance:none}.participant-menu .volume-control input[type=range]::-webkit-slider-runnable-track{cursor:pointer}.participant-menu .volume-control input[type=range]::-moz-range-track,.participant-menu .volume-control input[type=range]::-moz-range-progress{cursor:pointer}.participant-menu .volume-control input[type=range]{height:3rem;position:absolute;left:-1.5rem;top:0;width:calc(100% + 3rem);margin:0;z-index:0}.participant-menu .volume-control input[type=range]::-webkit-slider-thumb{border:none;height:3rem;width:1.5rem;background:var(--range-color);border-radius:var(--border-radius-default);box-shadow:-13.5rem 0 0 12.75rem var(--range-color);-webkit-transition:.25s ease-in-out background-color,.25s ease-in-out box-shadow;transition:.25s ease-in-out background-color,.25s ease-in-out box-shadow}.participant-menu .volume-control input[type=range]::-moz-range-thumb{border:none;height:3rem;width:1.5rem;background:var(--range-color);border-radius:var(--border-radius-default);box-shadow:-13.5rem 0 0 12.75rem var(--range-color);-moz-transition:.25s ease-in-out background-color,.25s ease-in-out box-shadow;transition:.25s ease-in-out background-color,.25s ease-in-out box-shadow}.participant-menu .volume-control input[type=range]::-ms-thumb{border:none;height:3rem;width:1.5rem;background:var(--range-color);border-radius:var(--border-radius-default);box-shadow:-13.5rem 0 0 12.75rem var(--range-color);-ms-transition:.25s ease-in-out background-color,.25s ease-in-out box-shadow;transition:.25s ease-in-out background-color,.25s ease-in-out box-shadow} -.Avatar{--color-user: var(--color-primary);flex:none;align-items:center;justify-content:center;width:3.375rem;height:3.375rem;border-radius:50%;background:linear-gradient(var(--color-white) -125%, var(--color-user));color:#fff;font-weight:bold;display:flex;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Avatar img:not(.emoji){border-radius:50%;width:100%;height:100%}.Avatar .emoji{width:1rem;height:1rem}.Avatar i{font-size:2.5rem}.Avatar i.icon-reply-filled{transform:scale(0.7)}.Avatar.size-micro{width:1rem;height:1rem;font-size:.5125rem}.Avatar.size-micro .emoji{width:.5625rem;height:.5625rem}.Avatar.size-tiny{width:2rem;height:2rem;font-size:.875rem}.Avatar.size-tiny .emoji{width:.875rem;height:.875rem}.Avatar.size-small{width:2.125rem;height:2.125rem;font-size:.875rem}.Avatar.size-small .emoji{width:.875rem;height:.875rem}.Avatar.size-medium{width:2.75rem;height:2.75rem;font-size:1.1875rem}.Avatar.size-medium .emoji{width:1rem;height:1rem}.Avatar.size-large{font-size:1.3125rem}.Avatar.size-large i{font-size:3.5rem}.Avatar.size-large .emoji{width:1.3125rem;height:1.3125rem}.Avatar.size-jumbo{width:7.5rem;height:7.5rem;font-size:3.5rem}.Avatar.size-jumbo i{font-size:6rem}.Avatar.size-jumbo .emoji{width:3.5rem;height:3.5rem}.Avatar.online{position:relative}.Avatar.online::after{content:"";display:block;position:absolute;bottom:.05rem;right:.05rem;width:.875rem;height:.875rem;border-radius:50%;border:2px solid var(--color-background);background-color:#0ac630;flex-shrink:0}.Avatar.interactive{cursor:pointer} +.Avatar{--color-user: var(--color-primary);flex:none;align-items:center;justify-content:center;width:3.375rem;height:3.375rem;border-radius:50%;background:linear-gradient(var(--color-white) -125%, var(--color-user));color:#fff;font-weight:bold;display:flex;white-space:nowrap;-webkit-user-select:none;user-select:none}.Avatar img:not(.emoji){border-radius:50%;width:100%;height:100%}.Avatar .emoji{width:1rem;height:1rem}.Avatar i{font-size:2.5rem}.Avatar i.icon-reply-filled{transform:scale(0.7)}.Avatar.size-micro{width:1rem;height:1rem;font-size:.5rem}.Avatar.size-micro .emoji{width:.5625rem;height:.5625rem}.Avatar.size-tiny{width:2rem;height:2rem;font-size:.875rem}.Avatar.size-tiny .emoji{width:.875rem;height:.875rem}.Avatar.size-small{width:2.125rem;height:2.125rem;font-size:.875rem}.Avatar.size-small .emoji{width:.875rem;height:.875rem}.Avatar.size-medium{width:2.75rem;height:2.75rem;font-size:1.1875rem}.Avatar.size-medium .emoji{width:1rem;height:1rem}.Avatar.size-large{font-size:1.3125rem}.Avatar.size-large i{font-size:3.5rem}.Avatar.size-large .emoji{width:1.3125rem;height:1.3125rem}.Avatar.size-jumbo{width:7.5rem;height:7.5rem;font-size:3.5rem}.Avatar.size-jumbo i{font-size:6rem}.Avatar.size-jumbo .emoji{width:3.5rem;height:3.5rem}.Avatar.online{position:relative}.Avatar.online::after{content:"";display:block;position:absolute;bottom:.0625rem;right:.0625rem;width:.875rem;height:.875rem;border-radius:50%;border:2px solid var(--color-background);background-color:#0ac630;flex-shrink:0}.Avatar.interactive{cursor:pointer} .GroupCallParticipant{position:relative;display:flex;flex-direction:row;align-items:center;color:#fff;padding:.5rem .75rem;border-radius:.75rem;transition:.15s ease-out background-color;cursor:pointer}.GroupCallParticipant:hover{background:#2f363e}.GroupCallParticipant audio{display:none}.GroupCallParticipant .Avatar{margin-right:1rem}.GroupCallParticipant .info{min-width:0;display:flex;flex-direction:column}.GroupCallParticipant .info .name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.GroupCallParticipant .info .about{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#848d94;font-size:.75rem}.GroupCallParticipant .info .about.blue{color:#4da6e0}.GroupCallParticipant .info .about.green{color:#57bc6c}.GroupCallParticipant .info .about.red{color:#ff706f}.GroupCallParticipant .microphone{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;margin-left:auto;font-size:1.5rem;color:#ff706f}.GroupCallParticipant.can-self-unmute .microphone{color:#848d94}.GroupCallParticipant .streams{cursor:pointer;display:flex} .GroupCallParticipantVideo{border-radius:.75rem;overflow:hidden;position:relative;max-height:12.875rem;width:calc(50% - .25rem);transition:.25s ease-out width;cursor:pointer}.GroupCallParticipantVideo .thumbnail-avatar{position:absolute;border-radius:0;width:100%;height:100%;transform:scale(1.1)}.GroupCallParticipantVideo .thumbnail-avatar img{filter:blur(10px);border-radius:0;object-fit:cover}.GroupCallParticipantVideo:last-child:nth-child(odd){width:100%}.GroupCallParticipantVideo::before{box-shadow:0 0 0 3px transparent inset;width:100%;height:100%;position:absolute;display:block;content:"";z-index:5;border-radius:.75rem;transition:.25s ease-out box-shadow}.GroupCallParticipantVideo.active::before{box-shadow:0px 0px 0px 3px #78ee7e inset}.GroupCallParticipantVideo .back-button{position:absolute;z-index:5;top:.75rem;left:.75rem;background:rgba(0,0,0,.3);border:0;color:#fff;border-radius:1rem;padding:.25rem .75rem;display:flex;align-items:center;gap:.25rem;transition:.25s ease-out opacity,.25s ease-out background-color;opacity:0;cursor:pointer;outline:none !important}.GroupCallParticipantVideo .back-button:hover{background:rgba(0,0,0,.4)}.GroupCallParticipantVideo video{display:block;width:100%}.GroupCallParticipantVideo .video{object-fit:contain;height:12.5rem;position:relative}.GroupCallParticipantVideo .thumbnail-wrapper{position:absolute;top:50%;left:50%;z-index:0;width:100%;transform:translate(-50%, -50%) scale(1.5);background:#000}.GroupCallParticipantVideo .thumbnail{filter:blur(10px) brightness(0.5);object-fit:cover}.GroupCallParticipantVideo .info{position:absolute;bottom:0;color:#fff;display:flex;align-items:center;padding:0 .5rem .25rem;width:100%;height:2rem;background:linear-gradient(0deg, #000, transparent);transition:.25s ease-out opacity;opacity:0}.GroupCallParticipantVideo .info .name{margin-left:.5rem}.GroupCallParticipantVideo .info .last-icon{margin-left:auto}.videos:hover .GroupCallParticipantVideo .info{opacity:1}.videos:hover .GroupCallParticipantVideo .back-button{opacity:1} -.GroupCall .modal-content{display:flex;flex-direction:column;align-items:center;height:37.5rem}.GroupCall .modal-dialog{max-height:calc(100% - 4rem);background:#181f27}.GroupCall .Menu .bubble{--color-background: #232A34;--color-chat-hover: #2F363E;--color-item-active: #2F363E;--color-text: #fff;box-shadow:0 .25rem .5rem .125rem rgba(16,16,16,.3)}.GroupCall .MenuItem{padding:.75rem 1rem !important}.GroupCall.single-column{opacity:1 !important}.GroupCall.single-column .modal-dialog{max-width:100% !important;border-bottom-left-radius:0;border-bottom-right-radius:0;margin-top:auto;margin-bottom:0;transform:translate3d(0, 100%, 0);transition:transform .3s ease,opacity .3s ease}.GroupCall.single-column .modal-backdrop{opacity:0;transition:opacity .2s ease}.GroupCall.single-column.open .modal-backdrop{opacity:1}.GroupCall.single-column.open .modal-dialog{transform:translate3d(0, 0, 0)}.GroupCall .header{width:100%;display:flex;align-items:center;color:#fff;margin-bottom:.5rem}.GroupCall .header h3{font-size:1.25rem;font-weight:500;margin:0 auto 0 .5rem}.GroupCall .videos{display:flex;flex-wrap:wrap;gap:.5rem}.GroupCall .participants{margin-top:.75rem;background:#222b34;border-radius:.75rem}.GroupCall .participants .Loading{padding:2rem 0}.GroupCall .participants .invite-btn{padding:.25rem .75rem;display:flex;align-items:center;border-radius:.75rem;transition:.15s ease-out background-color;cursor:pointer;color:var(--color-text-secondary)}.GroupCall .participants .invite-btn:hover{background:#2f363e}.GroupCall .participants .invite-btn .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.GroupCall .participants .invite-btn .icon{display:flex;justify-content:center;align-items:center;width:2.75rem;height:2.75rem;font-size:1.5rem;margin-right:1rem}.GroupCall .scrollable{overflow:auto;padding-bottom:2rem;max-width:37.5rem;width:100%}.GroupCall .buttons{max-width:37.5rem;margin-top:auto;display:flex;align-items:center;justify-content:space-around;width:100%;position:relative;height:8.75rem}.GroupCall .buttons button{cursor:pointer}.GroupCall .buttons::before{position:absolute;content:"";width:100%;height:2rem;background:linear-gradient(0deg, #181F27, rgba(24, 31, 39, 0));z-index:0;top:-2rem}.GroupCall .buttons .button-wrapper{width:4rem;display:flex;flex-direction:column;align-items:center}.GroupCall .buttons .button-wrapper .button-text{white-space:nowrap;font-size:.75rem;margin-top:.5rem;color:#fff}.GroupCall .buttons .button-wrapper.microphone-wrapper{width:6rem}.GroupCall .buttons .button-wrapper.microphone-wrapper .button-text{margin-top:.75rem;font-size:1rem}.GroupCall .buttons .Loading{position:absolute;transform:translate(0, -1.125rem)}.GroupCall .buttons .Loading .Spinner{--spinner-size: 6.5rem}.GroupCall .buttons .video-buttons{display:flex;flex-direction:column;align-items:center}.GroupCall .buttons .small-button,.GroupCall .buttons .smaller-button{outline:none;border:0;background:#15415b;border-radius:50%;width:3rem;height:3rem;color:#fff;font-size:1.375rem;display:flex;align-items:center;justify-content:center;transition:.25s ease-out background-color}.GroupCall .buttons .small-button:hover,.GroupCall .buttons .smaller-button:hover{background:#11364b}.GroupCall .buttons .small-button.camera.active{background:#15415b}.GroupCall .buttons .small-button.camera.active:hover{background:#11364b}.GroupCall .buttons .small-button.speaker{background:#2b3a51}.GroupCall .buttons .small-button.speaker.active{background:#496092}.GroupCall .buttons .small-button.leave{background:#5a2824}.GroupCall .buttons .small-button.leave:hover{background:#49201d}.GroupCall .buttons .smaller-button{width:2.5rem;height:2.5rem;margin-bottom:.5rem;padding:0}.GroupCall.landscape .scrollable{display:flex;flex-direction:row;flex-grow:1;gap:1rem;align-items:flex-start;max-width:100%;max-height:100%}.GroupCall.landscape .GroupCallParticipantVideo{max-height:initial}.GroupCall.landscape .GroupCallParticipantVideo video{height:100%}.GroupCall.landscape .buttons{position:absolute;left:calc(50% - 7.8125rem);transform:translateX(-50%);width:auto;gap:1rem;bottom:4rem;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1rem;z-index:5;padding:.75rem 1rem;height:auto}.GroupCall.landscape .buttons .button-text{display:none}.GroupCall.landscape .buttons .video-buttons{flex-direction:row;gap:1rem}.GroupCall.landscape .buttons .video-buttons .smaller-button{margin-bottom:0}.GroupCall.landscape .buttons .Loading{transform:none}.GroupCall.landscape .buttons .Loading .Spinner{--spinner-size: 3.25rem}.GroupCall.landscape .buttons .MicrophoneButton canvas{width:2rem !important;height:2rem !important}.GroupCall.landscape .buttons .MicrophoneButton,.GroupCall.landscape .buttons .microphone-wrapper{width:3rem;height:3rem}.GroupCall.landscape .buttons .MicrophoneButton .AnimatedSticker,.GroupCall.landscape .buttons .microphone-wrapper .AnimatedSticker{display:flex;align-items:center;justify-content:center}.GroupCall.landscape .buttons::before{display:none}.GroupCall.landscape.no-sidebar .buttons{left:50%}.GroupCall.landscape .streams{width:100%;height:100%}.GroupCall.landscape .videos{width:100%;height:100%;display:grid;--column-count: 1;grid-template-columns:repeat(var(--column-count), 1fr);grid-auto-rows:1fr}.GroupCall.landscape .videos .GroupCallParticipantVideo{max-height:100%;width:100%}.GroupCall.landscape .videos .GroupCallParticipantVideo .thumbnail-wrapper{height:100%}.GroupCall.landscape .videos.span-last-video .GroupCallParticipantVideo:last-child{grid-column:span var(--column-count)}.GroupCall.landscape .participants{width:15.625rem;margin-top:0} +.GroupCall .modal-content{display:flex;flex-direction:column;align-items:center;height:37.5rem}.GroupCall .modal-dialog{max-height:calc(100% - 4rem);background:#181f27}.GroupCall .Menu .bubble{--color-background: #232a34;--color-chat-hover: #2f363e;--color-item-active: #2f363e;--color-text: #fff;box-shadow:0 .25rem .5rem .125rem rgba(16,16,16,.3)}.GroupCall .MenuItem{padding:.75rem 1rem !important}.GroupCall.single-column{opacity:1 !important}.GroupCall.single-column .modal-dialog{max-width:100% !important;border-bottom-left-radius:0;border-bottom-right-radius:0;margin-top:auto;margin-bottom:0;transform:translate3d(0, 100%, 0);transition:transform .3s ease,opacity .3s ease}.GroupCall.single-column .modal-backdrop{opacity:0;transition:opacity .2s ease}.GroupCall.single-column.open .modal-backdrop{opacity:1}.GroupCall.single-column.open .modal-dialog{transform:translate3d(0, 0, 0)}.GroupCall .header{width:100%;display:flex;align-items:center;color:#fff;margin-bottom:.5rem}.GroupCall .header h3{font-size:1.25rem;font-weight:500;margin:0 auto 0 .5rem}.GroupCall .videos{display:flex;flex-wrap:wrap;gap:.5rem}.GroupCall .participants{margin-top:.75rem;background:#222b34;border-radius:.75rem}.GroupCall .participants .Loading{padding:2rem 0}.GroupCall .participants .invite-btn{padding:.25rem .75rem;display:flex;align-items:center;border-radius:.75rem;transition:.15s ease-out background-color;cursor:pointer;color:var(--color-text-secondary)}.GroupCall .participants .invite-btn:hover{background:#2f363e}.GroupCall .participants .invite-btn .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.GroupCall .participants .invite-btn .icon{display:flex;justify-content:center;align-items:center;width:2.75rem;height:2.75rem;font-size:1.5rem;margin-right:1rem}.GroupCall .scrollable{overflow:auto;padding-bottom:2rem;max-width:37.5rem;width:100%}.GroupCall .buttons{max-width:37.5rem;margin-top:auto;display:flex;align-items:center;justify-content:space-around;width:100%;position:relative;height:8.75rem}.GroupCall .buttons button{cursor:pointer}.GroupCall .buttons::before{position:absolute;content:"";width:100%;height:2rem;background:linear-gradient(0deg, #181f27, rgba(24, 31, 39, 0));z-index:0;top:-2rem}.GroupCall .buttons .button-wrapper{width:4rem;display:flex;flex-direction:column;align-items:center}.GroupCall .buttons .button-wrapper .button-text{white-space:nowrap;font-size:.75rem;margin-top:.5rem;color:#fff}.GroupCall .buttons .button-wrapper.microphone-wrapper{width:6rem}.GroupCall .buttons .button-wrapper.microphone-wrapper .button-text{margin-top:.75rem;font-size:1rem}.GroupCall .buttons .Loading{position:absolute;transform:translate(0, -1.125rem)}.GroupCall .buttons .Loading .Spinner{--spinner-size: 6.5rem}.GroupCall .buttons .video-buttons{display:flex;flex-direction:column;align-items:center}.GroupCall .buttons .small-button,.GroupCall .buttons .smaller-button{outline:none;border:0;background:#15415b;border-radius:50%;width:3rem;height:3rem;color:#fff;font-size:1.375rem;display:flex;align-items:center;justify-content:center;transition:.25s ease-out background-color}.GroupCall .buttons .small-button:hover,.GroupCall .buttons .smaller-button:hover{background:#11364b}.GroupCall .buttons .small-button.camera.active{background:#15415b}.GroupCall .buttons .small-button.camera.active:hover{background:#11364b}.GroupCall .buttons .small-button.speaker{background:#2b3a51}.GroupCall .buttons .small-button.speaker.active{background:#496092}.GroupCall .buttons .small-button.leave{background:#5a2824}.GroupCall .buttons .small-button.leave:hover{background:#49201d}.GroupCall .buttons .smaller-button{width:2.5rem;height:2.5rem;margin-bottom:.5rem;padding:0}.GroupCall.landscape .scrollable{display:flex;flex-direction:row;flex-grow:1;gap:1rem;align-items:flex-start;max-width:100%;max-height:100%}.GroupCall.landscape .GroupCallParticipantVideo{max-height:initial}.GroupCall.landscape .GroupCallParticipantVideo video{height:100%}.GroupCall.landscape .buttons{position:absolute;left:calc(50% - 7.8125rem);transform:translateX(-50%);width:auto;gap:1rem;bottom:4rem;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1rem;z-index:5;padding:.75rem 1rem;height:auto}.GroupCall.landscape .buttons .button-text{display:none}.GroupCall.landscape .buttons .video-buttons{flex-direction:row;gap:1rem}.GroupCall.landscape .buttons .video-buttons .smaller-button{margin-bottom:0}.GroupCall.landscape .buttons .Loading{transform:none}.GroupCall.landscape .buttons .Loading .Spinner{--spinner-size: 3.25rem}.GroupCall.landscape .buttons .MicrophoneButton canvas{width:2rem !important;height:2rem !important}.GroupCall.landscape .buttons .MicrophoneButton,.GroupCall.landscape .buttons .microphone-wrapper{width:3rem;height:3rem}.GroupCall.landscape .buttons .MicrophoneButton .AnimatedSticker,.GroupCall.landscape .buttons .microphone-wrapper .AnimatedSticker{display:flex;align-items:center;justify-content:center}.GroupCall.landscape .buttons::before{display:none}.GroupCall.landscape.no-sidebar .buttons{left:50%}.GroupCall.landscape .streams{width:100%;height:100%}.GroupCall.landscape .videos{width:100%;height:100%;display:grid;--column-count: 1;grid-template-columns:repeat(var(--column-count), 1fr);grid-auto-rows:1fr}.GroupCall.landscape .videos .GroupCallParticipantVideo{max-height:100%;width:100%}.GroupCall.landscape .videos .GroupCallParticipantVideo .thumbnail-wrapper{height:100%}.GroupCall.landscape .videos.span-last-video .GroupCallParticipantVideo:last-child{grid-column:span var(--column-count)}.GroupCall.landscape .participants{width:15.625rem;margin-top:0} .ActiveCallHeader{position:absolute;top:0;left:0;height:2rem;width:100%;z-index:1;display:flex;justify-content:center;font-weight:500;font-size:.875rem;color:#fff;align-items:center;padding:0 1rem;background:linear-gradient(135deg, #3152e8, #8f4aac);transform:translateY(-100%)}.ActiveCallHeader.open{transform:translateY(0)}.ActiveCallHeader span{line-height:100%} -/*# sourceMappingURL=47.6587cf7cd58625267285.css.map*/ \ No newline at end of file +/*# sourceMappingURL=47.636da8b3a0051a88c67f.css.map*/ \ No newline at end of file diff --git a/dist/47.636da8b3a0051a88c67f.css.map b/dist/47.636da8b3a0051a88c67f.css.map new file mode 100644 index 000000000..f941b5658 --- /dev/null +++ b/dist/47.636da8b3a0051a88c67f.css.map @@ -0,0 +1 @@ +{"version":3,"file":"47.636da8b3a0051a88c67f.css","mappings":"AAAA,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;AC/KJ,kBACE,aACA,uBACA,mBACA,wBACA,kBACA,WACA,YACA,SACA,wFACA,kBACA,eACA,WACA,gCAEA,0BACE,WACA,cACA,kBACA,WACA,YACA,mBACA,kBACA,kBACA,WACA,oBAEA,sCACE,aAIJ,wBACE,uBAGF,0BACE,wFAEA,kCACE,mBAIJ,iCACE,mFACA,yCACE,mBAIJ,sEACE,mBACA,sFACE,uB;ACpDN,kBACE,kBACA,0BACE,gBACA,gBACA,UACA,uBACA,2BACA,iBACA,WAEA,iCACE,oDACA,gBACA,mCACA,2CACA,oBAIJ,kCACE,YAiCA,kBACA,gBACA,eAjCA,wCACE,oBACA,kBACA,UACA,YACA,aACA,mBACA,mBACA,oBAEA,yDACE,kBAIJ,uCACE,uBAGF,yCACE,uBAGF,yCACE,uBAGF,sCACE,uBCpCJ,oDACE,wBACA,cACA,WACA,cACA,oBACA,uBAEA,0DACE,aAGF,+DACE,WACA,eAEA,uBACA,yBACA,kBAGF,0EACE,wBAGF,uEACE,qBAGF,mFACE,eAGF,+IACE,eDsBF,oDACE,YACA,kBACA,aACA,MACA,wBACA,SACA,UAIA,0EAvBA,YACA,YACA,aACA,8BACA,2CACA,oDACA,0JAqBA,sEA3BA,YACA,YACA,aACA,8BACA,2CACA,oDACA,uJAyBA,+DA/BA,YACA,YACA,aACA,8BACA,2CACA,oDACA,sJ;AEnEN,QACE,mCACA,UACA,mBACA,uBACA,eACA,gBACA,kBACA,wEACA,WACA,iBACA,aACA,mBACA,0CAEA,wBACE,kBACA,WACA,YAGF,eACE,WACA,YAGF,UACE,iBAEA,4BACE,qBAIJ,mBACE,WACA,YACA,gBAEA,0BACE,eACA,gBAIJ,kBACE,WACA,YACA,kBAEA,yBACE,cACA,eAIJ,mBACE,eACA,gBACA,kBAEA,0BACE,cACA,eAIJ,oBACE,cACA,eACA,oBAEA,2BACE,WACA,YAIJ,mBACE,oBAEA,qBACE,iBAGF,0BACE,gBACA,iBAIJ,mBACE,aACA,cACA,iBAEA,qBACE,eAGF,0BACE,aACA,cAIJ,eACE,kBAEA,sBACE,WACA,cACA,kBACA,gBACA,eACA,cACA,eACA,kBACA,yCACA,yBACA,cAIJ,oBACE,e;AC7HJ,sBACE,kBACA,aACA,mBACA,mBACA,WACA,qBACA,qBACA,0CACA,eAEA,4BACE,mBAGF,4BACE,aAGF,8BACE,kBAGF,4BACE,YACA,aACA,sBAEA,kCACE,uBACA,mBACA,gBAGF,mCACE,uBACA,mBACA,gBACA,cACA,iBAEA,wCACE,cAGF,yCACE,cAGF,uCACE,cAKN,kCACE,cACA,aACA,mBACA,uBACA,cACA,eACA,iBACA,iBACA,cAIA,kDACE,cAIJ,+BACE,eACA,a;AC3EJ,2BACE,qBACA,gBACA,kBACA,qBACA,yBACA,+BACA,eAEA,6CACE,kBACA,gBACA,WACA,YACA,qBAEA,iDACE,kBACA,gBACA,iBAIJ,qDACE,WAGF,mCACE,uCACA,WACA,YACA,kBACA,cACA,WACA,UACA,qBACA,oCAGF,0CACE,yCAGF,wCACE,kBACA,UACA,WACA,YACA,0BACA,SACA,WACA,mBACA,sBACA,aACA,mBACA,WACA,gEACA,UACA,eACA,wBAEA,8CACE,0BAIJ,iCACE,cACA,WAGF,kCACE,mBACA,eACA,kBAGF,8CACE,kBACA,QACA,SACA,UACA,WACA,2CACA,gBAGF,sCACE,kCACA,iBAGF,iCACE,kBACA,SACA,WACA,aACA,mBACA,uBACA,WACA,YACA,oDACA,iCACA,UAEA,uCACE,kBAGF,4CACE,iBAOJ,+CACE,UAGF,sDACE,U;ACzHF,0BACE,aACA,sBACA,mBACA,eAGF,yBACE,6BACA,mBAGF,yBACE,4BACA,4BACA,6BACA,mBACA,oDAIF,qBACE,+BAGF,yBACE,qBAEA,uCACE,0BACA,4BACA,6BACA,gBACA,gBACA,kCACA,+CAGF,yCACE,UACA,4BAIA,8CACE,UAGF,4CACE,+BAKN,mBACE,WACA,aACA,mBACA,WACA,oBAEA,sBACE,kBACA,gBACA,sBAIJ,mBACE,aACA,eACA,UAGF,yBACE,kBACA,mBACA,qBAEA,kCACE,eAGF,qCACE,sBACA,aACA,mBACA,qBACA,0CACA,eACA,kCAEA,2CACE,mBAGF,2CACE,uBACA,mBACA,gBAGF,2CACE,aACA,uBACA,mBACA,cACA,eACA,iBACA,kBAKN,uBACE,cACA,oBACA,kBACA,WAGF,oBACE,kBACA,gBACA,aACA,mBACA,6BACA,WACA,kBACA,eAEA,2BACE,eAGF,4BACE,kBACA,WACA,WACA,YACA,+DACA,UACA,UAGF,oCACE,WACA,aACA,sBACA,mBAEA,iDACE,mBACA,iBACA,iBACA,WAGF,uDACE,WAEA,oEACE,kBACA,eAKN,6BACE,kBACA,kCAEA,sCACE,uBAIJ,mCACE,aACA,sBACA,mBAGF,sEAEE,aACA,SACA,mBACA,kBACA,WACA,YACA,WACA,mBACA,aACA,mBACA,uBACA,0CAEA,kFACE,mBAIJ,gDACE,mBAEA,sDACE,mBAIJ,0CACE,mBAEA,iDACE,mBAIJ,wCACE,mBAEA,8CACE,mBAIJ,oCACE,aACA,cACA,oBACA,UAIJ,iCACE,aACA,mBACA,YACA,SACA,uBACA,eACA,gBAGF,gDACE,mBAEA,sDACE,YAIJ,8BACE,kBACA,2BACA,2BACA,WACA,SACA,YACA,0BACA,8DACA,mBACA,UACA,oBACA,YAEA,2CACE,aAGF,6CACE,mBACA,SAEA,6DACE,gBAIJ,uCACE,eACA,gDACE,wBAKF,uDACE,sBACA,uBAIJ,kGAEE,WACA,YAEA,oIACE,aACA,mBACA,uBAIJ,sCACE,aAIJ,yCACE,SAGF,8BACE,WACA,YAGF,6BACE,WACA,YAEA,aACA,kBACA,uDACA,mBAEA,wDACE,gBACA,WAEA,2EACE,YAIJ,mFACE,qCAIJ,mCACE,gBACA,a;AC1VJ,kBACE,kBACA,MACA,OACA,YACA,WACA,UAEA,aACA,uBACA,gBACA,kBACA,WACA,mBACA,eACA,qDACA,4BAEA,uBACE,wBAGF,uBACE,iB","sources":["webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/common/Avatar.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.scss","webpack://telegram-t/./src/components/calls/group/GroupCall.scss","webpack://telegram-t/./src/components/calls/ActiveCallHeader.scss"],"sourcesContent":[".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n",".MicrophoneButton {\n display: flex;\n justify-content: center;\n align-items: center;\n outline: none !important;\n position: relative;\n width: 6rem;\n height: 6rem;\n border: 0;\n background: radial-gradient(100% 100% at 100% 0%, #00a0b9 0%, #33c659 55%, #33c659 100%);\n border-radius: 50%;\n font-size: 2rem;\n color: #fff;\n transition: 0.25s ease-out filter;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 8rem;\n height: 8rem;\n background: #64C166;\n border-radius: 50%;\n filter: blur(10px);\n opacity: 0.2;\n pointer-events: none;\n\n body.is-ios & {\n display: none;\n }\n }\n\n &:hover {\n filter: brightness(0.9);\n }\n\n &.crossed {\n background: radial-gradient(100% 100% at 100% 0%, #00AFFE 0%, #00AFFE 55%, #007FFF 100%);\n\n &::before {\n background: #00AFFE;\n }\n }\n\n &.muted-by-admin {\n background: radial-gradient(85.5% 103.5% at 87.5% 20.65%, #CE4D74 0%, #3D52DF 100%);\n &::before {\n background: #3D52DF;\n }\n }\n\n &.is-connecting, &.is-connecting:hover {\n background: #222B34;\n &::before {\n background: transparent;\n }\n }\n}\n","@import '../../../styles/mixins';\n\n.participant-menu {\n position: absolute;\n .bubble {\n background: none;\n border-radius: 0;\n padding: 0;\n border: none !important;\n box-shadow: none !important;\n overflow: visible;\n color: #ffffff;\n\n .group {\n box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(16, 16, 16, 0.3);\n overflow: hidden;\n background: var(--color-background);\n border-radius: var(--border-radius-default);\n margin-bottom: 0.5rem;\n }\n }\n\n .volume-control {\n height: 3rem;\n\n .info {\n pointer-events: none;\n position: relative;\n z-index: 1;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.75rem 1rem;\n\n .AnimatedSticker {\n margin-right: 2rem;\n }\n }\n\n &.high {\n --range-color: #4DA6E0;\n }\n\n &.normal {\n --range-color: #57BC6C;\n }\n\n &.medium {\n --range-color: #CAA53B;\n }\n\n &.low {\n --range-color: #CB5757;\n }\n\n position: relative;\n overflow: hidden;\n cursor: pointer;\n\n @mixin thumb-styles() {\n border: none;\n height: 3rem;\n width: 1.5rem;\n background: var(--range-color);\n border-radius: var(--border-radius-default);\n box-shadow: -13.5rem 0 0 12.75rem var(--range-color);\n transition: 0.25s ease-in-out background-color, 0.25s ease-in-out box-shadow;\n }\n\n @include reset-range();\n\n // Apply custom styles\n input[type=\"range\"] {\n height: 3rem;\n position: absolute;\n left: -1.5rem;\n top: 0;\n width: calc(100% + 3rem);\n margin: 0;\n z-index: 0;\n\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".Avatar {\n --color-user: var(--color-primary);\n flex: none;\n align-items: center;\n justify-content: center;\n width: 3.375rem;\n height: 3.375rem;\n border-radius: 50%;\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n color: white;\n font-weight: bold;\n display: flex;\n white-space: nowrap;\n user-select: none;\n\n img:not(.emoji) {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n }\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n\n i {\n font-size: 2.5rem;\n\n &.icon-reply-filled {\n transform: scale(0.7);\n }\n }\n\n &.size-micro {\n width: 1rem;\n height: 1rem;\n font-size: 0.5rem;\n\n .emoji {\n width: 0.5625rem;\n height: 0.5625rem;\n }\n }\n\n &.size-tiny {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-small {\n width: 2.125rem;\n height: 2.125rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-medium {\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.1875rem;\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n }\n\n &.size-large {\n font-size: 1.3125rem;\n\n i {\n font-size: 3.5rem;\n }\n\n .emoji {\n width: 1.3125rem;\n height: 1.3125rem;\n }\n }\n\n &.size-jumbo {\n width: 7.5rem;\n height: 7.5rem;\n font-size: 3.5rem;\n\n i {\n font-size: 6rem;\n }\n\n .emoji {\n width: 3.5rem;\n height: 3.5rem;\n }\n }\n\n &.online {\n position: relative;\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0.0625rem;\n right: 0.0625rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--color-background);\n background-color: #0ac630;\n flex-shrink: 0;\n }\n }\n\n &.interactive {\n cursor: pointer;\n }\n}\n",".GroupCallParticipant {\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n color: #fff;\n padding: 0.5rem 0.75rem;\n border-radius: 0.75rem;\n transition: 0.15s ease-out background-color;\n cursor: pointer;\n\n &:hover {\n background: #2f363e;\n }\n\n audio {\n display: none;\n }\n\n .Avatar {\n margin-right: 1rem;\n }\n\n .info {\n min-width: 0;\n display: flex;\n flex-direction: column;\n\n .name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .about {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n color: #848d94;\n font-size: 0.75rem;\n\n &.blue {\n color: #4da6e0;\n }\n\n &.green {\n color: #57bc6c;\n }\n\n &.red {\n color: #ff706f;\n }\n }\n }\n\n .microphone {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n margin-left: auto;\n font-size: 1.5rem;\n color: #ff706f;\n }\n\n &.can-self-unmute {\n .microphone {\n color: #848d94;\n }\n }\n\n .streams {\n cursor: pointer;\n display: flex;\n }\n}\n",".GroupCallParticipantVideo {\n border-radius: 0.75rem;\n overflow: hidden;\n position: relative;\n max-height: 12.875rem;\n width: calc(50% - 0.25rem);\n transition: 0.25s ease-out width;\n cursor: pointer;\n\n .thumbnail-avatar {\n position: absolute;\n border-radius: 0;\n width: 100%;\n height: 100%;\n transform: scale(1.1);\n\n img {\n filter: blur(10px);\n border-radius: 0;\n object-fit: cover;\n }\n }\n\n &:last-child:nth-child(odd) {\n width: 100%;\n }\n\n &::before {\n box-shadow: 0 0 0 3px transparent inset;\n width: 100%;\n height: 100%;\n position: absolute;\n display: block;\n content: \"\";\n z-index: 5;\n border-radius: 0.75rem;\n transition: 0.25s ease-out box-shadow;\n }\n\n &.active::before {\n box-shadow: 0px 0px 0px 3px #78ee7e inset;\n }\n\n .back-button {\n position: absolute;\n z-index: 5;\n top: 0.75rem;\n left: 0.75rem;\n background: rgba(0, 0, 0, 0.3);\n border: 0;\n color: white;\n border-radius: 1rem;\n padding: 0.25rem 0.75rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n transition: 0.25s ease-out opacity, 0.25s ease-out background-color;\n opacity: 0;\n cursor: pointer;\n outline: none !important;\n\n &:hover {\n background: rgba(0, 0, 0, 0.4);\n }\n }\n\n video {\n display: block;\n width: 100%;\n }\n\n .video {\n object-fit: contain;\n height: 12.5rem;\n position: relative;\n }\n\n .thumbnail-wrapper {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 0;\n width: 100%;\n transform: translate(-50%, -50%) scale(1.5);\n background: black;\n }\n\n .thumbnail {\n filter: blur(10px) brightness(0.5);\n object-fit: cover;\n }\n\n .info {\n position: absolute;\n bottom: 0;\n color: #fff;\n display: flex;\n align-items: center;\n padding: 0 0.5rem 0.25rem;\n width: 100%;\n height: 2rem;\n background: linear-gradient(0deg, #000, transparent);\n transition: 0.25s ease-out opacity;\n opacity: 0;\n\n .name {\n margin-left: 0.5rem;\n }\n\n .last-icon {\n margin-left: auto;\n }\n }\n}\n\n.videos:hover .GroupCallParticipantVideo {\n\n .info {\n opacity: 1;\n }\n\n .back-button {\n opacity: 1;\n }\n}\n",".GroupCall {\n .modal-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 37.5rem;\n }\n\n .modal-dialog {\n max-height: calc(100% - 4rem);\n background: #181f27;\n }\n\n .Menu .bubble {\n --color-background: #232a34;\n --color-chat-hover: #2f363e;\n --color-item-active: #2f363e;\n --color-text: #fff;\n box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(16, 16, 16, 0.3);\n }\n\n // Compact menu items\n .MenuItem {\n padding: 0.75rem 1rem !important;\n }\n\n &.single-column {\n opacity: 1 !important;\n\n .modal-dialog {\n max-width: 100% !important;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n margin-top: auto;\n margin-bottom: 0;\n transform: translate3d(0, 100%, 0);\n transition: transform 0.3s ease, opacity 0.3s ease;\n }\n\n .modal-backdrop {\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n &.open {\n .modal-backdrop {\n opacity: 1;\n }\n\n .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n }\n }\n\n .header {\n width: 100%;\n display: flex;\n align-items: center;\n color: #fff;\n margin-bottom: 0.5rem;\n\n h3 {\n font-size: 1.25rem;\n font-weight: 500;\n margin: 0 auto 0 0.5rem;\n }\n }\n\n .videos {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n\n .participants {\n margin-top: 0.75rem;\n background: #222b34;\n border-radius: 0.75rem;\n\n .Loading {\n padding: 2rem 0;\n }\n\n .invite-btn {\n padding: 0.25rem 0.75rem;\n display: flex;\n align-items: center;\n border-radius: 0.75rem;\n transition: 0.15s ease-out background-color;\n cursor: pointer;\n color: var(--color-text-secondary);\n\n &:hover {\n background: #2f363e;\n }\n\n .text {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.5rem;\n margin-right: 1rem;\n }\n }\n }\n\n .scrollable {\n overflow: auto;\n padding-bottom: 2rem;\n max-width: 37.5rem;\n width: 100%;\n }\n\n .buttons {\n max-width: 37.5rem;\n margin-top: auto;\n display: flex;\n align-items: center;\n justify-content: space-around;\n width: 100%;\n position: relative;\n height: 8.75rem;\n\n button {\n cursor: pointer;\n }\n\n &::before {\n position: absolute;\n content: \"\";\n width: 100%;\n height: 2rem;\n background: linear-gradient(0deg, #181f27, rgba(24, 31, 39, 0));\n z-index: 0;\n top: -2rem;\n }\n\n .button-wrapper {\n width: 4rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .button-text {\n white-space: nowrap;\n font-size: 0.75rem;\n margin-top: 0.5rem;\n color: #fff;\n }\n\n &.microphone-wrapper {\n width: 6rem;\n\n .button-text {\n margin-top: 0.75rem;\n font-size: 1rem;\n }\n }\n }\n\n .Loading {\n position: absolute;\n transform: translate(0, -1.125rem);\n\n .Spinner {\n --spinner-size: 6.5rem;\n }\n }\n\n .video-buttons {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .small-button,\n .smaller-button {\n outline: none;\n border: 0;\n background: #15415b;\n border-radius: 50%;\n width: 3rem;\n height: 3rem;\n color: #fff;\n font-size: 1.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: 0.25s ease-out background-color;\n\n &:hover {\n background: #11364b;\n }\n }\n\n .small-button.camera.active {\n background: #15415b;\n\n &:hover {\n background: #11364b;\n }\n }\n\n .small-button.speaker {\n background: #2b3a51;\n\n &.active {\n background: #496092;\n }\n }\n\n .small-button.leave {\n background: #5a2824;\n\n &:hover {\n background: #49201d;\n }\n }\n\n .smaller-button {\n width: 2.5rem;\n height: 2.5rem;\n margin-bottom: 0.5rem;\n padding: 0;\n }\n }\n\n &.landscape .scrollable {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 1rem;\n align-items: flex-start;\n max-width: 100%;\n max-height: 100%;\n }\n\n &.landscape .GroupCallParticipantVideo {\n max-height: initial;\n\n video {\n height: 100%;\n }\n }\n\n &.landscape .buttons {\n position: absolute;\n left: calc(50% - 15.625rem / 2);\n transform: translateX(-50%);\n width: auto;\n gap: 1rem;\n bottom: 4rem;\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(10px);\n border-radius: 1rem;\n z-index: 5;\n padding: 0.75rem 1rem;\n height: auto;\n\n .button-text {\n display: none;\n }\n\n .video-buttons {\n flex-direction: row;\n gap: 1rem;\n\n .smaller-button {\n margin-bottom: 0;\n }\n }\n\n .Loading {\n transform: none;\n .Spinner {\n --spinner-size: 3.25rem;\n }\n }\n\n .MicrophoneButton {\n canvas {\n width: 2rem !important;\n height: 2rem !important;\n }\n }\n\n .MicrophoneButton,\n .microphone-wrapper {\n width: 3rem;\n height: 3rem;\n\n .AnimatedSticker {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n &::before {\n display: none;\n }\n }\n\n &.landscape.no-sidebar .buttons {\n left: calc(50%);\n }\n\n &.landscape .streams {\n width: 100%;\n height: 100%;\n }\n\n &.landscape .videos {\n width: 100%;\n height: 100%;\n\n display: grid;\n --column-count: 1;\n grid-template-columns: repeat(var(--column-count), 1fr);\n grid-auto-rows: 1fr;\n\n .GroupCallParticipantVideo {\n max-height: 100%;\n width: 100%;\n\n .thumbnail-wrapper {\n height: 100%;\n }\n }\n\n &.span-last-video .GroupCallParticipantVideo:last-child {\n grid-column: span var(--column-count);\n }\n }\n\n &.landscape .participants {\n width: 15.625rem;\n margin-top: 0;\n }\n}\n",".ActiveCallHeader {\n position: absolute;\n top: 0;\n left: 0;\n height: 2rem;\n width: 100%;\n z-index: 1;\n\n display: flex;\n justify-content: center;\n font-weight: 500;\n font-size: 0.875rem;\n color: #fff;\n align-items: center;\n padding: 0 1rem;\n background: linear-gradient(135deg, rgb(49, 82, 232), rgb(143, 74, 172));\n transform: translateY(-100%);\n\n &.open {\n transform: translateY(0);\n }\n\n span {\n line-height: 100%;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/47.6587cf7cd58625267285.js b/dist/47.636da8b3a0051a88c67f.js similarity index 99% rename from dist/47.6587cf7cd58625267285.js rename to dist/47.636da8b3a0051a88c67f.js index 02bb57b41..b39714674 100644 --- a/dist/47.6587cf7cd58625267285.js +++ b/dist/47.636da8b3a0051a88c67f.js @@ -1,3 +1,3 @@ -/*! For license information please see 47.6587cf7cd58625267285.js.LICENSE.txt */ +/*! For license information please see 47.636da8b3a0051a88c67f.js.LICENSE.txt */ (self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[47],{6628:(e,t,a)=>{"use strict";a.r(t),a.d(t,{ActiveCallHeader:()=>J,CallFallbackConfirm:()=>K,GroupCall:()=>q});var n=a(3794),i=a(4050),o=a(5116),r=a(3716),s=a(1226),l=a(9066),c=a(2607),d=a(4446),u=a(782),p=a(2267),m=a(1394),v=a(1689),g=a(6204),f=a(1171);(0,o.Q6)("apiUpdate",((e,t,a)=>{const{activeGroupCallId:i}=e.groupCalls;switch(a["@type"]){case"updateGroupCallLeavePresentation":t.toggleGroupCallPresentation({value:!1});break;case"updateGroupCallStreams":if(!a.userId||!i)break;if(!(0,c.GU)(e,i,a.userId))break;return(0,d.B6)(e,i,a.userId,(0,u.CE)(a,["@type","userId"]));case"updateGroupCallConnectionState":if(!i)break;if("disconnected"===a.connectionState){t.leaveGroupCall({isFromLibrary:!0});break}return(0,d.AH)(e,i,{connectionState:a.connectionState,isSpeakerDisabled:a.isSpeakerDisabled});case"updateGroupCallParticipants":{const{groupCallId:e,participants:t}=a;i===e&&(0,n.handleUpdateGroupCallParticipants)(t);break}case"updateGroupCallConnection":{if(a.data.stream){t.showNotification({message:"Big live streams are not yet supported"}),t.leaveGroupCall();break}(0,n.handleUpdateGroupCallConnection)(a.data,a.presentation);const i=(0,c.mU)(e);null!=i&&i.participants&&Object.keys(i.participants).length>0&&(0,n.handleUpdateGroupCallParticipants)(Object.values(i.participants));break}}})),(0,o.Q6)("leaveGroupCall",((e,t,a)=>{const{isFromLibrary:i,shouldDiscard:r,shouldRemove:l,rejoin:u}=a||{},p=(0,c.mU)(e);p&&((0,o.R3)((0,d.Ic)(e,{connectionState:"disconnected"},p.participantsCount-1)),(async()=>{await(0,s.t9)("leaveGroupCall",{call:p});let a=!1;var c;r&&((e=(0,o.Rd)()).groupCalls.fallbackChatId===p.chatId&&(a=!0,null===(c=e.groupCalls.fallbackUserIdsToRemove)||void 0===c||c.forEach((a=>{t.deleteChatMember({chatId:e.groupCalls.fallbackChatId,userId:a})}))),await(0,s.t9)("discardGroupCall",{call:p}));e=(0,o.Rd)(),l&&(e=(0,d.dc)(e,p.id)),(0,v.Mt)(),(0,o.R3)({...e,groupCalls:{...e.groupCalls,isGroupCallPanelHidden:!0,activeGroupCallId:void 0,...a&&{fallbackChatId:void 0,fallbackUserIdsToRemove:void 0}}}),i||(0,n.leaveGroupCall)(),u&&t.joinGroupCall(u)})())})),(0,o.Q6)("toggleGroupCallVideo",(e=>{const t=(0,c.mU)(e),a=(0,l.dy)(e,e.currentUserId);a&&t&&(async()=>{await(0,n.toggleStream)("video"),await(0,s.t9)("editGroupCallParticipant",{call:t,videoStopped:!(0,n.isStreamEnabled)("video"),participant:a})})()})),(0,o.Q6)("requestToSpeak",((e,t,a)=>{const{value:n}=a||{value:!0},i=(0,c.mU)(e),o=(0,l.dy)(e,e.currentUserId);o&&i&&(0,s.t9)("editGroupCallParticipant",{call:i,raiseHand:n,participant:o})})),(0,o.Q6)("setGroupCallParticipantVolume",((e,t,a)=>{const{participantId:i,volume:o}=a,d=(0,c.mU)(e),u=(0,l.dy)(e,i);u&&d&&((0,n.setVolume)(i,Math.floor(o/r.Ro)/100),(0,s.t9)("editGroupCallParticipant",{call:d,volume:Number(o),participant:u}))})),(0,o.Q6)("toggleGroupCallMute",((e,t,a)=>{const{participantId:i,value:o}=a||{},r=(0,c.mU)(e),d=(0,l.dy)(e,i||e.currentUserId);d&&r&&(async()=>{const e=void 0===o?(0,n.isStreamEnabled)("audio",d.id):o;i?(0,n.setVolume)(i,e?0:1):await(0,n.toggleStream)("audio"),await(0,s.t9)("editGroupCallParticipant",{call:r,muted:e,participant:d})})()})),(0,o.Q6)("toggleGroupCallPresentation",((e,t,a)=>{const i=(0,c.mU)(e),o=(0,l.dy)(e,e.currentUserId);o&&i&&(async()=>{if(void 0!==(null==a?void 0:a.value)?null==a?void 0:a.value:!(0,n.isStreamEnabled)("presentation")){const e=await(0,n.startSharingScreen)();if(!e)return;await(0,s.t9)("joinGroupCallPresentation",{call:i,params:e})}else await(0,n.toggleStream)("presentation",!1),await(0,s.t9)("leaveGroupCallPresentation",{call:i});await(0,s.t9)("editGroupCallParticipant",{call:i,presentationPaused:!(0,n.isStreamEnabled)("presentation"),participant:o})})()})),(0,o.Q6)("connectToActiveGroupCall",((e,t)=>{const a=(0,c.mU)(e);if(!a)return;if("discarded"===a.connectionState)return void t.showNotification({message:"This voice chat is not active"});const i=(0,v.FF)(),r=(0,v.NH)();if(!i||!r)return;const{currentUserId:d}=e;d&&(async()=>{const e=await(0,n.joinGroupCall)(d,r,i,t.apiUpdate);if(await(0,s.t9)("joinGroupCall",{call:a,params:e,inviteHash:a.inviteHash})&&(t.loadMoreGroupCallParticipants(),a.chatId)){const e=(0,l.Z1)((0,o.Rd)(),a.chatId);if(!e)return;await(0,g.f)(e)}})()})),(0,o.Q6)("inviteToCallFallback",((e,t,a)=>{const{chatId:n}=(0,l.Bt)(e)||{};if(!n)return;const i=(0,l.dy)(e,n);if(!i)return;const{shouldRemove:r}=a;(async()=>{const a=(0,c.oq)(e);let l=Object.values(e.chats.byId).find((e=>e.title===a&&e.isCreator&&!e.isRestricted));if(l)t.updateChatMemberBannedRights({chatId:l.id,userId:n,bannedRights:{}}),(0,s.t9)("addChatMembers",l,[i],!0);else{if(l=await(0,s.t9)("createChannel",{title:a,users:[i]}),!l)return;const e=await(0,m.dc)(f,"avatar.png");(0,s.t9)("editChatPhoto",{chatId:l.id,accessHash:l.accessHash,photo:e})}const d=await(0,s.t9)("updatePrivateLink",{chat:l,usageLimit:1,expireDate:(0,p.b)(e.serverTimeOffset)+1800});if(d){if(r){const t=(e=(0,o.Rd)()).groupCalls.fallbackUserIdsToRemove||[];(0,o.R3)({...e,groupCalls:{...e.groupCalls,fallbackChatId:l.id,fallbackUserIdsToRemove:[...t,n]}})}t.sendMessage({text:`Join a call: ${d}`}),t.openChat({id:l.id}),t.createGroupCall({chatId:l.id}),t.closeCallFallbackConfirm()}})()}));var C=a(7361),h=a(6752),P=a(706),S=a(9107),E=a(4288),b=a(231),y=a(3106),Z=a(8964),k=a(3103);const I=()=>{var e,t;null===(e=(t=navigator).vibrate)||void 0===e||e.call(t,50)};var G=a(7204),w=a(7324),T=a(7799);const N=(0,i.X$)((e=>{let{size:t,name:a,playSegment:n,color:o}=e;const[r,s]=(0,i.eJ)();return(0,i.d4)((()=>{(0,w.Z)(a).then(s)}),[a]),i.ZP.createElement(T.Z,{id:a,play:!0,noLoop:!0,playSegment:n,size:t,speed:1,animationData:r,color:o})})),M=(0,i.X$)((0,o.c$)((e=>{const t=(0,c.mU)(e),{connectionState:a}=t||{},n=t&&(0,c.GU)(e,t.id,e.currentUserId),{raiseHandRating:i,hasAudioStream:o,canSelfUnmute:r,isMuted:s}=n||{};return{connectionState:a||"discarded",hasRequestedToSpeak:Boolean(i),noAudioStream:!o,canSelfUnmute:r,isMuted:s}}))((e=>{let{noAudioStream:t,canSelfUnmute:a,isMuted:n,hasRequestedToSpeak:r,connectionState:s}=e;const{toggleGroupCallMute:l,requestToSpeak:c,playGroupCallSound:d}=(0,o.uC)(),u=(0,S.Z)(),p=(0,i.sO)("up"),[m,v]=(0,i.eJ)(!1),g="connected"!==s,f=!a&&n,C=(0,G.Z)(f);(0,i.d4)((()=>{C&&!f&&d("allowTalk")}),[d,C,f]);const P=(0,i.Ye)((()=>{if(m){const e=Math.floor(100*Math.random());return e<32?[0,120]:e<64?[120,240]:e<97?[240,420]:[420,540]}return!C&&f?t?[99,135]:[136,172]:C&&!f?[0,36]:f?[0,0]:t?[69,99]:[36,69]}),[C,m,t,f]),E=m?"HandFilled":"VoiceMini",b=()=>{I(),l()},y=(0,i.Ye)((()=>u(r?"VoipMutedTapedForSpeak":f?"VoipMutedByAdmin":t?"VoipUnmute":"VoipTapToMute")),[r,t,u,f]);return i.ZP.createElement("div",{className:"button-wrapper microphone-wrapper"},i.ZP.createElement("button",{className:(0,h.Z)("MicrophoneButton",t&&"crossed",a&&"can-self-unmute",g&&"is-connecting",f&&"muted-by-admin"),onMouseDown:()=>{if(f){if(m)return;return I(),c(),v(!0),void setTimeout((()=>{v(!1)}),3e3)}p.current="down",t&&setTimeout((()=>{"down"===p.current&&(p.current="hold",b())}),200)},onMouseUp:()=>{f||(b(),p.current="up")}},i.ZP.createElement(N,{name:E,size:48,playSegment:P})),i.ZP.createElement("div",{className:"button-text"},y))})));var U=a(4605),O=a(9118);var R=a(2328),$=a(2275);const D=[0,17],V=[17,34],A=(0,i.X$)((0,o.c$)((e=>({isAdmin:(0,c.Ht)(e)})))((e=>{let{participant:t,closeDropdown:a,isDropdownOpen:n,anchor:s,isAdmin:l}=e;const{toggleGroupCallMute:c,setGroupCallParticipantVolume:d,toggleGroupCallPanel:u,openChat:p,requestToSpeak:m}=(0,o.uC)(),v=(0,S.Z)(),[g,f,C]=(0,P.Z)(),E=null==t?void 0:t.id,{isMutedByMe:b,isMuted:y,isSelf:k,canSelfUnmute:I}=t||{},G=Boolean(null==t?void 0:t.raiseHandRating),w=!I&&y,[T,M]=(0,i.eJ)(b?0:((null==t?void 0:t.volume)||r.aC)/r.Ro);(0,i.d4)((()=>{M(b?0:((null==t?void 0:t.volume)||r.aC)/r.Ro)}),[E]);const U=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,i.Ye)((()=>(0,O.P2)((e=>e()),e,!t)),[e,t])}(500),A=(0,i.I4)((e=>{e.stopPropagation(),f(),a()}),[f,a]),H=(0,i.I4)((e=>{e.stopPropagation(),m({value:!1}),a()}),[m,a]),F=(0,i.I4)((e=>{e.stopPropagation(),a(),l||M(b?r.aC/r.Ro:0),c({participantId:E,value:l?!w:!b})}),[a,c,E,l,w,b]),L=(0,i.I4)((e=>{e.stopPropagation(),u(),p({id:E}),a()}),[u,a,p,E]),x=0===T?D:V;return i.ZP.createElement("div",null,i.ZP.createElement(R.Z,{isOpen:n,positionX:"right",autoClose:!0,style:s?`right: 1rem; top: ${s.y}px;`:void 0,onClose:a,className:"participant-menu"},!k&&!w&&i.ZP.createElement("div",{className:"group"},i.ZP.createElement("div",{className:(0,h.Z)("volume-control",T<50&&"low",T>=50&&T<100&&"medium",T>=100&&T<150&&"normal",T>=150&&"high")},i.ZP.createElement("input",{type:"range",min:"0",max:"200",value:T,onChange:e=>{const t=Number(e.target.value);M(t),U((()=>{0===t?c({participantId:E,value:!0}):d({participantId:E,volume:Math.floor(t*r.Ro)})}))}}),i.ZP.createElement("div",{className:"info"},i.ZP.createElement(N,{name:"Speaker",playSegment:x,size:24}),i.ZP.createElement("span",null,T,"%")))),i.ZP.createElement("div",{className:"group"},G&&k&&i.ZP.createElement(Z.Z,{icon:"stop-raising-hand",onClick:H},v("VoipGroupCancelRaiseHand")),!k&&i.ZP.createElement(Z.Z,{icon:"user",onClick:L},v("VoipGroupOpenProfile")),!k&&i.ZP.createElement(Z.Z,{icon:y&&l?"allow-speak":"microphone-alt",onClick:F},v(l?w?"VoipGroupAllowToSpeak":"VoipMute":b?"VoipGroupUnmuteForMe":"VoipGroupMuteForMe")),!k&&l&&i.ZP.createElement(Z.Z,{icon:"delete-user",destructive:!0,onClick:A},v("VoipGroupUserRemove")))),!k&&l&&i.ZP.createElement($.Z,{isOpen:g,userId:E,onClose:C}))})));var H=a(7407),F=a(172);const L=(0,i.X$)((e=>{let{participant:t,noColor:a}=e;const{isMuted:o,isMutedByMe:r}=t,s=(t.amplitude||0)>n.THRESHOLD,l=Boolean(t.raiseHandRating),c=(0,G.Z)(l),d=!Boolean(null==t?void 0:t.canSelfUnmute)&&o,u=(0,G.Z)(o),p=(0,i.Ye)((()=>o&&!u?[43,64]:!o&&u?[22,42]:l&&!c?[65,84]:!d&&c?[0,21]:o?[22,23]:[43,44]),[o,d,l]),m=(0,i.Ye)((()=>a?[255,255,255]:l?[77,166,224]:d||r?[255,112,111]:s?[87,188,108]:[132,141,148]),[a,l,d,r,s]);return i.ZP.createElement(N,{name:"VoiceOutlined",playSegment:p,size:28,color:m})})),x=(0,i.X$)((0,o.c$)(((e,t)=>{let{participant:a}=t;return{user:a.isUser?(0,l.dy)(e,a.id):void 0,chat:a.isUser?void 0:(0,l.Z1)(e,a.id)}}))((e=>{let{openParticipantMenu:t,participant:a,user:o,chat:s}=e;const l=(0,i.sO)(null),c=(0,S.Z)(),{isSelf:d,isMutedByMe:u,isMuted:p}=a,m=(a.amplitude||0)>n.THRESHOLD,v=Boolean(a.raiseHandRating),[g,f]=(0,i.Ye)((()=>d?[c("ThisIsYou"),"blue"]:u?[c("VoipGroupMutedForMe"),"red"]:v?[c("WantsToSpeak"),"blue"]:!p&&m?[a.volume&&a.volume!==r.aC?c("SpeakingWithVolume",(a.volume/r.Ro).toString()).replace("%%","%"):c("Speaking"),"green"]:a.about?[a.about,""]:[c("Listening"),"blue"]),[m,a.volume,c,d,u,v,p,a.about]);if(!o&&!s)return;const C=o?`${o.firstName||""} ${o.lastName||""}`:null==s?void 0:s.title;return i.ZP.createElement("div",{className:(0,h.Z)("GroupCallParticipant",a.canSelfUnmute&&"can-self-unmute"),onClick:()=>{d||t(l.current,a)},ref:l},i.ZP.createElement(F.Z,{user:o,chat:s,size:"medium"}),i.ZP.createElement("div",{className:"info"},i.ZP.createElement("span",{className:"name"},C),i.ZP.createElement("span",{className:(0,h.Z)("about",f)},g)),i.ZP.createElement("div",{className:"microphone"},i.ZP.createElement(L,{participant:a})))})));var j=a(1273);const _=(0,i.X$)((0,o.c$)((e=>{const{participantsCount:t,participants:a}=(0,c.mU)(e)||{};return{participants:a,participantsCount:t||0}}))((e=>{let{participants:t,participantsCount:a,openParticipantMenu:n}=e;const{createGroupCallInviteLink:r,loadMoreGroupCallParticipants:s}=(0,o.uC)(),l=(0,S.Z)(),c=(0,i.Ye)((()=>Object.keys(t||{})),[t]),[d,u]=(0,H.Z)(s,c,c.length>=a);return i.ZP.createElement("div",{className:"participants"},i.ZP.createElement("div",{className:"invite-btn",onClick:r},i.ZP.createElement("div",{className:"icon"},i.ZP.createElement("i",{className:"icon-add-user"})),i.ZP.createElement("div",{className:"text"},l("VoipGroupInviteMember"))),i.ZP.createElement(j.Z,{items:d,onLoadMore:u},null==d?void 0:d.map((e=>t[e]&&i.ZP.createElement(x,{key:e,openParticipantMenu:n,participant:t[e]})))))}))),B=(0,i.X$)((0,o.c$)(((e,t)=>{let{participant:a}=t;return{currentUserId:e.currentUserId,user:a.isUser?(0,l.dy)(e,a.id):void 0,chat:a.isUser?void 0:(0,l.Z1)(e,a.id),isActive:(a.amplitude||0)>n.THRESHOLD}}))((e=>{let{type:t,onClick:a,user:o,chat:s,isActive:l,isFullscreen:c}=e;const d=(0,S.Z)(),u=(0,i.I4)((()=>{a&&a((null==o?void 0:o.id)||s.id,t)}),[s,a,t,null==o?void 0:o.id]);if(!o&&!s)return;const p=(0,n.getUserStreams)((null==o?void 0:o.id)||s.id);return i.ZP.createElement("div",{className:(0,h.Z)("GroupCallParticipantVideo",l&&"active"),onClick:u},c&&i.ZP.createElement("button",{className:"back-button"},i.ZP.createElement("i",{className:"icon-arrow-left"}),d("Back")),i.ZP.createElement(F.Z,{user:o,chat:s,className:"thumbnail-avatar"}),r.LH&&i.ZP.createElement("div",{className:"thumbnail-wrapper"},i.ZP.createElement("video",{className:"thumbnail",muted:!0,autoPlay:!0,playsInline:!0,srcObject:null==p?void 0:p[t]})),i.ZP.createElement("video",{className:"video",muted:!0,autoPlay:!0,playsInline:!0,srcObject:null==p?void 0:p[t]}),i.ZP.createElement("div",{className:"info"},i.ZP.createElement("i",{className:"icon-microphone-alt"}),i.ZP.createElement("span",{className:"name"},(null==o?void 0:o.firstName)||(null==s?void 0:s.title)),"presentation"===t&&i.ZP.createElement("i",{className:"last-icon icon-active-sessions"})))}))),z=(0,i.X$)((0,o.c$)((e=>{const{participants:t}=(0,c.mU)(e)||{};return{participants:t}}))((e=>{let{participants:t,onDoubleClick:a}=e;const[n,o]=(0,i.eJ)(void 0),r=(0,i.Ye)((()=>Object.values(t||{}).filter((e=>e.hasPresentationStream))),[t]),s=(0,i.Ye)((()=>Object.values(t||{}).filter((e=>e.hasVideoStream))),[t]),l=s.length+r.length,c=l<=2?1:l<=6?2:l<=9?3:4,d=3===l||2===c&&l%2!=0,u=(0,i.I4)(((e,t)=>{n&&e===n.id&&t===n.type?o(void 0):o({id:e,type:t})}),[n]);return i.ZP.createElement("div",{className:"streams",onDoubleClick:a},i.ZP.createElement("div",{className:(0,h.Z)("videos",d&&"span-last-video"),style:`--column-count: ${n?1:c}`},n&&i.ZP.createElement(B,{key:n.id,isFullscreen:!0,onClick:u,participant:t[n.id],type:n.type}),n?void 0:r.map((e=>i.ZP.createElement(B,{key:e.id,onClick:u,participant:e,type:"presentation"}))),n?void 0:s.map((e=>i.ZP.createElement(B,{key:e.id,onClick:u,participant:e,type:"video"})))))}))),Q=[0,10],q=(0,i.X$)((0,o.c$)(((e,t)=>{let{groupCallId:a}=t;const{connectionState:n,title:i,isSpeakerDisabled:o,participants:r,participantsCount:s}=(0,c.$5)(e,a)||{};return{connectionState:n,title:i,isSpeakerEnabled:!o,participantsCount:s,meParticipant:(0,c.GU)(e,a,e.currentUserId),isGroupCallPanelHidden:Boolean(e.groupCalls.isGroupCallPanelHidden),isAdmin:(0,c.Ht)(e),participants:r}}))((e=>{let{groupCallId:t,isGroupCallPanelHidden:a,connectionState:r,isSpeakerEnabled:s,title:l,meParticipant:c,isAdmin:d,participants:u}=e;const{toggleGroupCallVideo:p,toggleGroupCallPresentation:m,leaveGroupCall:v,toggleGroupCallPanel:g,connectToActiveGroupCall:f,playGroupCallSound:I}=(0,o.uC)(),G=(0,S.Z)(),w=(0,i.sO)(null),[T,O]=(0,i.eJ)(!1),[R,$,D]=(0,P.Z)(),[V,H,F]=(0,P.Z)(!0),L=u&&Object.values(u).some((e=>e.video||e.presentation)),x=R&&!C.wB&&L,[j,B]=(0,i.eJ)(),[q,J,X]=(0,P.Z)(),[Y,W,K]=(0,P.Z)(),[ee,te]=(0,i.eJ)(!1),[ae,ne]=(0,i.eJ)(!1),ie=null==c?void 0:c.hasVideoStream,oe=null==c?void 0:c.hasPresentationStream,re="connected"!==r,se=!(null==c?void 0:c.canSelfUnmute)&&(null==c?void 0:c.isMuted),le=(0,i.I4)(((e,t)=>{const a=e.getBoundingClientRect(),n=w.current;B({anchor:{x:a.left,y:a.top-n.offsetTop+60},participant:t}),J()}),[J]);(0,i.d4)((()=>{"connected"===r?I({sound:"join"}):"reconnecting"===r&&I({sound:"connecting"})}),[r,I]);const ce=()=>{K(),te(!1)},de=(0,i.Ye)((()=>e=>{let{onTrigger:t,isOpen:a}=e;return i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",className:a?"active":void 0,onClick:t,ariaLabel:G("AccDescrMoreOptions")},i.ZP.createElement("i",{className:"icon-more"}))}),[G]),ue=(0,i.I4)((()=>{w.current&&(R?document.exitFullscreen().then(D):w.current.requestFullscreen().then($))}),[D,R,$]),pe=(0,i.I4)((()=>{C.t0&&(R||F(),ue())}),[F,ue,R]),me=(0,i.I4)((()=>{R?D():$()}),[D,R,$]);(0,i.d4)((()=>{if(!C.t0)return;const e=w.current;return e?(e.addEventListener("fullscreenchange",me),()=>{e.removeEventListener("fullscreenchange",me)}):void 0}),[me]),(0,i.d4)((()=>{f()}),[f,t]);const ve=()=>{if(d&&!Y)return W(),void(R&&ue());I({sound:"leave"}),O(!0),K()};return i.ZP.createElement(k.Z,{isOpen:!a&&!T,onClose:g,className:(0,h.Z)("GroupCall",C.wB&&"single-column",x&&"landscape",!V&&"no-sidebar"),dialogRef:w,onCloseAnimationEnd:()=>{T&&v({shouldDiscard:ae})}},i.ZP.createElement("div",{className:"header"},i.ZP.createElement("h3",null,l||G("VoipGroupVoiceChat")),C.t0&&i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",onClick:ue,ariaLabel:G(R?"AccExitFullscreen":"AccSwitchToFullscreen")},i.ZP.createElement("i",{className:R?"icon-smallscreen":"icon-fullscreen"})),x&&i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>{V?F():H()}},i.ZP.createElement("i",{className:"icon-sidebar"})),(n.IS_SCREENSHARE_SUPPORTED&&!se||d)&&i.ZP.createElement(y.Z,{positionX:"right",trigger:de},n.IS_SCREENSHARE_SUPPORTED&&!se&&i.ZP.createElement(Z.Z,{icon:"share-screen",onClick:m},G(oe?"VoipChatStopScreenCapture":"VoipChatStartScreenCapture")),d&&i.ZP.createElement(Z.Z,{icon:"phone-discard-outline",onClick:()=>{te(!0),ne(!0),W(),R&&ue()},destructive:!0},G("VoipGroupLeaveAlertEndChat"))),i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>{g(),R&&D()}},i.ZP.createElement("i",{className:"icon-close"}))),i.ZP.createElement("div",{className:"scrollable custom-scroll"},i.ZP.createElement(z,{onDoubleClick:pe}),(!x||V)&&i.ZP.createElement(_,{openParticipantMenu:le})),i.ZP.createElement(A,{participant:null==j?void 0:j.participant,anchor:null==j?void 0:j.anchor,isDropdownOpen:q,closeDropdown:X}),i.ZP.createElement("div",{className:"buttons"},re&&i.ZP.createElement(E.Z,null),i.ZP.createElement("div",{className:"button-wrapper"},i.ZP.createElement("div",{className:"video-buttons"},ie&&(C.wZ||C.cj)&&i.ZP.createElement("button",{className:"smaller-button",onClick:n.switchCameraInput},i.ZP.createElement(N,{name:"CameraFlip",playSegment:Q,size:24})),i.ZP.createElement("button",{className:(0,h.Z)("small-button",se?"speaker":"camera",(ie||se&&s)&&"active"),onClick:()=>{se?(0,n.toggleSpeaker)():p()}},i.ZP.createElement("i",{className:se?"icon-speaker":ie?"icon-video-stop":"icon-video"}))),i.ZP.createElement("div",{className:"button-text"},G(se?"VoipSpeaker":"VoipCamera"))),i.ZP.createElement(M,null),i.ZP.createElement("div",{className:"button-wrapper"},i.ZP.createElement("button",{className:"small-button leave",onClick:ve},i.ZP.createElement("i",{className:"icon-phone-discard"})),i.ZP.createElement("div",{className:"button-text"},G("VoipGroupLeave")))),i.ZP.createElement(k.Z,{isOpen:Y,onClose:ce,className:"error",title:G(ee?"VoipGroupEndAlertTitle":"VoipGroupLeaveAlertTitle")},i.ZP.createElement("p",null,G(ee?"VoipGroupEndAlertText":"VoipGroupLeaveAlertText")),!ee&&i.ZP.createElement(U.Z,{label:G("VoipGroupEndChat"),checked:ae,onCheck:ne}),i.ZP.createElement(b.Z,{isText:!0,className:"confirm-dialog-button",onClick:ve},G(ee?"VoipGroupEnd":"VoipGroupLeave")),i.ZP.createElement(b.Z,{isText:!0,className:"confirm-dialog-button",onClick:ce},G("Cancel"))))}))),J=(0,i.X$)((0,o.c$)((e=>({groupCall:(0,c.mU)(e),isGroupCallPanelHidden:e.groupCalls.isGroupCallPanelHidden,meParticipant:(0,c.GU)(e,e.groupCalls.activeGroupCallId,e.currentUserId)})))((e=>{let{groupCall:t,meParticipant:a,isGroupCallPanelHidden:n}=e;const{toggleGroupCallPanel:r}=(0,o.uC)(),s=(0,S.Z)();if((0,i.d4)((()=>(document.body.classList.toggle("has-group-call-header",n),()=>{document.body.classList.toggle("has-group-call-header",!1)})),[n]),t&&a)return i.ZP.createElement("div",{className:(0,h.Z)("ActiveCallHeader",n&&"open"),onClick:r},i.ZP.createElement("span",{className:"title"},t.title||s("VoipGroupVoiceChat")))})));var X=a(7551),Y=a(8415),W=a(8360);const K=(0,i.X$)((0,o.c$)((e=>{const{chatId:t}=(0,l.Bt)(e)||{},a=t?(0,l.dy)(e,t):void 0;return{userFullName:a?(0,Y.Js)(a):void 0,channelTitle:(0,c.oq)(e)}}))((e=>{let{isOpen:t,channelTitle:a,userFullName:n}=e;const{closeCallFallbackConfirm:r,inviteToCallFallback:s}=(0,o.uC)(),[l,c]=(0,i.eJ)(!0),d=(0,W.Z)(n,!0);return i.ZP.createElement(X.Z,{title:"Start Call",isOpen:t,confirmHandler:()=>{s({shouldRemove:l})},onClose:r},i.ZP.createElement("p",null,"The call will be started in a private channel ",i.ZP.createElement("b",null,a),"."),i.ZP.createElement(U.Z,{label:`Remove ${d} from this channel after the call`,checked:l,onCheck:c}))})))},3794:(e,t)=>{(()=>{"use strict";var e={"./src/blacksilence.ts":(e,t,a)=>{a.r(t),a.d(t,{silence:()=>n,black:()=>i});const n=e=>{const t=e.createOscillator(),a=t.connect(e.createMediaStreamDestination());return t.start(),new MediaStream([Object.assign(a.stream.getAudioTracks()[0],{enabled:!1})])},i=function(){let{width:e=640,height:t=480}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=Object.assign(document.createElement("canvas"),{width:e,height:t}),n=a.getContext("2d");if(!n)throw Error("Cannot create canvas ctx");n.fillRect(0,0,e,t);const i=a.captureStream();return new MediaStream([Object.assign(i.getVideoTracks()[0],{enabled:!1})])}},"./src/buildSdp.ts":(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a("./src/utils.ts");const i=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=[],o=e=>{i.push(e)},{sessionId:r,ssrcs:s,audioExtensions:l,videoExtensions:c,audioPayloadTypes:d,videoPayloadTypes:u,transport:{ufrag:p,pwd:m,fingerprints:v,candidates:g}}=e;o("v=0"),o(`o=- ${r} 2 IN IP4 0.0.0.0`),o("s=-"),o("t=0 0"),o(`a=group:BUNDLE ${s.map((e=>e.endpoint)).join(" ")}${a?"":" 2"}`),o("a=ice-lite");const f=e=>{let t="";t+="a=candidate:",t+=`${e.foundation} ${e.component} ${e.protocol} ${e.priority} ${e.ip} ${e.port} typ ${e.type}`,"rel-addr"in e&&(t+=` raddr ${e["rel-addr"]} rport ${e["rel-port"]}`),t+=` generation ${e.generation}`,o(t)},C=()=>{o(`a=ice-ufrag:${p}`),o(`a=ice-pwd:${m}`),v.forEach((e=>{o(`a=fingerprint:${e.hash} ${e.fingerprint}`),o("a=setup:passive")})),g.forEach(f)},h=e=>{var t;const{channels:a,id:n,name:i,clockrate:r,parameters:s}=e;var l=a?`/${a}`:"";o(`a=rtpmap:${n} ${i}/${r}${l}`),s&&(l=Object.keys(s).map((e=>`${e}=${s[e]};`)).join(" "),o(`a=fmtp:${n} ${l}`)),null===(t=e["rtcp-fbs"])||void 0===t||t.forEach((e=>{o(`a=rtcp-fb:${n} ${e.type}${e.subtype?` ${e.subtype}`:""}`)}))};return e=e=>{const a=e.isVideo?u:d;var i=e.isVideo?"video":"audio";o(`m=${i} ${e.isMain?1:0} RTP/SAVPF ${a.map((e=>e.id)).join(" ")}`),o("c=IN IP4 0.0.0.0"),o("b=AS:1300"),o(`a=mid:${e.endpoint}`),o("a=rtcp-mux"),a.forEach(h),o("a=rtcp:1 IN IP4 0.0.0.0"),e.isVideo&&o("a=rtcp-rsize"),(e.isVideo?c:l).forEach((e=>{let{id:t,uri:a}=e;o(`a=extmap:${t} ${a}`)})),e.isRemoved?o("a=inactive"):(C(),t?o("a=recvonly"):(e.isMain?o("a=sendrecv"):(o("a=sendonly"),o("a=bundle-only")),e.sourceGroups.forEach((t=>{o(`a=ssrc-group:${t.semantics} ${t.sources.map(n.fromTelegramSource).join(" ")}`),t.sources.forEach((t=>{t=(0,n.fromTelegramSource)(t),o(`a=ssrc:${t} cname:${e.endpoint}`),o(`a=ssrc:${t} msid:${e.endpoint} ${e.endpoint}`),o(`a=ssrc:${t} mslabel:${e.endpoint}`),o(`a=ssrc:${t} label:${e.endpoint}`)}))}))))},s.filter((e=>"0"===e.endpoint||"1"===e.endpoint)).map(e),a||(o("m=application 1 UDP/DTLS/SCTP webrtc-datachannel"),o("c=IN IP4 0.0.0.0"),C(),o("a=ice-options:trickle"),o("a=mid:"+(a?"1":"2")),o("a=sctp-port:5000"),o("a=max-message-size:262144")),s.filter((e=>"0"!==e.endpoint&&"1"!==e.endpoint)).map(e),`${i.join("\n")}\n`}},"./src/parseSdp.ts":(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a("./src/utils.ts");const i=e=>{var t,a;if(!e||!e.sdp)throw Error("Failed parsing SDP: session description is null");const i=e.sdp.split("\r\nm=").map(((e,t)=>0===t?e:`m=${e}`)).reduce(((e,t)=>{var a;return e[(null===(a=t.match(/^m=(.+?)\s/))||void 0===a?void 0:a[1])||"header"]=t.split("\r\n").filter(Boolean),e}),{});var o=(e,t)=>{var a,n;return t?null===(a=i[t])||void 0===a||null===(n=a.find((t=>t.startsWith(e))))||void 0===n?void 0:n.substr(e.length):Object.values(i).map((t=>{var a;return null===(a=t.find((t=>t.startsWith(e))))||void 0===a?void 0:a.substr(e.length)})).filter(Boolean)[0]};const r=o("a=ssrc:","audio");var s=r&&Number(r.split(" ")[0]);const l=(null===(t=o("a=ssrc-group:","video"))||void 0===t?void 0:t.split(" "))||void 0;if(!l)throw Error("Failed parsing SDP: no video ssrc");var[c,d]=(null===(a=o("a=fingerprint:"))||void 0===a?void 0:a.split(" "))||[];if(!c||!d)throw Error("Failed parsing SDP: no fingerprint");if(e=o("a=ice-ufrag:"),o=o("a=ice-pwd:"),!e||!o)throw Error("Failed parsing SDP: no ICE ufrag or pwd");return{fingerprints:[{fingerprint:d,hash:c,setup:"active"}],pwd:o,ufrag:e,...s&&{ssrc:(0,n.toTelegramSource)(s)},...l&&{"ssrc-groups":[{semantics:l[0],sources:l.slice(1,l.length).map(Number).map(n.toTelegramSource)}]}}}},"./src/secretsauce.ts":(e,t,a)=>{a.r(t),a.d(t,{getDevices:()=>async function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(await navigator.mediaDevices.enumerateDevices()).filter((a=>a.kind===`${e}${t?"input":"output"}`))},toggleSpeaker:()=>function(){var e,t;s&&(s.isSpeakerDisabled=!s.isSpeakerDisabled,null!==(e=s)&&void 0!==e&&null!==(t=e.onUpdate)&&void 0!==t&&t.call(e,{"@type":"updateGroupCallConnectionState",connectionState:"connected",isSpeakerDisabled:s.isSpeakerDisabled}),s.participantFunctions&&Object.values(s.participantFunctions).forEach((e=>{var t,a;null===(t=e.toggleMute)||void 0===t||t.call(e,!(null===(a=s)||void 0===a||!a.isSpeakerDisabled))})))},toggleNoiseSuppression:()=>function(){if(s&&s.myId&&s.streams){const a=s.streams[s.myId].audio;if(a){const n=a.getTracks()[0];var e,t;n&&(({echoCancellation:e,noiseSuppression:t}=n.getConstraints()),n.applyConstraints({echoCancellation:!e,noiseSuppression:!t}))}}},getUserStreams:()=>c,setVolume:()=>function(e,t){var a,n,i;const o=null===(a=s)||void 0===a||null===(n=a.participantFunctions)||void 0===n?void 0:n[e];o&&(null===(i=o.setVolume)||void 0===i||i.call(o,t))},isStreamEnabled:()=>d,switchCameraInput:()=>async function(){var e;if(null!==(e=s)&&void 0!==e&&e.myId&&s.connection&&s.streams&&s.facingMode){var t;const e=null===(t=c(s.myId))||void 0===t?void 0:t.video;if(e){const t=e.getTracks()[0];if(t){const e=s.connection.getSenders().find((e=>{var a;return t.id===(null===(a=e.track)||void 0===a?void 0:a.id)}));if(e){s.facingMode="environment"===s.facingMode?"user":"environment";try{const t=await p("video",s.facingMode);await e.replaceTrack(t.getTracks()[0]),s.streams[s.myId].video=t}catch(e){}}}}}},toggleStream:()=>m,leaveGroupCall:()=>g,handleUpdateGroupCallParticipants:()=>async function(e){if(s){const{participants:n,conference:o,connection:r,myId:l}=s;if(n&&o&&r&&o.ssrcs&&o.transport&&l)if(e.find((e=>{var t,a,n,i;return e.isSelf&&e.source!==(null===(t=s)||void 0===t||null===(a=t.conference)||void 0===a||null===(n=a.ssrcs)||void 0===n||null===(i=n.find((e=>e.isMain&&!e.isVideo)))||void 0===i?void 0:i.sourceGroups[0].sources[0])})))g();else{const n=[];if(e.forEach((e=>{if(e.isSelf)e.isMuted&&!e.canSelfUnmute&&(m("audio",!1),m("video",!1),m("presentation",!1));else{var t=e.isLeft;const a=e.isMuted||e.isMutedByMe,i=!e.isVideoJoined||!e.video||t,r=!e.presentation||t;let s=!1,l=!1,c=!1;o.ssrcs.filter((t=>t.userId===e.id)).forEach((t=>{t.isVideo||(t.sourceGroups[0].sources[0]===e.source&&(l=!0),t.isRemoved=a),t.isVideo&&(t.isPresentation||(e.video&&t.endpoint===e.video.endpoint&&(s=!0),t.isRemoved=i),t.isPresentation&&(e.presentation&&t.endpoint===e.presentation.endpoint&&(c=!0),t.isRemoved=r))})),a||l||o.ssrcs.push({userId:e.id,isMain:!1,endpoint:`audio${e.source}`,isVideo:!1,sourceGroups:[{semantics:"FID",sources:[e.source]}]}),i||s||!e.video||(n.push(e.video.endpoint),o.ssrcs.push({userId:e.id,isMain:!1,endpoint:e.video.endpoint,isVideo:!0,sourceGroups:e.video.sourceGroups})),r||c||!e.presentation||o.ssrcs.push({isPresentation:!0,userId:e.id,isMain:!1,endpoint:e.presentation.endpoint,isVideo:!0,sourceGroups:e.presentation.sourceGroups})}})),s.updatingParticipantsQueue)s.updatingParticipantsQueue.push(o);else{s.updatingParticipantsQueue=[],e=(0,i.default)(o),await r.setRemoteDescription({type:"offer",sdp:e});try{var t=await r.createAnswer();if(await r.setLocalDescription(t),u(l),0async function(e,t){if(s){var a=t?s.screenshareConference:s.conference;const d=t?s.screenshareConnection:s.connection;if(a&&d&&a.ssrcs){var n,o,r,l,c=Date.now();e={...a,transport:e.transport,sessionId:c,audioExtensions:null===(n=e.audio)||void 0===n?void 0:n["rtp-hdrexts"],audioPayloadTypes:null===(o=e.audio)||void 0===o?void 0:o["payload-types"],videoExtensions:null===(r=e.video)||void 0===r?void 0:r["rtp-hdrexts"],videoPayloadTypes:null===(l=e.video)||void 0===l?void 0:l["payload-types"]},s={...s,...t?{screenshareConference:e}:{conference:e}};try{await d.setRemoteDescription({type:"answer",sdp:(0,i.default)(e,!0,t)})}catch(e){console.error(e)}}}},startSharingScreen:()=>async function(){if(s)try{const e=await p("presentation");return e?(e.getTracks()[0].onended=()=>{var e;s&&s.myId&&(null!==(e=s.streams)&&void 0!==e&&e[s.myId].presentation,u(s.myId),l())},new Promise((t=>{var{connection:a,dataChannel:t}=h([e],t,!0);s={...s,screenshareConnection:a,screenshareDataChannel:t}}))):void 0}catch(e){return}},joinGroupCall:()=>function(e,t,a,n){if(s)throw Error("Already in call");v("connecting");var i=new MediaStream;return a.srcObject=i,a.play().catch((e=>console.warn(e))),s={onUpdate:n,participants:[],myId:e,speaking:{},silence:(0,o.silence)(t),black:(0,o.black)({width:640,height:480}),analyserInterval:setInterval(f,1e3),audioElement:a,audioContext:t,mediaStream:i},new Promise((e=>{s={...s,...h([s.silence,s.black],e)}}))}});var n=a("./src/parseSdp.ts"),i=a("./src/buildSdp.ts"),o=a("./src/blacksilence.ts"),r=a("./src/utils.ts");let s;function l(e){var t,a,n,i;s&&(null!==(t=s.screenshareDataChannel)&&void 0!==t&&t.close(),null!==(a=s.screenshareConnection)&&void 0!==a&&a.close(),e||null===(n=(i=s).onUpdate)||void 0===n||n.call(i,{"@type":"updateGroupCallLeavePresentation"}))}function c(e){var t,a;return null===(t=s)||void 0===t||null===(a=t.streams)||void 0===a?void 0:a[e]}function d(e,t){var a,n,i;const o=(t=t||(null===(a=s)||void 0===a?void 0:a.myId))&&(null===(n=c(t))||void 0===n?void 0:n[e]);return!!o&&(null===(i=o.getTracks()[0])||void 0===i?void 0:i.enabled)}function u(e){var t,a,n;null===(t=s)||void 0===t||null===(a=t.onUpdate)||void 0===a||a.call(t,{"@type":"updateGroupCallStreams",userId:e,hasAudioStream:d("audio",e),hasVideoStream:d("video",e),hasPresentationStream:d("presentation",e),amplitude:null===(n=s.speaking)||void 0===n?void 0:n[e]})}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"user";return"presentation"===e?navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0}):navigator.mediaDevices.getUserMedia({audio:"audio"===e&&{...r.IS_ECHO_CANCELLATION_SUPPORTED&&{echoCancellation:!0},...r.IS_NOISE_SUPPRESSION_SUPPORTED&&{noiseSuppression:!0}},video:"video"===e&&{facingMode:t}})}async function m(e,t){if(s&&s.myId&&s.connection&&s.streams){var a;const o=null===(a=c(s.myId))||void 0===a?void 0:a[e];if(o){const a=o.getTracks()[0];if(a){var n;const o=[...s.connection.getSenders(),...(null===(n=s.screenshareConnection)||void 0===n?void 0:n.getSenders())||[]].find((e=>{var t;return a.id===(null===(t=e.track)||void 0===t?void 0:t.id)}));if(o){t=void 0===t?!a.enabled:t;try{if(t&&!a.enabled){const t=await p(e);if(await o.replaceTrack(t.getTracks()[0]),s.streams[s.myId][e]=t,"video"===e)s.facingMode="user";else if("audio"===e){var i;const e=s.audioContext;if(!e)return;const a=e.createMediaStreamSource(t),n=e.createAnalyser();n.minDecibels=-100,n.maxDecibels=-30,n.smoothingTimeConstant=.05,n.fftSize=1024,a.connect(n),s={...s,participantFunctions:{...s.participantFunctions,[s.myId]:{...null===(i=s.participantFunctions)||void 0===i?void 0:i[s.myId],getCurrentAmplitude:()=>{var e=new Uint8Array(n.frequencyBinCount);return n.getByteFrequencyData(e),(0,r.getAmplitude)(e,1.5)}}}}}}else if(!t&&a.enabled){a.stop();const t="audio"===e?s.silence:s.black;if(!t)return;await o.replaceTrack(t.getTracks()[0]),s.streams[s.myId][e]=t,"video"===e&&(s.facingMode=void 0)}u(s.myId),"presentation"!==e||t||l(!0)}catch(e){}}}}}}function v(e){var t,a;null===(t=s)||void 0===t||null===(a=t.onUpdate)||void 0===a||a.call(t,{"@type":"updateGroupCallConnectionState",connectionState:e})}function g(){var e,t,a;s&&(s.myId&&null!==(e=s.streams)&&void 0!==e&&e[s.myId]&&Object.values(s.streams[s.myId]||{}).forEach((e=>{null==e||e.getTracks().forEach((e=>{e.stop()}))})),l(!0),null!==(t=s.dataChannel)&&void 0!==t&&t.close(),null!==(a=s.connection)&&void 0!==a&&a.close(),v("disconnected"),s.analyserInterval&&clearInterval(s.analyserInterval),s=void 0)}function f(){s&&s.participantFunctions&&Object.keys(s.participantFunctions).forEach((e=>{const t=s.participantFunctions[Number(e)].getCurrentAmplitude;var a,n;t&&(a=t(),n=s.speaking[e]||0,((s.speaking[e]=a)>r.THRESHOLD&&n<=r.THRESHOLD||a<=r.THRESHOLD&&n>r.THRESHOLD)&&u(e))}))}function C(e){if(s&&s.audioElement&&s.audioContext&&s.mediaStream){var t,a,n=null===(t=s.conference)||void 0===t||null===(a=t.ssrcs)||void 0===a?void 0:a.find((t=>t.endpoint===e.track.id));if(n&&n.userId){var i,o;const{userId:t,isPresentation:a}=n;var l=null===(i=s.participants)||void 0===i?void 0:i.find((e=>e.id===t));const d="video"===e.track.kind?a?"presentation":"video":"audio";if(e.track.onended=()=>{var e,a;null!==(e=s)&&void 0!==e&&null!==(a=e.streams)&&void 0!==a&&a[t][d],u(t)},n=e.streams[0],"audio"===e.track.kind){var c;const e=s.mediaStream,a=new window.AudioContext,i=a.createMediaStreamSource(n),o=a.createGain();o.gain.value=((null==l?void 0:l.volume)||1e4)/1e4;const d=a.createGain();o.gain.value=1;const u=a.createAnalyser();u.minDecibels=-100,u.maxDecibels=-30,u.smoothingTimeConstant=.05,u.fftSize=1024,i.connect(u).connect(d).connect(o).connect(a.destination),e.addTrack(i.mediaStream.getAudioTracks()[0]);const p=new Audio;p.srcObject=n,p.muted=!0,p.remove(),s={...s,participantFunctions:{...s.participantFunctions,[t]:{...null===(c=s.participantFunctions)||void 0===c?void 0:c[t],setVolume:e=>{o.gain.value=1{d.gain.value=e?0:1},getCurrentAmplitude:()=>{var e=new Uint8Array(u.frequencyBinCount);return u.getByteFrequencyData(e),(0,r.getAmplitude)(e,1.5)}}}}}s={...s,streams:{...s.streams,[t]:{...null===(o=s.streams)||void 0===o?void 0:o[t],[d]:n}}},u(t)}}}function h(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=new RTCPeerConnection;var o=a?void 0:function(e){const t=e.createDataChannel("data",{id:0});return t.onopen=()=>{},t.onmessage=e=>{JSON.parse(e.data).colibriClass},t.onerror=e=>{console.log("%conerror","background: green; font-size: 5em"),console.error(e)},t}(i);return e.forEach((e=>e.getTracks().forEach((t=>{i.addTrack(t,e)})))),a||(i.oniceconnectionstatechange=()=>{var e=i.iceConnectionState;"connected"===e||"completed"===e?v("connected"):"checking"===e||"new"===e?v("connecting"):"disconnected"===i.iceConnectionState&&v("reconnecting")}),i.ontrack=C,i.onnegotiationneeded=async()=>{if(s){var o=s.myId;if(o){var r=await i.createOffer({offerToReceiveVideo:!0,offerToReceiveAudio:!a});if(await i.setLocalDescription(r),r.sdp){var l,c=(0,n.default)(r),d=a?void 0:{userId:"",sourceGroups:[{semantics:"FID",sources:[c.ssrc||0]}],isRemoved:a,isMain:!0,isVideo:!1,isPresentation:a,endpoint:a?"1":"0"},p=c["ssrc-groups"]&&{isPresentation:a,userId:"",sourceGroups:c["ssrc-groups"],isMain:!0,isVideo:!0,endpoint:a?"0":"1"};r=a?s.screenshareConference:s.conference;const i=[];a?(p&&i.push(p),d&&i.push(d)):(d&&i.push(d),p&&i.push(p)),d=e.find((e=>"audio"===e.getTracks()[0].kind)),p=e.find((e=>"video"===e.getTracks()[0].kind)),s={...s,...a?{screenshareConference:{...r,ssrcs:i}}:{conference:{...r,ssrcs:i}},streams:{...s.streams,[o]:{...null===(l=s.streams)||void 0===l?void 0:l[o],...d&&{audio:d},...!a&&p?{video:p}:{presentation:p}}}},u(o),t(c)}}}},{connection:i,dataChannel:o}}},"./src/types.ts":(e,t,a)=>{a.r(t)},"./src/utils.ts":(e,t,a)=>{var n,i,o,r,s;function l(){var{userAgent:e,platform:t}=window.navigator;let a;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?a="macOS":-1!==["iPhone","iPad","iPod"].indexOf(t)?a="iOS":-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?a="Windows":/Android/.test(e)?a="Android":/Linux/.test(t)&&(a="Linux"),a}a.r(t),a.d(t,{toTelegramSource:()=>function(e){return e<<0},fromTelegramSource:()=>function(e){return e>>>0},getAmplitude:()=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;if(!e)return 0;var a=e.length;let n=0;for(let t=0;tl,THRESHOLD:()=>c,PLATFORM_ENV:()=>d,IS_MAC_OS:()=>u,IS_IOS:()=>p,IS_SCREENSHARE_SUPPORTED:()=>m,IS_ECHO_CANCELLATION_SUPPORTED:()=>v,IS_NOISE_SUPPRESSION_SUPPORTED:()=>g});const c=.1,d=l(),u="macOS"===d,p="iOS"===d,m="getDisplayMedia"in((null===(n=navigator)||void 0===n?void 0:n.mediaDevices)||{}),v=null===(i=navigator)||void 0===i||null===(o=i.mediaDevices)||void 0===o?void 0:o.getSupportedConstraints().echoCancellation,g=null===(r=navigator)||void 0===r||null===(s=r.mediaDevices)||void 0===s?void 0:s.getSupportedConstraints().noiseSuppression}},a={};function n(t){var i=a[t];return void 0!==i||(i=a[t]={exports:{}},e[t](i,i.exports,n)),i.exports}n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{n.r(i),n.d(i,{handleUpdateGroupCallConnection:()=>e.handleUpdateGroupCallConnection,startSharingScreen:()=>e.startSharingScreen,joinGroupCall:()=>e.joinGroupCall,getDevices:()=>e.getDevices,getUserStreams:()=>e.getUserStreams,setVolume:()=>e.setVolume,isStreamEnabled:()=>e.isStreamEnabled,toggleStream:()=>e.toggleStream,leaveGroupCall:()=>e.leaveGroupCall,handleUpdateGroupCallParticipants:()=>e.handleUpdateGroupCallParticipants,switchCameraInput:()=>e.switchCameraInput,toggleSpeaker:()=>e.toggleSpeaker,toggleNoiseSuppression:()=>e.toggleNoiseSuppression,IS_SCREENSHARE_SUPPORTED:()=>t.IS_SCREENSHARE_SUPPORTED,THRESHOLD:()=>t.THRESHOLD});var e=n("./src/secretsauce.ts"),t=n("./src/utils.ts");n("./src/types.ts")})();var o,r=t;for(o in i)r[o]=i[o];i.__esModule&&Object.defineProperty(r,"__esModule",{value:!0})})()},1171:(e,t,a)=>{"use strict";e.exports=a.p+"call-fallback-avatar.50c421eaa09a90e44ec4..png"}}]); -//# sourceMappingURL=47.6587cf7cd58625267285.js.map \ No newline at end of file +//# sourceMappingURL=47.636da8b3a0051a88c67f.js.map \ No newline at end of file diff --git a/dist/47.6587cf7cd58625267285.js.LICENSE.txt b/dist/47.636da8b3a0051a88c67f.js.LICENSE.txt similarity index 100% rename from dist/47.6587cf7cd58625267285.js.LICENSE.txt rename to dist/47.636da8b3a0051a88c67f.js.LICENSE.txt diff --git a/dist/47.6587cf7cd58625267285.js.map b/dist/47.636da8b3a0051a88c67f.js.map similarity index 99% rename from dist/47.6587cf7cd58625267285.js.map rename to dist/47.636da8b3a0051a88c67f.js.map index 42649cd8a..492ef451e 100644 --- a/dist/47.6587cf7cd58625267285.js.map +++ b/dist/47.636da8b3a0051a88c67f.js.map @@ -1 +1 @@ -{"version":3,"file":"47.6587cf7cd58625267285.js","mappings":"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","sources":["webpack://telegram-t/./src/modules/actions/api/calls.async.ts","webpack://telegram-t/./src/util/vibrate.ts","webpack://telegram-t/./src/components/common/AnimatedIcon.tsx","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.tsx","webpack://telegram-t/./src/hooks/useThrottle.ts","webpack://telegram-t/./src/components/calls/group/OutlinedMicrophoneIcon.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantList.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantStreams.tsx","webpack://telegram-t/./src/components/calls/group/GroupCall.tsx","webpack://telegram-t/./src/components/calls/ActiveCallHeader.tsx","webpack://telegram-t/./src/components/calls/CallFallbackConfirm.tsx","webpack://telegram-t/./src/lib/secret-sauce/index.js"],"sourcesContent":["import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\nimport {\n joinGroupCall,\n startSharingScreen,\n leaveGroupCall,\n toggleStream,\n isStreamEnabled,\n setVolume,\n handleUpdateGroupCallParticipants, handleUpdateGroupCallConnection,\n} from '../../../lib/secret-sauce';\n\nimport { ApiUpdate } from '../../../api/types';\n\nimport { GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectCurrentMessageList, selectUser } from '../../selectors';\nimport {\n selectActiveGroupCall,\n selectCallFallbackChannelTitle,\n selectGroupCallParticipant,\n} from '../../selectors/calls';\nimport {\n removeGroupCall,\n updateActiveGroupCall,\n updateGroupCall,\n updateGroupCallParticipant,\n} from '../../reducers/calls';\nimport { omit } from '../../../util/iteratees';\nimport { getServerTime } from '../../../util/serverTime';\nimport { fetchFile } from '../../../util/files';\nimport { getGroupCallAudioContext, getGroupCallAudioElement, removeGroupCallAudioElement } from '../ui/calls';\nimport { loadFullChat } from './chats';\n\nimport callFallbackAvatarPath from '../../../assets/call-fallback-avatar.png';\n\nconst FALLBACK_INVITE_EXPIRE_SECONDS = 1800; // 30 min\n\naddReducer('apiUpdate', (global, actions, update: ApiUpdate) => {\n const { activeGroupCallId } = global.groupCalls;\n\n switch (update['@type']) {\n case 'updateGroupCallLeavePresentation': {\n actions.toggleGroupCallPresentation({ value: false });\n break;\n }\n case 'updateGroupCallStreams': {\n if (!update.userId || !activeGroupCallId) break;\n if (!selectGroupCallParticipant(global, activeGroupCallId, update.userId)) break;\n\n return updateGroupCallParticipant(global, activeGroupCallId, update.userId, omit(update, ['@type', 'userId']));\n }\n case 'updateGroupCallConnectionState': {\n if (!activeGroupCallId) break;\n\n if (update.connectionState === 'disconnected') {\n actions.leaveGroupCall({ isFromLibrary: true });\n break;\n }\n\n return updateGroupCall(global, activeGroupCallId, {\n connectionState: update.connectionState,\n isSpeakerDisabled: update.isSpeakerDisabled,\n });\n }\n case 'updateGroupCallParticipants': {\n const { groupCallId, participants } = update;\n if (activeGroupCallId === groupCallId) {\n void handleUpdateGroupCallParticipants(participants);\n }\n break;\n }\n case 'updateGroupCallConnection': {\n if (update.data.stream) {\n actions.showNotification({ message: 'Big live streams are not yet supported' });\n actions.leaveGroupCall();\n break;\n }\n void handleUpdateGroupCallConnection(update.data, update.presentation);\n\n const groupCall = selectActiveGroupCall(global);\n if (groupCall?.participants && Object.keys(groupCall.participants).length > 0) {\n void handleUpdateGroupCallParticipants(Object.values(groupCall.participants));\n }\n break;\n }\n }\n\n return undefined;\n});\n\naddReducer('leaveGroupCall', (global, actions, payload) => {\n const {\n isFromLibrary, shouldDiscard, shouldRemove, rejoin,\n } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) {\n return;\n }\n\n setGlobal(updateActiveGroupCall(global, { connectionState: 'disconnected' }, groupCall.participantsCount - 1));\n\n (async () => {\n await callApi('leaveGroupCall', {\n call: groupCall,\n });\n\n let shouldResetFallbackState = false;\n if (shouldDiscard) {\n global = getGlobal();\n\n if (global.groupCalls.fallbackChatId === groupCall.chatId) {\n shouldResetFallbackState = true;\n\n global.groupCalls.fallbackUserIdsToRemove?.forEach((userId) => {\n actions.deleteChatMember({ chatId: global.groupCalls.fallbackChatId, userId });\n });\n }\n\n await callApi('discardGroupCall', {\n call: groupCall,\n });\n }\n\n global = getGlobal();\n if (shouldRemove) {\n global = removeGroupCall(global, groupCall.id);\n }\n\n removeGroupCallAudioElement();\n\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isGroupCallPanelHidden: true,\n activeGroupCallId: undefined,\n ...(shouldResetFallbackState && {\n fallbackChatId: undefined,\n fallbackUserIdsToRemove: undefined,\n }),\n },\n });\n\n if (!isFromLibrary) {\n leaveGroupCall();\n }\n\n if (rejoin) {\n actions.joinGroupCall(rejoin);\n }\n })();\n});\n\naddReducer('toggleGroupCallVideo', (global) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n await toggleStream('video');\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n videoStopped: !isStreamEnabled('video'),\n participant: user,\n });\n })();\n});\n\naddReducer('requestToSpeak', (global, actions, payload) => {\n const { value } = payload || { value: true };\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n raiseHand: value,\n participant: user,\n });\n});\n\naddReducer('setGroupCallParticipantVolume', (global, actions, payload) => {\n const { participantId, volume } = payload!;\n\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId);\n if (!user || !groupCall) {\n return;\n }\n\n setVolume(participantId, Math.floor(volume / GROUP_CALL_VOLUME_MULTIPLIER) / 100);\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n volume: Number(volume),\n participant: user,\n });\n});\n\naddReducer('toggleGroupCallMute', (global, actions, payload) => {\n const { participantId, value } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId || global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n const muted = value === undefined ? isStreamEnabled('audio', user.id) : value;\n\n if (!participantId) {\n await toggleStream('audio');\n } else {\n setVolume(participantId, muted ? 0 : 1);\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n muted,\n participant: user,\n });\n })();\n});\n\naddReducer('toggleGroupCallPresentation', (global, actions, payload) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n const value = payload?.value !== undefined ? payload?.value : !isStreamEnabled('presentation');\n if (value) {\n const params = await startSharingScreen();\n if (!params) {\n return;\n }\n\n await callApi('joinGroupCallPresentation', {\n call: groupCall,\n params,\n });\n } else {\n await toggleStream('presentation', false);\n await callApi('leaveGroupCallPresentation', {\n call: groupCall,\n });\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n presentationPaused: !isStreamEnabled('presentation'),\n participant: user,\n });\n })();\n});\n\naddReducer('connectToActiveGroupCall', (global, actions) => {\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) return;\n\n if (groupCall.connectionState === 'discarded') {\n actions.showNotification({ message: 'This voice chat is not active' });\n return;\n }\n\n const audioElement = getGroupCallAudioElement();\n const audioContext = getGroupCallAudioContext();\n\n if (!audioElement || !audioContext) {\n return;\n }\n\n const {\n currentUserId,\n } = global;\n\n if (!currentUserId) return;\n\n (async () => {\n const params = await joinGroupCall(currentUserId, audioContext, audioElement, actions.apiUpdate);\n\n const result = await callApi('joinGroupCall', {\n call: groupCall,\n params,\n inviteHash: groupCall.inviteHash,\n });\n\n if (!result) return;\n\n actions.loadMoreGroupCallParticipants();\n\n if (groupCall.chatId) {\n const chat = selectChat(getGlobal(), groupCall.chatId);\n if (!chat) return;\n await loadFullChat(chat);\n }\n })();\n});\n\naddReducer('inviteToCallFallback', (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return;\n }\n\n const user = selectUser(global, chatId);\n if (!user) {\n return;\n }\n\n const { shouldRemove } = payload;\n\n (async () => {\n const fallbackChannelTitle = selectCallFallbackChannelTitle(global);\n\n let fallbackChannel = Object.values(global.chats.byId).find((channel) => {\n return (\n channel.title === fallbackChannelTitle\n && channel.isCreator\n && !channel.isRestricted\n );\n });\n if (!fallbackChannel) {\n fallbackChannel = await callApi('createChannel', {\n title: fallbackChannelTitle,\n users: [user],\n });\n\n if (!fallbackChannel) {\n return;\n }\n\n const photo = await fetchFile(callFallbackAvatarPath, 'avatar.png');\n void callApi('editChatPhoto', {\n chatId: fallbackChannel.id,\n accessHash: fallbackChannel.accessHash,\n photo,\n });\n } else {\n actions.updateChatMemberBannedRights({\n chatId: fallbackChannel.id,\n userId: chatId,\n bannedRights: {},\n });\n\n void callApi('addChatMembers', fallbackChannel, [user], true);\n }\n\n const inviteLink = await callApi('updatePrivateLink', {\n chat: fallbackChannel,\n usageLimit: 1,\n expireDate: getServerTime(global.serverTimeOffset) + FALLBACK_INVITE_EXPIRE_SECONDS,\n });\n if (!inviteLink) {\n return;\n }\n\n if (shouldRemove) {\n global = getGlobal();\n const fallbackUserIdsToRemove = global.groupCalls.fallbackUserIdsToRemove || [];\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n fallbackChatId: fallbackChannel.id,\n fallbackUserIdsToRemove: [...fallbackUserIdsToRemove, chatId],\n },\n });\n }\n\n actions.sendMessage({ text: `Join a call: ${inviteLink}` });\n actions.openChat({ id: fallbackChannel.id });\n actions.createGroupCall({ chatId: fallbackChannel.id });\n actions.closeCallFallbackConfirm();\n })();\n});\n","export const vibrateShort = () => {\n navigator.vibrate?.(50);\n};\n","import React, {\n FC, memo, useEffect, useState,\n} from '../../lib/teact/teact';\n\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\ntype OwnProps = {\n name: keyof typeof ANIMATED_STICKERS_PATHS;\n size: number;\n playSegment?: [number, number];\n color?: [number, number, number];\n};\n\nconst AnimatedIcon: FC = ({\n size,\n name,\n playSegment,\n color,\n}) => {\n const [iconData, setIconData] = useState();\n\n useEffect(() => {\n getAnimationData(name).then(setIconData);\n }, [name]);\n\n return (\n \n );\n};\n\nexport default memo(AnimatedIcon);\n","import { GroupCallConnectionState } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { vibrateShort } from '../../../util/vibrate';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../../modules/selectors/calls';\nimport useLang from '../../../hooks/useLang';\n\nimport AnimatedIcon from '../../common/AnimatedIcon';\n\nimport './MicrophoneButton.scss';\n\nconst CONNECTION_STATE_DEFAULT = 'discarded';\n\ntype StateProps = {\n connectionState?: GroupCallConnectionState;\n hasRequestedToSpeak: boolean;\n isMuted?: boolean;\n canSelfUnmute?: boolean;\n noAudioStream: boolean;\n};\n\nconst REQUEST_TO_SPEAK_THROTTLE = 3000;\nconst HOLD_TO_SPEAK_TIME = 200;\nconst ICON_SIZE = 48;\n\nconst MicrophoneButton: FC = ({\n noAudioStream,\n canSelfUnmute,\n isMuted,\n hasRequestedToSpeak,\n connectionState,\n}) => {\n const {\n toggleGroupCallMute,\n requestToSpeak,\n playGroupCallSound,\n } = getDispatch();\n\n const lang = useLang();\n const muteMouseDownState = useRef('up');\n\n const [isRequestingToSpeak, setIsRequestingToSpeak] = useState(false);\n const isConnecting = connectionState !== 'connected';\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevShouldRaiseHand = usePrevious(shouldRaiseHand);\n\n useEffect(() => {\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n playGroupCallSound('allowTalk');\n }\n }, [playGroupCallSound, prevShouldRaiseHand, shouldRaiseHand]);\n\n // Voice mini\n // unmuted -> muted [69, 99]\n // muted -> unmuted [36, 69]\n // raise -> muted [0, 36]\n // muted -> raise [99, 136]\n // unmuted -> raise [136, 172]\n // TODO should probably move to other component\n const playSegment: [number, number] = useMemo(() => {\n if (isRequestingToSpeak) {\n const r = Math.floor(Math.random() * 100);\n return (r < 32 ? [0, 120]\n : (r < 64 ? [120, 240]\n : (r < 97 ? [240, 420]\n : [420, 540]\n )\n )\n );\n }\n if (!prevShouldRaiseHand && shouldRaiseHand) {\n return noAudioStream ? [99, 135] : [136, 172];\n }\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n return [0, 36];\n }\n if (!shouldRaiseHand) {\n return noAudioStream ? [69, 99] : [36, 69];\n }\n return [0, 0];\n }, [prevShouldRaiseHand, isRequestingToSpeak, noAudioStream, shouldRaiseHand]);\n\n const animatedIconName = isRequestingToSpeak ? 'HandFilled' : 'VoiceMini';\n\n const toggleMute = () => {\n vibrateShort();\n toggleGroupCallMute();\n };\n\n const handleMouseDownMute = () => {\n if (shouldRaiseHand) {\n if (isRequestingToSpeak) return;\n vibrateShort();\n requestToSpeak();\n setIsRequestingToSpeak(true);\n setTimeout(() => {\n setIsRequestingToSpeak(false);\n }, REQUEST_TO_SPEAK_THROTTLE);\n return;\n }\n muteMouseDownState.current = 'down';\n if (noAudioStream) {\n setTimeout(() => {\n if (muteMouseDownState.current === 'down') {\n muteMouseDownState.current = 'hold';\n toggleMute();\n }\n }, HOLD_TO_SPEAK_TIME);\n }\n };\n\n const handleMouseUpMute = () => {\n if (shouldRaiseHand) {\n return;\n }\n toggleMute();\n muteMouseDownState.current = 'up';\n };\n\n const buttonText = useMemo(() => {\n return lang(\n hasRequestedToSpeak ? 'VoipMutedTapedForSpeak' : (\n shouldRaiseHand ? 'VoipMutedByAdmin' : (\n noAudioStream ? 'VoipUnmute' : 'VoipTapToMute'\n )\n ),\n );\n }, [hasRequestedToSpeak, noAudioStream, lang, shouldRaiseHand]);\n\n return (\n
\n \n \n \n
\n {buttonText}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const groupCall = selectActiveGroupCall(global);\n\n const { connectionState } = groupCall || {};\n const meParticipant = groupCall && selectGroupCallParticipant(global, groupCall.id, global.currentUserId!);\n\n const {\n raiseHandRating, hasAudioStream, canSelfUnmute, isMuted,\n } = meParticipant || {};\n\n return {\n connectionState: connectionState || CONNECTION_STATE_DEFAULT,\n hasRequestedToSpeak: Boolean(raiseHandRating),\n noAudioStream: !hasAudioStream,\n canSelfUnmute,\n isMuted,\n };\n },\n)(MicrophoneButton));\n","import { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { IAnchorPosition } from '../../../types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useThrottle from '../../../hooks/useThrottle';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport { selectIsAdminInActiveGroupCall } from '../../../modules/selectors/calls';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport DeleteMemberModal from '../../right/DeleteMemberModal';\n\nimport './GroupCallParticipantMenu.scss';\n\nconst SPEAKER_ICON_DISABLED_SEGMENT: [number, number] = [0, 17];\nconst SPEAKER_ICON_ENABLED_SEGMENT: [number, number] = [17, 34];\n\ntype OwnProps = {\n participant?: GroupCallParticipant;\n closeDropdown: VoidFunction;\n isDropdownOpen: boolean;\n anchor?: IAnchorPosition;\n};\n\ntype StateProps = {\n isAdmin: boolean;\n};\n\nconst VOLUME_ZERO = 0;\nconst VOLUME_LOW = 50;\nconst VOLUME_MEDIUM = 100;\nconst VOLUME_NORMAL = 150;\n\nconst VOLUME_CHANGE_THROTTLE = 500;\n\nconst SPEAKER_ICON_SIZE = 24;\n\nconst GroupCallParticipantMenu: FC = ({\n participant,\n closeDropdown,\n isDropdownOpen,\n anchor,\n isAdmin,\n}) => {\n const {\n toggleGroupCallMute,\n setGroupCallParticipantVolume,\n toggleGroupCallPanel,\n openChat,\n requestToSpeak,\n } = getDispatch();\n\n const lang = useLang();\n const [isDeleteUserModalOpen, openDeleteUserModal, closeDeleteUserModal] = useFlag();\n\n const id = participant?.id;\n const {\n isMutedByMe, isMuted, isSelf, canSelfUnmute,\n } = participant || {};\n const isRaiseHand = Boolean(participant?.raiseHandRating);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n\n const [localVolume, setLocalVolume] = useState(\n isMutedByMe ? VOLUME_ZERO : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER),\n );\n\n useEffect(() => {\n setLocalVolume(isMutedByMe\n ? VOLUME_ZERO\n : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER));\n // We only want to initialize local volume when switching participants and ignore following updates from server\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const runThrottled = useThrottle(VOLUME_CHANGE_THROTTLE);\n\n const handleRemove = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n openDeleteUserModal();\n closeDropdown();\n }, [openDeleteUserModal, closeDropdown]);\n\n const handleCancelRequestToSpeak = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n requestToSpeak({\n value: false,\n });\n closeDropdown();\n }, [requestToSpeak, closeDropdown]);\n\n const handleMute = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n closeDropdown();\n\n if (!isAdmin) {\n setLocalVolume(isMutedByMe ? GROUP_CALL_DEFAULT_VOLUME / GROUP_CALL_VOLUME_MULTIPLIER : VOLUME_ZERO);\n }\n\n toggleGroupCallMute({\n participantId: id,\n value: isAdmin ? !shouldRaiseHand : !isMutedByMe,\n });\n }, [closeDropdown, toggleGroupCallMute, id, isAdmin, shouldRaiseHand, isMutedByMe]);\n\n const handleOpenProfile = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n toggleGroupCallPanel();\n openChat({\n id,\n });\n closeDropdown();\n }, [toggleGroupCallPanel, closeDropdown, openChat, id]);\n\n const isLocalVolumeZero = localVolume === VOLUME_ZERO;\n const speakerIconPlaySegment = isLocalVolumeZero ? SPEAKER_ICON_DISABLED_SEGMENT : SPEAKER_ICON_ENABLED_SEGMENT;\n\n const handleChangeVolume = (e: React.ChangeEvent) => {\n const value = Number(e.target.value);\n setLocalVolume(value);\n runThrottled(() => {\n if (value === VOLUME_ZERO) {\n toggleGroupCallMute({\n participantId: id,\n value: true,\n });\n } else {\n setGroupCallParticipantVolume({\n participantId: id,\n volume: Math.floor(value * GROUP_CALL_VOLUME_MULTIPLIER),\n });\n }\n });\n };\n\n return (\n
\n \n {!isSelf && !shouldRaiseHand && (\n
\n
= VOLUME_LOW && localVolume < VOLUME_MEDIUM && 'medium',\n localVolume >= VOLUME_MEDIUM && localVolume < VOLUME_NORMAL && 'normal',\n localVolume >= VOLUME_NORMAL && 'high',\n )}\n >\n \n
\n \n {localVolume}%\n
\n
\n
\n )}\n
\n {(isRaiseHand && isSelf) && (\n \n {lang('VoipGroupCancelRaiseHand')}\n \n )}\n {!isSelf && {lang('VoipGroupOpenProfile')}}\n {!isSelf && (\n // TODO cross mic\n \n {isAdmin\n ? lang(shouldRaiseHand ? 'VoipGroupAllowToSpeak' : 'VoipMute')\n : lang(isMutedByMe ? 'VoipGroupUnmuteForMe' : 'VoipGroupMuteForMe')}\n \n )}\n {!isSelf && isAdmin && (\n // TODO replace with hand\n \n {lang('VoipGroupUserRemove')}\n \n )}\n
\n \n\n {!isSelf && isAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isAdmin: selectIsAdminInActiveGroupCall(global),\n };\n },\n)(GroupCallParticipantMenu));\n","import { useMemo } from '../lib/teact/teact';\n\nimport { throttle } from '../util/schedulers';\n\nconst useThrottle = (ms: number, noFirst = false) => {\n return useMemo(() => {\n return throttle((cb) => cb(), ms, !noFirst);\n }, [ms, noFirst]);\n};\n\nexport default useThrottle;\n","import { GroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport usePrevious from '../../../hooks/usePrevious';\n\ntype OwnProps = {\n participant: GroupCallParticipant;\n noColor?: boolean;\n};\n\nconst OutlinedMicrophoneIcon: FC = ({\n participant,\n noColor,\n}) => {\n const { isMuted, isMutedByMe } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n const prevIsRaiseHand = usePrevious(isRaiseHand);\n const canSelfUnmute = Boolean(participant?.canSelfUnmute);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevIsMuted = usePrevious(isMuted);\n\n const playSegment: [number, number] = useMemo(() => {\n if (isMuted && !prevIsMuted) {\n return [43, 64];\n }\n\n if (!isMuted && prevIsMuted) {\n return [22, 42];\n }\n\n if (isRaiseHand && !prevIsRaiseHand) {\n return [65, 84];\n }\n\n if (!shouldRaiseHand && prevIsRaiseHand) {\n return [0, 21];\n }\n\n // TODO cancel request to speak should play in reverse\n // if (!isRaiseHand && prevIsRaiseHand) {\n // return [84, 65];\n // }\n\n return isMuted ? [22, 23] : [43, 44];\n // eslint-disable-next-line\n }, [isMuted, shouldRaiseHand, isRaiseHand]);\n\n const microphoneColor: [number, number, number] | undefined = useMemo(() => {\n return noColor ? [0xff, 0xff, 0xff] : (\n isRaiseHand ? [0x4d, 0xa6, 0xe0]\n : (shouldRaiseHand || isMutedByMe ? [0xFF, 0x70, 0x6F] : (\n isSpeaking ? [0x57, 0xBC, 0x6C] : [0x84, 0x8D, 0x94]\n ))\n );\n }, [noColor, isRaiseHand, shouldRaiseHand, isMutedByMe, isSpeaking]);\n\n return (\n \n );\n};\n\nexport default memo(OutlinedMicrophoneIcon);\n","import { GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\nimport OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';\n\nimport './GroupCallParticipant.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n};\n\nconst GroupCallParticipant: FC = ({\n openParticipantMenu,\n participant,\n user,\n chat,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const anchorRef = useRef(null);\n const lang = useLang();\n\n const { isSelf, isMutedByMe, isMuted } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n\n const handleOnClick = () => {\n if (isSelf) return;\n openParticipantMenu(anchorRef.current!, participant);\n };\n\n const [aboutText, aboutColor] = useMemo(() => {\n if (isSelf) {\n return [lang('ThisIsYou'), 'blue'];\n }\n if (isMutedByMe) {\n return [lang('VoipGroupMutedForMe'), 'red'];\n }\n return isRaiseHand\n ? [lang('WantsToSpeak'), 'blue']\n : (!isMuted && isSpeaking ? [\n participant.volume && participant.volume !== GROUP_CALL_DEFAULT_VOLUME\n ? lang('SpeakingWithVolume',\n (participant.volume / GROUP_CALL_VOLUME_MULTIPLIER).toString())\n .replace('%%', '%') : lang('Speaking'),\n 'green',\n ]\n : (participant.about ? [participant.about, ''] : [lang('Listening'), 'blue']));\n }, [isSpeaking, participant.volume, lang, isSelf, isMutedByMe, isRaiseHand, isMuted, participant.about]);\n\n if (!user && !chat) {\n return undefined;\n }\n\n const name = user ? `${user.firstName || ''} ${user.lastName || ''}` : chat?.title;\n\n return (\n \n \n
\n {name}\n {aboutText}\n
\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { participant }): StateProps => {\n return {\n user: participant.isUser ? selectUser(global, participant.id) : undefined,\n chat: !participant.isUser ? selectChat(global, participant.id) : undefined,\n };\n },\n)(GroupCallParticipant));\n","import { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectActiveGroupCall } from '../../../modules/selectors/calls';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\n\nimport GroupCallParticipant from './GroupCallParticipant';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\ntype OwnProps = {\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n participantsCount: number;\n participants?: Record;\n canInvite?: boolean;\n};\n\nconst GroupCallParticipantList: FC = ({\n participants,\n participantsCount,\n openParticipantMenu,\n}) => {\n const {\n createGroupCallInviteLink,\n loadMoreGroupCallParticipants,\n } = getDispatch();\n\n const lang = useLang();\n\n const participantsIds = useMemo(() => {\n return Object.keys(participants || {});\n }, [participants]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n loadMoreGroupCallParticipants,\n participantsIds,\n participantsIds.length >= participantsCount,\n );\n\n return (\n
\n
\n
\n \n
\n
{lang('VoipGroupInviteMember')}
\n
\n\n \n {viewportIds?.map(\n (participantId) => (\n participants![participantId] && (\n \n )\n ),\n )}\n \n\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { participantsCount, participants } = selectActiveGroupCall(global) || {};\n\n return {\n participants,\n participantsCount: participantsCount || 0,\n };\n },\n)(GroupCallParticipantList));\n","import { getUserStreams, GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { ENABLE_THUMBNAIL_VIDEO } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\n\nimport './GroupCallParticipantVideo.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n type: 'video' | 'presentation';\n onClick?: (id: string, type: 'video' | 'presentation') => void;\n isFullscreen?: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n currentUserId?: string;\n isActive?: boolean;\n};\n\nconst GroupCallParticipantVideo: FC = ({\n type,\n onClick,\n user,\n chat,\n isActive,\n isFullscreen,\n}) => {\n const lang = useLang();\n\n const handleClick = useCallback(() => {\n if (onClick) {\n onClick(user?.id || chat!.id, type);\n }\n }, [chat, onClick, type, user?.id]);\n\n if (!user && !chat) return undefined;\n\n const streams = getUserStreams(user?.id || chat!.id);\n\n return (\n \n {isFullscreen && (\n \n )}\n \n {ENABLE_THUMBNAIL_VIDEO && (\n
\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { participant }): StateProps => {\n return {\n currentUserId: global.currentUserId,\n user: participant.isUser ? selectUser(global, participant.id) : undefined,\n chat: !participant.isUser ? selectChat(global, participant.id) : undefined,\n isActive: (participant.amplitude || 0) > THRESHOLD,\n };\n },\n)(GroupCallParticipantVideo));\n","import { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\nimport GroupCallParticipantVideo from './GroupCallParticipantVideo';\nimport { selectActiveGroupCall } from '../../../modules/selectors/calls';\nimport buildClassName from '../../../util/buildClassName';\n\ntype OwnProps = {\n onDoubleClick?: VoidFunction;\n};\n\ntype StateProps = {\n participants?: Record;\n};\n\ntype SelectedVideo = {\n type: 'video' | 'presentation';\n id: string;\n};\n\nconst GroupCallParticipantStreams: FC = ({\n participants,\n onDoubleClick,\n}) => {\n const [selectedVideo, setSelectedVideo] = useState(undefined);\n const presentationParticipants = useMemo(() => {\n return Object.values(participants || {}).filter((l) => l.hasPresentationStream);\n }, [participants]);\n const videoParticipants = useMemo(() => {\n return Object.values(participants || {}).filter((l) => l.hasVideoStream);\n }, [participants]);\n\n const totalVideoCount = videoParticipants.length + presentationParticipants.length;\n // TODO replace with more adequate solution.\n // There's a max of 30 videos or so right now\n const columnCount = totalVideoCount <= 2 ? 1 : (\n totalVideoCount <= 6 ? 2 : (\n totalVideoCount <= 9 ? 3 : 4\n )\n );\n\n const shouldSpanLastVideo = totalVideoCount === 3 || (columnCount === 2 && totalVideoCount % 2 !== 0);\n\n const handleClickVideo = useCallback((id: string, type: 'video' | 'presentation') => {\n if (!selectedVideo || (id !== selectedVideo.id || type !== selectedVideo.type)) {\n setSelectedVideo({\n id,\n type,\n });\n } else {\n setSelectedVideo(undefined);\n }\n }, [selectedVideo]);\n\n return (\n
\n \n {selectedVideo && (\n \n )}\n\n {!selectedVideo ? presentationParticipants.map((participant) => (\n \n )) : undefined}\n {!selectedVideo ? videoParticipants.map((participant) => (\n \n )) : undefined}\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { participants } = selectActiveGroupCall(global) || {};\n return {\n participants,\n };\n },\n)(GroupCallParticipantStreams));\n","import {\n GroupCallConnectionState, GroupCallParticipant as TypeGroupCallParticipant,\n IS_SCREENSHARE_SUPPORTED, switchCameraInput, toggleSpeaker,\n} from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\nimport '../../../modules/actions/calls';\n\nimport { IAnchorPosition } from '../../../types';\n\nimport {\n IS_ANDROID,\n IS_IOS,\n IS_REQUEST_FULLSCREEN_SUPPORTED,\n IS_SINGLE_COLUMN_LAYOUT,\n} from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport {\n selectGroupCall,\n selectGroupCallParticipant,\n selectIsAdminInActiveGroupCall,\n} from '../../../modules/selectors/calls';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\n\nimport Loading from '../../ui/Loading';\nimport Button from '../../ui/Button';\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Modal from '../../ui/Modal';\nimport MicrophoneButton from './MicrophoneButton';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport Checkbox from '../../ui/Checkbox';\nimport GroupCallParticipantMenu from './GroupCallParticipantMenu';\nimport GroupCallParticipantList from './GroupCallParticipantList';\nimport GroupCallParticipantStreams from './GroupCallParticipantStreams';\n\nimport './GroupCall.scss';\n\nconst CAMERA_FLIP_PLAY_SEGMENT: [number, number] = [0, 10];\nconst PARTICIPANT_HEIGHT = 60;\n\nexport type OwnProps = {\n groupCallId: string;\n};\n\ntype StateProps = {\n isGroupCallPanelHidden: boolean;\n connectionState: GroupCallConnectionState;\n title?: string;\n meParticipant?: TypeGroupCallParticipant;\n participantsCount?: number;\n isSpeakerEnabled?: boolean;\n isAdmin: boolean;\n participants: Record;\n};\n\nconst GroupCall: FC = ({\n groupCallId,\n isGroupCallPanelHidden,\n connectionState,\n isSpeakerEnabled,\n title,\n meParticipant,\n isAdmin,\n participants,\n\n}) => {\n const {\n toggleGroupCallVideo,\n toggleGroupCallPresentation,\n leaveGroupCall,\n toggleGroupCallPanel,\n connectToActiveGroupCall,\n playGroupCallSound,\n } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [isLeaving, setIsLeaving] = useState(false);\n const [isFullscreen, openFullscreen, closeFullscreen] = useFlag();\n const [isSidebarOpen, openSidebar, closeSidebar] = useFlag(true);\n const hasVideoParticipants = participants && Object.values(participants).some((l) => l.video || l.presentation);\n const isLandscape = isFullscreen && !IS_SINGLE_COLUMN_LAYOUT && hasVideoParticipants;\n\n const [participantMenu, setParticipantMenu] = useState<{\n participant: TypeGroupCallParticipant;\n anchor: IAnchorPosition;\n } | undefined>();\n const [isParticipantMenuOpen, openParticipantMenu, closeParticipantMenu] = useFlag();\n\n const [isConfirmLeaveModalOpen, openConfirmLeaveModal, closeConfirmLeaveModal] = useFlag();\n const [isEndGroupCallModal, setIsEndGroupCallModal] = useState(false);\n const [shouldEndGroupCall, setShouldEndGroupCall] = useState(false);\n\n const hasVideo = meParticipant?.hasVideoStream;\n const hasPresentation = meParticipant?.hasPresentationStream;\n const isConnecting = connectionState !== 'connected';\n const canSelfUnmute = meParticipant?.canSelfUnmute;\n const shouldRaiseHand = !canSelfUnmute && meParticipant?.isMuted;\n\n const handleOpenParticipantMenu = useCallback((anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => {\n const rect = anchor.getBoundingClientRect();\n const container = containerRef.current!;\n\n setParticipantMenu({\n anchor: { x: rect.left, y: rect.top - container.offsetTop + PARTICIPANT_HEIGHT },\n participant,\n });\n\n openParticipantMenu();\n }, [openParticipantMenu]);\n\n useEffect(() => {\n if (connectionState === 'connected') {\n playGroupCallSound({ sound: 'join' });\n } else if (connectionState === 'reconnecting') {\n playGroupCallSound({ sound: 'connecting' });\n }\n }, [connectionState, playGroupCallSound]);\n\n const handleCloseConfirmLeaveModal = () => {\n closeConfirmLeaveModal();\n setIsEndGroupCallModal(false);\n };\n\n const MainButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, [lang]);\n\n const handleToggleFullscreen = useCallback(() => {\n if (!containerRef.current) return;\n\n if (isFullscreen) {\n document.exitFullscreen().then(closeFullscreen);\n } else {\n containerRef.current.requestFullscreen().then(openFullscreen);\n }\n }, [closeFullscreen, isFullscreen, openFullscreen]);\n\n const handleToggleSidebar = () => {\n if (isSidebarOpen) {\n closeSidebar();\n } else {\n openSidebar();\n }\n };\n\n const handleStreamsDoubleClick = useCallback(() => {\n if (!IS_REQUEST_FULLSCREEN_SUPPORTED) return;\n\n if (!isFullscreen) {\n closeSidebar();\n handleToggleFullscreen();\n } else {\n handleToggleFullscreen();\n }\n }, [closeSidebar, handleToggleFullscreen, isFullscreen]);\n\n const toggleFullscreen = useCallback(() => {\n if (isFullscreen) {\n closeFullscreen();\n } else {\n openFullscreen();\n }\n }, [closeFullscreen, isFullscreen, openFullscreen]);\n\n const handleClose = () => {\n toggleGroupCallPanel();\n if (isFullscreen) {\n closeFullscreen();\n }\n };\n\n useEffect(() => {\n if (!IS_REQUEST_FULLSCREEN_SUPPORTED) return undefined;\n const container = containerRef.current;\n if (!container) return undefined;\n\n container.addEventListener('fullscreenchange', toggleFullscreen);\n\n return () => {\n container.removeEventListener('fullscreenchange', toggleFullscreen);\n };\n }, [toggleFullscreen]);\n\n const handleClickVideoOrSpeaker = () => {\n if (shouldRaiseHand) {\n toggleSpeaker();\n } else {\n toggleGroupCallVideo();\n }\n };\n\n useEffect(() => {\n connectToActiveGroupCall();\n }, [connectToActiveGroupCall, groupCallId]);\n\n const endGroupCall = () => {\n setIsEndGroupCallModal(true);\n setShouldEndGroupCall(true);\n openConfirmLeaveModal();\n if (isFullscreen) {\n handleToggleFullscreen();\n }\n };\n\n const handleLeaveGroupCall = () => {\n if (isAdmin && !isConfirmLeaveModalOpen) {\n openConfirmLeaveModal();\n if (isFullscreen) {\n handleToggleFullscreen();\n }\n return;\n }\n playGroupCallSound({ sound: 'leave' });\n setIsLeaving(true);\n closeConfirmLeaveModal();\n };\n\n const handleCloseAnimationEnd = () => {\n if (isLeaving) {\n leaveGroupCall({\n shouldDiscard: shouldEndGroupCall,\n });\n }\n };\n\n return (\n \n
\n

{title || lang('VoipGroupVoiceChat')}

\n {IS_REQUEST_FULLSCREEN_SUPPORTED && (\n \n \n \n )}\n {isLandscape && (\n \n \n \n )}\n {((IS_SCREENSHARE_SUPPORTED && !shouldRaiseHand) || isAdmin) && (\n \n {IS_SCREENSHARE_SUPPORTED && !shouldRaiseHand && (\n \n {lang(hasPresentation ? 'VoipChatStopScreenCapture' : 'VoipChatStartScreenCapture')}\n \n )}\n {isAdmin && (\n \n {lang('VoipGroupLeaveAlertEndChat')}\n \n )}\n \n )}\n \n \n \n
\n\n
\n \n\n {(!isLandscape || isSidebarOpen)\n && }\n
\n\n \n\n
\n {isConnecting && }\n\n
\n
\n {hasVideo && (IS_ANDROID || IS_IOS) && (\n \n )}\n \n \n \n
\n\n
\n {lang(shouldRaiseHand ? 'VoipSpeaker' : 'VoipCamera')}\n
\n
\n\n \n\n
\n \n\n
\n {lang('VoipGroupLeave')}\n
\n
\n
\n\n \n

{lang(isEndGroupCallModal ? 'VoipGroupEndAlertText' : 'VoipGroupLeaveAlertText')}

\n {!isEndGroupCallModal && (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { groupCallId }): StateProps => {\n const {\n connectionState, title, isSpeakerDisabled, participants, participantsCount,\n } = selectGroupCall(global, groupCallId)! || {};\n\n return {\n connectionState,\n title,\n isSpeakerEnabled: !isSpeakerDisabled,\n participantsCount,\n meParticipant: selectGroupCallParticipant(global, groupCallId, global.currentUserId!),\n isGroupCallPanelHidden: Boolean(global.groupCalls.isGroupCallPanelHidden),\n isAdmin: selectIsAdminInActiveGroupCall(global),\n participants,\n };\n },\n)(GroupCall));\n","import { GroupCallParticipant } from '../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiGroupCall } from '../../api/types';\n\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../modules/selectors/calls';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './ActiveCallHeader.scss';\n\ntype StateProps = {\n isGroupCallPanelHidden?: boolean;\n meParticipant: GroupCallParticipant;\n groupCall?: ApiGroupCall;\n};\n\nconst ActiveCallHeader: FC = ({\n groupCall,\n meParticipant,\n isGroupCallPanelHidden,\n}) => {\n const { toggleGroupCallPanel } = getDispatch();\n\n const lang = useLang();\n\n useEffect(() => {\n document.body.classList.toggle('has-group-call-header', isGroupCallPanelHidden);\n\n return () => {\n document.body.classList.toggle('has-group-call-header', false);\n };\n }, [isGroupCallPanelHidden]);\n\n if (!groupCall || !meParticipant) return undefined;\n\n return (\n \n {groupCall.title || lang('VoipGroupVoiceChat')}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n groupCall: selectActiveGroupCall(global),\n isGroupCallPanelHidden: global.groupCalls.isGroupCallPanelHidden,\n meParticipant: selectGroupCallParticipant(global, global.groupCalls.activeGroupCallId!, global.currentUserId!),\n };\n },\n)(ActiveCallHeader));\n","import React, { FC, memo, useState } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\nimport Checkbox from '../ui/Checkbox';\nimport { selectCallFallbackChannelTitle } from '../../modules/selectors/calls';\nimport { getUserFullName } from '../../modules/helpers';\nimport { selectCurrentMessageList, selectUser } from '../../modules/selectors';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ninterface StateProps {\n userFullName?: string;\n channelTitle: string;\n}\n\nconst CallFallbackConfirm: FC = ({\n isOpen,\n channelTitle,\n userFullName,\n}) => {\n const {\n closeCallFallbackConfirm,\n inviteToCallFallback,\n } = getDispatch();\n\n const [shouldRemove, setShouldRemove] = useState(true);\n const renderingUserFullName = useCurrentOrPrev(userFullName, true);\n\n return (\n {\n inviteToCallFallback({ shouldRemove });\n }}\n onClose={closeCallFallbackConfirm}\n >\n

The call will be started in a private channel {channelTitle}.

\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const user = chatId ? selectUser(global, chatId) : undefined;\n\n return {\n userFullName: user ? getUserFullName(user) : undefined,\n channelTitle: selectCallFallbackChannelTitle(global),\n };\n },\n)(CallFallbackConfirm));\n","/*! For license information please see index.js.LICENSE.txt */\n(()=>{\"use strict\";var e={\"./src/blacksilence.ts\":(e,t,n)=>{n.r(t),n.d(t,{silence:()=>a,black:()=>i});const a=e=>{const t=e.createOscillator(),n=t.connect(e.createMediaStreamDestination());return t.start(),new MediaStream([Object.assign(n.stream.getAudioTracks()[0],{enabled:!1})])},i=({width:e=640,height:t=480}={})=>{const n=Object.assign(document.createElement(\"canvas\"),{width:e,height:t}),a=n.getContext(\"2d\");if(!a)throw Error(\"Cannot create canvas ctx\");a.fillRect(0,0,e,t);const i=n.captureStream();return new MediaStream([Object.assign(i.getVideoTracks()[0],{enabled:!1})])}},\"./src/buildSdp.ts\":(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(\"./src/utils.ts\");const i=(e,t=!1,n=!1)=>{const i=[],r=e=>{i.push(e)},{sessionId:s,ssrcs:o,audioExtensions:c,videoExtensions:d,audioPayloadTypes:p,videoPayloadTypes:u,transport:{ufrag:l,pwd:m,fingerprints:f,candidates:g}}=e;r(\"v=0\"),r(`o=- ${s} 2 IN IP4 0.0.0.0`),r(\"s=-\"),r(\"t=0 0\"),r(`a=group:BUNDLE ${o.map((e=>e.endpoint)).join(\" \")}${n?\"\":\" 2\"}`),r(\"a=ice-lite\");const S=e=>{let t=\"\";t+=\"a=candidate:\",t+=`${e.foundation} ${e.component} ${e.protocol} ${e.priority} ${e.ip} ${e.port} typ ${e.type}`,\"rel-addr\"in e&&(t+=` raddr ${e[\"rel-addr\"]} rport ${e[\"rel-port\"]}`),t+=` generation ${e.generation}`,r(t)},v=()=>{r(`a=ice-ufrag:${l}`),r(`a=ice-pwd:${m}`),f.forEach((e=>{r(`a=fingerprint:${e.hash} ${e.fingerprint}`),r(\"a=setup:passive\")})),g.forEach(S)},h=e=>{const{channels:t,id:n,name:a,clockrate:i,parameters:s}=e;var o=t?`/${t}`:\"\";r(`a=rtpmap:${n} ${a}/${i}${o}`),s&&(o=Object.keys(s).map((e=>`${e}=${s[e]};`)).join(\" \"),r(`a=fmtp:${n} ${o}`)),e[\"rtcp-fbs\"]?.forEach((e=>{r(`a=rtcp-fb:${n} ${e.type}${e.subtype?` ${e.subtype}`:\"\"}`)}))};return e=e=>{const n=e.isVideo?u:p;var i=e.isVideo?\"video\":\"audio\";r(`m=${i} ${e.isMain?1:0} RTP/SAVPF ${n.map((e=>e.id)).join(\" \")}`),r(\"c=IN IP4 0.0.0.0\"),r(\"b=AS:1300\"),r(`a=mid:${e.endpoint}`),r(\"a=rtcp-mux\"),n.forEach(h),r(\"a=rtcp:1 IN IP4 0.0.0.0\"),e.isVideo&&r(\"a=rtcp-rsize\"),(e.isVideo?d:c).forEach((({id:e,uri:t})=>{r(`a=extmap:${e} ${t}`)})),e.isRemoved?r(\"a=inactive\"):(v(),t?r(\"a=recvonly\"):(e.isMain?r(\"a=sendrecv\"):(r(\"a=sendonly\"),r(\"a=bundle-only\")),e.sourceGroups.forEach((t=>{r(`a=ssrc-group:${t.semantics} ${t.sources.map(a.fromTelegramSource).join(\" \")}`),t.sources.forEach((t=>{t=(0,a.fromTelegramSource)(t),r(`a=ssrc:${t} cname:${e.endpoint}`),r(`a=ssrc:${t} msid:${e.endpoint} ${e.endpoint}`),r(`a=ssrc:${t} mslabel:${e.endpoint}`),r(`a=ssrc:${t} label:${e.endpoint}`)}))}))))},o.filter((e=>\"0\"===e.endpoint||\"1\"===e.endpoint)).map(e),n||(r(\"m=application 1 UDP/DTLS/SCTP webrtc-datachannel\"),r(\"c=IN IP4 0.0.0.0\"),v(),r(\"a=ice-options:trickle\"),r(\"a=mid:\"+(n?\"1\":\"2\")),r(\"a=sctp-port:5000\"),r(\"a=max-message-size:262144\")),o.filter((e=>\"0\"!==e.endpoint&&\"1\"!==e.endpoint)).map(e),`${i.join(\"\\n\")}\\n`}},\"./src/parseSdp.ts\":(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(\"./src/utils.ts\");const i=e=>{if(!e||!e.sdp)throw Error(\"Failed parsing SDP: session description is null\");const t=e.sdp.split(\"\\r\\nm=\").map(((e,t)=>0===t?e:`m=${e}`)).reduce(((e,t)=>(e[t.match(/^m=(.+?)\\s/)?.[1]||\"header\"]=t.split(\"\\r\\n\").filter(Boolean),e)),{});var n=(e,n)=>n?t[n]?.find((t=>t.startsWith(e)))?.substr(e.length):Object.values(t).map((t=>t.find((t=>t.startsWith(e)))?.substr(e.length))).filter(Boolean)[0];const i=n(\"a=ssrc:\",\"audio\");var r=i&&Number(i.split(\" \")[0]);const s=n(\"a=ssrc-group:\",\"video\")?.split(\" \")||void 0;if(!s)throw Error(\"Failed parsing SDP: no video ssrc\");var[o,c]=n(\"a=fingerprint:\")?.split(\" \")||[];if(!o||!c)throw Error(\"Failed parsing SDP: no fingerprint\");if(e=n(\"a=ice-ufrag:\"),n=n(\"a=ice-pwd:\"),!e||!n)throw Error(\"Failed parsing SDP: no ICE ufrag or pwd\");return{fingerprints:[{fingerprint:c,hash:o,setup:\"active\"}],pwd:n,ufrag:e,...r&&{ssrc:(0,a.toTelegramSource)(r)},...s&&{\"ssrc-groups\":[{semantics:s[0],sources:s.slice(1,s.length).map(Number).map(a.toTelegramSource)}]}}}},\"./src/secretsauce.ts\":(e,t,n)=>{n.r(t),n.d(t,{getDevices:()=>async function(e,t=!0){return(await navigator.mediaDevices.enumerateDevices()).filter((n=>n.kind===`${e}${t?\"input\":\"output\"}`))},toggleSpeaker:()=>function(){o&&(o.isSpeakerDisabled=!o.isSpeakerDisabled,o?.onUpdate?.({\"@type\":\"updateGroupCallConnectionState\",connectionState:\"connected\",isSpeakerDisabled:o.isSpeakerDisabled}),o.participantFunctions&&Object.values(o.participantFunctions).forEach((e=>{e.toggleMute?.(!!o?.isSpeakerDisabled)})))},toggleNoiseSuppression:()=>function(){if(o&&o.myId&&o.streams){const n=o.streams[o.myId].audio;if(n){const a=n.getTracks()[0];var e,t;a&&(({echoCancellation:e,noiseSuppression:t}=a.getConstraints()),a.applyConstraints({echoCancellation:!e,noiseSuppression:!t}))}}},getUserStreams:()=>d,setVolume:()=>function(e,t){const n=o?.participantFunctions?.[e];n&&n.setVolume?.(t)},isStreamEnabled:()=>p,switchCameraInput:()=>async function(){if(o?.myId&&o.connection&&o.streams&&o.facingMode){const e=d(o.myId)?.video;if(e){const t=e.getTracks()[0];if(t){const e=o.connection.getSenders().find((e=>t.id===e.track?.id));if(e){o.facingMode=\"environment\"===o.facingMode?\"user\":\"environment\";try{const t=await l(\"video\",o.facingMode);await e.replaceTrack(t.getTracks()[0]),o.streams[o.myId].video=t}catch(e){}}}}}},toggleStream:()=>m,leaveGroupCall:()=>g,handleUpdateGroupCallParticipants:()=>async function(e){if(o){const{participants:a,conference:r,connection:s,myId:c}=o;if(a&&r&&s&&r.ssrcs&&r.transport&&c)if(e.find((e=>e.isSelf&&e.source!==o?.conference?.ssrcs?.find((e=>e.isMain&&!e.isVideo))?.sourceGroups[0].sources[0])))g();else{const a=[];if(e.forEach((e=>{if(e.isSelf)e.isMuted&&!e.canSelfUnmute&&(m(\"audio\",!1),m(\"video\",!1),m(\"presentation\",!1));else{var t=e.isLeft;const n=e.isMuted||e.isMutedByMe,i=!e.isVideoJoined||!e.video||t,s=!e.presentation||t;let o=!1,c=!1,d=!1;r.ssrcs.filter((t=>t.userId===e.id)).forEach((t=>{t.isVideo||(t.sourceGroups[0].sources[0]===e.source&&(c=!0),t.isRemoved=n),t.isVideo&&(t.isPresentation||(e.video&&t.endpoint===e.video.endpoint&&(o=!0),t.isRemoved=i),t.isPresentation&&(e.presentation&&t.endpoint===e.presentation.endpoint&&(d=!0),t.isRemoved=s))})),n||c||r.ssrcs.push({userId:e.id,isMain:!1,endpoint:`audio${e.source}`,isVideo:!1,sourceGroups:[{semantics:\"FID\",sources:[e.source]}]}),i||o||!e.video||(a.push(e.video.endpoint),r.ssrcs.push({userId:e.id,isMain:!1,endpoint:e.video.endpoint,isVideo:!0,sourceGroups:e.video.sourceGroups})),s||d||!e.presentation||r.ssrcs.push({isPresentation:!0,userId:e.id,isMain:!1,endpoint:e.presentation.endpoint,isVideo:!0,sourceGroups:e.presentation.sourceGroups})}})),o.updatingParticipantsQueue)o.updatingParticipantsQueue.push(r);else{o.updatingParticipantsQueue=[],e=(0,i.default)(r),await s.setRemoteDescription({type:\"offer\",sdp:e});try{var t=await s.createAnswer();if(await s.setLocalDescription(t),u(c),0async function(e,t){if(o){var n=t?o.screenshareConference:o.conference;const r=t?o.screenshareConnection:o.connection;if(n&&r&&n.ssrcs){var a=Date.now();e={...n,transport:e.transport,sessionId:a,audioExtensions:e.audio?.[\"rtp-hdrexts\"],audioPayloadTypes:e.audio?.[\"payload-types\"],videoExtensions:e.video?.[\"rtp-hdrexts\"],videoPayloadTypes:e.video?.[\"payload-types\"]};o={...o,...t?{screenshareConference:e}:{conference:e}};try{await r.setRemoteDescription({type:\"answer\",sdp:(0,i.default)(e,!0,t)})}catch(e){console.error(e)}}}},startSharingScreen:()=>async function(){if(o)try{const e=await l(\"presentation\");return e?(e.getTracks()[0].onended=()=>{o&&o.myId&&(o.streams?.[o.myId].presentation,u(o.myId),c())},new Promise((t=>{var{connection:n,dataChannel:t}=h([e],t,!0);o={...o,screenshareConnection:n,screenshareDataChannel:t}}))):void 0}catch(e){return}},joinGroupCall:()=>function(e,t,n,a){if(o)throw Error(\"Already in call\");f(\"connecting\");var i=new MediaStream;return n.srcObject=i,n.play().catch((e=>console.warn(e))),o={onUpdate:a,participants:[],myId:e,speaking:{},silence:(0,r.silence)(t),black:(0,r.black)({width:640,height:480}),analyserInterval:setInterval(S,1e3),audioElement:n,audioContext:t,mediaStream:i},new Promise((e=>{o={...o,...h([o.silence,o.black],e)}}))}});var a=n(\"./src/parseSdp.ts\"),i=n(\"./src/buildSdp.ts\"),r=n(\"./src/blacksilence.ts\"),s=n(\"./src/utils.ts\");let o;function c(e){o&&(o.screenshareDataChannel?.close(),o.screenshareConnection?.close(),e||o.onUpdate?.({\"@type\":\"updateGroupCallLeavePresentation\"}))}function d(e){return o?.streams?.[e]}function p(e,t){const n=(t=t||o?.myId)&&d(t)?.[e];return!!n&&n.getTracks()[0]?.enabled}function u(e){o?.onUpdate?.({\"@type\":\"updateGroupCallStreams\",userId:e,hasAudioStream:p(\"audio\",e),hasVideoStream:p(\"video\",e),hasPresentationStream:p(\"presentation\",e),amplitude:o.speaking?.[e]})}function l(e,t=\"user\"){return\"presentation\"===e?navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0}):navigator.mediaDevices.getUserMedia({audio:\"audio\"===e&&{...s.IS_ECHO_CANCELLATION_SUPPORTED&&{echoCancellation:!0},...s.IS_NOISE_SUPPRESSION_SUPPORTED&&{noiseSuppression:!0}},video:\"video\"===e&&{facingMode:t}})}async function m(e,t){if(o&&o.myId&&o.connection&&o.streams){const n=d(o.myId)?.[e];if(n){const a=n.getTracks()[0];if(a){const n=[...o.connection.getSenders(),...o.screenshareConnection?.getSenders()||[]].find((e=>a.id===e.track?.id));if(n){t=void 0===t?!a.enabled:t;try{if(t&&!a.enabled){const t=await l(e);if(await n.replaceTrack(t.getTracks()[0]),o.streams[o.myId][e]=t,\"video\"===e)o.facingMode=\"user\";else if(\"audio\"===e){const e=o.audioContext;if(!e)return;const n=e.createMediaStreamSource(t),a=e.createAnalyser();a.minDecibels=-100,a.maxDecibels=-30,a.smoothingTimeConstant=.05,a.fftSize=1024,n.connect(a),o={...o,participantFunctions:{...o.participantFunctions,[o.myId]:{...o.participantFunctions?.[o.myId],getCurrentAmplitude:()=>{var e=new Uint8Array(a.frequencyBinCount);return a.getByteFrequencyData(e),(0,s.getAmplitude)(e,1.5)}}}}}}else if(!t&&a.enabled){a.stop();const t=\"audio\"===e?o.silence:o.black;if(!t)return;await n.replaceTrack(t.getTracks()[0]),o.streams[o.myId][e]=t,\"video\"===e&&(o.facingMode=void 0)}u(o.myId),\"presentation\"!==e||t||c(!0)}catch(e){}}}}}}function f(e){o?.onUpdate?.({\"@type\":\"updateGroupCallConnectionState\",connectionState:e})}function g(){o&&(o.myId&&o.streams?.[o.myId]&&Object.values(o.streams[o.myId]||{}).forEach((e=>{e?.getTracks().forEach((e=>{e.stop()}))})),c(!0),o.dataChannel?.close(),o.connection?.close(),f(\"disconnected\"),o.analyserInterval&&clearInterval(o.analyserInterval),o=void 0)}function S(){o&&o.participantFunctions&&Object.keys(o.participantFunctions).forEach((e=>{const t=o.participantFunctions[Number(e)].getCurrentAmplitude;var n,a;t&&(n=t(),a=o.speaking[e]||0,((o.speaking[e]=n)>s.THRESHOLD&&a<=s.THRESHOLD||n<=s.THRESHOLD&&a>s.THRESHOLD)&&u(e))}))}function v(e){if(o&&o.audioElement&&o.audioContext&&o.mediaStream){var t=o.conference?.ssrcs?.find((t=>t.endpoint===e.track.id));if(t&&t.userId){const{userId:a,isPresentation:i}=t;var n=o.participants?.find((e=>e.id===a));const r=\"video\"===e.track.kind?i?\"presentation\":\"video\":\"audio\";if(e.track.onended=()=>{o?.streams?.[a][r],u(a)},t=e.streams[0],\"audio\"===e.track.kind){const e=o.mediaStream,i=new window.AudioContext,r=i.createMediaStreamSource(t),c=i.createGain();c.gain.value=(n?.volume||1e4)/1e4;const d=i.createGain();c.gain.value=1;const p=i.createAnalyser();p.minDecibels=-100,p.maxDecibels=-30,p.smoothingTimeConstant=.05,p.fftSize=1024,r.connect(p).connect(d).connect(c).connect(i.destination),e.addTrack(r.mediaStream.getAudioTracks()[0]);const u=new Audio;u.srcObject=t,u.muted=!0,u.remove(),o={...o,participantFunctions:{...o.participantFunctions,[a]:{...o.participantFunctions?.[a],setVolume:e=>{c.gain.value=1{d.gain.value=e?0:1},getCurrentAmplitude:()=>{var e=new Uint8Array(p.frequencyBinCount);return p.getByteFrequencyData(e),(0,s.getAmplitude)(e,1.5)}}}}}o={...o,streams:{...o.streams,[a]:{...o.streams?.[a],[r]:t}}},u(a)}}}function h(e,t,n=!1){const i=new RTCPeerConnection;var r=n?void 0:function(e){const t=e.createDataChannel(\"data\",{id:0});return t.onopen=()=>{},t.onmessage=e=>{JSON.parse(e.data).colibriClass},t.onerror=e=>{console.log(\"%conerror\",\"background: green; font-size: 5em\"),console.error(e)},t}(i);return e.forEach((e=>e.getTracks().forEach((t=>{i.addTrack(t,e)})))),n||(i.oniceconnectionstatechange=()=>{var e=i.iceConnectionState;\"connected\"===e||\"completed\"===e?f(\"connected\"):\"checking\"===e||\"new\"===e?f(\"connecting\"):\"disconnected\"===i.iceConnectionState&&f(\"reconnecting\")}),i.ontrack=v,i.onnegotiationneeded=async()=>{if(o){var r=o.myId;if(r){var s=await i.createOffer({offerToReceiveVideo:!0,offerToReceiveAudio:!n});if(await i.setLocalDescription(s),s.sdp){var c=(0,a.default)(s),d=n?void 0:{userId:\"\",sourceGroups:[{semantics:\"FID\",sources:[c.ssrc||0]}],isRemoved:n,isMain:!0,isVideo:!1,isPresentation:n,endpoint:n?\"1\":\"0\"},p=c[\"ssrc-groups\"]&&{isPresentation:n,userId:\"\",sourceGroups:c[\"ssrc-groups\"],isMain:!0,isVideo:!0,endpoint:n?\"0\":\"1\"};s=n?o.screenshareConference:o.conference;const i=[];n?(p&&i.push(p),d&&i.push(d)):(d&&i.push(d),p&&i.push(p)),d=e.find((e=>\"audio\"===e.getTracks()[0].kind)),p=e.find((e=>\"video\"===e.getTracks()[0].kind)),o={...o,...n?{screenshareConference:{...s,ssrcs:i}}:{conference:{...s,ssrcs:i}},streams:{...o.streams,[r]:{...o.streams?.[r],...d&&{audio:d},...!n&&p?{video:p}:{presentation:p}}}},u(r),t(c)}}}},{connection:i,dataChannel:r}}},\"./src/types.ts\":(e,t,n)=>{n.r(t)},\"./src/utils.ts\":(e,t,n)=>{function a(){var{userAgent:e,platform:t}=window.navigator;let n;return-1!==[\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"].indexOf(t)?n=\"macOS\":-1!==[\"iPhone\",\"iPad\",\"iPod\"].indexOf(t)?n=\"iOS\":-1!==[\"Win32\",\"Win64\",\"Windows\",\"WinCE\"].indexOf(t)?n=\"Windows\":/Android/.test(e)?n=\"Android\":/Linux/.test(t)&&(n=\"Linux\"),n}n.r(t),n.d(t,{toTelegramSource:()=>function(e){return e<<0},fromTelegramSource:()=>function(e){return e>>>0},getAmplitude:()=>function(e,t=3){if(!e)return 0;var n=e.length;let a=0;for(let t=0;ta,THRESHOLD:()=>i,PLATFORM_ENV:()=>r,IS_MAC_OS:()=>s,IS_IOS:()=>o,IS_SCREENSHARE_SUPPORTED:()=>c,IS_ECHO_CANCELLATION_SUPPORTED:()=>d,IS_NOISE_SUPPRESSION_SUPPORTED:()=>p});const i=.1,r=a(),s=\"macOS\"===r,o=\"iOS\"===r,c=\"getDisplayMedia\"in(navigator?.mediaDevices||{}),d=navigator?.mediaDevices?.getSupportedConstraints().echoCancellation,p=navigator?.mediaDevices?.getSupportedConstraints().noiseSuppression}},t={};function n(a){var i=t[a];return void 0!==i||(i=t[a]={exports:{}},e[a](i,i.exports,n)),i.exports}n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var a={};(()=>{n.r(a),n.d(a,{handleUpdateGroupCallConnection:()=>e.handleUpdateGroupCallConnection,startSharingScreen:()=>e.startSharingScreen,joinGroupCall:()=>e.joinGroupCall,getDevices:()=>e.getDevices,getUserStreams:()=>e.getUserStreams,setVolume:()=>e.setVolume,isStreamEnabled:()=>e.isStreamEnabled,toggleStream:()=>e.toggleStream,leaveGroupCall:()=>e.leaveGroupCall,handleUpdateGroupCallParticipants:()=>e.handleUpdateGroupCallParticipants,switchCameraInput:()=>e.switchCameraInput,toggleSpeaker:()=>e.toggleSpeaker,toggleNoiseSuppression:()=>e.toggleNoiseSuppression,IS_SCREENSHARE_SUPPORTED:()=>t.IS_SCREENSHARE_SUPPORTED,THRESHOLD:()=>t.THRESHOLD});var e=n(\"./src/secretsauce.ts\"),t=n(\"./src/utils.ts\");n(\"./src/types.ts\")})();var i,r=exports;for(i in a)r[i]=a[i];a.__esModule&&Object.defineProperty(r,\"__esModule\",{value:!0})})();"],"names":["addReducer","global","actions","update","activeGroupCallId","groupCalls","toggleGroupCallPresentation","value","userId","selectGroupCallParticipant","updateGroupCallParticipant","omit","connectionState","leaveGroupCall","isFromLibrary","updateGroupCall","isSpeakerDisabled","groupCallId","participants","handleUpdateGroupCallParticipants","data","stream","showNotification","message","handleUpdateGroupCallConnection","presentation","groupCall","selectActiveGroupCall","Object","keys","length","values","payload","shouldDiscard","shouldRemove","rejoin","setGlobal","updateActiveGroupCall","participantsCount","callApi","call","shouldResetFallbackState","getGlobal","fallbackChatId","chatId","fallbackUserIdsToRemove","forEach","deleteChatMember","removeGroupCall","id","removeGroupCallAudioElement","isGroupCallPanelHidden","undefined","joinGroupCall","user","selectUser","currentUserId","toggleStream","videoStopped","isStreamEnabled","participant","raiseHand","participantId","volume","setVolume","Math","floor","GROUP_CALL_VOLUME_MULTIPLIER","Number","muted","params","startSharingScreen","presentationPaused","audioElement","getGroupCallAudioElement","audioContext","getGroupCallAudioContext","apiUpdate","inviteHash","loadMoreGroupCallParticipants","chat","selectChat","loadFullChat","selectCurrentMessageList","fallbackChannelTitle","selectCallFallbackChannelTitle","fallbackChannel","chats","byId","find","channel","title","isCreator","isRestricted","updateChatMemberBannedRights","bannedRights","users","photo","fetchFile","callFallbackAvatarPath","accessHash","inviteLink","usageLimit","expireDate","getServerTime","serverTimeOffset","sendMessage","text","openChat","createGroupCall","closeCallFallbackConfirm","vibrateShort","navigator","vibrate","memo","size","name","playSegment","color","iconData","setIconData","useState","useEffect","getAnimationData","then","AnimatedSticker","play","noLoop","speed","animationData","withGlobal","meParticipant","raiseHandRating","hasAudioStream","canSelfUnmute","isMuted","hasRequestedToSpeak","Boolean","noAudioStream","toggleGroupCallMute","requestToSpeak","playGroupCallSound","getDispatch","lang","useLang","muteMouseDownState","useRef","isRequestingToSpeak","setIsRequestingToSpeak","isConnecting","shouldRaiseHand","prevShouldRaiseHand","usePrevious","useMemo","r","random","animatedIconName","toggleMute","buttonText","className","buildClassName","onMouseDown","setTimeout","current","onMouseUp","SPEAKER_ICON_DISABLED_SEGMENT","SPEAKER_ICON_ENABLED_SEGMENT","isAdmin","selectIsAdminInActiveGroupCall","closeDropdown","isDropdownOpen","anchor","setGroupCallParticipantVolume","toggleGroupCallPanel","isDeleteUserModalOpen","openDeleteUserModal","closeDeleteUserModal","useFlag","isMutedByMe","isSelf","isRaiseHand","localVolume","setLocalVolume","GROUP_CALL_DEFAULT_VOLUME","runThrottled","ms","noFirst","throttle","cb","useThrottle","handleRemove","useCallback","e","stopPropagation","handleCancelRequestToSpeak","handleMute","handleOpenProfile","speakerIconPlaySegment","Menu","isOpen","positionX","autoClose","style","y","onClose","type","min","max","onChange","target","MenuItem","icon","onClick","destructive","DeleteMemberModal","noColor","isSpeaking","amplitude","THRESHOLD","prevIsRaiseHand","prevIsMuted","microphoneColor","isUser","openParticipantMenu","anchorRef","aboutText","aboutColor","toString","replace","about","firstName","lastName","ref","Avatar","createGroupCallInviteLink","participantsIds","viewportIds","getMore","useInfiniteScroll","InfiniteScroll","items","onLoadMore","map","key","isActive","isFullscreen","handleClick","streams","getUserStreams","ENABLE_THUMBNAIL_VIDEO","autoPlay","playsInline","srcObject","onDoubleClick","selectedVideo","setSelectedVideo","presentationParticipants","filter","l","hasPresentationStream","videoParticipants","hasVideoStream","totalVideoCount","columnCount","shouldSpanLastVideo","handleClickVideo","CAMERA_FLIP_PLAY_SEGMENT","selectGroupCall","isSpeakerEnabled","toggleGroupCallVideo","connectToActiveGroupCall","containerRef","isLeaving","setIsLeaving","openFullscreen","closeFullscreen","isSidebarOpen","openSidebar","closeSidebar","hasVideoParticipants","some","video","isLandscape","IS_SINGLE_COLUMN_LAYOUT","participantMenu","setParticipantMenu","isParticipantMenuOpen","closeParticipantMenu","isConfirmLeaveModalOpen","openConfirmLeaveModal","closeConfirmLeaveModal","isEndGroupCallModal","setIsEndGroupCallModal","shouldEndGroupCall","setShouldEndGroupCall","hasVideo","hasPresentation","handleOpenParticipantMenu","rect","getBoundingClientRect","container","x","left","top","offsetTop","sound","handleCloseConfirmLeaveModal","MainButton","onTrigger","Button","round","ariaLabel","handleToggleFullscreen","document","exitFullscreen","requestFullscreen","handleStreamsDoubleClick","IS_REQUEST_FULLSCREEN_SUPPORTED","toggleFullscreen","addEventListener","removeEventListener","handleLeaveGroupCall","Modal","dialogRef","onCloseAnimationEnd","IS_SCREENSHARE_SUPPORTED","DropdownMenu","trigger","Loading","IS_ANDROID","IS_IOS","switchCameraInput","toggleSpeaker","Checkbox","label","checked","onCheck","isText","body","classList","toggle","userFullName","getUserFullName","channelTitle","inviteToCallFallback","setShouldRemove","renderingUserFullName","useCurrentOrPrev","ConfirmDialog","confirmHandler","t","n","d","silence","a","black","i","createOscillator","connect","createMediaStreamDestination","start","MediaStream","assign","getAudioTracks","enabled","width","height","createElement","getContext","Error","fillRect","captureStream","getVideoTracks","default","push","sessionId","s","ssrcs","o","audioExtensions","c","videoExtensions","audioPayloadTypes","p","videoPayloadTypes","u","transport","ufrag","pwd","m","fingerprints","f","candidates","g","endpoint","join","S","foundation","component","protocol","priority","ip","port","generation","v","hash","fingerprint","h","channels","clockrate","parameters","subtype","isVideo","isMain","uri","isRemoved","sourceGroups","semantics","sources","fromTelegramSource","sdp","split","reduce","match","startsWith","substr","setup","ssrc","toTelegramSource","slice","getDevices","async","mediaDevices","enumerateDevices","kind","onUpdate","participantFunctions","toggleNoiseSuppression","myId","audio","getTracks","echoCancellation","noiseSuppression","getConstraints","applyConstraints","connection","facingMode","getSenders","track","replaceTrack","conference","source","isLeft","isVideoJoined","isPresentation","updatingParticipantsQueue","setRemoteDescription","createAnswer","setLocalDescription","console","error","screenshareConference","screenshareConnection","Date","now","onended","Promise","dataChannel","screenshareDataChannel","catch","warn","speaking","analyserInterval","setInterval","mediaStream","close","getDisplayMedia","getUserMedia","IS_ECHO_CANCELLATION_SUPPORTED","IS_NOISE_SUPPRESSION_SUPPORTED","createMediaStreamSource","createAnalyser","minDecibels","maxDecibels","smoothingTimeConstant","fftSize","getCurrentAmplitude","Uint8Array","frequencyBinCount","getByteFrequencyData","getAmplitude","stop","clearInterval","window","AudioContext","createGain","gain","destination","addTrack","Audio","remove","RTCPeerConnection","createDataChannel","onopen","onmessage","JSON","parse","colibriClass","onerror","log","oniceconnectionstatechange","iceConnectionState","ontrack","onnegotiationneeded","createOffer","offerToReceiveVideo","offerToReceiveAudio","userAgent","platform","indexOf","test","sqrt","getPlatform","PLATFORM_ENV","IS_MAC_OS","getSupportedConstraints","exports","defineProperty","enumerable","get","prototype","hasOwnProperty","Symbol","toStringTag","__esModule"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"47.636da8b3a0051a88c67f.js","mappings":"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","sources":["webpack://telegram-t/./src/modules/actions/api/calls.async.ts","webpack://telegram-t/./src/util/vibrate.ts","webpack://telegram-t/./src/components/common/AnimatedIcon.tsx","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.tsx","webpack://telegram-t/./src/hooks/useThrottle.ts","webpack://telegram-t/./src/components/calls/group/OutlinedMicrophoneIcon.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantList.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantStreams.tsx","webpack://telegram-t/./src/components/calls/group/GroupCall.tsx","webpack://telegram-t/./src/components/calls/ActiveCallHeader.tsx","webpack://telegram-t/./src/components/calls/CallFallbackConfirm.tsx","webpack://telegram-t/./src/lib/secret-sauce/index.js"],"sourcesContent":["import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\nimport {\n joinGroupCall,\n startSharingScreen,\n leaveGroupCall,\n toggleStream,\n isStreamEnabled,\n setVolume,\n handleUpdateGroupCallParticipants, handleUpdateGroupCallConnection,\n} from '../../../lib/secret-sauce';\n\nimport { ApiUpdate } from '../../../api/types';\n\nimport { GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectCurrentMessageList, selectUser } from '../../selectors';\nimport {\n selectActiveGroupCall,\n selectCallFallbackChannelTitle,\n selectGroupCallParticipant,\n} from '../../selectors/calls';\nimport {\n removeGroupCall,\n updateActiveGroupCall,\n updateGroupCall,\n updateGroupCallParticipant,\n} from '../../reducers/calls';\nimport { omit } from '../../../util/iteratees';\nimport { getServerTime } from '../../../util/serverTime';\nimport { fetchFile } from '../../../util/files';\nimport { getGroupCallAudioContext, getGroupCallAudioElement, removeGroupCallAudioElement } from '../ui/calls';\nimport { loadFullChat } from './chats';\n\nimport callFallbackAvatarPath from '../../../assets/call-fallback-avatar.png';\n\nconst FALLBACK_INVITE_EXPIRE_SECONDS = 1800; // 30 min\n\naddReducer('apiUpdate', (global, actions, update: ApiUpdate) => {\n const { activeGroupCallId } = global.groupCalls;\n\n switch (update['@type']) {\n case 'updateGroupCallLeavePresentation': {\n actions.toggleGroupCallPresentation({ value: false });\n break;\n }\n case 'updateGroupCallStreams': {\n if (!update.userId || !activeGroupCallId) break;\n if (!selectGroupCallParticipant(global, activeGroupCallId, update.userId)) break;\n\n return updateGroupCallParticipant(global, activeGroupCallId, update.userId, omit(update, ['@type', 'userId']));\n }\n case 'updateGroupCallConnectionState': {\n if (!activeGroupCallId) break;\n\n if (update.connectionState === 'disconnected') {\n actions.leaveGroupCall({ isFromLibrary: true });\n break;\n }\n\n return updateGroupCall(global, activeGroupCallId, {\n connectionState: update.connectionState,\n isSpeakerDisabled: update.isSpeakerDisabled,\n });\n }\n case 'updateGroupCallParticipants': {\n const { groupCallId, participants } = update;\n if (activeGroupCallId === groupCallId) {\n void handleUpdateGroupCallParticipants(participants);\n }\n break;\n }\n case 'updateGroupCallConnection': {\n if (update.data.stream) {\n actions.showNotification({ message: 'Big live streams are not yet supported' });\n actions.leaveGroupCall();\n break;\n }\n void handleUpdateGroupCallConnection(update.data, update.presentation);\n\n const groupCall = selectActiveGroupCall(global);\n if (groupCall?.participants && Object.keys(groupCall.participants).length > 0) {\n void handleUpdateGroupCallParticipants(Object.values(groupCall.participants));\n }\n break;\n }\n }\n\n return undefined;\n});\n\naddReducer('leaveGroupCall', (global, actions, payload) => {\n const {\n isFromLibrary, shouldDiscard, shouldRemove, rejoin,\n } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) {\n return;\n }\n\n setGlobal(updateActiveGroupCall(global, { connectionState: 'disconnected' }, groupCall.participantsCount - 1));\n\n (async () => {\n await callApi('leaveGroupCall', {\n call: groupCall,\n });\n\n let shouldResetFallbackState = false;\n if (shouldDiscard) {\n global = getGlobal();\n\n if (global.groupCalls.fallbackChatId === groupCall.chatId) {\n shouldResetFallbackState = true;\n\n global.groupCalls.fallbackUserIdsToRemove?.forEach((userId) => {\n actions.deleteChatMember({ chatId: global.groupCalls.fallbackChatId, userId });\n });\n }\n\n await callApi('discardGroupCall', {\n call: groupCall,\n });\n }\n\n global = getGlobal();\n if (shouldRemove) {\n global = removeGroupCall(global, groupCall.id);\n }\n\n removeGroupCallAudioElement();\n\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isGroupCallPanelHidden: true,\n activeGroupCallId: undefined,\n ...(shouldResetFallbackState && {\n fallbackChatId: undefined,\n fallbackUserIdsToRemove: undefined,\n }),\n },\n });\n\n if (!isFromLibrary) {\n leaveGroupCall();\n }\n\n if (rejoin) {\n actions.joinGroupCall(rejoin);\n }\n })();\n});\n\naddReducer('toggleGroupCallVideo', (global) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n await toggleStream('video');\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n videoStopped: !isStreamEnabled('video'),\n participant: user,\n });\n })();\n});\n\naddReducer('requestToSpeak', (global, actions, payload) => {\n const { value } = payload || { value: true };\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n raiseHand: value,\n participant: user,\n });\n});\n\naddReducer('setGroupCallParticipantVolume', (global, actions, payload) => {\n const { participantId, volume } = payload!;\n\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId);\n if (!user || !groupCall) {\n return;\n }\n\n setVolume(participantId, Math.floor(volume / GROUP_CALL_VOLUME_MULTIPLIER) / 100);\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n volume: Number(volume),\n participant: user,\n });\n});\n\naddReducer('toggleGroupCallMute', (global, actions, payload) => {\n const { participantId, value } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId || global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n const muted = value === undefined ? isStreamEnabled('audio', user.id) : value;\n\n if (!participantId) {\n await toggleStream('audio');\n } else {\n setVolume(participantId, muted ? 0 : 1);\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n muted,\n participant: user,\n });\n })();\n});\n\naddReducer('toggleGroupCallPresentation', (global, actions, payload) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n const value = payload?.value !== undefined ? payload?.value : !isStreamEnabled('presentation');\n if (value) {\n const params = await startSharingScreen();\n if (!params) {\n return;\n }\n\n await callApi('joinGroupCallPresentation', {\n call: groupCall,\n params,\n });\n } else {\n await toggleStream('presentation', false);\n await callApi('leaveGroupCallPresentation', {\n call: groupCall,\n });\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n presentationPaused: !isStreamEnabled('presentation'),\n participant: user,\n });\n })();\n});\n\naddReducer('connectToActiveGroupCall', (global, actions) => {\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) return;\n\n if (groupCall.connectionState === 'discarded') {\n actions.showNotification({ message: 'This voice chat is not active' });\n return;\n }\n\n const audioElement = getGroupCallAudioElement();\n const audioContext = getGroupCallAudioContext();\n\n if (!audioElement || !audioContext) {\n return;\n }\n\n const {\n currentUserId,\n } = global;\n\n if (!currentUserId) return;\n\n (async () => {\n const params = await joinGroupCall(currentUserId, audioContext, audioElement, actions.apiUpdate);\n\n const result = await callApi('joinGroupCall', {\n call: groupCall,\n params,\n inviteHash: groupCall.inviteHash,\n });\n\n if (!result) return;\n\n actions.loadMoreGroupCallParticipants();\n\n if (groupCall.chatId) {\n const chat = selectChat(getGlobal(), groupCall.chatId);\n if (!chat) return;\n await loadFullChat(chat);\n }\n })();\n});\n\naddReducer('inviteToCallFallback', (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return;\n }\n\n const user = selectUser(global, chatId);\n if (!user) {\n return;\n }\n\n const { shouldRemove } = payload;\n\n (async () => {\n const fallbackChannelTitle = selectCallFallbackChannelTitle(global);\n\n let fallbackChannel = Object.values(global.chats.byId).find((channel) => {\n return (\n channel.title === fallbackChannelTitle\n && channel.isCreator\n && !channel.isRestricted\n );\n });\n if (!fallbackChannel) {\n fallbackChannel = await callApi('createChannel', {\n title: fallbackChannelTitle,\n users: [user],\n });\n\n if (!fallbackChannel) {\n return;\n }\n\n const photo = await fetchFile(callFallbackAvatarPath, 'avatar.png');\n void callApi('editChatPhoto', {\n chatId: fallbackChannel.id,\n accessHash: fallbackChannel.accessHash,\n photo,\n });\n } else {\n actions.updateChatMemberBannedRights({\n chatId: fallbackChannel.id,\n userId: chatId,\n bannedRights: {},\n });\n\n void callApi('addChatMembers', fallbackChannel, [user], true);\n }\n\n const inviteLink = await callApi('updatePrivateLink', {\n chat: fallbackChannel,\n usageLimit: 1,\n expireDate: getServerTime(global.serverTimeOffset) + FALLBACK_INVITE_EXPIRE_SECONDS,\n });\n if (!inviteLink) {\n return;\n }\n\n if (shouldRemove) {\n global = getGlobal();\n const fallbackUserIdsToRemove = global.groupCalls.fallbackUserIdsToRemove || [];\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n fallbackChatId: fallbackChannel.id,\n fallbackUserIdsToRemove: [...fallbackUserIdsToRemove, chatId],\n },\n });\n }\n\n actions.sendMessage({ text: `Join a call: ${inviteLink}` });\n actions.openChat({ id: fallbackChannel.id });\n actions.createGroupCall({ chatId: fallbackChannel.id });\n actions.closeCallFallbackConfirm();\n })();\n});\n","export const vibrateShort = () => {\n navigator.vibrate?.(50);\n};\n","import React, {\n FC, memo, useEffect, useState,\n} from '../../lib/teact/teact';\n\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\ntype OwnProps = {\n name: keyof typeof ANIMATED_STICKERS_PATHS;\n size: number;\n playSegment?: [number, number];\n color?: [number, number, number];\n};\n\nconst AnimatedIcon: FC = ({\n size,\n name,\n playSegment,\n color,\n}) => {\n const [iconData, setIconData] = useState();\n\n useEffect(() => {\n getAnimationData(name).then(setIconData);\n }, [name]);\n\n return (\n \n );\n};\n\nexport default memo(AnimatedIcon);\n","import { GroupCallConnectionState } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { vibrateShort } from '../../../util/vibrate';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../../modules/selectors/calls';\nimport useLang from '../../../hooks/useLang';\n\nimport AnimatedIcon from '../../common/AnimatedIcon';\n\nimport './MicrophoneButton.scss';\n\nconst CONNECTION_STATE_DEFAULT = 'discarded';\n\ntype StateProps = {\n connectionState?: GroupCallConnectionState;\n hasRequestedToSpeak: boolean;\n isMuted?: boolean;\n canSelfUnmute?: boolean;\n noAudioStream: boolean;\n};\n\nconst REQUEST_TO_SPEAK_THROTTLE = 3000;\nconst HOLD_TO_SPEAK_TIME = 200;\nconst ICON_SIZE = 48;\n\nconst MicrophoneButton: FC = ({\n noAudioStream,\n canSelfUnmute,\n isMuted,\n hasRequestedToSpeak,\n connectionState,\n}) => {\n const {\n toggleGroupCallMute,\n requestToSpeak,\n playGroupCallSound,\n } = getDispatch();\n\n const lang = useLang();\n const muteMouseDownState = useRef('up');\n\n const [isRequestingToSpeak, setIsRequestingToSpeak] = useState(false);\n const isConnecting = connectionState !== 'connected';\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevShouldRaiseHand = usePrevious(shouldRaiseHand);\n\n useEffect(() => {\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n playGroupCallSound('allowTalk');\n }\n }, [playGroupCallSound, prevShouldRaiseHand, shouldRaiseHand]);\n\n // Voice mini\n // unmuted -> muted [69, 99]\n // muted -> unmuted [36, 69]\n // raise -> muted [0, 36]\n // muted -> raise [99, 136]\n // unmuted -> raise [136, 172]\n // TODO should probably move to other component\n const playSegment: [number, number] = useMemo(() => {\n if (isRequestingToSpeak) {\n const r = Math.floor(Math.random() * 100);\n return (r < 32 ? [0, 120]\n : (r < 64 ? [120, 240]\n : (r < 97 ? [240, 420]\n : [420, 540]\n )\n )\n );\n }\n if (!prevShouldRaiseHand && shouldRaiseHand) {\n return noAudioStream ? [99, 135] : [136, 172];\n }\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n return [0, 36];\n }\n if (!shouldRaiseHand) {\n return noAudioStream ? [69, 99] : [36, 69];\n }\n return [0, 0];\n }, [prevShouldRaiseHand, isRequestingToSpeak, noAudioStream, shouldRaiseHand]);\n\n const animatedIconName = isRequestingToSpeak ? 'HandFilled' : 'VoiceMini';\n\n const toggleMute = () => {\n vibrateShort();\n toggleGroupCallMute();\n };\n\n const handleMouseDownMute = () => {\n if (shouldRaiseHand) {\n if (isRequestingToSpeak) return;\n vibrateShort();\n requestToSpeak();\n setIsRequestingToSpeak(true);\n setTimeout(() => {\n setIsRequestingToSpeak(false);\n }, REQUEST_TO_SPEAK_THROTTLE);\n return;\n }\n muteMouseDownState.current = 'down';\n if (noAudioStream) {\n setTimeout(() => {\n if (muteMouseDownState.current === 'down') {\n muteMouseDownState.current = 'hold';\n toggleMute();\n }\n }, HOLD_TO_SPEAK_TIME);\n }\n };\n\n const handleMouseUpMute = () => {\n if (shouldRaiseHand) {\n return;\n }\n toggleMute();\n muteMouseDownState.current = 'up';\n };\n\n const buttonText = useMemo(() => {\n return lang(\n hasRequestedToSpeak ? 'VoipMutedTapedForSpeak' : (\n shouldRaiseHand ? 'VoipMutedByAdmin' : (\n noAudioStream ? 'VoipUnmute' : 'VoipTapToMute'\n )\n ),\n );\n }, [hasRequestedToSpeak, noAudioStream, lang, shouldRaiseHand]);\n\n return (\n
\n \n \n \n
\n {buttonText}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const groupCall = selectActiveGroupCall(global);\n\n const { connectionState } = groupCall || {};\n const meParticipant = groupCall && selectGroupCallParticipant(global, groupCall.id, global.currentUserId!);\n\n const {\n raiseHandRating, hasAudioStream, canSelfUnmute, isMuted,\n } = meParticipant || {};\n\n return {\n connectionState: connectionState || CONNECTION_STATE_DEFAULT,\n hasRequestedToSpeak: Boolean(raiseHandRating),\n noAudioStream: !hasAudioStream,\n canSelfUnmute,\n isMuted,\n };\n },\n)(MicrophoneButton));\n","import { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { IAnchorPosition } from '../../../types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useThrottle from '../../../hooks/useThrottle';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport { selectIsAdminInActiveGroupCall } from '../../../modules/selectors/calls';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport DeleteMemberModal from '../../right/DeleteMemberModal';\n\nimport './GroupCallParticipantMenu.scss';\n\nconst SPEAKER_ICON_DISABLED_SEGMENT: [number, number] = [0, 17];\nconst SPEAKER_ICON_ENABLED_SEGMENT: [number, number] = [17, 34];\n\ntype OwnProps = {\n participant?: GroupCallParticipant;\n closeDropdown: VoidFunction;\n isDropdownOpen: boolean;\n anchor?: IAnchorPosition;\n};\n\ntype StateProps = {\n isAdmin: boolean;\n};\n\nconst VOLUME_ZERO = 0;\nconst VOLUME_LOW = 50;\nconst VOLUME_MEDIUM = 100;\nconst VOLUME_NORMAL = 150;\n\nconst VOLUME_CHANGE_THROTTLE = 500;\n\nconst SPEAKER_ICON_SIZE = 24;\n\nconst GroupCallParticipantMenu: FC = ({\n participant,\n closeDropdown,\n isDropdownOpen,\n anchor,\n isAdmin,\n}) => {\n const {\n toggleGroupCallMute,\n setGroupCallParticipantVolume,\n toggleGroupCallPanel,\n openChat,\n requestToSpeak,\n } = getDispatch();\n\n const lang = useLang();\n const [isDeleteUserModalOpen, openDeleteUserModal, closeDeleteUserModal] = useFlag();\n\n const id = participant?.id;\n const {\n isMutedByMe, isMuted, isSelf, canSelfUnmute,\n } = participant || {};\n const isRaiseHand = Boolean(participant?.raiseHandRating);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n\n const [localVolume, setLocalVolume] = useState(\n isMutedByMe ? VOLUME_ZERO : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER),\n );\n\n useEffect(() => {\n setLocalVolume(isMutedByMe\n ? VOLUME_ZERO\n : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER));\n // We only want to initialize local volume when switching participants and ignore following updates from server\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const runThrottled = useThrottle(VOLUME_CHANGE_THROTTLE);\n\n const handleRemove = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n openDeleteUserModal();\n closeDropdown();\n }, [openDeleteUserModal, closeDropdown]);\n\n const handleCancelRequestToSpeak = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n requestToSpeak({\n value: false,\n });\n closeDropdown();\n }, [requestToSpeak, closeDropdown]);\n\n const handleMute = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n closeDropdown();\n\n if (!isAdmin) {\n setLocalVolume(isMutedByMe ? GROUP_CALL_DEFAULT_VOLUME / GROUP_CALL_VOLUME_MULTIPLIER : VOLUME_ZERO);\n }\n\n toggleGroupCallMute({\n participantId: id,\n value: isAdmin ? !shouldRaiseHand : !isMutedByMe,\n });\n }, [closeDropdown, toggleGroupCallMute, id, isAdmin, shouldRaiseHand, isMutedByMe]);\n\n const handleOpenProfile = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n toggleGroupCallPanel();\n openChat({\n id,\n });\n closeDropdown();\n }, [toggleGroupCallPanel, closeDropdown, openChat, id]);\n\n const isLocalVolumeZero = localVolume === VOLUME_ZERO;\n const speakerIconPlaySegment = isLocalVolumeZero ? SPEAKER_ICON_DISABLED_SEGMENT : SPEAKER_ICON_ENABLED_SEGMENT;\n\n const handleChangeVolume = (e: React.ChangeEvent) => {\n const value = Number(e.target.value);\n setLocalVolume(value);\n runThrottled(() => {\n if (value === VOLUME_ZERO) {\n toggleGroupCallMute({\n participantId: id,\n value: true,\n });\n } else {\n setGroupCallParticipantVolume({\n participantId: id,\n volume: Math.floor(value * GROUP_CALL_VOLUME_MULTIPLIER),\n });\n }\n });\n };\n\n return (\n
\n \n {!isSelf && !shouldRaiseHand && (\n
\n
= VOLUME_LOW && localVolume < VOLUME_MEDIUM && 'medium',\n localVolume >= VOLUME_MEDIUM && localVolume < VOLUME_NORMAL && 'normal',\n localVolume >= VOLUME_NORMAL && 'high',\n )}\n >\n \n
\n \n {localVolume}%\n
\n
\n
\n )}\n
\n {(isRaiseHand && isSelf) && (\n \n {lang('VoipGroupCancelRaiseHand')}\n \n )}\n {!isSelf && {lang('VoipGroupOpenProfile')}}\n {!isSelf && (\n // TODO cross mic\n \n {isAdmin\n ? lang(shouldRaiseHand ? 'VoipGroupAllowToSpeak' : 'VoipMute')\n : lang(isMutedByMe ? 'VoipGroupUnmuteForMe' : 'VoipGroupMuteForMe')}\n \n )}\n {!isSelf && isAdmin && (\n // TODO replace with hand\n \n {lang('VoipGroupUserRemove')}\n \n )}\n
\n \n\n {!isSelf && isAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isAdmin: selectIsAdminInActiveGroupCall(global),\n };\n },\n)(GroupCallParticipantMenu));\n","import { useMemo } from '../lib/teact/teact';\n\nimport { throttle } from '../util/schedulers';\n\nconst useThrottle = (ms: number, noFirst = false) => {\n return useMemo(() => {\n return throttle((cb) => cb(), ms, !noFirst);\n }, [ms, noFirst]);\n};\n\nexport default useThrottle;\n","import { GroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport usePrevious from '../../../hooks/usePrevious';\n\ntype OwnProps = {\n participant: GroupCallParticipant;\n noColor?: boolean;\n};\n\nconst OutlinedMicrophoneIcon: FC = ({\n participant,\n noColor,\n}) => {\n const { isMuted, isMutedByMe } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n const prevIsRaiseHand = usePrevious(isRaiseHand);\n const canSelfUnmute = Boolean(participant?.canSelfUnmute);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevIsMuted = usePrevious(isMuted);\n\n const playSegment: [number, number] = useMemo(() => {\n if (isMuted && !prevIsMuted) {\n return [43, 64];\n }\n\n if (!isMuted && prevIsMuted) {\n return [22, 42];\n }\n\n if (isRaiseHand && !prevIsRaiseHand) {\n return [65, 84];\n }\n\n if (!shouldRaiseHand && prevIsRaiseHand) {\n return [0, 21];\n }\n\n // TODO cancel request to speak should play in reverse\n // if (!isRaiseHand && prevIsRaiseHand) {\n // return [84, 65];\n // }\n\n return isMuted ? [22, 23] : [43, 44];\n // eslint-disable-next-line\n }, [isMuted, shouldRaiseHand, isRaiseHand]);\n\n const microphoneColor: [number, number, number] | undefined = useMemo(() => {\n return noColor ? [0xff, 0xff, 0xff] : (\n isRaiseHand ? [0x4d, 0xa6, 0xe0]\n : (shouldRaiseHand || isMutedByMe ? [0xFF, 0x70, 0x6F] : (\n isSpeaking ? [0x57, 0xBC, 0x6C] : [0x84, 0x8D, 0x94]\n ))\n );\n }, [noColor, isRaiseHand, shouldRaiseHand, isMutedByMe, isSpeaking]);\n\n return (\n \n );\n};\n\nexport default memo(OutlinedMicrophoneIcon);\n","import { GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\nimport OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';\n\nimport './GroupCallParticipant.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n};\n\nconst GroupCallParticipant: FC = ({\n openParticipantMenu,\n participant,\n user,\n chat,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const anchorRef = useRef(null);\n const lang = useLang();\n\n const { isSelf, isMutedByMe, isMuted } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n\n const handleOnClick = () => {\n if (isSelf) return;\n openParticipantMenu(anchorRef.current!, participant);\n };\n\n const [aboutText, aboutColor] = useMemo(() => {\n if (isSelf) {\n return [lang('ThisIsYou'), 'blue'];\n }\n if (isMutedByMe) {\n return [lang('VoipGroupMutedForMe'), 'red'];\n }\n return isRaiseHand\n ? [lang('WantsToSpeak'), 'blue']\n : (!isMuted && isSpeaking ? [\n participant.volume && participant.volume !== GROUP_CALL_DEFAULT_VOLUME\n ? lang('SpeakingWithVolume',\n (participant.volume / GROUP_CALL_VOLUME_MULTIPLIER).toString())\n .replace('%%', '%') : lang('Speaking'),\n 'green',\n ]\n : (participant.about ? [participant.about, ''] : [lang('Listening'), 'blue']));\n }, [isSpeaking, participant.volume, lang, isSelf, isMutedByMe, isRaiseHand, isMuted, participant.about]);\n\n if (!user && !chat) {\n return undefined;\n }\n\n const name = user ? `${user.firstName || ''} ${user.lastName || ''}` : chat?.title;\n\n return (\n \n \n
\n {name}\n {aboutText}\n
\n
\n \n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { participant }): StateProps => {\n return {\n user: participant.isUser ? selectUser(global, participant.id) : undefined,\n chat: !participant.isUser ? selectChat(global, participant.id) : undefined,\n };\n },\n)(GroupCallParticipant));\n","import { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectActiveGroupCall } from '../../../modules/selectors/calls';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\n\nimport GroupCallParticipant from './GroupCallParticipant';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\ntype OwnProps = {\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n participantsCount: number;\n participants?: Record;\n canInvite?: boolean;\n};\n\nconst GroupCallParticipantList: FC = ({\n participants,\n participantsCount,\n openParticipantMenu,\n}) => {\n const {\n createGroupCallInviteLink,\n loadMoreGroupCallParticipants,\n } = getDispatch();\n\n const lang = useLang();\n\n const participantsIds = useMemo(() => {\n return Object.keys(participants || {});\n }, [participants]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n loadMoreGroupCallParticipants,\n participantsIds,\n participantsIds.length >= participantsCount,\n );\n\n return (\n
\n
\n
\n \n
\n
{lang('VoipGroupInviteMember')}
\n
\n\n \n {viewportIds?.map(\n (participantId) => (\n participants![participantId] && (\n \n )\n ),\n )}\n \n\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { participantsCount, participants } = selectActiveGroupCall(global) || {};\n\n return {\n participants,\n participantsCount: participantsCount || 0,\n };\n },\n)(GroupCallParticipantList));\n","import { getUserStreams, GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../modules/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { ENABLE_THUMBNAIL_VIDEO } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\n\nimport './GroupCallParticipantVideo.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n type: 'video' | 'presentation';\n onClick?: (id: string, type: 'video' | 'presentation') => void;\n isFullscreen?: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n currentUserId?: string;\n isActive?: boolean;\n};\n\nconst GroupCallParticipantVideo: FC = ({\n type,\n onClick,\n user,\n chat,\n isActive,\n isFullscreen,\n}) => {\n const lang = useLang();\n\n const handleClick = useCallback(() => {\n if (onClick) {\n onClick(user?.id || chat!.id, type);\n }\n }, [chat, onClick, type, user?.id]);\n\n if (!user && !chat) return undefined;\n\n const streams = getUserStreams(user?.id || chat!.id);\n\n return (\n \n {isFullscreen && (\n \n )}\n \n {ENABLE_THUMBNAIL_VIDEO && (\n
\n
\n )}\n \n )}\n {isProtected && }\n {shouldRenderPlayButton && }\n {shouldRenderSpinner && (\n
\n \n
\n )}\n {!isLoadAllowed && (\n \n )}\n {isTransferring ? (\n \n {(isUploading || isDownloading) ? `${Math.round(transferProgress * 100)}%` : '...'}\n \n ) : (\n
\n {video.isGif ? 'GIF' : formatMediaDuration(Math.max(duration - playProgress, 0))}\n
\n )}\n \n );\n};\n\nexport default Video;\n","import React, { FC, useCallback } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiUser, ApiContact, ApiCountryCode } from '../../../api/types';\n\nimport { selectUser } from '../../../modules/selectors';\nimport { formatPhoneNumberWithCode } from '../../../util/phoneNumber';\nimport buildClassName from '../../../util/buildClassName';\n\nimport Avatar from '../../common/Avatar';\n\nimport './Contact.scss';\n\ntype OwnProps = {\n contact: ApiContact;\n};\n\ntype StateProps = {\n user?: ApiUser;\n phoneCodeList: ApiCountryCode[];\n};\n\nconst Contact: FC = ({\n contact, user, phoneCodeList,\n}) => {\n const { openChat } = getDispatch();\n\n const {\n firstName,\n lastName,\n phoneNumber,\n userId,\n } = contact;\n\n const handleClick = useCallback(() => {\n openChat({ id: userId });\n }, [openChat, userId]);\n\n return (\n \n \n
\n
{firstName} {lastName}
\n
{formatPhoneNumberWithCode(phoneCodeList, phoneNumber)}
\n
\n \n );\n};\n\nexport default withGlobal(\n (global, { contact }): StateProps => {\n const { countryList: { phoneCodes: phoneCodeList } } = global;\n return {\n user: selectUser(global, contact.userId),\n phoneCodeList,\n };\n },\n)(Contact);\n","import React, {\n FC, useState, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiPollAnswer, ApiPollResult } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport renderText from '../../common/helpers/renderText';\n\nimport './PollOption.scss';\n\ntype OwnProps = {\n answer: ApiPollAnswer;\n voteResults?: ApiPollResult[];\n totalVoters?: number;\n maxVotersCount?: number;\n correctResults: string[];\n shouldAnimate: boolean;\n};\n\nconst PollOption: FC = ({\n answer,\n voteResults,\n totalVoters,\n maxVotersCount,\n correctResults,\n shouldAnimate,\n}) => {\n const result = voteResults && voteResults.find((r) => r.option === answer.option);\n const correctAnswer = correctResults.length === 0 || correctResults.indexOf(answer.option) !== -1;\n const showIcon = (correctResults.length > 0 && correctAnswer) || (result?.isChosen);\n const answerPercent = result ? getPercentage(result.votersCount, totalVoters || 0) : 0;\n const [finalPercent, setFinalPercent] = useState(shouldAnimate ? 0 : answerPercent);\n // eslint-disable-next-line no-null/no-null\n const lineRef = useRef(null);\n const lineWidth = result ? getPercentage(result.votersCount, maxVotersCount || 0) : 0;\n const isAnimationDoesNotStart = finalPercent < answerPercent;\n\n useEffect(() => {\n if (shouldAnimate) {\n setFinalPercent(answerPercent);\n }\n }, [shouldAnimate, answerPercent]);\n\n useEffect(() => {\n const lineEl = lineRef.current;\n\n if (lineEl && shouldAnimate) {\n const svgEl = lineEl.firstElementChild;\n\n const style = isAnimationDoesNotStart ? '' : 'stroke-dasharray: 100% 200%; stroke-dashoffset: -44';\n if (!svgEl) {\n lineEl.innerHTML = `\n \n \n `;\n } else {\n svgEl.setAttribute('style', style);\n }\n }\n }, [isAnimationDoesNotStart, shouldAnimate]);\n\n if (!voteResults || !result) {\n return undefined;\n }\n\n const lineStyle = `width: ${lineWidth}%; transform:scaleX(${isAnimationDoesNotStart ? 0 : 1})`;\n\n return (\n
\n
\n {answerPercent}%\n {showIcon && (\n \n \n \n )}\n
\n
\n
\n {renderText(answer.text)}\n
\n
\n
\n \n
\n
\n
\n );\n};\n\nfunction getPercentage(value: number, total: number) {\n return total > 0 ? ((value / total) * 100).toFixed() : 0;\n}\n\nexport default PollOption;\n","import React, {\n FC,\n useCallback,\n useEffect,\n useState,\n memo,\n useMemo,\n useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport {\n ApiMessage, ApiPoll, ApiUser, ApiPollAnswer,\n} from '../../../api/types';\n\nimport renderText from '../../common/helpers/renderText';\nimport { renderTextWithEntities } from '../../common/helpers/renderTextWithEntities';\nimport { formatMediaDuration } from '../../../util/dateFormat';\nimport useLang, { LangFn } from '../../../hooks/useLang';\n\nimport CheckboxGroup from '../../ui/CheckboxGroup';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport Notification from '../../ui/Notification';\nimport PollOption from './PollOption';\n\nimport './Poll.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n poll: ApiPoll;\n onSendVote: (options: string[]) => void;\n};\n\ntype StateProps = {\n recentVoterIds?: number[];\n usersById: Record;\n serverTimeOffset: number;\n};\n\nconst SOLUTION_CONTAINER_ID = '#middle-column-portals';\nconst SOLUTION_DURATION = 5000;\nconst NBSP = '\\u00A0';\n\nconst Poll: FC = ({\n message,\n poll,\n recentVoterIds,\n usersById,\n onSendVote,\n serverTimeOffset,\n}) => {\n const { loadMessage, openPollResults } = getDispatch();\n\n const { id: messageId, chatId } = message;\n const { summary, results } = poll;\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [chosenOptions, setChosenOptions] = useState([]);\n const [isSolutionShown, setIsSolutionShown] = useState(false);\n const [wasSubmitted, setWasSubmitted] = useState(false);\n const [closePeriod, setClosePeriod] = useState(\n !summary.closed && summary.closeDate && summary.closeDate > 0\n ? Math.min(summary.closeDate - Math.floor(Date.now() / 1000) + serverTimeOffset, summary.closePeriod!)\n : 0,\n );\n // eslint-disable-next-line no-null/no-null\n const countdownRef = useRef(null);\n const { results: voteResults, totalVoters } = results;\n const hasVoted = voteResults && voteResults.some((r) => r.isChosen);\n const canVote = !summary.closed && !hasVoted;\n const canViewResult = !canVote && summary.isPublic && Number(results.totalVoters) > 0;\n const isMultiple = canVote && summary.multipleChoice;\n const maxVotersCount = voteResults ? Math.max(...voteResults.map((r) => r.votersCount)) : totalVoters;\n const correctResults = voteResults ? voteResults.reduce((answers: string[], r) => {\n if (r.isCorrect) {\n answers.push(r.option);\n }\n\n return answers;\n }, []) : [];\n const answers = summary.answers.map((a) => ({\n label: a.text,\n value: a.option,\n hidden: Boolean(summary.quiz && summary.closePeriod && closePeriod <= 0),\n }));\n\n useEffect(() => {\n if (\n isSubmitting\n && poll.results.results\n && poll.results.results.some((result) => result.isChosen)\n ) {\n setIsSubmitting(false);\n }\n }, [isSubmitting, poll.results.results]);\n\n useEffect(() => {\n if (closePeriod > 0) {\n setTimeout(() => setClosePeriod(closePeriod - 1), 1000);\n }\n\n const countdownEl = countdownRef.current;\n\n if (countdownEl) {\n const circumference = 6 * 2 * Math.PI;\n const svgEl = countdownEl.lastElementChild;\n const timerEl = countdownEl.firstElementChild;\n if (closePeriod <= 5) {\n countdownEl.classList.add('hurry-up');\n }\n\n if (!svgEl || !timerEl) {\n countdownEl.innerHTML = `\n ${formatMediaDuration(closePeriod)}\n \n \n `;\n } else {\n const strokeDashOffset = ((summary.closePeriod! - closePeriod) / summary.closePeriod!) * circumference;\n timerEl.textContent = formatMediaDuration(closePeriod);\n (svgEl.firstElementChild as SVGElement).setAttribute('stroke-dashoffset', `-${strokeDashOffset}`);\n }\n }\n }, [closePeriod, summary.closePeriod]);\n\n useEffect(() => {\n if (summary.quiz && (closePeriod <= 0 || (hasVoted && !summary.closed))) {\n loadMessage({ chatId, messageId });\n }\n }, [chatId, closePeriod, hasVoted, loadMessage, messageId, summary.closed, summary.quiz]);\n\n // If the client time is not synchronized, the poll must be updated after the closePeriod time has expired.\n useEffect(() => {\n let timer: number | undefined;\n\n if (summary.quiz && !summary.closed && summary.closePeriod && summary.closePeriod > 0) {\n timer = window.setTimeout(() => {\n loadMessage({ chatId, messageId });\n }, summary.closePeriod * 1000);\n }\n\n return () => {\n if (timer) {\n window.clearTimeout(timer);\n }\n };\n }, [canVote, chatId, loadMessage, messageId, summary.closePeriod, summary.closed, summary.quiz]);\n\n const recentVoters = useMemo(() => {\n return recentVoterIds ? recentVoterIds.reduce((result: ApiUser[], id) => {\n const user = usersById[id];\n if (user) {\n result.push(user);\n }\n\n return result;\n }, []) : [];\n }, [usersById, recentVoterIds]);\n\n const handleRadioChange = useCallback(\n (option: string) => {\n setChosenOptions([option]);\n setIsSubmitting(true);\n setWasSubmitted(true);\n onSendVote([option]);\n }, [onSendVote],\n );\n\n const handleCheckboxChange = useCallback(\n (options: string[]) => {\n setChosenOptions(options);\n }, [],\n );\n\n const handleVoteClick = useCallback(\n () => {\n setIsSubmitting(true);\n setWasSubmitted(true);\n onSendVote(chosenOptions);\n }, [onSendVote, chosenOptions],\n );\n\n const handleViewResultsClick = useCallback(\n () => {\n openPollResults({ chatId, messageId });\n }, [chatId, messageId, openPollResults],\n );\n\n const handleSolutionShow = useCallback(() => {\n setIsSolutionShown(true);\n }, []);\n\n const handleSolutionHide = useCallback(() => {\n setIsSolutionShown(false);\n setWasSubmitted(false);\n }, []);\n\n // Show the solution to quiz if the answer was incorrect\n useEffect(() => {\n if (wasSubmitted && hasVoted && summary.quiz && results.results && poll.results.solution) {\n const correctResult = results.results.find((r) => r.isChosen && r.isCorrect);\n if (!correctResult) {\n setIsSolutionShown(true);\n }\n }\n }, [hasVoted, wasSubmitted, results.results, summary.quiz, poll.results.solution]);\n\n const lang = useLang();\n\n function renderResultOption(answer: ApiPollAnswer) {\n return (\n \n );\n }\n\n function renderRecentVoters() {\n return (\n recentVoters.length > 0 && (\n
\n {recentVoters.map((user) => (\n \n ))}\n
\n )\n );\n }\n\n function renderSolution() {\n return (\n isSolutionShown && poll.results.solution && (\n \n )\n );\n }\n\n return (\n
\n {renderSolution()}\n
{renderText(summary.question, ['emoji', 'br'])}
\n
\n {lang(getPollTypeString(summary))}\n {renderRecentVoters()}\n {closePeriod > 0 && canVote &&
}\n {summary.quiz && poll.results.solution && !canVote && (\n \n \n \n )}\n
\n {canVote && (\n
\n {isMultiple\n ? (\n \n )\n : (\n \n )}\n
\n )}\n {!canVote && (\n
\n {summary.answers.map(renderResultOption)}\n
\n )}\n {!canViewResult && !isMultiple && (\n
{getReadableVotersCount(lang, summary.quiz, results.totalVoters)}
\n )}\n {isMultiple && (\n \n {lang('PollSubmitVotes')}\n \n )}\n {canViewResult && (\n \n {lang('PollViewResults')}\n \n )}\n
\n );\n};\n\nfunction getPollTypeString(summary: ApiPoll['summary']) {\n // When we just created the poll, some properties don't exist.\n if (typeof summary.isPublic === 'undefined') {\n return NBSP;\n }\n\n if (summary.quiz) {\n return summary.isPublic ? 'QuizPoll' : 'AnonymousQuizPoll';\n }\n\n if (summary.closed) {\n return 'FinalResults';\n }\n\n return summary.isPublic ? 'PublicPoll' : 'AnonymousPoll';\n}\n\nfunction getReadableVotersCount(lang: LangFn, isQuiz: true | undefined, count?: number) {\n if (!count) {\n return lang(isQuiz ? 'Chat.Quiz.TotalVotesEmpty' : 'Chat.Poll.TotalVotesResultEmpty');\n }\n\n return lang(isQuiz ? 'Answer' : 'Vote', count, 'i');\n}\n\nexport default memo(withGlobal(\n (global, { poll }) => {\n const { recentVoterIds } = poll.results;\n const { serverTimeOffset, users: { byId: usersById } } = global;\n if (!recentVoterIds || recentVoterIds.length === 0) {\n return {};\n }\n\n return {\n recentVoterIds,\n usersById,\n serverTimeOffset,\n };\n },\n)(Poll));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { ApiMessage } from '../../../api/types';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport { ISettings } from '../../../types';\n\nimport { getMessageWebPage } from '../../../modules/helpers';\nimport { calculateMediaDimensions } from './helpers/mediaDimensions';\nimport renderText from '../../common/helpers/renderText';\nimport trimText from '../../../util/trimText';\nimport buildClassName from '../../../util/buildClassName';\n\nimport SafeLink from '../../common/SafeLink';\nimport Photo from './Photo';\nimport Video from './Video';\n\nimport './WebPage.scss';\n\nconst MAX_TEXT_LENGTH = 170; // symbols\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection?: ObserveFn;\n noAvatars?: boolean;\n canAutoLoad?: boolean;\n canAutoPlay?: boolean;\n inPreview?: boolean;\n lastSyncTime?: number;\n isDownloading?: boolean;\n isProtected?: boolean;\n theme: ISettings['theme'];\n onMediaClick?: () => void;\n onCancelMediaTransfer?: () => void;\n};\n\nconst WebPage: FC = ({\n message,\n observeIntersection,\n noAvatars,\n canAutoLoad,\n canAutoPlay,\n inPreview,\n lastSyncTime,\n isDownloading = false,\n isProtected,\n theme,\n onMediaClick,\n onCancelMediaTransfer,\n}) => {\n const webPage = getMessageWebPage(message);\n\n let isSquarePhoto = false;\n if (webPage?.photo && !webPage.video) {\n const { width, height } = calculateMediaDimensions(message);\n isSquarePhoto = width === height;\n }\n\n const handleMediaClick = useCallback(() => {\n onMediaClick!();\n }, [onMediaClick]);\n\n if (!webPage) {\n return undefined;\n }\n\n const {\n siteName,\n url,\n displayUrl,\n title,\n description,\n photo,\n video,\n } = webPage;\n const isMediaInteractive = (photo || video) && onMediaClick && !isSquarePhoto;\n const truncatedDescription = trimText(description, MAX_TEXT_LENGTH);\n\n const className = buildClassName(\n 'WebPage',\n isSquarePhoto && 'with-square-photo',\n !photo && !video && !inPreview && 'without-media',\n video && 'with-video',\n );\n\n return (\n \n {photo && !video && (\n \n )}\n
\n \n {!inPreview && title && (\n

{renderText(title)}

\n )}\n {truncatedDescription && (\n

{renderText(truncatedDescription, ['emoji', 'br'])}

\n )}\n
\n {!inPreview && video && (\n \n )}\n
\n );\n};\n\nexport default memo(WebPage);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiMessage } from '../../../api/types';\n\nimport { getMessageInvoice } from '../../../modules/helpers';\nimport { formatCurrency } from '../../../util/formatCurrency';\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\n\nimport './Invoice.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n};\n\nconst Invoice: FC = ({\n message,\n}) => {\n const lang = useLang();\n const invoice = getMessageInvoice(message);\n\n const {\n title,\n text,\n amount,\n currency,\n isTest,\n photoUrl,\n } = invoice!;\n\n return (\n \n {title && (\n

{renderText(title)}

\n )}\n {text && (\n

{renderText(text, ['emoji', 'br'])}

\n )}\n
\n {photoUrl && (\n \n )}\n

\n {formatCurrency(amount, currency, lang.code)}\n {isTest && {lang('PaymentTestInvoice')}}\n

\n
\n
\n );\n};\n\nexport default memo(Invoice);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC,\n useCallback,\n useMemo,\n memo,\n} from '../../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../../lib/teact/teactn';\n\nimport { OwnProps as PhotoProps } from '../Photo';\nimport { OwnProps as VideoProps } from '../Video';\n\nimport buildClassName from '../../../../util/buildClassName';\nimport {\n selectIsInSelectMode,\n selectIsMessageSelected,\n} from '../../../../modules/selectors';\n\ntype OwnProps =\n PhotoProps\n & VideoProps;\n\ntype StateProps = {\n isInSelectMode?: boolean;\n isSelected?: boolean;\n};\n\nexport default function withSelectControl(WrappedComponent: FC) {\n const ComponentWithSelectControl: FC = (props) => {\n const {\n isInSelectMode,\n isSelected,\n message,\n dimensions,\n } = props;\n const { toggleMessageSelection } = getDispatch();\n\n const handleMessageSelect = useCallback((e: ReactMouseEvent) => {\n e.stopPropagation();\n toggleMessageSelection({ messageId: message.id, withShift: e?.shiftKey });\n }, [toggleMessageSelection, message]);\n\n const newProps = useMemo(() => {\n return {\n ...props,\n isInSelectMode,\n isSelected,\n dimensions: {\n ...props.dimensions,\n x: 0,\n y: 0,\n },\n onClick: isInSelectMode ? undefined : props.onClick,\n };\n }, [props, isInSelectMode, isSelected]);\n\n return (\n \n {isInSelectMode && (\n
\n {isSelected && (\n \n )}\n
\n )}\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n );\n };\n\n return memo(withGlobal(\n (global, ownProps) => {\n const { message } = ownProps;\n return {\n isInSelectMode: selectIsInSelectMode(global),\n isSelected: selectIsMessageSelected(global, message.id),\n };\n },\n )(ComponentWithSelectControl));\n}\n","import React, { FC, useCallback } from '../../../lib/teact/teact';\n\nimport { GlobalState } from '../../../global/types';\nimport { ApiMessage } from '../../../api/types';\nimport { IAlbum, ISettings } from '../../../types';\nimport { AlbumRectPart, IAlbumLayout } from './helpers/calculateAlbumLayout';\n\nimport { getMessageContent } from '../../../modules/helpers';\nimport { getDispatch, getGlobal, withGlobal } from '../../../lib/teact/teactn';\nimport withSelectControl from './hocs/withSelectControl';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport {\n selectActiveDownloadIds,\n selectCanAutoLoadMedia,\n selectCanAutoPlayMedia,\n selectTheme,\n} from '../../../modules/selectors';\n\nimport Photo from './Photo';\nimport Video from './Video';\n\nimport './Album.scss';\n\nconst PhotoWithSelect = withSelectControl(Photo);\nconst VideoWithSelect = withSelectControl(Video);\n\ntype OwnProps = {\n album: IAlbum;\n observeIntersection: ObserveFn;\n hasCustomAppendix?: boolean;\n lastSyncTime?: number;\n isOwn: boolean;\n isProtected?: boolean;\n albumLayout: IAlbumLayout;\n onMediaClick: (messageId: number) => void;\n};\n\ntype StateProps = {\n theme: ISettings['theme'];\n uploadsById: GlobalState['fileUploads']['byMessageLocalId'];\n activeDownloadIds: number[];\n};\n\nconst Album: FC = ({\n album,\n observeIntersection,\n hasCustomAppendix,\n lastSyncTime,\n isOwn,\n isProtected,\n albumLayout,\n onMediaClick,\n uploadsById,\n activeDownloadIds,\n theme,\n}) => {\n const { cancelSendingMessage } = getDispatch();\n\n const mediaCount = album.messages.length;\n\n const handleCancelUpload = useCallback((message: ApiMessage) => {\n cancelSendingMessage({ chatId: message.chatId, messageId: message.id });\n }, [cancelSendingMessage]);\n\n function renderAlbumMessage(message: ApiMessage, index: number) {\n const { photo, video } = getMessageContent(message);\n const fileUpload = uploadsById[message.previousLocalId || message.id];\n const uploadProgress = fileUpload?.progress;\n const { dimensions, sides } = albumLayout.layout[index];\n\n // Ignoring global updates is a known drawback here\n const canAutoLoad = selectCanAutoLoadMedia(getGlobal(), message);\n const canAutoPlay = selectCanAutoPlayMedia(getGlobal(), message);\n\n if (photo) {\n const shouldAffectAppendix = hasCustomAppendix && (\n // eslint-disable-next-line no-bitwise\n (isOwn ? index === mediaCount - 1 : Boolean(sides & AlbumRectPart.Left && sides & AlbumRectPart.Bottom))\n );\n\n return (\n \n );\n } else if (video) {\n return (\n \n );\n }\n\n return undefined;\n }\n\n const { width: containerWidth, height: containerHeight } = albumLayout.containerStyle;\n\n return (\n \n {album.messages.map(renderAlbumMessage)}\n \n );\n};\n\nexport default withGlobal(\n (global, { album }): StateProps => {\n const { chatId } = album.mainMessage;\n const theme = selectTheme(global);\n const activeDownloadIds = selectActiveDownloadIds(global, chatId);\n return {\n theme,\n uploadsById: global.fileUploads.byMessageLocalId,\n activeDownloadIds,\n };\n },\n)(Album);\n","import React, {\n FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nimport { ApiMediaFormat, ApiMessage } from '../../../api/types';\n\nimport { ROUND_VIDEO_DIMENSIONS_PX } from '../../common/helpers/mediaDimensions';\nimport { getMessageMediaFormat, getMessageMediaHash } from '../../../modules/helpers';\nimport { formatMediaDuration } from '../../../util/dateFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport { stopCurrentAudio } from '../../../util/audioPlayer';\nimport safePlay from '../../../util/safePlay';\nimport { fastRaf } from '../../../util/schedulers';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useBuffering from '../../../hooks/useBuffering';\nimport useVideoCleanup from '../../../hooks/useVideoCleanup';\nimport useVideoAutoPause from './hooks/useVideoAutoPause';\nimport useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nimport './RoundVideo.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection: ObserveFn;\n canAutoLoad?: boolean;\n lastSyncTime?: number;\n isDownloading?: boolean;\n};\n\nlet stopPrevious: NoneToVoidFunction;\n\nconst RoundVideo: FC = ({\n message,\n observeIntersection,\n canAutoLoad,\n lastSyncTime,\n isDownloading,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const playingProgressRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const playerRef = useRef(null);\n\n const video = message.content.video!;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const [isLoadAllowed, setIsLoadAllowed] = useState(canAutoLoad);\n const shouldLoad = Boolean(isLoadAllowed && isIntersecting && lastSyncTime);\n const { mediaData, loadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'inline'),\n !shouldLoad,\n getMessageMediaFormat(message, 'inline'),\n lastSyncTime,\n );\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'download'),\n !isDownloading,\n ApiMediaFormat.BlobUrl,\n lastSyncTime,\n );\n const thumbRef = useBlurredMediaThumbRef(message, mediaData);\n\n const { isBuffered, bufferingHandlers } = useBuffering();\n const isTransferring = (isLoadAllowed && !isBuffered) || isDownloading;\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n\n const transitionClassNames = useMediaTransition(mediaData);\n const {\n shouldRender: shouldSpinnerRender,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring || !isBuffered, undefined, wasLoadDisabled);\n\n const [isActivated, setIsActivated] = useState(false);\n const [progress, setProgress] = useState(0);\n\n useEffect(() => {\n if (!isActivated) {\n return;\n }\n\n const svgCenter = ROUND_VIDEO_DIMENSIONS_PX / 2;\n const svgMargin = 6;\n const circumference = (svgCenter - svgMargin) * 2 * Math.PI;\n const strokeDashOffset = circumference - progress * circumference;\n\n const playerEl = playerRef.current!;\n const playingProgressEl = playingProgressRef.current!;\n const svgEl = playingProgressEl.firstElementChild;\n\n if (!svgEl) {\n playingProgressEl.innerHTML = `\n \n \n `;\n } else {\n (svgEl.firstElementChild as SVGElement).setAttribute('stroke-dashoffset', strokeDashOffset.toString());\n }\n\n setProgress(playerEl.currentTime / playerEl.duration);\n }, [isActivated, progress]);\n\n const shouldPlay = Boolean(mediaData && isIntersecting);\n\n const stopPlaying = useCallback(() => {\n if (!playerRef.current) {\n return;\n }\n\n setIsActivated(false);\n setProgress(0);\n safePlay(playerRef.current);\n\n fastRaf(() => {\n playingProgressRef.current!.innerHTML = '';\n });\n }, []);\n\n const capturePlaying = useCallback(() => {\n stopPrevious?.();\n stopPrevious = stopPlaying;\n }, [stopPlaying]);\n\n useEffect(() => {\n if (!playerRef.current) {\n return;\n }\n\n if (shouldPlay) {\n safePlay(playerRef.current);\n } else {\n playerRef.current.pause();\n }\n }, [shouldPlay]);\n\n useVideoAutoPause(playerRef, shouldPlay);\n useVideoCleanup(playerRef, [mediaData]);\n\n const handleClick = useCallback(() => {\n if (!mediaData) {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n\n return;\n }\n\n if (isDownloading) {\n getDispatch().cancelMessageMediaDownload({ message });\n return;\n }\n\n const playerEl = playerRef.current!;\n if (isActivated) {\n if (playerEl.paused) {\n safePlay(playerEl);\n stopCurrentAudio();\n } else {\n playerEl.pause();\n }\n } else {\n capturePlaying();\n // Pause is a workaround for iOS Safari – otherwise it stops video after several frames\n playerEl.pause();\n playerEl.currentTime = 0;\n safePlay(playerEl);\n stopCurrentAudio();\n\n setIsActivated(true);\n }\n }, [capturePlaying, isActivated, isDownloading, mediaData, message]);\n\n const handleTimeUpdate = useCallback((e: React.UIEvent) => {\n const playerEl = e.currentTarget;\n\n setProgress(playerEl.currentTime / playerEl.duration);\n }, []);\n\n const videoClassName = buildClassName('full-media', transitionClassNames);\n\n return (\n \n
\n \n
\n {mediaData && (\n
\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n
\n )}\n
\n {shouldSpinnerRender && (\n
\n \n
\n )}\n {!mediaData && !isLoadAllowed && (\n \n )}\n
\n {isActivated ? formatMediaDuration(playerRef.current!.currentTime) : formatMediaDuration(video.duration)}\n {(!isActivated || playerRef.current!.paused) && }\n
\n
\n );\n};\n\nexport default RoundVideo;\n","import React, { FC } from '../../../lib/teact/teact';\n\nimport { ApiKeyboardButton, ApiMessage } from '../../../api/types';\n\nimport { RE_TME_LINK } from '../../../config';\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\nimport './InlineButtons.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n onClick: ({ button }: { button: ApiKeyboardButton }) => void;\n};\n\nconst InlineButtons: FC = ({ message, onClick }) => {\n const lang = useLang();\n\n return (\n
\n {message.inlineButtons!.map((row) => (\n
\n {row.map((button) => (\n onClick({ button })}\n >\n {renderText(lang(button.text))}\n {button.type === 'buy' && }\n {button.type === 'url' && !button.value!.match(RE_TME_LINK) && }\n \n ))}\n
\n ))}\n
\n );\n};\n\nexport default InlineButtons;\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal } from '../../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiThreadInfo, ApiUser,\n} from '../../../api/types';\n\nimport { isUserId } from '../../../modules/helpers';\nimport { formatIntegerCompact } from '../../../util/textFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\n\nimport Avatar from '../../common/Avatar';\n\nimport './CommentButton.scss';\n\ntype OwnProps = {\n threadInfo: ApiThreadInfo;\n disabled?: boolean;\n};\n\nconst CommentButton: FC = ({\n threadInfo,\n disabled,\n}) => {\n const { openChat } = getDispatch();\n\n const lang = useLang();\n const {\n threadId, chatId, messagesCount, lastMessageId, lastReadInboxMessageId, recentReplierIds,\n } = threadInfo;\n\n const handleClick = useCallback(() => {\n openChat({ id: chatId, threadId });\n }, [openChat, chatId, threadId]);\n\n const recentRepliers = useMemo(() => {\n if (!recentReplierIds?.length) {\n return undefined;\n }\n\n // No need for expensive global updates on chats and users, so we avoid them\n const { users: { byId: usersById }, chats: { byId: chatsById } } = getGlobal();\n\n return recentReplierIds.map((peerId) => {\n return isUserId(peerId) ? usersById[peerId] : chatsById[peerId];\n }).filter(Boolean);\n }, [recentReplierIds]);\n\n if (messagesCount === undefined) {\n return undefined;\n }\n\n function renderRecentRepliers() {\n return (\n recentRepliers && recentRepliers.length > 0 && (\n
\n {recentRepliers.map((user) => (\n \n ))}\n
\n )\n );\n }\n\n const hasUnread = Boolean(lastReadInboxMessageId && lastMessageId && lastReadInboxMessageId < lastMessageId);\n\n return (\n \n \n {(!recentRepliers || recentRepliers.length === 0) && }\n {renderRecentRepliers()}\n
\n {messagesCount ? lang('Comments', messagesCount, 'i') : lang('LeaveAComment')}\n
\n \n \n );\n};\n\nexport default memo(CommentButton);\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getDispatch, getGlobal } from '../../../lib/teact/teactn';\n\nimport {\n ApiAvailableReaction, ApiMessage, ApiReactionCount, ApiUser,\n} from '../../../api/types';\nimport { ActiveReaction } from '../../../global/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { formatIntegerCompact } from '../../../util/textFormat';\n\nimport Button from '../../ui/Button';\nimport Avatar from '../../common/Avatar';\nimport ReactionAnimatedEmoji from './ReactionAnimatedEmoji';\n\nimport './Reactions.scss';\n\nconst MAX_REACTORS_AVATARS = 3;\n\nconst ReactionButton: FC<{\n reaction: ApiReactionCount;\n message: ApiMessage;\n activeReaction?: ActiveReaction;\n availableReactions?: ApiAvailableReaction[];\n}> = ({\n reaction,\n message,\n activeReaction,\n availableReactions,\n}) => {\n const { sendReaction } = getDispatch();\n\n const { recentReactions } = message.reactions!;\n\n const recentReactors = useMemo(() => {\n if (!recentReactions || reaction.count > MAX_REACTORS_AVATARS) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return recentReactions\n .filter((recentReaction) => recentReaction.reaction === reaction.reaction)\n .map((recentReaction) => usersById[recentReaction.userId])\n .filter(Boolean) as ApiUser[];\n }, [reaction, recentReactions]);\n\n const handleClick = useCallback(() => {\n sendReaction({\n reaction: reaction.isChosen ? undefined : reaction.reaction,\n chatId: message.chatId,\n messageId: message.id,\n });\n }, [message, reaction, sendReaction]);\n\n return (\n \n \n {recentReactors?.length ? (\n
\n {recentReactors.map((user) => )}\n
\n ) : formatIntegerCompact(reaction.count)}\n \n );\n};\n\nexport default memo(ReactionButton);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage } from '../../../api/types';\nimport { ActiveReaction } from '../../../global/types';\n\nimport buildClassName from '../../../util/buildClassName';\n\nimport ReactionButton from './ReactionButton';\n\nimport './Reactions.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n isOutside?: boolean;\n activeReaction?: ActiveReaction;\n availableReactions?: ApiAvailableReaction[];\n metaChildren?: React.ReactNode;\n};\n\nconst Reactions: FC = ({\n message,\n isOutside,\n activeReaction,\n availableReactions,\n metaChildren,\n}) => {\n return (\n
\n {message.reactions!.results.map((reaction) => (\n \n ))}\n {metaChildren}\n
\n );\n};\n\nexport default memo(Reactions);\n","import React, {\n FC, memo, useEffect, useState,\n} from '../../lib/teact/teact';\n\nimport { ActiveEmojiInteraction } from '../../global/types';\n\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from './helpers/animatedAssets';\nimport useAnimatedEmoji from './hooks/useAnimatedEmoji';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nconst QUALITY = 1;\n\ntype OwnProps = {\n localSticker?: string;\n localEffect?: string;\n isOwn?: boolean;\n soundId?: string;\n observeIntersection?: ObserveFn;\n size?: 'large' | 'medium' | 'small';\n lastSyncTime?: number;\n forceLoadPreview?: boolean;\n messageId?: number;\n chatId?: string;\n activeEmojiInteraction?: ActiveEmojiInteraction;\n};\n\nconst LocalAnimatedEmoji: FC = ({\n localSticker,\n localEffect,\n isOwn,\n soundId,\n size = 'medium',\n observeIntersection,\n messageId,\n chatId,\n activeEmojiInteraction,\n}) => {\n const {\n playKey,\n ref,\n style,\n width,\n handleClick,\n markAnimationLoaded,\n } = useAnimatedEmoji(size, chatId, messageId, soundId, activeEmojiInteraction, isOwn, localEffect);\n const id = `local_emoji_${localSticker}`;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const [localStickerAnimationData, setLocalStickerAnimationData] = useState();\n useEffect(() => {\n if (localSticker) {\n getAnimationData(localSticker as keyof typeof ANIMATED_STICKERS_PATHS).then((data) => {\n setLocalStickerAnimationData(data);\n });\n }\n }, [localSticker]);\n\n return (\n \n {localStickerAnimationData && (\n \n )}\n \n );\n};\n\nexport default memo(LocalAnimatedEmoji);\n","import React, {\n FC,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ActiveEmojiInteraction, ActiveReaction, MessageListType } from '../../../global/types';\nimport {\n ApiMessage,\n ApiMessageOutgoingStatus,\n ApiUser,\n ApiChat,\n ApiSticker,\n ApiThreadInfo,\n ApiAvailableReaction,\n} from '../../../api/types';\nimport {\n AudioOrigin, FocusDirection, IAlbum, ISettings,\n} from '../../../types';\n\nimport { IS_ANDROID, IS_TOUCH_ENV } from '../../../util/environment';\nimport {\n selectChat,\n selectChatMessage,\n selectUploadProgress,\n selectIsChatWithSelf,\n selectOutgoingStatus,\n selectUser,\n selectIsMessageFocused,\n selectCurrentTextSearch,\n selectAnimatedEmoji,\n selectIsInSelectMode,\n selectIsMessageSelected,\n selectIsDocumentGroupSelected,\n selectSender,\n selectForwardedSender,\n selectThreadTopMessageId,\n selectCanAutoLoadMedia,\n selectCanAutoPlayMedia,\n selectShouldLoopStickers,\n selectTheme,\n selectAllowedMessageActions,\n selectIsDownloading,\n selectThreadInfo,\n selectAnimatedEmojiEffect,\n selectAnimatedEmojiSound,\n selectMessageIdsByGroupId,\n selectLocalAnimatedEmoji,\n selectIsMessageProtected,\n selectLocalAnimatedEmojiEffect,\n selectDefaultReaction,\n} from '../../../modules/selectors';\nimport {\n getMessageContent,\n isOwnMessage,\n isReplyMessage,\n isAnonymousOwnMessage,\n isMessageLocal,\n isUserId,\n isChatWithRepliesBot,\n getMessageCustomShape,\n isChatChannel,\n getMessageSingleEmoji,\n getSenderTitle,\n getUserColorKey,\n areReactionsEmpty,\n} from '../../../modules/helpers';\nimport buildClassName from '../../../util/buildClassName';\nimport useEnsureMessage from '../../../hooks/useEnsureMessage';\nimport useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';\nimport { renderMessageText } from '../../common/helpers/renderMessageText';\nimport { ROUND_VIDEO_DIMENSIONS_PX } from '../../common/helpers/mediaDimensions';\nimport { buildContentClassName, isEmojiOnlyMessage } from './helpers/buildContentClassName';\nimport { getMinMediaWidth, calculateMediaDimensions } from './helpers/mediaDimensions';\nimport { calculateAlbumLayout } from './helpers/calculateAlbumLayout';\nimport renderText from '../../common/helpers/renderText';\nimport calculateAuthorWidth from './helpers/calculateAuthorWidth';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useLang from '../../../hooks/useLang';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport useFocusMessage from './hooks/useFocusMessage';\nimport useOuterHandlers from './hooks/useOuterHandlers';\nimport useInnerHandlers from './hooks/useInnerHandlers';\n\nimport Button from '../../ui/Button';\nimport Avatar from '../../common/Avatar';\nimport EmbeddedMessage from '../../common/EmbeddedMessage';\nimport Document from '../../common/Document';\nimport Audio from '../../common/Audio';\nimport MessageMeta from './MessageMeta';\nimport ContextMenuContainer from './ContextMenuContainer.async';\nimport Sticker from './Sticker';\nimport AnimatedEmoji from '../../common/AnimatedEmoji';\nimport Photo from './Photo';\nimport Video from './Video';\nimport Contact from './Contact';\nimport Poll from './Poll';\nimport WebPage from './WebPage';\nimport Invoice from './Invoice';\nimport Album from './Album';\nimport RoundVideo from './RoundVideo';\nimport InlineButtons from './InlineButtons';\nimport CommentButton from './CommentButton';\nimport Reactions from './Reactions';\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport LocalAnimatedEmoji from '../../common/LocalAnimatedEmoji';\n\nimport './Message.scss';\n\ntype MessagePositionProperties = {\n isFirstInGroup: boolean;\n isLastInGroup: boolean;\n isFirstInDocumentGroup: boolean;\n isLastInDocumentGroup: boolean;\n isLastInList: boolean;\n};\n\ntype OwnProps =\n {\n message: ApiMessage;\n observeIntersectionForBottom: ObserveFn;\n observeIntersectionForMedia: ObserveFn;\n observeIntersectionForAnimatedStickers: ObserveFn;\n album?: IAlbum;\n noAvatars?: boolean;\n withAvatar?: boolean;\n withSenderName?: boolean;\n areReactionsInMeta?: boolean;\n threadId: number;\n messageListType: MessageListType;\n noComments: boolean;\n appearanceOrder: number;\n }\n & MessagePositionProperties;\n\ntype StateProps = {\n theme: ISettings['theme'];\n forceSenderName?: boolean;\n chatUsername?: string;\n sender?: ApiUser | ApiChat;\n originSender?: ApiUser | ApiChat;\n botSender?: ApiUser;\n isThreadTop?: boolean;\n shouldHideReply?: boolean;\n replyMessage?: ApiMessage;\n replyMessageSender?: ApiUser | ApiChat;\n outgoingStatus?: ApiMessageOutgoingStatus;\n uploadProgress?: number;\n isInDocumentGroup: boolean;\n isProtected?: boolean;\n isFocused?: boolean;\n focusDirection?: FocusDirection;\n noFocusHighlight?: boolean;\n isResizingContainer?: boolean;\n isForwarding?: boolean;\n isChatWithSelf?: boolean;\n isRepliesChat?: boolean;\n isChannel?: boolean;\n canReply?: boolean;\n lastSyncTime?: number;\n highlight?: string;\n isSingleEmoji?: boolean;\n animatedEmoji?: ApiSticker;\n localSticker?: string;\n localEffect?: string;\n animatedEmojiEffect?: ApiSticker;\n animatedEmojiSoundId?: string;\n isInSelectMode?: boolean;\n isSelected?: boolean;\n isGroupSelected?: boolean;\n isDownloading: boolean;\n threadId?: number;\n isPinnedList?: boolean;\n canAutoLoadMedia?: boolean;\n canAutoPlayMedia?: boolean;\n shouldLoopStickers?: boolean;\n autoLoadFileMaxSizeMb: number;\n threadInfo?: ApiThreadInfo;\n reactionMessage?: ApiMessage;\n availableReactions?: ApiAvailableReaction[];\n defaultReaction?: string;\n activeReaction?: ActiveReaction;\n activeEmojiInteraction?: ActiveEmojiInteraction;\n};\n\ntype MetaPosition =\n 'in-text'\n | 'standalone'\n | 'none';\ntype ReactionsPosition =\n 'inside'\n | 'outside'\n | 'in-meta'\n | 'none';\n\nconst NBSP = '\\u00A0';\n// eslint-disable-next-line max-len\nconst APPENDIX_OWN = { __html: '' };\n// eslint-disable-next-line max-len\nconst APPENDIX_NOT_OWN = { __html: '' };\nconst APPEARANCE_DELAY = 10;\nconst NO_MEDIA_CORNERS_THRESHOLD = 18;\n\nconst Message: FC = ({\n message,\n chatUsername,\n observeIntersectionForBottom,\n observeIntersectionForMedia,\n observeIntersectionForAnimatedStickers,\n album,\n noAvatars,\n withAvatar,\n withSenderName,\n areReactionsInMeta,\n noComments,\n appearanceOrder,\n isFirstInGroup,\n isLastInGroup,\n isFirstInDocumentGroup,\n isLastInDocumentGroup,\n isLastInList,\n theme,\n forceSenderName,\n sender,\n originSender,\n botSender,\n isThreadTop,\n shouldHideReply,\n replyMessage,\n replyMessageSender,\n outgoingStatus,\n uploadProgress,\n isInDocumentGroup,\n isProtected,\n isFocused,\n focusDirection,\n noFocusHighlight,\n isResizingContainer,\n isForwarding,\n isChatWithSelf,\n isRepliesChat,\n isChannel,\n canReply,\n lastSyncTime,\n highlight,\n animatedEmoji,\n localSticker,\n localEffect,\n animatedEmojiEffect,\n animatedEmojiSoundId,\n isInSelectMode,\n isSelected,\n isGroupSelected,\n threadId,\n reactionMessage,\n availableReactions,\n defaultReaction,\n activeReaction,\n activeEmojiInteraction,\n messageListType,\n isPinnedList,\n isDownloading,\n canAutoLoadMedia,\n canAutoPlayMedia,\n shouldLoopStickers,\n autoLoadFileMaxSizeMb,\n threadInfo,\n}) => {\n const {\n toggleMessageSelection,\n clickInlineButton,\n disableContextMenuHint,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const bottomMarkerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n\n const lang = useLang();\n\n useOnIntersect(bottomMarkerRef, observeIntersectionForBottom);\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu: onContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref, IS_TOUCH_ENV && isInSelectMode, true, IS_ANDROID);\n\n useEffect(() => {\n if (isContextMenuOpen) {\n disableContextMenuHint();\n }\n }, [isContextMenuOpen, disableContextMenuHint]);\n\n const noAppearanceAnimation = appearanceOrder <= 0;\n const [isShown, markShown] = useFlag(noAppearanceAnimation);\n useEffect(() => {\n if (noAppearanceAnimation) {\n return;\n }\n\n setTimeout(markShown, appearanceOrder * APPEARANCE_DELAY);\n }, [appearanceOrder, markShown, noAppearanceAnimation]);\n const { transitionClassNames } = useShowTransition(isShown, undefined, noAppearanceAnimation, false);\n\n const {\n id: messageId, chatId, forwardInfo, viaBotId,\n } = message;\n\n const isLocal = isMessageLocal(message);\n const isOwn = isOwnMessage(message);\n const isScheduled = messageListType === 'scheduled' || message.isScheduled;\n const hasReply = isReplyMessage(message) && !shouldHideReply;\n const hasThread = Boolean(threadInfo) && messageListType === 'thread';\n const customShape = getMessageCustomShape(message);\n const hasAnimatedEmoji = localSticker || animatedEmoji;\n const hasReactions = reactionMessage?.reactions && !areReactionsEmpty(reactionMessage.reactions);\n const asForwarded = (\n forwardInfo\n && (!isChatWithSelf || isScheduled)\n && !isRepliesChat\n && !forwardInfo.isLinkedChannelPost\n && !customShape\n );\n const isAlbum = Boolean(album) && album!.messages.length > 1;\n const isInDocumentGroupNotFirst = isInDocumentGroup && !isFirstInDocumentGroup;\n const isInDocumentGroupNotLast = isInDocumentGroup && !isLastInDocumentGroup;\n const isContextMenuShown = contextMenuPosition !== undefined;\n const canShowActionButton = (\n !(isContextMenuShown || isInSelectMode || isForwarding)\n && !isInDocumentGroupNotLast\n );\n const canForward = isChannel && !isScheduled;\n const canFocus = Boolean(isPinnedList\n || (forwardInfo\n && (forwardInfo.isChannelPost || (isChatWithSelf && !isOwn) || isRepliesChat)\n && forwardInfo.fromMessageId\n ));\n\n const withCommentButton = threadInfo && !isInDocumentGroupNotLast && messageListType === 'thread' && !noComments;\n const withQuickReactionButton = !IS_TOUCH_ENV && defaultReaction && !isInDocumentGroupNotLast;\n\n const selectMessage = useCallback((e?: React.MouseEvent, groupedId?: string) => {\n toggleMessageSelection({\n messageId,\n groupedId,\n ...(e?.shiftKey && { withShift: true }),\n ...(isAlbum && { childMessageIds: album!.messages.map(({ id }) => id) }),\n });\n }, [toggleMessageSelection, messageId, isAlbum, album]);\n\n const avatarPeer = forwardInfo && (isChatWithSelf || isRepliesChat || !sender) ? originSender : sender;\n const senderPeer = forwardInfo ? originSender : sender;\n\n const {\n handleMouseDown,\n handleClick,\n handleContextMenu,\n handleDoubleClick,\n handleContentDoubleClick,\n handleMouseMove,\n handleSendQuickReaction,\n handleMouseLeave,\n isSwiped,\n isQuickReactionVisible,\n handleDocumentGroupMouseEnter,\n } = useOuterHandlers(\n selectMessage,\n ref,\n messageId,\n isAlbum,\n Boolean(isInSelectMode),\n Boolean(canReply),\n Boolean(isProtected),\n onContextMenu,\n handleBeforeContextMenu,\n chatId,\n isContextMenuShown,\n contentRef,\n isOwn,\n isInDocumentGroupNotLast,\n );\n\n const {\n handleAvatarClick,\n handleSenderClick,\n handleViaBotClick,\n handleReplyClick,\n handleMediaClick,\n handleAudioPlay,\n handleAlbumMediaClick,\n handleMetaClick,\n handleReadMedia,\n handleCancelUpload,\n handleVoteSend,\n handleGroupForward,\n handleForward,\n handleFocus,\n handleFocusForwarded,\n handleDocumentGroupSelectAll,\n } = useInnerHandlers(\n lang,\n selectMessage,\n message,\n chatId,\n threadId,\n isInDocumentGroup,\n asForwarded,\n isScheduled,\n isRepliesChat,\n album,\n avatarPeer,\n senderPeer,\n botSender,\n );\n\n const containerClassName = buildClassName(\n 'Message message-list-item',\n isFirstInGroup && 'first-in-group',\n isProtected && 'is-protected',\n isLastInGroup && 'last-in-group',\n isFirstInDocumentGroup && 'first-in-document-group',\n isLastInDocumentGroup && 'last-in-document-group',\n isLastInList && 'last-in-list',\n isOwn && 'own',\n Boolean(message.views) && 'has-views',\n message.isEdited && 'was-edited',\n hasReply && 'has-reply',\n isContextMenuShown && 'has-menu-open',\n isFocused && !noFocusHighlight && 'focused',\n isForwarding && 'is-forwarding',\n message.isDeleting && 'is-deleting',\n isInDocumentGroup && 'is-in-document-group',\n isAlbum && 'is-album',\n message.hasUnreadMention && 'has-unread-mention',\n isSelected && 'is-selected',\n isInSelectMode && 'is-in-selection-mode',\n isThreadTop && 'is-thread-top',\n Boolean(message.inlineButtons) && 'has-inline-buttons',\n isSwiped && 'is-swiped',\n transitionClassNames,\n Boolean(activeReaction) && 'has-active-reaction',\n );\n const contentClassName = buildContentClassName(message, {\n hasReply,\n customShape,\n isLastInGroup,\n asForwarded,\n hasThread,\n forceSenderName,\n hasComments: threadInfo && threadInfo?.messagesCount > 0,\n hasActionButton: canForward || canFocus,\n hasReactions,\n });\n\n const withAppendix = contentClassName.includes('has-appendix');\n const textParts = renderMessageText(message, highlight, isEmojiOnlyMessage(customShape));\n\n const {\n text, photo, video, audio, voice, document, sticker, contact, poll, webPage, invoice,\n } = getMessageContent(message);\n\n let metaPosition!: MetaPosition;\n if (isInDocumentGroupNotLast) {\n metaPosition = 'none';\n } else if (textParts && !hasAnimatedEmoji && !webPage) {\n metaPosition = 'in-text';\n } else {\n metaPosition = 'standalone';\n }\n\n let reactionsPosition!: ReactionsPosition;\n if (areReactionsInMeta) {\n reactionsPosition = 'in-meta';\n } else if (hasReactions) {\n if (customShape || ((photo || video || hasAnimatedEmoji) && !textParts)) {\n reactionsPosition = 'outside';\n } else if (asForwarded) {\n metaPosition = 'standalone';\n reactionsPosition = 'inside';\n } else {\n reactionsPosition = 'inside';\n }\n } else {\n reactionsPosition = 'none';\n }\n\n useEnsureMessage(\n isRepliesChat && message.replyToChatId ? message.replyToChatId : chatId,\n hasReply ? message.replyToMessageId : undefined,\n replyMessage,\n message.id,\n );\n useFocusMessage(ref, chatId, isFocused, focusDirection, noFocusHighlight, isResizingContainer);\n\n let style = '';\n let calculatedWidth;\n let noMediaCorners = false;\n const albumLayout = useMemo(() => {\n return isAlbum ? calculateAlbumLayout(isOwn, Boolean(asForwarded), Boolean(noAvatars), album!) : undefined;\n }, [isAlbum, isOwn, asForwarded, noAvatars, album]);\n\n const extraPadding = asForwarded ? 28 : 0;\n if (!isAlbum && (photo || video)) {\n let width: number | undefined;\n if (photo) {\n width = calculateMediaDimensions(message, noAvatars).width;\n } else if (video) {\n if (video.isRound) {\n width = ROUND_VIDEO_DIMENSIONS_PX;\n } else {\n width = calculateMediaDimensions(message, noAvatars).width;\n }\n }\n\n if (width) {\n calculatedWidth = Math.max(getMinMediaWidth(Boolean(text), withCommentButton), width);\n if (calculatedWidth - width > NO_MEDIA_CORNERS_THRESHOLD) {\n noMediaCorners = true;\n }\n }\n } else if (albumLayout) {\n calculatedWidth = Math.max(getMinMediaWidth(Boolean(text), withCommentButton), albumLayout.containerStyle.width);\n if (calculatedWidth - albumLayout.containerStyle.width > NO_MEDIA_CORNERS_THRESHOLD) {\n noMediaCorners = true;\n }\n }\n\n if (calculatedWidth) {\n style = `width: ${calculatedWidth + extraPadding}px`;\n }\n\n const signature = (isChannel && message.adminTitle) || (!asForwarded && forwardInfo?.adminTitle) || undefined;\n const metaSafeAuthorWidth = useMemo(() => {\n return signature ? calculateAuthorWidth(signature) : undefined;\n }, [signature]);\n\n function renderAvatar() {\n const isAvatarPeerUser = avatarPeer && isUserId(avatarPeer.id);\n const avatarUser = (avatarPeer && isAvatarPeerUser) ? avatarPeer as ApiUser : undefined;\n const avatarChat = (avatarPeer && !isAvatarPeerUser) ? avatarPeer as ApiChat : undefined;\n const hiddenName = (!avatarPeer && forwardInfo) ? forwardInfo.hiddenUserName : undefined;\n\n return (\n \n );\n }\n\n function renderReactionsAndMeta() {\n const meta = (\n \n );\n\n if (reactionsPosition !== 'inside') {\n return meta;\n }\n\n return (\n \n );\n }\n\n function renderContent() {\n const className = buildClassName(\n 'content-inner',\n asForwarded && 'forwarded-message',\n hasReply && 'reply-message',\n noMediaCorners && 'no-media-corners',\n );\n const hasCustomAppendix = isLastInGroup && !textParts && !asForwarded && !hasThread;\n const textContentClass = buildClassName(\n 'text-content',\n metaPosition === 'in-text' && 'with-meta',\n outgoingStatus && 'with-outgoing-icon',\n );\n\n return (\n
\n {renderSenderName()}\n {hasReply && (\n \n )}\n {sticker && (\n \n )}\n {animatedEmoji && (\n \n )}\n {localSticker && (\n \n )}\n {isAlbum && (\n \n )}\n {!isAlbum && photo && (\n \n )}\n {!isAlbum && video && video.isRound && (\n \n )}\n {!isAlbum && video && !video.isRound && (\n \n )}\n {(audio || voice) && (\n \n )}\n {document && (\n \n )}\n {contact && (\n \n )}\n {poll && (\n \n )}\n {!hasAnimatedEmoji && textParts && (\n

\n {textParts}\n {metaPosition === 'in-text' && renderReactionsAndMeta()}\n

\n )}\n\n {webPage && (\n \n )}\n {invoice && }\n
\n );\n }\n\n function renderSenderName() {\n const shouldRender = !(customShape && !viaBotId) && (\n (withSenderName && !photo && !video) || asForwarded || viaBotId || forceSenderName\n ) && !isInDocumentGroupNotFirst && !(hasReply && customShape);\n\n if (!shouldRender) {\n return undefined;\n }\n\n let senderTitle;\n let senderColor;\n if (senderPeer && !(customShape && viaBotId)) {\n senderTitle = getSenderTitle(lang, senderPeer);\n\n if (!asForwarded) {\n senderColor = `color-${getUserColorKey(senderPeer)}`;\n }\n } else if (forwardInfo?.hiddenUserName) {\n senderTitle = forwardInfo.hiddenUserName;\n }\n\n return (\n
\n {senderTitle ? (\n \n {renderText(senderTitle)}\n \n ) : !botSender ? (\n NBSP\n ) : undefined}\n {botSender && (\n <>\n {lang('ViaBot')}\n \n {renderText(`@${botSender.username}`)}\n \n \n )}\n {forwardInfo?.isLinkedChannelPost ? (\n {lang('DiscussChannel')}\n ) : message.adminTitle && !isChannel ? (\n {message.adminTitle}\n ) : undefined}\n
\n );\n }\n\n return (\n \n \n {!isInDocumentGroup && (\n
\n {isSelected && }\n
\n )}\n {isLastInDocumentGroup && (\n \n {isGroupSelected && (\n \n )}\n \n )}\n {withAvatar && renderAvatar()}\n \n \n {asForwarded && !isInDocumentGroupNotFirst && (\n
{lang('ForwardedMessage')}
\n )}\n {renderContent()}\n {!isInDocumentGroupNotLast && metaPosition === 'standalone' && renderReactionsAndMeta()}\n {canShowActionButton && canForward ? (\n \n \n \n ) : canShowActionButton && canFocus ? (\n \n \n \n ) : undefined}\n {withCommentButton && }\n {withAppendix && (\n
\n )}\n {withQuickReactionButton && (\n \n \n
\n )}\n \n {message.inlineButtons && (\n \n )}\n {reactionsPosition === 'outside' && (\n \n )}\n \n {contextMenuPosition && (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, ownProps): StateProps => {\n const { focusedMessage, forwardMessages, lastSyncTime } = global;\n const {\n message, album, withSenderName, withAvatar, threadId, messageListType, isLastInDocumentGroup,\n } = ownProps;\n const {\n id, chatId, viaBotId, replyToChatId, replyToMessageId, isOutgoing, threadInfo,\n } = message;\n\n const chat = selectChat(global, chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const isRepliesChat = isChatWithRepliesBot(chatId);\n const isChannel = chat && isChatChannel(chat);\n const chatUsername = chat?.username;\n\n const forceSenderName = !isChatWithSelf && isAnonymousOwnMessage(message);\n const canShowSender = withSenderName || withAvatar || forceSenderName;\n const sender = selectSender(global, message);\n const originSender = selectForwardedSender(global, message);\n const botSender = viaBotId ? selectUser(global, viaBotId) : undefined;\n\n const threadTopMessageId = threadId ? selectThreadTopMessageId(global, chatId, threadId) : undefined;\n const isThreadTop = message.id === threadTopMessageId;\n\n const shouldHideReply = replyToMessageId === threadTopMessageId;\n const replyMessage = replyToMessageId && !shouldHideReply\n ? selectChatMessage(global, isRepliesChat && replyToChatId ? replyToChatId : chatId, replyToMessageId)\n : undefined;\n const replyMessageSender = replyMessage && selectSender(global, replyMessage);\n\n const uploadProgress = selectUploadProgress(global, message);\n const isFocused = messageListType === 'thread' && (\n album\n ? album.messages.some((m) => selectIsMessageFocused(global, m))\n : selectIsMessageFocused(global, message)\n );\n\n const {\n direction: focusDirection, noHighlight: noFocusHighlight, isResizingContainer,\n } = (isFocused && focusedMessage) || {};\n\n const isForwarding = forwardMessages.messageIds && forwardMessages.messageIds.includes(id);\n\n const { query: highlight } = selectCurrentTextSearch(global) || {};\n\n const singleEmoji = getMessageSingleEmoji(message);\n let isSelected: boolean;\n\n if (album?.messages) {\n isSelected = album.messages.every(({ id: messageId }) => selectIsMessageSelected(global, messageId));\n } else {\n isSelected = selectIsMessageSelected(global, id);\n }\n\n const { canReply } = (messageListType === 'thread' && selectAllowedMessageActions(global, message, threadId)) || {};\n const isDownloading = selectIsDownloading(global, message);\n const actualThreadInfo = threadInfo\n ? selectThreadInfo(global, threadInfo.chatId, threadInfo.threadId) || threadInfo\n : undefined;\n\n const isInDocumentGroup = Boolean(message.groupedId) && !message.isInAlbum;\n const documentGroupFirstMessageId = isInDocumentGroup\n ? selectMessageIdsByGroupId(global, chatId, message.groupedId!)![0]\n : undefined;\n const reactionMessage = isInDocumentGroup ? (\n isLastInDocumentGroup ? selectChatMessage(global, chatId, documentGroupFirstMessageId!) : undefined\n ) : message;\n\n const localSticker = singleEmoji ? selectLocalAnimatedEmoji(global, singleEmoji) : undefined;\n\n return {\n theme: selectTheme(global),\n chatUsername,\n forceSenderName,\n sender: canShowSender ? sender : undefined,\n originSender,\n botSender,\n shouldHideReply,\n isThreadTop,\n replyMessage,\n replyMessageSender,\n isInDocumentGroup,\n isProtected: selectIsMessageProtected(global, message),\n isFocused,\n isForwarding,\n reactionMessage,\n isChatWithSelf,\n isRepliesChat,\n isChannel,\n canReply,\n lastSyncTime,\n highlight,\n isSingleEmoji: Boolean(singleEmoji),\n animatedEmoji: singleEmoji ? selectAnimatedEmoji(global, singleEmoji) : undefined,\n animatedEmojiEffect: singleEmoji && isUserId(chatId) ? selectAnimatedEmojiEffect(global, singleEmoji) : undefined,\n animatedEmojiSoundId: singleEmoji ? selectAnimatedEmojiSound(global, singleEmoji) : undefined,\n localSticker,\n localEffect: localSticker && isUserId(chatId) ? selectLocalAnimatedEmojiEffect(localSticker) : undefined,\n isInSelectMode: selectIsInSelectMode(global),\n isSelected,\n isGroupSelected: (\n Boolean(message.groupedId)\n && !message.isInAlbum\n && selectIsDocumentGroupSelected(global, chatId, message.groupedId)\n ),\n threadId,\n isDownloading,\n isPinnedList: messageListType === 'pinned',\n canAutoLoadMedia: selectCanAutoLoadMedia(global, message),\n canAutoPlayMedia: selectCanAutoPlayMedia(global, message),\n autoLoadFileMaxSizeMb: global.settings.byKey.autoLoadFileMaxSizeMb,\n shouldLoopStickers: selectShouldLoopStickers(global),\n threadInfo: actualThreadInfo,\n availableReactions: global.availableReactions,\n defaultReaction: isMessageLocal(message) ? undefined : selectDefaultReaction(global, chatId),\n activeReaction: reactionMessage && global.activeReactions[reactionMessage.id],\n activeEmojiInteraction: global.activeEmojiInteraction,\n ...(isOutgoing && { outgoingStatus: selectOutgoingStatus(global, message, messageListType === 'scheduled') }),\n ...(typeof uploadProgress === 'number' && { uploadProgress }),\n ...(isFocused && { focusDirection, noFocusHighlight, isResizingContainer }),\n };\n },\n)(Message));\n","import React, { useCallback } from '../../../../lib/teact/teact';\nimport { getDispatch } from '../../../../lib/teact/teactn';\n\nimport { IAlbum, MediaViewerOrigin } from '../../../../types';\nimport {\n ApiChat, ApiMessage, ApiUser, MAIN_THREAD_ID,\n} from '../../../../api/types';\nimport { LangFn } from '../../../../hooks/useLang';\n\nexport default function useInnerHandlers(\n lang: LangFn,\n selectMessage: (e: React.MouseEvent, groupedId?: string) => void,\n message: ApiMessage,\n chatId: string,\n threadId: number,\n isInDocumentGroup: boolean,\n asForwarded?: boolean,\n isScheduled?: boolean,\n isChatWithRepliesBot?: boolean,\n album?: IAlbum,\n avatarPeer?: ApiUser | ApiChat,\n senderPeer?: ApiUser | ApiChat,\n botSender?: ApiUser,\n) {\n const {\n openChat, showNotification, focusMessage, openMediaViewer, openAudioPlayer,\n markMessagesRead, cancelSendingMessage, sendPollVote, openForwardMenu, focusMessageInComments,\n } = getDispatch();\n\n const {\n id: messageId, forwardInfo, replyToMessageId, replyToChatId, replyToTopMessageId, groupedId,\n } = message;\n\n const handleAvatarClick = useCallback(() => {\n if (!avatarPeer) {\n return;\n }\n\n openChat({ id: avatarPeer.id });\n }, [avatarPeer, openChat]);\n\n const handleSenderClick = useCallback(() => {\n if (!senderPeer) {\n showNotification({ message: lang('HidAccount') });\n\n return;\n }\n\n if (asForwarded && forwardInfo?.channelPostId) {\n focusMessage({ chatId: senderPeer.id, messageId: forwardInfo.channelPostId });\n } else {\n openChat({ id: senderPeer.id });\n }\n }, [\n asForwarded, focusMessage, forwardInfo, lang, openChat, senderPeer, showNotification,\n ]);\n\n const handleViaBotClick = useCallback(() => {\n if (!botSender) {\n return;\n }\n\n openChat({ id: botSender.id });\n }, [botSender, openChat]);\n\n const handleReplyClick = useCallback((): void => {\n focusMessage({\n chatId: isChatWithRepliesBot && replyToChatId ? replyToChatId : chatId,\n threadId,\n messageId: replyToMessageId,\n replyMessageId: isChatWithRepliesBot && replyToChatId ? undefined : messageId,\n });\n }, [focusMessage, isChatWithRepliesBot, replyToChatId, chatId, threadId, replyToMessageId, messageId]);\n\n const handleMediaClick = useCallback((): void => {\n openMediaViewer({\n chatId, threadId, messageId, origin: isScheduled ? MediaViewerOrigin.ScheduledInline : MediaViewerOrigin.Inline,\n });\n }, [chatId, threadId, messageId, openMediaViewer, isScheduled]);\n\n const handleAudioPlay = useCallback((): void => {\n openAudioPlayer({ chatId, messageId });\n }, [chatId, messageId, openAudioPlayer]);\n\n const handleAlbumMediaClick = useCallback((albumMessageId: number): void => {\n openMediaViewer({\n chatId,\n threadId,\n messageId: albumMessageId,\n origin: isScheduled ? MediaViewerOrigin.ScheduledAlbum : MediaViewerOrigin.Album,\n });\n }, [chatId, threadId, openMediaViewer, isScheduled]);\n\n const handleReadMedia = useCallback((): void => {\n markMessagesRead({ messageIds: [messageId] });\n }, [messageId, markMessagesRead]);\n\n const handleCancelUpload = useCallback(() => {\n cancelSendingMessage({ chatId, messageId });\n }, [cancelSendingMessage, chatId, messageId]);\n\n const handleVoteSend = useCallback((options: string[]) => {\n sendPollVote({ chatId, messageId, options });\n }, [chatId, messageId, sendPollVote]);\n\n const handleGroupForward = useCallback(() => {\n openForwardMenu({ fromChatId: chatId, groupedId });\n }, [openForwardMenu, chatId, groupedId]);\n\n const handleForward = useCallback(() => {\n if (album && album.messages) {\n const messageIds = album.messages.map(({ id }) => id);\n openForwardMenu({ fromChatId: chatId, messageIds });\n } else {\n openForwardMenu({ fromChatId: chatId, messageIds: [messageId] });\n }\n }, [album, openForwardMenu, chatId, messageId]);\n\n const handleFocus = useCallback(() => {\n focusMessage({\n chatId, threadId: MAIN_THREAD_ID, messageId,\n });\n }, [focusMessage, chatId, messageId]);\n\n const handleFocusForwarded = useCallback(() => {\n if (isInDocumentGroup) {\n focusMessage({\n chatId: forwardInfo!.fromChatId, groupedId, groupedChatId: chatId,\n });\n return;\n }\n\n if (isChatWithRepliesBot && replyToChatId) {\n focusMessageInComments({\n chatId: replyToChatId,\n threadId: replyToTopMessageId,\n messageId: forwardInfo!.fromMessageId,\n });\n } else {\n focusMessage({\n chatId: forwardInfo!.fromChatId, messageId: forwardInfo!.fromMessageId,\n });\n }\n }, [\n isInDocumentGroup, isChatWithRepliesBot, replyToChatId, focusMessage, forwardInfo, groupedId, chatId,\n focusMessageInComments, replyToTopMessageId,\n ]);\n\n const selectWithGroupedId = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n\n selectMessage(e, groupedId);\n }, [selectMessage, groupedId]);\n\n return {\n handleAvatarClick,\n handleSenderClick,\n handleViaBotClick,\n handleReplyClick,\n handleMediaClick,\n handleAudioPlay,\n handleAlbumMediaClick,\n handleMetaClick: selectWithGroupedId,\n handleReadMedia,\n handleCancelUpload,\n handleVoteSend,\n handleGroupForward,\n handleForward,\n handleFocus,\n handleFocusForwarded,\n handleDocumentGroupSelectAll: selectWithGroupedId,\n };\n}\n","import { RefObject } from 'react';\nimport React, {\n FC, memo, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiSponsoredMessage, ApiUser } from '../../../api/types';\n\nimport { renderTextWithEntities } from '../../common/helpers/renderTextWithEntities';\nimport { selectChat, selectSponsoredMessage, selectUser } from '../../../modules/selectors';\nimport { getChatTitle, getUserFullName } from '../../../modules/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport Button from '../../ui/Button';\n\nimport './SponsoredMessage.scss';\n\ntype OwnProps = {\n chatId: string;\n containerRef: RefObject;\n};\n\ntype StateProps = {\n message?: ApiSponsoredMessage;\n bot?: ApiUser;\n channel?: ApiChat;\n};\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\n\nconst SponsoredMessage: FC = ({\n chatId,\n message,\n containerRef,\n bot,\n channel,\n}) => {\n const {\n viewSponsoredMessage,\n openChat,\n openChatByInvite,\n startBot,\n focusMessage,\n } = getDispatch();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n const shouldObserve = Boolean(message);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n threshold: 1,\n });\n\n useEffect(() => {\n return shouldObserve ? observeIntersection(contentRef.current!, (target) => {\n if (target.isIntersecting) {\n viewSponsoredMessage({ chatId });\n }\n }) : undefined;\n }, [chatId, shouldObserve, observeIntersection, viewSponsoredMessage]);\n\n if (!message) {\n return undefined;\n }\n\n const handleClick = () => {\n if (message.chatInviteHash) {\n openChatByInvite({ hash: message.chatInviteHash });\n } else if (message.channelPostId) {\n focusMessage({ chatId: message.chatId, messageId: message.channelPostId });\n } else {\n openChat({ id: message.chatId });\n\n if (message.startParam) {\n startBot({\n botId: message.chatId,\n param: message.startParam,\n });\n }\n }\n };\n\n return (\n
\n
\n
\n
\n {bot && renderText(getUserFullName(bot) || '')}\n {channel && renderText(message.chatInviteTitle || getChatTitle(lang, channel, bot) || '')}\n
\n\n

\n \n {renderTextWithEntities(message.text.text, message.text.entities)}\n \n\n \n {lang('SponsoredMessage')}\n \n

\n\n \n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const message = selectSponsoredMessage(global, chatId);\n const { chatId: fromChatId, isBot } = message || {};\n\n return {\n message,\n bot: fromChatId && isBot ? selectUser(global, fromChatId) : undefined,\n channel: !isBot && fromChatId ? selectChat(global, fromChatId) : undefined,\n };\n },\n)(SponsoredMessage));\n","import { RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport { MessageListType } from '../../global/types';\n\nimport { SCHEDULED_WHEN_ONLINE } from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport { compact, flatten } from '../../util/iteratees';\nimport { formatHumanDate } from '../../util/dateFormat';\nimport { getMessageOriginalId, isActionMessage, isOwnMessage } from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport { isAlbum, MessageDateGroup } from './helpers/groupMessages';\nimport { preventMessageInputBlur } from './helpers/preventMessageInputBlur';\nimport useScrollHooks from './hooks/useScrollHooks';\nimport useMessageObservers from './hooks/useMessageObservers';\n\nimport Message from './message/Message';\nimport SponsoredMessage from './message/SponsoredMessage';\nimport ActionMessage from './ActionMessage';\nimport { getDispatch } from '../../lib/teact/teactn';\n\ninterface OwnProps {\n chatId: string;\n messageIds: number[];\n messageGroups: MessageDateGroup[];\n isViewportNewest: boolean;\n isUnread: boolean;\n withUsers: boolean;\n noAvatars: boolean;\n containerRef: RefObject;\n anchorIdRef: { current: string | undefined };\n memoUnreadDividerBeforeIdRef: { current: number | undefined };\n memoFirstUnreadIdRef: { current: number | undefined };\n threadId: number;\n type: MessageListType;\n isReady: boolean;\n areReactionsInMeta: boolean;\n isScrollingRef: { current: boolean | undefined };\n isScrollPatchNeededRef: { current: boolean | undefined };\n threadTopMessageId: number | undefined;\n hasLinkedChat: boolean | undefined;\n isSchedule: boolean;\n noAppearanceAnimation: boolean;\n onFabToggle: AnyToVoidFunction;\n onNotchToggle: AnyToVoidFunction;\n}\n\nconst UNREAD_DIVIDER_CLASS = 'unread-divider';\n\nconst MessageListContent: FC = ({\n chatId,\n messageIds,\n messageGroups,\n isViewportNewest,\n isUnread,\n withUsers,\n areReactionsInMeta,\n noAvatars,\n containerRef,\n anchorIdRef,\n memoUnreadDividerBeforeIdRef,\n memoFirstUnreadIdRef,\n threadId,\n type,\n isReady,\n isScrollingRef,\n isScrollPatchNeededRef,\n threadTopMessageId,\n hasLinkedChat,\n isSchedule,\n noAppearanceAnimation,\n onFabToggle,\n onNotchToggle,\n}) => {\n const { openHistoryCalendar } = getDispatch();\n\n const {\n observeIntersectionForMedia,\n observeIntersectionForReading,\n observeIntersectionForAnimatedStickers,\n } = useMessageObservers(type, containerRef, memoFirstUnreadIdRef);\n\n const {\n backwardsTriggerRef,\n forwardsTriggerRef,\n fabTriggerRef,\n } = useScrollHooks(\n type,\n containerRef,\n messageIds,\n isViewportNewest,\n isUnread,\n onFabToggle,\n onNotchToggle,\n isReady,\n isScrollingRef,\n isScrollPatchNeededRef,\n );\n\n const lang = useLang();\n\n const unreadDivider = (\n
\n {lang('UnreadMessages')}\n
\n );\n\n const messageCountToAnimate = noAppearanceAnimation ? 0 : messageGroups.reduce((acc, messageGroup) => {\n return acc + flatten(messageGroup.senderGroups).length;\n }, 0);\n let appearanceIndex = 0;\n\n const dateGroups = messageGroups.map((\n dateGroup: MessageDateGroup,\n dateGroupIndex: number,\n dateGroupsArray: MessageDateGroup[],\n ) => {\n const senderGroups = dateGroup.senderGroups.map((\n senderGroup,\n senderGroupIndex,\n senderGroupsArray,\n ) => {\n if (senderGroup.length === 1 && !isAlbum(senderGroup[0]) && isActionMessage(senderGroup[0])) {\n const message = senderGroup[0];\n const isLastInList = (\n senderGroupIndex === senderGroupsArray.length - 1\n && dateGroupIndex === dateGroupsArray.length - 1\n );\n\n return compact([\n message.id === memoUnreadDividerBeforeIdRef.current && unreadDivider,\n ,\n ]);\n }\n\n let currentDocumentGroupId: string | undefined;\n\n return flatten(senderGroup.map((\n messageOrAlbum,\n messageIndex,\n ) => {\n const message = isAlbum(messageOrAlbum) ? messageOrAlbum.mainMessage : messageOrAlbum;\n const album = isAlbum(messageOrAlbum) ? messageOrAlbum : undefined;\n const isOwn = isOwnMessage(message);\n const isMessageAlbum = isAlbum(messageOrAlbum);\n const nextMessage = senderGroup[messageIndex + 1];\n\n if (message.previousLocalId && anchorIdRef.current === `message${message.previousLocalId}`) {\n anchorIdRef.current = `message${message.id}`;\n }\n\n const documentGroupId = !isMessageAlbum && message.groupedId ? message.groupedId : undefined;\n const nextDocumentGroupId = nextMessage && !isAlbum(nextMessage) ? nextMessage.groupedId : undefined;\n\n const position = {\n isFirstInGroup: messageIndex === 0,\n isLastInGroup: messageIndex === senderGroup.length - 1,\n isFirstInDocumentGroup: Boolean(documentGroupId && documentGroupId !== currentDocumentGroupId),\n isLastInDocumentGroup: Boolean(documentGroupId && documentGroupId !== nextDocumentGroupId),\n isLastInList: (\n messageIndex === senderGroup.length - 1\n && senderGroupIndex === senderGroupsArray.length - 1\n && dateGroupIndex === dateGroupsArray.length - 1\n ),\n };\n\n currentDocumentGroupId = documentGroupId;\n\n const originalId = getMessageOriginalId(message);\n // Scheduled messages can have local IDs in the middle of the list,\n // and keys should be ordered, so we prefix it with a date.\n // However, this may lead to issues if server date is not synchronized with the local one.\n const key = type !== 'scheduled' ? originalId : `${message.date}_${originalId}`;\n\n return compact([\n message.id === memoUnreadDividerBeforeIdRef.current && unreadDivider,\n ,\n message.id === threadTopMessageId && (\n
\n {lang('DiscussionStarted')}\n
\n ),\n ]);\n }));\n });\n\n return (\n \n openHistoryCalendar({ selectedAt: dateGroup.datetime }) : undefined}\n >\n \n {isSchedule && dateGroup.originalDate === SCHEDULED_WHEN_ONLINE && (\n lang('MessageScheduledUntilOnline')\n )}\n {isSchedule && dateGroup.originalDate !== SCHEDULED_WHEN_ONLINE && (\n lang('MessageScheduledOn', formatHumanDate(lang, dateGroup.datetime, undefined, true))\n )}\n {!isSchedule && formatHumanDate(lang, dateGroup.datetime)}\n \n \n {flatten(senderGroups)}\n \n );\n });\n\n return (\n
\n
\n {flatten(dateGroups)}\n {isViewportNewest && }\n \n \n
\n );\n};\n\nexport default memo(MessageListContent);\n","import { RefObject } from 'react';\nimport { getDispatch } from '../../../lib/teact/teactn';\nimport { useMemo, useRef } from '../../../lib/teact/teact';\n\nimport { LoadMoreDirection } from '../../../types';\nimport { MessageListType } from '../../../global/types';\n\nimport { LOCAL_MESSAGE_ID_BASE, MESSAGE_LIST_SLICE } from '../../../config';\nimport { IS_SCROLL_PATCH_NEEDED, MESSAGE_LIST_SENSITIVE_AREA } from '../../../util/environment';\nimport { debounce } from '../../../util/schedulers';\nimport { useIntersectionObserver, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useOnChange from '../../../hooks/useOnChange';\n\nconst FAB_THRESHOLD = 50;\nconst NOTCH_THRESHOLD = 1; // Notch has zero height so we at least need a 1px margin to intersect\nconst TOOLS_FREEZE_TIMEOUT = 250; // Approximate message sending animation duration\n\nexport default function useScrollHooks(\n type: MessageListType,\n containerRef: RefObject,\n messageIds: number[],\n isViewportNewest: boolean,\n isUnread: boolean,\n onFabToggle: AnyToVoidFunction,\n onNotchToggle: AnyToVoidFunction,\n isReady: boolean,\n isScrollingRef: { current: boolean | undefined },\n isScrollPatchNeededRef: { current: boolean | undefined },\n) {\n const { loadViewportMessages } = getDispatch();\n\n const [loadMoreBackwards, loadMoreForwards] = useMemo(\n () => (type === 'thread' ? [\n debounce(() => loadViewportMessages({ direction: LoadMoreDirection.Backwards }), 1000, true, false),\n debounce(() => loadViewportMessages({ direction: LoadMoreDirection.Forwards }), 1000, true, false),\n ] : []),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [loadViewportMessages, messageIds],\n );\n\n // eslint-disable-next-line no-null/no-null\n const backwardsTriggerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const forwardsTriggerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const fabTriggerRef = useRef(null);\n\n function toggleScrollTools() {\n if (!isReady) return;\n\n if (!messageIds || !messageIds.length) {\n onFabToggle(false);\n onNotchToggle(false);\n return;\n }\n\n if (!isViewportNewest) {\n onFabToggle(true);\n onNotchToggle(true);\n return;\n }\n\n if (!containerRef.current) {\n return;\n }\n\n const { offsetHeight, scrollHeight, scrollTop } = containerRef.current;\n const scrollBottom = Math.round(scrollHeight - scrollTop - offsetHeight);\n const isNearBottom = scrollBottom <= FAB_THRESHOLD;\n const isAtBottom = scrollBottom <= NOTCH_THRESHOLD;\n\n onFabToggle(isUnread ? !isAtBottom : !isNearBottom);\n onNotchToggle(!isAtBottom);\n }\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n margin: MESSAGE_LIST_SENSITIVE_AREA,\n }, (entries) => {\n if (!loadMoreForwards || !loadMoreBackwards) {\n return;\n }\n\n // Loading history while sending a message can return the same message and cause ambiguity\n const isFirstMessageLocal = messageIds[0] >= LOCAL_MESSAGE_ID_BASE;\n if (isFirstMessageLocal) {\n return;\n }\n\n const triggerEntry = entries.find(({ isIntersecting }) => isIntersecting);\n if (!triggerEntry) {\n return;\n }\n\n const { target } = triggerEntry;\n\n if (target.className === 'backwards-trigger') {\n if (\n IS_SCROLL_PATCH_NEEDED && isScrollingRef.current && messageIds.length <= MESSAGE_LIST_SLICE\n ) {\n isScrollPatchNeededRef.current = true;\n }\n\n loadMoreBackwards();\n } else if (target.className === 'forwards-trigger') {\n loadMoreForwards();\n }\n });\n\n useOnIntersect(backwardsTriggerRef, observeIntersection);\n useOnIntersect(forwardsTriggerRef, observeIntersection);\n\n const {\n observe: observeIntersectionForFab,\n freeze: freezeForFab,\n unfreeze: unfreezeForFab,\n } = useIntersectionObserver({\n rootRef: containerRef,\n margin: FAB_THRESHOLD * 2,\n }, toggleScrollTools);\n\n useOnIntersect(fabTriggerRef, observeIntersectionForFab);\n\n const {\n observe: observeIntersectionForNotch,\n freeze: freezeForNotch,\n unfreeze: unfreezeForNotch,\n } = useIntersectionObserver({\n rootRef: containerRef,\n margin: NOTCH_THRESHOLD,\n }, toggleScrollTools);\n\n useOnIntersect(fabTriggerRef, observeIntersectionForNotch);\n\n useOnChange(() => {\n if (isReady) {\n toggleScrollTools();\n }\n }, [isReady]);\n\n // Workaround for FAB and notch flickering with tall incoming message\n useOnChange(() => {\n freezeForFab();\n freezeForNotch();\n\n setTimeout(() => {\n unfreezeForNotch();\n unfreezeForFab();\n }, TOOLS_FREEZE_TIMEOUT);\n }, [messageIds]);\n\n return { backwardsTriggerRef, forwardsTriggerRef, fabTriggerRef };\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiSticker, ApiUpdateConnectionStateType } from '../../api/types';\n\nimport { selectChat } from '../../modules/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport { getUserIdDividend } from '../../modules/helpers';\n\nimport StickerButton from '../common/StickerButton';\n\nimport './ContactGreeting.scss';\n\ntype OwnProps = {\n userId: string;\n};\n\ntype StateProps = {\n sticker?: ApiSticker;\n lastUnreadMessageId?: number;\n connectionState?: ApiUpdateConnectionStateType;\n};\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\n\nconst ContactGreeting: FC = ({\n sticker,\n connectionState,\n lastUnreadMessageId,\n}) => {\n const {\n loadGreetingStickers,\n sendMessage,\n markMessageListRead,\n } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n });\n useEffect(() => {\n if (sticker || connectionState !== 'connectionStateReady') {\n return;\n }\n\n loadGreetingStickers();\n }, [connectionState, loadGreetingStickers, sticker]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && lastUnreadMessageId) {\n markMessageListRead({ maxId: lastUnreadMessageId });\n }\n }, [connectionState, markMessageListRead, lastUnreadMessageId]);\n\n const handleStickerSelect = useCallback((selectedSticker: ApiSticker) => {\n selectedSticker = {\n ...selectedSticker,\n isPreloadedGlobally: true,\n };\n sendMessage({ sticker: selectedSticker });\n }, [sendMessage]);\n\n return (\n
\n
\n

{lang('Conversation.EmptyPlaceholder')}

\n

{lang('Conversation.GreetingText')}

\n\n
\n {sticker && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const { stickers } = global.stickers.greeting;\n const dividend = getUserIdDividend(userId) + getUserIdDividend(global.currentUserId!);\n const sticker = stickers?.length ? stickers[dividend % stickers.length] : undefined;\n const chat = selectChat(global, userId);\n if (!chat) {\n return {};\n }\n\n return {\n sticker,\n lastUnreadMessageId: chat.lastMessage && chat.lastMessage.id !== chat.lastReadInboxMessageId\n ? chat.lastMessage.id\n : undefined,\n connectionState: global.connectionState,\n };\n },\n)(ContactGreeting));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { MessageListType } from '../../global/types';\n\nimport useLang, { LangFn } from '../../hooks/useLang';\n\nimport './NoMessages.scss';\n\ntype OwnProps = {\n chatId: string;\n isChatWithSelf?: boolean;\n type: MessageListType;\n isGroupChatJustCreated?: boolean;\n};\n\nconst NoMessages: FC = ({\n isChatWithSelf, type, isGroupChatJustCreated,\n}) => {\n const lang = useLang();\n\n if (type === 'scheduled') {\n return renderScheduled(lang);\n }\n\n if (isChatWithSelf) {\n return renderSavedMessages(lang);\n }\n\n if (isGroupChatJustCreated) {\n return renderGroup(lang);\n }\n\n return (\n
{lang('NoMessages')}
\n );\n};\n\nfunction renderScheduled(lang: LangFn) {\n return (\n
{lang('ScheduledMessages.EmptyPlaceholder')}
\n );\n}\n\nfunction renderSavedMessages(lang: LangFn) {\n return (\n
\n
\n \n

{lang('Conversation.CloudStorageInfo.Title')}

\n
    \n
  • {lang('Conversation.ClousStorageInfo.Description1')}
  • \n
  • {lang('Conversation.ClousStorageInfo.Description2')}
  • \n
  • {lang('Conversation.ClousStorageInfo.Description3')}
  • \n
  • {lang('Conversation.ClousStorageInfo.Description4')}
  • \n
\n
\n
\n );\n}\n\nfunction renderGroup(lang: LangFn) {\n return (\n
\n
\n

{lang('EmptyGroupInfo.Title')}

\n

{lang('EmptyGroupInfo.Subtitle')}

\n
    \n
  • {lang('EmptyGroupInfo.Line1')}
  • \n
  • {lang('EmptyGroupInfo.Line2')}
  • \n
  • {lang('EmptyGroupInfo.Line3')}
  • \n
  • {lang('EmptyGroupInfo.Line4')}
  • \n
\n
\n
\n );\n}\n\nexport default memo(NoMessages);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiMessage, ApiRestrictionReason, MAIN_THREAD_ID,\n} from '../../api/types';\nimport { MessageListType } from '../../global/types';\nimport { LoadMoreDirection } from '../../types';\n\nimport { ANIMATION_END_DELAY, LOCAL_MESSAGE_ID_BASE, MESSAGE_LIST_SLICE } from '../../config';\nimport {\n selectChatMessages,\n selectIsViewportNewest,\n selectFirstUnreadId,\n selectFocusedMessageId,\n selectChat,\n selectIsInSelectMode,\n selectIsChatWithSelf,\n selectChatBot,\n selectIsChatBotNotStarted,\n selectScrollOffset,\n selectThreadTopMessageId,\n selectFirstMessageId,\n selectScheduledMessages,\n selectCurrentMessageIds,\n} from '../../modules/selectors';\nimport {\n isChatChannel,\n isUserId,\n isChatWithRepliesBot,\n isChatGroup,\n} from '../../modules/helpers';\nimport { orderBy } from '../../util/iteratees';\nimport { fastRaf, debounce, onTickEnd } from '../../util/schedulers';\nimport useLayoutEffectWithPrevDeps from '../../hooks/useLayoutEffectWithPrevDeps';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport buildClassName from '../../util/buildClassName';\nimport { groupMessages } from './helpers/groupMessages';\nimport { preventMessageInputBlur } from './helpers/preventMessageInputBlur';\nimport useOnChange from '../../hooks/useOnChange';\nimport useStickyDates from './hooks/useStickyDates';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport resetScroll, { patchChromiumScroll } from '../../util/resetScroll';\nimport fastSmoothScroll, { isAnimatingScroll } from '../../util/fastSmoothScroll';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport useInterval from '../../hooks/useInterval';\n\nimport Loading from '../ui/Loading';\nimport MessageListContent from './MessageListContent';\nimport ContactGreeting from './ContactGreeting';\nimport NoMessages from './NoMessages';\n\nimport './MessageList.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n type: MessageListType;\n canPost: boolean;\n isReady: boolean;\n onFabToggle: (shouldShow: boolean) => void;\n onNotchToggle: (shouldShow: boolean) => void;\n hasTools?: boolean;\n withBottomShift?: boolean;\n};\n\ntype StateProps = {\n isChatLoaded?: boolean;\n isChannelChat?: boolean;\n isGroupChat?: boolean;\n isChatWithSelf?: boolean;\n isRepliesChat?: boolean;\n isCreator?: boolean;\n isBot?: boolean;\n messageIds?: number[];\n messagesById?: Record;\n firstUnreadId?: number;\n isViewportNewest?: boolean;\n isRestricted?: boolean;\n restrictionReason?: ApiRestrictionReason;\n focusingId?: number;\n isSelectModeActive?: boolean;\n animationLevel?: number;\n lastMessage?: ApiMessage;\n botDescription?: string;\n threadTopMessageId?: number;\n threadFirstMessageId?: number;\n hasLinkedChat?: boolean;\n lastSyncTime?: number;\n};\n\nconst MESSAGE_REACTIONS_POLLING_INTERVAL = 15 * 1000;\nconst BOTTOM_THRESHOLD = 20;\nconst UNREAD_DIVIDER_TOP = 10;\nconst UNREAD_DIVIDER_TOP_WITH_TOOLS = 60;\nconst SCROLL_DEBOUNCE = 200;\nconst MESSAGE_ANIMATION_DURATION = 500;\nconst BOTTOM_FOCUS_MARGIN = 20;\nconst SELECT_MODE_ANIMATION_DURATION = 200;\nconst UNREAD_DIVIDER_CLASS = 'unread-divider';\n\nconst runDebouncedForScroll = debounce((cb) => cb(), SCROLL_DEBOUNCE, false);\n\nconst MessageList: FC = ({\n chatId,\n threadId,\n type,\n hasTools,\n onFabToggle,\n onNotchToggle,\n isChatLoaded,\n isChannelChat,\n isGroupChat,\n canPost,\n isReady,\n isChatWithSelf,\n isRepliesChat,\n isCreator,\n isBot,\n messageIds,\n messagesById,\n firstUnreadId,\n isViewportNewest,\n threadFirstMessageId,\n isRestricted,\n restrictionReason,\n focusingId,\n isSelectModeActive,\n lastMessage,\n botDescription,\n threadTopMessageId,\n hasLinkedChat,\n lastSyncTime,\n withBottomShift,\n}) => {\n const {\n loadViewportMessages, setScrollOffset, loadSponsoredMessages, loadMessageReactions,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n // We update local cached `scrollOffsetRef` when opening chat.\n // Then we update global version every second on scrolling.\n const scrollOffsetRef = useRef((type === 'thread' && selectScrollOffset(getGlobal(), chatId, threadId)) || 0);\n const anchorIdRef = useRef();\n const anchorTopRef = useRef();\n const listItemElementsRef = useRef();\n const memoFirstUnreadIdRef = useRef();\n const memoUnreadDividerBeforeIdRef = useRef();\n const memoFocusingIdRef = useRef();\n const isScrollTopJustUpdatedRef = useRef(false);\n const shouldAnimateAppearanceRef = useRef(Boolean(lastMessage));\n\n const [containerHeight, setContainerHeight] = useState();\n\n const areMessagesLoaded = Boolean(messageIds);\n\n useOnChange(() => {\n // We only need it first time when message list appears\n if (areMessagesLoaded) {\n onTickEnd(() => {\n shouldAnimateAppearanceRef.current = false;\n });\n }\n }, [areMessagesLoaded]);\n\n // Updated every time (to be used from intersection callback closure)\n useOnChange(() => {\n memoFirstUnreadIdRef.current = firstUnreadId;\n }, [firstUnreadId]);\n\n useOnChange(() => {\n if (isChannelChat && isReady && lastSyncTime) {\n loadSponsoredMessages({ chatId });\n }\n }, [chatId, isReady, isChannelChat, lastSyncTime]);\n\n // Updated only once when messages are loaded (as we want the unread divider to keep its position)\n useOnChange(() => {\n if (areMessagesLoaded) {\n memoUnreadDividerBeforeIdRef.current = memoFirstUnreadIdRef.current;\n }\n }, [areMessagesLoaded]);\n\n useOnChange(() => {\n memoFocusingIdRef.current = focusingId;\n }, [focusingId]);\n\n const messageGroups = useMemo(() => {\n if (!messageIds || !messagesById) {\n return undefined;\n }\n\n const viewportIds = threadTopMessageId && (!messageIds[0] || threadFirstMessageId === messageIds[0])\n ? [threadTopMessageId, ...messageIds]\n : messageIds;\n\n if (!viewportIds.length) {\n return undefined;\n }\n\n const listedMessages = viewportIds.map((id) => messagesById[id]).filter(Boolean);\n return groupMessages(orderBy(listedMessages, ['date', 'id']), memoUnreadDividerBeforeIdRef.current);\n }, [messageIds, messagesById, threadFirstMessageId, threadTopMessageId]);\n\n useInterval(() => {\n if (!messageIds || !messagesById) {\n return;\n }\n const ids = messageIds.filter((l) => messagesById[l]?.reactions);\n\n if (!ids.length) return;\n\n loadMessageReactions({ chatId, ids });\n }, MESSAGE_REACTIONS_POLLING_INTERVAL);\n\n const loadMoreAround = useMemo(() => {\n if (type !== 'thread') {\n return undefined;\n }\n\n return debounce(() => loadViewportMessages({ direction: LoadMoreDirection.Around }), 1000, true, false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadViewportMessages, messageIds]);\n\n const { isScrolled, updateStickyDates } = useStickyDates();\n\n const isScrollingRef = useRef();\n const isScrollPatchNeededRef = useRef();\n\n const handleScroll = useCallback(() => {\n if (isScrollTopJustUpdatedRef.current) {\n isScrollTopJustUpdatedRef.current = false;\n return;\n }\n\n isScrollingRef.current = true;\n\n const container = containerRef.current!;\n\n if (!memoFocusingIdRef.current) {\n updateStickyDates(container, hasTools);\n }\n\n runDebouncedForScroll(() => {\n isScrollingRef.current = false;\n\n fastRaf(() => {\n if (!container.parentElement) {\n return;\n }\n\n scrollOffsetRef.current = container.scrollHeight - container.scrollTop;\n\n if (type === 'thread') {\n setScrollOffset({ chatId, threadId, scrollOffset: scrollOffsetRef.current });\n }\n });\n });\n }, [updateStickyDates, hasTools, type, setScrollOffset, chatId, threadId]);\n\n // Container resize observer (caused by Composer reply/webpage panels)\n useEffect(() => {\n if (!('ResizeObserver' in window) || process.env.APP_ENV === 'perf') {\n return undefined;\n }\n\n const observer = new ResizeObserver(([entry]) => {\n // During animation\n if (!(entry.target as HTMLDivElement).offsetParent) {\n return;\n }\n\n setContainerHeight(entry.contentRect.height);\n });\n\n observer.observe(containerRef.current!);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n // Memorize height for scroll animation\n const { height: windowHeight } = useWindowSize();\n\n useEffect(() => {\n containerRef.current!.dataset.normalHeight = String(containerRef.current!.offsetHeight);\n }, [windowHeight, canPost]);\n\n // Initial message loading\n useEffect(() => {\n if (!loadMoreAround || !isChatLoaded || isRestricted || focusingId) {\n return;\n }\n\n // Loading history while sending a message can return the same message and cause ambiguity\n const isLastMessageLocal = messageIds && messageIds[messageIds.length - 1] >= LOCAL_MESSAGE_ID_BASE;\n if (isLastMessageLocal) {\n return;\n }\n\n const container = containerRef.current!;\n\n if (!messageIds || (\n messageIds.length < MESSAGE_LIST_SLICE / 2\n && (container.firstElementChild as HTMLDivElement).clientHeight <= container.offsetHeight\n )) {\n loadMoreAround();\n }\n }, [isChatLoaded, messageIds, loadMoreAround, focusingId, isRestricted]);\n\n // Remember scroll position before repositioning it\n useOnChange(() => {\n if (!messageIds || !listItemElementsRef.current) {\n return;\n }\n\n const preservedItemElements = listItemElementsRef.current\n .filter((element) => messageIds.includes(Number(element.dataset.messageId)));\n\n // We avoid the very first item as it may be a partly-loaded album\n // and also because it may be removed when messages limit is reached\n const anchor = preservedItemElements[1] || preservedItemElements[0];\n if (!anchor) {\n return;\n }\n\n anchorIdRef.current = anchor.id;\n anchorTopRef.current = anchor.getBoundingClientRect().top;\n // This should match deps for `useLayoutEffectWithPrevDeps` below\n }, [messageIds, isViewportNewest, containerHeight, hasTools]);\n\n // Handles updated message list, takes care of scroll repositioning\n useLayoutEffectWithPrevDeps(([\n prevMessageIds, prevIsViewportNewest, prevContainerHeight,\n ]) => {\n const container = containerRef.current!;\n listItemElementsRef.current = Array.from(container.querySelectorAll('.message-list-item'));\n\n const hasLastMessageChanged = (\n messageIds && prevMessageIds && messageIds[messageIds.length - 1] !== prevMessageIds[prevMessageIds.length - 1]\n );\n const hasViewportShifted = (\n messageIds?.[0] !== prevMessageIds?.[0] && messageIds?.length === (MESSAGE_LIST_SLICE / 2 + 1)\n );\n const wasMessageAdded = hasLastMessageChanged && !hasViewportShifted;\n const isAlreadyFocusing = messageIds && memoFocusingIdRef.current === messageIds[messageIds.length - 1];\n\n // Add extra height when few messages to allow smooth scroll animation. Uses assumption that `parentElement`\n // is a Transition slide and its CSS class can not be reset in a declarative way.\n const shouldForceScroll = (\n isViewportNewest\n && wasMessageAdded\n && (messageIds && messageIds.length < MESSAGE_LIST_SLICE / 2)\n && !container.parentElement!.classList.contains('force-messages-scroll')\n && (container.firstElementChild as HTMLDivElement)!.clientHeight <= container.offsetHeight * 2\n );\n\n if (shouldForceScroll) {\n container.parentElement!.classList.add('force-messages-scroll');\n\n setTimeout(() => {\n if (container.parentElement) {\n container.parentElement.classList.remove('force-messages-scroll');\n }\n }, MESSAGE_ANIMATION_DURATION);\n }\n\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const scrollOffset = scrollOffsetRef.current;\n const lastItemElement = listItemElementsRef.current[listItemElementsRef.current.length - 1];\n\n let bottomOffset = scrollOffset - (prevContainerHeight || offsetHeight);\n if (wasMessageAdded) {\n // If two new messages come at once (e.g. when bot responds) then the first message will update `scrollOffset`\n // right away (before animation) which creates inconsistency until the animation completes. To workaround that,\n // we calculate `isAtBottom` with a \"buffer\" of the latest message height (this is approximate).\n const lastItemHeight = lastItemElement ? lastItemElement.offsetHeight : 0;\n bottomOffset -= lastItemHeight;\n }\n const isAtBottom = isViewportNewest && prevIsViewportNewest && bottomOffset <= BOTTOM_THRESHOLD;\n\n let newScrollTop!: number;\n\n if (wasMessageAdded && isAtBottom && !isAlreadyFocusing) {\n if (lastItemElement) {\n fastRaf(() => {\n fastSmoothScroll(\n container,\n lastItemElement,\n 'end',\n BOTTOM_FOCUS_MARGIN,\n );\n });\n }\n\n newScrollTop = scrollHeight - offsetHeight;\n scrollOffsetRef.current = Math.max(Math.ceil(scrollHeight - newScrollTop), offsetHeight);\n\n // Scroll still needs to be restored after container resize\n if (!shouldForceScroll) {\n return;\n }\n }\n\n if (process.env.APP_ENV === 'perf') {\n // eslint-disable-next-line no-console\n console.time('scrollTop');\n }\n\n const isResized = prevContainerHeight !== undefined && prevContainerHeight !== containerHeight;\n const anchor = anchorIdRef.current && container.querySelector(`#${anchorIdRef.current}`);\n const unreadDivider = (\n !anchor\n && memoUnreadDividerBeforeIdRef.current\n && container.querySelector(`.${UNREAD_DIVIDER_CLASS}`)\n );\n\n if (isAtBottom && isResized) {\n if (isAnimatingScroll()) {\n return;\n }\n\n newScrollTop = scrollHeight - offsetHeight;\n } else if (anchor) {\n if (isScrollPatchNeededRef.current) {\n isScrollPatchNeededRef.current = false;\n patchChromiumScroll(container);\n }\n\n const newAnchorTop = anchor.getBoundingClientRect().top;\n newScrollTop = scrollTop + (newAnchorTop - (anchorTopRef.current || 0));\n } else if (unreadDivider) {\n newScrollTop = Math.min(\n unreadDivider.offsetTop - (hasTools ? UNREAD_DIVIDER_TOP_WITH_TOOLS : UNREAD_DIVIDER_TOP),\n scrollHeight - scrollOffset,\n );\n } else {\n newScrollTop = scrollHeight - scrollOffset;\n }\n\n resetScroll(container, Math.ceil(newScrollTop));\n\n if (!memoFocusingIdRef.current) {\n isScrollTopJustUpdatedRef.current = true;\n fastRaf(() => {\n isScrollTopJustUpdatedRef.current = false;\n });\n }\n\n scrollOffsetRef.current = Math.max(Math.ceil(scrollHeight - newScrollTop), offsetHeight);\n\n if (process.env.APP_ENV === 'perf') {\n // eslint-disable-next-line no-console\n console.timeEnd('scrollTop');\n }\n // This should match deps for `useOnChange` above\n }, [messageIds, isViewportNewest, containerHeight, hasTools] as const);\n\n useEffectWithPrevDeps(([prevIsSelectModeActive]) => {\n if (prevIsSelectModeActive !== undefined) {\n dispatchHeavyAnimationEvent(SELECT_MODE_ANIMATION_DURATION + ANIMATION_END_DELAY);\n }\n }, [isSelectModeActive]);\n\n const lang = useLang();\n\n const isPrivate = Boolean(chatId && isUserId(chatId));\n const withUsers = Boolean((!isPrivate && !isChannelChat) || isChatWithSelf || isRepliesChat);\n const noAvatars = Boolean(!withUsers || isChannelChat);\n const shouldRenderGreeting = isUserId(chatId) && !isChatWithSelf && !isBot\n && (\n (\n !messageGroups && !lastMessage && messageIds\n // Used to avoid flickering when deleting a greeting that has just been sent\n && (!listItemElementsRef.current || listItemElementsRef.current.length === 0)\n )\n || (messageIds?.length === 1 && messagesById?.[messageIds[0]]?.content.action?.type === 'contactSignUp')\n || (lastMessage?.content?.action?.type === 'contactSignUp')\n );\n\n const isGroupChatJustCreated = isGroupChat && isCreator\n && messageIds?.length === 1 && messagesById?.[messageIds[0]]?.content.action?.type === 'chatCreate';\n\n const className = buildClassName(\n 'MessageList custom-scroll',\n noAvatars && 'no-avatars',\n !canPost && 'no-composer',\n type === 'pinned' && 'type-pinned',\n withBottomShift && 'with-bottom-shift',\n isSelectModeActive && 'select-mode-active',\n isScrolled && 'scrolled',\n !isReady && 'is-animating',\n );\n\n return (\n \n {isRestricted ? (\n
\n \n {restrictionReason ? restrictionReason.text : `This is a private ${isChannelChat ? 'channel' : 'chat'}`}\n \n
\n ) : botDescription ? (\n
{renderText(lang(botDescription), ['br', 'emoji', 'links'])}
\n ) : shouldRenderGreeting ? (\n \n ) : messageIds && (!messageGroups || isGroupChatJustCreated) ? (\n \n ) : ((messageIds && messageGroups) || lastMessage) ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId, type }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return {};\n }\n\n const messageIds = selectCurrentMessageIds(global, chatId, threadId, type);\n const messagesById = type === 'scheduled'\n ? selectScheduledMessages(global, chatId)\n : selectChatMessages(global, chatId);\n const threadTopMessageId = selectThreadTopMessageId(global, chatId, threadId);\n\n if (\n threadId !== MAIN_THREAD_ID\n && !(messagesById && threadTopMessageId && messagesById[threadTopMessageId])\n ) {\n return {};\n }\n\n const { isRestricted, restrictionReason, lastMessage } = chat;\n const focusingId = selectFocusedMessageId(global, chatId);\n\n const withLastMessageWhenPreloading = (\n threadId === MAIN_THREAD_ID\n && !messageIds && !chat.unreadCount && !focusingId && lastMessage && !lastMessage.groupedId\n );\n\n const chatBot = selectChatBot(global, chatId)!;\n let botDescription: string | undefined;\n if (selectIsChatBotNotStarted(global, chatId)) {\n if (chatBot.fullInfo) {\n botDescription = chatBot.fullInfo.botDescription || 'NoMessages';\n } else {\n botDescription = 'Updating bot info...';\n }\n }\n\n return {\n isChatLoaded: true,\n isRestricted,\n restrictionReason,\n isChannelChat: isChatChannel(chat),\n isGroupChat: isChatGroup(chat),\n isCreator: chat.isCreator,\n isChatWithSelf: selectIsChatWithSelf(global, chatId),\n isRepliesChat: isChatWithRepliesBot(chatId),\n isBot: Boolean(chatBot),\n messageIds,\n messagesById,\n firstUnreadId: selectFirstUnreadId(global, chatId, threadId),\n isViewportNewest: type !== 'thread' || selectIsViewportNewest(global, chatId, threadId),\n threadFirstMessageId: selectFirstMessageId(global, chatId, threadId),\n focusingId,\n isSelectModeActive: selectIsInSelectMode(global),\n botDescription,\n threadTopMessageId,\n hasLinkedChat: chat.fullInfo && ('linkedChatId' in chat.fullInfo)\n ? Boolean(chat.fullInfo.linkedChatId)\n : undefined,\n lastSyncTime: global.lastSyncTime,\n ...(withLastMessageWhenPreloading && { lastMessage }),\n };\n },\n)(MessageList));\n","import { useCallback } from '../../../lib/teact/teact';\n\nimport { fastRaf } from '../../../util/schedulers';\nimport useDebounce from '../../../hooks/useDebounce';\nimport useFlag from '../../../hooks/useFlag';\n\nconst DEBOUNCE = 1000;\nconst STICKY_TOP = 10;\nconst STICKY_TOP_WITH_TOOLS = 60;\n\nexport default function useStickyDates() {\n // For some reason we can not synchronously hide a sticky element (from `useLayoutEffect`) when chat opens\n // so we will add `position: sticky` only after first scroll. There would be no animation on the first show though.\n const [isScrolled, markIsScrolled] = useFlag(false);\n\n const runDebounced = useDebounce(DEBOUNCE, true);\n\n const updateStickyDates = useCallback((container: HTMLDivElement, hasTools?: boolean) => {\n markIsScrolled();\n\n if (!document.body.classList.contains('is-scrolling-messages')) {\n fastRaf(() => {\n document.body.classList.add('is-scrolling-messages');\n });\n }\n\n runDebounced(() => {\n fastRaf(() => {\n const currentStuck = document.querySelector('.stuck');\n if (currentStuck) {\n currentStuck.classList.remove('stuck');\n }\n\n const stuckDateEl = findStuckDate(container, hasTools);\n if (stuckDateEl) {\n stuckDateEl.classList.add('stuck');\n }\n\n document.body.classList.remove('is-scrolling-messages');\n });\n });\n }, [markIsScrolled, runDebounced]);\n\n return {\n isScrolled,\n updateStickyDates,\n };\n}\n\nfunction findStuckDate(container: HTMLElement, hasTools?: boolean) {\n const allElements = container.querySelectorAll('.sticky-date');\n const containerTop = container.scrollTop;\n\n return Array.from(allElements).find((el) => {\n const { offsetTop, offsetHeight } = el;\n const top = offsetTop - containerTop;\n return -offsetHeight <= top && top <= (hasTools ? STICKY_TOP_WITH_TOOLS : STICKY_TOP);\n });\n}\n","import React, {\n FC, useCallback, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { MessageListType } from '../../global/types';\nimport { MAIN_THREAD_ID } from '../../api/types';\n\nimport { selectChat, selectCurrentMessageList } from '../../modules/selectors';\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport buildClassName from '../../util/buildClassName';\nimport fastSmoothScroll from '../../util/fastSmoothScroll';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport './ScrollDownButton.scss';\n\ntype OwnProps = {\n isShown: boolean;\n canPost?: boolean;\n withExtraShift?: boolean;\n};\n\ntype StateProps = {\n messageListType?: MessageListType;\n unreadCount?: number;\n};\n\nconst FOCUS_MARGIN = 20;\n\nconst ScrollDownButton: FC = ({\n isShown,\n canPost,\n messageListType,\n unreadCount,\n withExtraShift,\n}) => {\n const { focusNextReply } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const elementRef = useRef(null);\n\n const handleClick = useCallback(() => {\n if (!isShown) {\n return;\n }\n\n if (messageListType === 'thread') {\n focusNextReply();\n } else {\n const messagesContainer = elementRef.current!.parentElement!.querySelector('.MessageList')!;\n const messageElements = messagesContainer.querySelectorAll('.message-list-item');\n const lastMessageElement = messageElements[messageElements.length - 1];\n if (!lastMessageElement) {\n return;\n }\n\n fastSmoothScroll(messagesContainer, lastMessageElement, 'end', FOCUS_MARGIN);\n }\n }, [isShown, messageListType, focusNextReply]);\n\n const fabClassName = buildClassName(\n 'ScrollDownButton',\n isShown && 'revealed',\n !canPost && 'no-composer',\n withExtraShift && 'with-extra-shift',\n );\n\n return (\n
\n
\n \n \n \n {Boolean(unreadCount) && (\n
{formatIntegerCompact(unreadCount!)}
\n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return {};\n }\n\n const { chatId, threadId, type: messageListType } = currentMessageList;\n const chat = selectChat(global, chatId);\n\n return {\n messageListType,\n unreadCount: chat && threadId === MAIN_THREAD_ID && messageListType === 'thread' ? chat.unreadCount : undefined,\n };\n },\n)(ScrollDownButton));\n","import { ApiAttachment } from '../../../../api/types';\nimport { SUPPORTED_IMAGE_CONTENT_TYPES, SUPPORTED_VIDEO_CONTENT_TYPES } from '../../../../config';\nimport {\n preloadImage,\n preloadVideo,\n createPosterForVideo,\n fetchBlob,\n} from '../../../../util/files';\nimport { scaleImage } from '../../../../util/imageResize';\n\nconst MAX_QUICK_IMG_SIZE = 1280; // px\nconst FILE_EXT_REGEX = /\\.[^/.]+$/;\n\nexport default async function buildAttachment(\n filename: string, blob: Blob, isQuick: boolean, options?: Partial,\n): Promise {\n const blobUrl = URL.createObjectURL(blob);\n const { type: mimeType, size } = blob;\n let quick;\n let previewBlobUrl;\n\n if (SUPPORTED_IMAGE_CONTENT_TYPES.has(mimeType)) {\n if (isQuick) {\n const img = await preloadImage(blobUrl);\n const { width, height } = img;\n\n if (width > MAX_QUICK_IMG_SIZE || height > MAX_QUICK_IMG_SIZE || mimeType !== 'image/jpeg') {\n const resizedUrl = await scaleImage(blobUrl, MAX_QUICK_IMG_SIZE / Math.max(width, height), 'image/jpeg');\n URL.revokeObjectURL(blobUrl);\n const newBlob = await fetchBlob(resizedUrl);\n return buildAttachment(filename, newBlob, true, options);\n }\n\n if (mimeType === 'image/jpeg') {\n filename = filename.replace(FILE_EXT_REGEX, '.jpg');\n }\n\n quick = { width, height };\n } else {\n previewBlobUrl = blobUrl;\n }\n } else if (SUPPORTED_VIDEO_CONTENT_TYPES.has(mimeType)) {\n const { videoWidth: width, videoHeight: height, duration } = await preloadVideo(blobUrl);\n quick = { width, height, duration };\n\n previewBlobUrl = await createPosterForVideo(blobUrl);\n }\n\n return {\n blobUrl,\n filename,\n mimeType,\n size,\n quick,\n previewBlobUrl,\n ...options,\n };\n}\n","export default function insertHtmlInSelection(html: string) {\n const selection = window.getSelection();\n\n if (selection?.getRangeAt && selection.rangeCount) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n\n const fragment = range.createContextualFragment(html);\n const lastInsertedNode = fragment.lastChild;\n range.insertNode(fragment);\n if (lastInsertedNode) {\n range.setStartAfter(lastInsertedNode);\n range.setEndAfter(lastInsertedNode);\n } else {\n range.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n }\n}\n","import { IS_IOS } from '../../../../util/environment';\n\nlet resetInput: HTMLInputElement;\n\nif (IS_IOS) {\n resetInput = document.createElement('input');\n resetInput.classList.add('for-ios-autocapitalization-fix');\n document.body.appendChild(resetInput);\n}\n\n// https://stackoverflow.com/a/55652503\nexport default function applyIosAutoCapitalizationFix(inputEl: HTMLElement) {\n resetInput.focus();\n inputEl.focus();\n}\n","import { IOpusRecorder } from 'opus-recorder';\n\nexport type Result = { blob: Blob; duration: number; waveform: number[] };\n\nconst encoderPath = new URL('opus-recorder/dist/encoderWorker.min', import.meta.url).href;\nconst MIN_RECORDING_TIME = 1000;\nconst POLYFILL_OPTIONS = { encoderPath, reuseWorker: true };\nconst BLOB_PARAMS = { type: 'audio/ogg' };\nconst FFT_SIZE = 64;\nconst MIN_VOLUME = 0.1;\n\nlet opusRecorderPromise: Promise<{ default: IOpusRecorder }>;\nlet OpusRecorder: IOpusRecorder;\nlet mediaRecorder: IOpusRecorder;\n\nexport async function init() {\n if (!opusRecorderPromise) {\n opusRecorderPromise = import('opus-recorder');\n OpusRecorder = (await opusRecorderPromise).default;\n mediaRecorder = new OpusRecorder(POLYFILL_OPTIONS);\n }\n\n return opusRecorderPromise;\n}\n\nexport async function start(analyzerCallback: Function) {\n await startMediaRecorder();\n\n const startedAt = Date.now();\n let pausedAt: number;\n const chunks: Uint8Array[] = [];\n const waveform: number[] = [];\n\n mediaRecorder.ondataavailable = (typedArray) => {\n chunks.push(typedArray);\n };\n\n const releaseAnalyzer = subscribeToAnalyzer(mediaRecorder, (volume: number) => {\n waveform.push(volume * 255);\n analyzerCallback(volume);\n });\n\n return {\n stop: () => new Promise((resolve, reject) => {\n mediaRecorder.onstop = () => {\n resolve({\n blob: new Blob(chunks, BLOB_PARAMS),\n duration: Math.round(((pausedAt || Date.now()) - startedAt) / 1000),\n waveform,\n });\n };\n mediaRecorder.onerror = reject;\n\n const delayStop = Math.max(0, startedAt + MIN_RECORDING_TIME - Date.now());\n setTimeout(() => {\n mediaRecorder.stop();\n releaseAnalyzer();\n }, delayStop);\n }),\n pause: () => {\n const delayStop = Math.max(0, startedAt + MIN_RECORDING_TIME - Date.now());\n setTimeout(() => {\n mediaRecorder.pause();\n pausedAt = Date.now();\n releaseAnalyzer();\n }, delayStop);\n },\n };\n}\n\nasync function startMediaRecorder() {\n await init();\n await mediaRecorder.start();\n}\n\nfunction subscribeToAnalyzer(recorder: IOpusRecorder, cb: Function) {\n const source = recorder.sourceNode;\n const analyser = source.context.createAnalyser();\n analyser.fftSize = FFT_SIZE;\n source.connect(analyser);\n\n const dataLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(dataLength);\n let isDestroyed = false;\n\n function tick() {\n if (isDestroyed) {\n return;\n }\n\n analyser.getByteFrequencyData(dataArray);\n\n const sum = dataArray.reduce((acc, current) => acc + current, 0);\n const mean = (sum / dataLength);\n const volume = mean / 255;\n\n cb(volume < MIN_VOLUME ? 0 : volume);\n\n requestAnimationFrame(tick);\n }\n\n tick();\n\n return () => {\n isDestroyed = true;\n };\n}\n","import { StateHookSetter, useEffect } from '../../../../lib/teact/teact';\nimport { ApiAttachment, ApiMessage } from '../../../../api/types';\n\nimport buildAttachment from '../helpers/buildAttachment';\nimport { EDITABLE_INPUT_ID, EDITABLE_INPUT_MODAL_ID } from '../../../../config';\nimport getFilesFromDataTransferItems from '../helpers/getFilesFromDataTransferItems';\n\nconst CLIPBOARD_ACCEPTED_TYPES = ['image/png', 'image/jpeg', 'image/gif'];\nconst MAX_MESSAGE_LENGTH = 4096;\n\nconst useClipboardPaste = (\n insertTextAndUpdateCursor: (text: string, inputId?: string) => void,\n setAttachments: StateHookSetter,\n editedMessage: ApiMessage | undefined,\n) => {\n useEffect(() => {\n async function handlePaste(e: ClipboardEvent) {\n if (!e.clipboardData) {\n return;\n }\n\n const input = document.activeElement;\n if (input && ![EDITABLE_INPUT_ID, EDITABLE_INPUT_MODAL_ID].includes(input.id)) {\n return;\n }\n\n\n const pastedText = e.clipboardData.getData('text').substring(0, MAX_MESSAGE_LENGTH);\n const { items } = e.clipboardData;\n let files: File[] = [];\n\n e.preventDefault();\n if (items.length > 0) {\n files = await getFilesFromDataTransferItems(items);\n }\n\n if (files.length === 0 && !pastedText) {\n return;\n }\n\n if (files.length > 0 && !editedMessage) {\n const newAttachments = await Promise.all(files.map((file) => {\n return buildAttachment(file.name, file, files.length === 1 && CLIPBOARD_ACCEPTED_TYPES.includes(file.type));\n }));\n setAttachments((attachments) => attachments.concat(newAttachments));\n }\n\n if (pastedText) {\n insertTextAndUpdateCursor(pastedText, input?.id);\n }\n }\n\n document.addEventListener('paste', handlePaste, false);\n\n return () => {\n document.removeEventListener('paste', handlePaste, false);\n };\n }, [insertTextAndUpdateCursor, editedMessage, setAttachments]);\n};\n\nexport default useClipboardPaste;\n","import { useCallback, useEffect, useMemo } from '../../../../lib/teact/teact';\nimport { getDispatch } from '../../../../lib/teact/teactn';\n\nimport { ApiFormattedText, ApiMessage } from '../../../../api/types';\n\nimport { DRAFT_DEBOUNCE, EDITABLE_INPUT_ID } from '../../../../config';\nimport usePrevious from '../../../../hooks/usePrevious';\nimport { debounce } from '../../../../util/schedulers';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport parseMessageInput from '../../../../util/parseMessageInput';\nimport useBackgroundMode from '../../../../hooks/useBackgroundMode';\nimport useBeforeUnload from '../../../../hooks/useBeforeUnload';\nimport { IS_TOUCH_ENV } from '../../../../util/environment';\nimport { getTextWithEntitiesAsHtml } from '../../../common/helpers/renderTextWithEntities';\n\n// Used to avoid running debounced callbacks when chat changes.\nlet currentChatId: string | undefined;\nlet currentThreadId: number | undefined;\n\nconst useDraft = (\n draft: ApiFormattedText | undefined,\n chatId: string,\n threadId: number,\n htmlRef: { current: string },\n setHtml: (html: string) => void,\n editedMessage: ApiMessage | undefined,\n) => {\n const { saveDraft, clearDraft } = getDispatch();\n\n const updateDraft = useCallback((draftChatId: string, draftThreadId: number) => {\n const currentHtml = htmlRef.current;\n if (currentHtml.length && !editedMessage) {\n saveDraft({ chatId: draftChatId, threadId: draftThreadId, draft: parseMessageInput(currentHtml!) });\n } else {\n clearDraft({ chatId: draftChatId, threadId: draftThreadId });\n }\n }, [clearDraft, editedMessage, htmlRef, saveDraft]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const runDebouncedForSaveDraft = useMemo(() => debounce((cb) => cb(), DRAFT_DEBOUNCE, false), [chatId]);\n\n const prevChatId = usePrevious(chatId);\n const prevThreadId = usePrevious(threadId);\n\n // Save draft on chat change\n useEffect(() => {\n currentChatId = chatId;\n currentThreadId = threadId;\n\n return () => {\n currentChatId = undefined;\n currentThreadId = undefined;\n\n updateDraft(chatId, threadId);\n };\n }, [chatId, threadId, updateDraft]);\n\n // Restore draft on chat change\n useEffect(() => {\n if (chatId === prevChatId && threadId === prevThreadId) {\n return;\n }\n\n if (!draft) {\n return;\n }\n\n setHtml(getTextWithEntitiesAsHtml(draft));\n\n if (!IS_TOUCH_ENV) {\n requestAnimationFrame(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n focusEditableElement(messageInput, true);\n });\n }\n }, [chatId, threadId, draft, setHtml, updateDraft, prevChatId, prevThreadId]);\n\n const html = htmlRef.current;\n // Update draft when input changes\n const prevHtml = usePrevious(html);\n useEffect(() => {\n if (!chatId || !threadId || prevChatId !== chatId || prevThreadId !== threadId || prevHtml === html) {\n return;\n }\n\n if (html.length) {\n runDebouncedForSaveDraft(() => {\n if (currentChatId !== chatId || currentThreadId !== threadId) {\n return;\n }\n\n updateDraft(chatId, threadId);\n });\n } else {\n updateDraft(chatId, threadId);\n }\n }, [chatId, html, prevChatId, prevHtml, prevThreadId, runDebouncedForSaveDraft, threadId, updateDraft]);\n\n const handleBlur = useCallback(() => {\n if (chatId && threadId) {\n updateDraft(chatId, threadId);\n }\n }, [chatId, threadId, updateDraft]);\n\n useBackgroundMode(handleBlur);\n useBeforeUnload(handleBlur);\n};\n\nexport default useDraft;\n","import { useState } from '../lib/teact/teact';\n\nimport useDebounce from './useDebounce';\nimport useOnChange from './useOnChange';\nimport useHeavyAnimationCheck from './useHeavyAnimationCheck';\nimport useFlag from './useFlag';\n\nexport default function useDebouncedMemo(\n resolverFn: () => R, ms: number, dependencies: D,\n): R | undefined {\n const runDebounced = useDebounce(ms, true);\n const [value, setValue] = useState();\n const [isFrozen, freeze, unfreeze] = useFlag();\n\n useHeavyAnimationCheck(freeze, unfreeze);\n\n useOnChange(() => {\n if (isFrozen) {\n return;\n }\n\n runDebounced(() => {\n setValue(resolverFn());\n });\n }, [...dependencies, isFrozen]);\n\n return value;\n}\n","import { useCallback, useEffect } from '../../../../lib/teact/teact';\nimport { getDispatch } from '../../../../lib/teact/teactn';\nimport { InlineBotSettings } from '../../../../types';\nimport useFlag from '../../../../hooks/useFlag';\nimport usePrevious from '../../../../hooks/usePrevious';\nimport useDebouncedMemo from '../../../../hooks/useDebouncedMemo';\n\nconst DEBOUNCE_MS = 300;\nconst INLINE_BOT_QUERY_REGEXP = /^@([a-z0-9_]{1,32})[\\u00A0\\u0020]+(.*)/i;\nconst HAS_NEW_LINE = /^@([a-z0-9_]{1,32})[\\u00A0\\u0020]+\\n{2,}/i;\nconst MEMO_NO_RESULT = {\n username: '',\n query: '',\n canShowHelp: false,\n usernameLowered: '',\n};\n\nconst tempEl = document.createElement('div');\n\nexport default function useInlineBotTooltip(\n isAllowed: boolean,\n chatId: string,\n html: string,\n inlineBots?: Record,\n) {\n const { queryInlineBot, resetInlineBot } = getDispatch();\n\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const {\n username, query, canShowHelp, usernameLowered,\n } = useDebouncedMemo(() => parseBotQuery(html), DEBOUNCE_MS, [html]) || {};\n const prevQuery = usePrevious(query);\n const prevUsername = usePrevious(username);\n const inlineBotData = usernameLowered ? inlineBots?.[usernameLowered] : undefined;\n const {\n id: botId,\n switchPm,\n offset,\n results,\n isGallery,\n help,\n } = inlineBotData || {};\n\n useEffect(() => {\n if (prevQuery !== query) {\n unmarkIsOpen();\n }\n }, [prevQuery, query, unmarkIsOpen]);\n\n useEffect(() => {\n if (isAllowed && usernameLowered && chatId) {\n queryInlineBot({ chatId, username: usernameLowered, query });\n }\n }, [query, isAllowed, queryInlineBot, chatId, usernameLowered]);\n\n const loadMore = useCallback(() => {\n queryInlineBot({\n chatId, username: usernameLowered, query, offset,\n });\n }, [offset, chatId, query, queryInlineBot, usernameLowered]);\n\n useEffect(() => {\n if (isAllowed && botId && (switchPm || (results?.length))) {\n markIsOpen();\n } else {\n unmarkIsOpen();\n }\n }, [botId, isAllowed, markIsOpen, results, switchPm, unmarkIsOpen]);\n\n if (prevUsername !== username) {\n resetInlineBot({ username: prevUsername });\n }\n\n return {\n isOpen,\n id: botId,\n isGallery,\n switchPm,\n results,\n closeTooltip: unmarkIsOpen,\n help: canShowHelp && help ? `@${username} ${help}` : undefined,\n loadMore,\n };\n}\n\nfunction parseBotQuery(html: string) {\n const text = getPlainText(html);\n const result = text.match(INLINE_BOT_QUERY_REGEXP);\n if (!result) {\n return MEMO_NO_RESULT;\n }\n\n return {\n username: result[1],\n query: result[2],\n canShowHelp: result[2] === '' && !text.match(HAS_NEW_LINE),\n usernameLowered: result[1].toLowerCase(),\n };\n}\n\nfunction getPlainText(html: string) {\n tempEl.innerHTML = html.replace(/
/g, '\\n');\n\n return tempEl.innerText;\n}\n","import {\n useCallback, useEffect, useState,\n} from '../../../../lib/teact/teact';\n\nimport { ApiBotCommand } from '../../../../api/types';\n\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\nimport { throttle } from '../../../../util/schedulers';\nimport useFlag from '../../../../hooks/useFlag';\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\nconst RE_COMMAND = /^[\\w@]{1,32}\\s?/i;\n\nexport default function useBotCommandTooltip(\n isAllowed: boolean,\n html: string,\n botCommands?: ApiBotCommand[] | false,\n chatBotCommands?: ApiBotCommand[],\n) {\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const [filteredBotCommands, setFilteredBotCommands] = useState();\n\n const getFilteredCommands = useCallback((filter) => {\n if (!botCommands && !chatBotCommands) {\n setFilteredBotCommands(undefined);\n\n return;\n }\n\n runThrottled(() => {\n const nextFilteredBotCommands = (botCommands || chatBotCommands || [])\n .filter(({ command }) => !filter || command.includes(filter));\n setFilteredBotCommands(\n nextFilteredBotCommands && nextFilteredBotCommands.length ? nextFilteredBotCommands : undefined,\n );\n });\n }, [botCommands, chatBotCommands]);\n\n useEffect(() => {\n if (!isAllowed || !html.length) {\n unmarkIsOpen();\n return;\n }\n\n const shouldShowCommands = html.startsWith('/');\n\n if (shouldShowCommands) {\n const filter = prepareForRegExp(html.substr(1)).match(RE_COMMAND);\n getFilteredCommands(filter ? filter[0] : '');\n } else {\n unmarkIsOpen();\n }\n }, [getFilteredCommands, html, isAllowed, unmarkIsOpen]);\n\n useEffect(() => {\n if (filteredBotCommands && filteredBotCommands.length) {\n markIsOpen();\n } else {\n unmarkIsOpen();\n }\n }, [filteredBotCommands, markIsOpen, unmarkIsOpen]);\n\n return {\n isOpen,\n close: unmarkIsOpen,\n filteredBotCommands,\n };\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './DeleteMessageModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst DeleteMessageModalAsync: FC = (props) => {\n const { isOpen } = props;\n const DeleteMessageModal = useModuleLoader(Bundles.Extra, 'DeleteMessageModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return DeleteMessageModal ? : undefined;\n};\n\nexport default memo(DeleteMessageModalAsync);\n","import React, {\n FC, useRef, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\n\nimport Button, { OwnProps as ButtonProps } from './Button';\n\ntype OwnProps = {\n onActivate: NoneToVoidFunction;\n} & Omit;\n\nconst BUTTON_ACTIVATE_DELAY = 200;\nlet openTimeout: number | undefined;\nlet isFirstTimeActivation = true;\n\nconst ResponsiveHoverButton: FC = ({ onActivate, ...buttonProps }) => {\n const isMouseInside = useRef(false);\n\n const handleMouseEnter = useCallback(() => {\n isMouseInside.current = true;\n\n // This is used to counter additional delay caused by asynchronous module loading\n if (isFirstTimeActivation) {\n isFirstTimeActivation = false;\n onActivate();\n return;\n }\n\n if (openTimeout) {\n clearTimeout(openTimeout);\n openTimeout = undefined;\n }\n openTimeout = window.setTimeout(() => {\n if (isMouseInside.current) {\n onActivate();\n }\n }, BUTTON_ACTIVATE_DELAY);\n }, [onActivate]);\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n }, []);\n\n return (\n \n );\n};\n\nexport default memo(ResponsiveHoverButton);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './CalendarModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst CalendarModalAsync: FC = (props) => {\n const { isOpen } = props;\n const CalendarModal = useModuleLoader(Bundles.Extra, 'CalendarModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return CalendarModal ? : undefined;\n};\n\nexport default memo(CalendarModalAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './AttachMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst AttachMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const AttachMenu = useModuleLoader(Bundles.Extra, 'AttachMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return AttachMenu ? : undefined;\n};\n\nexport default memo(AttachMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './SymbolMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst SymbolMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const SymbolMenu = useModuleLoader(Bundles.Extra, 'SymbolMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SymbolMenu ? : undefined;\n};\n\nexport default memo(SymbolMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './InlineBotTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst InlineBotTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const InlineBotTooltip = useModuleLoader(Bundles.Extra, 'InlineBotTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return InlineBotTooltip ? : undefined;\n};\n\nexport default memo(InlineBotTooltipAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './MentionTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst MentionTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const MentionTooltip = useModuleLoader(Bundles.Extra, 'MentionTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return MentionTooltip ? : undefined;\n};\n\nexport default memo(MentionTooltipAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './CustomSendMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst CustomSendMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const CustomSend = useModuleLoader(Bundles.Extra, 'CustomSendMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return CustomSend ? : undefined;\n};\n\nexport default memo(CustomSendMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './StickerTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst StickerTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const StickerTooltip = useModuleLoader(Bundles.Extra, 'StickerTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return StickerTooltip ? : undefined;\n};\n\nexport default memo(StickerTooltipAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './BotCommandTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst BotCommandTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const BotCommandTooltip = useModuleLoader(Bundles.Extra, 'BotCommandTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return BotCommandTooltip ? : undefined;\n};\n\nexport default memo(BotCommandTooltipAsync);\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { selectChatMessage, selectCurrentMessageList } from '../../../modules/selectors';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useFlag from '../../../hooks/useFlag';\n\nimport Menu from '../../ui/Menu';\nimport Button from '../../ui/Button';\n\nimport './BotKeyboardMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n messageId: number;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n message?: ApiMessage;\n};\n\nconst BotKeyboardMenu: FC = ({\n isOpen, message, onClose,\n}) => {\n const { clickInlineButton } = getDispatch();\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n const { isKeyboardSingleUse } = message || {};\n const [forceOpen, markForceOpen, unmarkForceOpen] = useFlag(true);\n\n const handleClose = () => {\n unmarkForceOpen();\n onClose();\n };\n\n useEffect(() => {\n markForceOpen();\n }, [markForceOpen, message?.keyboardButtons]);\n\n if (!message || !message.keyboardButtons) {\n return undefined;\n }\n\n return (\n \n
\n {message.keyboardButtons.map((row) => (\n
\n {row.map((button) => (\n clickInlineButton({ button })}\n >\n {button.text}\n \n ))}\n
\n ))}\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { messageId }): StateProps => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return {};\n }\n\n return { message: selectChatMessage(global, chatId, messageId) };\n },\n)(BotKeyboardMenu));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../../api/types';\n\nimport {\n selectChat,\n selectChatMessage,\n selectSender,\n selectForwardedSender,\n selectUser,\n selectCurrentMessageList,\n selectReplyingToId,\n selectEditingId,\n selectEditingScheduledId,\n selectEditingMessage,\n} from '../../../modules/selectors';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport buildClassName from '../../../util/buildClassName';\nimport { isUserId } from '../../../modules/helpers';\n\nimport Button from '../../ui/Button';\nimport EmbeddedMessage from '../../common/EmbeddedMessage';\n\nimport './ComposerEmbeddedMessage.scss';\n\ntype StateProps = {\n replyingToId?: number;\n editingId?: number;\n message?: ApiMessage;\n sender?: ApiUser | ApiChat;\n shouldAnimate?: boolean;\n forwardedMessagesCount?: number;\n};\n\nconst FORWARD_RENDERING_DELAY = 300;\n\nconst ComposerEmbeddedMessage: FC = ({\n replyingToId,\n editingId,\n message,\n sender,\n shouldAnimate,\n forwardedMessagesCount,\n}) => {\n const {\n setReplyingToId,\n setEditingId,\n focusMessage,\n exitForwardMode,\n } = getDispatch();\n\n const isShown = Boolean(\n ((replyingToId || editingId) && message)\n || (sender && forwardedMessagesCount),\n );\n const canAnimate = useAsyncRendering(\n [forwardedMessagesCount],\n forwardedMessagesCount ? FORWARD_RENDERING_DELAY : undefined,\n );\n\n const {\n shouldRender, transitionClassNames,\n } = useShowTransition(canAnimate && isShown, undefined, !shouldAnimate, undefined, !shouldAnimate);\n\n const clearEmbedded = useCallback(() => {\n if (replyingToId) {\n setReplyingToId({ messageId: undefined });\n } else if (editingId) {\n setEditingId({ messageId: undefined });\n } else if (forwardedMessagesCount) {\n exitForwardMode();\n }\n }, [replyingToId, editingId, forwardedMessagesCount, setReplyingToId, setEditingId, exitForwardMode]);\n\n useEffect(() => (isShown ? captureEscKeyListener(clearEmbedded) : undefined), [isShown, clearEmbedded]);\n\n const handleMessageClick = useCallback((): void => {\n focusMessage({ chatId: message!.chatId, messageId: message!.id });\n }, [focusMessage, message]);\n\n const className = buildClassName('ComposerEmbeddedMessage', transitionClassNames);\n\n const customText = forwardedMessagesCount && forwardedMessagesCount > 1\n ? `${forwardedMessagesCount} forwarded messages`\n : undefined;\n\n if (!shouldRender) {\n return undefined;\n }\n\n return (\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, threadId, type: messageListType } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId || !messageListType) {\n return {};\n }\n\n const {\n currentUserId,\n forwardMessages: { fromChatId, toChatId, messageIds: forwardMessageIds },\n } = global;\n\n const replyingToId = selectReplyingToId(global, chatId, threadId);\n const editingId = messageListType === 'scheduled'\n ? selectEditingScheduledId(global, chatId)\n : selectEditingId(global, chatId, threadId);\n const shouldAnimate = global.settings.byKey.animationLevel >= 1;\n const isForwarding = toChatId === chatId;\n\n let message;\n if (replyingToId) {\n message = selectChatMessage(global, chatId, replyingToId);\n } else if (editingId) {\n message = selectEditingMessage(global, chatId, threadId, messageListType);\n } else if (isForwarding && forwardMessageIds!.length === 1) {\n message = selectChatMessage(global, fromChatId!, forwardMessageIds![0]);\n }\n\n let sender: ApiChat | ApiUser | undefined;\n if (replyingToId && message) {\n const { forwardInfo } = message;\n const isChatWithSelf = chatId === currentUserId;\n\n if (forwardInfo && (forwardInfo.isChannelPost || isChatWithSelf)) {\n sender = selectForwardedSender(global, message);\n }\n\n if (!sender) {\n sender = selectSender(global, message);\n }\n } else if (isForwarding) {\n sender = isUserId(fromChatId!) ? selectUser(global, fromChatId!) : selectChat(global, fromChatId!);\n }\n\n return {\n replyingToId,\n editingId,\n message,\n sender,\n shouldAnimate,\n forwardedMessagesCount: isForwarding ? forwardMessageIds!.length : undefined,\n };\n },\n)(ComposerEmbeddedMessage));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './AttachmentModal';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst AttachmentModalAsync: FC = (props) => {\n const { attachments } = props;\n const AttachmentModal = useModuleLoader(Bundles.Extra, 'AttachmentModal', !attachments.length);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return AttachmentModal ? : undefined;\n};\n\nexport default memo(AttachmentModalAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './BotCommandMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst BotCommandMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const BotCommandMenu = useModuleLoader(Bundles.Extra, 'BotCommandMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return BotCommandMenu ? : undefined;\n};\n\nexport default memo(BotCommandMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './PollModal';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst PollModalAsync: FC = (props) => {\n const { isOpen } = props;\n const PollModal = useModuleLoader(Bundles.Extra, 'PollModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return PollModal ? : undefined;\n};\n\nexport default memo(PollModalAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './DropArea';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst DropAreaAsync: FC = (props) => {\n const { isOpen } = props;\n const DropArea = useModuleLoader(Bundles.Extra, 'DropArea', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return DropArea ? : undefined;\n};\n\nexport default memo(DropAreaAsync);\nexport { DropAreaState } from './DropArea';\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiMessage, ApiMessageEntityTypes, ApiWebPage } from '../../../api/types';\nimport { ISettings } from '../../../types';\n\nimport { RE_LINK_TEMPLATE } from '../../../config';\nimport { selectNoWebPage, selectTheme } from '../../../modules/selectors';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport useOnChange from '../../../hooks/useOnChange';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useCurrentOrPrev from '../../../hooks/useCurrentOrPrev';\nimport useDebouncedMemo from '../../../hooks/useDebouncedMemo';\nimport buildClassName from '../../../util/buildClassName';\n\nimport WebPage from '../message/WebPage';\nimport Button from '../../ui/Button';\n\nimport './WebPagePreview.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n messageText: string;\n disabled?: boolean;\n};\n\ntype StateProps = {\n webPagePreview?: ApiWebPage;\n noWebPage?: boolean;\n theme: ISettings['theme'];\n};\n\nconst DEBOUNCE_MS = 300;\nconst RE_LINK = new RegExp(RE_LINK_TEMPLATE, 'i');\n\nconst WebPagePreview: FC = ({\n chatId,\n threadId,\n messageText,\n disabled,\n webPagePreview,\n noWebPage,\n theme,\n}) => {\n const {\n loadWebPagePreview,\n clearWebPagePreview,\n toggleMessageWebPage,\n } = getDispatch();\n\n const link = useDebouncedMemo(() => {\n const { text, entities } = parseMessageInput(messageText);\n\n const linkEntity = entities && entities.find(({ type }) => type === ApiMessageEntityTypes.TextUrl);\n if (linkEntity) {\n return linkEntity.url;\n }\n\n const textMatch = text.match(RE_LINK);\n if (textMatch) {\n return textMatch[0];\n }\n\n return undefined;\n }, DEBOUNCE_MS, [messageText]);\n\n useEffect(() => {\n if (link) {\n loadWebPagePreview({ text: link });\n } else {\n clearWebPagePreview();\n toggleMessageWebPage({ chatId, threadId });\n }\n }, [chatId, toggleMessageWebPage, clearWebPagePreview, link, loadWebPagePreview, threadId]);\n\n useOnChange(() => {\n clearWebPagePreview();\n toggleMessageWebPage({ chatId, threadId });\n }, [chatId]);\n\n const isShown = Boolean(webPagePreview && messageText.length && !noWebPage && !disabled);\n const { shouldRender, transitionClassNames } = useShowTransition(isShown);\n\n const renderingWebPage = useCurrentOrPrev(webPagePreview, true);\n\n if (!shouldRender || !renderingWebPage) {\n return undefined;\n }\n\n const handleClearWebpagePreview = () => {\n toggleMessageWebPage({ chatId, threadId, noWebPage: true });\n };\n\n // TODO Refactor so `WebPage` can be used without message\n const { photo, ...webPageWithoutPhoto } = renderingWebPage;\n const messageStub = {\n content: {\n webPage: webPageWithoutPhoto,\n },\n } as ApiMessage;\n\n return (\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId }): StateProps => {\n const noWebPage = selectNoWebPage(global, chatId, threadId);\n return {\n theme: selectTheme(global),\n webPagePreview: global.webPagePreview,\n noWebPage,\n };\n },\n)(WebPagePreview));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './SendAsMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst SendAsMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const SendAsMenu = useModuleLoader(Bundles.Extra, 'SendAsMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SendAsMenu ? : undefined;\n};\n\nexport default memo(SendAsMenuAsync);\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState, MessageListType } from '../../../global/types';\nimport {\n ApiAttachment,\n ApiBotInlineResult,\n ApiBotInlineMediaResult,\n ApiSticker,\n ApiVideo,\n ApiNewPoll,\n ApiMessage,\n ApiFormattedText,\n ApiChat,\n ApiChatMember,\n ApiUser,\n MAIN_THREAD_ID,\n ApiBotCommand,\n} from '../../../api/types';\nimport { InlineBotSettings } from '../../../types';\n\nimport {\n BASE_EMOJI_KEYWORD_LANG, EDITABLE_INPUT_ID, REPLIES_USER_ID, SCHEDULED_WHEN_ONLINE, SEND_MESSAGE_ACTION_INTERVAL,\n} from '../../../config';\nimport { IS_VOICE_RECORDING_SUPPORTED, IS_SINGLE_COLUMN_LAYOUT, IS_IOS } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport {\n selectChat,\n selectIsRightColumnShown,\n selectIsInSelectMode,\n selectNewestMessageWithBotKeyboardButtons,\n selectDraft,\n selectScheduledIds,\n selectEditingMessage,\n selectIsChatWithSelf,\n selectChatBot,\n selectChatUser,\n selectChatMessage,\n selectUser,\n selectUserStatus,\n} from '../../../modules/selectors';\nimport {\n getAllowedAttachmentOptions,\n getChatSlowModeOptions,\n isUserId,\n isChatAdmin,\n isChatSuperGroup,\n} from '../../../modules/helpers';\nimport { formatMediaDuration, formatVoiceRecordDuration, getDayStartAt } from '../../../util/dateFormat';\nimport focusEditableElement from '../../../util/focusEditableElement';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport buildAttachment from './helpers/buildAttachment';\nimport renderText from '../../common/helpers/renderText';\nimport insertHtmlInSelection from '../../../util/insertHtmlInSelection';\nimport deleteLastCharacterOutsideSelection from '../../../util/deleteLastCharacterOutsideSelection';\nimport buildClassName from '../../../util/buildClassName';\nimport windowSize from '../../../util/windowSize';\nimport { isSelectionInsideInput } from './helpers/selection';\nimport applyIosAutoCapitalizationFix from './helpers/applyIosAutoCapitalizationFix';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport useFlag from '../../../hooks/useFlag';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useStickerTooltip from './hooks/useStickerTooltip';\nimport useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';\nimport useLang from '../../../hooks/useLang';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\nimport useInterval from '../../../hooks/useInterval';\nimport useOnChange from '../../../hooks/useOnChange';\nimport { useStateRef } from '../../../hooks/useStateRef';\nimport useVoiceRecording from './hooks/useVoiceRecording';\nimport useClipboardPaste from './hooks/useClipboardPaste';\nimport useDraft from './hooks/useDraft';\nimport useEditing from './hooks/useEditing';\nimport useEmojiTooltip from './hooks/useEmojiTooltip';\nimport useMentionTooltip from './hooks/useMentionTooltip';\nimport useInlineBotTooltip from './hooks/useInlineBotTooltip';\nimport useBotCommandTooltip from './hooks/useBotCommandTooltip';\n\nimport DeleteMessageModal from '../../common/DeleteMessageModal.async';\nimport Button from '../../ui/Button';\nimport ResponsiveHoverButton from '../../ui/ResponsiveHoverButton';\nimport Spinner from '../../ui/Spinner';\nimport CalendarModal from '../../common/CalendarModal.async';\nimport Avatar from '../../common/Avatar';\nimport AttachMenu from './AttachMenu.async';\nimport SymbolMenu from './SymbolMenu.async';\nimport InlineBotTooltip from './InlineBotTooltip.async';\nimport MentionTooltip from './MentionTooltip.async';\nimport CustomSendMenu from './CustomSendMenu.async';\nimport StickerTooltip from './StickerTooltip.async';\nimport EmojiTooltip from './EmojiTooltip.async';\nimport BotCommandTooltip from './BotCommandTooltip.async';\nimport BotKeyboardMenu from './BotKeyboardMenu';\nimport MessageInput from './MessageInput';\nimport ComposerEmbeddedMessage from './ComposerEmbeddedMessage';\nimport AttachmentModal from './AttachmentModal.async';\nimport BotCommandMenu from './BotCommandMenu.async';\nimport PollModal from './PollModal.async';\nimport DropArea, { DropAreaState } from './DropArea.async';\nimport WebPagePreview from './WebPagePreview';\nimport SendAsMenu from './SendAsMenu.async';\n\nimport './Composer.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n messageListType: MessageListType;\n dropAreaState: string;\n isReady: boolean;\n onDropHide: NoneToVoidFunction;\n};\n\ntype StateProps =\n {\n editingMessage?: ApiMessage;\n chat?: ApiChat;\n draft?: ApiFormattedText;\n isChatWithBot?: boolean;\n isChatWithSelf?: boolean;\n isRightColumnShown?: boolean;\n isSelectModeActive?: boolean;\n isForwarding?: boolean;\n isPollModalOpen?: boolean;\n botKeyboardMessageId?: number;\n botKeyboardPlaceholder?: string;\n withScheduledButton?: boolean;\n shouldSchedule?: boolean;\n canScheduleUntilOnline?: boolean;\n stickersForEmoji?: ApiSticker[];\n groupChatMembers?: ApiChatMember[];\n currentUserId?: string;\n recentEmojis: string[];\n lastSyncTime?: number;\n contentToBeScheduled?: GlobalState['messages']['contentToBeScheduled'];\n shouldSuggestStickers?: boolean;\n baseEmojiKeywords?: Record;\n emojiKeywords?: Record;\n serverTimeOffset: number;\n topInlineBotIds?: string[];\n isInlineBotLoading: boolean;\n inlineBots?: Record;\n botCommands?: ApiBotCommand[] | false;\n chatBotCommands?: ApiBotCommand[];\n sendAsUser?: ApiUser;\n sendAsChat?: ApiChat;\n sendAsId?: string;\n }\n & Pick;\n\nenum MainButtonState {\n Send = 'send',\n Record = 'record',\n Edit = 'edit',\n Schedule = 'schedule',\n}\n\nconst VOICE_RECORDING_FILENAME = 'wonderful-voice-message.ogg';\n// When voice recording is active, composer placeholder will hide to prevent overlapping\nconst SCREEN_WIDTH_TO_HIDE_PLACEHOLDER = 600; // px\n\nconst MOBILE_KEYBOARD_HIDE_DELAY_MS = 100;\nconst SELECT_MODE_TRANSITION_MS = 200;\nconst MESSAGE_MAX_LENGTH = 4096;\nconst CAPTION_MAX_LENGTH = 1024;\nconst SENDING_ANIMATION_DURATION = 350;\n// eslint-disable-next-line max-len\nconst APPENDIX = '';\n\nconst Composer: FC = ({\n dropAreaState,\n shouldSchedule,\n canScheduleUntilOnline,\n isReady,\n onDropHide,\n editingMessage,\n chatId,\n threadId,\n messageListType,\n draft,\n chat,\n connectionState,\n isChatWithBot,\n isChatWithSelf,\n isRightColumnShown,\n isSelectModeActive,\n isForwarding,\n isPollModalOpen,\n botKeyboardMessageId,\n botKeyboardPlaceholder,\n withScheduledButton,\n stickersForEmoji,\n groupChatMembers,\n topInlineBotIds,\n currentUserId,\n lastSyncTime,\n contentToBeScheduled,\n shouldSuggestStickers,\n baseEmojiKeywords,\n emojiKeywords,\n serverTimeOffset,\n recentEmojis,\n inlineBots,\n isInlineBotLoading,\n botCommands,\n chatBotCommands,\n sendAsUser,\n sendAsChat,\n sendAsId,\n}) => {\n const {\n sendMessage,\n clearDraft,\n showDialog,\n setStickerSearchQuery,\n setGifSearchQuery,\n forwardMessages,\n openPollModal,\n closePollModal,\n loadScheduledHistory,\n openChat,\n addRecentEmoji,\n sendInlineBotResult,\n loadSendAs,\n loadFullChat,\n } = getDispatch();\n const lang = useLang();\n\n // eslint-disable-next-line no-null/no-null\n const appendixRef = useRef(null);\n const [html, setHtml] = useState('');\n const htmlRef = useStateRef(html);\n const lastMessageSendTimeSeconds = useRef();\n const prevDropAreaState = usePrevious(dropAreaState);\n const [isCalendarOpen, openCalendar, closeCalendar] = useFlag();\n const [\n scheduledMessageArgs, setScheduledMessageArgs,\n ] = useState();\n const { width: windowWidth } = windowSize.get();\n const sendAsIds = chat?.sendAsIds;\n const canShowSendAs = sendAsIds && (sendAsIds.length > 1 || !sendAsIds.includes(currentUserId!));\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n useEffect(() => {\n lastMessageSendTimeSeconds.current = undefined;\n }, [chatId]);\n\n useEffect(() => {\n if (chatId && lastSyncTime && threadId === MAIN_THREAD_ID && isReady) {\n loadScheduledHistory({ chatId });\n }\n }, [isReady, chatId, loadScheduledHistory, lastSyncTime, threadId]);\n\n useEffect(() => {\n if (chatId && chat && lastSyncTime && !sendAsIds && isReady && isChatSuperGroup(chat)) {\n loadSendAs({ chatId });\n }\n }, [chat, chatId, isReady, lastSyncTime, loadSendAs, sendAsIds]);\n\n useEffect(() => {\n if (chatId && chat && lastSyncTime && !chat.fullInfo && isReady && isChatSuperGroup(chat)) {\n loadFullChat({ chatId });\n }\n }, [chat, chatId, isReady, lastSyncTime, loadFullChat]);\n\n const shouldAnimateSendAsButtonRef = useRef(false);\n useOnChange(([prevChatId, prevSendAsIds]) => {\n // We only animate send-as button if `sendAsIds` was missing when opening the chat\n shouldAnimateSendAsButtonRef.current = Boolean(chatId === prevChatId && sendAsIds && !prevSendAsIds);\n }, [chatId, sendAsIds]);\n\n useLayoutEffect(() => {\n if (!appendixRef.current) return;\n\n appendixRef.current.innerHTML = APPENDIX;\n }, []);\n\n useEffect(() => {\n if (contentToBeScheduled) {\n setScheduledMessageArgs(contentToBeScheduled);\n openCalendar();\n }\n }, [contentToBeScheduled, openCalendar]);\n\n const [attachments, setAttachments] = useState([]);\n\n const [isBotKeyboardOpen, openBotKeyboard, closeBotKeyboard] = useFlag();\n const [isBotCommandMenuOpen, openBotCommandMenu, closeBotCommandMenu] = useFlag();\n const [isAttachMenuOpen, openAttachMenu, closeAttachMenu] = useFlag();\n const [isSymbolMenuOpen, openSymbolMenu, closeSymbolMenu] = useFlag();\n const [isSendAsMenuOpen, openSendAsMenu, closeSendAsMenu] = useFlag();\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isSymbolMenuLoaded, onSymbolMenuLoadingComplete] = useFlag();\n const [isHoverDisabled, disableHover, enableHover] = useFlag();\n\n const {\n startRecordingVoice,\n stopRecordingVoice,\n pauseRecordingVoice,\n activeVoiceRecording,\n currentRecordTime,\n recordButtonRef: mainButtonRef,\n startRecordTimeRef,\n } = useVoiceRecording();\n\n useInterval(() => {\n sendMessageAction({ type: 'recordAudio' });\n }, activeVoiceRecording && SEND_MESSAGE_ACTION_INTERVAL);\n\n useEffect(() => {\n if (!activeVoiceRecording) {\n sendMessageAction({ type: 'cancel' });\n }\n }, [activeVoiceRecording, sendMessageAction]);\n\n const mainButtonState = editingMessage ? MainButtonState.Edit\n : (!IS_VOICE_RECORDING_SUPPORTED || activeVoiceRecording || (html && !attachments.length) || isForwarding)\n ? (shouldSchedule ? MainButtonState.Schedule : MainButtonState.Send)\n : MainButtonState.Record;\n const canShowCustomSendMenu = !shouldSchedule;\n\n const {\n isMentionTooltipOpen, closeMentionTooltip, insertMention, mentionFilteredUsers,\n } = useMentionTooltip(\n !attachments.length,\n htmlRef,\n setHtml,\n undefined,\n groupChatMembers,\n topInlineBotIds,\n currentUserId,\n );\n\n const {\n isOpen: isInlineBotTooltipOpen,\n id: inlineBotId,\n isGallery: isInlineBotTooltipGallery,\n switchPm: inlineBotSwitchPm,\n results: inlineBotResults,\n closeTooltip: closeInlineBotTooltip,\n help: inlineBotHelp,\n loadMore: loadMoreForInlineBot,\n } = useInlineBotTooltip(\n Boolean(!attachments.length && lastSyncTime),\n chatId,\n html,\n inlineBots,\n );\n\n const {\n isOpen: isBotCommandTooltipOpen,\n close: closeBotCommandTooltip,\n filteredBotCommands: botTooltipCommands,\n } = useBotCommandTooltip(\n Boolean((botCommands && botCommands.length) || (chatBotCommands && chatBotCommands.length)),\n html,\n botCommands,\n chatBotCommands,\n );\n\n const {\n isContextMenuOpen: isCustomSendMenuOpen,\n handleContextMenu,\n handleContextMenuClose,\n handleContextMenuHide,\n } = useContextMenuHandlers(mainButtonRef, !(mainButtonState === MainButtonState.Send && canShowCustomSendMenu));\n\n const {\n canSendStickers, canSendGifs, canAttachMedia, canAttachPolls, canAttachEmbedLinks,\n } = useMemo(() => getAllowedAttachmentOptions(chat, isChatWithBot), [chat, isChatWithBot]);\n\n const isAdmin = chat && isChatAdmin(chat);\n const slowMode = getChatSlowModeOptions(chat);\n\n const { isStickerTooltipOpen, closeStickerTooltip } = useStickerTooltip(\n Boolean(shouldSuggestStickers && canSendStickers && !attachments.length),\n html,\n stickersForEmoji,\n !isReady,\n );\n const {\n isEmojiTooltipOpen, closeEmojiTooltip, filteredEmojis, insertEmoji,\n } = useEmojiTooltip(\n Boolean(shouldSuggestStickers && canSendStickers && !attachments.length),\n htmlRef,\n recentEmojis,\n undefined,\n setHtml,\n baseEmojiKeywords,\n emojiKeywords,\n !isReady,\n );\n\n const insertTextAndUpdateCursor = useCallback((text: string, inputId: string = EDITABLE_INPUT_ID) => {\n const selection = window.getSelection()!;\n const messageInput = document.getElementById(inputId)!;\n const newHtml = renderText(text, ['escape_html', 'emoji_html', 'br_html'])\n .join('')\n .replace(/\\u200b+/g, '\\u200b');\n\n if (selection.rangeCount) {\n const selectionRange = selection.getRangeAt(0);\n if (isSelectionInsideInput(selectionRange, inputId)) {\n insertHtmlInSelection(newHtml);\n messageInput.dispatchEvent(new Event('input', { bubbles: true }));\n return;\n }\n }\n\n setHtml(`${htmlRef.current!}${newHtml}`);\n\n // If selection is outside of input, set cursor at the end of input\n requestAnimationFrame(() => {\n focusEditableElement(messageInput);\n });\n }, [htmlRef]);\n\n const removeSymbol = useCallback(() => {\n const selection = window.getSelection()!;\n\n if (selection.rangeCount) {\n const selectionRange = selection.getRangeAt(0);\n if (isSelectionInsideInput(selectionRange, EDITABLE_INPUT_ID)) {\n document.execCommand('delete', false);\n return;\n }\n }\n\n setHtml(deleteLastCharacterOutsideSelection(htmlRef.current!));\n }, [htmlRef]);\n\n const resetComposer = useCallback((shouldPreserveInput = false) => {\n if (!shouldPreserveInput) {\n setHtml('');\n }\n setAttachments(MEMO_EMPTY_ARRAY);\n closeStickerTooltip();\n closeCalendar();\n setScheduledMessageArgs(undefined);\n closeMentionTooltip();\n closeEmojiTooltip();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n // @optimization\n setTimeout(() => closeSymbolMenu(), SENDING_ANIMATION_DURATION);\n } else {\n closeSymbolMenu();\n }\n }, [closeStickerTooltip, closeCalendar, closeMentionTooltip, closeEmojiTooltip, closeSymbolMenu]);\n\n // Handle chat change (ref is used to avoid redundant effect calls)\n const stopRecordingVoiceRef = useRef();\n stopRecordingVoiceRef.current = stopRecordingVoice;\n useEffect(() => {\n return () => {\n stopRecordingVoiceRef.current!();\n resetComposer();\n };\n }, [chatId, resetComposer, stopRecordingVoiceRef]);\n\n const handleEditComplete = useEditing(htmlRef, setHtml, editingMessage, resetComposer, openDeleteModal);\n useDraft(draft, chatId, threadId, htmlRef, setHtml, editingMessage);\n useClipboardPaste(insertTextAndUpdateCursor, setAttachments, editingMessage);\n\n const handleFileSelect = useCallback(async (files: File[], isQuick: boolean) => {\n setAttachments(await Promise.all(files.map((file) => buildAttachment(file.name, file, isQuick))));\n }, []);\n\n const handleAppendFiles = useCallback(async (files: File[], isQuick: boolean) => {\n setAttachments([\n ...attachments,\n ...await Promise.all(files.map((file) => buildAttachment(file.name, file, isQuick))),\n ]);\n }, [attachments]);\n\n const handleClearAttachment = useCallback(() => {\n setAttachments(MEMO_EMPTY_ARRAY);\n }, []);\n\n const handleSend = useCallback(async (isSilent = false, scheduledAt?: number) => {\n if (connectionState !== 'connectionStateReady') {\n return;\n }\n\n let currentAttachments = attachments;\n\n if (activeVoiceRecording) {\n const record = await stopRecordingVoice();\n if (record) {\n const { blob, duration, waveform } = record;\n currentAttachments = [await buildAttachment(\n VOICE_RECORDING_FILENAME,\n blob,\n false,\n { voice: { duration, waveform } },\n )];\n }\n }\n\n const { text, entities } = parseMessageInput(htmlRef.current!);\n\n if (!currentAttachments.length && !text && !isForwarding) {\n return;\n }\n\n const maxLength = currentAttachments.length ? CAPTION_MAX_LENGTH : MESSAGE_MAX_LENGTH;\n if (text?.length > maxLength) {\n const extraLength = text.length - maxLength;\n showDialog({\n data: {\n message: 'MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS',\n textParams: {\n '{EXTRA_CHARS_COUNT}': extraLength,\n '{PLURAL_S}': extraLength > 1 ? 's' : '',\n },\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n\n if (currentAttachments.length || text) {\n if (slowMode && !isAdmin) {\n const nowSeconds = getServerTime(serverTimeOffset);\n const secondsSinceLastMessage = lastMessageSendTimeSeconds.current\n && Math.floor(nowSeconds - lastMessageSendTimeSeconds.current);\n const nextSendDateNotReached = slowMode.nextSendDate && slowMode.nextSendDate > nowSeconds;\n\n if (\n (secondsSinceLastMessage && secondsSinceLastMessage < slowMode.seconds)\n || nextSendDateNotReached\n ) {\n const secondsRemaining = nextSendDateNotReached\n ? slowMode.nextSendDate! - nowSeconds\n : slowMode.seconds - secondsSinceLastMessage!;\n showDialog({\n data: {\n message: lang('SlowModeHint', formatMediaDuration(secondsRemaining)),\n isSlowMode: true,\n hasErrorKey: false,\n },\n });\n\n messageInput.blur();\n\n return;\n }\n }\n\n sendMessage({\n text,\n entities,\n attachments: currentAttachments,\n scheduledAt,\n isSilent,\n });\n }\n\n if (isForwarding) {\n forwardMessages({\n scheduledAt,\n isSilent,\n });\n }\n\n lastMessageSendTimeSeconds.current = getServerTime(serverTimeOffset);\n\n clearDraft({ chatId, localOnly: true });\n\n if (IS_IOS && messageInput === document.activeElement) {\n applyIosAutoCapitalizationFix(messageInput);\n }\n\n // Wait until message animation starts\n requestAnimationFrame(() => {\n resetComposer();\n });\n }, [\n connectionState, attachments, activeVoiceRecording, isForwarding, clearDraft, chatId, serverTimeOffset,\n resetComposer, stopRecordingVoice, showDialog, slowMode, isAdmin, sendMessage, forwardMessages, lang, htmlRef,\n ]);\n\n const handleActivateBotCommandMenu = useCallback(() => {\n closeSymbolMenu();\n openBotCommandMenu();\n }, [closeSymbolMenu, openBotCommandMenu]);\n\n const handleActivateSymbolMenu = useCallback(() => {\n closeBotCommandMenu();\n closeSendAsMenu();\n openSymbolMenu();\n }, [closeBotCommandMenu, closeSendAsMenu, openSymbolMenu]);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker, shouldPreserveInput = false) => {\n sticker = {\n ...sticker,\n isPreloadedGlobally: true,\n };\n\n if (shouldSchedule) {\n setScheduledMessageArgs({ sticker });\n openCalendar();\n } else {\n sendMessage({ sticker });\n requestAnimationFrame(() => {\n resetComposer(shouldPreserveInput);\n });\n }\n }, [shouldSchedule, openCalendar, sendMessage, resetComposer]);\n\n const handleGifSelect = useCallback((gif: ApiVideo) => {\n if (shouldSchedule) {\n setScheduledMessageArgs({ gif });\n openCalendar();\n } else {\n sendMessage({ gif });\n requestAnimationFrame(() => {\n resetComposer(true);\n });\n }\n }, [shouldSchedule, openCalendar, sendMessage, resetComposer]);\n\n const handleInlineBotSelect = useCallback((inlineResult: ApiBotInlineResult | ApiBotInlineMediaResult) => {\n if (connectionState !== 'connectionStateReady') {\n return;\n }\n\n sendInlineBotResult({\n id: inlineResult.id,\n queryId: inlineResult.queryId,\n });\n\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n if (IS_IOS && messageInput === document.activeElement) {\n applyIosAutoCapitalizationFix(messageInput);\n }\n\n clearDraft({ chatId, localOnly: true });\n requestAnimationFrame(() => {\n resetComposer();\n });\n }, [chatId, clearDraft, connectionState, resetComposer, sendInlineBotResult]);\n\n const handleBotCommandSelect = useCallback(() => {\n clearDraft({ chatId, localOnly: true });\n requestAnimationFrame(() => {\n resetComposer();\n });\n }, [chatId, clearDraft, resetComposer]);\n\n const handlePollSend = useCallback((poll: ApiNewPoll) => {\n if (shouldSchedule) {\n setScheduledMessageArgs({ poll });\n closePollModal();\n openCalendar();\n } else {\n sendMessage({ poll });\n closePollModal();\n }\n }, [closePollModal, openCalendar, sendMessage, shouldSchedule]);\n\n const handleSilentSend = useCallback(() => {\n if (shouldSchedule) {\n setScheduledMessageArgs({ isSilent: true });\n openCalendar();\n } else {\n void handleSend(true);\n }\n }, [handleSend, openCalendar, shouldSchedule]);\n\n const handleMessageSchedule = useCallback((date: Date, isWhenOnline = false) => {\n const { isSilent, ...restArgs } = scheduledMessageArgs || {};\n\n // Scheduled time can not be less than 10 seconds in future\n const scheduledAt = Math.round(Math.max(date.getTime(), Date.now() + 60 * 1000) / 1000)\n + (isWhenOnline ? 0 : serverTimeOffset);\n\n if (!scheduledMessageArgs || Object.keys(restArgs).length === 0) {\n void handleSend(Boolean(isSilent), scheduledAt);\n } else {\n sendMessage({\n ...scheduledMessageArgs,\n scheduledAt,\n });\n requestAnimationFrame(() => {\n resetComposer();\n });\n }\n closeCalendar();\n }, [closeCalendar, handleSend, resetComposer, scheduledMessageArgs, sendMessage, serverTimeOffset]);\n\n const handleMessageScheduleUntilOnline = useCallback(() => {\n handleMessageSchedule(new Date(SCHEDULED_WHEN_ONLINE * 1000), true);\n }, [handleMessageSchedule]);\n\n const handleCloseCalendar = useCallback(() => {\n closeCalendar();\n setScheduledMessageArgs(undefined);\n }, [closeCalendar]);\n\n const handleSearchOpen = useCallback((type: 'stickers' | 'gifs') => {\n if (type === 'stickers') {\n setStickerSearchQuery({ query: '' });\n setGifSearchQuery({ query: undefined });\n } else {\n setGifSearchQuery({ query: '' });\n setStickerSearchQuery({ query: undefined });\n }\n }, [setStickerSearchQuery, setGifSearchQuery]);\n\n const handleSymbolMenuOpen = useCallback(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n\n if (!IS_SINGLE_COLUMN_LAYOUT || messageInput !== document.activeElement) {\n openSymbolMenu();\n return;\n }\n\n messageInput.blur();\n setTimeout(() => {\n closeBotCommandMenu();\n openSymbolMenu();\n }, MOBILE_KEYBOARD_HIDE_DELAY_MS);\n }, [openSymbolMenu, closeBotCommandMenu]);\n\n const handleSendAsMenuOpen = useCallback(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n\n if (!IS_SINGLE_COLUMN_LAYOUT || messageInput !== document.activeElement) {\n closeBotCommandMenu();\n closeSymbolMenu();\n openSendAsMenu();\n return;\n }\n\n messageInput.blur();\n setTimeout(() => {\n closeBotCommandMenu();\n closeSymbolMenu();\n openSendAsMenu();\n }, MOBILE_KEYBOARD_HIDE_DELAY_MS);\n }, [closeBotCommandMenu, closeSymbolMenu, openSendAsMenu]);\n\n const handleAllScheduledClick = useCallback(() => {\n openChat({ id: chatId, threadId, type: 'scheduled' });\n }, [openChat, chatId, threadId]);\n\n useEffect(() => {\n if (isRightColumnShown && IS_SINGLE_COLUMN_LAYOUT) {\n closeSymbolMenu();\n }\n }, [isRightColumnShown, closeSymbolMenu]);\n\n useEffect(() => {\n if (!isReady) return;\n\n if (isSelectModeActive) {\n disableHover();\n } else {\n setTimeout(() => {\n enableHover();\n }, SELECT_MODE_TRANSITION_MS);\n }\n }, [isSelectModeActive, enableHover, disableHover, isReady]);\n\n const mainButtonHandler = useCallback(() => {\n switch (mainButtonState) {\n case MainButtonState.Send:\n handleSend();\n break;\n case MainButtonState.Record:\n void startRecordingVoice();\n break;\n case MainButtonState.Edit:\n handleEditComplete();\n break;\n case MainButtonState.Schedule:\n if (activeVoiceRecording) {\n pauseRecordingVoice();\n }\n openCalendar();\n break;\n default:\n break;\n }\n }, [\n mainButtonState, handleSend, startRecordingVoice, handleEditComplete,\n activeVoiceRecording, openCalendar, pauseRecordingVoice,\n ]);\n\n const areVoiceMessagesNotAllowed = mainButtonState === MainButtonState.Record && !canAttachMedia;\n\n const prevEditedMessage = usePrevious(editingMessage, true);\n const renderedEditedMessage = editingMessage || prevEditedMessage;\n\n const scheduledDefaultDate = new Date();\n scheduledDefaultDate.setSeconds(0);\n scheduledDefaultDate.setMilliseconds(0);\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n let sendButtonAriaLabel = 'SendMessage';\n switch (mainButtonState) {\n case MainButtonState.Edit:\n sendButtonAriaLabel = 'Save edited message';\n break;\n case MainButtonState.Record:\n sendButtonAriaLabel = areVoiceMessagesNotAllowed\n ? 'Conversation.DefaultRestrictedMedia'\n : 'AccDescrVoiceMessage';\n }\n\n const className = buildClassName(\n 'Composer',\n !isSelectModeActive && 'shown',\n isHoverDisabled && 'hover-disabled',\n );\n\n const symbolMenuButtonClassName = buildClassName(\n 'mobile-symbol-menu-button',\n !isReady && 'not-ready',\n isSymbolMenuLoaded\n ? (isSymbolMenuOpen && 'menu-opened')\n : (isSymbolMenuOpen && 'is-loading'),\n );\n\n const onSend = mainButtonState === MainButtonState.Edit\n ? handleEditComplete\n : mainButtonState === MainButtonState.Schedule ? openCalendar\n : handleSend;\n\n return (\n
\n {canAttachMedia && isReady && (\n \n )}\n \n \n {renderedEditedMessage && (\n \n )}\n \n \n \n \n
\n
\n \n \n
\n {isChatWithBot && botCommands !== false && !activeVoiceRecording && !editingMessage && (\n \n \n \n )}\n {canShowSendAs && (sendAsUser || sendAsChat) && (\n \n \n \n )}\n {IS_SINGLE_COLUMN_LAYOUT ? (\n \n \n \n {isSymbolMenuOpen && !isSymbolMenuLoaded && }\n \n ) : (\n \n \n \n )}\n \n {isInlineBotLoading && Boolean(inlineBotId) && (\n \n )}\n {withScheduledButton && (\n \n \n \n )}\n {botKeyboardMessageId && !activeVoiceRecording && !editingMessage && (\n \n \n \n )}\n {!activeVoiceRecording && !editingMessage && (\n \n \n \n )}\n {activeVoiceRecording && currentRecordTime && (\n \n {formatVoiceRecordDuration(currentRecordTime - startRecordTimeRef.current!)}\n \n )}\n \n \n \n {botKeyboardMessageId && (\n \n )}\n {botCommands && (\n \n )}\n \n
\n
\n {activeVoiceRecording && (\n \n \n \n )}\n \n \n \n \n \n \n {canShowCustomSendMenu && (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId, messageListType }): StateProps => {\n const chat = selectChat(global, chatId);\n const chatUser = chat && selectChatUser(global, chat);\n const chatBot = chatId !== REPLIES_USER_ID ? selectChatBot(global, chatId) : undefined;\n const isChatWithBot = Boolean(chatBot);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const messageWithActualBotKeyboard = isChatWithBot && selectNewestMessageWithBotKeyboardButtons(global, chatId);\n const scheduledIds = selectScheduledIds(global, chatId);\n const { language, shouldSuggestStickers } = global.settings.byKey;\n const baseEmojiKeywords = global.emojiKeywords[BASE_EMOJI_KEYWORD_LANG];\n const emojiKeywords = language !== BASE_EMOJI_KEYWORD_LANG ? global.emojiKeywords[language] : undefined;\n const botKeyboardMessageId = messageWithActualBotKeyboard ? messageWithActualBotKeyboard.id : undefined;\n const keyboardMessage = botKeyboardMessageId ? selectChatMessage(global, chatId, botKeyboardMessageId) : undefined;\n const { currentUserId } = global;\n const defaultSendAsId = chat?.fullInfo ? chat?.fullInfo?.sendAsId || currentUserId : undefined;\n const sendAsId = chat?.sendAsIds && defaultSendAsId && chat.sendAsIds.includes(defaultSendAsId)\n ? defaultSendAsId\n : (chat?.adminRights?.anonymous ? chat?.id : undefined);\n const sendAsUser = sendAsId ? selectUser(global, sendAsId) : undefined;\n const sendAsChat = !sendAsUser && sendAsId ? selectChat(global, sendAsId) : undefined;\n\n return {\n editingMessage: selectEditingMessage(global, chatId, threadId, messageListType),\n connectionState: global.connectionState,\n draft: selectDraft(global, chatId, threadId),\n chat,\n isChatWithBot,\n isChatWithSelf,\n canScheduleUntilOnline: Boolean(\n !isChatWithSelf && !isChatWithBot && chat && chatUser\n && isUserId(chatId) && selectUserStatus(global, chatId)?.wasOnline,\n ),\n isRightColumnShown: selectIsRightColumnShown(global),\n isSelectModeActive: selectIsInSelectMode(global),\n withScheduledButton: (\n threadId === MAIN_THREAD_ID\n && messageListType === 'thread'\n && Boolean(scheduledIds?.length)\n ),\n shouldSchedule: messageListType === 'scheduled',\n botKeyboardMessageId,\n botKeyboardPlaceholder: keyboardMessage?.keyboardPlaceholder,\n isForwarding: chatId === global.forwardMessages.toChatId,\n isPollModalOpen: global.isPollModalOpen,\n stickersForEmoji: global.stickers.forEmoji.stickers,\n groupChatMembers: chat?.fullInfo?.members,\n topInlineBotIds: global.topInlineBots?.userIds,\n currentUserId,\n lastSyncTime: global.lastSyncTime,\n contentToBeScheduled: global.messages.contentToBeScheduled,\n shouldSuggestStickers,\n recentEmojis: global.recentEmojis,\n baseEmojiKeywords: baseEmojiKeywords?.keywords,\n emojiKeywords: emojiKeywords?.keywords,\n serverTimeOffset: global.serverTimeOffset,\n inlineBots: global.inlineBots.byUsername,\n isInlineBotLoading: global.inlineBots.isLoading,\n chatBotCommands: chat && chat.fullInfo && chat.fullInfo.botCommands,\n botCommands: chatBot && chatBot.fullInfo ? (chatBot.fullInfo.botCommands || false) : undefined,\n sendAsUser,\n sendAsChat,\n sendAsId,\n };\n },\n)(Composer));\n","import {\n useCallback, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\n\nimport { IS_SAFARI, IS_VOICE_RECORDING_SUPPORTED } from '../../../../util/environment';\nimport * as voiceRecording from '../../../../util/voiceRecording';\nimport captureEscKeyListener from '../../../../util/captureEscKeyListener';\n\ntype ActiveVoiceRecording = { stop: () => Promise; pause: NoneToVoidFunction } | undefined;\n\nconst useVoiceRecording = () => {\n // eslint-disable-next-line no-null/no-null\n const recordButtonRef = useRef(null);\n const [activeVoiceRecording, setActiveVoiceRecording] = useState();\n const startRecordTimeRef = useRef();\n const [currentRecordTime, setCurrentRecordTime] = useState();\n\n useEffect(() => {\n // Preloading worker fixes silent first record on iOS\n if (IS_SAFARI && IS_VOICE_RECORDING_SUPPORTED) {\n void voiceRecording.init();\n }\n }, []);\n\n const startRecordingVoice = useCallback(async () => {\n try {\n const { stop, pause } = await voiceRecording.start((tickVolume: number) => {\n if (recordButtonRef.current) {\n if (startRecordTimeRef.current && Date.now() % 4 === 0) {\n recordButtonRef.current.style.boxShadow = `0 0 0 ${(tickVolume || 0) * 50}px rgba(0,0,0,.15)`;\n }\n setCurrentRecordTime(Date.now());\n }\n });\n startRecordTimeRef.current = Date.now();\n setCurrentRecordTime(Date.now());\n\n setActiveVoiceRecording({ stop, pause });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }, []);\n\n const pauseRecordingVoice = useCallback(() => {\n if (!activeVoiceRecording) {\n return undefined;\n }\n\n if (recordButtonRef.current) {\n recordButtonRef.current.style.boxShadow = 'none';\n }\n try {\n return activeVoiceRecording!.pause();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n return undefined;\n }\n }, [activeVoiceRecording]);\n\n const stopRecordingVoice = useCallback(() => {\n if (!activeVoiceRecording) {\n return undefined;\n }\n\n setActiveVoiceRecording(undefined);\n startRecordTimeRef.current = undefined;\n setCurrentRecordTime(undefined);\n if (recordButtonRef.current) {\n recordButtonRef.current.style.boxShadow = 'none';\n }\n try {\n return activeVoiceRecording!.stop();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n return undefined;\n }\n }, [activeVoiceRecording]);\n\n useEffect(() => {\n return activeVoiceRecording ? captureEscKeyListener(stopRecordingVoice) : undefined;\n }, [activeVoiceRecording, stopRecordingVoice]);\n\n return {\n startRecordingVoice,\n pauseRecordingVoice,\n stopRecordingVoice,\n activeVoiceRecording,\n currentRecordTime,\n recordButtonRef,\n startRecordTimeRef,\n };\n};\n\nexport default useVoiceRecording;\n","import { useEffect, useMemo } from '../../../../lib/teact/teact';\nimport { getDispatch } from '../../../../lib/teact/teactn';\n\nimport { ApiSticker } from '../../../../api/types';\n\nimport { IS_EMOJI_SUPPORTED } from '../../../../util/environment';\n\nimport parseEmojiOnlyString from '../../../common/helpers/parseEmojiOnlyString';\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\n\nexport default function useStickerTooltip(\n isAllowed: boolean,\n html: string,\n stickers?: ApiSticker[],\n isDisabled = false,\n) {\n const cleanHtml = useMemo(() => prepareForRegExp(html).trim(), [html]);\n const { loadStickersForEmoji, clearStickersForEmoji } = getDispatch();\n const isSingleEmoji = (\n (IS_EMOJI_SUPPORTED && parseEmojiOnlyString(cleanHtml) === 1)\n || (!IS_EMOJI_SUPPORTED && Boolean(html.match(/^]*?>$/g)))\n );\n const hasStickers = Boolean(stickers) && isSingleEmoji;\n\n useEffect(() => {\n if (isDisabled) return;\n\n if (isAllowed && isSingleEmoji) {\n loadStickersForEmoji({\n emoji: IS_EMOJI_SUPPORTED ? cleanHtml : cleanHtml.match(/alt=\"(.+)\"/)?.[1],\n });\n } else if (hasStickers || !isSingleEmoji) {\n clearStickersForEmoji();\n }\n // We omit `hasStickers` here to prevent re-fetching after manually closing tooltip (via ).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [html, isSingleEmoji, clearStickersForEmoji, loadStickersForEmoji, isAllowed, isDisabled]);\n\n return {\n isStickerTooltipOpen: hasStickers,\n closeStickerTooltip: clearStickersForEmoji,\n };\n}\n","export default function deleteLastCharacterOutsideSelection(html: string) {\n const tempInput = document.createElement('div');\n tempInput.contentEditable = 'true';\n tempInput.style.position = 'absolute';\n tempInput.style.left = '-10000px';\n tempInput.style.top = '-10000px';\n tempInput.innerHTML = html;\n document.body.appendChild(tempInput);\n let element = tempInput.lastChild!;\n\n if (element.lastChild) {\n // Selects the last and the deepest child of the element.\n while (element.lastChild) {\n element = element.lastChild;\n }\n }\n\n // Gets length of the element's content.\n const textLength = element.textContent!.length;\n const range = document.createRange();\n const selection = window.getSelection()!;\n\n // Sets selection position to the end of the element.\n range.setStart(element, textLength);\n range.setEnd(element, textLength);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('delete', false);\n\n const result = tempInput.innerHTML;\n document.body.removeChild(tempInput);\n\n return result;\n}\n","import { useCallback, useEffect } from '../../../../lib/teact/teact';\nimport { getDispatch } from '../../../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../../../api/types';\n\nimport { EDITABLE_INPUT_ID } from '../../../../config';\nimport parseMessageInput from '../../../../util/parseMessageInput';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport { hasMessageMedia } from '../../../../modules/helpers';\nimport { getTextWithEntitiesAsHtml } from '../../../common/helpers/renderTextWithEntities';\n\nconst useEditing = (\n htmlRef: { current: string },\n setHtml: (html: string) => void,\n editedMessage: ApiMessage | undefined,\n resetComposer: () => void,\n openDeleteModal: () => void,\n) => {\n const { editMessage } = getDispatch();\n\n // TODO useOnChange\n // Handle editing message\n useEffect(() => {\n if (!editedMessage) {\n setHtml('');\n return;\n }\n\n setHtml(getTextWithEntitiesAsHtml(editedMessage.content.text));\n\n requestAnimationFrame(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n focusEditableElement(messageInput, true);\n });\n }, [editedMessage, setHtml]);\n\n const handleEditComplete = useCallback(() => {\n const { text, entities } = parseMessageInput(htmlRef.current!);\n\n if (!editedMessage) {\n return;\n }\n\n if (!text && !hasMessageMedia(editedMessage)) {\n openDeleteModal();\n return;\n }\n\n editMessage({\n messageId: editedMessage.id,\n text,\n entities,\n });\n\n resetComposer();\n }, [editMessage, editedMessage, htmlRef, openDeleteModal, resetComposer]);\n\n return handleEditComplete;\n};\n\nexport default useEditing;\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './MobileSearch';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MobileSearchAsync: FC = (props) => {\n const { isActive } = props;\n const MobileSearch = useModuleLoader(Bundles.Extra, 'MobileSearch', !isActive, true);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return MobileSearch ? : undefined;\n};\n\nexport default memo(MobileSearchAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\nimport { OwnProps } from './MessageSelectToolbar';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MessageSelectToolbarAsync: FC = (props) => {\n const { isActive } = props;\n const MessageSelectToolbar = useModuleLoader(Bundles.Extra, 'MessageSelectToolbar', !isActive);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return MessageSelectToolbar ? : undefined;\n};\n\nexport default memo(MessageSelectToolbarAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './UnpinAllMessagesModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst UnpinAllMessagesModalAsync: FC = (props) => {\n const { isOpen } = props;\n const UnpinAllMessagesModal = useModuleLoader(Bundles.Extra, 'UnpinAllMessagesModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return UnpinAllMessagesModal ? : undefined;\n};\n\nexport default memo(UnpinAllMessagesModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './PaymentModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst PaymentModalAsync: FC = (props) => {\n const { isOpen } = props;\n const PaymentModal = useModuleLoader(Bundles.Extra, 'PaymentModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return PaymentModal ? : undefined;\n};\n\nexport default memo(PaymentModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './ReceiptModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ReceiptModalAsync: FC = (props) => {\n const { isOpen } = props;\n const ReceiptModal = useModuleLoader(Bundles.Extra, 'ReceiptModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ReceiptModal ? : undefined;\n};\n\nexport default memo(ReceiptModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './SeenByModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst SeenByModalAsync: FC = (props) => {\n const { isOpen } = props;\n const SeenByModal = useModuleLoader(Bundles.Extra, 'SeenByModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SeenByModal ? : undefined;\n};\n\nexport default memo(SeenByModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './EmojiInteractionAnimation';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst EmojiInteractionAnimationAsync: FC = (props) => {\n const { emojiInteraction } = props;\n const EmojiInteractionAnimation = useModuleLoader(Bundles.Extra, 'EmojiInteractionAnimation', !emojiInteraction);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return EmojiInteractionAnimation ? : undefined;\n};\n\nexport default memo(EmojiInteractionAnimationAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './ReactorListModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ReactorListModalAsync: FC = (props) => {\n const { isOpen } = props;\n const ReactorListModal = useModuleLoader(Bundles.Extra, 'ReactorListModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ReactorListModal ? : undefined;\n};\n\nexport default memo(ReactorListModalAsync);\n","import React, {\n FC, useEffect, useState, memo, useMemo, useCallback,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiChatBannedRights, MAIN_THREAD_ID } from '../../api/types';\nimport {\n MessageListType,\n MessageList as GlobalMessageList,\n ActiveEmojiInteraction,\n} from '../../global/types';\nimport { ThemeKey } from '../../types';\n\nimport {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n SAFE_SCREEN_WIDTH_FOR_CHAT_INFO,\n ANIMATION_LEVEL_MAX,\n ANIMATION_END_DELAY,\n DARK_THEME_BG_COLOR,\n LIGHT_THEME_BG_COLOR,\n ANIMATION_LEVEL_MIN,\n SUPPORTED_IMAGE_CONTENT_TYPES,\n} from '../../config';\nimport {\n IS_SINGLE_COLUMN_LAYOUT,\n IS_TABLET_COLUMN_LAYOUT,\n IS_TOUCH_ENV,\n MASK_IMAGE_DISABLED,\n} from '../../util/environment';\nimport { DropAreaState } from './composer/DropArea';\nimport {\n selectChat,\n selectChatBot,\n selectCurrentMessageList,\n selectCurrentTextSearch,\n selectIsChatBotNotStarted,\n selectIsInSelectMode,\n selectIsRightColumnShown,\n selectIsUserBlocked,\n selectPinnedIds,\n selectTheme,\n} from '../../modules/selectors';\nimport {\n getCanPostInChat, getMessageSendingRestrictionReason, isChatChannel, isChatSuperGroup, isUserId,\n} from '../../modules/helpers';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport buildClassName from '../../util/buildClassName';\nimport { createMessageHash } from '../../util/routing';\nimport useCustomBackground from '../../hooks/useCustomBackground';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport usePrevDuringAnimation from '../../hooks/usePrevDuringAnimation';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport usePrevious from '../../hooks/usePrevious';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport useOnChange from '../../hooks/useOnChange';\nimport calculateMiddleFooterTransforms from './helpers/calculateMiddleFooterTransforms';\n\nimport Transition from '../ui/Transition';\nimport MiddleHeader from './MiddleHeader';\nimport MessageList from './MessageList';\nimport ScrollDownButton from './ScrollDownButton';\nimport Composer from './composer/Composer';\nimport Button from '../ui/Button';\nimport MobileSearch from './MobileSearch.async';\nimport MessageSelectToolbar from './MessageSelectToolbar.async';\nimport UnpinAllMessagesModal from '../common/UnpinAllMessagesModal.async';\nimport PaymentModal from '../payment/PaymentModal.async';\nimport ReceiptModal from '../payment/ReceiptModal.async';\nimport SeenByModal from '../common/SeenByModal.async';\nimport EmojiInteractionAnimation from './EmojiInteractionAnimation.async';\nimport ReactorListModal from './ReactorListModal.async';\n\nimport './MiddleColumn.scss';\n\ntype StateProps = {\n chatId?: string;\n threadId?: number;\n messageListType?: MessageListType;\n isPrivate?: boolean;\n isPinnedMessageList?: boolean;\n isScheduledMessageList?: boolean;\n canPost?: boolean;\n currentUserBannedRights?: ApiChatBannedRights;\n defaultBannedRights?: ApiChatBannedRights;\n hasPinnedOrAudioPlayer?: boolean;\n pinnedMessagesCount?: number;\n theme: ThemeKey;\n customBackground?: string;\n backgroundColor?: string;\n patternColor?: string;\n isLeftColumnShown?: boolean;\n isRightColumnShown?: boolean;\n isBackgroundBlurred?: boolean;\n isMobileSearchActive?: boolean;\n isSelectModeActive?: boolean;\n isPaymentModalOpen?: boolean;\n isReceiptModalOpen?: boolean;\n isSeenByModalOpen: boolean;\n isReactorListModalOpen: boolean;\n animationLevel?: number;\n shouldSkipHistoryAnimations?: boolean;\n currentTransitionKey: number;\n messageLists?: GlobalMessageList[];\n isChannel?: boolean;\n canSubscribe?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n activeEmojiInteraction?: ActiveEmojiInteraction;\n};\n\nconst CLOSE_ANIMATION_DURATION = IS_SINGLE_COLUMN_LAYOUT ? 450 + ANIMATION_END_DELAY : undefined;\n\nfunction isImage(item: DataTransferItem) {\n return item.kind === 'file' && item.type && SUPPORTED_IMAGE_CONTENT_TYPES.has(item.type);\n}\n\nconst MiddleColumn: FC = ({\n chatId,\n threadId,\n messageListType,\n isPrivate,\n isPinnedMessageList,\n messageLists,\n canPost,\n currentUserBannedRights,\n defaultBannedRights,\n hasPinnedOrAudioPlayer,\n pinnedMessagesCount,\n customBackground,\n theme,\n backgroundColor,\n patternColor,\n isLeftColumnShown,\n isRightColumnShown,\n isBackgroundBlurred,\n isMobileSearchActive,\n isSelectModeActive,\n isPaymentModalOpen,\n isReceiptModalOpen,\n isSeenByModalOpen,\n isReactorListModalOpen,\n animationLevel,\n shouldSkipHistoryAnimations,\n currentTransitionKey,\n isChannel,\n canSubscribe,\n canStartBot,\n canRestartBot,\n activeEmojiInteraction,\n}) => {\n const {\n openChat,\n unpinAllMessages,\n loadUser,\n closeLocalTextSearch,\n exitMessageSelectMode,\n closePaymentModal,\n clearReceipt,\n joinChannel,\n sendBotCommand,\n restartBot,\n } = getDispatch();\n\n const { width: windowWidth } = useWindowSize();\n\n const lang = useLang();\n const [dropAreaState, setDropAreaState] = useState(DropAreaState.None);\n const [isFabShown, setIsFabShown] = useState();\n const [isNotchShown, setIsNotchShown] = useState();\n const [isUnpinModalOpen, setIsUnpinModalOpen] = useState(false);\n\n const hasTools = hasPinnedOrAudioPlayer && (\n windowWidth < MOBILE_SCREEN_MAX_WIDTH\n || (\n isRightColumnShown && windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n && windowWidth < SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n ) || (\n windowWidth >= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n && windowWidth < SAFE_SCREEN_WIDTH_FOR_CHAT_INFO\n )\n );\n\n const renderingChatId = usePrevDuringAnimation(chatId, CLOSE_ANIMATION_DURATION);\n const renderingThreadId = usePrevDuringAnimation(threadId, CLOSE_ANIMATION_DURATION);\n const renderingMessageListType = usePrevDuringAnimation(messageListType, CLOSE_ANIMATION_DURATION);\n const renderingCanSubscribe = usePrevDuringAnimation(canSubscribe, CLOSE_ANIMATION_DURATION);\n const renderingCanStartBot = usePrevDuringAnimation(canStartBot, CLOSE_ANIMATION_DURATION);\n const renderingCanRestartBot = usePrevDuringAnimation(canRestartBot, CLOSE_ANIMATION_DURATION);\n const renderingCanPost = usePrevDuringAnimation(canPost, CLOSE_ANIMATION_DURATION)\n && !renderingCanRestartBot && !renderingCanStartBot && !renderingCanSubscribe;\n const renderingHasTools = usePrevDuringAnimation(hasTools, CLOSE_ANIMATION_DURATION);\n const renderingIsFabShown = usePrevDuringAnimation(isFabShown, CLOSE_ANIMATION_DURATION);\n const renderingIsChannel = usePrevDuringAnimation(isChannel, CLOSE_ANIMATION_DURATION);\n\n const prevTransitionKey = usePrevious(currentTransitionKey);\n\n const cleanupExceptionKey = (\n prevTransitionKey !== undefined && prevTransitionKey < currentTransitionKey ? prevTransitionKey : undefined\n );\n\n const { isReady, handleOpenEnd, handleSlideStop } = useIsReady(\n !shouldSkipHistoryAnimations && animationLevel !== ANIMATION_LEVEL_MIN,\n currentTransitionKey,\n prevTransitionKey,\n chatId,\n );\n\n useEffect(() => {\n return chatId\n ? captureEscKeyListener(() => {\n openChat({ id: undefined });\n })\n : undefined;\n }, [chatId, openChat]);\n\n useOnChange(() => {\n setDropAreaState(DropAreaState.None);\n setIsFabShown(undefined);\n setIsNotchShown(undefined);\n }, [chatId]);\n\n // Fix for mobile virtual keyboard\n useEffect(() => {\n const { visualViewport } = window as any;\n if (!visualViewport) {\n return undefined;\n }\n\n const handleResize = () => {\n if (window.visualViewport.height !== document.documentElement.clientHeight) {\n document.body.classList.add('keyboard-visible');\n } else {\n document.body.classList.remove('keyboard-visible');\n }\n };\n\n visualViewport.addEventListener('resize', handleResize);\n\n return () => {\n visualViewport.removeEventListener('resize', handleResize);\n };\n }, []);\n\n useEffect(() => {\n if (isPrivate) {\n loadUser({ userId: chatId });\n }\n }, [chatId, isPrivate, loadUser]);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n const { items } = e.dataTransfer || {};\n const shouldDrawQuick = items && items.length > 0 && Array.from(items)\n // Filter unnecessary element for drag and drop images in Firefox (https://github.com/Ajaxy/telegram-tt/issues/49)\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#image\n .filter((item) => item.type !== 'text/uri-list')\n // As of September 2021, native clients suggest \"send quick, but compressed\" only for images\n .every(isImage);\n\n setDropAreaState(shouldDrawQuick ? DropAreaState.QuickFile : DropAreaState.Document);\n }, []);\n\n const handleHideDropArea = useCallback(() => {\n setDropAreaState(DropAreaState.None);\n }, []);\n\n const handleOpenUnpinModal = useCallback(() => {\n setIsUnpinModalOpen(true);\n }, []);\n\n const closeUnpinModal = useCallback(() => {\n setIsUnpinModalOpen(false);\n }, []);\n\n const handleUnpinAllMessages = useCallback(() => {\n unpinAllMessages({ chatId });\n closeUnpinModal();\n openChat({ id: chatId });\n }, [unpinAllMessages, openChat, closeUnpinModal, chatId]);\n\n const handleTabletFocus = useCallback(() => {\n openChat({ id: chatId });\n }, [openChat, chatId]);\n\n const handleSubscribeClick = useCallback(() => {\n joinChannel({ chatId });\n }, [joinChannel, chatId]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const customBackgroundValue = useCustomBackground(theme, customBackground);\n\n const className = buildClassName(\n renderingHasTools && 'has-header-tools',\n customBackground && 'custom-bg-image',\n backgroundColor && 'custom-bg-color',\n customBackground && isBackgroundBlurred && 'blurred',\n MASK_IMAGE_DISABLED ? 'mask-image-disabled' : 'mask-image-enabled',\n );\n\n const messagingDisabledClassName = buildClassName(\n 'messaging-disabled',\n !isSelectModeActive && 'shown',\n );\n\n const messageSendingRestrictionReason = getMessageSendingRestrictionReason(\n lang, currentUserBannedRights, defaultBannedRights,\n );\n\n // CSS Variables calculation doesn't work properly with transforms, so we calculate transform values in JS\n const {\n composerHiddenScale, toolbarHiddenScale,\n composerTranslateX, toolbarTranslateX,\n unpinHiddenScale, toolbarForUnpinHiddenScale,\n } = useMemo(\n () => calculateMiddleFooterTransforms(windowWidth, renderingCanPost),\n [renderingCanPost, windowWidth],\n );\n\n const footerClassName = buildClassName(\n 'middle-column-footer',\n !renderingCanPost && 'no-composer',\n renderingCanPost && isNotchShown && !isSelectModeActive && 'with-notch',\n );\n\n const closeChat = () => {\n openChat({ id: undefined }, { forceSyncOnIOs: true });\n };\n\n useHistoryBack(\n renderingChatId && renderingThreadId,\n closeChat, undefined, undefined, undefined,\n messageLists?.map(createMessageHash) || [],\n );\n\n useHistoryBack(isMobileSearchActive, closeLocalTextSearch);\n useHistoryBack(isSelectModeActive, exitMessageSelectMode);\n\n const isMessagingDisabled = Boolean(\n !isPinnedMessageList && !renderingCanPost && !renderingCanRestartBot && !renderingCanStartBot\n && !renderingCanSubscribe && messageSendingRestrictionReason,\n );\n const withMessageListBottomShift = Boolean(\n renderingCanRestartBot || renderingCanSubscribe || renderingCanStartBot || isPinnedMessageList,\n );\n const withExtraShift = Boolean(isMessagingDisabled || isSelectModeActive || isPinnedMessageList);\n\n return (\n \n \n
\n {renderingChatId && renderingThreadId && (\n <>\n
\n \n \n {() => (\n <>\n \n
\n {renderingCanPost && (\n \n )}\n {isPinnedMessageList && (\n
\n \n \n {lang('Chat.Pinned.UnpinAll', pinnedMessagesCount, 'i')}\n \n
\n )}\n {isMessagingDisabled && (\n
\n
\n \n {messageSendingRestrictionReason}\n \n
\n
\n )}\n {IS_SINGLE_COLUMN_LAYOUT && renderingCanSubscribe && (\n
\n \n {lang(renderingIsChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n
\n )}\n {IS_SINGLE_COLUMN_LAYOUT && renderingCanStartBot && (\n
\n \n {lang('BotStart')}\n \n
\n )}\n {IS_SINGLE_COLUMN_LAYOUT && renderingCanRestartBot && (\n
\n \n {lang('BotRestart')}\n \n
\n )}\n \n \n \n \n \n
\n \n )}\n \n\n \n
\n {IS_SINGLE_COLUMN_LAYOUT && }\n \n )}\n {chatId && (\n \n )}\n {activeEmojiInteraction && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const {\n isBlurred: isBackgroundBlurred, background: customBackground, backgroundColor, patternColor,\n } = global.settings.themes[theme] || {};\n\n const { messageLists } = global.messages;\n const currentMessageList = selectCurrentMessageList(global);\n const { isLeftColumnShown, chats: { listIds }, activeEmojiInteraction } = global;\n\n const state: StateProps = {\n theme,\n customBackground,\n backgroundColor,\n patternColor,\n isLeftColumnShown,\n isRightColumnShown: selectIsRightColumnShown(global),\n isBackgroundBlurred,\n isMobileSearchActive: Boolean(IS_SINGLE_COLUMN_LAYOUT && selectCurrentTextSearch(global)),\n isSelectModeActive: selectIsInSelectMode(global),\n isPaymentModalOpen: global.payment.isPaymentModalOpen,\n isReceiptModalOpen: Boolean(global.payment.receipt),\n isSeenByModalOpen: Boolean(global.seenByModal),\n isReactorListModalOpen: Boolean(global.reactorModal),\n animationLevel: global.settings.byKey.animationLevel,\n currentTransitionKey: Math.max(0, global.messages.messageLists.length - 1),\n activeEmojiInteraction,\n };\n\n if (!currentMessageList || !listIds.active) {\n return state;\n }\n\n const { chatId, threadId, type: messageListType } = currentMessageList;\n const chat = selectChat(global, chatId);\n const bot = selectChatBot(global, chatId);\n const pinnedIds = selectPinnedIds(global, chatId);\n const { chatId: audioChatId, messageId: audioMessageId } = global.audioPlayer;\n\n const canPost = chat && getCanPostInChat(chat, threadId);\n const isBotNotStarted = selectIsChatBotNotStarted(global, chatId);\n const isPinnedMessageList = messageListType === 'pinned';\n const isScheduledMessageList = messageListType === 'scheduled';\n const isMainThread = messageListType === 'thread' && threadId === MAIN_THREAD_ID;\n const isChannel = Boolean(chat && isChatChannel(chat));\n const canSubscribe = Boolean(\n chat && isMainThread && (isChannel || isChatSuperGroup(chat)) && chat.isNotJoined,\n );\n const canRestartBot = Boolean(bot && selectIsUserBlocked(global, bot.id));\n const canStartBot = !canRestartBot && isBotNotStarted;\n\n return {\n ...state,\n chatId,\n threadId,\n messageListType,\n isPrivate: isUserId(chatId),\n canPost: !isPinnedMessageList && (!chat || canPost) && !isBotNotStarted,\n isPinnedMessageList,\n isScheduledMessageList,\n currentUserBannedRights: chat?.currentUserBannedRights,\n defaultBannedRights: chat?.defaultBannedRights,\n hasPinnedOrAudioPlayer: (\n threadId !== MAIN_THREAD_ID\n || Boolean(!isPinnedMessageList && pinnedIds?.length)\n || Boolean(audioChatId && audioMessageId)\n ),\n pinnedMessagesCount: pinnedIds ? pinnedIds.length : 0,\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n messageLists,\n isChannel,\n canSubscribe,\n canStartBot,\n canRestartBot,\n };\n },\n)(MiddleColumn));\n\nfunction useIsReady(\n withAnimations?: boolean,\n currentTransitionKey?: number,\n prevTransitionKey?: number,\n chatId?: string,\n) {\n const [isReady, setIsReady] = useState(!IS_SINGLE_COLUMN_LAYOUT);\n const forceUpdate = useForceUpdate();\n\n const willSwitchMessageList = prevTransitionKey !== undefined && prevTransitionKey !== currentTransitionKey;\n if (willSwitchMessageList) {\n if (withAnimations) {\n setIsReady(false);\n } else {\n forceUpdate();\n }\n }\n\n useOnChange(() => {\n if (!withAnimations) {\n setIsReady(true);\n }\n }, [withAnimations]);\n\n function handleOpenEnd(e: React.TransitionEvent) {\n if (e.propertyName === 'transform' && e.target === e.currentTarget) {\n setIsReady(Boolean(chatId));\n }\n }\n\n function handleSlideStop() {\n setIsReady(true);\n }\n\n return {\n isReady: isReady && !willSwitchMessageList,\n handleOpenEnd: withAnimations ? handleOpenEnd : undefined,\n handleSlideStop: withAnimations ? handleSlideStop : undefined,\n };\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { ManagementScreens, ProfileState } from '../../types';\nimport { ApiExportedInvite } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { debounce } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport {\n selectChat,\n selectCurrentGifSearch,\n selectCurrentStickerSearch,\n selectCurrentTextSearch,\n selectIsChatWithSelf,\n selectUser,\n} from '../../modules/selectors';\nimport {\n getCanAddContact, isChatAdmin, isChatChannel, isUserId,\n} from '../../modules/helpers';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport { getDayStartAt } from '../../util/dateFormat';\n\nimport SearchInput from '../ui/SearchInput';\nimport Button from '../ui/Button';\nimport Transition from '../ui/Transition';\nimport ConfirmDialog from '../ui/ConfirmDialog';\n\nimport './RightHeader.scss';\n\ntype OwnProps = {\n chatId?: string;\n isColumnOpen?: boolean;\n isProfile?: boolean;\n isSearch?: boolean;\n isManagement?: boolean;\n isStickerSearch?: boolean;\n isGifSearch?: boolean;\n isPollResults?: boolean;\n isAddingChatMembers?: boolean;\n shouldSkipAnimation?: boolean;\n profileState?: ProfileState;\n managementScreen?: ManagementScreens;\n onClose: () => void;\n onScreenSelect: (screen: ManagementScreens) => void;\n};\n\ntype StateProps = {\n canAddContact?: boolean;\n canManage?: boolean;\n isChannel?: boolean;\n userId?: string;\n messageSearchQuery?: string;\n stickerSearchQuery?: string;\n gifSearchQuery?: string;\n isEditingInvite?: boolean;\n currentInviteInfo?: ApiExportedInvite;\n};\n\nconst COLUMN_CLOSE_DELAY_MS = 300;\nconst runDebouncedForSearch = debounce((cb) => cb(), 200, false);\n\nenum HeaderContent {\n Profile,\n MemberList,\n SharedMedia,\n Search,\n Management,\n ManageInitial,\n ManageChannelSubscribers,\n ManageChatAdministrators,\n ManageChatPrivacyType,\n ManageDiscussion,\n ManageGroupPermissions,\n ManageGroupRemovedUsers,\n ManageGroupUserPermissionsCreate,\n ManageGroupUserPermissions,\n ManageGroupRecentActions,\n ManageGroupAdminRights,\n ManageGroupNewAdminRights,\n ManageGroupMembers,\n ManageGroupAddAdmins,\n StickerSearch,\n GifSearch,\n PollResults,\n AddingMembers,\n ManageInvites,\n ManageEditInvite,\n ManageReactions,\n ManageInviteInfo,\n ManageJoinRequests,\n}\n\nconst RightHeader: FC = ({\n chatId,\n isColumnOpen,\n isProfile,\n isSearch,\n isManagement,\n isStickerSearch,\n isGifSearch,\n isPollResults,\n isAddingChatMembers,\n profileState,\n managementScreen,\n canAddContact,\n userId,\n canManage,\n isChannel,\n onClose,\n onScreenSelect,\n messageSearchQuery,\n stickerSearchQuery,\n gifSearchQuery,\n shouldSkipAnimation,\n isEditingInvite,\n currentInviteInfo,\n}) => {\n const {\n setLocalTextSearchQuery,\n setStickerSearchQuery,\n setGifSearchQuery,\n searchTextMessagesLocal,\n toggleManagement,\n openHistoryCalendar,\n addContact,\n setEditingExportedInvite,\n deleteExportedChatInvite,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const backButtonRef = useRef(null);\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n\n const handleEditInviteClick = useCallback(() => {\n setEditingExportedInvite({ chatId: chatId!, invite: currentInviteInfo! });\n onScreenSelect(ManagementScreens.EditInvite);\n }, [chatId, currentInviteInfo, onScreenSelect, setEditingExportedInvite]);\n\n const handleDeleteInviteClick = useCallback(() => {\n deleteExportedChatInvite({ chatId: chatId!, link: currentInviteInfo!.link });\n onScreenSelect(ManagementScreens.Invites);\n closeDeleteDialog();\n }, [chatId, closeDeleteDialog, currentInviteInfo, deleteExportedChatInvite, onScreenSelect]);\n\n const handleMessageSearchQueryChange = useCallback((query: string) => {\n setLocalTextSearchQuery({ query });\n\n if (query.length) {\n runDebouncedForSearch(searchTextMessagesLocal);\n }\n }, [searchTextMessagesLocal, setLocalTextSearchQuery]);\n\n const handleStickerSearchQueryChange = useCallback((query: string) => {\n setStickerSearchQuery({ query });\n }, [setStickerSearchQuery]);\n\n const handleGifSearchQueryChange = useCallback((query: string) => {\n setGifSearchQuery({ query });\n }, [setGifSearchQuery]);\n\n const handleAddContact = useCallback(() => {\n addContact({ userId });\n }, [addContact, userId]);\n\n const [shouldSkipTransition, setShouldSkipTransition] = useState(!isColumnOpen);\n\n useEffect(() => {\n setTimeout(() => {\n setShouldSkipTransition(!isColumnOpen);\n }, COLUMN_CLOSE_DELAY_MS);\n }, [isColumnOpen]);\n\n const lang = useLang();\n const contentKey = isProfile ? (\n profileState === ProfileState.Profile ? (\n HeaderContent.Profile\n ) : profileState === ProfileState.SharedMedia ? (\n HeaderContent.SharedMedia\n ) : profileState === ProfileState.MemberList ? (\n HeaderContent.MemberList\n ) : -1 // Never reached\n ) : isSearch ? (\n HeaderContent.Search\n ) : isPollResults ? (\n HeaderContent.PollResults\n ) : isStickerSearch ? (\n HeaderContent.StickerSearch\n ) : isGifSearch ? (\n HeaderContent.GifSearch\n ) : isAddingChatMembers ? (\n HeaderContent.AddingMembers\n ) : isManagement ? (\n managementScreen === ManagementScreens.Initial ? (\n HeaderContent.ManageInitial\n ) : managementScreen === ManagementScreens.ChatPrivacyType ? (\n HeaderContent.ManageChatPrivacyType\n ) : managementScreen === ManagementScreens.Discussion ? (\n HeaderContent.ManageDiscussion\n ) : managementScreen === ManagementScreens.ChannelSubscribers ? (\n HeaderContent.ManageChannelSubscribers\n ) : managementScreen === ManagementScreens.GroupPermissions ? (\n HeaderContent.ManageGroupPermissions\n ) : managementScreen === ManagementScreens.ChatAdministrators ? (\n HeaderContent.ManageChatAdministrators\n ) : managementScreen === ManagementScreens.GroupRemovedUsers ? (\n HeaderContent.ManageGroupRemovedUsers\n ) : managementScreen === ManagementScreens.GroupUserPermissionsCreate ? (\n HeaderContent.ManageGroupUserPermissionsCreate\n ) : managementScreen === ManagementScreens.GroupUserPermissions ? (\n HeaderContent.ManageGroupUserPermissions\n ) : managementScreen === ManagementScreens.GroupRecentActions ? (\n HeaderContent.ManageGroupRecentActions\n ) : managementScreen === ManagementScreens.ChatAdminRights ? (\n HeaderContent.ManageGroupAdminRights\n ) : managementScreen === ManagementScreens.ChatNewAdminRights ? (\n HeaderContent.ManageGroupNewAdminRights\n ) : managementScreen === ManagementScreens.GroupMembers ? (\n HeaderContent.ManageGroupMembers\n ) : managementScreen === ManagementScreens.Invites ? (\n HeaderContent.ManageInvites\n ) : managementScreen === ManagementScreens.EditInvite ? (\n HeaderContent.ManageEditInvite\n ) : managementScreen === ManagementScreens.GroupAddAdmins ? (\n HeaderContent.ManageGroupAddAdmins\n ) : managementScreen === ManagementScreens.Reactions ? (\n HeaderContent.ManageReactions\n ) : managementScreen === ManagementScreens.InviteInfo ? (\n HeaderContent.ManageInviteInfo\n ) : managementScreen === ManagementScreens.JoinRequests ? (\n HeaderContent.ManageJoinRequests\n ) : undefined // Never reached\n ) : undefined; // When column is closed\n\n const renderingContentKey = useCurrentOrPrev(contentKey, true) ?? -1;\n\n function renderHeaderContent() {\n if (renderingContentKey === -1) {\n return undefined;\n }\n\n switch (renderingContentKey) {\n case HeaderContent.PollResults:\n return

{lang('PollResults')}

;\n case HeaderContent.Search:\n return (\n <>\n \n openHistoryCalendar({ selectedAt: getDayStartAt(Date.now()) })}\n ariaLabel=\"Search messages by date\"\n >\n \n \n \n );\n case HeaderContent.AddingMembers:\n return

{lang(isChannel ? 'ChannelAddSubscribers' : 'GroupAddMembers')}

;\n case HeaderContent.ManageInitial:\n return

{lang('Edit')}

;\n case HeaderContent.ManageChatPrivacyType:\n return

{lang(isChannel ? 'ChannelTypeHeader' : 'GroupTypeHeader')}

;\n case HeaderContent.ManageDiscussion:\n return

{lang('Discussion')}

;\n case HeaderContent.ManageChatAdministrators:\n return

{lang('ChannelAdministrators')}

;\n case HeaderContent.ManageGroupRecentActions:\n return

{lang('Group.Info.AdminLog')}

;\n case HeaderContent.ManageGroupAdminRights:\n return

{lang('EditAdminRights')}

;\n case HeaderContent.ManageGroupNewAdminRights:\n return

{lang('SetAsAdmin')}

;\n case HeaderContent.ManageGroupPermissions:\n return

{lang('ChannelPermissions')}

;\n case HeaderContent.ManageGroupRemovedUsers:\n return

{lang('ChannelBlockedUsers')}

;\n case HeaderContent.ManageGroupUserPermissionsCreate:\n return

{lang('ChannelAddException')}

;\n case HeaderContent.ManageGroupUserPermissions:\n return

{lang('UserRestrictions')}

;\n case HeaderContent.ManageInvites:\n return

{lang('lng_group_invite_title')}

;\n case HeaderContent.ManageEditInvite:\n return

{isEditingInvite ? lang('EditLink') : lang('NewLink')}

;\n case HeaderContent.ManageInviteInfo:\n return (\n <>\n

{lang('InviteLink')}

\n
\n {currentInviteInfo && !currentInviteInfo.isRevoked && (\n \n \n \n )}\n {currentInviteInfo && currentInviteInfo.isRevoked && (\n <>\n \n \n \n \n \n )}\n
\n \n );\n case HeaderContent.ManageJoinRequests:\n return

{isChannel ? lang('SubscribeRequests') : lang('MemberRequests')}

;\n case HeaderContent.ManageGroupAddAdmins:\n return

{lang('Channel.Management.AddModerator')}

;\n case HeaderContent.StickerSearch:\n return (\n \n );\n case HeaderContent.GifSearch:\n return (\n \n );\n case HeaderContent.SharedMedia:\n return

{lang('SharedMedia')}

;\n case HeaderContent.ManageChannelSubscribers:\n return

{lang('ChannelSubscribers')}

;\n case HeaderContent.MemberList:\n case HeaderContent.ManageGroupMembers:\n return

{lang('GroupMembers')}

;\n case HeaderContent.ManageReactions:\n return

{lang('Reactions')}

;\n default:\n return (\n <>\n

Profile

\n
\n {canAddContact && (\n \n \n \n )}\n {canManage && (\n \n \n \n )}\n
\n \n );\n }\n }\n\n const isBackButton = (\n IS_SINGLE_COLUMN_LAYOUT\n || contentKey === HeaderContent.SharedMedia\n || contentKey === HeaderContent.MemberList\n || contentKey === HeaderContent.AddingMembers\n || isManagement\n );\n\n const buttonClassName = buildClassName(\n 'animated-close-icon',\n isBackButton && 'state-back',\n (shouldSkipTransition || shouldSkipAnimation) && 'no-transition',\n );\n\n return (\n
\n \n
\n \n \n {renderHeaderContent}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isProfile, isManagement }): StateProps => {\n const { query: messageSearchQuery } = selectCurrentTextSearch(global) || {};\n const { query: stickerSearchQuery } = selectCurrentStickerSearch(global) || {};\n const { query: gifSearchQuery } = selectCurrentGifSearch(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const isChannel = chat && isChatChannel(chat);\n const user = isProfile && chatId && isUserId(chatId) ? selectUser(global, chatId) : undefined;\n\n const canAddContact = user && getCanAddContact(user);\n const canManage = Boolean(\n !isManagement\n && isProfile\n && !canAddContact\n && chat\n && !selectIsChatWithSelf(global, chat.id)\n // chat.isCreator is for Basic Groups\n && (isUserId(chat.id) || ((isChatAdmin(chat) || chat.isCreator) && !chat.isNotJoined)),\n );\n const isEditingInvite = Boolean(chatId && global.management.byChatId[chatId]?.editingInvite);\n const currentInviteInfo = chatId ? global.management.byChatId[chatId]?.inviteInfo?.invite : undefined;\n\n return {\n canManage,\n canAddContact,\n isChannel,\n userId: user?.id,\n messageSearchQuery,\n stickerSearchQuery,\n gifSearchQuery,\n isEditingInvite,\n currentInviteInfo,\n };\n },\n)(RightHeader));\n","import { useMemo, useRef } from '../../../lib/teact/teact';\n\nimport {\n ApiChat, ApiChatMember, ApiMessage, ApiUser, ApiUserStatus,\n} from '../../../api/types';\nimport { ProfileTabType, SharedMediaType } from '../../../types';\n\nimport { MEMBERS_SLICE, MESSAGE_SEARCH_SLICE, SHARED_MEDIA_SLICE } from '../../../config';\nimport { getMessageContentIds, sortChatIds, sortUserIds } from '../../../modules/helpers';\nimport useOnChange from '../../../hooks/useOnChange';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\n\nexport default function useProfileViewportIds(\n isRightColumnShown: boolean,\n loadMoreMembers: AnyToVoidFunction,\n loadCommonChats: AnyToVoidFunction,\n searchMessages: AnyToVoidFunction,\n tabType: ProfileTabType,\n mediaSearchType?: SharedMediaType,\n groupChatMembers?: ApiChatMember[],\n commonChatIds?: string[],\n usersById?: Record,\n userStatusesById?: Record,\n chatsById?: Record,\n chatMessages?: Record,\n foundIds?: number[],\n chatId?: string,\n lastSyncTime?: number,\n serverTimeOffset = 0,\n) {\n const resultType = tabType === 'members' || !mediaSearchType ? tabType : mediaSearchType;\n\n const memberIds = useMemo(() => {\n if (!groupChatMembers || !usersById || !userStatusesById) {\n return undefined;\n }\n\n return sortUserIds(\n groupChatMembers.map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n }, [groupChatMembers, serverTimeOffset, usersById, userStatusesById]);\n\n const chatIds = useMemo(() => {\n if (!commonChatIds || !chatsById) {\n return undefined;\n }\n\n return sortChatIds(commonChatIds, chatsById, true);\n }, [chatsById, commonChatIds]);\n\n const [memberViewportIds, getMoreMembers, noProfileInfoForMembers] = useInfiniteScrollForLoadableItems(\n resultType, loadMoreMembers, lastSyncTime, memberIds,\n );\n\n const [mediaViewportIds, getMoreMedia, noProfileInfoForMedia] = useInfiniteScrollForSharedMedia(\n 'media', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [documentViewportIds, getMoreDocuments, noProfileInfoForDocuments] = useInfiniteScrollForSharedMedia(\n 'documents', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [linkViewportIds, getMoreLinks, noProfileInfoForLinks] = useInfiniteScrollForSharedMedia(\n 'links', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [audioViewportIds, getMoreAudio, noProfileInfoForAudio] = useInfiniteScrollForSharedMedia(\n 'audio', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [voiceViewportIds, getMoreVoices, noProfileInfoForVoices] = useInfiniteScrollForSharedMedia(\n 'voice', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [commonChatViewportIds, getMoreCommonChats, noProfileInfoForCommonChats] = useInfiniteScrollForLoadableItems(\n resultType, loadCommonChats, lastSyncTime, chatIds,\n );\n\n let viewportIds: number[] | string[] | undefined;\n let getMore: AnyToVoidFunction | undefined;\n let noProfileInfo = false;\n\n switch (resultType) {\n case 'members':\n viewportIds = memberViewportIds;\n getMore = getMoreMembers;\n noProfileInfo = noProfileInfoForMembers;\n break;\n case 'commonChats':\n viewportIds = commonChatViewportIds;\n getMore = getMoreCommonChats;\n noProfileInfo = noProfileInfoForCommonChats;\n break;\n case 'media':\n viewportIds = mediaViewportIds;\n getMore = getMoreMedia;\n noProfileInfo = noProfileInfoForMedia;\n break;\n case 'documents':\n viewportIds = documentViewportIds;\n getMore = getMoreDocuments;\n noProfileInfo = noProfileInfoForDocuments;\n break;\n case 'links':\n viewportIds = linkViewportIds;\n getMore = getMoreLinks;\n noProfileInfo = noProfileInfoForLinks;\n break;\n case 'audio':\n viewportIds = audioViewportIds;\n getMore = getMoreAudio;\n noProfileInfo = noProfileInfoForAudio;\n break;\n case 'voice':\n viewportIds = voiceViewportIds;\n getMore = getMoreVoices;\n noProfileInfo = noProfileInfoForVoices;\n break;\n }\n\n return [resultType, viewportIds, getMore, noProfileInfo] as const;\n}\n\nfunction useInfiniteScrollForLoadableItems(\n currentResultType?: ProfileTabType,\n handleLoadMore?: AnyToVoidFunction,\n lastSyncTime?: number,\n itemIds?: string[],\n) {\n const [viewportIds, getMore] = useInfiniteScroll(\n lastSyncTime ? handleLoadMore : undefined,\n itemIds,\n undefined,\n MEMBERS_SLICE,\n );\n\n const isOnTop = !viewportIds || !itemIds || viewportIds[0] === itemIds[0];\n\n return [viewportIds, getMore, !isOnTop] as const;\n}\n\nfunction useInfiniteScrollForSharedMedia(\n forSharedMediaType: SharedMediaType,\n currentResultType?: ProfileTabType,\n handleLoadMore?: AnyToVoidFunction,\n lastSyncTime?: number,\n chatMessages?: Record,\n foundIds?: number[],\n) {\n const messageIdsRef = useRef();\n\n useOnChange(() => {\n if (currentResultType === forSharedMediaType && chatMessages && foundIds) {\n messageIdsRef.current = getMessageContentIds(\n chatMessages,\n foundIds,\n forSharedMediaType,\n );\n }\n }, [chatMessages, foundIds, currentResultType, forSharedMediaType]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n lastSyncTime ? handleLoadMore : undefined,\n messageIdsRef.current,\n undefined,\n forSharedMediaType === 'media' ? SHARED_MEDIA_SLICE : MESSAGE_SEARCH_SLICE,\n );\n\n const isOnTop = !viewportIds || !messageIdsRef.current || viewportIds[0] === messageIdsRef.current[0];\n\n return [viewportIds, getMore, !isOnTop] as const;\n}\n","import { useCallback, useEffect } from '../../../lib/teact/teact';\n\nimport { ProfileState } from '../../../types';\n\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport { throttle } from '../../../util/schedulers';\nimport useEffectWithPrevDeps from '../../../hooks/useEffectWithPrevDeps';\n\nconst TRANSITION_DURATION = 300;\nconst PROGRAMMATIC_SCROLL_TIMEOUT_MS = 350;\n\nconst runThrottledForScroll = throttle((cb) => cb(), 250, false);\n\nlet isScrollingProgrammatically = false;\n\nexport default function useProfileState(\n containerRef: { current: HTMLDivElement | null },\n tabType: string,\n profileState: ProfileState,\n onProfileStateChange: (state: ProfileState) => void,\n) {\n // Scroll to tabs if needed\n useEffectWithPrevDeps(([prevTabType]) => {\n if (prevTabType && prevTabType !== tabType) {\n const container = containerRef.current!;\n const tabsEl = container.querySelector('.TabList')!;\n if (container.scrollTop < tabsEl.offsetTop) {\n onProfileStateChange(tabType === 'members' ? ProfileState.MemberList : ProfileState.SharedMedia);\n isScrollingProgrammatically = true;\n fastSmoothScroll(container, tabsEl, 'start', undefined, undefined, undefined, TRANSITION_DURATION);\n setTimeout(() => {\n isScrollingProgrammatically = false;\n }, PROGRAMMATIC_SCROLL_TIMEOUT_MS);\n }\n }\n }, [tabType, onProfileStateChange]);\n\n // Scroll to top\n useEffectWithPrevDeps(([prevProfileState]) => {\n if (profileState !== ProfileState.Profile || profileState === prevProfileState) {\n return;\n }\n\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const tabListEl = container.querySelector('.TabList');\n if (!tabListEl || tabListEl.offsetTop > container.scrollTop) {\n return;\n }\n\n isScrollingProgrammatically = true;\n fastSmoothScroll(\n container,\n container.firstElementChild as HTMLElement,\n 'start',\n undefined,\n container.offsetHeight * 2,\n );\n\n setTimeout(() => {\n isScrollingProgrammatically = false;\n }, PROGRAMMATIC_SCROLL_TIMEOUT_MS);\n\n onProfileStateChange(profileState);\n }, [profileState]);\n\n const determineProfileState = useCallback(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const tabListEl = container.querySelector('.TabList');\n if (!tabListEl) {\n return;\n }\n\n let state: ProfileState = ProfileState.Profile;\n if (container.scrollTop >= tabListEl.offsetTop) {\n state = tabType === 'members'\n ? ProfileState.MemberList\n : ProfileState.SharedMedia;\n }\n\n onProfileStateChange(state);\n }, [containerRef, onProfileStateChange, tabType]);\n\n // Determine profile state when switching tabs\n useEffect(() => {\n if (isScrollingProgrammatically) {\n return;\n }\n\n determineProfileState();\n }, [determineProfileState, tabType]);\n\n // Determine profile state when scrolling\n const handleScroll = useCallback(() => {\n if (isScrollingProgrammatically) {\n return;\n }\n\n runThrottledForScroll(determineProfileState);\n }, [determineProfileState]);\n\n return { handleScroll };\n}\n","import React, {\n FC, useCallback, useEffect, useMemo, useRef, useState, memo,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n MAIN_THREAD_ID,\n ApiMessage,\n ApiChat,\n ApiChatMember,\n ApiUser,\n ApiUserStatus,\n} from '../../api/types';\nimport {\n NewChatMembersProgress, ISettings, MediaViewerOrigin, ProfileState, ProfileTabType, SharedMediaType, AudioOrigin,\n} from '../../types';\n\nimport {\n MEMBERS_SLICE,\n PROFILE_SENSITIVE_AREA,\n SHARED_MEDIA_SLICE,\n SLIDE_TRANSITION_DURATION,\n} from '../../config';\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport {\n getHasAdminRight, isChatAdmin, isChatChannel, isChatGroup, isUserBot, isUserId,\n} from '../../modules/helpers';\nimport {\n selectChatMessages,\n selectChat,\n selectCurrentMediaSearch,\n selectIsRightColumnShown,\n selectTheme,\n selectActiveDownloadIds,\n selectUser,\n} from '../../modules/selectors';\nimport { captureEvents, SwipeDirection } from '../../util/captureEvents';\nimport { getSenderName } from '../left/search/helpers/getSenderName';\nimport useCacheBuster from '../../hooks/useCacheBuster';\nimport useProfileViewportIds from './hooks/useProfileViewportIds';\nimport useProfileState from './hooks/useProfileState';\nimport useTransitionFixes from './hooks/useTransitionFixes';\nimport useAsyncRendering from './hooks/useAsyncRendering';\nimport useLang from '../../hooks/useLang';\n\nimport Transition from '../ui/Transition';\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport TabList from '../ui/TabList';\nimport Spinner from '../ui/Spinner';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from '../common/PrivateChatInfo';\nimport ProfileInfo from '../common/ProfileInfo';\nimport Document from '../common/Document';\nimport Audio from '../common/Audio';\nimport ChatExtra from '../common/ChatExtra';\nimport Media from '../common/Media';\nimport WebLink from '../common/WebLink';\nimport NothingFound from '../common/NothingFound';\nimport FloatingActionButton from '../ui/FloatingActionButton';\nimport DeleteMemberModal from './DeleteMemberModal';\nimport GroupChatInfo from '../common/GroupChatInfo';\n\nimport './Profile.scss';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\n\ntype OwnProps = {\n chatId: string;\n profileState: ProfileState;\n onProfileStateChange: (state: ProfileState) => void;\n};\n\ntype StateProps = {\n theme: ISettings['theme'];\n isChannel?: boolean;\n currentUserId?: string;\n resolvedUserId?: string;\n chatMessages?: Record;\n foundIds?: number[];\n mediaSearchType?: SharedMediaType;\n hasCommonChatsTab?: boolean;\n hasMembersTab?: boolean;\n areMembersHidden?: boolean;\n canAddMembers?: boolean;\n canDeleteMembers?: boolean;\n members?: ApiChatMember[];\n commonChatIds?: string[];\n chatsById: Record;\n usersById: Record;\n userStatusesById: Record;\n isRightColumnShown: boolean;\n isRestricted?: boolean;\n lastSyncTime?: number;\n serverTimeOffset: number;\n activeDownloadIds: number[];\n isChatProtected?: boolean;\n};\n\nconst TABS = [\n { type: 'media', title: 'SharedMediaTab2' },\n { type: 'documents', title: 'SharedFilesTab2' },\n { type: 'links', title: 'SharedLinksTab2' },\n { type: 'audio', title: 'SharedMusicTab2' },\n { type: 'voice', title: 'SharedVoiceTab2' },\n];\n\nconst HIDDEN_RENDER_DELAY = 1000;\nconst INTERSECTION_THROTTLE = 500;\n\nconst Profile: FC = ({\n chatId,\n profileState,\n onProfileStateChange,\n theme,\n isChannel,\n resolvedUserId,\n currentUserId,\n chatMessages,\n foundIds,\n mediaSearchType,\n hasCommonChatsTab,\n hasMembersTab,\n areMembersHidden,\n canAddMembers,\n canDeleteMembers,\n commonChatIds,\n members,\n usersById,\n userStatusesById,\n chatsById,\n isRightColumnShown,\n isRestricted,\n lastSyncTime,\n activeDownloadIds,\n serverTimeOffset,\n isChatProtected,\n}) => {\n const {\n setLocalMediaSearchType,\n loadMoreMembers,\n loadCommonChats,\n openChat,\n searchMediaMessagesLocal,\n openMediaViewer,\n openAudioPlayer,\n focusMessage,\n loadProfilePhotos,\n setNewChatMembersDialogState,\n } = getDispatch();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const transitionRef = useRef(null);\n const lang = useLang();\n const [activeTab, setActiveTab] = useState(0);\n const [deletingUserId, setDeletingUserId] = useState();\n\n const tabs = useMemo(() => ([\n ...(hasMembersTab ? [{\n type: 'members', title: isChannel ? 'ChannelSubscribers' : 'GroupMembers',\n }] : []),\n ...TABS,\n ...(hasCommonChatsTab ? [{\n type: 'commonChats', title: 'SharedGroupsTab2',\n }] : []),\n ]), [hasCommonChatsTab, hasMembersTab, isChannel]);\n const tabType = tabs[activeTab].type as ProfileTabType;\n\n const [resultType, viewportIds, getMore, noProfileInfo] = useProfileViewportIds(\n isRightColumnShown, loadMoreMembers, loadCommonChats, searchMediaMessagesLocal, tabType, mediaSearchType, members,\n commonChatIds, usersById, userStatusesById, chatsById, chatMessages, foundIds, chatId, lastSyncTime,\n serverTimeOffset,\n );\n const activeKey = tabs.findIndex(({ type }) => type === resultType);\n\n const { handleScroll } = useProfileState(containerRef, tabType, profileState, onProfileStateChange);\n\n const { applyTransitionFix, releaseTransitionFix } = useTransitionFixes(containerRef);\n\n const [cacheBuster, resetCacheBuster] = useCacheBuster();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleTransitionStop = useCallback(() => {\n releaseTransitionFix();\n resetCacheBuster();\n }, [releaseTransitionFix, resetCacheBuster]);\n\n const handleNewMemberDialogOpen = useCallback(() => {\n setNewChatMembersDialogState(NewChatMembersProgress.InProgress);\n }, [setNewChatMembersDialogState]);\n\n // Update search type when switching tabs\n useEffect(() => {\n setLocalMediaSearchType({ mediaType: tabType });\n }, [setLocalMediaSearchType, tabType]);\n\n const profileId = resolvedUserId || chatId;\n\n useEffect(() => {\n if (lastSyncTime) {\n loadProfilePhotos({ profileId });\n }\n }, [loadProfilePhotos, profileId, lastSyncTime]);\n\n const handleSelectMedia = useCallback((messageId: number) => {\n openMediaViewer({\n chatId: profileId,\n threadId: MAIN_THREAD_ID,\n messageId,\n origin: MediaViewerOrigin.SharedMedia,\n });\n }, [profileId, openMediaViewer]);\n\n const handlePlayAudio = useCallback((messageId: number) => {\n openAudioPlayer({ chatId: profileId, messageId });\n }, [profileId, openAudioPlayer]);\n\n const handleMemberClick = useCallback((id: string) => {\n openChat({ id });\n }, [openChat]);\n\n const handleMessageFocus = useCallback((messageId: number) => {\n focusMessage({ chatId: profileId, messageId });\n }, [profileId, focusMessage]);\n\n const handleDeleteMembersModalClose = useCallback(() => {\n setDeletingUserId(undefined);\n }, []);\n\n useEffect(() => {\n if (!transitionRef.current || !IS_TOUCH_ENV) {\n return undefined;\n }\n\n return captureEvents(transitionRef.current, {\n selectorToPreventScroll: '.Profile',\n onSwipe: ((e, direction) => {\n if (direction === SwipeDirection.Left) {\n setActiveTab(Math.min(activeTab + 1, tabs.length - 1));\n return true;\n } else if (direction === SwipeDirection.Right) {\n setActiveTab(Math.max(0, activeTab - 1));\n return true;\n }\n\n return false;\n }),\n });\n }, [activeTab, tabs.length]);\n\n let renderingDelay;\n const isFirstTab = resultType === 'members' || (!hasMembersTab && resultType === 'media');\n // @optimization Used to unparallelize rendering of message list and profile media\n if (isFirstTab) {\n renderingDelay = !isRightColumnShown ? HIDDEN_RENDER_DELAY : 0;\n // @optimization Used to delay first render of secondary tabs while animating\n } else if (!viewportIds) {\n renderingDelay = SLIDE_TRANSITION_DURATION;\n }\n const canRenderContent = useAsyncRendering([chatId, resultType], renderingDelay);\n\n function getMemberContextAction(memberId: string) {\n return memberId === currentUserId || !canDeleteMembers ? undefined : [{\n title: lang('lng_context_remove_from_group'),\n icon: 'stop',\n handler: () => {\n setDeletingUserId(memberId);\n },\n }];\n }\n\n function renderContent() {\n if (!viewportIds || !canRenderContent || !chatMessages) {\n const noSpinner = isFirstTab && !canRenderContent;\n\n return (\n
\n {!noSpinner && }\n
\n );\n }\n\n if (!viewportIds.length) {\n let text: string;\n\n switch (resultType) {\n case 'members':\n text = areMembersHidden ? 'You have no access to group members list.' : 'No members found';\n break;\n case 'commonChats':\n text = lang('NoGroupsInCommon');\n break;\n case 'documents':\n text = lang('lng_media_file_empty');\n break;\n case 'links':\n text = lang('lng_media_link_empty');\n break;\n case 'audio':\n text = lang('lng_media_song_empty');\n break;\n case 'voice':\n text = lang('lng_media_audio_empty');\n break;\n default:\n text = lang('SharedMedia.EmptyTitle');\n }\n\n return (\n
\n \n
\n );\n }\n\n return (\n \n {resultType === 'media' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'documents' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'links' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'audio' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'voice' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'members' ? (\n (viewportIds as string[])!.map((id, i) => (\n handleMemberClick(id)}\n contextActions={getMemberContextAction(id)}\n >\n \n \n ))\n ) : resultType === 'commonChats' ? (\n (viewportIds as string[])!.map((id, i) => (\n openChat({ id })}\n >\n \n \n ))\n ) : undefined}\n
\n );\n }\n\n return (\n \n {!noProfileInfo && renderProfileInfo(chatId, resolvedUserId)}\n {!isRestricted && (\n \n \n {renderContent}\n \n \n
\n )}\n\n {canAddMembers && (\n \n \n \n )}\n {canDeleteMembers && (\n \n )}\n \n );\n};\n\nfunction renderProfileInfo(chatId: string, resolvedUserId?: string) {\n return (\n
\n \n \n
\n );\n}\n\nfunction buildInfiniteScrollItemSelector(resultType: string) {\n return [\n // Used on first render\n `.shared-media-transition > div:only-child > .${resultType}-list > .scroll-item`,\n // Used after transition\n `.shared-media-transition > .Transition__slide--active > .${resultType}-list > .scroll-item`,\n ].join(', ');\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const chatMessages = selectChatMessages(global, chatId);\n const { currentType: mediaSearchType, resultsByType } = selectCurrentMediaSearch(global) || {};\n const { foundIds } = (resultsByType && mediaSearchType && resultsByType[mediaSearchType]) || {};\n\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n const { byId: chatsById } = global.chats;\n\n const isGroup = chat && isChatGroup(chat);\n const isChannel = chat && isChatChannel(chat);\n const hasMembersTab = isGroup || (isChannel && isChatAdmin(chat!));\n const members = chat?.fullInfo?.members;\n const areMembersHidden = hasMembersTab && chat && chat.fullInfo && !chat.fullInfo.canViewMembers;\n const canAddMembers = hasMembersTab && chat && (getHasAdminRight(chat, 'inviteUsers') || chat.isCreator);\n const canDeleteMembers = hasMembersTab && chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);\n const activeDownloadIds = selectActiveDownloadIds(global, chatId);\n\n let hasCommonChatsTab;\n let resolvedUserId;\n let user;\n if (isUserId(chatId)) {\n resolvedUserId = chatId;\n user = selectUser(global, resolvedUserId);\n hasCommonChatsTab = user && !user.isSelf && !isUserBot(user);\n }\n\n return {\n theme: selectTheme(global),\n isChannel,\n resolvedUserId,\n chatMessages,\n foundIds,\n mediaSearchType,\n hasCommonChatsTab,\n hasMembersTab,\n areMembersHidden,\n canAddMembers,\n canDeleteMembers,\n currentUserId: global.currentUserId,\n isRightColumnShown: selectIsRightColumnShown(global),\n isRestricted: chat?.isRestricted,\n lastSyncTime: global.lastSyncTime,\n serverTimeOffset: global.serverTimeOffset,\n activeDownloadIds,\n usersById,\n userStatusesById,\n chatsById,\n isChatProtected: chat?.isProtected,\n ...(hasMembersTab && members && { members }),\n ...(hasCommonChatsTab && user && { commonChatIds: user.commonChats?.ids }),\n };\n },\n)(Profile));\n","import { useCallback, useEffect } from '../../../lib/teact/teact';\n\nexport default function useTransitionFixes(\n containerRef: { current: HTMLDivElement | null },\n transitionElSelector = '.Transition.shared-media-transition',\n) {\n // Set `min-height` for shared media container to prevent jumping when switching tabs\n useEffect(() => {\n function setMinHeight() {\n const container = containerRef.current!;\n const transitionEl = container.querySelector(transitionElSelector);\n const tabsEl = container.querySelector('.TabList');\n if (transitionEl && tabsEl) {\n transitionEl.style.minHeight = `${container.offsetHeight - tabsEl.offsetHeight}px`;\n }\n }\n\n setMinHeight();\n\n window.addEventListener('resize', setMinHeight, false);\n\n return () => {\n window.removeEventListener('resize', setMinHeight, false);\n };\n }, [containerRef, transitionElSelector]);\n\n // Workaround for scrollable content flickering during animation.\n const applyTransitionFix = useCallback(() => {\n const container = containerRef.current!;\n if (container.style.overflowY !== 'hidden') {\n const scrollBarWidth = container.offsetWidth - container.clientWidth;\n container.style.overflowY = 'hidden';\n container.style.marginRight = `${scrollBarWidth}px`;\n }\n }, [containerRef]);\n\n const releaseTransitionFix = useCallback(() => {\n const container = containerRef.current!;\n container.style.overflowY = 'scroll';\n container.style.marginRight = '0';\n }, [containerRef]);\n\n return { applyTransitionFix, releaseTransitionFix };\n}\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useCacheBuster = () => {\n const [cacheBuster, setCacheBuster] = useState(false);\n\n const updateCacheBuster = useCallback(() => {\n setCacheBuster((current) => !current);\n }, []);\n\n return [cacheBuster, updateCacheBuster] as const;\n};\n\nexport default useCacheBuster;\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './RightSearch';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst RightSearchAsync: FC = (props) => {\n const RightSearch = useModuleLoader(Bundles.Extra, 'RightSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return RightSearch ? : ;\n};\n\nexport default memo(RightSearchAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport { OwnProps } from './Management';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nimport Loading from '../../ui/Loading';\n\nconst ManagementAsync: FC = (props) => {\n const Management = useModuleLoader(Bundles.Extra, 'Management');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Management ? : ;\n};\n\nexport default memo(ManagementAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst StickerSearchAsync: FC = () => {\n const StickerSearch = useModuleLoader(Bundles.Extra, 'StickerSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return StickerSearch ? : ;\n};\n\nexport default memo(StickerSearchAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst GifSearchAsync: FC = () => {\n const GifSearch = useModuleLoader(Bundles.Extra, 'GifSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return GifSearch ? : ;\n};\n\nexport default memo(GifSearchAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst PollResultsAsync: FC = () => {\n const PollResults = useModuleLoader(Bundles.Extra, 'PollResults');\n\n return PollResults ? : ;\n};\n\nexport default memo(PollResultsAsync);\n","import React, {\n FC, useCallback, useMemo, memo, useState, useEffect,\n} from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ApiChat, ApiChatMember, ApiUpdateConnectionStateType,\n} from '../../api/types';\nimport { NewChatMembersProgress } from '../../types';\n\nimport { unique } from '../../util/iteratees';\nimport { selectChat } from '../../modules/selectors';\nimport {\n filterUsersByName, isChatChannel, isUserBot, sortChatIds,\n} from '../../modules/helpers';\nimport useLang from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Picker from '../common/Picker';\nimport FloatingActionButton from '../ui/FloatingActionButton';\nimport Spinner from '../ui/Spinner';\n\nimport './AddChatMembers.scss';\n\nexport type OwnProps = {\n chatId: string;\n isActive: boolean;\n onNextStep: (memberIds: string[]) => void;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n connectionState?: ApiUpdateConnectionStateType;\n isChannel?: boolean;\n members?: ApiChatMember[];\n currentUserId?: string;\n chatsById: Record;\n localContactIds?: string[];\n searchQuery?: string;\n isLoading: boolean;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n};\n\nconst AddChatMembers: FC = ({\n isChannel,\n connectionState,\n members,\n onNextStep,\n currentUserId,\n chatsById,\n localContactIds,\n isLoading,\n searchQuery,\n isSearching,\n localUserIds,\n globalUserIds,\n onClose,\n isActive,\n}) => {\n const { setUserSearchQuery, loadContactList } = getDispatch();\n\n const lang = useLang();\n const [selectedMemberIds, setSelectedMemberIds] = useState([]);\n const prevSelectedMemberIds = usePrevious(selectedMemberIds);\n const noPickerScrollRestore = prevSelectedMemberIds === selectedMemberIds;\n\n useEffect(() => {\n if (isActive && connectionState === 'connectionStateReady') {\n loadContactList();\n }\n }, [connectionState, isActive, loadContactList]);\n\n useHistoryBack(isActive, onClose);\n\n const memberIds = useMemo(() => {\n return members ? members.map((member) => member.userId) : [];\n }, [members]);\n\n const handleFilterChange = useCallback((query: string) => {\n setUserSearchQuery({ query });\n }, [setUserSearchQuery]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const filteredContactIds = localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : [];\n\n return sortChatIds(\n unique([\n ...filteredContactIds,\n ...(localUserIds || []),\n ...(globalUserIds || []),\n ]).filter((userId) => {\n const user = usersById[userId];\n\n // The user can be added to the chat if the following conditions are met:\n // the user has not yet been added to the current chat\n // AND it is not the current user,\n // AND (it is not found (user from global search) OR it is not a bot OR it is a bot,\n // but the current chat is not a channel AND the appropriate permission is set).\n return (\n !memberIds.includes(userId)\n && userId !== currentUserId\n && (!user || !isUserBot(user) || (!isChannel && user.canBeInvitedToGroup))\n );\n }),\n chatsById,\n );\n }, [\n localContactIds, chatsById, searchQuery, localUserIds, globalUserIds, currentUserId, memberIds, isChannel,\n ]);\n\n const handleNextStep = useCallback(() => {\n if (selectedMemberIds.length) {\n setUserSearchQuery({ query: '' });\n onNextStep(selectedMemberIds);\n }\n }, [selectedMemberIds, setUserSearchQuery, onNextStep]);\n\n return (\n
\n
\n \n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { userIds: localContactIds } = global.contactList || {};\n const { byId: chatsById } = global.chats;\n const { currentUserId, newChatMembersProgress, connectionState } = global;\n const isChannel = chat && isChatChannel(chat);\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalUserIds,\n localUserIds,\n } = global.userSearch;\n\n return {\n isChannel,\n members: chat?.fullInfo?.members,\n currentUserId,\n chatsById,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus,\n isLoading: newChatMembersProgress === NewChatMembersProgress.Loading,\n globalUserIds,\n localUserIds,\n connectionState,\n };\n },\n)(AddChatMembers));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport {\n ManagementScreens, NewChatMembersProgress, ProfileState, RightColumnContent,\n} from '../../types';\n\nimport { MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN } from '../../config';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport {\n selectAreActiveChatsLoaded,\n selectCurrentMessageList,\n selectRightColumnContentKey,\n} from '../../modules/selectors';\nimport useLayoutEffectWithPrevDeps from '../../hooks/useLayoutEffectWithPrevDeps';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport RightHeader from './RightHeader';\nimport Profile from './Profile';\nimport Transition from '../ui/Transition';\nimport RightSearch from './RightSearch.async';\nimport Management from './management/Management.async';\nimport StickerSearch from './StickerSearch.async';\nimport GifSearch from './GifSearch.async';\nimport PollResults from './PollResults.async';\nimport AddChatMembers from './AddChatMembers';\n\nimport './RightColumn.scss';\n\ntype StateProps = {\n contentKey?: RightColumnContent;\n chatId?: string;\n threadId?: number;\n isChatSelected: boolean;\n shouldSkipHistoryAnimations?: boolean;\n nextManagementScreen?: ManagementScreens;\n};\n\nconst CLOSE_ANIMATION_DURATION = 300;\nconst MAIN_SCREENS_COUNT = Object.keys(RightColumnContent).length / 2;\nconst MANAGEMENT_SCREENS_COUNT = Object.keys(ManagementScreens).length / 2;\n\nfunction blurSearchInput() {\n const searchInput = document.querySelector('.RightHeader .SearchInput input') as HTMLInputElement;\n if (searchInput) {\n searchInput.blur();\n }\n}\n\nconst RightColumn: FC = ({\n contentKey,\n chatId,\n threadId,\n isChatSelected,\n shouldSkipHistoryAnimations,\n nextManagementScreen,\n}) => {\n const {\n toggleChatInfo,\n toggleManagement,\n closeLocalTextSearch,\n setStickerSearchQuery,\n setGifSearchQuery,\n closePollResults,\n addChatMembers,\n setNewChatMembersDialogState,\n setEditingExportedInvite,\n setOpenedInviteInfo,\n requestNextManagementScreen,\n } = getDispatch();\n\n const { width: windowWidth } = useWindowSize();\n const [profileState, setProfileState] = useState(ProfileState.Profile);\n const [managementScreen, setManagementScreen] = useState(ManagementScreens.Initial);\n const [selectedChatMemberId, setSelectedChatMemberId] = useState();\n const [isPromotedByCurrentUser, setIsPromotedByCurrentUser] = useState();\n const isScrolledDown = profileState !== ProfileState.Profile;\n\n const isOpen = contentKey !== undefined;\n const isProfile = contentKey === RightColumnContent.ChatInfo;\n const isSearch = contentKey === RightColumnContent.Search;\n const isManagement = contentKey === RightColumnContent.Management;\n const isStickerSearch = contentKey === RightColumnContent.StickerSearch;\n const isGifSearch = contentKey === RightColumnContent.GifSearch;\n const isPollResults = contentKey === RightColumnContent.PollResults;\n const isAddingChatMembers = contentKey === RightColumnContent.AddingMembers;\n const isOverlaying = windowWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN;\n\n const [shouldSkipTransition, setShouldSkipTransition] = useState(!isOpen);\n\n const renderingContentKey = useCurrentOrPrev(contentKey, true, !isChatSelected) ?? -1;\n\n const close = useCallback((shouldScrollUp = true) => {\n switch (contentKey) {\n case RightColumnContent.AddingMembers:\n setNewChatMembersDialogState(NewChatMembersProgress.Closed);\n break;\n case RightColumnContent.ChatInfo:\n if (isScrolledDown && shouldScrollUp) {\n setProfileState(ProfileState.Profile);\n break;\n }\n toggleChatInfo(undefined, { forceSyncOnIOs: true });\n break;\n case RightColumnContent.Management: {\n switch (managementScreen) {\n case ManagementScreens.Initial:\n toggleManagement();\n break;\n case ManagementScreens.ChatPrivacyType:\n case ManagementScreens.Discussion:\n case ManagementScreens.GroupPermissions:\n case ManagementScreens.GroupType:\n case ManagementScreens.ChatAdministrators:\n case ManagementScreens.ChannelSubscribers:\n case ManagementScreens.GroupMembers:\n case ManagementScreens.Invites:\n case ManagementScreens.Reactions:\n case ManagementScreens.JoinRequests:\n setManagementScreen(ManagementScreens.Initial);\n break;\n case ManagementScreens.GroupUserPermissionsCreate:\n case ManagementScreens.GroupRemovedUsers:\n case ManagementScreens.GroupUserPermissions:\n setManagementScreen(ManagementScreens.GroupPermissions);\n setSelectedChatMemberId(undefined);\n setIsPromotedByCurrentUser(undefined);\n break;\n case ManagementScreens.ChatAdminRights:\n case ManagementScreens.ChatNewAdminRights:\n case ManagementScreens.GroupAddAdmins:\n case ManagementScreens.GroupRecentActions:\n setManagementScreen(ManagementScreens.ChatAdministrators);\n break;\n case ManagementScreens.EditInvite:\n case ManagementScreens.InviteInfo:\n setManagementScreen(ManagementScreens.Invites);\n setOpenedInviteInfo({ invite: undefined });\n setEditingExportedInvite({ chatId, invite: undefined });\n break;\n }\n\n break;\n }\n case RightColumnContent.Search: {\n blurSearchInput();\n closeLocalTextSearch();\n break;\n }\n case RightColumnContent.StickerSearch:\n blurSearchInput();\n setStickerSearchQuery({ query: undefined });\n break;\n case RightColumnContent.GifSearch: {\n blurSearchInput();\n setGifSearchQuery({ query: undefined });\n break;\n }\n case RightColumnContent.PollResults:\n closePollResults();\n break;\n }\n }, [\n contentKey, isScrolledDown, toggleChatInfo, closePollResults, setNewChatMembersDialogState,\n managementScreen, toggleManagement, closeLocalTextSearch, setStickerSearchQuery, setGifSearchQuery,\n setEditingExportedInvite, chatId, setOpenedInviteInfo,\n ]);\n\n const handleSelectChatMember = useCallback((memberId, isPromoted) => {\n setSelectedChatMemberId(memberId);\n setIsPromotedByCurrentUser(isPromoted);\n }, []);\n\n const handleAppendingChatMembers = useCallback((memberIds: string[]) => {\n addChatMembers({ chatId, memberIds });\n }, [addChatMembers, chatId]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(close) : undefined), [isOpen, close]);\n\n useEffect(() => {\n setTimeout(() => {\n setShouldSkipTransition(!isOpen);\n }, CLOSE_ANIMATION_DURATION);\n }, [isOpen]);\n\n useEffect(() => {\n if (nextManagementScreen) {\n setManagementScreen(nextManagementScreen);\n requestNextManagementScreen(undefined);\n }\n }, [nextManagementScreen, requestNextManagementScreen]);\n\n // Close Right Column when it transforms into overlayed state on screen resize\n useEffect(() => {\n if (isOpen && isOverlaying) {\n close();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOverlaying]);\n\n // We need to clear profile state and management screen state, when changing chats\n useLayoutEffectWithPrevDeps(([prevChatId]) => {\n if (prevChatId !== chatId ) {\n setProfileState(ProfileState.Profile);\n setManagementScreen(ManagementScreens.Initial);\n }\n }, [chatId]);\n\n useHistoryBack(isChatSelected && (\n contentKey === RightColumnContent.ChatInfo\n || contentKey === RightColumnContent.Management\n || contentKey === RightColumnContent.AddingMembers\n ), () => close(false), toggleChatInfo);\n\n // eslint-disable-next-line consistent-return\n function renderContent(isActive: boolean) {\n if (renderingContentKey === -1) {\n return undefined;\n }\n\n switch (renderingContentKey) {\n case RightColumnContent.AddingMembers:\n return (\n \n );\n case RightColumnContent.ChatInfo:\n return (\n \n );\n case RightColumnContent.Search:\n return ;\n case RightColumnContent.Management:\n return (\n \n );\n\n case RightColumnContent.StickerSearch:\n return ;\n case RightColumnContent.GifSearch:\n return ;\n case RightColumnContent.PollResults:\n return ;\n }\n }\n\n return (\n \n {isOverlaying && (\n
\n )}\n
\n \n \n {renderContent}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const areActiveChatsLoaded = selectAreActiveChatsLoaded(global);\n const nextManagementScreen = chatId ? global.management.byChatId[chatId]?.nextScreen : undefined;\n\n return {\n contentKey: selectRightColumnContentKey(global),\n chatId,\n threadId,\n isChatSelected: Boolean(chatId && areActiveChatsLoaded),\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n nextManagementScreen,\n };\n },\n)(RightColumn));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { Bundles } from '../../util/moduleLoader';\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\ninterface OwnProps {\n isOpen: boolean;\n}\n\nconst MediaViewerAsync: FC = ({ isOpen }) => {\n const MediaViewer = useModuleLoader(Bundles.Extra, 'MediaViewer', !isOpen);\n\n return MediaViewer ? : undefined;\n};\n\nexport default memo(MediaViewerAsync);\n","export default function download(url: string, filename: string) {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n try {\n link.click();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err); // Suppress redundant \"Blob loading failed\" error popup on IOS\n }\n}\n","import { FC, memo, useEffect } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { Thread } from '../../global/types';\nimport { ApiMediaFormat, ApiMessage } from '../../api/types';\n\nimport * as mediaLoader from '../../util/mediaLoader';\nimport download from '../../util/download';\nimport {\n getMessageContentFilename, getMessageMediaHash,\n} from '../../modules/helpers';\n\ntype StateProps = {\n activeDownloads: Record;\n messages: Record;\n threadsById: Record;\n }>;\n};\n\nconst startedDownloads = new Set();\n\nconst DownloadManager: FC = ({\n activeDownloads,\n messages,\n}) => {\n const { cancelMessageMediaDownload } = getDispatch();\n\n useEffect(() => {\n Object.entries(activeDownloads).forEach(([chatId, messageIds]) => {\n const activeMessages = messageIds.map((id) => messages[Number(chatId)].byId[id]);\n activeMessages.forEach((message) => {\n const downloadHash = getMessageMediaHash(message, 'download');\n if (!downloadHash) {\n cancelMessageMediaDownload({ message });\n return;\n }\n\n if (!startedDownloads.has(downloadHash)) {\n const mediaData = mediaLoader.getFromMemory(downloadHash);\n if (mediaData) {\n startedDownloads.delete(downloadHash);\n download(mediaData, getMessageContentFilename(message));\n cancelMessageMediaDownload({ message });\n return;\n }\n\n mediaLoader.fetch(downloadHash, ApiMediaFormat.BlobUrl, true).then((result) => {\n startedDownloads.delete(downloadHash);\n if (result) {\n download(result, getMessageContentFilename(message));\n }\n cancelMessageMediaDownload({ message });\n });\n\n startedDownloads.add(downloadHash);\n }\n });\n });\n }, [\n cancelMessageMediaDownload,\n messages,\n activeDownloads,\n ]);\n\n return undefined;\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const activeDownloads = global.activeDownloads.byChatId;\n const messages = global.messages.byChatId;\n return {\n activeDownloads,\n messages,\n };\n },\n)(DownloadManager));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst NotificationsAsync: FC = ({ isOpen }) => {\n const Notifications = useModuleLoader(Bundles.Extra, 'Notifications', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Notifications ? : undefined;\n};\n\nexport default memo(NotificationsAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst DialogsAsync: FC = ({ isOpen }) => {\n const Dialogs = useModuleLoader(Bundles.Extra, 'Dialogs', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Dialogs ? : undefined;\n};\n\nexport default memo(DialogsAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\nimport { OwnProps } from './ForwardPicker';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ForwardPickerAsync: FC = (props) => {\n const { isOpen } = props;\n const ForwardPicker = useModuleLoader(Bundles.Extra, 'ForwardPicker', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ForwardPicker ? : undefined;\n};\n\nexport default memo(ForwardPickerAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport { OwnProps } from './SafeLinkModal';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst SafeLinkModalAsync: FC = (props) => {\n const { url } = props;\n const SafeLinkModal = useModuleLoader(Bundles.Extra, 'SafeLinkModal', !url);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SafeLinkModal ? : undefined;\n};\n\nexport default memo(SafeLinkModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport { OwnProps } from './HistoryCalendar';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst HistoryCalendarAsync: FC = (props) => {\n const { isOpen } = props;\n const HistoryCalendar = useModuleLoader(Bundles.Extra, 'HistoryCalendar', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return HistoryCalendar ? : undefined;\n};\n\nexport default memo(HistoryCalendarAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport { Bundles } from '../../../util/moduleLoader';\nimport { OwnProps } from './GroupCall';\n\nconst GroupCallAsync: FC = (props) => {\n const { groupCallId } = props;\n const GroupCall = useModuleLoader(Bundles.Calls, 'GroupCall', !groupCallId);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return GroupCall ? : undefined;\n};\n\nexport default memo(GroupCallAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport { Bundles } from '../../util/moduleLoader';\n\ntype OwnProps = {\n groupCallId?: string;\n};\n\nconst ActiveCallHeaderAsync: FC = (props) => {\n const { groupCallId } = props;\n const ActiveCallHeader = useModuleLoader(Bundles.Calls, 'ActiveCallHeader', !groupCallId);\n\n return ActiveCallHeader ? : undefined;\n};\n\nexport default memo(ActiveCallHeaderAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport { Bundles } from '../../util/moduleLoader';\n\ntype OwnProps = {\n isOpen: boolean;\n};\n\nconst CallFallbackConfirmAsync: FC = ({ isOpen }) => {\n const CallFallbackConfirm = useModuleLoader(Bundles.Calls, 'CallFallbackConfirm', !isOpen);\n\n return CallFallbackConfirm ? : undefined;\n};\n\nexport default memo(CallFallbackConfirmAsync);\n","import React, {\n FC, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { LangCode } from '../../types';\nimport { ApiMessage, ApiUpdateAuthorizationStateType, ApiUpdateConnectionStateType } from '../../api/types';\n\nimport '../../modules/actions/all';\nimport {\n BASE_EMOJI_KEYWORD_LANG, DEBUG, INACTIVE_MARKER, PAGE_TITLE,\n} from '../../config';\nimport {\n selectChatMessage,\n selectIsForwardModalOpen,\n selectIsMediaViewerOpen,\n selectIsRightColumnShown,\n selectIsServiceChatReady,\n} from '../../modules/selectors';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport buildClassName from '../../util/buildClassName';\nimport { fastRaf } from '../../util/schedulers';\nimport { waitForTransitionEnd } from '../../util/cssAnimationEndListeners';\nimport { processDeepLink } from '../../util/deeplink';\nimport stopEvent from '../../util/stopEvent';\nimport windowSize from '../../util/windowSize';\nimport { getAllNotificationsCount } from '../../util/folderManager';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\nimport useBeforeUnload from '../../hooks/useBeforeUnload';\nimport useOnChange from '../../hooks/useOnChange';\nimport usePreventPinchZoomGesture from '../../hooks/usePreventPinchZoomGesture';\nimport { LOCATION_HASH } from '../../hooks/useHistoryBack';\n\nimport StickerSetModal from '../common/StickerSetModal.async';\nimport UnreadCount from '../common/UnreadCounter';\nimport LeftColumn from '../left/LeftColumn';\nimport MiddleColumn from '../middle/MiddleColumn';\nimport RightColumn from '../right/RightColumn';\nimport MediaViewer from '../mediaViewer/MediaViewer.async';\nimport AudioPlayer from '../middle/AudioPlayer';\nimport DownloadManager from './DownloadManager';\nimport Notifications from './Notifications.async';\nimport Dialogs from './Dialogs.async';\nimport ForwardPicker from './ForwardPicker.async';\nimport SafeLinkModal from './SafeLinkModal.async';\nimport HistoryCalendar from './HistoryCalendar.async';\nimport GroupCall from '../calls/group/GroupCall.async';\nimport ActiveCallHeader from '../calls/ActiveCallHeader.async';\nimport CallFallbackConfirm from '../calls/CallFallbackConfirm.async';\n\nimport './Main.scss';\n\ntype StateProps = {\n connectionState?: ApiUpdateConnectionStateType;\n authState?: ApiUpdateAuthorizationStateType;\n lastSyncTime?: number;\n isLeftColumnShown: boolean;\n isRightColumnShown: boolean;\n isMediaViewerOpen: boolean;\n isForwardModalOpen: boolean;\n hasNotifications: boolean;\n hasDialogs: boolean;\n audioMessage?: ApiMessage;\n safeLinkModalUrl?: string;\n isHistoryCalendarOpen: boolean;\n shouldSkipHistoryAnimations?: boolean;\n openedStickerSetShortName?: string;\n activeGroupCallId?: string;\n isServiceChatReady?: boolean;\n animationLevel: number;\n language?: LangCode;\n wasTimeFormatSetManually?: boolean;\n isCallFallbackConfirmOpen: boolean;\n addedSetIds?: string[];\n};\n\nconst NOTIFICATION_INTERVAL = 1000;\n\nlet notificationInterval: number | undefined;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEBUG_isLogged = false;\n\nconst Main: FC = ({\n connectionState,\n authState,\n lastSyncTime,\n isLeftColumnShown,\n isRightColumnShown,\n isMediaViewerOpen,\n isForwardModalOpen,\n hasNotifications,\n hasDialogs,\n audioMessage,\n activeGroupCallId,\n safeLinkModalUrl,\n isHistoryCalendarOpen,\n shouldSkipHistoryAnimations,\n openedStickerSetShortName,\n isServiceChatReady,\n animationLevel,\n language,\n wasTimeFormatSetManually,\n isCallFallbackConfirmOpen,\n addedSetIds,\n}) => {\n const {\n sync,\n loadAnimatedEmojis,\n loadNotificationSettings,\n loadNotificationExceptions,\n updateIsOnline,\n loadTopInlineBots,\n loadEmojiKeywords,\n loadCountryList,\n loadAvailableReactions,\n loadStickerSets,\n loadAddedStickers,\n loadFavoriteStickers,\n ensureTimeFormat,\n openStickerSetShortName,\n checkVersionNotification,\n loadAppConfig,\n } = getDispatch();\n\n if (DEBUG && !DEBUG_isLogged) {\n DEBUG_isLogged = true;\n // eslint-disable-next-line no-console\n console.log('>>> RENDER MAIN');\n }\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && authState === 'authorizationStateReady') {\n sync();\n }\n }, [connectionState, authState, sync]);\n\n // Initial API calls\n useEffect(() => {\n if (lastSyncTime) {\n updateIsOnline(true);\n loadAppConfig();\n loadAvailableReactions();\n loadAnimatedEmojis();\n loadNotificationSettings();\n loadNotificationExceptions();\n loadTopInlineBots();\n loadEmojiKeywords({ language: BASE_EMOJI_KEYWORD_LANG });\n }\n }, [\n lastSyncTime, loadAnimatedEmojis, loadEmojiKeywords, loadNotificationExceptions, loadNotificationSettings,\n loadTopInlineBots, updateIsOnline, loadAvailableReactions, loadAppConfig,\n ]);\n\n // Language-based API calls\n useEffect(() => {\n if (lastSyncTime) {\n if (language !== BASE_EMOJI_KEYWORD_LANG) {\n loadEmojiKeywords({ language });\n }\n\n loadCountryList({ langCode: language });\n }\n }, [language, lastSyncTime, loadCountryList, loadEmojiKeywords]);\n\n // Sticker sets\n useEffect(() => {\n if (lastSyncTime) {\n if (!addedSetIds) {\n loadStickerSets();\n loadFavoriteStickers();\n } else {\n loadAddedStickers();\n }\n }\n }, [lastSyncTime, addedSetIds, loadStickerSets, loadFavoriteStickers, loadAddedStickers]);\n\n // Check version when service chat is ready\n useEffect(() => {\n if (lastSyncTime && isServiceChatReady) {\n checkVersionNotification();\n }\n }, [lastSyncTime, isServiceChatReady, checkVersionNotification]);\n\n // Ensure time format\n useEffect(() => {\n if (lastSyncTime && !wasTimeFormatSetManually) {\n ensureTimeFormat();\n }\n }, [lastSyncTime, wasTimeFormatSetManually, ensureTimeFormat]);\n\n // Parse deep link\n useEffect(() => {\n if (lastSyncTime && LOCATION_HASH.startsWith('#?tgaddr=')) {\n processDeepLink(decodeURIComponent(LOCATION_HASH.substr('#?tgaddr='.length)));\n }\n }, [lastSyncTime]);\n\n // Prevent refresh by accidentally rotating device when listening to a voice chat\n useEffect(() => {\n if (!activeGroupCallId) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [activeGroupCallId]);\n\n const {\n transitionClassNames: middleColumnTransitionClassNames,\n } = useShowTransition(!isLeftColumnShown, undefined, true, undefined, shouldSkipHistoryAnimations);\n\n const {\n transitionClassNames: rightColumnTransitionClassNames,\n } = useShowTransition(isRightColumnShown, undefined, true, undefined, shouldSkipHistoryAnimations);\n\n const className = buildClassName(\n middleColumnTransitionClassNames.replace(/([\\w-]+)/g, 'middle-column-$1'),\n rightColumnTransitionClassNames.replace(/([\\w-]+)/g, 'right-column-$1'),\n shouldSkipHistoryAnimations && 'history-animation-disabled',\n );\n\n // Dispatch heavy transition event when opening middle column\n useOnChange(([prevIsLeftColumnShown]) => {\n if (prevIsLeftColumnShown === undefined || animationLevel === 0) {\n return;\n }\n\n const dispatchHeavyAnimationEnd = dispatchHeavyAnimationEvent();\n\n waitForTransitionEnd(document.getElementById('MiddleColumn')!, dispatchHeavyAnimationEnd);\n }, [isLeftColumnShown]);\n\n // Dispatch heavy transition event and add body class when opening right column\n useOnChange(([prevIsRightColumnShown]) => {\n if (prevIsRightColumnShown === undefined || animationLevel === 0) {\n return;\n }\n\n fastRaf(() => {\n document.body.classList.add('animating-right-column');\n });\n\n const dispatchHeavyAnimationEnd = dispatchHeavyAnimationEvent();\n\n waitForTransitionEnd(document.getElementById('RightColumn')!, () => {\n dispatchHeavyAnimationEnd();\n\n fastRaf(() => {\n document.body.classList.remove('animating-right-column');\n });\n });\n }, [isRightColumnShown]);\n\n const handleBlur = useCallback(() => {\n updateIsOnline(false);\n\n const initialUnread = getAllNotificationsCount();\n let index = 0;\n\n clearInterval(notificationInterval);\n notificationInterval = window.setInterval(() => {\n if (document.title.includes(INACTIVE_MARKER)) {\n updateIcon(false);\n return;\n }\n\n if (index % 2 === 0) {\n const newUnread = getAllNotificationsCount() - initialUnread;\n if (newUnread > 0) {\n updatePageTitle(`${newUnread} notification${newUnread > 1 ? 's' : ''}`);\n updateIcon(true);\n }\n } else {\n updatePageTitle(PAGE_TITLE);\n updateIcon(false);\n }\n\n index++;\n }, NOTIFICATION_INTERVAL);\n }, [updateIsOnline]);\n\n const handleFocus = useCallback(() => {\n updateIsOnline(true);\n\n clearInterval(notificationInterval);\n notificationInterval = undefined;\n\n if (!document.title.includes(INACTIVE_MARKER)) {\n updatePageTitle(PAGE_TITLE);\n }\n\n updateIcon(false);\n }, [updateIsOnline]);\n\n const handleStickerSetModalClose = useCallback(() => {\n openStickerSetShortName({ stickerSetShortName: undefined });\n }, [openStickerSetShortName]);\n\n // Online status and browser tab indicators\n useBackgroundMode(handleBlur, handleFocus);\n useBeforeUnload(handleBlur);\n\n usePreventPinchZoomGesture(isMediaViewerOpen);\n\n return (\n
\n \n \n \n \n \n \n \n {audioMessage && }\n \n \n \n {activeGroupCallId && (\n <>\n \n \n \n )}\n \n \n \n
\n );\n};\n\nfunction updateIcon(asUnread: boolean) {\n document.querySelectorAll('link[rel=\"icon\"], link[rel=\"alternate icon\"]')\n .forEach((link) => {\n if (asUnread) {\n if (!link.href.includes('favicon-unread')) {\n link.href = link.href.replace('favicon', 'favicon-unread');\n }\n } else {\n link.href = link.href.replace('favicon-unread', 'favicon');\n }\n });\n}\n\n// For some reason setting `document.title` to the same value\n// causes increment of Chrome Dev Tools > Performance Monitor > DOM Nodes counter\nfunction updatePageTitle(nextTitle: string) {\n if (document.title !== nextTitle) {\n document.title = nextTitle;\n }\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { settings: { byKey: { animationLevel, language, wasTimeFormatSetManually } } } = global;\n const { chatId: audioChatId, messageId: audioMessageId } = global.audioPlayer;\n const audioMessage = audioChatId && audioMessageId\n ? selectChatMessage(global, audioChatId, audioMessageId)\n : undefined;\n\n return {\n connectionState: global.connectionState,\n authState: global.authState,\n lastSyncTime: global.lastSyncTime,\n isLeftColumnShown: global.isLeftColumnShown,\n isRightColumnShown: selectIsRightColumnShown(global),\n isMediaViewerOpen: selectIsMediaViewerOpen(global),\n isForwardModalOpen: selectIsForwardModalOpen(global),\n hasNotifications: Boolean(global.notifications.length),\n hasDialogs: Boolean(global.dialogs.length),\n audioMessage,\n safeLinkModalUrl: global.safeLinkModalUrl,\n isHistoryCalendarOpen: Boolean(global.historyCalendarSelectedAt),\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n openedStickerSetShortName: global.openedStickerSetShortName,\n isServiceChatReady: selectIsServiceChatReady(global),\n activeGroupCallId: global.groupCalls.activeGroupCallId,\n animationLevel,\n language,\n wasTimeFormatSetManually,\n isCallFallbackConfirmOpen: Boolean(global.groupCalls.isFallbackConfirmOpen),\n addedSetIds: global.stickers.added.setIds,\n };\n },\n)(Main));\n","import { getDispatch, getGlobal } from '../lib/teact/teactn';\n\nimport { DEBUG } from '../config';\n\nexport { default as Main } from '../components/main/Main';\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH LOAD MAIN BUNDLE');\n}\n\nif (!getGlobal().connectionState) {\n getDispatch().initApi();\n}\n"],"names":["closeLocalTextSearch","global","chatId","threadId","selectCurrentMessageList","updateLocalTextSearch","replaceLocalTextSearchResults","undefined","addReducer","actions","payload","query","chatThreadKey","buildChatThreadKey","currentQuery","localTextSearch","byChatThreadKey","MEMO_EMPTY_ARRAY","mediaType","updateLocalMediaSearchType","id","type","shouldReplaceHistory","currentMessageList","replaceThreadParam","exitMessageSelectMode","messages","contentToBeScheduled","forwardMessages","toChatId","setGlobal","updateCurrentMessageList","isChatInfoShown","openChat","chatCreation","newChatMembersProgress","targetIndexDelta","orderedIds","position","indexOf","nextId","FOCUS_NO_HIGHLIGHT_DURATION","FAST_SMOOTH_MAX_DURATION","ANIMATION_END_DELAY","blurTimeout","scrollOffset","messageId","paramName","chatMessages","selectChatMessages","viewportIds","selectViewportIds","lastOwnEditableMessageId","findLast","Boolean","selectAllowedMessageActions","canEdit","replyingToId","selectReplyingToId","selectIsViewportNewest","chatMessageKeys","Object","keys","newIndex","toString","length","Number","MAIN_THREAD_ID","chat","selectChat","lastMessage","threadInfo","selectThreadInfo","lastMessageId","setReplyingToId","focusMessage","avatarOwnerId","profilePhotoIndex","origin","mediaViewer","volume","playbackRate","isMuted","audioPlayer","selectIsRightColumnShown","pollResults","voters","window","setTimeout","newGlobal","getGlobal","noHighlight","replyStack","selectReplyStack","pop","focusLastMessage","messageListType","groupedId","groupedChatId","replyMessageId","isResizingContainer","ids","selectForwardedMessageIdsByGroupId","shouldSwitchChat","clearTimeout","updateFocusedMessage","updateFocusDirection","FocusDirection","includes","direction","loadViewportMessages","fromChatId","messageIds","groupedMessageIds","selectMessageIdsByGroupId","isModalShown","closeMediaViewer","selectedMessages","openForwardMenu","message","byChatId","activeDownloads","filter","map","canDownload","forEach","downloadMessageMedia","selectCurrentChat","enterMessageSelectMode","childMessageIds","withShift","toggleMessageSelection","shouldShowContextMenuHint","disableContextMenuHint","showNotification","IS_TOUCH_ENV","isPollModalOpen","currentVersion","APP_VERSION","slice","join","serviceNotifications","find","version","SERVICE_NOTIFICATIONS_USER_ID","date","getServerTime","serverTimeOffset","content","text","parseMessageInput","versionNotification","isOutgoing","createServiceNotification","serviceChat","maxId","Math","max","fractionalPart","floor","serviceNotification","isUnread","apiUpdate","reactorModal","seenByModal","globalSearch","updateGlobalSearch","globalResults","localResults","resultsByType","fetchingStatus","chats","recentlyFoundChatIds","newRecentIds","unshift","updateGlobalSearchContent","stickers","search","resultIds","gifs","offsetId","results","updateUserSearch","globalUserIds","localUserIds","action","leftColumnWidth","management","isActive","screen","nextScreen","IS_SINGLE_COLUMN_LAYOUT","IS_TABLET_COLUMN_LAYOUT","isLeftColumnShown","messageLists","emoji","recentEmojis","newEmojis","e","sticker","recent","hash","newStickers","s","notification","localId","generateIdFor","newNotifications","notifications","existingNotificationIndex","findIndex","n","splice","push","data","hasErrorKey","getReadableErrorText","newDialogs","dialogs","existingErrorIndex","err","url","safeLinkModalUrl","selectedAt","historyCalendarSelectedAt","payment","isPaymentModalOpen","clearPayment","closeInvoice","error","uploadProgressCallbacks","Map","runDebouncedForMarkRead","debounce","cb","async","isOutlying","isBudgetPreload","addOffset","LoadMoreDirection","round","MESSAGE_LIST_SLICE","result","callApi","selectThreadOriginChat","limit","users","threadInfos","localMessages","allMessages","concat","byId","buildCollectionByKey","addChatMessagesById","updateOutlyingIds","updateListedIds","addUsers","addChats","updateThreadInfos","listedIds","selectListedIds","outlyingIds","selectOutlyingIds","areSortedArraysIntersecting","historyIds","newViewportIds","getViewportSlice","safeReplaceViewportIds","sourceIds","index","i","findClosestIndex","indexForDirection","from","to","areSomeLocal","areAllLocal","sendMessage","params","progressCallback","attachment","progress","messageLocalId","has","set","fileUploads","byMessageLocalId","replyingTo","IS_IOS","rafPromise","selectThreadTopMessageId","delete","isRestricted","Promise","resolve","loadWithBudget","selectFocusedMessageId","selectRealLastReadId","replyOriginForId","threadUpdate","MESSAGE_DELETED","replyMessage","selectChatMessage","updateChatMessage","replyToMessageId","loadMessage","isDeleting","updateThreadUnreadFromForwardedMessage","scheduledAt","noWebPage","selectNoWebPage","sendAs","selectSendAs","clearWebPagePreview","value","isSingle","attachments","isGrouped","restParams","entities","commonParams","groupedAttachments","split","MAX_MEDIA_FILES_FOR_ALBUM","firstAttachment","restAttachments","Date","now","selectEditingMessage","setEditingId","get","previousLocalId","cancelApiProgress","draft","replyToMsgId","updateChat","draftDate","localOnly","selectDraft","isUnpin","isOneSide","isSilent","unpinAllMessages","shouldDeleteForAll","editingId","selectEditingId","selectEditingScheduledId","activeChat","reason","description","peer","currentUserId","minId","selectFirstUnreadId","unreadCount","readCount","count","l","countSortedIds","lastReadInboxMessageId","webPagePreview","loadWebPagePreview","options","option","offset","shouldResetVoters","unique","user","offsets","nextOffset","loadPollOptionResults","fromChat","toChat","sort","a","b","realMessages","m","isServiceNotificationMessage","poll","replaceScheduledMessages","loadScheduledHistory","selectScheduledMessage","loadPinnedMessages","seenByUserIds","sendAsId","sendAsChat","selectUser","fullInfo","sendAsIds","updateSponsoredMessage","selectSponsoredMessage","random","randomId","searchThrottled","throttle","searchGifs","updateGifSearch","added","addedStickers","updateStickerSets","sets","loadStickerSets","setIds","addedSetIds","cached","setsById","loadStickers","stickerSetId","pause","recentStickers","loadRecentStickers","favorite","favoriteStickers","loadFavoriteStickers","greeting","featured","featuredStickers","loadFeaturedStickers","stickerSetShortName","stickerSetAccessHash","stickerSet","selectStickerSet","accessHash","packs","updateStickerSet","currentEmoji","forEmoji","rebuildStickersForEmoji","replaceAnimatedEmojis","loadAnimatedEmojis","animatedEmojiEffects","loadAnimatedEmojiEffects","saved","savedGifs","loadSavedGifs","unfave","unfaveSticker","installedDate","language","currentEmojiKeywords","emojiKeywords","isLoading","fromVersion","keywords","searchStickers","title","searchWords","updateStickersForEmoji","loadStickersForEmoji","openedStickerSetShortName","searchMessagesGlobal","offsetRate","maxDate","minDate","localResult","GLOBAL_SEARCH_SLICE","totalCount","nextOffsetId","nextRate","currentSearchQuery","selectCurrentGlobalSearchQuery","updateGlobalSearchFetchingStatus","addMessages","updateGlobalSearchResults","searchSharedMedia","SHARED_MEDIA_SLICE","newFoundIds","currentSearch","selectCurrentMediaSearch","updateLocalMediaSearchResults","localChats","localUsers","globalChats","globalUsers","chatIds","userIds","searchChats","timestampPlusDay","foundIds","selectCurrentTextSearch","topMessageId","MESSAGE_SEARCH_SLICE","updateLocalTextSearchResults","searchTextMessages","currentType","currentResults","timestamp","getDispatch","searchMessagesByDate","ManagementProgress","username","updateManagementProgress","updateManagement","isUsernameAvailable","isChatBasicGroup","invite","editingInvite","update","inviteInfo","adminId","isRevoked","admin","revokedInvites","invites","link","expireDate","usageLimit","isRequestNeeded","oldInvite","newInvite","current","managementState","offsetDate","offsetUserId","offsetUser","currentInviteInfo","importers","isRequested","requesters","joinRequests","userId","isApproved","targetChat","importer","recentRequesterIds","requestsPending","releaseStatusTimeout","loadTopMessages","DEBUG","console","log","isSyncing","loadAllChats","preloadTopChatMessages","listType","shouldReplace","onReplace","areMessagesLoaded","draftsByChatId","reduce","acc","currentChatId","currentThreadId","currentChat","newCurrentChatId","currentMessageListInfo","originChannelId","currentMessageListInfoOrigin","resultOrigin","byIdOrigin","listedIdsOrigin","threadsById","updateChats","updateUsers","audioChatId","audioMessageId","closeAudioPlayer","loadAndReplaceMessages","lastSyncTime","initFolderManager","runDebouncedForFetchFullUser","runThrottledForSearch","replaceInlineBotSettings","inlineBotSettings","inlineBots","byUsername","replaceInlineBotsIsLoading","userStatusesById","replaceUserStatuses","statusesById","topPeers","lastRequestedAt","loadTopUsers","contactList","getCompareString","lastName","firstName","collator","Intl","Collator","sortedUsers","compare","isSelf","loadContactList","isUserBot","commonChats","isFullyLoaded","updateUser","updateChatMutedState","phoneNumber","phone","updateContact","deleteContact","profileId","isPrivate","isUserId","photos","userSearch","updateUserSearchFetchingStatus","searchUsers","pick","runDebouncedForSearch","sendBotCommand","command","button","match","RE_TME_LINK","RE_TG_LINK","openTelegramLink","toggleSafeLinkModal","showDialog","alert","isError","answerCallbackButton","openPollModal","getReceipt","receiptMessageId","getPaymentForm","setInvoiceMessageInfo","openPaymentModal","bot","selectChatBot","removeBlockedContact","topInlineBots","inlineBotData","inlineBot","switchPm","canLoadMore","shouldReplaceSettings","newInlineBotData","currentIds","Set","newResults","help","isGallery","searchInlineBot","queryId","resultId","botId","param","startParam","replaceSettings","hasPassword","updateTwoFaSettings","hint","currentPassword","onSuccess","isSuccess","password","email","waitingEmailCodeLength","code","requestInfo","saveInfo","selectPaymentChatId","selectPaymentMessageId","shouldSave","shippingOptions","setRequestInfoId","updateShippingOptions","setPaymentStep","PaymentStep","validateRequestedInfo","setPaymentForm","step","invoice","shippingAddressRequested","nameRequested","phoneRequested","emailRequested","setReceipt","receipt","publishableKey","selectProviderPublishableKey","credentials","k","buildQueryString","cardNumber","expiryMonth","expiryYear","cvv","zip","country","response","fetch","method","headers","Authorization","json","getStripeError","setStripeCardInfo","sendStripeCredentials","shippingOptionId","saveCredentials","formId","selectPaymentFormId","requestInfoId","selectPaymentRequestId","stripeCredentials","selectStripeCredentials","requestedInfoId","sendPaymentForm","save","MAX_MESSAGES_LIST_WIDTH","SIDE_COLUMN_MAX_WIDTH","MIN_LEFT_COLUMN_WIDTH","subtractXForEmojiInteraction","x","windowWidth","windowSize","width","MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","min","MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN","availableReaction","aroundAnimation","mediaLoader","ApiMediaFormat","centerIcon","availableReactions","y","localEffect","startSize","isReversed","activeEmojiInteraction","animatedEffect","interactions","startX","startY","emoticon","selectLocalAnimatedEmojiEffectByName","timestamps","endX","endY","reaction","selectDefaultReaction","isMessageLocal","sendReaction","isInDocumentGroup","isInAlbum","documentGroupFirstMessageId","reactions","some","isChosen","animationLevel","settings","byKey","ANIMATION_LEVEL_MAX","activeReactions","omit","recentReactions","canSeeList","addMessageReaction","appConfig","defaultReaction","reactors","areDeepEqual","value1","value2","type1","isArray1","Array","isArray","array1","array2","every","member1","object1","object2","key1","noTopChatsRequest","selectIsChatListed","loadTopChats","newProfilePhoto","closeMessageNotifications","selectChatListType","updateChatListIds","isNotJoined","requestChatUpdate","leaveChat","typingStatus","senderId","isFromScheduled","hasUnreadMention","unreadMentionsCount","notifyAboutNewMessage","messageUpdate","channelId","selectCommonBoxChatId","folderId","ARCHIVED_FOLDER_ID","orderedPinnedIds","isPinned","newOrderedPinnedIds","MAX_ACTIVE_PINNED_CHATS","listIds","active","pinnedId","updateChatListType","folder","chatFoldersById","chatFolders","newChatFoldersById","newOrderedIds","orderedId","folders","recommended","replacedMembers","addedMember","deletedMemberId","shouldUpdate","members","deleteIndex","adminMembers","isOwner","isAdmin","membersCount","photo","formattedText","loadChatJoinRequests","ANIMATION_DELAY","updateWithLocalMedia","isScheduled","currentMessage","video","document","getMessageContent","blobUrl","thumbnail","isPreloadedGlobally","previewBlobUrl","updateScheduledMessage","updateThreadUnread","selectThreadByMessage","originMessage","updateListedAndViewportIds","firstMessageId","isUnreadChatNotLoaded","addViewportId","messagesCount","firstUnreadId","updateChatLastMessage","force","currentLastMessage","findLastMessage","deleteMessages","newLastMessage","threadIdsToUpdate","deleteChatMessages","requestThreadInfoUpdate","chatsIdsToUpdate","commonBoxChatId","shouldForceReply","updateThreadInfo","newMessage","isMessageInCurrentMessageList","delayedGlobal","getMessageText","localEmoji","selectLocalAnimatedEmoji","selectLocalAnimatedEmojiEffect","scheduledIds","selectScheduledIds","selectIsChatWithBot","selectScheduledMessages","deleteChatScheduledMessages","thread","markMessageListRead","currentPinnedIds","selectPinnedIds","newPinnedIds","newTheadInfo","messagesById","loadFullChat","scheduledMessages","deleteScheduledMessages","pollId","pollUpdate","selectChatMessageByPollId","updatedPoll","updatedResults","chosenAnswers","chosenAnswer","chosenAnswerIndex","recentVoterIds","totalVoters","newRecentVoterIds","newTotalVoters","targetOption","targetOptionIndex","updatedOption","votersCount","selectIsServiceChatReady","currentReactions","flushStatusUpdatesThrottled","pendingStatusUpdates","statusUpdate","status","targetUser","isBlocked","addBlockedContact","privacy","key","rules","updateNotifySettings","peerType","shouldShowPreviews","addNotifyException","twoFaSettings","call","connectionState","groupCalls","activeGroupCallId","leaveGroupCall","shouldRemove","removeGroupCall","updateGroupCall","participantsCount","groupCallId","participants","participant","updateGroupCallParticipant","useBeforeUnload","callback","useEffect","onBeforeUnload","metaViewport","querySelector","defaultViewportContent","getAttribute","allowedZoomViewportContent","preventEvent","preventDefault","memo","isForAppBadge","useFolderManagerForUnreadCounters","unreadNotificationsCount","getAllNotificationsCount","updateAppBadge","className","formatIntegerCompact","ConnectionStatus","useConnectionStatus","lang","hasMiddleHeader","isMinimized","isDisabled","isOnline","setIsOnline","useState","navigator","onLine","handleChange","addEventListener","removeEventListener","useBrowserOnline","syncing","online","waitingForNetwork","toLowerCase","replace","connectionStatus","connectionStatusPosition","connectionStatusText","onClick","useLang","dir","isRtl","Spinner","color","Transition","activeKey","name","Button","size","ANIMATION_LEVEL_OPTIONS","withGlobal","searchQuery","chatsById","isConnectionStatusMinimized","globalSearchChatId","searchDate","theme","selectTheme","isMessageListOpen","areChatsLoaded","contactsFilter","onSearchQuery","onSelectSettings","onSelectContacts","onSelectArchived","onReset","shouldSkipTransition","openTipsChat","setGlobalSearchDate","setSettingOption","setGlobalSearchChatId","hasMenu","LeftColumnContent","selectedSearchDate","useMemo","formatDateToString","archivedUnreadChatsCount","values","total","isChatArchived","withOtherVersions","location","hostname","MainButton","onTrigger","isOpen","ripple","ariaLabel","buildClassName","handleSearchFocus","useCallback","toggleConnectionStatus","handleSelectSaved","handleDarkModeToggle","stopPropagation","newTheme","shouldUseSystemTheme","switchTheme","handleAnimationLevelChange","newLevel","_","body","classList","toggle","isSearchFocused","searchInputPlaceholder","DropdownMenu","trigger","footer","APP_NAME","MenuItem","icon","Switcher","label","checked","noAnimation","langCode","href","FEEDBACK_URL","setPermanentWebVersion","clearWebsync","disableHistoryBack","SearchInput","inputId","parentContainerClassName","focused","spinnerColor","spinnerBackgroundColor","placeholder","autoComplete","canClose","onChange","onFocus","onSpinnerClick","PickerSelectedItem","clickArg","chatOrUserId","ShowTransition","isCustom","orderedFolderIds","activeChatFolder","shouldSkipHistoryAnimations","foldersDispatch","onScreenSelect","loadChatFolders","setActiveChatFolder","transitionRef","useRef","displayedFolders","folderCountersById","folderTabs","ALL_FOLDER_ID","badgeCount","chatsCount","isBadgeActive","notificationsCount","handleSwitchTab","forceOnHeavyAnimation","captureEvents","selectorToPreventScroll","onSwipe","SwipeDirection","isNotInAllTabRef","captureEscKeyListener","useHistoryBack","handleKeyDown","ctrlKey","shiftKey","startsWith","digit","shouldRender","shouldRenderPlaceholder","transitionClassNames","useShowTransition","renderCurrentTab","activeFolder","ChatList","folderType","TabList","tabs","activeTab","onSwitchTab","ref","renderCount","props","LeftSearch","useModuleLoader","Bundles","Loading","ContactList","isShown","onNewPrivateChat","onNewChannel","onNewGroup","isMenuOpen","setIsMenuOpen","fabClassName","tabIndex","Menu","positionX","positionY","autoClose","onClose","TRANSITION_RENDER_COUNT","closeTimeout","onContentChange","isNewChatButtonShown","setIsNewChatButtonShown","isMouseInside","handleSelectSettings","handleSelectContacts","handleSelectNewChannel","handleSelectNewGroup","handleSelectArchived","handleMouseEnter","handleMouseLeave","autoCloseTimeout","shouldRenderUpdateButton","updateButtonClassNames","handleUpdateClick","isAppOutdated","markIsAppOutdated","useFlag","timeout","reload","useAppOutdatedCheck","onMouseEnter","onMouseLeave","shouldCleanup","cleanupExceptionKey","fluid","pill","Settings","NewChat","ArchivedChats","ContentType","RENDER_COUNT","setGlobalSearchQuery","resetChatCreation","loadPasswordInfo","clearTwoFaError","setLeftColumnWidth","resetLeftColumnWidth","resizeRef","setContent","settingsScreen","setSettingsScreen","SettingsScreens","setContactsFilter","foldersState","useFoldersReducer","lastResetTime","setLastResetTime","contentType","Main","Archived","NewChannel","NewGroup","handleReset","forceReturnToChatList","pickerSearchInput","getElementById","blur","handleSearchQuery","IS_MAC_OS","metaKey","getKeyFromEvent","initResize","resetResize","handleMouseUp","elementRef","onResize","initialWidth","markIsActive","unmarkIsActive","initialMouseX","setInitialMouseX","initialElementWidth","setInitialElementWidth","remove","style","handleMouseMove","event","newWidth","ceil","clientX","stopDrag","cleanup","offsetWidth","add","useResize","handleSettingsScreenSelect","LAYERS_ANIMATION_NAME","currentScreen","isChannel","onMouseDown","onMouseUp","onDoubleClick","setSize","handleResize","HeaderMenuContainer","isChatChannel","selectIsInSelectMode","noMenu","isChatWithSelf","selectIsChatWithSelf","isMainThread","isDiscussionThread","isRightColumnShown","canRestartBot","selectIsUserBlocked","canStartBot","selectIsChatBotNotStarted","canSubscribe","isChatSuperGroup","canSearch","canCall","ARE_CALLS_SUPPORTED","canMute","canLeave","canEnterVoiceChat","isCallActive","canCreateVoiceChat","adminRights","manageCall","isCreator","pendingJoinRequests","canExpandActions","joinChannel","openLocalTextSearch","restartBot","openCallFallbackConfirm","requestNextManagementScreen","menuButtonRef","menuPosition","setMenuPosition","handleHeaderMenuOpen","rect","getBoundingClientRect","right","bottom","handleHeaderMenuClose","handleHeaderMenuHide","handleSubscribeClick","handleStartBot","handleRestartBot","handleJoinRequestsClick","ManagementScreens","handleSearchClick","focus","searchInput","IS_PWA","disabled","anchor","withExtraActions","onSubscribeChannel","onSearchClick","onCloseAnimationEnd","useWebpThumbnail","thumbDataUri","getMessageMediaThumbDataUri","shouldDecodeThumbnail","isWebpSupported","thumbnailDecoded","setThumbnailDecoded","EMPTY_IMAGE_DATA_URI","useLayoutEffect","webpToPngBase64","then","catch","drawRect","height","radius","containerRef","markupParams","reverseIndex","barHeight","getBarHeight","markHeight","getMarkHeight","trackHeight","getTrackHeight","clipPathId","clipPath","d","getClipPath","markTranslateY","getMarkTranslateY","trackTranslateY","getTrackTranslateY","calculateMarkup","firstChild","firstElementChild","currentElement","transform","svg","div","defs","innerHTML","customTitle","onUnpinMessage","onAllPinnedClick","mediaThumbnail","mediaBlobUrl","useMedia","getMessageMediaHash","renderMessageSummary","isUnpinDialogOpen","openUnpinDialog","closeUnpinDialog","handleUnpinMessage","ConfirmDialog","confirmLabel","confirmHandler","getPictogramDimensions","src","alt","renderPictogram","RippleEffect","scaleImage","image","ratio","outputType","Blob","URL","createObjectURL","img","Image","onload","scale","blob","Error","finally","revokeObjectURL","steppedScale","bitmap","createImageBitmap","resizeWidth","resizeHeight","resizeQuality","res","canvas","createElement","ctx","getContext","transferFromImageBitmap","drawImage","toBlob","oc","octx","mul","cur","LOGO_DIMENSIONS","MINIMAL_SIZE","sender","audio","voice","fileName","artist","performer","getSenderTitle","getTranslation","album","getChatTitle","audioCoverHash","getAudioHasCover","avatarHash","getChatAvatarHash","media","thumbnailSizes","preferred","AVATAR_FULL_DIMENSIONS","getCoverSize","fn","deps","defaultValue","setIsLoading","setError","setResult","wasCancelled","telegramLogoPath","resizeImage","makeGoodArtwork","useAsync","buildMediaMetadata","artwork","selectSender","noUi","setAudioPlayerVolume","setAudioPlayerPlaybackRate","setAudioPlayerMuted","isVoice","senderName","mediaData","mediaMetadata","useMessageMediaMetadata","playPause","stop","isPlaying","requestNextTrack","requestPreviousTrack","isFirst","isLast","setVolume","toggleMuted","setPlaybackRate","useAudioPlayer","makeTrackId","getMediaDuration","isVoicePlaying","handleClick","handleClose","clearMediaSession","handleVolumeChange","handleVolumeClick","handlePlaybackClick","volumeIcon","renderText","renderAudio","subtitle","renderVoice","withClickPropagation","RangeSlider","groupCall","selectChatGroupCall","usersById","isLoaded","isCallNotEmpty","hasPinnedOffset","joinGroupCall","subscribeToGroupCallUpdates","handleJoinGroupCall","fetchedParticipants","isUser","subscribed","p","Avatar","audioMessage","pinnedIds","state","isSelectModeActive","isChatWithBot","currentTransitionKey","assign","pinnedMessageId","topMessageSender","selectForwardedSender","pinnedMessageIds","canUnpin","firstPinnedMessage","isReady","openChatWithInfo","pinMessage","openPreviousChat","toggleLeftColumn","isBackButtonActive","pinnedMessageIndex","setPinnedMessageIndex","pinnedMessage","pinnedMessagesCount","chatTitleLength","topMessageTitle","useEnsureMessage","useWindowSize","isLeftColumnHideable","shouldShowCloseButton","componentRef","shouldAnimateTools","handleHeaderClick","handlePinnedMessageClick","cycleRestrict","handleAllPinnedClick","setBackButtonActive","handleBackClick","messageInput","EDITABLE_INPUT_ID","canToolsCollideWithChatInfo","SAFE_SCREEN_WIDTH_FOR_CHAT_INFO","MOBILE_SCREEN_MAX_WIDTH","shouldUseStackedToolsClass","SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","shouldRenderAudioPlayer","audioPlayerClassNames","renderingAudioMessage","useCurrentOrPrev","shouldRenderPinnedMessage","pinnedMessageClassNames","renderingPinnedMessage","renderingPinnedMessagesCount","renderingCanUnpin","renderingPinnedMessageTitle","canRevealTools","componentEl","renderInfo","renderBackButton","PrivateChatInfo","withDots","withFullInfo","withMediaViewer","withUpdatingStatus","noRtl","GroupChatInfo","asClose","withUnreadCounter","isAudioPlayerRendered","getMessageKey","isAlbum","messageOrAlbum","groupMessages","currentAlbum","currentSenderGroup","currentDateGroup","originalDate","datetime","getDayStart","senderGroups","dateGroups","mainMessage","albumId","nextMessage","nextMessageDayStartsAt","isActionMessage","forwardInfo","senderUserId","hiddenUserName","inlineButtons","INTERSECTION_THROTTLE_FOR_MEDIA","IS_ANDROID","INTERSECTION_MARGIN_FOR_MEDIA","isEmojiOnlyMessage","customShape","getMinMediaWidth","hasText","hasCommentButton","calculateMediaDimensions","noAvatars","isOwn","isOwnMessage","isForwarded","isForwardedMessage","getMessagePhoto","getMessageWebPagePhoto","getMessageVideo","isWebPagePhoto","calculateInlineImageDimensions","calculateVideoDimensions","minMediaWidth","stretchFactor","finalWidth","finalHeight","isSmall","accumulate","list","initValue","accumulator","item","clamp","num","low","high","calculateContainerSize","layout","styles","dimensions","sides","calculateAlbumLayout","ratios","getRatios","proportions","getProportions","averageRatio","getAverageRatio","albumCount","forceCalc","maxWidth","getAvailableWidth","REM","minWidth","maxHeight","spacing","originalRatios","cropRatios","attempts","pushAttempt","lineCounts","heights","currentCount","attemptCount","sum","multiHeight","first","second","third","fourth","optimalAttempt","optimalDiff","lineCount","totalHeight","bad1","bad2","line","diff","abs","optimalCounts","optimalHeights","rowCount","row","colCount","lineHeight","col","layoutWithComplexLayouter","AlbumRectPart","layoutTwoTopBottom","layoutTwoLeftRightEqual","minimalWidth","secondWidth","firstWidth","layoutTwoLeftRight","layoutTwo","firstHeight","thirdHeight","secondHeight","rightWidth","leftWidth","layoutThreeLeftAndOther","layoutThreeTopAndOther","layoutThree","w","h0","h","w0","w2","w1","h1","layoutFourTopAndOther","h2","layoutFourLeftAndOther","layoutFour","containerStyle","element","calculateAuthorWidth","font","whiteSpace","left","opacity","appendChild","useFocusMessage","isFocused","focusDirection","noFocusHighlight","messagesContainer","closest","fastSmoothScroll","QUICK_REACTION_AREA_WIDTH","QUICK_REACTION_AREA_HEIGHT","GROUP_MESSAGE_HOVER_ATTRIBUTE","useOuterHandlers","selectMessage","isInSelectMode","canReply","isProtected","onContextMenu","handleBeforeContextMenu","isContextMenuShown","contentRef","shouldHandleMouseLeave","sendDefaultReaction","isQuickReactionVisible","markQuickReactionVisible","unmarkQuickReactionVisible","isSwiped","markSwiped","unmarkSwiped","doubleTapTimeoutRef","startedAt","onRelease","handleMouseDown","preventMessageInputBlur","clearInterval","pageX","pageY","handleDoubleTap","target","contains","handleTap","handleContextMenu","stopEvent","matches","handleDoubleClick","handleContentDoubleClick","container","clientY","isVisibleX","isVisibleY","handleSendQuickReaction","currentTarget","lastGroupElement","getLastElementInDocumentGroup","removeAttribute","handleDocumentGroupMouseLeave","handleDocumentGroupMouseEnter","setAttribute","nextElementSibling","ContextMenuContainer","targetUserIds","targetChatId","targetMessageId","targetMessage","selectIsMessageFocused","focusedMessage","isChat","senderUser","senderChat","observeIntersection","isEmbedded","appearanceOrder","isLastInList","useOnIntersect","noAppearanceAnimation","markShown","targetUsers","renderActionMessageText","asTextWithSpoilers","isContextMenuOpen","contextMenuPosition","handleContextMenuClose","handleContextMenuHide","useContextMenuHandlers","customText","isIntersecting","useIsIntersecting","pictogramId","isRoundVideo","getMessageRoundVideo","senderTitle","draggable","activeReaction","isInMeta","stopActiveReaction","r","centerIconId","effectId","mediaDataCenterIcon","mediaDataEffect","shouldPlay","shouldRenderAnimation","animationClassNames","handleEnded","isAnimationLoaded","markAnimationLoaded","unmarkAnimationLoaded","shouldRenderStatic","ReactionStaticEmoji","AnimatedSticker","animationData","play","noLoop","onLoad","onEnded","outgoingStatus","signature","withReactions","withReactionOffset","reactionMessage","isActivated","markActivated","createDateTime","formatDateTimeToString","editDateTime","isEdited","editDate","forwardedDateTime","views","formatTime","MessageOutgoingStatus","observeIntersectionForPlaying","shouldLoop","isModalOpen","openModal","closeModal","isLottie","isGif","canDisplayGif","IS_WEBM_SUPPORTED","isMemojiSticker","NO_STICKER_SET_ID","shouldLoad","mediaHash","previewMediaHash","previewUrl","getMessageMediaFormat","isMediaLoaded","isLottieLoaded","markLottieLoaded","isMediaReady","useMediaTransition","getStickerDimensions","thumbClassName","stickerClassName","safePlay","autoPlay","playsInline","loop","muted","fromSticker","useBlurredMediaThumbRef","fullMediaData","useCanvasBlur","IS_CANVAS_FILTER_SUPPORTED","SELECTED_APPENDIX_COLORS","dark","outgoing","incoming","light","canAutoLoad","isSelected","uploadProgress","nonInteractive","shouldAffectAppendix","isDownloading","onCancelUpload","localBlobUrl","isLoadAllowed","setIsLoadAllowed","loadProgress","useMediaWithLoadProgress","thumbRef","downloadProgress","isUploading","isTransferring","transferProgress","getMediaTransferState","wasLoadDisabled","usePrevious","shouldRenderSpinner","spinnerClassNames","shouldRenderDownloadButton","downloadButtonClassNames","isAllowed","contentEl","inSelectMode","getImageData","getAppendixColorFromImage","getCustomAppendixBg","appendixBg","setProperty","ProgressSpinner","useVideoAutoPause","playerRef","canPlay","wasPlaying","paused","canPlayRef","freezePlaying","unfreezePlaying","unfreezePlayingOnRaf","fastRaf","useBackgroundMode","useHeavyAnimationCheck","canAutoPlay","videoRef","getMessageWebPageVideo","isPlayAllowed","setIsPlayAllowed","previewClassNames","isInline","isBuffered","bufferingHandlers","useBuffering","shouldRenderPlayButton","playButtonClassNames","playProgress","setPlayProgress","handleTimeUpdate","currentTime","duration","useVideoCleanup","cancelMessageMediaDownload","onTimeUpdate","formatMediaDuration","contact","countryList","phoneCodes","phoneCodeList","formatPhoneNumberWithCode","getPercentage","toFixed","answer","voteResults","maxVotersCount","correctResults","shouldAnimate","correctAnswer","showIcon","answerPercent","finalPercent","setFinalPercent","lineRef","lineWidth","isAnimationDoesNotStart","lineEl","svgEl","lineStyle","onSendVote","openPollResults","summary","isSubmitting","setIsSubmitting","chosenOptions","setChosenOptions","isSolutionShown","setIsSolutionShown","wasSubmitted","setWasSubmitted","closePeriod","setClosePeriod","closed","closeDate","countdownRef","hasVoted","canVote","canViewResult","isPublic","isMultiple","multipleChoice","answers","isCorrect","hidden","quiz","countdownEl","circumference","PI","lastElementChild","timerEl","strokeDashOffset","textContent","timer","recentVoters","handleRadioChange","handleCheckboxChange","handleVoteClick","handleViewResultsClick","handleSolutionShow","handleSolutionHide","solution","Notification","renderTextWithEntities","solutionEntities","onDismiss","containerId","question","getPollTypeString","CheckboxGroup","loadingOptions","RadioGroup","loadingOption","isQuiz","getReadableVotersCount","isText","inPreview","onMediaClick","onCancelMediaTransfer","webPage","getMessageWebPage","isSquarePhoto","handleMediaClick","siteName","displayUrl","isMediaInteractive","truncatedDescription","trimText","SafeLink","getMessageInvoice","amount","currency","isTest","photoUrl","formatCurrency","withSelectControl","WrappedComponent","ownProps","selectIsMessageSelected","handleMessageSelect","newProps","PhotoWithSelect","Photo","VideoWithSelect","Video","activeDownloadIds","selectActiveDownloadIds","uploadsById","hasCustomAppendix","albumLayout","cancelSendingMessage","mediaCount","handleCancelUpload","containerWidth","containerHeight","fileUpload","selectCanAutoLoadMedia","selectCanAutoPlayMedia","stopPrevious","playingProgressRef","shouldSpinnerRender","setIsActivated","setProgress","svgCenter","ROUND_VIDEO_DIMENSIONS_PX","playerEl","playingProgressEl","stopPlaying","capturePlaying","stopCurrentAudio","videoClassName","recentReplierIds","recentRepliers","peerId","hasUnread","recentReactors","recentReaction","isOutside","metaChildren","localSticker","soundId","playKey","useAnimatedEmoji","localStickerAnimationData","setLocalStickerAnimationData","getAnimationData","quality","APPENDIX_OWN","__html","APPENDIX_NOT_OWN","withSenderName","withAvatar","isLastInDocumentGroup","viaBotId","replyToChatId","isRepliesChat","isChatWithRepliesBot","chatUsername","forceSenderName","isAnonymousOwnMessage","canShowSender","originSender","botSender","threadTopMessageId","isThreadTop","shouldHideReply","replyMessageSender","selectUploadProgress","isForwarding","highlight","singleEmoji","getMessageSingleEmoji","selectIsDownloading","actualThreadInfo","selectIsMessageProtected","isSingleEmoji","animatedEmoji","selectAnimatedEmoji","animatedEmojiEffect","selectAnimatedEmojiEffect","animatedEmojiSoundId","selectAnimatedEmojiSound","isGroupSelected","selectIsDocumentGroupSelected","isPinnedList","canAutoLoadMedia","canAutoPlayMedia","autoLoadFileMaxSizeMb","shouldLoopStickers","selectShouldLoopStickers","selectOutgoingStatus","observeIntersectionForBottom","observeIntersectionForMedia","observeIntersectionForAnimatedStickers","areReactionsInMeta","noComments","isFirstInGroup","isLastInGroup","isFirstInDocumentGroup","clickInlineButton","bottomMarkerRef","isLocal","hasReply","isReplyMessage","hasThread","getMessageCustomShape","hasAnimatedEmoji","hasReactions","areReactionsEmpty","asForwarded","isLinkedChannelPost","isInDocumentGroupNotFirst","isInDocumentGroupNotLast","canShowActionButton","canForward","canFocus","isChannelPost","fromMessageId","withCommentButton","withQuickReactionButton","avatarPeer","senderPeer","handleAvatarClick","handleSenderClick","handleViaBotClick","handleReplyClick","handleAudioPlay","handleAlbumMediaClick","handleMetaClick","handleReadMedia","handleVoteSend","handleGroupForward","handleForward","handleFocus","handleFocusForwarded","handleDocumentGroupSelectAll","openMediaViewer","openAudioPlayer","markMessagesRead","sendPollVote","focusMessageInComments","replyToTopMessageId","channelPostId","MediaViewerOrigin","albumMessageId","selectWithGroupedId","useInnerHandlers","containerClassName","contentClassName","hasComments","hasActionButton","classNames","isMedia","isMediaWithNoText","isViaBot","isRound","buildContentClassName","withAppendix","textParts","renderMessageText","metaPosition","reactionsPosition","calculatedWidth","noMediaCorners","extraPadding","adminTitle","metaSafeAuthorWidth","renderReactionsAndMeta","meta","onMouseMove","isAvatarPeerUser","avatarUser","avatarChat","hiddenName","renderAvatar","textContentClass","senderColor","getUserColorKey","renderSenderName","AnimatedEmoji","effect","forceLoadPreview","Audio","AudioOrigin","isSelectable","onPlay","onReadMedia","Document","renderContent","dangerouslySetInnerHTML","isBot","channel","viewSponsoredMessage","openChatByInvite","startBot","shouldObserve","observe","useIntersectionObserver","rootRef","debounceMs","threshold","getUserFullName","chatInviteTitle","chatInviteHash","messageGroups","isViewportNewest","withUsers","anchorIdRef","memoUnreadDividerBeforeIdRef","memoFirstUnreadIdRef","isScrollingRef","isScrollPatchNeededRef","hasLinkedChat","isSchedule","onFabToggle","onNotchToggle","openHistoryCalendar","observeIntersectionForReading","throttleMs","margin","freeze","freezeForReading","unfreeze","unfreezeForReading","entries","mentionIds","entry","dataset","useMessageObservers","backwardsTriggerRef","forwardsTriggerRef","fabTriggerRef","loadMoreBackwards","loadMoreForwards","toggleScrollTools","offsetHeight","scrollHeight","scrollTop","scrollBottom","isAtBottom","MESSAGE_LIST_SENSITIVE_AREA","LOCAL_MESSAGE_ID_BASE","triggerEntry","IS_SCROLL_PATCH_NEEDED","observeIntersectionForFab","freezeForFab","unfreezeForFab","FAB_THRESHOLD","observeIntersectionForNotch","freezeForNotch","unfreezeForNotch","useOnChange","useScrollHooks","unreadDivider","messageCountToAnimate","messageGroup","flatten","appearanceIndex","dateGroup","dateGroupIndex","dateGroupsArray","senderGroup","senderGroupIndex","senderGroupsArray","compact","currentDocumentGroupId","messageIndex","isMessageAlbum","documentGroupId","nextDocumentGroupId","originalId","getMessageOriginalId","teactFastList","SCHEDULED_WHEN_ONLINE","formatHumanDate","dividend","getUserIdDividend","lastUnreadMessageId","loadGreetingStickers","handleStickerSelect","selectedSticker","StickerButton","isGroupChatJustCreated","renderScheduled","renderSavedMessages","renderGroup","runDebouncedForScroll","selectCurrentMessageIds","restrictionReason","focusingId","withLastMessageWhenPreloading","chatBot","botDescription","isChatLoaded","isChannelChat","isGroupChat","isChatGroup","threadFirstMessageId","selectFirstMessageId","linkedChatId","hasTools","canPost","withBottomShift","setScrollOffset","loadSponsoredMessages","loadMessageReactions","scrollOffsetRef","selectScrollOffset","anchorTopRef","listItemElementsRef","memoFocusingIdRef","isScrollTopJustUpdatedRef","shouldAnimateAppearanceRef","setContainerHeight","onTickEnd","listedMessages","orderBy","useInterval","loadMoreAround","isScrolled","updateStickyDates","markIsScrolled","runDebounced","useDebounce","currentStuck","stuckDateEl","allElements","querySelectorAll","containerTop","el","offsetTop","top","findStuckDate","useStickyDates","handleScroll","parentElement","observer","ResizeObserver","offsetParent","contentRect","disconnect","windowHeight","normalHeight","String","clientHeight","preservedItemElements","useLayoutEffectWithPrevDeps","prevMessageIds","prevIsViewportNewest","prevContainerHeight","hasLastMessageChanged","hasViewportShifted","wasMessageAdded","isAlreadyFocusing","shouldForceScroll","lastItemElement","bottomOffset","newScrollTop","isResized","isAnimatingScroll","patchChromiumScroll","resetScroll","useEffectWithPrevDeps","prevIsSelectModeActive","dispatchHeavyAnimationEvent","shouldRenderGreeting","onScroll","backgroundColor","withExtraShift","focusNextReply","messageElements","lastMessageElement","MAX_QUICK_IMG_SIZE","FILE_EXT_REGEX","buildAttachment","filename","isQuick","mimeType","quick","SUPPORTED_IMAGE_CONTENT_TYPES","preloadImage","resizedUrl","fetchBlob","SUPPORTED_VIDEO_CONTENT_TYPES","videoWidth","videoHeight","preloadVideo","createPosterForVideo","insertHtmlInSelection","html","selection","getSelection","getRangeAt","rangeCount","range","deleteContents","fragment","createContextualFragment","lastInsertedNode","lastChild","insertNode","setStartAfter","setEndAfter","collapse","removeAllRanges","addRange","resetInput","applyIosAutoCapitalizationFix","inputEl","POLYFILL_OPTIONS","encoderPath","reuseWorker","BLOB_PARAMS","opusRecorderPromise","OpusRecorder","mediaRecorder","init","default","start","analyzerCallback","startMediaRecorder","pausedAt","chunks","waveform","ondataavailable","typedArray","releaseAnalyzer","recorder","source","sourceNode","analyser","context","createAnalyser","fftSize","connect","dataLength","frequencyBinCount","dataArray","Uint8Array","isDestroyed","tick","getByteFrequencyData","requestAnimationFrame","subscribeToAnalyzer","reject","onstop","onerror","delayStop","CLIPBOARD_ACCEPTED_TYPES","useDebouncedMemo","resolverFn","ms","dependencies","setValue","isFrozen","INLINE_BOT_QUERY_REGEXP","HAS_NEW_LINE","MEMO_NO_RESULT","canShowHelp","usernameLowered","tempEl","runThrottled","RE_COMMAND","DeleteMessageModal","openTimeout","isFirstTimeActivation","onActivate","buttonProps","CalendarModal","AttachMenu","SymbolMenu","InlineBotTooltip","MentionTooltip","CustomSend","StickerTooltip","BotCommandTooltip","useMouseInside","isKeyboardSingleUse","forceOpen","markForceOpen","unmarkForceOpen","keyboardButtons","forwardMessageIds","forwardedMessagesCount","exitForwardMode","canAnimate","useAsyncRendering","clearEmbedded","handleMessageClick","faded","AttachmentModal","BotCommandMenu","PollModal","DropArea","RE_LINK","RegExp","RE_LINK_TEMPLATE","messageText","toggleMessageWebPage","linkEntity","ApiMessageEntityTypes","textMatch","renderingWebPage","webPageWithoutPhoto","messageStub","SendAsMenu","MainButtonState","VOICE_RECORDING_FILENAME","chatUser","selectChatUser","REPLIES_USER_ID","messageWithActualBotKeyboard","selectNewestMessageWithBotKeyboardButtons","shouldSuggestStickers","baseEmojiKeywords","BASE_EMOJI_KEYWORD_LANG","botKeyboardMessageId","keyboardMessage","defaultSendAsId","anonymous","sendAsUser","editingMessage","canScheduleUntilOnline","selectUserStatus","wasOnline","withScheduledButton","shouldSchedule","botKeyboardPlaceholder","keyboardPlaceholder","stickersForEmoji","groupChatMembers","topInlineBotIds","isInlineBotLoading","chatBotCommands","botCommands","dropAreaState","onDropHide","clearDraft","setStickerSearchQuery","setGifSearchQuery","closePollModal","addRecentEmoji","sendInlineBotResult","loadSendAs","appendixRef","setHtml","htmlRef","useStateRef","lastMessageSendTimeSeconds","prevDropAreaState","isCalendarOpen","openCalendar","closeCalendar","scheduledMessageArgs","setScheduledMessageArgs","canShowSendAs","sendMessageAction","useSendMessageAction","shouldAnimateSendAsButtonRef","prevChatId","prevSendAsIds","setAttachments","isBotKeyboardOpen","openBotKeyboard","closeBotKeyboard","isBotCommandMenuOpen","openBotCommandMenu","closeBotCommandMenu","isAttachMenuOpen","openAttachMenu","closeAttachMenu","isSymbolMenuOpen","openSymbolMenu","closeSymbolMenu","isSendAsMenuOpen","openSendAsMenu","closeSendAsMenu","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isSymbolMenuLoaded","onSymbolMenuLoadingComplete","isHoverDisabled","disableHover","enableHover","startRecordingVoice","stopRecordingVoice","pauseRecordingVoice","activeVoiceRecording","currentRecordTime","recordButtonRef","mainButtonRef","startRecordTimeRef","setActiveVoiceRecording","setCurrentRecordTime","IS_SAFARI","IS_VOICE_RECORDING_SUPPORTED","voiceRecording","tickVolume","boxShadow","useVoiceRecording","SEND_MESSAGE_ACTION_INTERVAL","mainButtonState","Edit","Schedule","Send","Record","canShowCustomSendMenu","isMentionTooltipOpen","closeMentionTooltip","insertMention","mentionFilteredUsers","useMentionTooltip","isInlineBotTooltipOpen","inlineBotId","isInlineBotTooltipGallery","inlineBotSwitchPm","inlineBotResults","closeTooltip","closeInlineBotTooltip","inlineBotHelp","loadMore","loadMoreForInlineBot","queryInlineBot","resetInlineBot","markIsOpen","unmarkIsOpen","innerText","getPlainText","parseBotQuery","prevQuery","prevUsername","useInlineBotTooltip","isBotCommandTooltipOpen","close","closeBotCommandTooltip","filteredBotCommands","botTooltipCommands","setFilteredBotCommands","getFilteredCommands","nextFilteredBotCommands","prepareForRegExp","substr","useBotCommandTooltip","isCustomSendMenuOpen","canSendStickers","canSendGifs","canAttachMedia","canAttachPolls","canAttachEmbedLinks","getAllowedAttachmentOptions","isChatAdmin","slowMode","getChatSlowModeOptions","isStickerTooltipOpen","closeStickerTooltip","cleanHtml","trim","clearStickersForEmoji","IS_EMOJI_SUPPORTED","parseEmojiOnlyString","hasStickers","useStickerTooltip","isEmojiTooltipOpen","closeEmojiTooltip","filteredEmojis","insertEmoji","useEmojiTooltip","insertTextAndUpdateCursor","newHtml","selectionRange","isSelectionInsideInput","dispatchEvent","Event","bubbles","focusEditableElement","removeSymbol","execCommand","tempInput","contentEditable","textLength","createRange","setStart","setEnd","removeChild","deleteLastCharacterOutsideSelection","resetComposer","shouldPreserveInput","stopRecordingVoiceRef","handleEditComplete","editedMessage","editMessage","getTextWithEntitiesAsHtml","hasMessageMedia","useEditing","saveDraft","updateDraft","draftChatId","draftThreadId","currentHtml","runDebouncedForSaveDraft","DRAFT_DEBOUNCE","prevThreadId","prevHtml","handleBlur","useDraft","handlePaste","clipboardData","input","activeElement","EDITABLE_INPUT_MODAL_ID","pastedText","getData","substring","items","files","getFilesFromDataTransferItems","newAttachments","all","file","useClipboardPaste","handleFileSelect","handleAppendFiles","handleClearAttachment","handleSend","currentAttachments","record","maxLength","extraLength","textParams","nowSeconds","secondsSinceLastMessage","nextSendDateNotReached","nextSendDate","seconds","secondsRemaining","isSlowMode","handleActivateBotCommandMenu","handleActivateSymbolMenu","handleGifSelect","gif","handleInlineBotSelect","inlineResult","handleBotCommandSelect","handlePollSend","handleSilentSend","handleMessageSchedule","isWhenOnline","restArgs","getTime","handleMessageScheduleUntilOnline","handleCloseCalendar","handleSearchOpen","handleSymbolMenuOpen","handleSendAsMenuOpen","handleAllScheduledClick","mainButtonHandler","areVoiceMessagesNotAllowed","prevEditedMessage","renderedEditedMessage","scheduledDefaultDate","setSeconds","setMilliseconds","scheduledMaxDate","setFullYear","getFullYear","sendButtonAriaLabel","symbolMenuButtonClassName","onSend","DropAreaState","withQuick","onHide","onFileSelect","caption","onCaptionUpdate","onFileAppend","onClear","selectedSendAsId","onInsertUserName","filteredUsers","onSelectResult","withUsername","MessageInput","forcedPlaceholder","canAutoFocus","shouldSuppressFocus","shouldSuppressTextFormatter","onUpdate","onSuppressedFocus","formatVoiceRecordDuration","onStickerSelect","emojis","onEmojiSelect","onPollCreate","onGifSelect","onRemoveSymbol","onSearchOpen","onSilentSend","onScheduleSend","withTimePicker","maxAt","getDayStartAt","isFutureMode","secondButtonLabel","onSubmit","onSecondButtonClick","MobileSearch","MessageSelectToolbar","UnpinAllMessagesModal","PaymentModal","ReceiptModal","SeenByModal","emojiInteraction","EmojiInteractionAnimation","ReactorListModal","CLOSE_ANIMATION_DURATION","isImage","kind","isBlurred","isBackgroundBlurred","background","customBackground","patternColor","themes","isMobileSearchActive","isReceiptModalOpen","isSeenByModalOpen","isReactorListModalOpen","getCanPostInChat","isBotNotStarted","isPinnedMessageList","isScheduledMessageList","currentUserBannedRights","defaultBannedRights","hasPinnedOrAudioPlayer","loadUser","closePaymentModal","clearReceipt","setDropAreaState","isFabShown","setIsFabShown","isNotchShown","setIsNotchShown","isUnpinModalOpen","setIsUnpinModalOpen","renderingChatId","usePrevDuringAnimation","renderingThreadId","renderingMessageListType","renderingCanSubscribe","renderingCanStartBot","renderingCanRestartBot","renderingCanPost","renderingHasTools","renderingIsFabShown","renderingIsChannel","prevTransitionKey","handleOpenEnd","handleSlideStop","withAnimations","setIsReady","forceUpdate","useForceUpdate","willSwitchMessageList","propertyName","useIsReady","ANIMATION_LEVEL_MIN","visualViewport","documentElement","handleDragEnter","dataTransfer","shouldDrawQuick","handleHideDropArea","handleOpenUnpinModal","closeUnpinModal","handleUnpinAllMessages","handleTabletFocus","customBackgroundValue","settingValue","cacheApi","CUSTOM_BG_CACHE_NAME","Type","useCustomBackground","MASK_IMAGE_DISABLED","messagingDisabledClassName","messageSendingRestrictionReason","getMessageSendingRestrictionReason","composerHiddenScale","toolbarHiddenScale","composerTranslateX","toolbarTranslateX","unpinHiddenScale","toolbarForUnpinHiddenScale","sidePadding","messageListWidth","rightColumnWidth","getMessageListWidth","sendButtonWidth","composerWidth","toolbarWidth","calculateMiddleFooterTransforms","footerClassName","forceSyncOnIOs","createMessageHash","isMessagingDisabled","withMessageListBottomShift","onTransitionEnd","DARK_THEME_BG_COLOR","LIGHT_THEME_BG_COLOR","onDragEnter","onStop","onUnpin","HeaderContent","isProfile","isManagement","messageSearchQuery","stickerSearchQuery","selectCurrentStickerSearch","gifSearchQuery","selectCurrentGifSearch","canAddContact","getCanAddContact","canManage","isEditingInvite","isColumnOpen","isSearch","isStickerSearch","isGifSearch","isPollResults","isAddingChatMembers","profileState","managementScreen","shouldSkipAnimation","setLocalTextSearchQuery","searchTextMessagesLocal","toggleManagement","addContact","setEditingExportedInvite","deleteExportedChatInvite","backButtonRef","isDeleteDialogOpen","openDeleteDialog","closeDeleteDialog","handleEditInviteClick","handleDeleteInviteClick","handleMessageSearchQueryChange","handleStickerSearchQueryChange","handleGifSearchQueryChange","handleAddContact","setShouldSkipTransition","contentKey","ProfileState","Profile","SharedMedia","MemberList","Search","PollResults","StickerSearch","GifSearch","AddingMembers","ManageInitial","ManageChatPrivacyType","ManageDiscussion","ManageChannelSubscribers","ManageGroupPermissions","ManageChatAdministrators","ManageGroupRemovedUsers","ManageGroupUserPermissionsCreate","ManageGroupUserPermissions","ManageGroupRecentActions","ManageGroupAdminRights","ManageGroupNewAdminRights","ManageGroupMembers","ManageInvites","ManageEditInvite","ManageGroupAddAdmins","ManageReactions","ManageInviteInfo","ManageJoinRequests","renderingContentKey","renderHeaderContent","confirmIsDestructive","autoFocusSearch","isBackButton","buttonClassName","useInfiniteScrollForLoadableItems","currentResultType","handleLoadMore","itemIds","getMore","useInfiniteScroll","MEMBERS_SLICE","useInfiniteScrollForSharedMedia","forSharedMediaType","messageIdsRef","getMessageContentIds","runThrottledForScroll","isScrollingProgrammatically","TABS","buildInfiniteScrollItemSelector","resultType","mediaSearchType","isGroup","hasMembersTab","areMembersHidden","canViewMembers","canAddMembers","getHasAdminRight","canDeleteMembers","hasCommonChatsTab","resolvedUserId","isChatProtected","commonChatIds","onProfileStateChange","setLocalMediaSearchType","loadMoreMembers","loadCommonChats","searchMediaMessagesLocal","loadProfilePhotos","setNewChatMembersDialogState","setActiveTab","deletingUserId","setDeletingUserId","tabType","noProfileInfo","searchMessages","memberIds","sortUserIds","sortChatIds","memberViewportIds","getMoreMembers","noProfileInfoForMembers","mediaViewportIds","getMoreMedia","noProfileInfoForMedia","documentViewportIds","getMoreDocuments","noProfileInfoForDocuments","linkViewportIds","getMoreLinks","noProfileInfoForLinks","audioViewportIds","getMoreAudio","noProfileInfoForAudio","voiceViewportIds","getMoreVoices","noProfileInfoForVoices","commonChatViewportIds","getMoreCommonChats","noProfileInfoForCommonChats","useProfileViewportIds","prevTabType","tabsEl","prevProfileState","tabListEl","determineProfileState","useProfileState","applyTransitionFix","releaseTransitionFix","transitionElSelector","setMinHeight","transitionEl","minHeight","overflowY","scrollBarWidth","clientWidth","marginRight","useTransitionFixes","cacheBuster","resetCacheBuster","setCacheBuster","useCacheBuster","handleTransitionStop","handleNewMemberDialogOpen","NewChatMembersProgress","handleSelectMedia","handlePlayAudio","handleMemberClick","handleMessageFocus","handleDeleteMembersModalClose","renderingDelay","isFirstTab","SLIDE_TRANSITION_DURATION","canRenderContent","noSpinner","NothingFound","Media","withDate","smaller","onDateClick","WebLink","onMessageClick","getSenderName","ListItem","teactOrderKey","contextActions","memberId","handler","forceShowSelf","InfiniteScroll","itemSelector","sensitiveArea","PROFILE_SENSITIVE_AREA","preloadBackwards","noScrollRestoreOnTop","noFastList","onLoadMore","ProfileInfo","ChatExtra","renderProfileInfo","shouldRestoreHeight","onStart","big","FloatingActionButton","DeleteMemberModal","RightSearch","Management","localContactIds","isSearching","onNextStep","setUserSearchQuery","selectedMemberIds","setSelectedMemberIds","noPickerScrollRestore","member","handleFilterChange","displayedIds","filteredContactIds","filterUsersByName","canBeInvitedToGroup","handleNextStep","Picker","selectedIds","filterValue","filterPlaceholder","searchInputId","onSelectedIdsChange","onFilterChange","noScrollRestore","MAIN_SCREENS_COUNT","RightColumnContent","MANAGEMENT_SCREENS_COUNT","blurSearchInput","areActiveChatsLoaded","selectAreActiveChatsLoaded","nextManagementScreen","selectRightColumnContentKey","isChatSelected","toggleChatInfo","closePollResults","addChatMembers","setOpenedInviteInfo","setProfileState","setManagementScreen","selectedChatMemberId","setSelectedChatMemberId","isPromotedByCurrentUser","setIsPromotedByCurrentUser","isScrolledDown","isOverlaying","shouldScrollUp","handleSelectChatMember","isPromoted","handleAppendingChatMembers","onChatMemberSelect","MediaViewer","download","click","startedDownloads","downloadHash","getMessageContentFilename","Notifications","Dialogs","ForwardPicker","SafeLinkModal","HistoryCalendar","GroupCall","ActiveCallHeader","CallFallbackConfirm","notificationInterval","DEBUG_isLogged","updateIcon","asUnread","updatePageTitle","nextTitle","wasTimeFormatSetManually","authState","isMediaViewerOpen","selectIsMediaViewerOpen","isForwardModalOpen","selectIsForwardModalOpen","hasNotifications","hasDialogs","isHistoryCalendarOpen","isServiceChatReady","isCallFallbackConfirmOpen","isFallbackConfirmOpen","sync","loadNotificationSettings","loadNotificationExceptions","updateIsOnline","loadTopInlineBots","loadEmojiKeywords","loadCountryList","loadAvailableReactions","loadAddedStickers","ensureTimeFormat","openStickerSetShortName","checkVersionNotification","loadAppConfig","LOCATION_HASH","processDeepLink","decodeURIComponent","middleColumnTransitionClassNames","rightColumnTransitionClassNames","prevIsLeftColumnShown","dispatchHeavyAnimationEnd","waitForTransitionEnd","prevIsRightColumnShown","initialUnread","setInterval","INACTIVE_MARKER","newUnread","PAGE_TITLE","handleStickerSetModalClose","usePreventPinchZoomGesture","onDrop","onDragOver","initApi"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/830.75c3f8b65582d31f48aa.js b/dist/830.75c3f8b65582d31f48aa.js new file mode 100644 index 000000000..38443f57d --- /dev/null +++ b/dist/830.75c3f8b65582d31f48aa.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[830],{7799:(e,t,n)=>{n.d(t,{Z:()=>u});var o=n(4050),r=n(9118),c=n(6752),s=n(8674),a=n(5332);let l,i;async function d(){return l||(l=n.e(941).then(n.bind(n,7941)),i=(await l).default),l}setTimeout(d,3e3);const u=(0,o.X$)((e=>{let{className:t,id:n,animationData:l,play:u,playSegment:m,speed:p,noLoop:f,size:g,quality:h,isLowPriority:v,color:Z,forceOnHeavyAnimation:w,onLoad:b,onEnded:y}=e;const[C,E]=(0,o.eJ)(),x=(0,o.sO)(null),k=(0,o.sO)(!1),P=(0,o.sO)(!1),I=(0,o.sO)(!0),T=(0,o.sO)();T.current=u;const A=(0,o.sO)();A.current=m,(0,o.d4)((()=>{if(C||!l)return;const e=()=>{if(!x.current)return;const e=new i(n,x.current,l,{noLoop:f,size:g,quality:h,isLowPriority:v},b,Z,y);p&&e.setSpeed(p),E(e)};i?e():d().then((()=>{(0,r.T2)((()=>{x.current&&e()}))}))}),[Z,C,l,n,v,f,b,h,g,p,y]),(0,o.d4)((()=>{C&&C.setColor(Z)}),[Z,C]),(0,o.d4)((()=>()=>{C&&C.destroy()}),[C]);const N=(0,o.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];C&&(T.current||A.current)&&(A.current?C.playSegment(A.current):e?C.goToAndPlay(0):C.play())}),[C]),S=(0,o.I4)((()=>{C&&C.pause()}),[C]),L=(0,o.I4)((()=>{P.current=!0,C&&(k.current||(k.current=C.isPlaying()),S())}),[C,S]),O=(0,o.I4)((()=>{k.current&&N(),k.current=!1,P.current=!1}),[N]),B=(0,o.I4)((()=>{(0,r.T2)(O)}),[O]);(0,o.d4)((()=>{C&&(u||m?P.current?k.current=!0:N(f):P.current?k.current=!1:S())}),[C,u,m,f,N,S]),(0,o.d4)((()=>{C&&(I.current?I.current=!1:l&&(C.changeData(l),N()))}),[N,C,l]),(0,s.ZP)(L,O,w),(0,a.Z)(L,B);const F=(0,c.Z)("AnimatedSticker",t),R=g?`width: ${g}px; height: ${g}px;`:void 0;return o.ZP.createElement("div",{ref:x,className:F,style:R})}))},172:(e,t,n)=>{n.d(t,{Z:()=>p});var o=n(4050),r=n(6137),c=n(3716),s=n(8415),a=n(2155),l=n(6752),i=n(2340),d=n(6202),u=n(1212),m=n(9107);const p=(0,o.X$)((e=>{let{className:t,size:n="large",chat:p,user:f,photo:g,userStatus:h,text:v,isSavedMessages:Z,lastSyncTime:w,onClick:b}=e;const y=f&&(0,s.NB)(f),C=f&&(0,s.pK)(f.id);let E;Z||y||(f?E=(0,s.RT)(f):p?E=(0,s.RT)(p):g&&(E=`photo${g.id}?size=m`));const x=(0,d.Z)(E,!1,r.IU.BlobUrl,w),k=Boolean(x),{transitionClassNames:P}=(0,u.Z)(k,void 0,k,"slow"),I=(0,m.Z)();let T="";if(Z)T=o.ZP.createElement("i",{className:"icon-avatar-saved-messages"});else if(y)T=o.ZP.createElement("i",{className:"icon-avatar-deleted-account"});else if(C)T=o.ZP.createElement("i",{className:"icon-reply-filled"});else if(x)T=o.ZP.createElement("img",{src:x,className:(0,l.Z)("avatar-media",P),alt:"",decoding:"async"});else if(f){const e=(0,s.Js)(f);T=e?(0,a.Xv)(e,2):void 0}else if(p){const e=(0,s.U)(I,p);T=e&&(0,a.Xv)(e,(0,s.YC)(p.id)?2:1)}else v&&(T=(0,a.Xv)(v,2));const A=!Z&&f&&h&&(0,s.kM)(f,h),N=(0,l.Z)(`Avatar size-${n}`,t,`color-bg-${(0,s.Rs)(f||p)}`,Z&&"saved-messages",y&&"deleted-account",C&&"replies-bot-account",A&&"online",b&&"interactive",!Z&&!x&&"no-photo"),S=Boolean(Z||x),L=(0,o.I4)((e=>{b&&b(e,S)}),[b,S]),O=(f||p)&&(f||p).id;return o.ZP.createElement("div",{className:N,onClick:L,"data-test-sender-id":c.Cg?O:void 0},"string"==typeof T?(0,i.Z)(T,["jumbo"===n?"hq_emoji":"emoji"]):T)}))},7324:(e,t,n)=>{n.d(t,{x:()=>c,Z:()=>s});var o=n(6137),r=n(647);const c={MonkeyIdle:n(8760),MonkeyTracking:n(6917),MonkeyClose:n(6257),MonkeyPeek:n(7785),FoldersAll:n(9356),FoldersNew:n(5485),DiscussionGroups:n(6978),CameraFlip:n(5665),HandFilled:n(2456),HandOutline:n(5667),Speaker:n(8763),VoiceAllowTalk:n(401),VoiceMini:n(5106),VoiceMuted:n(487),VoiceOutlined:n(5740),Peach:n(3677),Eggplant:n(5435),Cumshot:n(1879),JoinRequest:n(5095),Invite:n(7879)};function s(e){const t=c[e].replace(window.location.origin,"");return r.he(`file${t}`,o.IU.Lottie)}},7551:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(4050),r=n(9107),c=n(2313),s=n(3103),a=n(231);const l=(0,o.X$)((e=>{let{isOpen:t,onClose:n,onCloseAnimationEnd:l,title:i,header:d,text:u,textParts:m,confirmLabel:p="Confirm",confirmHandler:f,confirmIsDestructive:g,isButtonsInOneRow:h,children:v}=e;const Z=(0,r.Z)(),w=(0,o.sO)(null),b=(0,o.I4)((e=>{-1===e&&f()}),[f]),y=(0,c.Z)(w,t,b,".Button");return o.ZP.createElement(s.Z,{className:"confirm",title:i,header:d,isOpen:t,onClose:n,onCloseAnimationEnd:l},u&&u.split("\\n").map((e=>o.ZP.createElement("p",null,e))),m||v,o.ZP.createElement("div",{className:h?"dialog-buttons mt-2":"",ref:w,onKeyDown:y},o.ZP.createElement(a.Z,{className:"confirm-dialog-button",isText:!0,onClick:f,color:g?"danger":"primary"},p),o.ZP.createElement(a.Z,{className:"confirm-dialog-button",isText:!0,onClick:n},Z("Cancel"))))}))},1273:(e,t,n)=>{n.d(t,{Z:()=>u});var o=n(1713),r=n(4050),c=n(9118),s=n(7675),a=n(7361);const l=".ListItem",i=20,d=800,u=e=>{let{ref:t,className:n,onLoadMore:u,onScroll:m,onKeyDown:p,items:f,itemSelector:g=l,preloadBackwards:h=i,sensitiveArea:v=d,withAbsolutePositioning:Z,maxHeight:w,noScrollRestore:b=!1,noScrollRestoreOnTop:y=!1,noFastList:C,cacheBuster:E,children:x}=e,k=(0,r.sO)(null);t&&(k=t);const P=(0,r.sO)({}),[I,T]=(0,r.Ye)((()=>u?[(0,c.Ds)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u({direction:o.Uq.Backwards,noScroll:e})}),1e3,!0,!1),(0,c.Ds)((()=>{u({direction:o.Uq.Forwards})}),1e3,!0,!1)]:[]),[u,f]);(0,r.d4)((()=>{if(!I)return;if(h>0&&(!f||f.length{const e=k.current,t=P.current;let n;if(t.listItemElements=e.querySelectorAll(g),t.currentAnchor&&Array.from(t.listItemElements).includes(t.currentAnchor)){const{scrollTop:o}=e;n=o+(t.currentAnchor.getBoundingClientRect().top-t.currentAnchorTop)}else{const e=t.listItemElements[0];e&&(t.currentAnchor=e,t.currentAnchorTop=e.getBoundingClientRect().top)}Z||b||y&&0===e.scrollTop||((0,s.Z)(e,n),t.isScrollTopJustUpdated=!0)}),[f,g,b,y,E,Z]);const A=(0,r.I4)((e=>{if(T&&I){const{isScrollTopJustUpdated:e,currentAnchor:t,currentAnchorTop:n}=P.current,o=P.current.listItemElements;if(e)return void(P.current.isScrollTopJustUpdated=!1);const r=o.length,c=k.current,{scrollTop:s,scrollHeight:a,offsetHeight:l}=c,i=s<=(r?o[0].offsetTop:0)+v,d=(r?o[r-1].offsetTop+o[r-1].offsetHeight:a)-(s+l)<=v;let u=!1;if(i){const e=o[0];if(e){const o=e.getBoundingClientRect().top,r=null!=t&&t.offsetParent&&t!==e?t.getBoundingClientRect().top:o;t&&void 0!==n&&r>n&&(P.current.currentAnchor=e,P.current.currentAnchorTop=o,u=!0,T())}}if(d){const e=o[r-1];if(e){const o=e.getBoundingClientRect().top,r=null!=t&&t.offsetParent&&t!==e?t.getBoundingClientRect().top:o;t&&void 0!==n&&r{n.d(t,{Z:()=>p});var o=n(4050),r=n(517),c=n(6752),s=n(8674),a=n(1212),l=n(274),i=n(9107),d=n(6590),u=n(231),m=n(2898);const p=e=>{let{dialogRef:t,title:n,className:p,isOpen:f,header:g,hasCloseButton:h,noBackdrop:v,children:Z,onClose:w,onCloseAnimationEnd:b,onEnter:y,shouldSkipHistoryAnimations:C}=e;const{shouldRender:E,transitionClassNames:x}=(0,a.Z)(f,b,C,void 0,C),k=(0,o.sO)(null);(0,o.d4)((()=>f?(0,r.Z)({onEsc:w,onEnter:y}):void 0),[f,w,y]),(0,o.d4)((()=>f&&k.current?function(e){function t(t){if("Tab"!==t.key)return;t.preventDefault(),t.stopPropagation();const n=Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));if(!n.length)return;const o=n.findIndex((e=>e.isSameNode(document.activeElement)));let r=0;o>=0&&(r=t.shiftKey?o>0?o-1:n.length-1:o{document.removeEventListener("keydown",t,!1)}}(k.current):void 0),[f]);const{forceClose:P}=(0,d.ZP)(f,w);(0,o.d4)((()=>()=>{f&&P()}),[]),(0,l.Z)((e=>{let[t]=e;return document.body.classList.toggle("has-open-dialog",f),(f||!f&&void 0!==t)&&(0,s.YW)(200),()=>{document.body.classList.remove("has-open-dialog")}}),[f]);const I=(0,i.Z)();if(!E)return;const T=(0,c.Z)("Modal",p,x,v&&"transparent-backdrop");return o.ZP.createElement(m.Z,null,o.ZP.createElement("div",{ref:k,className:T,tabIndex:-1,role:"dialog"},o.ZP.createElement("div",{className:"modal-container"},o.ZP.createElement("div",{className:"modal-backdrop",onClick:w}),o.ZP.createElement("div",{className:"modal-dialog",ref:t},g||(n?o.ZP.createElement("div",{className:"modal-header"},h&&o.ZP.createElement(u.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:I("Close"),onClick:w},o.ZP.createElement("i",{className:"icon-close"})),o.ZP.createElement("div",{className:"modal-title"},n)):void 0),o.ZP.createElement("div",{className:"modal-content custom-scroll"},Z)))))}},2898:(e,t,n)=>{n.d(t,{Z:()=>c});var o=n(4050),r=n(2916);const c=e=>{let{containerId:t,className:n,children:c}=e;const s=(0,o.sO)();return s.current||(s.current=document.createElement("div")),(0,o.bt)((()=>{const e=document.querySelector(t||"#portals");if(!e)return;const o=s.current;return n&&o.classList.add(n),e.appendChild(o),()=>{r.Z.render(void 0,o),e.removeChild(o)}}),[n,t]),r.Z.render(c,s.current)}},5332:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(4050);function r(e,t){(0,o.d4)((()=>(e&&!document.hasFocus()&&e(),e&&window.addEventListener("blur",e),t&&window.addEventListener("focus",t),()=>{t&&window.removeEventListener("focus",t),e&&window.removeEventListener("blur",e)})),[e,t])}},8360:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(7204);function r(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=(0,o.Z)(e,t);return n||null!=e?e:r}},7407:(e,t,n)=>{n.d(t,{Z:()=>i});var o=n(4050),r=n(1713),c=n(782),s=n(5326),a=n(7204);function l(e,t,n,o){const{length:c}=e,s=o?e.indexOf(o):0,a=t===r.Uq.Forwards?s:s+1||c,l=Math.max(0,a-n),i=a+n-1,d=e.slice(Math.max(0,l),i+1);let u,m;switch(t){case r.Uq.Forwards:u=a>0,m=l>=0;break;case r.Uq.Backwards:u=a2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:30;const d=(0,o.sO)(),u=(0,o.sO)((()=>{if(!t||d.current)return;const{newViewportIds:e}=l(t,r.Uq.Forwards,i,t[0]);return e})()),m=(0,s.Z)();n&&(d.current={});const p=(0,a.Z)(t),f=(0,a.Z)(n);if(t&&!n&&(t!==p||n!==f)){const{offsetId:e=t[0],direction:n=r.Uq.Forwards}=d.current||{},{newViewportIds:o}=l(t,n,i,e);u.current&&(0,c.et)(u.current,o)||(u.current=o)}const g=(0,o.I4)((n=>{let{direction:o,noScroll:s}=n;const a=u.current,p=a?o===r.Uq.Backwards?a[a.length-1]:a[0]:void 0;if(!t)return void(e&&e({offsetId:p}));s||(d.current={...d.current,direction:o,offsetId:p});const{newViewportIds:f,areSomeLocal:g,areAllLocal:h}=l(t,o,i,p);!g||a&&(0,c.et)(a,f)||(u.current=f,m()),!h&&e&&e({offsetId:p})}),[t,i,e,m]);return n?[t]:[u.current,g]}},6202:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(4050),r=n(6137),c=n(647),s=n(5326);const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r.IU.BlobUrl,a=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;const i=e?c.UV(e):void 0,d=(0,s.Z)();return(0,o.d4)((()=>{if(!t&&e&&!i){const t=Date.now();c.he(e,n).then((()=>{const e=Date.now()-t;!l||e>=l?d():setTimeout(d,l-e)}))}}),[t,e,i,n,a,d,l]),i}},4319:(e,t,n)=>{n.d(t,{yl:()=>r,TE:()=>s,VP:()=>a});var o=n(3716);const r=navigator.clipboard&&window.ClipboardItem,c=document.createElement("textarea");c.setAttribute("readonly",""),c.tabIndex=-1,c.className="visually-hidden";const s=e=>{c.value=e,document.body.appendChild(c);const t=document.getSelection();if(t){const e=t.rangeCount>0&&t.getRangeAt(0);c.select(),document.execCommand("copy"),e&&(t.removeAllRanges(),t.addRange(e))}document.body.removeChild(c)},a=e=>{if(!e)return;const t=document.createElement("canvas"),n=t.getContext("2d"),o=new Image;o.onload=e=>{if(n&&e.currentTarget){const o=e.currentTarget;t.width=o.width,t.height=o.height,n.drawImage(o,0,0,o.width,o.height),t.toBlob(l,"image/png",1)}},o.src=e};async function l(e){if(e&&r)try{var t,n;await(null===(t=(n=navigator.clipboard).write)||void 0===t?void 0:t.call(n,[new ClipboardItem({[e.type]:e})]))}catch(e){o.eM&&console.error(e)}}},2972:(e,t,n)=>{function o(e){e.offsetWidth}n.d(t,{Z:()=>o})},7675:(e,t,n)=>{n.d(t,{z:()=>c,Z:()=>s});var o=n(7361),r=n(2972);function c(e){e.style.display="none",(0,r.Z)(e),e.style.display=""}const s=(e,t)=>{o.cj&&(e.style.overflow="hidden"),void 0!==t&&(e.scrollTop=t),o.cj&&(e.style.overflow="")}},4753:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(3716);const r=e=>{e.play().catch((t=>{o.eM&&console.warn(t,e)}))}},1879:(e,t,n)=>{e.exports=n.p+"Cumshot.7a17984a6b80787dab34..tgs"},5435:(e,t,n)=>{e.exports=n.p+"Eggplant.7693d877087b802d04be..tgs"},3677:(e,t,n)=>{e.exports=n.p+"Peach.a289b2c54c563f11208f..tgs"},5665:(e,t,n)=>{e.exports=n.p+"CameraFlip.1a9fe44cf01fcb22347d..tgs"},2456:(e,t,n)=>{e.exports=n.p+"HandFilled.f87939d160f1dc288586..tgs"},5667:(e,t,n)=>{e.exports=n.p+"HandOutline.f9831751ba60df30c484..tgs"},8763:(e,t,n)=>{e.exports=n.p+"Speaker.04bb3743412b41ff83c5..tgs"},401:(e,t,n)=>{e.exports=n.p+"VoiceAllowTalk.a9cc7c39ec438973ddc9..tgs"},5106:(e,t,n)=>{e.exports=n.p+"VoiceMini.bf00ffdf69625c579569..tgs"},487:(e,t,n)=>{e.exports=n.p+"VoiceMuted.a4b4ec6bfd7c6c5fb275..tgs"},5740:(e,t,n)=>{e.exports=n.p+"VoiceOutlined.91b394ab3562cdfad6bc..tgs"},7879:(e,t,n)=>{e.exports=n.p+"Invite.4502ec3aa4249d6e6723..tgs"},5095:(e,t,n)=>{e.exports=n.p+"Requests.af9f19772695a8898810..tgs"},6257:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyClose.604c4c833d322b7e6c3e..tgs"},8760:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyIdle.dea4a492c144df84ddab..tgs"},7785:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyPeek.1905436b042520363d7e..tgs"},6917:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyTracking.eb5a7a6f166fb7589c12..tgs"},6978:(e,t,n)=>{e.exports=n.p+"DiscussionGroupsDucks.9ea453d1be9d1b0ee77a..tgs"},9356:(e,t,n)=>{e.exports=n.p+"FoldersAll.3f9f9e243d19f0fbf9aa..tgs"},5485:(e,t,n)=>{e.exports=n.p+"FoldersNew.9a40d71c0c8be70f5bd1..tgs"}}]); +//# sourceMappingURL=830.75c3f8b65582d31f48aa.js.map \ No newline at end of file diff --git a/dist/830.75c3f8b65582d31f48aa.js.map b/dist/830.75c3f8b65582d31f48aa.js.map new file mode 100644 index 000000000..809eae24b --- /dev/null +++ b/dist/830.75c3f8b65582d31f48aa.js.map @@ -0,0 +1 @@ +{"version":3,"file":"830.75c3f8b65582d31f48aa.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/AnimatedSticker.tsx","webpack://telegram-t/./src/components/common/Avatar.tsx","webpack://telegram-t/./src/components/common/helpers/animatedAssets.ts","webpack://telegram-t/./src/components/ui/ConfirmDialog.tsx","webpack://telegram-t/./src/components/ui/InfiniteScroll.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts","webpack://telegram-t/./src/hooks/useBackgroundMode.ts","webpack://telegram-t/./src/hooks/useCurrentOrPrev.ts","webpack://telegram-t/./src/hooks/useInfiniteScroll.ts","webpack://telegram-t/./src/hooks/useMedia.ts","webpack://telegram-t/./src/util/clipboard.ts","webpack://telegram-t/./src/util/forceReflow.ts","webpack://telegram-t/./src/util/resetScroll.ts","webpack://telegram-t/./src/util/safePlay.ts"],"sourcesContent":["import React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useHeavyAnimationCheck from '../../hooks/useHeavyAnimationCheck';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\n\ntype OwnProps = {\n className?: string;\n id: string;\n animationData?: string;\n play?: boolean | string;\n playSegment?: [number, number];\n speed?: number;\n noLoop?: boolean;\n size: number;\n quality?: number;\n isLowPriority?: boolean;\n onLoad?: NoneToVoidFunction;\n forceOnHeavyAnimation?: boolean;\n color?: [number, number, number];\n onEnded?: NoneToVoidFunction;\n};\n\ntype RLottieClass = typeof import('../../lib/rlottie/RLottie').default;\ntype RLottieInstance = import('../../lib/rlottie/RLottie').default;\nlet lottiePromise: Promise;\nlet RLottie: RLottieClass;\n\n// Time for the main interface to completely load\nconst LOTTIE_LOAD_DELAY = 3000;\n\nasync function ensureLottie() {\n if (!lottiePromise) {\n lottiePromise = import('../../lib/rlottie/RLottie') as unknown as Promise;\n RLottie = (await lottiePromise as any).default;\n }\n\n return lottiePromise;\n}\n\nsetTimeout(ensureLottie, LOTTIE_LOAD_DELAY);\n\nconst AnimatedSticker: FC = ({\n className,\n id,\n animationData,\n play,\n playSegment,\n speed,\n noLoop,\n size,\n quality,\n isLowPriority,\n color,\n forceOnHeavyAnimation,\n onLoad,\n onEnded,\n}) => {\n const [animation, setAnimation] = useState();\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n const wasPlaying = useRef(false);\n const isFrozen = useRef(false);\n const isFirstRender = useRef(true);\n\n const playRef = useRef();\n playRef.current = play;\n const playSegmentRef = useRef<[number, number]>();\n playSegmentRef.current = playSegment;\n\n useEffect(() => {\n if (animation || !animationData) {\n return;\n }\n\n const exec = () => {\n if (!container.current) {\n return;\n }\n\n const newAnimation = new RLottie(\n id,\n container.current,\n animationData,\n {\n noLoop,\n size,\n quality,\n isLowPriority,\n },\n onLoad,\n color,\n onEnded,\n );\n\n if (speed) {\n newAnimation.setSpeed(speed);\n }\n\n setAnimation(newAnimation);\n };\n\n if (RLottie) {\n exec();\n } else {\n ensureLottie().then(() => {\n fastRaf(() => {\n if (container.current) {\n exec();\n }\n });\n });\n }\n }, [color, animation, animationData, id, isLowPriority, noLoop, onLoad, quality, size, speed, onEnded]);\n\n useEffect(() => {\n if (!animation) return;\n\n animation.setColor(color);\n }, [color, animation]);\n\n useEffect(() => {\n return () => {\n if (animation) {\n animation.destroy();\n }\n };\n }, [animation]);\n\n const playAnimation = useCallback((shouldRestart = false) => {\n if (animation && (playRef.current || playSegmentRef.current)) {\n if (playSegmentRef.current) {\n animation.playSegment(playSegmentRef.current);\n } else if (shouldRestart) {\n animation.goToAndPlay(0);\n } else {\n animation.play();\n }\n }\n }, [animation]);\n\n const pauseAnimation = useCallback(() => {\n if (!animation) {\n return;\n }\n\n animation.pause();\n }, [animation]);\n\n const freezeAnimation = useCallback(() => {\n isFrozen.current = true;\n\n if (!animation) {\n return;\n }\n\n if (!wasPlaying.current) {\n wasPlaying.current = animation.isPlaying();\n }\n\n pauseAnimation();\n }, [animation, pauseAnimation]);\n\n const unfreezeAnimation = useCallback(() => {\n if (wasPlaying.current) {\n playAnimation();\n }\n\n wasPlaying.current = false;\n isFrozen.current = false;\n }, [playAnimation]);\n\n const unfreezeAnimationOnRaf = useCallback(() => {\n fastRaf(unfreezeAnimation);\n }, [unfreezeAnimation]);\n\n useEffect(() => {\n if (!animation) {\n return;\n }\n\n if (play || playSegment) {\n if (isFrozen.current) {\n wasPlaying.current = true;\n } else {\n playAnimation(noLoop);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isFrozen.current) {\n wasPlaying.current = false;\n } else {\n pauseAnimation();\n }\n }\n }, [animation, play, playSegment, noLoop, playAnimation, pauseAnimation]);\n\n useEffect(() => {\n if (animation) {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else if (animationData) {\n animation.changeData(animationData);\n playAnimation();\n }\n }\n }, [playAnimation, animation, animationData]);\n\n useHeavyAnimationCheck(freezeAnimation, unfreezeAnimation, forceOnHeavyAnimation);\n // Pausing frame may not happen in background\n // so we need to make sure it happens right after focusing,\n // then we can play again.\n useBackgroundMode(freezeAnimation, unfreezeAnimationOnRaf);\n\n const fullClassName = buildClassName('AnimatedSticker', className);\n\n const style = size ? `width: ${size}px; height: ${size}px;` : undefined;\n\n return (\n \n );\n};\n\nexport default memo(AnimatedSticker);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser, ApiUserStatus,\n} from '../../api/types';\n\nimport { IS_TEST } from '../../config';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getUserColorKey,\n getUserFullName,\n isUserId,\n isChatWithRepliesBot,\n isDeletedUser,\n isUserOnline,\n} from '../../modules/helpers';\nimport { getFirstLetters } from '../../util/textFormat';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from './helpers/renderText';\nimport useMedia from '../../hooks/useMedia';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport './Avatar.scss';\n\ntype OwnProps = {\n className?: string;\n size?: 'micro' | 'tiny' | 'small' | 'medium' | 'large' | 'jumbo';\n chat?: ApiChat;\n user?: ApiUser;\n photo?: ApiPhoto;\n userStatus?: ApiUserStatus;\n text?: string;\n isSavedMessages?: boolean;\n lastSyncTime?: number;\n onClick?: (e: ReactMouseEvent, hasPhoto: boolean) => void;\n};\n\nconst Avatar: FC = ({\n className,\n size = 'large',\n chat,\n user,\n photo,\n userStatus,\n text,\n isSavedMessages,\n lastSyncTime,\n onClick,\n}) => {\n const isDeleted = user && isDeletedUser(user);\n const isReplies = user && isChatWithRepliesBot(user.id);\n let imageHash: string | undefined;\n\n if (!isSavedMessages && !isDeleted) {\n if (user) {\n imageHash = getChatAvatarHash(user);\n } else if (chat) {\n imageHash = getChatAvatarHash(chat);\n } else if (photo) {\n imageHash = `photo${photo.id}?size=m`;\n }\n }\n\n const blobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const hasBlobUrl = Boolean(blobUrl);\n const { transitionClassNames } = useShowTransition(hasBlobUrl, undefined, hasBlobUrl, 'slow');\n\n const lang = useLang();\n\n let content: string | undefined = '';\n\n if (isSavedMessages) {\n content = ;\n } else if (isDeleted) {\n content = ;\n } else if (isReplies) {\n content = ;\n } else if (blobUrl) {\n content = (\n \"\"\n );\n } else if (user) {\n const userFullName = getUserFullName(user);\n content = userFullName ? getFirstLetters(userFullName, 2) : undefined;\n } else if (chat) {\n const title = getChatTitle(lang, chat);\n content = title && getFirstLetters(title, isUserId(chat.id) ? 2 : 1);\n } else if (text) {\n content = getFirstLetters(text, 2);\n }\n\n const isOnline = !isSavedMessages && user && userStatus && isUserOnline(user, userStatus);\n const fullClassName = buildClassName(\n `Avatar size-${size}`,\n className,\n `color-bg-${getUserColorKey(user || chat)}`,\n isSavedMessages && 'saved-messages',\n isDeleted && 'deleted-account',\n isReplies && 'replies-bot-account',\n isOnline && 'online',\n onClick && 'interactive',\n (!isSavedMessages && !blobUrl) && 'no-photo',\n );\n\n const hasImage = Boolean(isSavedMessages || blobUrl);\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (onClick) {\n onClick(e, hasImage);\n }\n }, [onClick, hasImage]);\n\n const senderId = (user || chat) && (user || chat)!.id;\n\n return (\n
\n {typeof content === 'string' ? renderText(content, [size === 'jumbo' ? 'hq_emoji' : 'emoji']) : content}\n
\n );\n};\n\nexport default memo(Avatar);\n","import { ApiMediaFormat } from '../../../api/types';\n\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nimport MonkeyIdle from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyIdle.tgs';\nimport MonkeyTracking from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyTracking.tgs';\nimport MonkeyClose from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyClose.tgs';\nimport MonkeyPeek from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyPeek.tgs';\n\nimport FoldersAll from '../../../assets/tgs/settings/FoldersAll.tgs';\nimport FoldersNew from '../../../assets/tgs/settings/FoldersNew.tgs';\nimport DiscussionGroups from '../../../assets/tgs/settings/DiscussionGroupsDucks.tgs';\n\nimport CameraFlip from '../../../assets/tgs/calls/CameraFlip.tgs';\nimport HandFilled from '../../../assets/tgs/calls/HandFilled.tgs';\nimport HandOutline from '../../../assets/tgs/calls/HandOutline.tgs';\nimport Speaker from '../../../assets/tgs/calls/Speaker.tgs';\nimport VoiceAllowTalk from '../../../assets/tgs/calls/VoiceAllowTalk.tgs';\nimport VoiceMini from '../../../assets/tgs/calls/VoiceMini.tgs';\nimport VoiceMuted from '../../../assets/tgs/calls/VoiceMuted.tgs';\nimport VoiceOutlined from '../../../assets/tgs/calls/VoiceOutlined.tgs';\n\nimport Peach from '../../../assets/tgs/animatedEmojis/Peach.tgs';\nimport Eggplant from '../../../assets/tgs/animatedEmojis/Eggplant.tgs';\nimport Cumshot from '../../../assets/tgs/animatedEmojis/Cumshot.tgs';\n\nimport JoinRequest from '../../../assets/tgs/invites/Requests.tgs';\nimport Invite from '../../../assets/tgs/invites/Invite.tgs';\n\nexport const ANIMATED_STICKERS_PATHS = {\n MonkeyIdle,\n MonkeyTracking,\n MonkeyClose,\n MonkeyPeek,\n FoldersAll,\n FoldersNew,\n DiscussionGroups,\n CameraFlip,\n HandFilled,\n HandOutline,\n Speaker,\n VoiceAllowTalk,\n VoiceMini,\n VoiceMuted,\n VoiceOutlined,\n Peach,\n Eggplant,\n Cumshot,\n JoinRequest,\n Invite,\n};\n\nexport default function getAnimationData(name: keyof typeof ANIMATED_STICKERS_PATHS) {\n const path = ANIMATED_STICKERS_PATHS[name].replace(window.location.origin, '');\n\n return mediaLoader.fetch(`file${path}`, ApiMediaFormat.Lottie);\n}\n","import React, { FC, memo, useCallback, useRef } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\n\nimport Modal from './Modal';\nimport Button from './Button';\n\ntype OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n title?: string;\n header?: FC;\n textParts?: TextPart[];\n text?: string;\n confirmLabel?: string;\n confirmHandler: () => void;\n confirmIsDestructive?: boolean;\n isButtonsInOneRow?: boolean;\n children?: any;\n};\n\nconst ConfirmDialog: FC = ({\n isOpen,\n onClose,\n onCloseAnimationEnd,\n title,\n header,\n text,\n textParts,\n confirmLabel = 'Confirm',\n confirmHandler,\n confirmIsDestructive,\n isButtonsInOneRow,\n children,\n}) => {\n const lang = useLang();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const handleSelectWithEnter = useCallback((index: number) => {\n if (index === -1) confirmHandler();\n }, [confirmHandler]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, handleSelectWithEnter, '.Button');\n\n return (\n \n {text && text.split('\\\\n').map((textPart) => (\n

{textPart}

\n ))}\n {textParts || children}\n
\n \n {confirmLabel}\n \n \n
\n \n );\n};\n\nexport default memo(ConfirmDialog);\n","import { RefObject, UIEvent } from 'react';\nimport { LoadMoreDirection } from '../../types';\n\nimport React, {\n FC, useCallback, useEffect, useLayoutEffect, useMemo, useRef,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport resetScroll from '../../util/resetScroll';\nimport { IS_ANDROID } from '../../util/environment';\n\ntype OwnProps = {\n ref?: RefObject;\n className?: string;\n onLoadMore?: ({ direction }: { direction: LoadMoreDirection; noScroll?: boolean }) => void;\n onScroll?: (e: UIEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n items?: any[];\n itemSelector?: string;\n preloadBackwards?: number;\n sensitiveArea?: number;\n withAbsolutePositioning?: boolean;\n maxHeight?: number;\n noScrollRestore?: boolean;\n noScrollRestoreOnTop?: boolean;\n noFastList?: boolean;\n cacheBuster?: any;\n children: any;\n};\n\nconst DEFAULT_LIST_SELECTOR = '.ListItem';\nconst DEFAULT_PRELOAD_BACKWARDS = 20;\nconst DEFAULT_SENSITIVE_AREA = 800;\n\nconst InfiniteScroll: FC = ({\n ref,\n className,\n onLoadMore,\n onScroll,\n onKeyDown,\n items,\n itemSelector = DEFAULT_LIST_SELECTOR,\n preloadBackwards = DEFAULT_PRELOAD_BACKWARDS,\n sensitiveArea = DEFAULT_SENSITIVE_AREA,\n withAbsolutePositioning,\n maxHeight,\n // Used to turn off restoring scroll position (e.g. for frequently re-ordered chat or user lists)\n noScrollRestore = false,\n noScrollRestoreOnTop = false,\n noFastList,\n // Used to re-query `listItemElements` if rendering is delayed by transition\n cacheBuster,\n children,\n}: OwnProps) => {\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n\n const stateRef = useRef<{\n listItemElements?: NodeListOf;\n isScrollTopJustUpdated?: boolean;\n currentAnchor?: HTMLDivElement | undefined;\n currentAnchorTop?: number;\n }>({});\n\n const [loadMoreBackwards, loadMoreForwards] = useMemo(() => {\n if (!onLoadMore) {\n return [];\n }\n\n return [\n debounce((noScroll = false) => {\n onLoadMore({ direction: LoadMoreDirection.Backwards, noScroll });\n }, 1000, true, false),\n debounce(() => {\n onLoadMore({ direction: LoadMoreDirection.Forwards });\n }, 1000, true, false),\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onLoadMore, items]);\n\n // Initial preload\n useEffect(() => {\n if (!loadMoreBackwards) {\n return;\n }\n\n if (preloadBackwards > 0 && (!items || items.length < preloadBackwards)) {\n loadMoreBackwards(true);\n return;\n }\n\n const { scrollHeight, clientHeight } = containerRef.current!;\n if (clientHeight && scrollHeight <= clientHeight) {\n loadMoreBackwards();\n }\n }, [items, loadMoreBackwards, preloadBackwards]);\n\n // Restore `scrollTop` after adding items\n useLayoutEffect(() => {\n const container = containerRef.current!;\n const state = stateRef.current;\n\n state.listItemElements = container.querySelectorAll(itemSelector);\n\n let newScrollTop;\n\n if (state.currentAnchor && Array.from(state.listItemElements).includes(state.currentAnchor)) {\n const { scrollTop } = container;\n const newAnchorTop = state.currentAnchor.getBoundingClientRect().top;\n newScrollTop = scrollTop + (newAnchorTop - state.currentAnchorTop!);\n } else {\n const nextAnchor = state.listItemElements[0];\n if (nextAnchor) {\n state.currentAnchor = nextAnchor;\n state.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n\n if (withAbsolutePositioning || noScrollRestore) {\n return;\n }\n\n if (noScrollRestoreOnTop && container.scrollTop === 0) {\n return;\n }\n\n resetScroll(container, newScrollTop);\n\n state.isScrollTopJustUpdated = true;\n }, [items, itemSelector, noScrollRestore, noScrollRestoreOnTop, cacheBuster, withAbsolutePositioning]);\n\n const handleScroll = useCallback((e: UIEvent) => {\n if (loadMoreForwards && loadMoreBackwards) {\n const {\n isScrollTopJustUpdated, currentAnchor, currentAnchorTop,\n } = stateRef.current;\n const listItemElements = stateRef.current.listItemElements!;\n\n if (isScrollTopJustUpdated) {\n stateRef.current.isScrollTopJustUpdated = false;\n return;\n }\n\n const listLength = listItemElements.length;\n const container = containerRef.current!;\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const top = listLength ? listItemElements[0].offsetTop : 0;\n const isNearTop = scrollTop <= top + sensitiveArea;\n const bottom = listLength\n ? listItemElements[listLength - 1].offsetTop + listItemElements[listLength - 1].offsetHeight\n : scrollHeight;\n const isNearBottom = bottom - (scrollTop + offsetHeight) <= sensitiveArea;\n let isUpdated = false;\n\n if (isNearTop) {\n const nextAnchor = listItemElements[0];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingUp = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop > currentAnchorTop\n );\n\n if (isMovingUp) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreForwards();\n }\n }\n }\n\n if (isNearBottom) {\n const nextAnchor = listItemElements[listLength - 1];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingDown = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop < currentAnchorTop\n );\n\n if (isMovingDown) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreBackwards();\n }\n }\n }\n\n if (!isUpdated) {\n if (currentAnchor?.offsetParent) {\n stateRef.current.currentAnchorTop = currentAnchor.getBoundingClientRect().top;\n } else {\n const nextAnchor = listItemElements[0];\n\n if (nextAnchor) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n }\n }\n\n if (onScroll) {\n onScroll(e);\n }\n }, [loadMoreBackwards, loadMoreForwards, onScroll, sensitiveArea]);\n\n return (\n \n {withAbsolutePositioning && items?.length ? (\n \n {children}\n \n ) : children}\n \n );\n};\n\nexport default InfiniteScroll;\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: any;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import { FC, useRef, useLayoutEffect } from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: any;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children, elementRef.current);\n};\n\nexport default Portal;\n","import { useEffect } from '../lib/teact/teact';\n\nexport default function useBackgroundMode(\n onBlur?: AnyToVoidFunction,\n onFocus?: AnyToVoidFunction,\n) {\n useEffect(() => {\n if (onBlur && !document.hasFocus()) {\n onBlur();\n }\n\n if (onBlur) {\n window.addEventListener('blur', onBlur);\n }\n\n if (onFocus) {\n window.addEventListener('focus', onFocus);\n }\n\n return () => {\n if (onFocus) {\n window.removeEventListener('focus', onFocus);\n }\n\n if (onBlur) {\n window.removeEventListener('blur', onBlur);\n }\n };\n }, [onBlur, onFocus]);\n}\n","import usePrevious from './usePrevious';\n\nexport default function useCurrentOrPrev(\n current: T, shouldSkipUndefined = false, shouldForceCurrent = false,\n): T | undefined {\n const prev = usePrevious(current, shouldSkipUndefined);\n\n // eslint-disable-next-line no-null/no-null\n return shouldForceCurrent || (current !== null && current !== undefined) ? current : prev;\n}\n","import { useCallback, useRef } from '../lib/teact/teact';\nimport { LoadMoreDirection } from '../types';\n\nimport { areSortedArraysEqual } from '../util/iteratees';\nimport useForceUpdate from './useForceUpdate';\nimport usePrevious from './usePrevious';\n\ntype GetMore = (args: { direction: LoadMoreDirection }) => void;\ntype LoadMoreBackwards = (args: { offsetId?: string | number }) => void;\n\nconst DEFAULT_LIST_SLICE = 30;\n\nconst useInfiniteScroll = (\n loadMoreBackwards?: LoadMoreBackwards,\n listIds?: ListId[],\n isDisabled = false,\n listSlice = DEFAULT_LIST_SLICE,\n): [ListId[]?, GetMore?] => {\n const lastParamsRef = useRef<{\n direction?: LoadMoreDirection;\n offsetId?: ListId;\n }>();\n\n const viewportIdsRef = useRef((() => {\n // Only run once to initialize\n if (!listIds || lastParamsRef.current) {\n return undefined;\n }\n\n const { newViewportIds } = getViewportSlice(listIds, LoadMoreDirection.Forwards, listSlice, listIds[0]);\n return newViewportIds;\n })());\n\n const forceUpdate = useForceUpdate();\n\n if (isDisabled) {\n lastParamsRef.current = {};\n }\n\n const prevListIds = usePrevious(listIds);\n const prevIsDisabled = usePrevious(isDisabled);\n if (listIds && !isDisabled && (listIds !== prevListIds || isDisabled !== prevIsDisabled)) {\n const { offsetId = listIds[0], direction = LoadMoreDirection.Forwards } = lastParamsRef.current || {};\n const { newViewportIds } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (!viewportIdsRef.current || !areSortedArraysEqual(viewportIdsRef.current, newViewportIds)) {\n viewportIdsRef.current = newViewportIds;\n }\n }\n\n const getMore: GetMore = useCallback(({\n direction,\n noScroll,\n }: { direction: LoadMoreDirection; noScroll?: boolean }) => {\n const viewportIds = viewportIdsRef.current;\n\n const offsetId = viewportIds\n ? direction === LoadMoreDirection.Backwards ? viewportIds[viewportIds.length - 1] : viewportIds[0]\n : undefined;\n\n if (!listIds) {\n if (loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n\n return;\n }\n\n if (!noScroll) {\n lastParamsRef.current = { ...lastParamsRef.current, direction, offsetId };\n }\n\n const {\n newViewportIds, areSomeLocal, areAllLocal,\n } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (areSomeLocal && !(viewportIds && areSortedArraysEqual(viewportIds, newViewportIds))) {\n viewportIdsRef.current = newViewportIds;\n forceUpdate();\n }\n\n if (!areAllLocal && loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n }, [listIds, listSlice, loadMoreBackwards, forceUpdate]);\n\n return isDisabled ? [listIds] : [viewportIdsRef.current, getMore];\n};\n\nfunction getViewportSlice(\n sourceIds: ListId[],\n direction: LoadMoreDirection,\n listSlice: number,\n offsetId?: ListId,\n) {\n const { length } = sourceIds;\n const index = offsetId ? sourceIds.indexOf(offsetId) : 0;\n const isForwards = direction === LoadMoreDirection.Forwards;\n const indexForDirection = isForwards ? index : (index + 1) || length;\n const from = Math.max(0, indexForDirection - listSlice);\n const to = indexForDirection + listSlice - 1;\n const newViewportIds = sourceIds.slice(Math.max(0, from), to + 1);\n\n let areSomeLocal;\n let areAllLocal;\n switch (direction) {\n case LoadMoreDirection.Forwards:\n areSomeLocal = indexForDirection > 0;\n areAllLocal = from >= 0;\n break;\n case LoadMoreDirection.Backwards:\n areSomeLocal = indexForDirection < length;\n areAllLocal = to <= length - 1;\n break;\n }\n\n return { newViewportIds, areSomeLocal, areAllLocal };\n}\n\nexport default useInfiniteScroll;\n","import { useEffect } from '../lib/teact/teact';\n\nimport { ApiMediaFormat } from '../api/types';\n\nimport * as mediaLoader from '../util/mediaLoader';\nimport useForceUpdate from './useForceUpdate';\n\nconst useMedia = (\n mediaHash: string | false | undefined,\n noLoad = false,\n mediaFormat = ApiMediaFormat.BlobUrl,\n cacheBuster?: number,\n delay?: number | false,\n) => {\n const mediaData = mediaHash ? mediaLoader.getFromMemory(mediaHash) : undefined;\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!noLoad && mediaHash && !mediaData) {\n const startedAt = Date.now();\n\n mediaLoader.fetch(mediaHash, mediaFormat).then(() => {\n const spentTime = Date.now() - startedAt;\n if (!delay || spentTime >= delay) {\n forceUpdate();\n } else {\n setTimeout(forceUpdate, delay - spentTime);\n }\n });\n }\n }, [noLoad, mediaHash, mediaData, mediaFormat, cacheBuster, forceUpdate, delay]);\n\n return mediaData;\n};\n\nexport default useMedia;\n","import { DEBUG } from '../config';\n\nexport const CLIPBOARD_ITEM_SUPPORTED = navigator.clipboard && window.ClipboardItem;\n\nconst textCopyEl = document.createElement('textarea');\ntextCopyEl.setAttribute('readonly', '');\ntextCopyEl.tabIndex = -1;\ntextCopyEl.className = 'visually-hidden';\n\nexport const copyTextToClipboard = (str: string): void => {\n textCopyEl.value = str;\n document.body.appendChild(textCopyEl);\n const selection = document.getSelection();\n\n if (selection) {\n // Store previous selection\n const rangeToRestore = selection.rangeCount > 0 && selection.getRangeAt(0);\n textCopyEl.select();\n document.execCommand('copy');\n // Restore the original selection\n if (rangeToRestore) {\n selection.removeAllRanges();\n selection.addRange(rangeToRestore);\n }\n }\n\n document.body.removeChild(textCopyEl);\n};\n\nexport const copyImageToClipboard = (imageUrl?: string) => {\n if (!imageUrl) return;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const imageEl = new Image();\n imageEl.onload = (e: Event) => {\n if (ctx && e.currentTarget) {\n const img = e.currentTarget as HTMLImageElement;\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n canvas.toBlob(copyBlobToClipboard, 'image/png', 1);\n }\n };\n\n imageEl.src = imageUrl;\n};\n\nasync function copyBlobToClipboard(pngBlob: Blob | null) {\n if (!pngBlob || !CLIPBOARD_ITEM_SUPPORTED) {\n return;\n }\n\n try {\n await navigator.clipboard.write?.([\n new ClipboardItem({\n [pngBlob.type]: pngBlob,\n }),\n ]);\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n}\n","// Used before applying CSS transition\nexport default function forceReflow(element: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n element.offsetWidth;\n}\n","import { IS_IOS } from './environment';\nimport forceReflow from './forceReflow';\n\nconst resetScroll = (container: HTMLDivElement, scrollTop?: number) => {\n if (IS_IOS) {\n container.style.overflow = 'hidden';\n }\n\n if (scrollTop !== undefined) {\n container.scrollTop = scrollTop;\n }\n\n if (IS_IOS) {\n container.style.overflow = '';\n }\n};\n\n// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1264266\nexport function patchChromiumScroll(element: HTMLElement) {\n element.style.display = 'none';\n forceReflow(element);\n element.style.display = '';\n}\n\nexport default resetScroll;\n","import { DEBUG } from '../config';\n\nconst safePlay = (mediaEl: HTMLMediaElement) => {\n mediaEl.play().catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err, mediaEl);\n }\n });\n};\n\nexport default safePlay;\n"],"names":["lottiePromise","RLottie","async","ensureLottie","default","setTimeout","memo","className","id","animationData","play","playSegment","speed","noLoop","size","quality","isLowPriority","color","forceOnHeavyAnimation","onLoad","onEnded","animation","setAnimation","useState","container","useRef","wasPlaying","isFrozen","isFirstRender","playRef","current","playSegmentRef","useEffect","exec","newAnimation","setSpeed","then","fastRaf","setColor","destroy","playAnimation","useCallback","shouldRestart","goToAndPlay","pauseAnimation","pause","freezeAnimation","isPlaying","unfreezeAnimation","unfreezeAnimationOnRaf","changeData","useHeavyAnimationCheck","useBackgroundMode","fullClassName","buildClassName","style","undefined","ref","chat","user","photo","userStatus","text","isSavedMessages","lastSyncTime","onClick","isDeleted","isDeletedUser","isReplies","isChatWithRepliesBot","imageHash","getChatAvatarHash","blobUrl","useMedia","ApiMediaFormat","hasBlobUrl","Boolean","transitionClassNames","useShowTransition","lang","useLang","content","src","alt","decoding","userFullName","getUserFullName","getFirstLetters","title","getChatTitle","isUserId","isOnline","isUserOnline","getUserColorKey","hasImage","handleClick","e","senderId","IS_TEST","renderText","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","Peach","Eggplant","Cumshot","JoinRequest","Invite","getAnimationData","name","path","replace","window","location","origin","mediaLoader","isOpen","onClose","onCloseAnimationEnd","header","textParts","confirmLabel","confirmHandler","confirmIsDestructive","isButtonsInOneRow","children","containerRef","handleSelectWithEnter","index","handleKeyDown","useKeyboardListNavigation","split","map","textPart","onKeyDown","isText","DEFAULT_LIST_SELECTOR","DEFAULT_PRELOAD_BACKWARDS","DEFAULT_SENSITIVE_AREA","onLoadMore","onScroll","items","itemSelector","preloadBackwards","sensitiveArea","withAbsolutePositioning","maxHeight","noScrollRestore","noScrollRestoreOnTop","noFastList","cacheBuster","stateRef","loadMoreBackwards","loadMoreForwards","useMemo","debounce","noScroll","direction","LoadMoreDirection","length","scrollHeight","clientHeight","useLayoutEffect","state","newScrollTop","listItemElements","querySelectorAll","currentAnchor","Array","from","includes","scrollTop","getBoundingClientRect","top","currentAnchorTop","nextAnchor","resetScroll","isScrollTopJustUpdated","handleScroll","listLength","offsetHeight","isNearTop","offsetTop","isNearBottom","isUpdated","nextAnchorTop","newAnchorTop","offsetParent","teactFastList","IS_ANDROID","dialogRef","hasCloseButton","noBackdrop","onEnter","shouldSkipHistoryAnimations","shouldRender","modalRef","captureKeyboardListeners","onEsc","element","key","preventDefault","stopPropagation","focusableElements","currentFocusedIndex","findIndex","em","isSameNode","document","activeElement","newFocusedIndex","shiftKey","focus","addEventListener","removeEventListener","trapFocus","forceClose","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","Portal","tabIndex","role","Button","round","ariaLabel","containerId","elementRef","createElement","querySelector","add","appendChild","TeactDOM","removeChild","onBlur","onFocus","hasFocus","useCurrentOrPrev","shouldSkipUndefined","shouldForceCurrent","prev","usePrevious","getViewportSlice","sourceIds","listSlice","offsetId","indexOf","indexForDirection","Math","max","to","newViewportIds","slice","areSomeLocal","areAllLocal","listIds","isDisabled","lastParamsRef","viewportIdsRef","forceUpdate","useForceUpdate","prevListIds","prevIsDisabled","areSortedArraysEqual","getMore","viewportIds","mediaHash","noLoad","mediaFormat","delay","mediaData","startedAt","Date","now","spentTime","CLIPBOARD_ITEM_SUPPORTED","navigator","clipboard","ClipboardItem","textCopyEl","setAttribute","copyTextToClipboard","str","value","selection","getSelection","rangeToRestore","rangeCount","getRangeAt","select","execCommand","removeAllRanges","addRange","copyImageToClipboard","imageUrl","canvas","ctx","getContext","imageEl","Image","onload","currentTarget","img","width","height","drawImage","toBlob","copyBlobToClipboard","pngBlob","write","type","error","DEBUG","console","forceReflow","offsetWidth","patchChromiumScroll","display","IS_IOS","overflow","mediaEl","catch","err","warn"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/830.cf4ac714b9e5af5f91a7.js b/dist/830.cf4ac714b9e5af5f91a7.js deleted file mode 100644 index 3771fb19b..000000000 --- a/dist/830.cf4ac714b9e5af5f91a7.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[830],{7799:(e,t,n)=>{n.d(t,{Z:()=>u});var o=n(4050),r=n(9118),c=n(6752),s=n(8674),a=n(5332);let l,i;async function d(){return l||(l=n.e(941).then(n.bind(n,7941)),i=(await l).default),l}setTimeout(d,3e3);const u=(0,o.X$)((e=>{let{className:t,id:n,animationData:l,play:u,playSegment:m,speed:p,noLoop:f,size:g,quality:h,isLowPriority:v,color:Z,forceOnHeavyAnimation:w,onLoad:b,onEnded:y}=e;const[E,C]=(0,o.eJ)(),x=(0,o.sO)(null),k=(0,o.sO)(!1),P=(0,o.sO)(!1),T=(0,o.sO)(!0),A=(0,o.sO)();A.current=u;const I=(0,o.sO)();I.current=m,(0,o.d4)((()=>{if(E||!l)return;const e=()=>{if(!x.current)return;const e=new i(n,x.current,l,{noLoop:f,size:g,quality:h,isLowPriority:v},b,Z,y);p&&e.setSpeed(p),C(e)};i?e():d().then((()=>{(0,r.T2)((()=>{x.current&&e()}))}))}),[Z,E,l,n,v,f,b,h,g,p,y]),(0,o.d4)((()=>{E&&E.setColor(Z)}),[Z,E]),(0,o.d4)((()=>()=>{E&&E.destroy()}),[E]);const N=(0,o.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];E&&(A.current||I.current)&&(I.current?E.playSegment(I.current):e?E.goToAndPlay(0):E.play())}),[E]),S=(0,o.I4)((()=>{E&&E.pause()}),[E]),L=(0,o.I4)((()=>{P.current=!0,E&&(k.current||(k.current=E.isPlaying()),S())}),[E,S]),O=(0,o.I4)((()=>{k.current&&N(),k.current=!1,P.current=!1}),[N]),B=(0,o.I4)((()=>{(0,r.T2)(O)}),[O]);(0,o.d4)((()=>{E&&(u||m?P.current?k.current=!0:N(f):P.current?k.current=!1:S())}),[E,u,m,f,N,S]),(0,o.d4)((()=>{E&&(T.current?T.current=!1:l&&(E.changeData(l),N()))}),[N,E,l]),(0,s.ZP)(L,O,w),(0,a.Z)(L,B);const F=(0,c.Z)("AnimatedSticker",t),R=g?`width: ${g}px; height: ${g}px;`:void 0;return o.ZP.createElement("div",{ref:x,className:F,style:R})}))},172:(e,t,n)=>{n.d(t,{Z:()=>p});var o=n(4050),r=n(6137),c=n(3716),s=n(8415),a=n(2155),l=n(6752),i=n(2340),d=n(6202),u=n(1212),m=n(9107);const p=(0,o.X$)((e=>{let{className:t,size:n="large",chat:p,user:f,photo:g,userStatus:h,text:v,isSavedMessages:Z,lastSyncTime:w,onClick:b}=e;const y=f&&(0,s.NB)(f),E=f&&(0,s.pK)(f.id);let C;Z||y||(f?C=(0,s.RT)(f):p?C=(0,s.RT)(p):g&&(C=`photo${g.id}?size=m`));const x=(0,d.Z)(C,!1,r.IU.BlobUrl,w),k=Boolean(x),{transitionClassNames:P}=(0,u.Z)(k,void 0,k,"slow"),T=(0,m.Z)();let A="";if(Z)A=o.ZP.createElement("i",{className:"icon-avatar-saved-messages"});else if(y)A=o.ZP.createElement("i",{className:"icon-avatar-deleted-account"});else if(E)A=o.ZP.createElement("i",{className:"icon-reply-filled"});else if(x)A=o.ZP.createElement("img",{src:x,className:(0,l.Z)("avatar-media",P),alt:"",decoding:"async"});else if(f){const e=(0,s.Js)(f);A=e?(0,a.Xv)(e,2):void 0}else if(p){const e=(0,s.U)(T,p);A=e&&(0,a.Xv)(e,(0,s.YC)(p.id)?2:1)}else v&&(A=(0,a.Xv)(v,2));const I=!Z&&f&&h&&(0,s.kM)(f,h),N=(0,l.Z)(`Avatar size-${n}`,t,`color-bg-${(0,s.Rs)(f||p)}`,Z&&"saved-messages",y&&"deleted-account",E&&"replies-bot-account",I&&"online",b&&"interactive",!Z&&!x&&"no-photo"),S=Boolean(Z||x),L=(0,o.I4)((e=>{b&&b(e,S)}),[b,S]),O=(f||p)&&(f||p).id;return o.ZP.createElement("div",{className:N,onClick:L,"data-test-sender-id":c.Cg?O:void 0},"string"==typeof A?(0,i.Z)(A,["jumbo"===n?"hq_emoji":"emoji"]):A)}))},7324:(e,t,n)=>{n.d(t,{x:()=>c,Z:()=>s});var o=n(6137),r=n(647);const c={MonkeyIdle:n(8760),MonkeyTracking:n(6917),MonkeyClose:n(6257),MonkeyPeek:n(7785),FoldersAll:n(9356),FoldersNew:n(5485),DiscussionGroups:n(6978),CameraFlip:n(5665),HandFilled:n(2456),HandOutline:n(5667),Speaker:n(8763),VoiceAllowTalk:n(401),VoiceMini:n(5106),VoiceMuted:n(487),VoiceOutlined:n(5740),Peach:n(3677),Eggplant:n(5435),Cumshot:n(1879),JoinRequest:n(5095),Invite:n(7879)};function s(e){const t=c[e].replace(window.location.origin,"");return r.he(`file${t}`,o.IU.Lottie)}},7551:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(4050),r=n(9107),c=n(3103),s=n(231);const a=(0,o.X$)((e=>{let{isOpen:t,onClose:n,onCloseAnimationEnd:a,title:l,header:i,text:d,textParts:u,confirmLabel:m="Confirm",confirmHandler:p,confirmIsDestructive:f,isButtonsInOneRow:g,children:h}=e;const v=(0,r.Z)();return o.ZP.createElement(c.Z,{className:"confirm",title:l,header:i,isOpen:t,onClose:n,onCloseAnimationEnd:a,onEnter:p},d&&d.split("\\n").map((e=>o.ZP.createElement("p",null,e))),u||h,o.ZP.createElement("div",{className:g?"dialog-buttons mt-2":""},o.ZP.createElement(s.Z,{className:"confirm-dialog-button",isText:!0,onClick:p,color:f?"danger":"primary"},m),o.ZP.createElement(s.Z,{className:"confirm-dialog-button",isText:!0,onClick:n},v("Cancel"))))}))},1273:(e,t,n)=>{n.d(t,{Z:()=>u});var o=n(1713),r=n(4050),c=n(9118),s=n(7675),a=n(7361);const l=".ListItem",i=20,d=800,u=e=>{let{ref:t,className:n,onLoadMore:u,onScroll:m,onKeyDown:p,items:f,itemSelector:g=l,preloadBackwards:h=i,sensitiveArea:v=d,withAbsolutePositioning:Z,maxHeight:w,noScrollRestore:b=!1,noScrollRestoreOnTop:y=!1,noFastList:E,cacheBuster:C,children:x}=e,k=(0,r.sO)(null);t&&(k=t);const P=(0,r.sO)({}),[T,A]=(0,r.Ye)((()=>u?[(0,c.Ds)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u({direction:o.Uq.Backwards,noScroll:e})}),1e3,!0,!1),(0,c.Ds)((()=>{u({direction:o.Uq.Forwards})}),1e3,!0,!1)]:[]),[u,f]);(0,r.d4)((()=>{if(!T)return;if(h>0&&(!f||f.length{const e=k.current,t=P.current;let n;if(t.listItemElements=e.querySelectorAll(g),t.currentAnchor&&Array.from(t.listItemElements).includes(t.currentAnchor)){const{scrollTop:o}=e;n=o+(t.currentAnchor.getBoundingClientRect().top-t.currentAnchorTop)}else{const e=t.listItemElements[0];e&&(t.currentAnchor=e,t.currentAnchorTop=e.getBoundingClientRect().top)}Z||b||y&&0===e.scrollTop||((0,s.Z)(e,n),t.isScrollTopJustUpdated=!0)}),[f,g,b,y,C,Z]);const I=(0,r.I4)((e=>{if(A&&T){const{isScrollTopJustUpdated:e,currentAnchor:t,currentAnchorTop:n}=P.current,o=P.current.listItemElements;if(e)return void(P.current.isScrollTopJustUpdated=!1);const r=o.length,c=k.current,{scrollTop:s,scrollHeight:a,offsetHeight:l}=c,i=s<=(r?o[0].offsetTop:0)+v,d=(r?o[r-1].offsetTop+o[r-1].offsetHeight:a)-(s+l)<=v;let u=!1;if(i){const e=o[0];if(e){const o=e.getBoundingClientRect().top,r=null!=t&&t.offsetParent&&t!==e?t.getBoundingClientRect().top:o;t&&void 0!==n&&r>n&&(P.current.currentAnchor=e,P.current.currentAnchorTop=o,u=!0,A())}}if(d){const e=o[r-1];if(e){const o=e.getBoundingClientRect().top,r=null!=t&&t.offsetParent&&t!==e?t.getBoundingClientRect().top:o;t&&void 0!==n&&r{n.d(t,{Z:()=>p});var o=n(4050),r=n(517),c=n(6752),s=n(8674),a=n(1212),l=n(274),i=n(9107),d=n(6590),u=n(231),m=n(2898);const p=e=>{let{dialogRef:t,title:n,className:p,isOpen:f,header:g,hasCloseButton:h,noBackdrop:v,children:Z,onClose:w,onCloseAnimationEnd:b,onEnter:y,shouldSkipHistoryAnimations:E}=e;const{shouldRender:C,transitionClassNames:x}=(0,a.Z)(f,b,E,void 0,E),k=(0,o.sO)(null);(0,o.d4)((()=>f?(0,r.Z)({onEsc:w,onEnter:y}):void 0),[f,w,y]),(0,o.d4)((()=>f&&k.current?function(e){function t(t){if("Tab"!==t.key)return;t.preventDefault(),t.stopPropagation();const n=Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));if(!n.length)return;const o=n.findIndex((e=>e.isSameNode(document.activeElement)));let r=0;o>=0&&(r=t.shiftKey?o>0?o-1:n.length-1:o{document.removeEventListener("keydown",t,!1)}}(k.current):void 0),[f]);const{forceClose:P}=(0,d.ZP)(f,w);(0,o.d4)((()=>()=>{f&&P()}),[]),(0,l.Z)((e=>{let[t]=e;return document.body.classList.toggle("has-open-dialog",f),(f||!f&&void 0!==t)&&(0,s.YW)(200),()=>{document.body.classList.remove("has-open-dialog")}}),[f]);const T=(0,i.Z)();if(!C)return;const A=(0,c.Z)("Modal",p,x,v&&"transparent-backdrop");return o.ZP.createElement(m.Z,null,o.ZP.createElement("div",{ref:k,className:A,tabIndex:-1,role:"dialog"},o.ZP.createElement("div",{className:"modal-container"},o.ZP.createElement("div",{className:"modal-backdrop",onClick:w}),o.ZP.createElement("div",{className:"modal-dialog",ref:t},g||(n?o.ZP.createElement("div",{className:"modal-header"},h&&o.ZP.createElement(u.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:T("Close"),onClick:w},o.ZP.createElement("i",{className:"icon-close"})),o.ZP.createElement("div",{className:"modal-title"},n)):void 0),o.ZP.createElement("div",{className:"modal-content custom-scroll"},Z)))))}},2898:(e,t,n)=>{n.d(t,{Z:()=>c});var o=n(4050),r=n(2916);const c=e=>{let{containerId:t,className:n,children:c}=e;const s=(0,o.sO)();return s.current||(s.current=document.createElement("div")),(0,o.bt)((()=>{const e=document.querySelector(t||"#portals");if(!e)return;const o=s.current;return n&&o.classList.add(n),e.appendChild(o),()=>{r.Z.render(void 0,o),e.removeChild(o)}}),[n,t]),r.Z.render(c,s.current)}},5332:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(4050);function r(e,t){(0,o.d4)((()=>(e&&!document.hasFocus()&&e(),e&&window.addEventListener("blur",e),t&&window.addEventListener("focus",t),()=>{t&&window.removeEventListener("focus",t),e&&window.removeEventListener("blur",e)})),[e,t])}},8360:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(7204);function r(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=(0,o.Z)(e,t);return n||null!=e?e:r}},7407:(e,t,n)=>{n.d(t,{Z:()=>i});var o=n(4050),r=n(1713),c=n(782),s=n(5326),a=n(7204);function l(e,t,n,o){const{length:c}=e,s=o?e.indexOf(o):0,a=t===r.Uq.Forwards?s:s+1||c,l=Math.max(0,a-n),i=a+n-1,d=e.slice(Math.max(0,l),i+1);let u,m;switch(t){case r.Uq.Forwards:u=a>0,m=l>=0;break;case r.Uq.Backwards:u=a2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:30;const d=(0,o.sO)(),u=(0,o.sO)((()=>{if(!t||d.current)return;const{newViewportIds:e}=l(t,r.Uq.Forwards,i,t[0]);return e})()),m=(0,s.Z)();n&&(d.current={});const p=(0,a.Z)(t),f=(0,a.Z)(n);if(t&&!n&&(t!==p||n!==f)){const{offsetId:e=t[0],direction:n=r.Uq.Forwards}=d.current||{},{newViewportIds:o}=l(t,n,i,e);u.current&&(0,c.et)(u.current,o)||(u.current=o)}const g=(0,o.I4)((n=>{let{direction:o,noScroll:s}=n;const a=u.current,p=a?o===r.Uq.Backwards?a[a.length-1]:a[0]:void 0;if(!t)return void(e&&e({offsetId:p}));s||(d.current={...d.current,direction:o,offsetId:p});const{newViewportIds:f,areSomeLocal:g,areAllLocal:h}=l(t,o,i,p);!g||a&&(0,c.et)(a,f)||(u.current=f,m()),!h&&e&&e({offsetId:p})}),[t,i,e,m]);return n?[t]:[u.current,g]}},6202:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(4050),r=n(6137),c=n(647),s=n(5326);const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r.IU.BlobUrl,a=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;const i=e?c.UV(e):void 0,d=(0,s.Z)();return(0,o.d4)((()=>{if(!t&&e&&!i){const t=Date.now();c.he(e,n).then((()=>{const e=Date.now()-t;!l||e>=l?d():setTimeout(d,l-e)}))}}),[t,e,i,n,a,d,l]),i}},4319:(e,t,n)=>{n.d(t,{yl:()=>r,TE:()=>s,VP:()=>a});var o=n(3716);const r=navigator.clipboard&&window.ClipboardItem,c=document.createElement("textarea");c.setAttribute("readonly",""),c.tabIndex=-1,c.className="visually-hidden";const s=e=>{c.value=e,document.body.appendChild(c);const t=document.getSelection();if(t){const e=t.rangeCount>0&&t.getRangeAt(0);c.select(),document.execCommand("copy"),e&&(t.removeAllRanges(),t.addRange(e))}document.body.removeChild(c)},a=e=>{if(!e)return;const t=document.createElement("canvas"),n=t.getContext("2d"),o=new Image;o.onload=e=>{if(n&&e.currentTarget){const o=e.currentTarget;t.width=o.width,t.height=o.height,n.drawImage(o,0,0,o.width,o.height),t.toBlob(l,"image/png",1)}},o.src=e};async function l(e){if(e&&r)try{var t,n;await(null===(t=(n=navigator.clipboard).write)||void 0===t?void 0:t.call(n,[new ClipboardItem({[e.type]:e})]))}catch(e){o.eM&&console.error(e)}}},2972:(e,t,n)=>{function o(e){e.offsetWidth}n.d(t,{Z:()=>o})},7675:(e,t,n)=>{n.d(t,{z:()=>c,Z:()=>s});var o=n(7361),r=n(2972);function c(e){e.style.display="none",(0,r.Z)(e),e.style.display=""}const s=(e,t)=>{o.cj&&(e.style.overflow="hidden"),void 0!==t&&(e.scrollTop=t),o.cj&&(e.style.overflow="")}},4753:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(3716);const r=e=>{e.play().catch((t=>{o.eM&&console.warn(t,e)}))}},1879:(e,t,n)=>{e.exports=n.p+"Cumshot.7a17984a6b80787dab34..tgs"},5435:(e,t,n)=>{e.exports=n.p+"Eggplant.7693d877087b802d04be..tgs"},3677:(e,t,n)=>{e.exports=n.p+"Peach.a289b2c54c563f11208f..tgs"},5665:(e,t,n)=>{e.exports=n.p+"CameraFlip.1a9fe44cf01fcb22347d..tgs"},2456:(e,t,n)=>{e.exports=n.p+"HandFilled.f87939d160f1dc288586..tgs"},5667:(e,t,n)=>{e.exports=n.p+"HandOutline.f9831751ba60df30c484..tgs"},8763:(e,t,n)=>{e.exports=n.p+"Speaker.04bb3743412b41ff83c5..tgs"},401:(e,t,n)=>{e.exports=n.p+"VoiceAllowTalk.a9cc7c39ec438973ddc9..tgs"},5106:(e,t,n)=>{e.exports=n.p+"VoiceMini.bf00ffdf69625c579569..tgs"},487:(e,t,n)=>{e.exports=n.p+"VoiceMuted.a4b4ec6bfd7c6c5fb275..tgs"},5740:(e,t,n)=>{e.exports=n.p+"VoiceOutlined.91b394ab3562cdfad6bc..tgs"},7879:(e,t,n)=>{e.exports=n.p+"Invite.4502ec3aa4249d6e6723..tgs"},5095:(e,t,n)=>{e.exports=n.p+"Requests.af9f19772695a8898810..tgs"},6257:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyClose.604c4c833d322b7e6c3e..tgs"},8760:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyIdle.dea4a492c144df84ddab..tgs"},7785:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyPeek.1905436b042520363d7e..tgs"},6917:(e,t,n)=>{e.exports=n.p+"TwoFactorSetupMonkeyTracking.eb5a7a6f166fb7589c12..tgs"},6978:(e,t,n)=>{e.exports=n.p+"DiscussionGroupsDucks.9ea453d1be9d1b0ee77a..tgs"},9356:(e,t,n)=>{e.exports=n.p+"FoldersAll.3f9f9e243d19f0fbf9aa..tgs"},5485:(e,t,n)=>{e.exports=n.p+"FoldersNew.9a40d71c0c8be70f5bd1..tgs"}}]); -//# sourceMappingURL=830.cf4ac714b9e5af5f91a7.js.map \ No newline at end of file diff --git a/dist/830.cf4ac714b9e5af5f91a7.js.map b/dist/830.cf4ac714b9e5af5f91a7.js.map deleted file mode 100644 index 74dedec8a..000000000 --- a/dist/830.cf4ac714b9e5af5f91a7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"830.cf4ac714b9e5af5f91a7.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/AnimatedSticker.tsx","webpack://telegram-t/./src/components/common/Avatar.tsx","webpack://telegram-t/./src/components/common/helpers/animatedAssets.ts","webpack://telegram-t/./src/components/ui/ConfirmDialog.tsx","webpack://telegram-t/./src/components/ui/InfiniteScroll.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts","webpack://telegram-t/./src/hooks/useBackgroundMode.ts","webpack://telegram-t/./src/hooks/useCurrentOrPrev.ts","webpack://telegram-t/./src/hooks/useInfiniteScroll.ts","webpack://telegram-t/./src/hooks/useMedia.ts","webpack://telegram-t/./src/util/clipboard.ts","webpack://telegram-t/./src/util/forceReflow.ts","webpack://telegram-t/./src/util/resetScroll.ts","webpack://telegram-t/./src/util/safePlay.ts"],"sourcesContent":["import React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useHeavyAnimationCheck from '../../hooks/useHeavyAnimationCheck';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\n\ntype OwnProps = {\n className?: string;\n id: string;\n animationData?: string;\n play?: boolean | string;\n playSegment?: [number, number];\n speed?: number;\n noLoop?: boolean;\n size: number;\n quality?: number;\n isLowPriority?: boolean;\n onLoad?: NoneToVoidFunction;\n forceOnHeavyAnimation?: boolean;\n color?: [number, number, number];\n onEnded?: NoneToVoidFunction;\n};\n\ntype RLottieClass = typeof import('../../lib/rlottie/RLottie').default;\ntype RLottieInstance = import('../../lib/rlottie/RLottie').default;\nlet lottiePromise: Promise;\nlet RLottie: RLottieClass;\n\n// Time for the main interface to completely load\nconst LOTTIE_LOAD_DELAY = 3000;\n\nasync function ensureLottie() {\n if (!lottiePromise) {\n lottiePromise = import('../../lib/rlottie/RLottie') as unknown as Promise;\n RLottie = (await lottiePromise as any).default;\n }\n\n return lottiePromise;\n}\n\nsetTimeout(ensureLottie, LOTTIE_LOAD_DELAY);\n\nconst AnimatedSticker: FC = ({\n className,\n id,\n animationData,\n play,\n playSegment,\n speed,\n noLoop,\n size,\n quality,\n isLowPriority,\n color,\n forceOnHeavyAnimation,\n onLoad,\n onEnded,\n}) => {\n const [animation, setAnimation] = useState();\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n const wasPlaying = useRef(false);\n const isFrozen = useRef(false);\n const isFirstRender = useRef(true);\n\n const playRef = useRef();\n playRef.current = play;\n const playSegmentRef = useRef<[number, number]>();\n playSegmentRef.current = playSegment;\n\n useEffect(() => {\n if (animation || !animationData) {\n return;\n }\n\n const exec = () => {\n if (!container.current) {\n return;\n }\n\n const newAnimation = new RLottie(\n id,\n container.current,\n animationData,\n {\n noLoop,\n size,\n quality,\n isLowPriority,\n },\n onLoad,\n color,\n onEnded,\n );\n\n if (speed) {\n newAnimation.setSpeed(speed);\n }\n\n setAnimation(newAnimation);\n };\n\n if (RLottie) {\n exec();\n } else {\n ensureLottie().then(() => {\n fastRaf(() => {\n if (container.current) {\n exec();\n }\n });\n });\n }\n }, [color, animation, animationData, id, isLowPriority, noLoop, onLoad, quality, size, speed, onEnded]);\n\n useEffect(() => {\n if (!animation) return;\n\n animation.setColor(color);\n }, [color, animation]);\n\n useEffect(() => {\n return () => {\n if (animation) {\n animation.destroy();\n }\n };\n }, [animation]);\n\n const playAnimation = useCallback((shouldRestart = false) => {\n if (animation && (playRef.current || playSegmentRef.current)) {\n if (playSegmentRef.current) {\n animation.playSegment(playSegmentRef.current);\n } else if (shouldRestart) {\n animation.goToAndPlay(0);\n } else {\n animation.play();\n }\n }\n }, [animation]);\n\n const pauseAnimation = useCallback(() => {\n if (!animation) {\n return;\n }\n\n animation.pause();\n }, [animation]);\n\n const freezeAnimation = useCallback(() => {\n isFrozen.current = true;\n\n if (!animation) {\n return;\n }\n\n if (!wasPlaying.current) {\n wasPlaying.current = animation.isPlaying();\n }\n\n pauseAnimation();\n }, [animation, pauseAnimation]);\n\n const unfreezeAnimation = useCallback(() => {\n if (wasPlaying.current) {\n playAnimation();\n }\n\n wasPlaying.current = false;\n isFrozen.current = false;\n }, [playAnimation]);\n\n const unfreezeAnimationOnRaf = useCallback(() => {\n fastRaf(unfreezeAnimation);\n }, [unfreezeAnimation]);\n\n useEffect(() => {\n if (!animation) {\n return;\n }\n\n if (play || playSegment) {\n if (isFrozen.current) {\n wasPlaying.current = true;\n } else {\n playAnimation(noLoop);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isFrozen.current) {\n wasPlaying.current = false;\n } else {\n pauseAnimation();\n }\n }\n }, [animation, play, playSegment, noLoop, playAnimation, pauseAnimation]);\n\n useEffect(() => {\n if (animation) {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else if (animationData) {\n animation.changeData(animationData);\n playAnimation();\n }\n }\n }, [playAnimation, animation, animationData]);\n\n useHeavyAnimationCheck(freezeAnimation, unfreezeAnimation, forceOnHeavyAnimation);\n // Pausing frame may not happen in background\n // so we need to make sure it happens right after focusing,\n // then we can play again.\n useBackgroundMode(freezeAnimation, unfreezeAnimationOnRaf);\n\n const fullClassName = buildClassName('AnimatedSticker', className);\n\n const style = size ? `width: ${size}px; height: ${size}px;` : undefined;\n\n return (\n \n );\n};\n\nexport default memo(AnimatedSticker);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser, ApiUserStatus,\n} from '../../api/types';\n\nimport { IS_TEST } from '../../config';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getUserColorKey,\n getUserFullName,\n isUserId,\n isChatWithRepliesBot,\n isDeletedUser,\n isUserOnline,\n} from '../../modules/helpers';\nimport { getFirstLetters } from '../../util/textFormat';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from './helpers/renderText';\nimport useMedia from '../../hooks/useMedia';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport './Avatar.scss';\n\ntype OwnProps = {\n className?: string;\n size?: 'micro' | 'tiny' | 'small' | 'medium' | 'large' | 'jumbo';\n chat?: ApiChat;\n user?: ApiUser;\n photo?: ApiPhoto;\n userStatus?: ApiUserStatus;\n text?: string;\n isSavedMessages?: boolean;\n lastSyncTime?: number;\n onClick?: (e: ReactMouseEvent, hasPhoto: boolean) => void;\n};\n\nconst Avatar: FC = ({\n className,\n size = 'large',\n chat,\n user,\n photo,\n userStatus,\n text,\n isSavedMessages,\n lastSyncTime,\n onClick,\n}) => {\n const isDeleted = user && isDeletedUser(user);\n const isReplies = user && isChatWithRepliesBot(user.id);\n let imageHash: string | undefined;\n\n if (!isSavedMessages && !isDeleted) {\n if (user) {\n imageHash = getChatAvatarHash(user);\n } else if (chat) {\n imageHash = getChatAvatarHash(chat);\n } else if (photo) {\n imageHash = `photo${photo.id}?size=m`;\n }\n }\n\n const blobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const hasBlobUrl = Boolean(blobUrl);\n const { transitionClassNames } = useShowTransition(hasBlobUrl, undefined, hasBlobUrl, 'slow');\n\n const lang = useLang();\n\n let content: string | undefined = '';\n\n if (isSavedMessages) {\n content = ;\n } else if (isDeleted) {\n content = ;\n } else if (isReplies) {\n content = ;\n } else if (blobUrl) {\n content = (\n \"\"\n );\n } else if (user) {\n const userFullName = getUserFullName(user);\n content = userFullName ? getFirstLetters(userFullName, 2) : undefined;\n } else if (chat) {\n const title = getChatTitle(lang, chat);\n content = title && getFirstLetters(title, isUserId(chat.id) ? 2 : 1);\n } else if (text) {\n content = getFirstLetters(text, 2);\n }\n\n const isOnline = !isSavedMessages && user && userStatus && isUserOnline(user, userStatus);\n const fullClassName = buildClassName(\n `Avatar size-${size}`,\n className,\n `color-bg-${getUserColorKey(user || chat)}`,\n isSavedMessages && 'saved-messages',\n isDeleted && 'deleted-account',\n isReplies && 'replies-bot-account',\n isOnline && 'online',\n onClick && 'interactive',\n (!isSavedMessages && !blobUrl) && 'no-photo',\n );\n\n const hasImage = Boolean(isSavedMessages || blobUrl);\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (onClick) {\n onClick(e, hasImage);\n }\n }, [onClick, hasImage]);\n\n const senderId = (user || chat) && (user || chat)!.id;\n\n return (\n
\n {typeof content === 'string' ? renderText(content, [size === 'jumbo' ? 'hq_emoji' : 'emoji']) : content}\n
\n );\n};\n\nexport default memo(Avatar);\n","import { ApiMediaFormat } from '../../../api/types';\n\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nimport MonkeyIdle from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyIdle.tgs';\nimport MonkeyTracking from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyTracking.tgs';\nimport MonkeyClose from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyClose.tgs';\nimport MonkeyPeek from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyPeek.tgs';\n\nimport FoldersAll from '../../../assets/tgs/settings/FoldersAll.tgs';\nimport FoldersNew from '../../../assets/tgs/settings/FoldersNew.tgs';\nimport DiscussionGroups from '../../../assets/tgs/settings/DiscussionGroupsDucks.tgs';\n\nimport CameraFlip from '../../../assets/tgs/calls/CameraFlip.tgs';\nimport HandFilled from '../../../assets/tgs/calls/HandFilled.tgs';\nimport HandOutline from '../../../assets/tgs/calls/HandOutline.tgs';\nimport Speaker from '../../../assets/tgs/calls/Speaker.tgs';\nimport VoiceAllowTalk from '../../../assets/tgs/calls/VoiceAllowTalk.tgs';\nimport VoiceMini from '../../../assets/tgs/calls/VoiceMini.tgs';\nimport VoiceMuted from '../../../assets/tgs/calls/VoiceMuted.tgs';\nimport VoiceOutlined from '../../../assets/tgs/calls/VoiceOutlined.tgs';\n\nimport Peach from '../../../assets/tgs/animatedEmojis/Peach.tgs';\nimport Eggplant from '../../../assets/tgs/animatedEmojis/Eggplant.tgs';\nimport Cumshot from '../../../assets/tgs/animatedEmojis/Cumshot.tgs';\n\nimport JoinRequest from '../../../assets/tgs/invites/Requests.tgs';\nimport Invite from '../../../assets/tgs/invites/Invite.tgs';\n\nexport const ANIMATED_STICKERS_PATHS = {\n MonkeyIdle,\n MonkeyTracking,\n MonkeyClose,\n MonkeyPeek,\n FoldersAll,\n FoldersNew,\n DiscussionGroups,\n CameraFlip,\n HandFilled,\n HandOutline,\n Speaker,\n VoiceAllowTalk,\n VoiceMini,\n VoiceMuted,\n VoiceOutlined,\n Peach,\n Eggplant,\n Cumshot,\n JoinRequest,\n Invite,\n};\n\nexport default function getAnimationData(name: keyof typeof ANIMATED_STICKERS_PATHS) {\n const path = ANIMATED_STICKERS_PATHS[name].replace(window.location.origin, '');\n\n return mediaLoader.fetch(`file${path}`, ApiMediaFormat.Lottie);\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport Modal from './Modal';\nimport Button from './Button';\n\ntype OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n title?: string;\n header?: FC;\n textParts?: TextPart[];\n text?: string;\n confirmLabel?: string;\n confirmHandler: () => void;\n confirmIsDestructive?: boolean;\n isButtonsInOneRow?: boolean;\n children?: any;\n};\n\nconst ConfirmDialog: FC = ({\n isOpen,\n onClose,\n onCloseAnimationEnd,\n title,\n header,\n text,\n textParts,\n confirmLabel = 'Confirm',\n confirmHandler,\n confirmIsDestructive,\n isButtonsInOneRow,\n children,\n}) => {\n const lang = useLang();\n\n return (\n \n {text && text.split('\\\\n').map((textPart) => (\n

{textPart}

\n ))}\n {textParts || children}\n
\n \n {confirmLabel}\n \n \n
\n \n );\n};\n\nexport default memo(ConfirmDialog);\n","import { RefObject, UIEvent } from 'react';\nimport { LoadMoreDirection } from '../../types';\n\nimport React, {\n FC, useCallback, useEffect, useLayoutEffect, useMemo, useRef,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport resetScroll from '../../util/resetScroll';\nimport { IS_ANDROID } from '../../util/environment';\n\ntype OwnProps = {\n ref?: RefObject;\n className?: string;\n onLoadMore?: ({ direction }: { direction: LoadMoreDirection; noScroll?: boolean }) => void;\n onScroll?: (e: UIEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n items?: any[];\n itemSelector?: string;\n preloadBackwards?: number;\n sensitiveArea?: number;\n withAbsolutePositioning?: boolean;\n maxHeight?: number;\n noScrollRestore?: boolean;\n noScrollRestoreOnTop?: boolean;\n noFastList?: boolean;\n cacheBuster?: any;\n children: any;\n};\n\nconst DEFAULT_LIST_SELECTOR = '.ListItem';\nconst DEFAULT_PRELOAD_BACKWARDS = 20;\nconst DEFAULT_SENSITIVE_AREA = 800;\n\nconst InfiniteScroll: FC = ({\n ref,\n className,\n onLoadMore,\n onScroll,\n onKeyDown,\n items,\n itemSelector = DEFAULT_LIST_SELECTOR,\n preloadBackwards = DEFAULT_PRELOAD_BACKWARDS,\n sensitiveArea = DEFAULT_SENSITIVE_AREA,\n withAbsolutePositioning,\n maxHeight,\n // Used to turn off restoring scroll position (e.g. for frequently re-ordered chat or user lists)\n noScrollRestore = false,\n noScrollRestoreOnTop = false,\n noFastList,\n // Used to re-query `listItemElements` if rendering is delayed by transition\n cacheBuster,\n children,\n}: OwnProps) => {\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n\n const stateRef = useRef<{\n listItemElements?: NodeListOf;\n isScrollTopJustUpdated?: boolean;\n currentAnchor?: HTMLDivElement | undefined;\n currentAnchorTop?: number;\n }>({});\n\n const [loadMoreBackwards, loadMoreForwards] = useMemo(() => {\n if (!onLoadMore) {\n return [];\n }\n\n return [\n debounce((noScroll = false) => {\n onLoadMore({ direction: LoadMoreDirection.Backwards, noScroll });\n }, 1000, true, false),\n debounce(() => {\n onLoadMore({ direction: LoadMoreDirection.Forwards });\n }, 1000, true, false),\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onLoadMore, items]);\n\n // Initial preload\n useEffect(() => {\n if (!loadMoreBackwards) {\n return;\n }\n\n if (preloadBackwards > 0 && (!items || items.length < preloadBackwards)) {\n loadMoreBackwards(true);\n return;\n }\n\n const { scrollHeight, clientHeight } = containerRef.current!;\n if (clientHeight && scrollHeight <= clientHeight) {\n loadMoreBackwards();\n }\n }, [items, loadMoreBackwards, preloadBackwards]);\n\n // Restore `scrollTop` after adding items\n useLayoutEffect(() => {\n const container = containerRef.current!;\n const state = stateRef.current;\n\n state.listItemElements = container.querySelectorAll(itemSelector);\n\n let newScrollTop;\n\n if (state.currentAnchor && Array.from(state.listItemElements).includes(state.currentAnchor)) {\n const { scrollTop } = container;\n const newAnchorTop = state.currentAnchor.getBoundingClientRect().top;\n newScrollTop = scrollTop + (newAnchorTop - state.currentAnchorTop!);\n } else {\n const nextAnchor = state.listItemElements[0];\n if (nextAnchor) {\n state.currentAnchor = nextAnchor;\n state.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n\n if (withAbsolutePositioning || noScrollRestore) {\n return;\n }\n\n if (noScrollRestoreOnTop && container.scrollTop === 0) {\n return;\n }\n\n resetScroll(container, newScrollTop);\n\n state.isScrollTopJustUpdated = true;\n }, [items, itemSelector, noScrollRestore, noScrollRestoreOnTop, cacheBuster, withAbsolutePositioning]);\n\n const handleScroll = useCallback((e: UIEvent) => {\n if (loadMoreForwards && loadMoreBackwards) {\n const {\n isScrollTopJustUpdated, currentAnchor, currentAnchorTop,\n } = stateRef.current;\n const listItemElements = stateRef.current.listItemElements!;\n\n if (isScrollTopJustUpdated) {\n stateRef.current.isScrollTopJustUpdated = false;\n return;\n }\n\n const listLength = listItemElements.length;\n const container = containerRef.current!;\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const top = listLength ? listItemElements[0].offsetTop : 0;\n const isNearTop = scrollTop <= top + sensitiveArea;\n const bottom = listLength\n ? listItemElements[listLength - 1].offsetTop + listItemElements[listLength - 1].offsetHeight\n : scrollHeight;\n const isNearBottom = bottom - (scrollTop + offsetHeight) <= sensitiveArea;\n let isUpdated = false;\n\n if (isNearTop) {\n const nextAnchor = listItemElements[0];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingUp = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop > currentAnchorTop\n );\n\n if (isMovingUp) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreForwards();\n }\n }\n }\n\n if (isNearBottom) {\n const nextAnchor = listItemElements[listLength - 1];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingDown = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop < currentAnchorTop\n );\n\n if (isMovingDown) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreBackwards();\n }\n }\n }\n\n if (!isUpdated) {\n if (currentAnchor?.offsetParent) {\n stateRef.current.currentAnchorTop = currentAnchor.getBoundingClientRect().top;\n } else {\n const nextAnchor = listItemElements[0];\n\n if (nextAnchor) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n }\n }\n\n if (onScroll) {\n onScroll(e);\n }\n }, [loadMoreBackwards, loadMoreForwards, onScroll, sensitiveArea]);\n\n return (\n \n {withAbsolutePositioning && items?.length ? (\n \n {children}\n \n ) : children}\n \n );\n};\n\nexport default InfiniteScroll;\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: any;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import { FC, useRef, useLayoutEffect } from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: any;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children, elementRef.current);\n};\n\nexport default Portal;\n","import { useEffect } from '../lib/teact/teact';\n\nexport default function useBackgroundMode(\n onBlur?: AnyToVoidFunction,\n onFocus?: AnyToVoidFunction,\n) {\n useEffect(() => {\n if (onBlur && !document.hasFocus()) {\n onBlur();\n }\n\n if (onBlur) {\n window.addEventListener('blur', onBlur);\n }\n\n if (onFocus) {\n window.addEventListener('focus', onFocus);\n }\n\n return () => {\n if (onFocus) {\n window.removeEventListener('focus', onFocus);\n }\n\n if (onBlur) {\n window.removeEventListener('blur', onBlur);\n }\n };\n }, [onBlur, onFocus]);\n}\n","import usePrevious from './usePrevious';\n\nexport default function useCurrentOrPrev(\n current: T, shouldSkipUndefined = false, shouldForceCurrent = false,\n): T | undefined {\n const prev = usePrevious(current, shouldSkipUndefined);\n\n // eslint-disable-next-line no-null/no-null\n return shouldForceCurrent || (current !== null && current !== undefined) ? current : prev;\n}\n","import { useCallback, useRef } from '../lib/teact/teact';\nimport { LoadMoreDirection } from '../types';\n\nimport { areSortedArraysEqual } from '../util/iteratees';\nimport useForceUpdate from './useForceUpdate';\nimport usePrevious from './usePrevious';\n\ntype GetMore = (args: { direction: LoadMoreDirection }) => void;\ntype LoadMoreBackwards = (args: { offsetId?: string | number }) => void;\n\nconst DEFAULT_LIST_SLICE = 30;\n\nconst useInfiniteScroll = (\n loadMoreBackwards?: LoadMoreBackwards,\n listIds?: ListId[],\n isDisabled = false,\n listSlice = DEFAULT_LIST_SLICE,\n): [ListId[]?, GetMore?] => {\n const lastParamsRef = useRef<{\n direction?: LoadMoreDirection;\n offsetId?: ListId;\n }>();\n\n const viewportIdsRef = useRef((() => {\n // Only run once to initialize\n if (!listIds || lastParamsRef.current) {\n return undefined;\n }\n\n const { newViewportIds } = getViewportSlice(listIds, LoadMoreDirection.Forwards, listSlice, listIds[0]);\n return newViewportIds;\n })());\n\n const forceUpdate = useForceUpdate();\n\n if (isDisabled) {\n lastParamsRef.current = {};\n }\n\n const prevListIds = usePrevious(listIds);\n const prevIsDisabled = usePrevious(isDisabled);\n if (listIds && !isDisabled && (listIds !== prevListIds || isDisabled !== prevIsDisabled)) {\n const { offsetId = listIds[0], direction = LoadMoreDirection.Forwards } = lastParamsRef.current || {};\n const { newViewportIds } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (!viewportIdsRef.current || !areSortedArraysEqual(viewportIdsRef.current, newViewportIds)) {\n viewportIdsRef.current = newViewportIds;\n }\n }\n\n const getMore: GetMore = useCallback(({\n direction,\n noScroll,\n }: { direction: LoadMoreDirection; noScroll?: boolean }) => {\n const viewportIds = viewportIdsRef.current;\n\n const offsetId = viewportIds\n ? direction === LoadMoreDirection.Backwards ? viewportIds[viewportIds.length - 1] : viewportIds[0]\n : undefined;\n\n if (!listIds) {\n if (loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n\n return;\n }\n\n if (!noScroll) {\n lastParamsRef.current = { ...lastParamsRef.current, direction, offsetId };\n }\n\n const {\n newViewportIds, areSomeLocal, areAllLocal,\n } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (areSomeLocal && !(viewportIds && areSortedArraysEqual(viewportIds, newViewportIds))) {\n viewportIdsRef.current = newViewportIds;\n forceUpdate();\n }\n\n if (!areAllLocal && loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n }, [listIds, listSlice, loadMoreBackwards, forceUpdate]);\n\n return isDisabled ? [listIds] : [viewportIdsRef.current, getMore];\n};\n\nfunction getViewportSlice(\n sourceIds: ListId[],\n direction: LoadMoreDirection,\n listSlice: number,\n offsetId?: ListId,\n) {\n const { length } = sourceIds;\n const index = offsetId ? sourceIds.indexOf(offsetId) : 0;\n const isForwards = direction === LoadMoreDirection.Forwards;\n const indexForDirection = isForwards ? index : (index + 1) || length;\n const from = Math.max(0, indexForDirection - listSlice);\n const to = indexForDirection + listSlice - 1;\n const newViewportIds = sourceIds.slice(Math.max(0, from), to + 1);\n\n let areSomeLocal;\n let areAllLocal;\n switch (direction) {\n case LoadMoreDirection.Forwards:\n areSomeLocal = indexForDirection > 0;\n areAllLocal = from >= 0;\n break;\n case LoadMoreDirection.Backwards:\n areSomeLocal = indexForDirection < length;\n areAllLocal = to <= length - 1;\n break;\n }\n\n return { newViewportIds, areSomeLocal, areAllLocal };\n}\n\nexport default useInfiniteScroll;\n","import { useEffect } from '../lib/teact/teact';\n\nimport { ApiMediaFormat } from '../api/types';\n\nimport * as mediaLoader from '../util/mediaLoader';\nimport useForceUpdate from './useForceUpdate';\n\nconst useMedia = (\n mediaHash: string | false | undefined,\n noLoad = false,\n mediaFormat = ApiMediaFormat.BlobUrl,\n cacheBuster?: number,\n delay?: number | false,\n) => {\n const mediaData = mediaHash ? mediaLoader.getFromMemory(mediaHash) : undefined;\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!noLoad && mediaHash && !mediaData) {\n const startedAt = Date.now();\n\n mediaLoader.fetch(mediaHash, mediaFormat).then(() => {\n const spentTime = Date.now() - startedAt;\n if (!delay || spentTime >= delay) {\n forceUpdate();\n } else {\n setTimeout(forceUpdate, delay - spentTime);\n }\n });\n }\n }, [noLoad, mediaHash, mediaData, mediaFormat, cacheBuster, forceUpdate, delay]);\n\n return mediaData;\n};\n\nexport default useMedia;\n","import { DEBUG } from '../config';\n\nexport const CLIPBOARD_ITEM_SUPPORTED = navigator.clipboard && window.ClipboardItem;\n\nconst textCopyEl = document.createElement('textarea');\ntextCopyEl.setAttribute('readonly', '');\ntextCopyEl.tabIndex = -1;\ntextCopyEl.className = 'visually-hidden';\n\nexport const copyTextToClipboard = (str: string): void => {\n textCopyEl.value = str;\n document.body.appendChild(textCopyEl);\n const selection = document.getSelection();\n\n if (selection) {\n // Store previous selection\n const rangeToRestore = selection.rangeCount > 0 && selection.getRangeAt(0);\n textCopyEl.select();\n document.execCommand('copy');\n // Restore the original selection\n if (rangeToRestore) {\n selection.removeAllRanges();\n selection.addRange(rangeToRestore);\n }\n }\n\n document.body.removeChild(textCopyEl);\n};\n\nexport const copyImageToClipboard = (imageUrl?: string) => {\n if (!imageUrl) return;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const imageEl = new Image();\n imageEl.onload = (e: Event) => {\n if (ctx && e.currentTarget) {\n const img = e.currentTarget as HTMLImageElement;\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n canvas.toBlob(copyBlobToClipboard, 'image/png', 1);\n }\n };\n\n imageEl.src = imageUrl;\n};\n\nasync function copyBlobToClipboard(pngBlob: Blob | null) {\n if (!pngBlob || !CLIPBOARD_ITEM_SUPPORTED) {\n return;\n }\n\n try {\n await navigator.clipboard.write?.([\n new ClipboardItem({\n [pngBlob.type]: pngBlob,\n }),\n ]);\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n}\n","// Used before applying CSS transition\nexport default function forceReflow(element: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n element.offsetWidth;\n}\n","import { IS_IOS } from './environment';\nimport forceReflow from './forceReflow';\n\nconst resetScroll = (container: HTMLDivElement, scrollTop?: number) => {\n if (IS_IOS) {\n container.style.overflow = 'hidden';\n }\n\n if (scrollTop !== undefined) {\n container.scrollTop = scrollTop;\n }\n\n if (IS_IOS) {\n container.style.overflow = '';\n }\n};\n\n// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1264266\nexport function patchChromiumScroll(element: HTMLElement) {\n element.style.display = 'none';\n forceReflow(element);\n element.style.display = '';\n}\n\nexport default resetScroll;\n","import { DEBUG } from '../config';\n\nconst safePlay = (mediaEl: HTMLMediaElement) => {\n mediaEl.play().catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err, mediaEl);\n }\n });\n};\n\nexport default safePlay;\n"],"names":["lottiePromise","RLottie","async","ensureLottie","default","setTimeout","memo","className","id","animationData","play","playSegment","speed","noLoop","size","quality","isLowPriority","color","forceOnHeavyAnimation","onLoad","onEnded","animation","setAnimation","useState","container","useRef","wasPlaying","isFrozen","isFirstRender","playRef","current","playSegmentRef","useEffect","exec","newAnimation","setSpeed","then","fastRaf","setColor","destroy","playAnimation","useCallback","shouldRestart","goToAndPlay","pauseAnimation","pause","freezeAnimation","isPlaying","unfreezeAnimation","unfreezeAnimationOnRaf","changeData","useHeavyAnimationCheck","useBackgroundMode","fullClassName","buildClassName","style","undefined","ref","chat","user","photo","userStatus","text","isSavedMessages","lastSyncTime","onClick","isDeleted","isDeletedUser","isReplies","isChatWithRepliesBot","imageHash","getChatAvatarHash","blobUrl","useMedia","ApiMediaFormat","hasBlobUrl","Boolean","transitionClassNames","useShowTransition","lang","useLang","content","src","alt","decoding","userFullName","getUserFullName","getFirstLetters","title","getChatTitle","isUserId","isOnline","isUserOnline","getUserColorKey","hasImage","handleClick","e","senderId","IS_TEST","renderText","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","Peach","Eggplant","Cumshot","JoinRequest","Invite","getAnimationData","name","path","replace","window","location","origin","mediaLoader","isOpen","onClose","onCloseAnimationEnd","header","textParts","confirmLabel","confirmHandler","confirmIsDestructive","isButtonsInOneRow","children","onEnter","split","map","textPart","isText","DEFAULT_LIST_SELECTOR","DEFAULT_PRELOAD_BACKWARDS","DEFAULT_SENSITIVE_AREA","onLoadMore","onScroll","onKeyDown","items","itemSelector","preloadBackwards","sensitiveArea","withAbsolutePositioning","maxHeight","noScrollRestore","noScrollRestoreOnTop","noFastList","cacheBuster","containerRef","stateRef","loadMoreBackwards","loadMoreForwards","useMemo","debounce","noScroll","direction","LoadMoreDirection","length","scrollHeight","clientHeight","useLayoutEffect","state","newScrollTop","listItemElements","querySelectorAll","currentAnchor","Array","from","includes","scrollTop","getBoundingClientRect","top","currentAnchorTop","nextAnchor","resetScroll","isScrollTopJustUpdated","handleScroll","listLength","offsetHeight","isNearTop","offsetTop","isNearBottom","isUpdated","nextAnchorTop","newAnchorTop","offsetParent","teactFastList","IS_ANDROID","dialogRef","hasCloseButton","noBackdrop","shouldSkipHistoryAnimations","shouldRender","modalRef","captureKeyboardListeners","onEsc","element","handleKeyDown","key","preventDefault","stopPropagation","focusableElements","currentFocusedIndex","findIndex","em","isSameNode","document","activeElement","newFocusedIndex","shiftKey","focus","addEventListener","removeEventListener","trapFocus","forceClose","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","Portal","tabIndex","role","Button","round","ariaLabel","containerId","elementRef","createElement","querySelector","add","appendChild","TeactDOM","removeChild","onBlur","onFocus","hasFocus","useCurrentOrPrev","shouldSkipUndefined","shouldForceCurrent","prev","usePrevious","getViewportSlice","sourceIds","listSlice","offsetId","index","indexOf","indexForDirection","Math","max","to","newViewportIds","slice","areSomeLocal","areAllLocal","listIds","isDisabled","lastParamsRef","viewportIdsRef","forceUpdate","useForceUpdate","prevListIds","prevIsDisabled","areSortedArraysEqual","getMore","viewportIds","mediaHash","noLoad","mediaFormat","delay","mediaData","startedAt","Date","now","spentTime","CLIPBOARD_ITEM_SUPPORTED","navigator","clipboard","ClipboardItem","textCopyEl","setAttribute","copyTextToClipboard","str","value","selection","getSelection","rangeToRestore","rangeCount","getRangeAt","select","execCommand","removeAllRanges","addRange","copyImageToClipboard","imageUrl","canvas","ctx","getContext","imageEl","Image","onload","currentTarget","img","width","height","drawImage","toBlob","copyBlobToClipboard","pngBlob","write","type","error","DEBUG","console","forceReflow","offsetWidth","patchChromiumScroll","display","IS_IOS","overflow","mediaEl","catch","err","warn"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index d8756314a..414e41884 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1 @@ -Telegram
\ No newline at end of file +Telegram
\ No newline at end of file diff --git a/dist/main.1506acf7f7cfa5302ad7.js b/dist/main.1506acf7f7cfa5302ad7.js deleted file mode 100644 index 48df1c8e5..000000000 --- a/dist/main.1506acf7f7cfa5302ad7.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{"use strict";var e,t,n,r,o,d,a={1226:(e,t,n)=>{n.d(t,{t9:()=>c,u3:()=>l,g8:()=>i});var r=n(3716),o=n(6926),d=n(9118);let a;const u=new Map,s=new Map;function i(e,t){return a||(r.eM&&console.log(">>> START LOAD WORKER"),a=new Worker(new URL(n.p+n.u(626),n.b)),function(e){a.addEventListener("message",(t=>{let{data:n}=t;if("update"===n.type)e(n.update);else if("methodResponse"===n.type){const e=u.get(n.messageId);e&&(n.error?e.reject(n.error):e.resolve(n.response))}else if("methodCallback"===n.type){var r,o;null===(r=u.get(n.messageId))||void 0===r||null===(o=r.callback)||void 0===o||o.call(r,...n.callbackArgs)}else if("unhandledError"===n.type){var d;throw new Error(null===(d=n.error)||void 0===d?void 0:d.message)}}))}(e),"iOS"===t.platform&&window.addEventListener("focus",(()=>{m(),setTimeout((()=>m()),1e3)}))),f({type:"initApi",args:[t]})}function c(e){if(!a)return void(r.eM&&console.warn("API is not initialized"));for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o{try{await d}catch(e){}})(),d}function l(e){e.isCanceled=!0;const{messageId:t}=s.get(e)||{};t&&a.postMessage({type:"cancelProgress",messageId:t})}function f(e){const t=(0,o.Z)(u),n={messageId:t,...e},r={messageId:t},d=new Promise(((e,t)=>{Object.assign(r,{resolve:e,reject:t})}));if("args"in n&&"function"==typeof n.args[1]){const e=n.args.pop();r.callback=e,s.set(e,r)}return u.set(t,r),d.catch((()=>{})).finally((()=>{u.delete(t),r.callback&&s.delete(r.callback)})),a.postMessage(n),d}const h=Date.now();async function m(){try{await Promise.race([f({type:"ping"}),(0,d.wO)(150).then((()=>Promise.reject(new Error("HEALTH_CHECK_TIMEOUT"))))])}catch(e){console.error(e),Date.now()-h>=5e3&&window.location.reload()}}},6137:(e,t,n)=>{n.d(t,{Vv:()=>r.Vv,_f:()=>r._f,_Q:()=>r._Q,IU:()=>o.I});var r=n(4746),o=n(9077)},9077:(e,t,n)=>{let r;n.d(t,{I:()=>r}),function(e){e[e.BlobUrl=0]="BlobUrl",e[e.Lottie=1]="Lottie",e[e.Progressive=2]="Progressive",e[e.Stream=3]="Stream"}(r||(r={}))},4746:(e,t,n)=>{let r;n.d(t,{Vv:()=>r,_f:()=>o,_Q:()=>d}),function(e){e.Bold="MessageEntityBold",e.Blockquote="MessageEntityBlockquote",e.BotCommand="MessageEntityBotCommand",e.Cashtag="MessageEntityCashtag",e.Code="MessageEntityCode",e.Email="MessageEntityEmail",e.Hashtag="MessageEntityHashtag",e.Italic="MessageEntityItalic",e.MentionName="MessageEntityMentionName",e.Mention="MessageEntityMention",e.Phone="MessageEntityPhone",e.Pre="MessageEntityPre",e.Strike="MessageEntityStrike",e.TextUrl="MessageEntityTextUrl",e.Url="MessageEntityUrl",e.Underline="MessageEntityUnderline",e.Spoiler="MessageEntitySpoiler",e.Unknown="MessageEntityUnknown"}(r||(r={}));const o=-1,d="MESSAGE_DELETED"},88:(e,t,n)=>{n.d(t,{Z:()=>h});var r=n(4050),o=n(5116);const d=36,a=2147483647;function u(e,t,n){let r;for(e=n?Math.floor(e/700):e>>1,e+=Math.floor(e/t),r=0;e>455;r+=d)e=Math.floor(e/35);return Math.floor(r+36*e/(e+38))}function s(e,t){const n=[],r=[],o=e.length;let s,i,c,l,f,h,m,p,g,v,y,b,I;for(s=128,c=0,l=72,f=e.lastIndexOf("-"),f<0&&(f=0),h=0;h=128)throw new RangeError("Illegal input >= 0x80");n.push(e.charCodeAt(h))}for(m=f>0?f+1:0;m=o)throw RangeError("punycode_bad_input(1)");if(y=(w=e.charCodeAt(m++))-48<10?w-22:w-65<26?w-65:w-97<26?w-97:d,y>=d)throw RangeError("punycode_bad_input(2)");if(y>Math.floor((a-c)/g))throw RangeError("punycode_overflow(1)");if(c+=y*g,b=v<=l?1:v>=l+26?26:v-l,yMath.floor(a/(d-b)))throw RangeError("punycode_overflow(2)");g*=d-b}if(i=n.length+1,l=u(c-p,i,0===p),Math.floor(c/i)>a-s)throw RangeError("punycode_overflow(3)");s+=Math.floor(c/i),c%=i,t&&r.splice(c,0,e.charCodeAt(m-1)-65<26),n.splice(c,0,s),c++}var w;if(t)for(c=0,I=n.length;c{const t=[];let n=0;const r=e.length;let o;for(;n65535&&(o-=65536,t.push(String.fromCharCode(o>>>10&1023|55296)),o=56320|1023&o),t.push(String.fromCharCode(o))}return t.join("")})(n)}var i=n(3716),c=n(6752),l=n(1396);function f(e){if(!e)return;const t=(0,l.X)(e);if(t)try{let e=decodeURI(t);const n=e.match(/^https?:\/\/([^/:?#]+)(?:[/:?#]|$)/i);if(!n)return;const r=n[1];return e=e.replace(r,function(e){const t=e.split("."),n=[];for(let e=0;e{let{url:t,text:n,className:d,children:a,isRtl:u}=e;const{toggleSafeLinkModal:s,openTelegramLink:h}=(0,o.uC)(),m=a||n,p=t!==m,g=(0,r.I4)((e=>e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||!t||!t.match(i.FS)&&!t.match(i.g$)?!p||(s({url:t}),e.preventDefault(),!1):(e.preventDefault(),h({url:t}),!1)),[p,h,s,t]);if(!t)return;const v=(0,c.Z)(d||"text-entity-link",n.length>50&&"long-word-break-all");return r.ZP.createElement("a",{href:(0,l.X)(t),title:f(t),target:"_blank",rel:"noopener noreferrer",className:v,onClick:g,dir:u?"rtl":"auto"},m)}))},5376:(e,t,n)=>{n.d(t,{yW:()=>r,K2:()=>o,mD:()=>d,Oh:()=>a,v6:()=>u});function r(e){return e>536870912?`${(e/1073741824).toFixed(1)} GB`:e>524288?`${(e/1048576).toFixed(1)} MB`:`${(e/1024).toFixed(1)} KB`}function o(e){const{fileName:t,mimeType:n}=e;return d(t,n)}function d(e,t){return e&&-1!==e.indexOf(".")?e.split(".").pop():t.split("/").pop()}function a(e){switch(e){case"apk":case"xls":case"xlsx":return"green";case"zip":case"rar":case"7z":case"tar":case"gz":case"ppt":case"pptx":return"orange";case"pdf":case"xps":return"red";default:return"default"}}function u(e){return Boolean(e.previewBlobUrl||e.thumbnail)}},4784:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(3681);const o=new RegExp(`^(?:${r.Z.source})+$`,""),d=e=>{if(e.length>24)return!1;if(!Boolean(e.match(o)))return!1;let t=0;for(;r.Z.exec(e);)if(t++,t>3)return r.Z.lastIndex=0,!1;return t}},8005:(e,t,n)=>{n.d(t,{D:()=>y});var r=n(4050),o=n(8415),d=n(8035),a=n(9937),u=n(996),s=n(2340),i=n(6752),c=n(8033),l=n(5116);const f=e=>{let{className:t,sender:n,children:o}=e;const{openChat:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({id:n.id})}),[n,d]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("UserLink",t),onClick:a},o):o},h=e=>{let{className:t,message:n,children:o}=e;const{focusMessage:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({chatId:n.chatId,messageId:n.id})}),[d,n]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("MessageLink",t),onClick:a},o):o},m=e=>{let{className:t,chatId:n,children:o}=e;const{openChat:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({id:n})}),[n,d]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("ChatLink",t),onClick:a},o):o},p=e=>{let{className:t,groupCall:n,children:o}=e;const{joinGroupCall:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({id:n.id,accessHash:n.accessHash})}),[n,d]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("GroupCallLink",t),onClick:a},o):o},g=32,v=" ";function y(e,t,n,r,o,d,u){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};if(!t.content.action)return[];const{text:i,translationValues:c,amount:l,currency:f,call:h}=t.content.action,m=[],p=s.asPlainText||s.asTextWithSpoilers,g="Chat.Service.Group.UpdatedPinnedMessage1"!==i||d?i:"Message.PinnedGenericMessage";let y,M=e(g,null!=c&&c.length?c:void 0);return M.includes("%payment_amount%")&&(y=P(M,"%payment_amount%",(0,a.x)(l,f,e.code)),M=y.pop(),m.push(...y)),y=P(M,"%action_origin%",n?C(n,p)||v:r?S(e,r,p)||v:"User"),M=y.pop(),m.push(...y),y=P(M,"%target_user%",o?o.map((e=>C(e,p))).filter(Boolean):"User"),M=y.pop(),m.push(...y),y=P(M,"%message%",d?I(e,d,s):"a message"),M=y.pop(),m.push(...y),y=P(M,"%product%",d?b(d):"a product"),M=y.pop(),m.push(...y),y=P(M,"%target_chat%",u?E(u,p):"another chat"),m.push(...y),s.asPlainText?m.join("").trim():h?w(h,m):m}function b(e){return e.content&&e.content.invoice?e.content.invoice.title:"a product"}function I(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{asPlainText:d,asTextWithSpoilers:a}=n;if(d)return(0,o.MK)(e,t,void 0,g);const s=(0,u.e)(e,t,void 0,void 0,g);return a?r.ZP.createElement("span",null,s):r.ZP.createElement(h,{className:"action-link",message:t},s)}function w(e,t){return r.ZP.createElement(p,{groupCall:e},t)}function C(e,t){const n=(0,d.Z)((0,o.Js)(e),g);return t?n:r.ZP.createElement(f,{className:"action-link",sender:e},e&&(0,s.Z)(n))}function S(e,t,n){const a=(0,d.Z)((0,o.U)(e,t),g);return n?a:r.ZP.createElement(m,{className:"action-link",chatId:t.id},t&&(0,s.Z)(a))}function E(e,t){const n="another chat";return t?n:r.ZP.createElement(m,{className:"action-link",chatId:e},n)}function P(e,t,n){const r=e.indexOf(t);if(r<0||!n)return[e];const o=[];return o.push(e.substring(0,r)),Array.isArray(n)?n.forEach(((e,t)=>{o.push(e),t+1{n.d(t,{X:()=>s,e:()=>i});var r=n(6137),o=n(8415),d=n(2340),a=n(8974),u=n(8035);function s(e,t,n,r,d){const{text:s,entities:i}=e.content.text||{};if(!s){const t=(0,o.UD)(e);return t?[(0,u.Z)(t,d)]:void 0}return(0,a.H)((0,u.Z)(s,d),i,t,n,void 0,e.id,r)}function i(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3?arguments[3]:void 0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:o.lN,{entities:c}=t.content.text||{};const l=null==c?void 0:c.some((e=>e.type===r.Vv.Spoiler));if(!l){const r=(0,u.Z)((0,o.MK)(e,t,n),i);return a?(0,d.Z)(r,["emoji","highlight"],{highlight:a}):(0,d.Z)(r)}const f=!n&&(0,o.Eb)(t),h=f?`${f} `:"",m=s(t,a,void 0,!0,i),p=(0,o.Kk)(e,t,m);return[h,...Array.isArray(p)?p:[p]].filter(Boolean)}},2340:(e,t,n)=>{n.d(t,{Z:()=>m});var r=n(4050),o=n(3681),d=n(3716),a=n(7361),u=n(4284),s=n(6752),i=n(782),c=n(7373),l=n(88);const f=/^[\d\wа-яё]$/i,h=/(\*\*|__).+?\1/g;function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["emoji"],n=arguments.length>2?arguments[2]:void 0;return"string"!=typeof e?[e]:(0,i.oA)(t.reduce(((e,t)=>{switch(t){case"escape_html":return p(e);case"hq_emoji":return o.Z.lastIndex=0,g(e,"big","jsx");case"emoji":return o.Z.lastIndex=0,g(e,"small","jsx");case"emoji_html":return o.Z.lastIndex=0,g(e,"small","html");case"br":return v(e,"jsx");case"br_html":return v(e,"html");case"highlight":return y(e,n.highlight);case"links":return I(e);case"simple_markdown":return w(e,"jsx");case"simple_markdown_html":return w(e,"html")}return e}),[e]))}function p(e){const t=document.createElement("div");return e.reduce(((e,n)=>"string"!=typeof n?(e.push(n),e):(t.innerText=n,e.push(t.innerHTML),e)),[])}function g(e,t,n){return a.op?e:e.reduce(((e,d)=>{if("string"!=typeof d)return e.push(d),e;const a=(d=(0,u.g6)(d)).split(o.Z),i=d.match(o.Z)||[];return e.push(a[0]),i.reduce(((e,d,i)=>{const c=(0,u.U_)((0,o.l)(d));if(!c)return e;const l=(0,s.Z)("emoji","small"===t&&"emoji-small");"jsx"===n&&e.push(r.ZP.createElement("img",{className:l,src:`./img-apple-${"big"===t?"160":"64"}/${c}.png`,alt:d})),"html"===n&&e.push(`${d}`);const f=2*i+2;return a[f]&&e.push(a[f]),e}),e)}),[])}function v(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n)return e.push(n),e;const o=n.split(/\r\n|\r|\n/g).reduce(((e,n,o,d)=>{const a=n.trimLeft(),u=n.length-a.length;return e.push(String.fromCharCode(160).repeat(u)+a),o!==d.length-1&&e.push("jsx"===t?r.ZP.createElement("br",null):"
"),e}),[]);return[...e,...o]}),[])}function y(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n||!t)return e.push(n),e;const o=n.toLowerCase(),d=o.indexOf(t.toLowerCase()),a=o[d+t.length];if(d<0||a&&a.match(f))return e.push(n),e;const u=[];return u.push(n.substring(0,d)),u.push(r.ZP.createElement("span",{className:"matching-text-highlight"},n.substring(d,d+t.length))),u.push(n.substring(d+t.length)),[...e,...u]}),[])}const b=new RegExp(`${d.FM}|${d.uW}`,"ig");function I(e){return e.reduce(((e,t)=>{if("string"!=typeof t)return e.push(t),e;const n=t.match(b);if(!n||!n.length)return e.push(t),e;const o=[];let d=n.shift(),a=0;for(;d;){const e=t.indexOf(d,a);o.push(t.substring(a,e)),d.startsWith("@")?o.push(r.ZP.createElement(c.Z,{username:d},d)):(d.endsWith("?")&&(d=d.slice(0,d.length-1)),o.push(r.ZP.createElement(l.Z,{text:d,url:d}))),a=e+d.length,d=n.shift()}return o.push(t.substring(a)),[...e,...o]}),[])}function w(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n)return e.push(n),e;const o=n.split(h),d=n.match(h)||[];return e.push(o[0]),d.reduce(((e,n,d)=>{"jsx"===t?e.push(n.startsWith("**")?r.ZP.createElement("b",null,n.replace(/\*\*/g,"")):r.ZP.createElement("i",null,n.replace(/__/g,""))):e.push(n.startsWith("**")?`${n.replace(/\*\*/g,"")}`:`${n.replace(/__/g,"")}`);const a=2*d+2;return o[a]&&e.push(o[a]),e}),e)}),[])}},8974:(e,t,n)=>{n.d(t,{z:()=>p,H:()=>m});var r=n(4050),o=n(5116),d=n(6137),a=n(2340),u=n(7373),s=n(88),i=n(6752),c=n(706);const l=new Map,f=(0,i.y)("Spoiler"),h=(0,r.X$)((e=>{let{children:t,messageId:n}=e;const o=(0,r.sO)(null),[d,a,u]=(0,c.Z)(),s=(0,r.I4)((e=>{var t;e.preventDefault(),e.stopPropagation(),null===(t=l.get(n))||void 0===t||t.forEach((e=>e.reveal()));const r=o.current.innerText.length,d=1e3*Math.round(r/23),a=Math.max(5e3,Math.min(d,6e4));setTimeout((()=>{var e;null===(e=l.get(n))||void 0===e||e.forEach((e=>e.conceal())),u()}),a)}),[u,n]);return(0,r.d4)((()=>{if(n)return l.has(n)?l.get(n).push({reveal:a,conceal:u}):l.set(n,[{reveal:a,conceal:u}]),()=>{l.delete(n)}}),[u,s,d,n,a]),r.ZP.createElement("span",{className:f("&",!d&&"concealed",!d&&Boolean(n)&&"animated"),onClick:n&&!d?s:void 0},r.ZP.createElement("span",{className:f("content"),ref:o},t))}));function m(e,t,n,o,i,c,l){if(!t||!t.length)return g(e,n,o,i,l);const f=[];let m=!1;const p=function(e){const t=new Set,n=[];return e.forEach(((r,o)=>{if(t.has(o))return;const d=v(r,o,e,t);d&&(d.organizedIndexes.forEach((e=>{t.add(e)})),n.push(d))})),n}(t);function w(t,f,p,v){const C=[],{entity:S,nestedEntities:E}=p,{offset:P,length:M,type:A}=S;let k=e.substring(t,P);const T=k.length;k&&(m&&k.length>0&&"\n"===k[0]&&(k=k.substr(1),m=!1),k&&C.push(...g(k,n,o,i,l)));const N=t+T,L=N+M;let R=e.substring(P,P+M);const x=[];if(m&&R.length>0&&"\n"===R[0]&&(R=R.substr(1),m=!1),A===d.Vv.Pre&&(m=!0),E.length){let e=N;E.forEach(((t,n)=>{const{renderResult:r,entityEndIndex:o}=w(e,L,t,n===E.length-1);x.push(...r),e=o}))}const Z=i?function(e,t,n){const r="string"==typeof t&&t,o=n.length?n.join(""):(0,a.Z)(t,["escape_html","emoji_html","br_html"]).join("");if(!r)return o;switch(e.type){case d.Vv.Bold:return`${o}`;case d.Vv.Italic:return`${o}`;case d.Vv.Underline:return`${o}`;case d.Vv.Code:return`${o}`;case d.Vv.Pre:return`\`\`\`
${o}
\`\`\``;case d.Vv.Strike:return`${o}`;case d.Vv.MentionName:return`${o}`;case d.Vv.Url:case d.Vv.TextUrl:return`${o}`;case d.Vv.Spoiler:return`${o}
`;default:return o}}(S,R,x):function(e,t,n,o,a,i){const c="string"==typeof t&&t,l=n.length?n:t;function f(){return g(l,o,void 0,void 0,i)}if(!c)return f();if(i){const t=f();return e.type===d.Vv.Spoiler?r.ZP.createElement(h,null,t):t}switch(e.type){case d.Vv.Bold:return r.ZP.createElement("strong",null,f());case d.Vv.Blockquote:return r.ZP.createElement("blockquote",null,f());case d.Vv.BotCommand:return r.ZP.createElement("a",{onClick:b,className:"text-entity-link",dir:"auto"},f());case d.Vv.Hashtag:case d.Vv.Cashtag:return r.ZP.createElement("a",{onClick:I,className:"text-entity-link",dir:"auto"},f());case d.Vv.Code:return r.ZP.createElement("code",{className:"text-entity-code"},f());case d.Vv.Email:return r.ZP.createElement("a",{href:`mailto:${c}`,target:"_blank",rel:"noopener noreferrer",className:"text-entity-link",dir:"auto"},f());case d.Vv.Italic:return r.ZP.createElement("em",null,f());case d.Vv.MentionName:return r.ZP.createElement(u.Z,{userId:e.userId},f());case d.Vv.Mention:return r.ZP.createElement(u.Z,{username:c},f());case d.Vv.Phone:return r.ZP.createElement("a",{href:`tel:${c}`,className:"text-entity-link",dir:"auto"},f());case d.Vv.Pre:return r.ZP.createElement("pre",{className:"text-entity-pre"},f());case d.Vv.Strike:return r.ZP.createElement("del",null,f());case d.Vv.TextUrl:case d.Vv.Url:return r.ZP.createElement(s.Z,{url:y(c,e),text:c},f());case d.Vv.Underline:return r.ZP.createElement("ins",null,f());case d.Vv.Spoiler:return r.ZP.createElement(h,{messageId:a},f());default:return f()}}(S,R,x,n,c,l);if(Array.isArray(Z)?C.push(...Z):C.push(Z),v&&L0&&"\n"===t[0]&&(t=t.substring(1)),t&&C.push(...g(t,n,o,i,l))}return{renderResult:C,entityEndIndex:L}}let C=0;return p.forEach(((t,n)=>{const{renderResult:r,entityEndIndex:o}=w(C,e.length,t,n===p.length-1);f.push(...r),C=o})),f}function p(e){const{text:t,entities:n}=e||{};if(!t)return"";const r=m(t,n,void 0,void 0,!0);return Array.isArray(r)?r.join(""):r}function g(e,t,n,r,o){if(Array.isArray(e)){const d=[];return e.forEach((e=>{d.push(...g(e,t,n,r,o))})),d}if(r)return(0,a.Z)(e,["escape_html","emoji_html","br_html"]);const d=[n?"hq_emoji":"emoji"];return o||d.push("br"),t?(0,a.Z)(e,d.concat("highlight"),{highlight:t}):(0,a.Z)(e,d)}function v(e,t,n,r){const{offset:o,length:d}=e,a=new Set([t]);if(r.has(t))return;const u=[];return n.filter(((e,n)=>n>t&&e.offset>=o&&e.offsetv(e,n.indexOf(e),n,r))).filter(Boolean).forEach((e=>{let t=!1;e.organizedIndexes.forEach((e=>{t||a.has(e)||(t=!0),a.add(e)})),t&&u.push(e)})),{entity:e,organizedIndexes:a,nestedEntities:u}}function y(e,t){const{type:n,url:r}=t;return n===d.Vv.TextUrl&&r?r:e}function b(e){(0,o.uC)().sendBotCommand({command:e.currentTarget.innerText})}function I(e){(0,o.uC)().setLocalTextSearchQuery({query:e.currentTarget.innerText}),(0,o.uC)().searchTextMessagesLocal()}},386:(e,t,n)=>{n.d(t,{q:()=>d,b:()=>a});var r=n(3716),o=n(7361);function d(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o.cj||!document.activeElement||document.activeElement.id!==r.R2||!t&&e.target!==e.currentTarget||e.preventDefault()}function a(e){d(e,!0)}},7373:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(5116),d=n(9066);const a=(0,o.c$)(((e,t)=>{let{userId:n}=t;return{userOrChat:n?(0,d.dy)(e,n):void 0}}))((e=>{let{username:t,userOrChat:n,children:d}=e;const{openChat:a,openChatByUsername:u}=(0,o.uC)();return r.ZP.createElement("a",{onClick:()=>{n?a({id:n.id}):t&&u({username:t.substring(1)})},className:"text-entity-link",dir:"auto"},d)}))},231:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(4050),o=n(6752),d=n(9204),a=n(8512);const u=e=>{let{ref:t,type:n="button",onClick:u,onContextMenu:s,onMouseDown:i,onMouseEnter:c,onMouseLeave:l,onFocus:f,children:h,size:m="default",color:p="primary",backgroundImage:g,className:v,round:y,pill:b,fluid:I,isText:w,isLoading:C,ariaLabel:S,href:E,download:P,disabled:M,ripple:A,faded:k,tabIndex:T,isRtl:N,withClickPropagation:L}=e,R=(0,r.sO)(null);t&&(R=t);const[x,Z]=(0,r.eJ)(!1),B=(0,o.Z)("Button",v,m,p,y&&"round",b&&"pill",I&&"fluid",M&&"disabled",w&&"text",C&&"loading",A&&"has-ripple",k&&"faded",x&&"clicked",g&&"with-image"),O=(0,r.I4)((e=>{!M&&u&&u(e),Z(!0),setTimeout((()=>{Z(!1)}),400)}),[M,u]),F=(0,r.I4)((e=>{L||e.preventDefault(),!M&&i&&i(e)}),[i,M,L]);return E?r.ZP.createElement("a",{ref:R,className:B,href:E,title:S,download:P,tabIndex:T,dir:N?"rtl":void 0},h,!M&&A&&r.ZP.createElement(a.Z,null)):r.ZP.createElement("button",{ref:R,type:n,className:B,onClick:O,onContextMenu:s,onMouseDown:F,onMouseEnter:c&&!M?c:void 0,onMouseLeave:l&&!M?l:void 0,onFocus:f&&!M?f:void 0,"aria-label":S,title:S,tabIndex:T,dir:N?"rtl":void 0,style:g?`background-image: url(${g})`:void 0},C?r.ZP.createElement("div",null,r.ZP.createElement("span",{dir:N?"auto":void 0},"Please wait..."),r.ZP.createElement(d.Z,{color:w?"blue":"white"})):h,!M&&A&&r.ZP.createElement(a.Z,null))}},4605:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(4050),o=n(6752),d=n(9107),a=n(2340),u=n(9204);const s=(0,r.X$)((e=>{let{id:t,name:n,value:s,label:i,subLabel:c,checked:l,disabled:f,round:h,blocking:m,isLoading:p,onChange:g,onCheck:v}=e;const y=(0,d.Z)(),b=(0,r.I4)((e=>{g&&g(e),v&&v(e.currentTarget.checked)}),[g,v]),I=(0,o.Z)("Checkbox",f&&"disabled",h&&"round",p&&"loading",m&&"blocking");return r.ZP.createElement("label",{className:I,dir:y.isRtl?"rtl":void 0},r.ZP.createElement("input",{type:"checkbox",id:t,name:n,value:s,checked:l,disabled:f,onChange:b}),r.ZP.createElement("div",{className:"Checkbox-main"},r.ZP.createElement("span",{className:"label",dir:"auto"},(0,a.Z)(i)),c&&r.ZP.createElement("span",{className:"subLabel",dir:"auto"},(0,a.Z)(c))),p&&r.ZP.createElement(u.Z,null))}))},3106:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(2328);const d=e=>{let{trigger:t,className:n,children:d,positionX:a="left",positionY:u="top",footer:s,forceOpen:i,onOpen:c,onClose:l}=e;const f=(0,r.sO)(null),h=(0,r.sO)(null),[m,p]=(0,r.eJ)(!1);return r.ZP.createElement("div",{ref:h,className:`DropdownMenu ${n||""}`,onKeyDown:e=>{const t=f.current;if(!m||40!==e.keyCode||!t)return;const n=document.activeElement,r=Array.from(t.children);n&&-1!==r.indexOf(n)||r[0].focus()}},t({onTrigger:()=>{p(!m),m?l&&l():c&&c()},isOpen:m}),r.ZP.createElement(o.Z,{ref:f,containerRef:h,isOpen:m||Boolean(i),className:n||"",positionX:a,positionY:u,footer:s,autoClose:!0,onClose:()=>{p(!1),l&&l()},shouldSkipTransition:i},d))}},7687:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(6752),d=n(9107);const a=(0,r.X$)((e=>{let{ref:t,id:n,className:a,value:u,label:s,error:i,success:c,disabled:l,readOnly:f,placeholder:h,autoComplete:m,inputMode:p,maxLength:g,onChange:v,onInput:y,onKeyPress:b,onKeyDown:I,onBlur:w,onPaste:C}=e;const S=(0,d.Z)(),E=i||c||s,P=(0,o.Z)("input-group",u&&"touched",i?"error":c&&"success",l&&"disabled",f&&"disabled",E&&"with-label",a);return r.ZP.createElement("div",{className:P,dir:S.isRtl?"rtl":void 0},r.ZP.createElement("input",{ref:t,className:"form-control",type:"text",id:n,dir:"auto",value:u||"",placeholder:h,maxLength:g,autoComplete:m,inputMode:p,disabled:l,readOnly:f,onChange:v,onInput:y,onKeyPress:b,onKeyDown:I,onBlur:w,onPaste:C}),E&&r.ZP.createElement("label",{htmlFor:n},E))}))},8033:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(6752);const d=e=>{let{children:t,className:n,isRtl:d,onClick:a}=e;const u=(0,r.I4)((e=>{e.preventDefault(),a(e)}),[a]);return r.ZP.createElement("a",{href:"#",className:(0,o.Z)("Link",n),dir:d?"rtl":"auto",onClick:a?u:void 0},t)}},4288:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(9204),d=n(6752);const a=(0,r.X$)((e=>{let{color:t="blue",backgroundColor:n,onClick:a}=e;return r.ZP.createElement("div",{className:(0,d.Z)("Loading",a&&"interactive"),onClick:a},r.ZP.createElement(o.Z,{color:t,backgroundColor:n}))}))},2328:(e,t,n)=>{n.d(t,{Z:()=>h});var r=n(4050),o=n(1212),d=n(2313),a=n(8758),u=n(274),s=n(3989),i=n(6752),c=n(8674),l=n(6590),f=n(386);const h=e=>{let{ref:t,containerRef:n,isOpen:h,className:m,style:p,bubbleStyle:g,children:v,transformOriginX:y,transformOriginY:b,positionX:I="left",positionY:w="top",autoClose:C=!1,footer:S,noCloseOnBackdrop:E=!1,onCloseAnimationEnd:P,onClose:M,onMouseEnter:A,onMouseLeave:k,shouldSkipTransition:T}=e,N=(0,r.sO)(null);t&&(N=t);const L=n||N,{transitionClassNames:R}=(0,o.Z)(h,P,T,void 0,T);(0,r.d4)((()=>h&&M?(0,s.Z)(M):void 0),[h,M]),(0,l.ZP)(h,M,void 0,void 0,C),(0,u.Z)((e=>{let[t]=e;(h||!h&&!0===t)&&(0,c.YW)(200)}),[h]);const x=(0,d.Z)(N,h,C?M:void 0,void 0,!0);(0,a.Z)(h,L,E?void 0:M);const Z=(0,i.Z)("bubble menu-container custom-scroll",w,I,S&&"with-footer",R),B=void 0!==b?`${b}px`:void 0,O=void 0!==y?`${y}px`:void 0;return r.ZP.createElement("div",{className:(0,i.Z)("Menu no-selection",m),onKeyDown:h?x:void 0,onMouseEnter:A,onMouseLeave:h?k:void 0,style:p},h&&r.ZP.createElement("div",{className:"backdrop",onMouseDown:f.b}),r.ZP.createElement("div",{ref:N,className:Z,style:`transform-origin: ${O||I} ${B||w};${g||""}`,onClick:C?M:void 0},v,S&&r.ZP.createElement("div",{className:"footer"},S)))}},8964:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(6752),d=n(9107);const a=e=>{const{icon:t,className:n,children:a,onClick:u,href:s,download:i,disabled:c,destructive:l,ariaLabel:f}=e,h=(0,d.Z)(),m=(0,r.I4)((e=>{if(c||!u)return e.stopPropagation(),void e.preventDefault();u(e)}),[c,u]),p=(0,r.I4)((e=>{if(13===e.keyCode||32===e.keyCode)return c||!u?(e.stopPropagation(),void e.preventDefault()):void u(e)}),[c,u]),g=(0,o.Z)("MenuItem",n,c&&"disabled",l&&"destructive"),v=r.ZP.createElement(r.ZP.Fragment,null,t&&r.ZP.createElement("i",{className:`icon-${t}`,"data-char":t.startsWith("char-")?t.replace("char-",""):void 0}),a);return s?r.ZP.createElement("a",{tabIndex:0,className:g,href:s,download:i,"aria-label":f,title:f,target:s.startsWith(window.location.origin)?"_self":"_blank",rel:"noopener noreferrer",dir:h.isRtl?"rtl":void 0,onClick:u},v):r.ZP.createElement("div",{role:"button",tabIndex:0,className:g,onClick:m,onKeyDown:p,"aria-label":f,title:f,dir:h.isRtl?"rtl":void 0},v)}},8512:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(9118);const d=(0,r.X$)((()=>{const[e,t]=(0,r.eJ)([]),n=(0,r.Ye)((()=>(0,o.Ds)((()=>{t([])}),700,!1)),[]),d=(0,r.I4)((r=>{if(0!==r.button)return;const o=r.currentTarget,d=o.getBoundingClientRect(),a=o.offsetWidth/2;t([...e,{x:r.clientX-d.x-a/2,y:r.clientY-d.y-a/2,size:a}]),requestAnimationFrame((()=>{n()}))}),[e,n]);return r.ZP.createElement("div",{className:"ripple-container",onMouseDown:d},e.map((e=>{let{x:t,y:n,size:o}=e;return r.ZP.createElement("span",{style:`left: ${t}px; top: ${n}px; width: ${o}px; height: ${o}px;`})})))}))},9204:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(6752);const d=e=>{let{color:t="blue",backgroundColor:n}=e;return r.ZP.createElement("div",{className:(0,o.Z)("Spinner",t,n&&"with-background",`bg-${n}`)},r.ZP.createElement("div",null))}},3716:(e,t,n)=>{n.d(t,{Ti:()=>r,ou:()=>o,iC:()=>d,Ji:()=>a,eM:()=>u,ZT:()=>s,Cg:()=>i,S:()=>c,b_:()=>l,Vx:()=>f,sd:()=>h,Uh:()=>m,lO:()=>p,gJ:()=>g,Rk:()=>v,Cy:()=>y,lW:()=>b,SG:()=>I,lF:()=>w,fo:()=>C,ee:()=>S,by:()=>E,lo:()=>M,hT:()=>A,YQ:()=>k,rS:()=>T,t_:()=>N,Ov:()=>L,EN:()=>R,pn:()=>x,Hk:()=>Z,Vk:()=>B,mo:()=>O,qU:()=>F,ul:()=>D,Qx:()=>_,mw:()=>$,oB:()=>U,zy:()=>j,CX:()=>V,xS:()=>W,b6:()=>G,AR:()=>H,r_:()=>z,o_:()=>Q,R2:()=>K,nY:()=>J,QU:()=>q,jT:()=>Y,_m:()=>X,ks:()=>ee,l3:()=>te,u_:()=>ne,rO:()=>re,AE:()=>oe,AJ:()=>de,fK:()=>ae,V$:()=>ue,bK:()=>se,ck:()=>ie,xn:()=>ce,K7:()=>le,w7:()=>fe,z7:()=>he,qp:()=>me,Q:()=>pe,Mw:()=>ge,DC:()=>ve,Y7:()=>ye,yK:()=>be,K2:()=>Ie,bM:()=>we,ku:()=>Ce,zq:()=>Se,PM:()=>Ee,jV:()=>Pe,$E:()=>Me,pR:()=>Ae,kU:()=>ke,Y:()=>Te,Ng:()=>Ne,oG:()=>Le,wG:()=>Re,dI:()=>xe,VC:()=>Ze,FM:()=>Be,uW:()=>Oe,g$:()=>Fe,FS:()=>De,FD:()=>_e,aw:()=>$e,FV:()=>Ue,Nf:()=>je,WS:()=>Ve,DU:()=>We,EG:()=>Ge,t4:()=>He,sR:()=>ze,$O:()=>Qe,Bg:()=>Ke,vi:()=>Je,Db:()=>qe,mU:()=>Ye,p3:()=>Xe,It:()=>et,Vv:()=>tt,g:()=>nt,Ro:()=>rt,aC:()=>ot,LH:()=>dt});const r="Telegram",o=" [Inactive]",d="Telegram WebZ",a="1.33.4",u=!1,s=!1,i=!1,c="Shoot!\nSomething went wrong, please see the error details in Dev Tools Console.",l="user_auth",f="GramJs:sessionId",h=!1,m="tt-global-state",p=500,g=200,v=30,y=!1,b="tt-media",I="tt-media-avatars",w="tt-media-progressive",C="tt-custom-bg",S="tt-lang-packs-v7",E=[1,5,10,50,100,500],P="undefined"!=typeof window&&window.innerHeight>=900,M=1,A=P?60:40,k=2*A,T=72,N=P?30:25,L=100,R=42,x=42,Z=20,B=30,O=200,F=500,D=20,_=1,$=1,U=0,j=2,V=j,W=16,G=17,H=15,z=1e4,Q=3e3,K="editable-message-text",J="editable-message-text-modal",q=1440,Y=1150,X=1275,ee=925,te=600,ne=950,re=450,oe=1e9,de="0",ae=100,ue=1500,se=250,ie=600,ce=500,le=(Math.round((se+ie)/2),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]),13),fe=11,he=160,me=120,pe=64,ge=48,ve=32,ye=64,be=64,Ie=160,we=140,Ce=100,Se=100,Ee=140,Pe=140,Me="NO_STICKER_SET",Ae="en",ke=200,Te=450,Ne="video/quicktime",Le=new Set(["image/png","image/gif","image/jpeg"]),Re=new Set(["video/mp4"]),xe=new Set([...Le,...Re]),Ze="The message is not supported on this version of Telegram.",Be="((ftp|https?):\\/\\/)?((www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,63})\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)",Oe="(@[\\w\\d_-]+)",Fe=/^tg:(\/\/)?([?=&\d\w_-]+)?/gm,De=/^(?:https?:\/\/)?(?:t\.me\/)/gm,_e=new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]),$e="777000",Ue="1271266957",je=0,Ve=1,We=10,Ge=5,He=2147483646,ze="en",Qe="android",Ke=["android","ios","tdesktop","macos"],Je="TelegramTips",qe=["ar","pt-br","id","it","ko","ms","pl","es","tr"],Ye="https://bugs.telegram.org/?tag_ids=41&sort=time",Xe="#A2AF8E",et="#0F0F0F",tt="#0a0a0a8c",nt="rgba(90, 110, 70, 0.6)",rt=100,ot=100*rt,dt=!1},274:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(7204);const d=(e,t,n)=>{const d=(0,o.Z)(t);return(0,r.d4)((()=>e(d||[])),t,n)}},706:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[t,n]=(0,r.eJ)(e),o=(0,r.I4)((()=>{n(!0)}),[]),d=(0,r.I4)((()=>{n(!1)}),[]);return[t,o,d]}},5326:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=()=>{const[,e]=(0,r.eJ)(!1);return(0,r.I4)((()=>{e((e=>!e))}),[])}},8674:(e,t,n)=>{n.d(t,{zG:()=>s,YW:()=>i,ZP:()=>c});var r=n(4050);const o="tt-event-heavy-animation-start",d="tt-event-heavy-animation-end";let a,u=!1;function s(){return u}function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;function t(){a&&(clearTimeout(a),a=void 0),u=!1,document.dispatchEvent(new Event(d))}return u||(u=!0,document.dispatchEvent(new Event(o))),a&&(clearTimeout(a),a=void 0),a=window.setTimeout(t,e),t}const c=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,r.d4)((()=>{if(!n)return u&&e(),document.addEventListener(o,e),document.addEventListener(d,t),()=>{document.removeEventListener(d,t),document.removeEventListener(o,e)}}),[n,t,e])}},6590:(e,t,n)=>{n.d(t,{Oy:()=>s,Wv:()=>l,ZP:()=>h});var r=n(4050),o=n(7361),d=n(7204),a=n(5116),u=n(782);const s=window.location.hash,i=`${window.location.pathname}${window.location.search}`,c={currentIndex:0,nextStateIndexToReplace:-1,isHistoryAltered:!1,isDisabled:!1,isEdge:!1,currentIndexes:[]},l=()=>{c.isDisabled=!0},f=()=>{c.isEdge&&setTimeout((()=>{c.isEdge=!1}),350)};function h(e,t,n,o){let s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=arguments.length>5?arguments[5]:void 0;const f=(0,r.sO)(-1),h=(0,r.sO)(!1),m=(0,d.Z)(e),p=(0,r.sO)(!0),g=(0,r.sO)([]),v=(0,d.Z)(l),y=(0,r.sO)(!1),b=(0,r.I4)((function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(l){const e=v||[];if(e.length{const e=++c.currentIndex;c.currentIndexes.push(e),window.history.pushState({index:e,state:o},"",`#${l[l.length-1]}`),g.current.push({index:e,hash:l[l.length-1]})}),0);else{const t=e.length-l.length;if(y.current)y.current=!1;else{if(l.length!==g.current.length&&t>0){const e=g.current[g.current.length-t-1];let n=t;if(e){const t=c.currentIndexes.findIndex((t=>t===e.index));n=c.currentIndexes.length-t-1}c.isHistoryAltered=!0,window.history.go(-n),g.current.splice(g.current.length-t-1,t).forEach((e=>{let{index:t}=e;c.currentIndexes.splice(c.currentIndexes.indexOf(t),1)}))}l.length>0&&setTimeout((()=>{const e=++c.currentIndex;c.currentIndexes[c.currentIndexes.length-1]=e,window.history.replaceState({index:e,state:o},"",`${i}#${l[l.length-1]}`),g.current[g.current.length-1]={index:e,hash:l[l.length-1]}}),0)}}}else e&&!t&&(p.current=!1,h.current?(h.current=!1,c.currentIndexes.push(f.current)):setTimeout((()=>{const e=++c.currentIndex;c.currentIndexes.push(e),window.history[c.currentIndexes.includes(c.nextStateIndexToReplace-1)&&0!==window.history.state.index&&c.nextStateIndexToReplace===e&&!s?"replaceState":"pushState"]({index:e,state:o},""),f.current=e,s&&(c.nextStateIndexToReplace=c.currentIndex+1)}),0)),!t&&e||p.current||(f.current!==c.currentIndex&&s||(c.isHistoryAltered=!0,window.history.back(),setTimeout((()=>{c.nextStateIndexToReplace=-1}),400)),c.currentIndexes.splice(c.currentIndexes.indexOf(f.current),1),p.current=!0)}),[o,l,e,v,s]);return(0,r.d4)((()=>{const r=e=>{if(c.isHistoryAltered)return void setTimeout((()=>{c.isHistoryAltered=!1}),0);const{index:r}=e.state,o=r||0;try{const r=l?g.current[g.current.length-1].index:f.current,d=c.currentIndexes[c.currentIndexes.indexOf(r)-1];if(c.isDisabled)return;!p.current&&(0===o||o===d)||l&&(0===o||o===d)?(l&&(y.current=!0,g.current.pop()),c.currentIndexes.splice(c.currentIndexes.indexOf(r),1),t&&(c.isEdge&&(0,a.uC)().disableHistoryAnimations(),t(!c.isEdge),p.current=!0)):o===r&&p.current&&n&&!l&&(h.current=!0,c.isEdge&&(0,a.uC)().disableHistoryAnimations(),n(e.state.state))}catch(e){}},o=l?!v||!(0,u.et)(v,l):m!==e;return!c.isDisabled&&o&&b(),window.addEventListener("popstate",r),()=>window.removeEventListener("popstate",r)}),[o,b,l,e,t,n,v,m,s]),{forceClose:()=>b(!0)}}o.cj&&(window.addEventListener("touchstart",(e=>{const t=e.touches[0].pageX;(t<=300||t>=window.innerWidth-300)&&(c.isEdge=!0)})),window.addEventListener("touchend",f),window.addEventListener("popstate",f)),window.history.replaceState({index:c.currentIndex},"",i)},2313:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=(e,t,n,o,d)=>{const[a,u]=(0,r.eJ)(-1);return(0,r.d4)((()=>{u(-1);const n=e.current;t&&n&&!d&&(n.tabIndex=-1,n.focus())}),[e,t,d]),(0,r.I4)((t=>{const r=e.current;if(!r)return;if(13===t.keyCode&&n)return void n(a);if(38!==t.keyCode&&40!==t.keyCode)return;const d=document.activeElement,s=Array.from(o?r.querySelectorAll(o):r.children);let i=d&&s.indexOf(d)||a;if(38===t.keyCode&&i>0)i--;else if(40===t.keyCode&&i{n.d(t,{Z:()=>a});var r=n(711),o=n(5326),d=n(9290);const a=()=>{const e=(0,o.Z)();return(0,d.Z)((()=>r.ll(e)),[e]),r.i0}},8778:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(9203),d=n(5326);const a=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const u=(0,o.o5)(e,t),s=(0,d.Z)();return(0,r.d4)((()=>{if(a)return(0,o.Qt)(s)}),[a,s]),(0,r.d4)((()=>{n||u||(0,o.$y)(e,t).then(s)}),[e,s,u,t,n]),u}},9290:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(7204);const o=(e,t)=>{const n=(0,r.Z)(t);n&&!t.some(((e,t)=>e!==n[t]))||e(n||[])}},7204:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=function(e,t){const n=(0,r.sO)(),{current:o}=n;return t&&void 0===e||(n.current=e),o}},1212:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(6752);const d=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"fast",a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const[u,s]=(0,r.eJ)(!e),i=(0,r.sO)(),[c,l]=(0,r.eJ)(e&&n);if(e)s(!1),l(!0),i.current&&(window.clearTimeout(i.current),i.current=void 0);else if(l(!1),!u&&!i.current){const e=()=>{s(!0),t&&t(),i.current=void 0};a?e():i.current=window.setTimeout(e,350)}const f=c&&!(a&&!e),h=Boolean(i.current),m=e||h,p=(0,o.Z)(d&&"opacity-transition",d,f&&"open",m&&"shown",h&&"closing");return{shouldRender:m,transitionClassNames:p}}},8758:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);function o(e,t,n){(0,r.d4)((()=>{const r=e=>{const r=t.current,o=e.target;r&&o&&(r.contains(e.target)&&!o.classList.contains("backdrop")||(e.preventDefault(),e.stopPropagation(),n&&n()))};return e&&n&&document.addEventListener("mousedown",r),()=>{document.removeEventListener("mousedown",r)}}),[e,t,n])}},5247:(e,t,n)=>{n.d(t,{Oo:()=>s,xg:()=>i,lQ:()=>m});var r=n(3716);const o=new Set(["scroll","mouseenter","mouseleave"]),d={},a={},u=new Map;function s(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=c(t,e);l(o,e,r)?f(o,e,n):e.addEventListener(o,n,r)}function i(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=c(t,e);l(o,e,r)?h(o,e):e.removeEventListener(o,n,r)}function c(e,t){const n=e.replace(/^on/,"").replace(/Capture$/,"").toLowerCase();return"change"===n&&"SELECT"!==t.tagName?"input":"doubleclick"===n?"dblclick":"focus"===n?"focusin":"blur"===n?"focusout":n}function l(e,t,n){return!n&&!o.has(e)&&"VIDEO"!==t.tagName&&"IFRAME"!==t.tagName}function f(e,t,n){d[e]||(d[e]=0,document.addEventListener(e,p)),function(e){return a[e]||(a[e]=new Map),a[e]}(e).set(t,n),function(e){const t=u.get(e);if(t)return t;const n=new Set;return u.set(e,n),n}(t).add(e),d[e]++}function h(e,t){d[e]--,d[e]||document.removeEventListener(e,p),a[e].delete(t),u.get(t).delete(e)}function m(e){const t=u.get(e);t&&(t.forEach((t=>h(t,e))),u.delete(e))}function p(e){const t=a[e.type];if(t){let n=!1,r=e.target;const o=()=>{n=!0},d=()=>{e.preventDefault()},a=new Proxy(e,{get:(e,t)=>"currentTarget"===t?r:"stopPropagation"===t||"stopImmediatePropagation"===t?o:"preventDefault"===t?d:Reflect.get(e,t)});for(;r&&r!==document.body;){const e=t.get(r);if(e&&(e(a),n))return;r=r.parentNode}}}r.eM&&document.addEventListener("dblclick",(()=>{const e=Object.keys(d).length,t=Object.values(d).reduce(((e,t)=>e+t),0),n=Object.keys(a).length,r=Object.values(a).reduce(((e,t)=>e+t.size),0),o=u.size,s=Array.from(u.values()).reduce(((e,t)=>e+t.size),0);console.warn("DELEGATED EVENTS STATS",{delegatedHandlersCount1:t,delegatedHandlersCount2:r,delegatedEventTypesCount:s,delegationRegistriesCount:n,delegationElementsCount:o,documentListenersCount:e})}))},2916:(e,t,n)=>{n.d(t,{Z:()=>I});var r=n(4050),o=n(6926),d=n(3716),a=n(5247);const u=new Set(["key","ref","teactFastList","teactOrderKey"]),s=new Set(["dir","role"]),i={autoPlay:"autoplay",autoComplete:"autocomplete"},c={};function l(e,t,n,o,d){let{skipComponentUpdate:a=!1,forceIndex:u=!1,fragment:s,moveDirection:i}=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const c=t&&(0,r.op)(t),l=n&&(0,r.op)(n);if(!a&&c&&l&&!(0,r.k)(t,n)&&(n=h(t,n)),!a&&l&&n.componentInstance.isMounted&&m(n,o,d,e),t===n)return n;if(!t&&n){l&&(n=f(n,o,d,e));const t=p(n);(0,r.CD)(n,t),u&&e.childNodes[d]?e.insertBefore(t,e.childNodes[d]):(s||e).appendChild(t)}else if(t&&!n)e.removeChild((0,r.U9)(t)),(0,r.Zb)(t);else if(t&&n)if((0,r.k)(t,n)){l&&(n=f(n,o,d,e));const a=p(n);(0,r.CD)(n,a),e.replaceChild(a,(0,r.U9)(t)),(0,r.Zb)(t)}else{const o=c&&l,a=(0,r.U9)(t);if(o||((0,r.CD)(n,a),(0,r.CD)(t,void 0),"props"in t&&"props"in n&&(n.props.ref=t.props.ref)),(0,r.O_)(n)){if(i){const t=a,n=e.childNodes["up"===i?d:d+1];n?e.insertBefore(t,n):(s||e).appendChild(t)}o||y(t,n,a),n.children=g(t,n,o?e:a)}}return n}function f(e,t,n,o){if(!(0,r.op)(e))return e;const{componentInstance:d}=e;if(!d.isMounted){m(e=(0,r.Hb)(d),t,n,o);const a=e.children[0];(0,r.op)(a)&&(e.children=[f(a,e,0,o)]),d.isMounted=!0}return e}function h(e,t){return e.componentInstance.props=t.componentInstance.props,(0,r.SO)(e.componentInstance)}function m(e,t,n,r){const{componentInstance:o}=e;o.onUpdate=()=>{t.children[n]=l(r,t.children[n],o.$element,t,n,{skipComponentUpdate:!0})}}function p(e){if((0,r.V2)(e))return document.createTextNode("");if((0,r.iB)(e))return document.createTextNode(e.value);if((0,r.op)(e))return p(e.children[0]);const{tag:t,props:n,children:o=[]}=e,d=document.createElement(t);return"object"==typeof n.ref&&(n.ref.current=d),Object.entries(n).forEach((e=>{let[t,r]=e;void 0!==n[t]&&b(d,t,r)})),e.children=o.map(((t,n)=>l(d,void 0,t,e,n))),d}function g(e,t,n){if(t.props.teactFastList)return function(e,t,n){const o=new Set(t.children.map((e=>{const t="props"in e&&e.props.key;return d.eM&&(0,r.O_)(e)&&null==t&&console.warn("Missing `key` in `teactFastList`"),t})));let a=0;const u=e.children.reduce(((e,r,d)=>{let u="props"in r?r.props.key:void 0;const s=null!=u;if(s&&!o.has(u))return l(n,r,void 0,t,-1),e;if(!s){const o=t.children[d],a=o&&"props"in o?o.props.key:void 0;if(!o||a)return l(n,r,void 0,t,-1),e;u=`__indexKey#${d}`}return e[u]={$element:r,index:a++,order:"props"in r?r.props.teactOrderKey:void 0},e}),{});let s,i,c=[],f=0;return t.children.forEach(((e,r)=>{const o="props"in e?e.props.key:`__indexKey#${r}`,d=u[o];if(!d)return s||(s=[],i=r),void s.push(e);s&&(c=c.concat(v(s,i,n,t)),i=void 0,s=void 0);const a="props"in e?e.props.teactOrderKey:void 0,h=d.index!==f&&d.order!==a,m=h&&f>d.index;h&&!m||f++,c.push(l(n,d.$element,e,t,r,{forceIndex:!0,moveDirection:h?m?"down":"up":void 0}))})),s&&(c=c.concat(v(s,i,n,t))),c}(e,t,n);const o=e.children.length,a=t.children.length,u=Math.max(o,a),s=[],i=a>o+1?document.createDocumentFragment():void 0;for(let r=0;r=o?{fragment:i}:void 0);d&&s.push(d)}return i&&n.appendChild(i),s}function v(e,t,n,r){if(1===e.length)return[l(n,void 0,e[0],r,t,{forceIndex:!0})];if(e.length>1){const o=document.createDocumentFragment(),d=e.map((e=>l(n,void 0,e,r,t,{fragment:o})));return n.childNodes[t]?n.insertBefore(o,n.childNodes[t]):n.appendChild(o),d}throw new Error("Unexpected input")}function y(e,t,n){const r=Object.entries(e.props),o=Object.entries(t.props);r.forEach((e=>{let[r,o]=e;const d=t.props[r];void 0!==o&&(void 0===d||o!==d&&r.startsWith("on"))&&function(e,t,n){"className"===t?e.className="":"value"===t?e.value="":"style"===t?e.style.cssText="":"dangerouslySetInnerHTML"===t?e.innerHTML="":t.startsWith("on")?(0,a.xg)(e,t,n,t.endsWith("Capture")):t.startsWith("data-")||t.startsWith("aria-")||s.has(t)?e.removeAttribute(t):u.has(t)||delete e[i[t]||t]}(n,r,o)})),o.forEach((t=>{let[r,o]=t;const d=e.props[r];void 0!==o&&o!==d&&b(n,r,o)}))}function b(e,t,n){"className"===t?e.className=n:"value"===t?e.value!==n&&(e.value=n):"style"===t?e.style.cssText=n:"dangerouslySetInnerHTML"===t?e.innerHTML=n.__html:t.startsWith("on")?(0,a.Oo)(e,t,n,t.endsWith("Capture")):t.startsWith("data-")||t.startsWith("aria-")||s.has(t)?e.setAttribute(t,n):u.has(t)||(e[i[t]||t]=n)}const I={render:function(e,t){if(!t)return;let n=t.getAttribute("data-teact-head-id");n||(n=(0,o.Z)(c),c[n]={children:[]},t.setAttribute("data-teact-head-id",n));const r=c[n];r.children=[l(t,r.children[0],e,r,0)]}}},4050:(e,t,n)=>{n.d(t,{V2:()=>h,iB:()=>m,op:()=>g,O_:()=>v,SO:()=>M,k:()=>A,Zb:()=>k,Hb:()=>T,U9:()=>R,CD:()=>x,eJ:()=>Z,d4:()=>O,bt:()=>F,Ye:()=>D,I4:()=>_,sO:()=>$,X$:()=>U,ZP:()=>j});var r=n(3716),o=n(9118),d=n(782),a=n(275),u=n(3592),s=n(5247);let i;!function(e){e[e.Empty=0]="Empty",e[e.Text=1]="Text",e[e.Tag=2]="Tag",e[e.Component=3]="Component"}(i||(i={}));const c=Symbol("Fragment"),l=new Set(["TeactMemoWrapper","TeactNContainer","Button","ListItem","MenuItem"]);let f;function h(e){return e.type===i.Empty}function m(e){return e.type===i.Text}function p(e){return e.type===i.Tag}function g(e){return e.type===i.Component}function v(e){return p(e)||g(e)}function y(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o1&&void 0!==arguments[1]?arguments[1]:[];const{props:n}=e;return{componentInstance:e,type:i.Component,props:n,children:t}}function w(e,t,n){return{type:i.Tag,tag:e,props:t,children:C(n).map(E)}}function C(e){let t=e.length-1;for(;t>=0&&S(e[t]);t--);return t+17&&console.warn(`[Teact] Slow component render: ${n}, ${Math.round(t)} ms`),P[n].renderTimes.push(t),P[n].renderCount++}}catch(t){(0,u.S)(t),o=e.renderedValue}if(e.isMounted&&o===e.renderedValue)return e.$element;e.renderedValue=o;const d=E(o);return e.$element=I(e,[d]),e.$element}function A(e,t){return typeof e!=typeof t||e.type!==t.type||(m(e)&&m(t)?e.value!==t.value:p(e)&&p(t)?e.tag!==t.tag||e.props.key!==t.props.key:!(!g(e)||!g(t)||e.componentInstance.Component===t.componentInstance.Component&&e.props.key===t.props.key))}function k(e){if(g(e))(t=e.componentInstance).isMounted&&(t.hooks.memos.byCursor.forEach((e=>{e.current=void 0})),t.hooks.effects.byCursor.forEach((e=>{let{cleanup:t}=e;if("function"==typeof t)try{t()}catch(e){(0,u.S)(e)}})),t.isMounted=!1,function(e){e.hooks.effects.byCursor.forEach((e=>{e.cleanup=void 0,e.effect=void 0,e.dependencies=void 0})),e.hooks.state.byCursor.forEach((e=>{e.value=void 0,e.nextValue=void 0,e.setter=void 0})),e.hooks.memos.byCursor.forEach((e=>{e.dependencies=void 0})),e.hooks=void 0,e.$element=void 0,e.renderedValue=void 0,e.Component=void 0,e.props=void 0,e.forceUpdate=void 0,e.onUpdate=void 0}(t));else if(p(e)&&(e.target&&(0,s.lQ)(e.target),e.props.ref&&(e.props.ref.current=void 0)),e.target&&(e.target=void 0),!v(e))return;var t;e.children.forEach(k)}function T(e){return M(e),e.isMounted=!0,e.$element}function N(e){e.isMounted&&(e.hooks.state.byCursor.forEach((e=>{e.value=e.nextValue})),e.prepareForFrame=(0,o.wT)((()=>N(e))),e.forceUpdate=(0,o.mS)((()=>L(e))))}function L(e){if(!e.isMounted||!e.onUpdate)return;const t=e.$element;M(e),e.$element!==t&&e.onUpdate()}function R(e){return g(e)?R(e.children[0]):e.target}function x(e,t){g(e)?x(e.children[0],t):e.target=t}function Z(e){const{cursor:t,byCursor:n}=f.hooks.state;var d;return void 0===n[t]&&(n[t]={value:e,nextValue:e,setter:(d=f,e=>{n[t].nextValue!==e&&(n[t].nextValue="function"==typeof e?e(n[t].value):e,d.prepareForFrame&&d.forceUpdate||(d.prepareForFrame=(0,o.wT)((()=>N(d))),d.forceUpdate=(0,o.mS)((()=>L(d)))),d.prepareForFrame(),d.forceUpdate(),r.ZT&&"TeactNContainer"!==d.name&&console.log("[Teact.useState]",d.name,d.Component&&d.Component.DEBUG_contentComponentName?`> ${d.Component.DEBUG_contentComponentName}`:"",`Forced update at cursor #${t}, next value: `,n[t].nextValue))})}),f.hooks.state.cursor++,[n[t].value,n[t].setter]}function B(e,t,n,o,d){const{cursor:a,byCursor:s}=f.hooks.effects,i=f;function c(){if(!i.isMounted)return;const{cleanup:e}=s[a];if("function"==typeof e)try{let t;if(r.eM&&(t=performance.now()),e(),r.eM){const e=performance.now()-t,n=i.name;e>7&&console.warn(`[Teact] Slow cleanup at effect cursor #${a}: ${n}, ${Math.round(e)} ms`)}}catch(e){(0,u.S)(e)}}function l(){if(!i.isMounted)return;let e;if(r.eM&&(e=performance.now()),s[a].cleanup=n(),r.eM){const t=performance.now()-e,n=i.name;t>7&&console.warn(`[Teact] Slow effect at cursor #${a}: ${n}, ${Math.round(t)} ms`)}}if(void 0!==s[a]&&o&&s[a].dependencies){if(o.some(((e,t)=>e!==s[a].dependencies[t]))){if(d){const e=o.reduce(((e,t,n)=>{const r=s[a].dependencies[n];return t!==r&&e.push(`${n}: ${r} => ${t}`),e}),[]);console.log(`[Teact] Effect "${d}" caused by dependencies.`,e.join(", "))}t(c),e(l)}}else d&&console.log(`[Teact] Effect "${d}" caused by missing dependencies.`),t(c),e(l);s[a]={effect:n,dependencies:o,cleanup:s[a]?s[a].cleanup:void 0},f.hooks.effects.cursor++}function O(e,t,n){return B(o.T2,o.D0,e,t,n)}function F(e,t,n){return B(o.R3,o.zD,e,t,n)}function D(e,t,n){const{cursor:o,byCursor:d}=f.hooks.memos;let{current:u}=d[o]||{};return(void 0===d[o]||t.some(((e,t)=>e!==d[o].dependencies[t])))&&(r.eM&&n&&console.log(`[Teact.useMemo] ${f.name} (${n}): Update is caused by:`,d[o]?(0,a.c)(t,d[o].dependencies).join(", "):"[first render]"),u=e()),d[o]={current:u,dependencies:t},f.hooks.memos.cursor++,u}function _(e,t,n){return D((()=>e),t,n)}function $(e){return D((()=>({current:e})),[])}function U(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.Z,n=arguments.length>2?arguments[2]:void 0;return function(o){const d=$(o),u=$();return(!u.current||d.current&&!t(d.current,o))&&(r.eM&&n&&console.log(`[Teact.memo] ${e.name} (${n}): Update is caused by:`,(0,a.c)(d.current,o).join(", ")),d.current=o,u.current=y(e,o)),u.current}}document.addEventListener("dblclick",(()=>{console.warn("COMPONENTS",(0,d.Xo)(Object.values(P),"renderCount","desc"))}));const j={createElement:y,Fragment:c}},5116:(e,t,n)=>{n.d(t,{ZP:()=>h,R3:()=>w,Rd:()=>C,uC:()=>S,Q6:()=>E,ll:()=>P,Iq:()=>M,c$:()=>A});var r=n(4050),o=n(3716),d=n(5326),a=n(6926),u=n(9118),s=n(275),i=n(782),c=n(3592),l=n(8674);function f(){return f=Object.assign||function(e){for(var t=1;t7&&console.warn(`[TeactN] Slow containers update: ${Math.round(t)} ms`)}}],v={},y=new Map,b=(0,u.$6)(I);function I(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e||!(0,l.zG)()?g.forEach((e=>e(m))):(0,u.T2)(b)}function w(e,t){"object"==typeof e&&e!==m&&(m=e,null!=t&&t.forceSyncOnIOs?I(!0):b(null==t?void 0:t.forceOnHeavyAnimation))}function C(){return m}function S(){return v}function E(e,t){p[e]||(p[e]=[],v[e]=(t,n)=>{!function(e,t,n){p[e]&&p[e].forEach((e=>{const r=e(m,v,t);r&&w(r,n)}))}(e,t,n)}),p[e].push(t)}function P(e){g.push(e)}function M(e){const t=g.indexOf(e);-1!==t&&g.splice(t,1)}function A(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>({});return t=>function n(o){n.DEBUG_contentComponentName=t.name;const[u]=(0,r.eJ)((0,a.Z)(y)),i=(0,d.Z)();(0,r.d4)((()=>()=>{y.delete(u)}),[u]);let l=y.get(u);if(l||(l={mapStateToProps:e,ownProps:o,areMappedPropsChanged:!1,forceUpdate:i,DEBUG_updates:0,DEBUG_componentName:t.name},y.set(u,l)),l.areMappedPropsChanged&&(l.areMappedPropsChanged=!1),!l.mappedProps||!(0,s.Z)(l.ownProps,o)){l.ownProps=o;try{l.mappedProps=e(m,o)}catch(e){(0,c.S)(e)}}return r.ZP.createElement(t,f({},l.mappedProps,o))}}o.eM&&(window.getGlobal=C,document.addEventListener("dblclick",(()=>{console.warn("GLOBAL CONTAINERS",(0,i.Xo)(Array.from(y.values()).map((e=>{let{DEBUG_componentName:t,DEBUG_updates:n}=e;return{DEBUG_componentName:t,DEBUG_updates:n}})),"DEBUG_updates","desc"))})))},3681:(e,t,n)=>{n.d(t,{l:()=>d,Z:()=>a});const r=/\uFE0F/g,o=String.fromCharCode(8205);function d(e){return e.indexOf(o)<0?e.replace(r,""):e}const a=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g},1363:(e,t,n)=>{var r=n(5116),o=n(1226),d=n(3716),a=n(7361),u=n(8406),s=n(9524),i=n(7358),c=n(3100),l=n(1622);(0,r.Q6)("initApi",((e,t)=>{(async()=>{d.Cg||(await(0,c.Qw)(),(0,c.f3)()),(0,o.g8)(t.apiUpdate,{userAgent:navigator.userAgent,platform:a.Lt,sessionData:(0,c.K8)(),isTest:window.location.search.includes("test"),isMovSupported:a.pA,isWebmSupported:a.Hh})})()})),(0,r.Q6)("setAuthPhoneNumber",((e,t,n)=>{const{phoneNumber:r}=n;return(0,o.t9)("provideAuthPhoneNumber",r.replace(/[^\d]/g,"")),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("setAuthCode",((e,t,n)=>{const{code:r}=n;return(0,o.t9)("provideAuthCode",r),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("setAuthPassword",((e,t,n)=>{const{password:r}=n;return(0,o.t9)("provideAuthPassword",r),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("uploadProfilePhoto",((e,t,n)=>{const{file:r}=n;(0,o.t9)("uploadProfilePhoto",r)})),(0,r.Q6)("signUp",((e,t,n)=>{const{firstName:r,lastName:d}=n;return(0,o.t9)("provideAuthRegistration",{firstName:r,lastName:d}),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("returnToAuthPhoneNumber",(e=>((0,o.t9)("restartAuth"),{...e,authError:void 0}))),(0,r.Q6)("goToAuthQrCode",(e=>((0,o.t9)("restartAuthWithQr"),{...e,authIsLoadingQrCode:!0,authError:void 0}))),(0,r.Q6)("saveSession",((e,t,n)=>{const{sessionData:r}=n;r?(0,c.wX)(n.sessionData,e.currentUserId):(0,c.jv)()})),(0,r.Q6)("signOut",(()=>{(async()=>{try{await(0,u.r1)(),await(0,o.t9)("destroy"),await(0,l.IT)(!1)}catch(e){}(0,r.uC)().reset()})()})),(0,r.Q6)("reset",(()=>{(0,c.jv)(),s.clear(d.lW),s.clear(d.SG),s.clear(d.lF),s.clear(d.fo);const e=d.ee.replace(/\d+$/,""),t=(d.ee.match(/\d+$/)||[0])[0];for(let n=0;n{(async()=>{await(0,o.t9)("disconnect")})()})),(0,r.Q6)("loadNearestCountry",(e=>{"connectionStateReady"===e.connectionState&&(async()=>{const e=await(0,o.t9)("fetchNearestCountry");(0,r.R3)({...(0,r.Rd)(),authNearestCountry:e})})()})),(0,r.Q6)("setDeviceToken",((e,t,n)=>{(0,r.R3)({...e,push:{deviceToken:n,subscribedAt:Date.now()}})})),(0,r.Q6)("deleteDeviceToken",(e=>{const t={...e};delete t.push,(0,r.R3)(t)}))},9667:(e,t,n)=>{var r=n(5116),o=n(1713),d=n(3716),a=n(1226),u=n(782),s=n(8406),i=n(711),c=n(9066),l=n(9959),f=n(8415);function h(e,t){let{visibility:n,allowedIds:r,deniedIds:o}=t;const{users:{byId:d},chats:{byId:a}}=e,u={visibility:n};let s,i;const c=e=>{if(!(0,f.YC)(e))return;const{id:t,accessHash:n}=d[e]||{};return t?{id:t,accessHash:n}:void 0},l=e=>{if((0,f.YC)(e))return;const t=a[e];return t?{id:t.id}:void 0};return"contacts"!==n&&"nobody"!==n||(s=r.map(c).filter(Boolean),i=r.map(l).filter(Boolean),s.length>0&&(u.allowedUsers=s),i.length>0&&(u.allowedChats=i)),"everybody"!==n&&"contacts"!==n||(s=o.map(c).filter(Boolean),i=o.map(l).filter(Boolean),s.length>0&&(u.blockedUsers=s),i.length>0&&(u.blockedChats=i)),u}(0,r.Q6)("updateProfile",((e,t,n)=>{const{photo:d,firstName:u,lastName:s,bio:i,username:f}=n;(async()=>{const{currentUserId:t}=e;if(t){if((0,r.R3)({...(0,r.Rd)(),profileEdit:{progress:o.rN.InProgress}}),d&&await(0,a.t9)("updateProfilePhoto",d),(u||s||i)&&await(0,a.t9)("updateProfile",{firstName:u,lastName:s,about:i})){e=(0,r.Rd)();const n=t&&(0,c.dy)(e,t);n&&(0,r.R3)((0,l.Nq)(e,n.id,{firstName:u,lastName:s,fullInfo:{...n.fullInfo,bio:i}}))}f&&await(0,a.t9)("updateUsername",f)&&t&&(0,r.R3)((0,l.Nq)((0,r.Rd)(),t,{username:f})),(0,r.R3)({...(0,r.Rd)(),profileEdit:{progress:o.rN.Complete}})}})()})),(0,r.Q6)("checkUsername",((e,t,n)=>{const{username:d}=n;(async()=>{if(e.profileEdit&&e.profileEdit.progress===o.rN.InProgress)return;(0,r.R3)({...e,profileEdit:{progress:e.profileEdit?e.profileEdit.progress:o.rN.Idle,isUsernameAvailable:void 0}});const t=await(0,a.t9)("checkUsername",d);e=(0,r.Rd)(),(0,r.R3)({...e,profileEdit:{...e.profileEdit,isUsernameAvailable:t}})})()})),(0,r.Q6)("loadWallpapers",(()=>{(async()=>{const e=await(0,a.t9)("fetchWallpapers");if(!e)return;const t=(0,r.Rd)();(0,r.R3)({...t,settings:{...t.settings,loadedWallpapers:e.wallpapers}})})()})),(0,r.Q6)("uploadWallpaper",((e,t,n)=>{const d=n,u=URL.createObjectURL(d);(0,r.R3)({...e,settings:{...e.settings,loadedWallpapers:[{slug:o.mp,document:{fileName:"",size:d.size,mimeType:d.type,previewBlobUrl:u}},...e.settings.loadedWallpapers||[]]}}),(async()=>{const t=await(0,a.t9)("uploadWallpaper",d);if(!t)return;const{wallpaper:n}=t;if(!(e=(0,r.Rd)()).settings.loadedWallpapers)return;const s=e.settings.loadedWallpapers[0];if(!s||s.slug!==o.mp)return;const i={...n,document:{...n.document,previewBlobUrl:u}};(0,r.R3)({...e,settings:{...e.settings,loadedWallpapers:[i,...e.settings.loadedWallpapers.slice(1)]}})})()})),(0,r.Q6)("loadBlockedContacts",(()=>{(async()=>{var e,t;const n=await(0,a.t9)("fetchBlockedContacts");if(!n)return;let o=(0,r.Rd)();null!==(e=n.users)&&void 0!==e&&e.length&&(o=(0,l.Sh)(o,(0,u.ee)(n.users,"id"))),null!==(t=n.chats)&&void 0!==t&&t.length&&(o=(0,l.GL)(o,(0,u.ee)(n.chats,"id"))),o={...o,blocked:{...o.blocked,ids:[...o.blocked.ids||[],...n.blockedIds],totalCount:n.totalCount}},(0,r.R3)(o)})()})),(0,r.Q6)("blockContact",((e,t,n)=>{const{contactId:o,accessHash:d}=n;(async()=>{if(!await(0,a.t9)("blockContact",o,d))return;const e=(0,r.Rd)();(0,r.R3)((0,l.O4)(e,o))})()})),(0,r.Q6)("unblockContact",((e,t,n)=>{const{contactId:o}=n;let d;if((0,f.YC)(o)){const t=(0,c.dy)(e,o);if(!t)return;d=t.accessHash}(async()=>{if(!await(0,a.t9)("unblockContact",o,d))return;const e=(0,r.Rd)();(0,r.R3)((0,l.rB)(e,o))})()})),(0,r.Q6)("loadAuthorizations",(()=>{(async()=>{const e=await(0,a.t9)("fetchAuthorizations");e&&(0,r.R3)({...(0,r.Rd)(),activeSessions:e})})()})),(0,r.Q6)("terminateAuthorization",((e,t,n)=>{const{hash:o}=n;(async()=>{if(!await(0,a.t9)("terminateAuthorization",o))return;const e=(0,r.Rd)();(0,r.R3)({...e,activeSessions:e.activeSessions.filter((e=>e.hash!==o))})})()})),(0,r.Q6)("terminateAllAuthorizations",(()=>{(async()=>{if(!await(0,a.t9)("terminateAllAuthorizations"))return;const e=(0,r.Rd)();(0,r.R3)({...e,activeSessions:e.activeSessions.filter((e=>e.isCurrent))})})()})),(0,r.Q6)("loadNotificationExceptions",(e=>{const{serverTimeOffset:t}=e;(async()=>{const e=await(0,a.t9)("fetchNotificationExceptions",{serverTimeOffset:t});e&&(0,r.R3)((0,l.aJ)((0,r.Rd)(),e))})()})),(0,r.Q6)("loadNotificationSettings",(e=>{const{serverTimeOffset:t}=e;(async()=>{const e=await(0,a.t9)("fetchNotificationSettings",{serverTimeOffset:t});e&&(0,r.R3)((0,l.BI)((0,r.Rd)(),e))})()})),(0,r.Q6)("updateNotificationSettings",((e,t,n)=>{const{peerType:o,isSilent:d,shouldShowPreviews:u}=n;(async()=>{await(0,a.t9)("updateNotificationSettings",o,{isSilent:d,shouldShowPreviews:u})&&(0,r.R3)((0,l.HN)((0,r.Rd)(),o,d,u))})()})),(0,r.Q6)("updateWebNotificationSettings",((e,t,n)=>{(async()=>{(0,r.R3)((0,l.BI)((0,r.Rd)(),n));const e=(0,r.Rd)(),{hasPushNotifications:t,hasWebNotifications:o}=e.settings.byKey;o&&t?await(0,s.Ld)():await(0,s.r1)()})()})),(0,r.Q6)("updateContactSignUpNotification",((e,t,n)=>{const{isSilent:o}=n;(async()=>{await(0,a.t9)("updateContactSignUpNotification",o)&&(0,r.R3)((0,l.BI)((0,r.Rd)(),{hasContactJoinedNotifications:!o}))})()})),(0,r.Q6)("loadLanguages",(()=>{(async()=>{const e=await(0,a.t9)("fetchLanguages");e&&(0,r.R3)((0,l.BI)((0,r.Rd)(),{languages:e}))})()})),(0,r.Q6)("loadPrivacySettings",(()=>{(async()=>{const[e,t,n,o,d]=await Promise.all([(0,a.t9)("fetchPrivacySettings","phoneNumber"),(0,a.t9)("fetchPrivacySettings","lastSeen"),(0,a.t9)("fetchPrivacySettings","profilePhoto"),(0,a.t9)("fetchPrivacySettings","forwards"),(0,a.t9)("fetchPrivacySettings","chatInvite")]);if(!(e&&t&&n&&o&&d))return;const u=(0,r.Rd)();u.settings.privacy.phoneNumber=e,u.settings.privacy.lastSeen=t,u.settings.privacy.profilePhoto=n,u.settings.privacy.forwards=o,u.settings.privacy.chatInvite=d,(0,r.R3)(u)})()})),(0,r.Q6)("setPrivacyVisibility",((e,t,n)=>{const{privacyKey:o,visibility:d}=n,{privacy:{[o]:u}}=e.settings;if(!u)return;const s=h(e,{visibility:d,allowedIds:[...u.allowUserIds,...u.allowChatIds],deniedIds:[...u.blockUserIds,...u.blockChatIds]});(async()=>{const e=await(0,a.t9)("setPrivacySettings",o,s);if(e){const t=(0,r.Rd)();t.settings.privacy[o]=e,(0,r.R3)(t)}})()})),(0,r.Q6)("setPrivacySettings",((e,t,n)=>{const{privacyKey:o,isAllowList:d,contactsIds:u}=n,{privacy:{[o]:s}}=e.settings;if(!s)return;const i=h(e,{visibility:s.visibility,allowedIds:d?u:[...s.allowUserIds,...s.allowChatIds],deniedIds:d?[...s.blockUserIds,...s.blockChatIds]:u});(async()=>{const e=await(0,a.t9)("setPrivacySettings",o,i);if(e){const t=(0,r.Rd)();t.settings.privacy[o]=e,(0,r.R3)(t)}})()})),(0,r.Q6)("updateIsOnline",((e,t,n)=>{(0,a.t9)("updateIsOnline",n)})),(0,r.Q6)("loadContentSettings",(()=>{(async()=>{const e=await(0,a.t9)("fetchContentSettings");e&&(0,r.R3)((0,l.BI)((0,r.Rd)(),e))})()})),(0,r.Q6)("updateContentSettings",((e,t,n)=>{(async()=>{(0,r.R3)((0,l.BI)((0,r.Rd)(),{isSensitiveEnabled:n})),await(0,a.t9)("updateContentSettings",n)||(0,r.R3)((0,l.BI)((0,r.Rd)(),{isSensitiveEnabled:!n}))})()})),(0,r.Q6)("loadCountryList",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{langCode:o}=n;o||(o=e.settings.byKey.language),(async()=>{const e=await(0,a.t9)("fetchCountryList",{langCode:o});e&&(0,r.R3)({...(0,r.Rd)(),countryList:e})})()})),(0,r.Q6)("ensureTimeFormat",((e,t)=>{if(e.authNearestCountry){const n=d.FD.has(e.authNearestCountry.toUpperCase())?"12h":"24h";t.setSettingOption({timeFormat:n}),(0,i.qf)(n)}(async()=>{if((0,r.Rd)().settings.byKey.wasTimeFormatSetManually)return;const e=await(0,a.t9)("fetchNearestCountry");if(e){const n=d.FD.has(e.toUpperCase())?"12h":"24h";t.setSettingOption({timeFormat:n}),(0,i.qf)(n)}})()})),(0,r.Q6)("loadAppConfig",(()=>{(async()=>{const e=await(0,a.t9)("fetchAppConfig");e&&(0,r.R3)({...(0,r.Rd)(),appConfig:e})})()}))},4907:(e,t,n)=>{var r=n(5116),o=n(3716),d=n(8406),a=n(9959),u=n(711),s=n(9066),i=n(1622),c=n(1947);(0,r.Q6)("apiUpdate",((e,t,n)=>{switch(o.eM&&"updateUserStatus"!==n["@type"]&&"updateServerTimeOffset"!==n["@type"]&&console.log("[GramJs] UPDATE",n["@type"],{update:n}),n["@type"]){case"updateApiReady":!function(e){const{hasWebNotifications:t,hasPushNotifications:n}=(0,s.dZ)(e);t&&n&&(0,d.Ld)(),(0,u.m0)(e.settings.byKey.language)}(e);break;case"updateAuthorizationState":!function(e){let t=(0,r.Rd)();const n="authorizationStateReady"===t.authState,o=e.authorizationState;switch((0,r.R3)({...t,authState:o,authIsLoading:!1}),t=(0,r.Rd)(),o){case"authorizationStateLoggingOut":(0,i.IT)(!1),(0,r.R3)({...t,isLoggingOut:!0});break;case"authorizationStateWaitCode":(0,r.R3)({...t,authIsCodeViaApp:e.isCodeViaApp});break;case"authorizationStateWaitPassword":(0,r.R3)({...t,authHint:e.hint});break;case"authorizationStateWaitQrCode":(0,r.R3)({...t,authIsLoadingQrCode:!1,authQrCode:e.qrCode});break;case"authorizationStateReady":if(n)break;(0,i.IT)(!0),(0,r.R3)({...t,isLoggingOut:!1})}}(n);break;case"updateAuthorizationError":!function(e){(0,r.R3)({...(0,r.Rd)(),authError:e.message})}(n);break;case"updateConnectionState":!function(e){const{connectionState:t}=e,n=(0,r.Rd)();t!==n.connectionState&&((0,r.R3)({...n,connectionState:t}),"connectionStateBroken"===t&&(0,r.uC)().signOut())}(n);break;case"updateSession":!function(e){const{sessionData:t}=e,{authRememberMe:n,authState:o}=(0,r.Rd)(),d=!t||!t.mainDcId;n&&"authorizationStateReady"===o&&!d&&(0,r.uC)().saveSession({sessionData:t})}(n);break;case"updateServerTimeOffset":!function(e){const t=(0,r.Rd)();t.serverTimeOffset!==e.serverTimeOffset&&(0,r.R3)({...t,serverTimeOffset:e.serverTimeOffset})}(n);break;case"updateCurrentUser":!function(e){const{currentUser:t}=e;(0,r.R3)({...(0,a.Nq)((0,r.Rd)(),t.id,t),currentUserId:t.id}),function(e){const t=localStorage.getItem(o.b_);if(!t)return;const n=JSON.parse(t);n.id=e,localStorage.setItem(o.b_,JSON.stringify(n))}(t.id)}(n);break;case"error":{"SESSION_REVOKED"===n.error.message&&t.signOut();const e=(0,c.J_)(n.error);e?t.addPaymentError({error:e}):t.showDialog&&t.showDialog({data:n.error});break}}}))},7895:(e,t,n)=>{var r=n(5116),o=n(3716),d=n(7361),a=n(711),u=n(7370),s=n(9066),i=n(1622),c=n(7926);!function(){function e(){const e=document.documentElement.className.match(/theme-(\w+)/),t=e?e[1]:"light",n=(0,r.Rd)(),d=(0,s.Pu)(n),{animationLevel:a}=n.settings.byKey;d!==t&&((0,u.Z)(d,a===o.zy),(0,r.R3)({...n}))}const t=window.matchMedia("(prefers-color-scheme: dark)");"function"==typeof t.addEventListener?t.addEventListener("change",e):"function"==typeof t.addListener&&t.addListener(e)}(),(0,r.Q6)("init",(e=>{const{animationLevel:t,messageTextSize:n,language:r}=e.settings.byKey,l=(0,s.Pu)(e);(0,a.m0)(r,void 0,!0),document.documentElement.style.setProperty("--composer-text-size",`${Math.max(n,d.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*n)}px`),document.documentElement.style.setProperty("--message-text-size",`${n}px`),document.documentElement.setAttribute("data-message-text-size",n.toString()),document.body.classList.add("initial"),document.body.classList.add(`animation-level-${t}`),document.body.classList.add(d.$b?"is-touch-env":"is-pointer-env"),(0,u.Z)(l,t===o.zy),(0,c.$)(),(0,i.px)(),d.cj?document.body.classList.add("is-ios"):d.wZ?document.body.classList.add("is-android"):d.jm&&document.body.classList.add("is-macos"),d.s$&&document.body.classList.add("is-safari")})),(0,r.Q6)("setIsUiReady",((e,t,n)=>{const{uiReadyState:r}=n;return 2===r&&document.body.classList.remove("initial"),{...e,uiReadyState:r}})),(0,r.Q6)("setAuthPhoneNumber",((e,t,n)=>{const{phoneNumber:r}=n;return{...e,authPhoneNumber:r}})),(0,r.Q6)("setAuthRememberMe",((e,t,n)=>({...e,authRememberMe:Boolean(n)}))),(0,r.Q6)("clearAuthError",(e=>({...e,authError:void 0}))),(0,r.Q6)("disableHistoryAnimations",(()=>{setTimeout((()=>{(0,r.R3)({...(0,r.Rd)(),shouldSkipHistoryAnimations:!1}),document.body.classList.remove("no-animate")}),450),(0,r.R3)({...(0,r.Rd)(),shouldSkipHistoryAnimations:!0},{forceSyncOnIOs:!0})}))},3781:(e,t,n)=>{var r=n(5116),o=n(9959);(0,r.Q6)("setSettingOption",((e,t,n)=>(0,o.BI)(e,n))),(0,r.Q6)("setThemeSettings",((e,t,n)=>{const{theme:r,...d}=n;return(0,o.lr)(e,r,d)}))},8332:(e,t,n)=>{n.d(t,{YC:()=>f,Bf:()=>h,G9:()=>m,ZV:()=>p,eA:()=>g,Ru:()=>v,pK:()=>y,l6:()=>b,zX:()=>I,U:()=>w,GM:()=>C,hu:()=>S,RT:()=>E,Hp:()=>P,Nl:()=>M,VE:()=>A,Mg:()=>k,Qm:()=>T,H5:()=>N,q8:()=>L,Hd:()=>R,pE:()=>x,i4:()=>Z,Sm:()=>B,cc:()=>O,SB:()=>F,zF:()=>D,ih:()=>_,$l:()=>$});var r=n(6137),o=n(3716),d=n(782),a=n(5527),u=n(790),s=n(5765);const i=Date.now()/1e3+31622400,c=3e9,l=3e8;function f(e){return"number"==typeof e?e>0:!e.startsWith("-")}function h(e){return m(e)||p(e)}function m(e){return"chatTypeBasicGroup"===e.type}function p(e){return"chatTypeSuperGroup"===e.type}function g(e){return"chatTypeChannel"===e.type}function v(e){return"chatTypePrivate"===e.type||"chatTypeBasicGroup"===e.type}function y(e){return e===o.FV}function b(e){switch(e.type){case"chatTypePrivate":return"PrivateChat";case"chatTypeBasicGroup":case"chatTypeSuperGroup":return"AccDescrGroup";case"chatTypeChannel":return"AccDescrChannel";default:return"Chat"}}function I(e){if("chatTypePrivate"===e.type||"chatTypeSecret"===e.type)return e.id}function w(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return r||n&&t.id===n.id&&n.isSelf?e("SavedMessages"):t.title||e("HiddenName")}function C(e){if(e.fullInfo)return e.fullInfo.about}function S(e){const{username:t}=e;if(t)return`https://t.me/${t}`;const{inviteLink:n}=e.fullInfo||{};return n}function E(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";if(e.avatarHash)return"big"===t?`profile${e.id}?${e.avatarHash}`:`avatar${e.id}?${e.avatarHash}`}function P(e){return!e.lastMessage}function M(e){return Boolean(e.adminRights)}function A(e,t){return!!e.adminRights&&e.adminRights[t]}function k(e,t){var n,r;return Boolean((null===(n=e.currentUserBannedRights)||void 0===n?void 0:n[t])||(null===(r=e.defaultBannedRights)||void 0===r?void 0:r[t]))}function T(e,t){return t!==r._f||!(e.isRestricted||e.migratedTo||e.isNotJoined||y(e.id))&&(!!e.isCreator||!!f(e.id)||(g(e)?A(e,"postMessages"):M(e)||!k(e,"sendMessages")))}function N(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return{canAttachMedia:!1,canAttachPolls:!1,canSendStickers:!1,canSendGifs:!1,canAttachEmbedLinks:!1};const n=M(e);return{canAttachMedia:n||!k(e,"sendMedia"),canAttachPolls:(n||!k(e,"sendPolls"))&&(!f(e.id)||t),canSendStickers:n||!k(e,"sendStickers"),canSendGifs:n||!k(e,"sendGifs"),canAttachEmbedLinks:n||!k(e,"embedLinks")}}function L(e,t,n){if(null!=t&&t.sendMessages){const{untilDate:n}=t;return n&&n2&&void 0!==arguments[2]?arguments[2]:{};return n[e.id]&&void 0!==n[e.id].isMuted?n[e.id].isMuted:e.isMuted||f(e.id)&&!t.hasPrivateChatsNotifications||g(e)&&!t.hasBroadcastNotifications||h(e)&&!t.hasGroupNotifications}function B(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{hasPrivateChatsMessagePreview:r=!0,hasBroadcastMessagePreview:o=!0,hasGroupMessagePreview:d=!0}=t;return n[e.id]&&void 0!==n[e.id].shouldShowPreviews?n[e.id].shouldShowPreviews:f(e.id)&&r||g(e)&&o||h(e)&&d}function O(e){return m(e)||(p(e)||g(e))&&e.isCreator}function F(e,t,n){const{id:r,title:o,emoticon:d,description:a,pinnedChatIds:u,excludedChatIds:s,includedChatIds:i,excludeArchived:c,excludeMuted:l,excludeRead:f,...h}=t;return void 0!==n&&(Object.values(h).filter(Boolean).length>1||null!=s&&s.length||null!=i&&i.length)?e("Chats",n):h.bots?e("FilterBots"):h.groups?e("FilterGroups"):h.channels?e("FilterChannels"):h.contacts?e("FilterContacts"):h.nonContacts?e("FilterNonContacts"):void 0}function D(e,t,n){if(n&&!f(t))return n.isSelf?e("FromYou"):(0,a.Vl)(n)}function _(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3?arguments[3]:void 0;return(0,d.Xo)(e,(e=>{const o=t[e];if(!o)return 0;let d=0;return o.lastMessage&&(d+=o.lastMessage.date),n&&o.isVerified&&(d+=c),r&&r.includes(e)&&(d=Date.now()+l+(r.length-r.indexOf(e))),d}),"desc")}function $(e,t,n,r,o){if(!r)return t;const d=(0,s.W)(r);return t.filter((t=>{const r=n[t];return!!r&&d(w(e,r,void 0,t===o))}))}},8415:(e,t,n)=>{n.d(t,{lN:()=>L,JE:()=>k,uw:()=>pe,$l:()=>o.$l,kK:()=>r.kK,H5:()=>o.H5,MR:()=>re,kw:()=>r.kw,cc:()=>o.cc,Qm:()=>o.Qm,RT:()=>o.RT,GM:()=>o.GM,hu:()=>o.hu,N0:()=>se,Hd:()=>o.Hd,U:()=>o.U,l6:()=>o.l6,T7:()=>g,SB:()=>o.SB,VE:()=>o.VE,XV:()=>me,Sc:()=>fe,N5:()=>j,oP:()=>V,qp:()=>F,w6:()=>A,R5:()=>he,$D:()=>m,aE:()=>H,ep:()=>de,c0:()=>ae,eO:()=>J,Tp:()=>c,kG:()=>oe,Ti:()=>te,DH:()=>ee,KK:()=>f,O$:()=>_,t9:()=>K,Y5:()=>U,zF:()=>o.zF,q8:()=>o.q8,_O:()=>p,bf:()=>G,Kk:()=>B,Eb:()=>Z,MK:()=>R,UD:()=>h,EU:()=>x,b7:()=>$,kd:()=>W,s1:()=>q,F$:()=>Y,Cg:()=>X,bV:()=>ie,HV:()=>ce,zX:()=>o.zX,OU:()=>S,RI:()=>E,Ow:()=>ve,Rs:()=>r.Rs,Vl:()=>r.Vl,Js:()=>r.Js,db:()=>r.db,Tq:()=>r.Tq,jC:()=>le,BM:()=>ue,u8:()=>D,Lo:()=>I,Ul:()=>C,Nl:()=>o.Nl,pE:()=>o.pE,G9:()=>o.G9,eA:()=>o.eA,Bf:()=>o.Bf,Hp:()=>o.Hp,ZV:()=>o.ZV,pK:()=>o.pK,Ru:()=>o.Ru,NB:()=>r.NB,MF:()=>b,CD:()=>M,rl:()=>z,hC:()=>Q,CI:()=>P,B4:()=>v,ss:()=>y,jM:()=>w,cS:()=>r.cS,YC:()=>o.YC,kM:()=>r.kM,Mg:()=>o.Mg,Ak:()=>l,i4:()=>o.i4,Sm:()=>o.Sm,ih:()=>o.ih,Z0:()=>r.Z0});var r=n(5527),o=n(8332),d=n(6137),a=n(3716),u=n(7361),s=n(4784);const i=new RegExp(a.FM,"i");function c(e){const{chatId:t,id:n}=e;return function(e,t){return`msg${e}-${t}`}(t,n)}function l(e){const t=e.match(/^msg(-?\d+)-(\d+)/);return{chatId:t[1],messageId:Number(t[2])}}function f(e){return e.previousLocalId||e.id}function h(e){const{text:t,sticker:n,photo:r,video:o,audio:d,voice:u,document:s,poll:i,webPage:c,contact:l,invoice:f}=e.content;return t?t.text:n||r||o||d||u||s||l||i||c||f?void 0:a.VC}function m(e){const{text:t,sticker:n,photo:r,video:o,audio:d,voice:a,document:u,poll:i,webPage:c,contact:l}=e.content;return!!(n||null!=o&&o.isRound)||!(!t||r||o||d||a||u||i||c||l)&&((0,s.Z)(t.text)||!1)}function p(e){const{text:t}=e.content;if(t&&t.text.length<=6&&1===m(e))return t.text}function g(e){const{text:t}=e.content;let n;if(null!=t&&t.entities){let e=t.entities.find((e=>e.type===d.Vv.TextUrl));if(e&&(n=e.url.match(i)),!n&&(e=t.entities.find((e=>e.type===d.Vv.Url)),e)){const{offset:r,length:o}=e;n=t.text.substring(r,r+o).match(i)}}if(!n&&t&&(n=t.text.match(i)),n)return{url:n[0],domain:n[3]}}function v(e){return e.isOutgoing}function y(e){return Boolean(e.replyToMessageId)}function b(e){return Boolean(e.forwardInfo)}function I(e){return Boolean(e.content.action)}function w(e){return e.chatId===a.aw&&Math.round(e.id)!==e.id}function C(e){return Boolean(e.senderId)&&!(0,o.YC)(e.senderId)&&v(e)}function S(e,t){return(0,o.YC)(t.id)?(0,r.Js)(t):(0,o.U)(e,t)}function E(e){return e.sendingState?"messageSendingStateFailed"===e.sendingState?"failed":"pending":"succeeded"}function P(e){return e.id>=a.AE}function M(e){return e.content.action&&"historyClear"===e.content.action.type}function A(e){const{content:t}=e,n=t.webPage?t.webPage.video:t.video,r=t.webPage?t.webPage.photo:t.photo,o=t.webPage?t.webPage.document:t.document;if(o)return o.fileName;if(n)return n.fileName;if(t.sticker){const e=t.sticker.isLottie?"tgs":t.sticker.isGif?"webm":(0,u.on)()?"webp":"png";return`${t.sticker.id}.${e}`}if(t.audio)return t.audio.fileName;const d=c(e);return r?`${d}.jpg`:t.voice?u.m5?`${d}.ogg`:`${d}.wav`:d}function k(e){return!e.results.some((e=>e.count>0))}var T=n(8035);const N=["⠺","⠵","⠞","⠟"],L=80;function R(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:L;const o=!n&&Z(t),d=o?`${o} `:"",a=(0,T.Z)(x(t),r),u=B(e,t,a);return`${d}${u}`}function x(e){const t=h(e);if(!t)return;const{entities:n}=e.content.text||{};return null!=n&&n.length?n.reduce(((e,t)=>{let{type:n,offset:r,length:o}=t;if(n!==d.Vv.Spoiler)return e;const a=function(e){return new Array(e).fill(void 0).map((()=>N[Math.floor(Math.random()*N.length)])).join("")}(o);return`${e.substr(0,r)}${a}${e.substr(r+o,e.length)}`}),t):t}function Z(e){const{photo:t,video:n,audio:r,voice:o,document:d,sticker:a,poll:u}=e.content;return e.groupedId||t?"🖼":n?"📹":a?a.emoji:r?"🎧":o?"🎤":d?"📎":u?"📊":void 0}function B(e,t,n){const{text:r,photo:o,video:d,audio:u,voice:s,document:i,sticker:c,contact:l,poll:f,invoice:h}=t.content;return t.groupedId?n||e("lng_in_dlg_album"):o?n||e("AttachPhoto"):d?n||e(d.isGif?"AttachGif":"AttachVideo"):c?e("AttachSticker").trim():u?function(e){const{audio:t,text:n}=e.content;return t&&[t.title,t.performer].filter(Boolean).join(" — ")||(null==n?void 0:n.text)}(t)||e("AttachMusic"):s?n||e("AttachAudio"):i?n||i.fileName:l?e("AttachContact"):f?f.summary.question:h?"Invoice":r?n:a.VC}var O=n(5376);function F(e){return e.content}function D(e){return Boolean(_(e)||$(e)||H(e)||G(e)||function(e){return e.content.contact}(e)||K(e)||j(e)||V(e)||W(e))}function _(e){return e.content.photo}function $(e){return e.content.video}function U(e){const{video:t}=e.content;return null!=t&&t.isRound?t:void 0}function j(e){return e.content.action}function V(e){return e.content.audio}function W(e){return e.content.voice}function G(e){return e.content.sticker}function H(e){return e.content.document}function z(e){const t=H(e);return t?"photo"===t.mediaType:void 0}function Q(e){const t=H(e);return t?"video"===t.mediaType:void 0}function K(e){return e.content.poll}function J(e){return e.content.invoice}function q(e){return e.content.webPage}function Y(e){var t;return null===(t=q(e))||void 0===t?void 0:t.photo}function X(e){var t;return null===(t=q(e))||void 0===t?void 0:t.video}function ee(e){var t;return null===(t=function(e){const t=_(e)||$(e)||H(e)||G(e)||Y(e)||X(e);if(t)return t.thumbnail}(e))||void 0===t?void 0:t.dataUri}function te(e,t){const{photo:n,video:r,sticker:o,audio:d,voice:a,document:u}=e.content,s=Y(e),i=X(e),l=r||i,f=n||s;if(!(f||l||o||d||a||u))return;const h=(f||l||o||d||a||u).id,m=`${c(e)}${h?`:${h}`:""}`;if(l)switch(t){case"micro":case"pictogram":case"viewerPreview":return`${m}?size=m`;case"inline":return ue(e)?void 0:ne(l,m);case"viewerFull":return ne(l,m);case"download":return`${m}?download`}if(f)switch(t){case"micro":case"pictogram":return`${m}?size=m`;case"inline":return ue(e)?void 0:`${m}?size=x`;case"viewerPreview":return`${m}?size=x`;case"viewerFull":case"download":return`${m}?size=z`}if(u)switch(t){case"micro":case"pictogram":case"inline":case"viewerPreview":if(!(0,O.v6)(u)||ue(e))return;return`${m}?size=m`;case"viewerFull":case"download":return m}if(o)switch(t){case"micro":return;case"pictogram":return`${m}?size=m`;case"inline":return m;case"download":return`${m}?download`}if(d)switch(t){case"micro":case"pictogram":return re(d)?`${m}?size=m`:void 0;case"inline":return ne(d,m);case"download":return`${m}?download`}if(a)switch(t){case"micro":case"pictogram":return;case"inline":return m;case"download":return`${m}?download`}}function ne(e,t){return u.I_&&u.s$?`${t}?fileSize=${e.size}&mimeType=${e.mimeType}`:t}function re(e){return e.thumbnailSizes&&e.thumbnailSizes.length>0}function oe(e,t){const{sticker:n,video:r,audio:o,voice:a}=e.content,s=r||X(e);return n&&"inline"===t&&n.isLottie?d.IU.Lottie:s&&u.I_&&("viewerFull"===t||"inline"===t)?d.IU.Progressive:o||a?a&&!u.m5?d.IU.BlobUrl:d.IU.Progressive:d.IU.BlobUrl}function de(e){const{photo:t,video:n,document:r}=e.content,o=Y(e),d=X(e);if(t||o)return`photo${e.date}.jpeg`;const{fileName:a}=n||d||r||{};return a}function ae(e){const{video:t,document:n}=e.content,r=X(e),{size:o}=t||r||n||{};return o}function ue(e){const{photo:t,video:n,document:r}=e.content;return(null==t?void 0:t.blobUrl)||(null==n?void 0:n.blobUrl)||(null==r?void 0:r.previewBlobUrl)}function se(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return he(e,t,n?"media":"inlineMedia")}function ie(e){return e.sizes.find((e=>"z"===e.type))||e.sizes.find((e=>"y"===e.type))||ce(e)}function ce(e){return e.sizes.find((e=>"x"===e.type))||e.sizes.find((e=>"m"===e.type))||e.sizes.find((e=>"s"===e.type))||e.thumbnail}function le(e){if(e.width&&e.height)return e}function fe(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=P(e),o=r||n,d=Number(t);return{isUploading:r,isTransferring:o,transferProgress:d}}function he(e,t,n){let r;switch(n){case"media":r=e=>{const t=$(e);return _(e)||t&&!t.isRound&&!t.isGif};break;case"documents":r=H;break;case"links":r=e=>q(e)||function(e){const{text:t}=e.content,n=t&&t.text.match(i);if(n)return{url:n[0],domain:n[3]}}(e);break;case"audio":r=V;break;case"voice":r=e=>{const t=$(e);return W(e)||t&&t.isRound};break;case"inlineMedia":r=e=>{const t=$(e);return _(e)||t&&!t.isRound&&!t.isGif||z(e)||Q(e)};break;default:return[]}return t.reduce(((t,n)=>(e[n]&&r(e[n])&&t.push(n),t)),[])}function me(e){const{audio:t,voice:n,video:r}=F(e),o=t||n||r||X(e);if(o)return o.duration}function pe(e,t){return`${e}_${t}`}const ge={missing_payment_information:{field:"cardNumber",message:"Incorrect card number"},invalid_number:{field:"cardNumber",message:"Incorrect card number"},number:{field:"cardNumber",message:"Incorrect card number"},exp_year:{field:"expiry",message:"Incorrect year"},exp_month:{field:"expiry",message:"Incorrect month"},invalid_expiry_year:{field:"expiry",message:"Incorrect year"},invalid_expiry_month:{field:"expiry",message:"Incorrect month"},cvc:{field:"cvv",message:"Incorrect CVV"},invalid_cvc:{field:"cvv",message:"Incorrect CVV"}};function ve(e){const{message:t,code:n,param:r}=e,{field:o,message:d}=r?ge[r]:ge[n];return{field:o,message:d,description:t}}},5527:(e,t,n)=>{n.d(t,{Vl:()=>i,Js:()=>c,Tq:()=>l,kM:()=>f,NB:()=>h,cS:()=>m,kw:()=>p,Z0:()=>g,kK:()=>v,db:()=>y,Rs:()=>b});var r=n(3716),o=n(790),d=n(782),a=n(2267),u=n(5765);const s=[1,8,5,2,7,4,6];function i(e){if(e)switch(e.type){case"userTypeBot":case"userTypeRegular":return e.firstName||e.lastName;case"userTypeDeleted":case"userTypeUnknown":return"Deleted";default:return}}function c(e){if(e){if(h(e))return"Deleted account";switch(e.type){case"userTypeBot":case"userTypeRegular":if(e.firstName&&e.lastName)return`${e.firstName} ${e.lastName}`;if(e.firstName)return e.firstName;if(e.lastName)return e.lastName;break;case"userTypeDeleted":case"userTypeUnknown":return"Deleted account"}}}function l(e,t,n,d){if(t.id===r.aw)return e("ServiceNotifications").toLowerCase();if(t.type&&"userTypeBot"===t.type)return e("Bot");if(!n)return"";switch(n.type){case"userStatusEmpty":return e("ALongTimeAgo");case"userStatusLastMonth":return e("WithinAMonth");case"userStatusLastWeek":return e("WithinAWeek");case"userStatusOffline":{const{wasOnline:t}=n;if(!t)return e("LastSeen.Offline");const r=new Date((new Date).getTime()+1e3*d),a=new Date(1e3*t);if(a>=r)return e("LastSeen.JustNow");const u=new Date(r.getTime()-a.getTime());if(u.getTime()/1e3<60)return e("LastSeen.JustNow");if(u.getTime()/1e3<3600)return e("LastSeen.MinutesAgo",Math.floor(u.getTime()/1e3/60));const s=new Date;if(s.setHours(0,0,0,0),a>new Date(s.getTime()+1e3*d))return u.getTime()/1e3<21600?e("LastSeen.HoursAgo",Math.floor(u.getTime()/1e3/60/60)):e("LastSeen.TodayAt",(0,o.mr)(e,a));const i=new Date;return i.setDate(r.getDate()-1),i.setHours(0,0,0,0),a>new Date(i.getTime()+1e3*d)?e("LastSeen.YesterdayAt",(0,o.mr)(e,a)):e("LastSeen.AtDate",(0,o.Tu)(e,a))}case"userStatusOnline":return e("Online");case"userStatusRecently":return e("Lately");default:return}}function f(e,t){const{id:n,type:o}=e;return!!t&&n!==r.aw&&"userStatusOnline"===t.type&&"userTypeBot"!==o}function h(e){return!e.noStatus&&"userTypeBot"!==e.type&&e.id!==r.aw&&("userTypeDeleted"===e.type||"userTypeUnknown"===e.type)}function m(e){return"userTypeBot"===e.type}function p(e){return!e.isContact&&!m(e)}function g(e,t,n,r){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return(0,d.Xo)(e,(e=>{const d=(0,a.b)(o);if(r&&r.includes(e))return d+172800-(r.length-r.indexOf(e));const u=t[e],s=n[e];if(!u||!s)return 0;if("userStatusOnline"===s.type)return s.expires;if("userStatusOffline"===s.type&&s.wasOnline)return s.wasOnline;switch(s.type){case"userStatusRecently":return d-86400;case"userStatusLastWeek":return d-604800;case"userStatusLastMonth":return d-18144e3;default:return 0}}),"desc")}function v(e,t,n,r,o){if(!n)return e;const d=(0,u.W)(n);return e.filter((e=>{const n=t[e];if(!n)return!1;const a=e===r?o:c(n);return a&&d(a)||d(n.username)}))}function y(e){return"number"==typeof e?Math.abs(e):Math.abs(Number(e))}function b(e){const t=e?y(e.id)%7:0;return s[t]}},6788:(e,t,n)=>{n.d(t,{Mg:()=>a,B1:()=>u,SL:()=>s,a4:()=>i,GL:()=>c,fZ:()=>l,Pi:()=>h,vv:()=>m,Dd:()=>p});var r=n(3716),o=n(782),d=n(9066);function a(e,t,n){return{...e,chats:{...e.chats,listIds:{...e.chats.listIds,[t]:n}}}}function u(e,t,n){const{[t]:r}=e.chats.listIds,o=null!=r&&r.length?n.filter((e=>!r.includes(e))):n;return r&&!o.length?e:a(e,t,[...r||[],...o])}function s(e,t){return{...e,chats:{...e.chats,byId:t}}}function i(e,t,n,r){const{byId:o}=e.chats,d=f(e,t,n,r);return d?s(e,{...o,[t]:d}):e}function c(e,t){const n=Object.keys(t).reduce(((n,r)=>{const o=f(e,r,t[r]);return o&&(n[r]=o),n}),{});return e=s(e,{...e.chats.byId,...n})}function l(e,t){const{byId:n}=e.chats;let r=!1;const o=Object.keys(t).reduce(((o,d)=>{if(!n[d]||n[d].isMin&&!t[d].isMin){const n=f(e,d,t[d]);n&&(o[d]=n,r||(r=!0))}return o}),{});return r?e=s(e,{...n,...o}):e}function f(e,t,n,r){const{byId:d}=e.chats,a=d[t],u=n.isMin&&a&&!a.isMin,s={...a,...u?(0,o.CE)(n,["isMin","accessHash"]):n,...r&&{photos:[r,...a.photos||[]]}};if(s.id&&s.type)return s}function h(e,t,n){const o=n===r.WS?"archived":"active";let d=e.chats.listIds;return Object.keys(d).forEach((e=>{const n=d[e]||[];e!==o||n.includes(t)?e!==o&&n.includes(t)&&(d={...d,[e]:n.filter((e=>e!==t))}):d={...d,[e]:[...n,t]}})),i(e={...e,chats:{...e.chats,listIds:d}},t,{folderId:n||void 0})}function m(e,t,n){const r="active"===t?"all":"archived";return{...e,chats:{...e.chats,...n.orderedPinnedIds&&{orderedPinnedIds:{...e.chats.orderedPinnedIds,[t]:n.orderedPinnedIds}},totalCount:{...e.chats.totalCount,[r]:n.totalChatCount},isFullyLoaded:{...e.chats.isFullyLoaded,[t]:!1}}}}function p(e,t){const n=(0,d.Ek)(e,t);if(!n)return e;const{[n]:r}=e.chats.listIds;return r&&(e=a(e,n,r.filter((e=>e!==t)))),i(e,t,{isNotJoined:!0})}},9959:(e,t,n)=>{n.d(t,{O4:()=>z,c_:()=>o.c_,fZ:()=>r.fZ,m6:()=>o.m6,aK:()=>G,aJ:()=>W,zn:()=>P,Sh:()=>y,$S:()=>o.$S,bp:()=>re,WY:()=>oe,K4:()=>o.K4,bV:()=>o.bV,GK:()=>I,M6:()=>o.M6,i9:()=>o.i9,Dd:()=>r.Dd,vy:()=>f,rB:()=>Q,g_:()=>c,Mg:()=>r.Mg,SL:()=>r.SL,Pb:()=>Z,w3:()=>o.w3,BI:()=>j,lr:()=>V,pf:()=>o.pf,ps:()=>E,s5:()=>m,y9:()=>o.y9,nA:()=>X,_7:()=>te,Q$:()=>Y,Dq:()=>ne,vT:()=>q,QH:()=>ee,Ob:()=>o.Ob,a4:()=>r.a4,B1:()=>r.B1,vv:()=>r.vv,Pi:()=>r.Pi,cY:()=>o.cY,GL:()=>r.GL,Wy:()=>o.Wy,wV:()=>o.wV,cq:()=>o.cq,rq:()=>i,No:()=>A,Og:()=>k,xv:()=>N,px:()=>T,xj:()=>o.xj,c1:()=>D,z5:()=>F,qr:()=>x,dx:()=>B,fw:()=>U,H9:()=>$,HN:()=>H,ff:()=>o.ff,P4:()=>o.P4,TM:()=>J,Fn:()=>o.Fn,Rg:()=>s,z3:()=>u,IM:()=>l,Xg:()=>o.Xg,j6:()=>o.j6,lG:()=>o.lG,IE:()=>K,Nq:()=>g,Lm:()=>w,Q3:()=>C,eD:()=>v});var r=n(6788),o=n(3495),d=n(782),a=n(9066);function u(e,t,n,r,o){const a=r.map((t=>{const n=e.stickers.setsById[t.id];return n?{...n,...t}:t}));return{...e,stickers:{...e.stickers,setsById:{...e.stickers.setsById,...(0,d.ee)(a,"id")},[t]:{...e.stickers[t],hash:n,..."search"===t?{resultIds:o}:{setIds:r.map((e=>{let{id:t}=e;return t}))}}}}}function s(e,t,n){const r=e.stickers.setsById[t]||{},o=e.stickers.added.setIds||[];let d=o;return n.installedDate&&o&&!o.includes(t)&&(d=[t,...d]),!n.installedDate&&null!=o&&o.includes(t)&&(d=d.filter((e=>e!==t))),{...e,stickers:{...e.stickers,added:{...e.stickers.added,setIds:d},setsById:{...e.stickers.setsById,[t]:{...r,...n}}}}}function i(e,t,n,r){const{results:o}=e.gifs.search;let d;if(t||!o)d=n;else{const e=new Set(o.map((e=>e.id)));d=[...o,...n.filter((t=>!e.has(t.id)))]}return{...e,gifs:{...e.gifs,search:{...e.gifs.search,offset:r,results:d}}}}function c(e,t){return{...e,animatedEmojis:t}}function l(e,t,n,r){const o=[...(0,a.Pk)(e,t),...n||[]],u=(0,d.Tw)(o.map((e=>{let{id:t}=e;return t}))),s=(0,d.ee)(o,"id"),i=u.map((e=>s[e]));return{...e,stickers:{...e.stickers,forEmoji:{emoji:t,stickers:i,hash:r}}}}function f(e){const{emoji:t,stickers:n,hash:r}=e.stickers.forEmoji||{};return t?l(e,t,n,r):e}var h=n(735);function m(e,t){return{...e,users:{...e.users,byId:t}}}function p(e,t){const{userIds:n}=e.contactList||{};if(!n)return e;const r=t.filter((e=>(null==e?void 0:e.isContact)&&!n.includes(e.id))).map((e=>e.id));return 0===r.length?e:{...e,contactList:{userIds:[...r,...n]}}}function g(e,t,n){const{byId:r}=e.users,o=b(e,t,n);return o?m(e=p(e,[o]),{...r,[t]:o}):e}function v(e,t){const n=Object.keys(t).reduce(((n,r)=>{const o=b(e,r,t[r]);return o&&(n[r]=o),n}),{});return e=p(e=m(e,{...e.users.byId,...n}),Object.values(n))}function y(e,t){const{byId:n}=e.users;let r=!1;const o=Object.keys(t).reduce(((o,d)=>{if(!n[d]||n[d].isMin&&!t[d].isMin){const n=b(e,d,t[d]);n&&(o[d]=n,r||(r=!0))}return o}),{});return r?e=p(e=m(e,{...n,...o}),Object.values(o)):e}function b(e,t,n){const{byId:r}=e.users,o=r[t],a=n.isMin&&o&&!o.isMin,u={...o,...a?(0,d.CE)(n,["isMin","accessHash"]):n};if(u.id&&u.type)return u}function I(e,t){const{byId:n}=e.users,{userIds:r}=e.contactList||{};return m(e={...e,contactList:{userIds:r?r.filter((e=>e!==t)):h.D}},{...n,[t]:{...n[t],isContact:void 0}})}function w(e,t){return{...e,userSearch:{...e.userSearch,...t}}}function C(e,t){return w(e,{fetchingStatus:t})}function S(e,t,n){const{byId:r}=e.users,o=r[t];return o&&o.fullInfo?g(e,t,{...o,fullInfo:{...o.fullInfo,isBlocked:n}}):e}function E(e,t){return{...e,users:{...e.users,statusesById:t}}}function P(e,t){const{statusesById:n}=e.users,r=Object.keys(t).filter((e=>!n[e]));return r.length?e=E(e,{...n,...(0,d.ei)(t,r)}):e}const M=e=>`${e.chatId}_${e.id}`;function A(e,t){return{...e,globalSearch:{...e.globalSearch,...t}}}function k(e,t){return A(e,{currentContent:t})}function T(e,t,n,r,o){var a;const{resultsByType:u}=e.globalSearch||{},s=t.reduce(((e,t)=>(e[M(t)]=t,e)),{}),i=null==u||null===(a=u[r])||void 0===a?void 0:a.foundIds;if(void 0!==i&&Object.keys(s).every((e=>i.includes(M(s[e])))))return N(e,{messages:!1});const c=i||[],l=t.map((e=>M(e))),f=Array.prototype.concat(c,l),h=(0,d.et)(c,f)?c:f;return A(e=N(e,{messages:!1}),{resultsByType:{...(e.globalSearch||{}).resultsByType,[r]:{totalCount:n,nextOffsetId:o,foundIds:h}}})}function N(e,t){return A(e,{fetchingStatus:{...e.globalSearch.fetchingStatus,...t}})}var L=n(8415);function R(e,t,n){return{...e,localTextSearch:{byChatThreadKey:{...e.localTextSearch.byChatThreadKey,[t]:n}}}}function x(e,t,n,r,o){const d=(0,L.uw)(t,n);return R(e,d,{...e.localTextSearch.byChatThreadKey[d],isActive:r,query:o})}function Z(e,t,n,r,o,d){const a=(0,L.uw)(t,n);return R(e,a,{...e.localTextSearch.byChatThreadKey[a],results:{foundIds:r,totalCount:o,nextOffsetId:d}})}function B(e,t,n,r,o,a){const u=(0,L.uw)(t,n),{results:s}=e.localTextSearch.byChatThreadKey[u]||{},i=(null==s?void 0:s.foundIds)||[],c=_((0,d.Tw)(Array.prototype.concat(i,r)));return Z(e,t,n,(0,d.et)(i,c)?i:c,o,a)}function O(e,t,n){return{...e,localMediaSearch:{byChatId:{...e.localMediaSearch.byChatId,[t]:n}}}}function F(e,t,n){return O(e,t,{...e.localMediaSearch.byChatId[t],currentType:n})}function D(e,t,n,r,o,a){const{resultsByType:u}=e.localMediaSearch.byChatId[t]||{},s=null!=u&&u[n]?u[n].foundIds:[],i=_((0,d.Tw)(Array.prototype.concat(s,r)));return function(e,t,n,r,o,d){return O(e,t,{...e.localMediaSearch.byChatId[t],resultsByType:{...(e.localMediaSearch.byChatId[t]||{}).resultsByType,[n]:{foundIds:r,totalCount:o,nextOffsetId:d}}})}(e,t,n,(0,d.et)(s,i)?s:i,o,a)}function _(e){return e.sort(((e,t)=>t-e))}function $(e,t){return{...e,management:{...e.management,progress:t}}}function U(e,t,n){return{...e,management:{...e.management,byChatId:{...e.management.byChatId,[t]:{...e.management.byChatId[t]||{},...n}}}}}function j(e,t){return{...e,settings:{...e.settings,byKey:{...e.settings.byKey,...t}}}}function V(e,t,n){return{...e,settings:{...e.settings,themes:{...e.settings.themes,[t]:{...e.settings.themes[t]||{},...n}}}}}function W(e,t){return t.forEach((t=>{const{chatId:n,...r}=t;e=G(e,n,r)})),e}function G(e,t,n){return{...e,settings:{...e.settings,notifyExceptions:{...e.settings.notifyExceptions,[t]:n}}}}function H(e,t,n,r){switch(t){case"contact":return j(e,{...void 0!==n&&{hasPrivateChatsNotifications:!n},...void 0!==r&&{hasPrivateChatsMessagePreview:r}});case"group":return j(e,{...void 0!==n&&{hasGroupNotifications:!n},...void 0!==r&&{hasGroupMessagePreview:r}});case"broadcast":return j(e,{...void 0!==n&&{hasBroadcastNotifications:!n},...void 0!==r&&{hasBroadcastMessagePreview:r}});default:return}}function z(e,t){return e=S(e,t,!0),{...e,blocked:{...e.blocked,ids:[t,...e.blocked.ids],totalCount:e.blocked.totalCount+1}}}function Q(e,t){return e=S(e,t,!1),{...e,blocked:{...e.blocked,ids:e.blocked.ids.filter((e=>e!==t)),totalCount:e.blocked.totalCount-1}}}function K(e,t){return{...e,twoFaSettings:{...e.twoFaSettings,...t}}}function J(e,t){return{...e,payment:{...e.payment,shippingOptions:t}}}function q(e,t){return{...e,payment:{...e.payment,requestId:t}}}function Y(e,t){return{...e,payment:{...e.payment,step:t}}}function X(e,t){if(!t.content||!t.content.invoice)return e;const{title:n,text:r,amount:o,currency:d,isTest:a,photoUrl:u}=t.content.invoice;return{...e,payment:{...e.payment,invoiceContent:{title:n,text:r,photoUrl:u,amount:o,currency:d,isTest:a}}}}function ee(e,t){return{...e,payment:{...e.payment,stripeCredentials:{...t}}}}function te(e,t){return{...e,payment:{...e.payment,...t}}}function ne(e,t,n){if(!t||!n)return{...e,payment:{...e.payment,receipt:void 0}};const{invoice:r}=n.content,{photoUrl:o,text:d,title:a}=r||{};return{...e,payment:{...e.payment,receipt:{...t,photoUrl:o,text:d,title:a}}}}function re(e){return{...e,payment:{}}}function oe(e){return{...e,payment:{...e.payment,isPaymentModalOpen:!1}}}},3495:(e,t,n)=>{n.d(t,{Wy:()=>u,pf:()=>c,m6:()=>l,c_:()=>f,cY:()=>h,P4:()=>m,K4:()=>p,bV:()=>g,xj:()=>v,ff:()=>y,$S:()=>I,y9:()=>w,Xg:()=>C,j6:()=>S,w3:()=>E,cq:()=>P,Fn:()=>M,wV:()=>A,M6:()=>k,Ob:()=>T,i9:()=>N,lG:()=>L});var r=n(6137),o=n(3716),d=n(9066),a=n(782);function u(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r._f,d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"thread",a=arguments.length>4?arguments[4]:void 0;const{messageLists:u}=e.messages;let s=u;if(a||o.Cg)s=t?[{chatId:t,threadId:n,type:d}]:[];else if(t){const e=u[u.length-1];e&&e.chatId===t&&e.threadId===n&&e.type===d||(s=e&&e.chatId===o.AJ?[...u.slice(0,-1),{chatId:t,threadId:n,type:d}]:[...u,{chatId:t,threadId:n,type:d}])}else s=u.slice(0,-1);return{...e,messages:{...e.messages,messageLists:s}}}function s(e,t,n){return i(e,t,{byId:n})}function i(e,t,n){const r=e.messages.byChatId[t]||{byId:{},threadsById:{}};return{...e,messages:{...e.messages,byChatId:{...e.messages.byChatId,[t]:{...r,...n}}}}}function c(e,t,n,r,o){return function(e,t,n,r){const o=e.messages.byChatId[t];return i(e,t,{threadsById:{...null==o?void 0:o.threadsById,[n]:{...null==o?void 0:o.threadsById[n],...r}}})}(e,t,n,{[r]:o})}function l(e,t){const n=t.reduce(((e,t)=>(e[t.chatId]||(e[t.chatId]={}),e[t.chatId][t.id]=t,e)),{});return Object.keys(n).forEach((t=>{e=f(e,t,n[t])})),e}function f(e,t,n){const r=(0,d.Zw)(e,t);return r&&Object.keys(n).every((e=>Boolean(r[Number(e)])))?e:s(e,t,{...n,...r})}function h(e,t,n,r){const o=(0,d.Zw)(e,t)||{},a={...o[n],...r};return a.id?s(e,t,{...o,[n]:a}):e}function m(e,t,n,r){const o=(0,d.Fn)(e,t)||{},a={...o[n],...r};return a.id?E(e,t,{...o,[n]:a}):e}function p(e,t,n){const r=(0,d.Zw)(e,t);if(!r)return e;const o=(0,a.CE)(r,n),i=Object.values((0,a.q0)(r,n)).filter((e=>{let{forwardInfo:t}=e;return null==t?void 0:t.isLinkedChannelPost}));if(Object.keys(e.messages.byChatId[t].threadsById).map(Number).forEach((r=>{const o=(0,d.tZ)(e,t,r);let a=(0,d.gb)(e,t,r),u=(0,d.qC)(e,t,r),s=(0,d.Cb)(e,t,r),i=(0,d.KB)(e,t),l=null==o?void 0:o.messagesCount;n.forEach((e=>{a&&a.includes(e)&&(a=a.filter((t=>t!==e)),void 0!==l&&(l-=1)),u&&u.includes(e)&&(u=u.filter((t=>t!==e))),s&&s.includes(e)&&(s=s.filter((t=>t!==e))),i&&i.includes(e)&&(i=i.filter((t=>t!==e)))})),e=c(e,t,r,"listedIds",a),e=c(e,t,r,"outlyingIds",u),e=c(e,t,r,"viewportIds",s),e=c(e,t,r,"pinnedIds",i),o&&void 0!==l&&(e=c(e,t,r,"threadInfo",{...o,messagesCount:l}))})),i.length){const n=(0,d.Bt)(e),r=n&&n.chatId===t&&"thread"===n.type,o=null==n?void 0:n.threadId;i.forEach((n=>{const{fromChatId:a,fromMessageId:s}=n.forwardInfo,i=(0,d.hj)(e,a,s);r&&o===s&&(e=u(e,t)),i&&(e=h(e,a,s,{threadInfo:void 0}))}))}return e=s(e,t,o)}function g(e,t,n){const o=(0,d.Fn)(e,t);if(!o)return e;const u=(0,a.CE)(o,n);let s=(0,d.qy)(e,t);return s&&(n.forEach((e=>{s.includes(e)&&(s=s.filter((t=>t!==e)))})),e=c(e,t,r._f,"scheduledIds",s)),E(e,t,u)}function v(e,t,n,r){const o=(0,d.gb)(e,t,n),a=null!=o&&o.length?r.filter((e=>!o.includes(e))):r;return o&&!a.length?e:c(e,t,n,"listedIds",b([...o||[],...a]))}function y(e,t,n,r){const o=(0,d.qC)(e,t,n),a=null!=o&&o.length?r.filter((e=>!o.includes(e))):r;return o&&!a.length?e:c(e,t,n,"outlyingIds",b([...o||[],...a]))}function b(e){return e.sort(((e,t)=>e-t))}function I(e,t,n,r){const a=(0,d.Cb)(e,t,n)||[];return a.includes(r)?e:c(e,t,n,"viewportIds",b([...a.length{e=C(e,t.chatId,t.threadId,t)})),e}function E(e,t,n){return function(e,t,n){const r=e.scheduledMessages.byChatId[t]||{byId:{},hash:0};return{...e,scheduledMessages:{byChatId:{...e.scheduledMessages.byChatId,[t]:{...r,...n}}}}}(e,t,{byId:n})}function P(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return{...e,focusedMessage:{...e.focusedMessage,chatId:t,messageId:n,noHighlight:r,isResizingContainer:o}}}function M(e,t,n){return{...e,messages:{...e.messages,sponsoredByChatId:{...e.messages.sponsoredByChatId,[t]:n}}}}function A(e,t){return{...e,focusedMessage:{...e.focusedMessage,direction:t}}}function k(e,t,n){return{...e,selectedMessages:{chatId:t,messageIds:n?Array.prototype.concat([],n):[]}}}function T(e,t,n,r,o,u,s){let i=arguments.length>7&&void 0!==arguments[7]&&arguments[7];const{selectedMessages:c}=e;u&&(s=(0,d.xH)(e,t,u));const l=s||[o];if(!c)return k(e,t,l);const{messageIds:f}=c;let h;const m=l.filter((e=>!f.includes(e)));if(m&&!m.length)h=f.filter((e=>!l.includes(e)));else if(i&&f.length){const u=(0,d.$W)(e,t,n,r),s=u.indexOf(f[f.length-1]),i=u.indexOf(o),c=Math.min(s,i),l=Math.max(s,i),m=u.slice(c,l+1);h=(0,a.Tw)([...f,...m])}else h=[...f,...m];return h.length?{...e,selectedMessages:{...c,messageIds:h}}:N(e)}function N(e){return{...e,selectedMessages:void 0}}function L(e,t,n,r,o){const{channelPostId:a,fromChatId:u}=t.forwardInfo||{};if(a&&u){const t=(0,d.tZ)(e,n,a);t&&(e=c(e,n,a,"threadInfo",{...t,lastMessageId:r,messagesCount:t.messagesCount+(o?-1:1)}))}return e}},8857:(e,t,n)=>{n.d(t,{Z1:()=>u,Dg:()=>s,FM:()=>i,xo:()=>c,P_:()=>l,YK:()=>f,IK:()=>h,pk:()=>m,g4:()=>p,N:()=>g,Ek:()=>v,Mw:()=>y,ep:()=>b,DI:()=>I,UW:()=>w,_5:()=>C});var r=n(6137),o=n(8415),d=n(6376),a=n(3716);function u(e,t){return e.chats.byId[t]}function s(e,t){const n=(0,o.zX)(t);return!!n&&(0,d.dy)(e,n)}function i(e,t){return t===e.currentUserId}function c(e,t){const n=s(e,t);return n&&(0,o.cS)(n)}function l(e){return Object.values(e.chats.byId).find((e=>{let{isSupport:t}=e;return t}))}function f(e,t){if(!(0,o.YC)(t.id)&&!(0,o.eA)(t)&&t.fullInfo)return t.fullInfo.members&&t.fullInfo.members.length!==a.mo?t.fullInfo.members.reduce(((t,n)=>{let{userId:r}=n;return r!==e.currentUserId&&e.users.byId[r]&&(0,o.kM)(e.users.byId[r],e.users.statusesById[r])?t+1:t}),0):t.fullInfo.onlineCount}function h(e,t){const n=u(e,t),r=n&&(0,o.zX)(n),a=r&&(0,d.dy)(e,r);if(a&&(0,o.cS)(a))return a}function m(e,t){const n=u(e,t),d=h(e,t);if(!n||!d)return!1;if(n.lastMessage&&(0,o.CD)(n.lastMessage))return!0;const a=e.messages.byChatId[t];if(!a)return!1;const{listedIds:s}=a.threadsById[r._f]||{};return s&&!s.length}function p(e){return Boolean(e.chats.listIds.active)}function g(e,t,n){const{listIds:r}=e.chats;if(n){const e=r[n];return Boolean(e&&e.includes(t))}return Object.values(r).some((e=>e&&e.includes(t)))}function v(e,t){const n=u(e,t);if(n&&g(e,t))return n.folderId===a.WS?"archived":"active"}function y(e,t){return e.chatFolders.byId[t]}function b(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.Nf;const{active:r,archived:o}=e.chats.orderedPinnedIds;if(n===a.Nf)return Boolean(null==r?void 0:r.includes(t));if(n===a.WS)return Boolean(null==o?void 0:o.includes(t));const{byId:d}=e.chatFolders,{pinnedChatIds:u}=d[n]||{};return Boolean(null==u?void 0:u.includes(t))}function I(e,t){const n=t.toLowerCase();return Object.values(e.chats.byId).find((e=>e.username&&e.username.toLowerCase()===n))}function w(e){return Boolean(u(e,a.aw))}function C(e,t){var n;const r=u(e,t);if(!r)return;const o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.sendAsId;return o?(0,d.dy)(e,o)||u(e,o):void 0}},9066:(e,t,n)=>{n.d(t,{hg:()=>Q,xs:()=>le,_k:()=>ae,zB:()=>v,tH:()=>y,Oh:()=>b,g4:()=>u.g4,bH:()=>Ee,__:()=>Me,xl:()=>ue,Nu:()=>ie,nB:()=>se,Z1:()=>u.Z1,IK:()=>u.IK,DI:()=>u.DI,Mw:()=>u.Mw,Ek:()=>u.Ek,hj:()=>J,ZB:()=>X,Zw:()=>A,YK:()=>u.YK,Dg:()=>u.Dg,X5:()=>ge,jr:()=>M,yN:()=>f,JX:()=>je,pP:()=>Fe,we:()=>Be,$W:()=>R,Bt:()=>P,y5:()=>l,n5:()=>Ze,q6:()=>Re,Ms:()=>$,_$:()=>D,kK:()=>Y,wU:()=>_,yZ:()=>V,It:()=>me,G$:()=>ee,y8:()=>be,cv:()=>de,ku:()=>Ne,pk:()=>u.pk,N:()=>u.N,ep:()=>u.ep,xo:()=>u.xo,FM:()=>u.FM,a6:()=>we,te:()=>ce,Ev:()=>pe,CA:()=>ve,zQ:()=>De,_X:()=>te,EV:()=>Te,vk:()=>ye,Jf:()=>$e,UW:()=>u.UW,s4:()=>s.s4,b9:()=>K,VF:()=>ke,gb:()=>N,CP:()=>I,cu:()=>w,ji:()=>C,aW:()=>Oe,xH:()=>Ie,FT:()=>Se,tV:()=>U,NJ:()=>Je,dZ:()=>Ke,dT:()=>re,qC:()=>L,gx:()=>Ve,eh:()=>Ge,Mz:()=>We,sp:()=>He,KB:()=>Z,$$:()=>ze,rd:()=>he,p9:()=>W,Yy:()=>F,Wq:()=>_e,qy:()=>B,Tm:()=>q,Fn:()=>k,Vt:()=>O,D7:()=>Ce,_5:()=>u._5,Ur:()=>oe,yB:()=>Ae,fS:()=>Le,Ny:()=>h,E_:()=>m,Pk:()=>p,i3:()=>Qe,P_:()=>u.P_,Pu:()=>Ue,Db:()=>z,tZ:()=>j,Cm:()=>G,qS:()=>H,uZ:()=>fe,dy:()=>s.dy,ss:()=>s.ss,Cb:()=>x,P2:()=>xe});var r=n(1713),o=n(7361),d=n(6137),a=n(3716),u=n(8857),s=n(6376),i=n(8415),c=n(782);function l(e){return e.stickers.search}function f(e){return e.gifs.search}function h(e,t){return e.stickers.setsById[t]}function m(e,t){return Object.values(e.stickers.setsById).find((e=>e.shortName.toLowerCase()===t.toLowerCase()))}function p(e,t){const n=Object.values(e.stickers.setsById);let r=[];return e.stickers.favorite.stickers.forEach((e=>{e.emoji===t&&r.push(e)})),n.forEach((e=>{let{packs:n}=e;n&&(r=r.concat(n[t]||[],n[g(t)]||[]))})),r}function g(e){return e.replace("️","")}function v(e,t){const{animatedEmojis:n}=e;if(!n||!n.stickers)return;const r=g(t);return n.stickers.find((e=>e.emoji===t||e.emoji===r))}function y(e,t){const{animatedEmojiEffects:n}=e;if(!n||!n.stickers)return;const r=g(t);return n.stickers.find((e=>e.emoji===t||e.emoji===r))}function b(e,t){var n;return null==e||null===(n=e.appConfig)||void 0===n?void 0:n.emojiSounds[g(t)]}function I(e,t){const n=g(t);return"🍑"===n?"Peach":"🍆"===n?"Eggplant":void 0}function w(e){return"Eggplant"===e?"Cumshot":void 0}function C(e){return"Cumshot"===e?"🍆":void 0}var S=n(2267),E=n(735);function P(e){const{messageLists:t}=e.messages;if(t.length)return t[t.length-1]}function M(e){const{chatId:t}=P(e)||{};return t?(0,u.Z1)(e,t):void 0}function A(e,t){var n;return null===(n=e.messages.byChatId[t])||void 0===n?void 0:n.byId}function k(e,t){var n;return null===(n=e.scheduledMessages.byChatId[t])||void 0===n?void 0:n.byId}function T(e,t,n,r){const o=e.messages.byChatId[t];if(!o)return;const d=o.threadsById[n];return d?d[r]:void 0}function N(e,t,n){return T(e,t,n,"listedIds")}function L(e,t,n){return T(e,t,n,"outlyingIds")}function R(e,t,n,r){switch(r){case"thread":return x(e,t,n);case"pinned":return Z(e,t);case"scheduled":return B(e,t)}}function x(e,t,n){return T(e,t,n,"viewportIds")}function Z(e,t){return T(e,t,d._f,"pinnedIds")}function B(e,t){return T(e,t,d._f,"scheduledIds")}function O(e,t,n){return T(e,t,n,"scrollOffset")}function F(e,t,n){return T(e,t,n,"replyingToId")}function D(e,t,n){return T(e,t,n,"editingId")}function _(e,t){return T(e,t,d._f,"editingScheduledId")}function $(e,t,n){return T(e,t,n,"draft")}function U(e,t,n){return T(e,t,n,"noWebPage")}function j(e,t,n){return T(e,t,n,"threadInfo")}function V(e,t,n){return T(e,t,n,"firstMessageId")}function W(e,t,n){return T(e,t,n,"replyStack")}function G(e,t,n){if(n===d._f)return(0,u.Z1)(e,t);const r=j(e,t,n);return r?(0,u.Z1)(e,r.originChannelId||t):void 0}function H(e,t,n){if(n===d._f)return;const r=j(e,t,n);return r?r.topMessageId:void 0}function z(e,t,n){const r=e.messages.byChatId[t];if(!r)return;const{replyToMessageId:o,replyToTopMessageId:d}=n;return o||d?Object.values(r.threadsById).find((e=>e.threadInfo&&(o&&o===e.threadInfo.topMessageId||d&&d===e.threadInfo.topMessageId))):void 0}function Q(e,t,n){const r=P(e);if(!r)return!1;const{threadInfo:o}=z(e,t,n)||{};return t===r.chatId&&(r.threadId===d._f||o&&r.threadId===o.threadId)}function K(e,t,n){const r=x(e,t,n);if(!r||!r.length)return!0;let o;if(n===d._f){const n=(0,u.Z1)(e,t);if(!n||!n.lastMessage)return!0;o=n.lastMessage.id}else{const r=j(e,t,n);if(!r||!r.lastMessageId)return;o=r.lastMessageId}return o>=a.AE&&!J(e,t,o)||r[r.length-1]>=o}function J(e,t,n){const r=A(e,t);return r?r[n]:void 0}function q(e,t,n){const r=k(e,t);return r?r[n]:void 0}function Y(e,t,n,r){if("scheduled"===r){const n=_(e,t);return n?q(e,t,n):void 0}{const r=D(e,t,n);return r?J(e,t,r):void 0}}function X(e,t){let n;for(const r of Object.values(e.messages.byChatId)){const{byId:e}=r;if(n=Object.values(e).find((e=>e.content.poll&&e.content.poll.id===t)),n)break}return n}function ee(e,t){const{chatId:n,messageId:r}=e.focusedMessage||{};return n===t?r:void 0}function te(e,t){const n=ee(e,t.chatId);return!!n&&(n===t.id||n===t.previousLocalId)}function ne(e,t){const{lastReadOutboxMessageId:n}=(0,u.Z1)(e,t.chatId)||{};return(0,i.CI)(t)||!n||n2&&void 0!==arguments[2]&&arguments[2];return ne(e,t)||n?(0,i.RI)(t):"read"}function oe(e,t){const{senderId:n}=t;if(n)return(0,i.YC)(n)?(0,s.dy)(e,n):(0,u.Z1)(e,n)}function de(e,t){const{forwardInfo:n}=t;if(n)return n.isChannelPost&&n.fromChatId?(0,u.Z1)(e,n.fromChatId):n.senderUserId?(0,s.dy)(e,n.senderUserId)||(0,u.Z1)(e,n.senderUserId):void 0}function ae(e,t,n){var r,o,d,a;const s=(0,u.Z1)(e,t.chatId);if(!s||s.isRestricted)return{};const c=(0,i.YC)(s.id),l=(0,u.FM)(e,t.chatId),f=(0,i.G9)(s),h=(0,i.ZV)(s),m=(0,i.eA)(s),p=(0,i.CI)(t),g=(0,i.jM)(t),v=(0,i.B4)(t),y=(0,i.Lo)(t),{content:b}=t,I=(l||h&&(0,i.VE)(s,"pinMessages")||m&&(0,i.VE)(s,"editMessages")||(0,S.b)(e.serverTimeOffset)-t.date<172800)&&!(b.sticker||b.contact||b.poll||b.action||b.audio||null!==(r=b.video)&&void 0!==r&&r.isRound)&&!(0,i.MF)(t)&&!t.viaBotId,w=!p&&!g&&(0,i.Qm)(s,n),C=c||s.isCreator||!m&&!(0,i.Mg)(s,"pinMessages")||(0,i.VE)(s,"pinMessages");let E=!p&&!g&&!y&&C,P=!1;const M=Z(e,s.id);E&&(P=Boolean(M&&M.includes(t.id)),E=!P);const A=!p&&!g&&(c||v||f||s.isCreator||(0,i.VE)(s,"deleteMessages")),k=!c&&!v,T=A&&(c&&!l||f&&(v||(0,i.VE)(s,"deleteMessages")||s.isCreator)),N=!p&&!y&&I&&(v||m&&(s.isCreator||(0,i.VE)(s,"editMessages"))),L=!p&&!y,R=Boolean(t.content.sticker),x=R&&function(e,t){const{stickers:n}=e.stickers.favorite;return n&&n.some((e=>{let{id:n}=e;return n===t.id}))}(e,t.content.sticker),B=!y&&R&&!x,O=!y&&x,F=!y,D=!y&&(m||h),_=!y,$=Boolean((null===(o=b.webPage)||void 0===o?void 0:o.document)||(null===(d=b.webPage)||void 0===d?void 0:d.video)||(null===(a=b.webPage)||void 0===a?void 0:a.photo)||b.audio||b.voice||b.photo||b.video||b.document||b.sticker);return{noOptions:[w,N,E,P,k,A,T,L,B,O,F,D,_,$].every((e=>!e)),canReply:w,canEdit:N,canPin:E,canUnpin:P,canReport:k,canDelete:A,canDeleteForAll:T,canForward:L,canFaveSticker:B,canUnfaveSticker:O,canCopy:F,canCopyLink:D,canSelect:_,canDownload:$}}function ue(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=P(e)||{},o=n&&A(e,n);if(!o||!t||!r)return{};const d=t.map((t=>o[t]&&ae(e,o[t],r))).filter(Boolean);return{canDelete:d.every((e=>e.canDelete)),canDeleteForAll:d.every((e=>e.canDeleteForAll))}}function se(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=P(e)||{},o=n&&A(e,n);return!!(o&&t&&r)&&t.map((t=>o[t]&&ae(e,o[t],r))).filter(Boolean).every((e=>e.canReport))}function ie(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=P(e)||{},o=n&&A(e,n);return!!(o&&t&&r)&&t.map((t=>o[t]&&ae(e,o[t],r))).filter(Boolean).some((e=>e.canDownload))}function ce(e,t){const n=e.activeDownloads.byChatId[t.chatId];return!!n&&n.includes(t.id)}function le(e,t){return e.activeDownloads.byChatId[t]||E.D}function fe(e,t){var n;return null===(n=e.fileUploads.byMessageLocalId[t.previousLocalId||t.id])||void 0===n?void 0:n.progress}function he(e,t,n){if(n===d._f){const n=(0,u.Z1)(e,t);if(!n)return;if(!n.lastReadInboxMessageId)return;return n.lastMessage?(0,i.CI)(n.lastMessage)?n.lastMessage.id:Math.min(n.lastMessage.id,n.lastReadInboxMessageId):n.lastReadInboxMessageId}{const r=j(e,t,n);if(!r)return;return r.lastReadInboxMessageId?Math.min(r.lastReadInboxMessageId,r.lastMessageId||1/0):r.topMessageId}}function me(e,t,n){const r=(0,u.Z1)(e,t);if(n===d._f){if(!r)return}else{const r=j(e,t,n);if(!r||void 0!==r.lastMessageId&&r.lastMessageId===r.lastReadInboxMessageId)return}const o=L(e,t,n),s=N(e,t,n),i=A(e,t);if(!i||!o&&!s)return;const c=he(e,t,n);if(!c&&r&&r.isNotJoined)return;const l=t===a.aw?e.serviceNotifications.reduce(((e,t)=>!t.isUnread&&t.id>e?t.id:e),-1):-1;function f(e){return e.find((e=>(!c||e>c)&&i[e]&&(!i[e].isOutgoing||i[e].isFromScheduled)&&e>l))}if(o){const e=f(o);if(e)return e}if(s){const e=f(s);if(e)return e}}function pe(e){const{forwardMessages:t}=e;return Boolean(t.isModalShown)}function ge(e,t){const n=Object.values(e.chats.byId).find((e=>(0,i.Ru)(e)&&e.lastMessage&&e.lastMessage.id===t));if(n)return n.id;const{byChatId:r}=e.messages;return Object.keys(r).find((n=>{const o=(0,u.Z1)(e,n);return o&&(0,i.Ru)(o)&&r[o.id].byId[t]}))}function ve(e){const{selectedMessages:t}=e;return Boolean(t)}function ye(e,t){const{messageIds:n}=e.selectedMessages||{};return!!n&&n.includes(t)}function be(e,t,n){const r=A(e,t);if(r)return Object.values(r).filter((e=>e.groupedId===n&&e.forwardInfo)).map((e=>{let{forwardInfo:t}=e;return t.fromMessageId}))}function Ie(e,t,n){const r=A(e,t);if(r)return Object.keys(r).map(Number).filter((e=>r[e].groupedId===n))}function we(e,t,n){const{messageIds:r}=e.selectedMessages||{};if(!r)return!1;const o=Ie(e,t,n);return o&&o.every((e=>r.includes(e)))}function Ce(e){const{messageIds:t}=e.selectedMessages||{};return t?t.length:0}function Se(e,t){const n=(0,u.Z1)(e,t);if(!n)return;if(!(0,u.xo)(e,n))return;const r=A(e,t),o=x(e,t,d._f);if(!r||!o)return;const a=(0,c.dF)(o,(e=>!r[e].isOutgoing&&Boolean(r[e].keyboardButtons))),s=(0,c.dF)(o,(e=>Boolean(r[e].shouldHideKeyboardButtons)));return a&&s&&s>a?void 0:a?r[a]:void 0}function Ee(e,t){const n=(0,u.Z1)(e,t.chatId);if(!n)return;const r=oe(e,t),o=Boolean((0,i.O$)(t)||(0,i.F$)(t)),d=Boolean((0,i.b7)(t)||(0,i.Cg)(t)),a=Boolean((0,i.oP)(t)||(0,i.kd)(t)||(0,i.aE)(t)),{canAutoLoadPhotoFromContacts:s,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:l,canAutoLoadPhotoInChannels:f,canAutoLoadVideoFromContacts:h,canAutoLoadVideoInPrivateChats:m,canAutoLoadVideoInGroups:p,canAutoLoadVideoInChannels:g,canAutoLoadFileFromContacts:v,canAutoLoadFileInPrivateChats:y,canAutoLoadFileInGroups:b,canAutoLoadFileInChannels:I}=e.settings.byKey;return o?Pe({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:s,canAutoLoadMediaInPrivateChats:c,canAutoLoadMediaInGroups:l,canAutoLoadMediaInChannels:f}):d?Pe({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:h,canAutoLoadMediaInPrivateChats:m,canAutoLoadMediaInGroups:p,canAutoLoadMediaInChannels:g}):!a||Pe({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:v,canAutoLoadMediaInPrivateChats:y,canAutoLoadMediaInGroups:b,canAutoLoadMediaInChannels:I})}function Pe(e){let{global:t,chat:n,sender:r,canAutoLoadMediaFromContacts:o,canAutoLoadMediaInPrivateChats:d,canAutoLoadMediaInGroups:a,canAutoLoadMediaInChannels:u}=e;const c=Boolean(r&&(r.id===t.currentUserId||(0,s.nM)(t,r)));return Boolean(c&&o||!c&&d&&(0,i.YC)(n.id)||a&&(0,i.Bf)(n)||u&&(0,i.eA)(n))}function Me(e,t){const n=(0,i.b7)(t)||(0,i.Cg)(t);if(!n)return;const{canAutoPlayVideos:r,canAutoPlayGifs:o}=e.settings.byKey,d=n.isGif||n.isRound;return r&&!d||o&&d}function Ae(e){return e.settings.byKey.shouldLoopStickers}function ke(e){const{serviceNotifications:t}=e,n=Math.max(...t.map((e=>{let{id:t}=e;return t})));return t.find((e=>{let{id:t}=e;return t===n}))}function Te(e,t){var n;return!!t&&(t.isProtected||(null===(n=(0,u.Z1)(e,t.chatId))||void 0===n?void 0:n.isProtected))}function Ne(e,t,n){var r;if(null!==(r=(0,u.Z1)(e,t))&&void 0!==r&&r.isProtected)return!0;if(!n)return!1;const o=A(e,t);return n.some((e=>{var t;return null===(t=o[e])||void 0===t?void 0:t.isProtected}))}function Le(e,t){const n=(0,u.Z1)(e,t),r=n&&(0,i.eA)(n)?e.messages.sponsoredByChatId[t]:void 0;return r&&r.expiresAt>=Math.round(Date.now()/1e3)?r:void 0}function Re(e,t){var n,r,o;if(t===a.aw)return;const d=(0,i.YC)(t),s=null===(n=e.appConfig)||void 0===n?void 0:n.defaultReaction,{availableReactions:c}=e;if(!s||null==c||!c.some((e=>e.reaction===s&&!e.isInactive)))return;if(d)return s;const l=null===(r=(0,u.Z1)(e,t))||void 0===r||null===(o=r.fullInfo)||void 0===o?void 0:o.enabledReactions;return null!=l&&l.includes(s)?s:void 0}function xe(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;const r=T(e,t,n,"viewportIds");return r?r.map((n=>{const{senderId:r}=J(e,t,n)||{};return r?(0,s.dy)(e,r):void 0})).filter(Boolean):void 0}function Ze(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;const r=(0,i.uw)(t,n),o=e.localTextSearch.byChatThreadKey[r];return o&&o.isActive?o:void 0}function Be(e){const{chatId:t}=P(e)||{};if(t)return e.localMediaSearch.byChatId[t]}function Oe(e,t){return e.management.byChatId[t]}function Fe(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;if((0,i.YC)(t))return"user";const r=(0,u.Z1)(e,t);return r?(0,i.Bf)(r)?"group":"channel":void 0}function De(e){const{mediaViewer:t}=e;return Boolean(t.messageId||t.avatarOwnerId)}function _e(e){return function(e){const{pollResults:t}=e;return Boolean(t.messageId)}(e)?r.qt.PollResults:!o.wB&&Ze(e)?r.qt.Search:function(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;const r=e.management.byChatId[t];return r&&r.isActive?r:void 0}(e)?r.qt.Management:void 0!==l(e).query?r.qt.StickerSearch:void 0!==f(e).query?r.qt.GifSearch:e.newChatMembersProgress!==r.WB.Closed?r.qt.AddingMembers:e.isChatInfoShown&&P(e)?r.qt.ChatInfo:void 0}function $e(e){return void 0!==_e(e)}function Ue(e){const{theme:t,shouldUseSystemTheme:n}=e.settings.byKey;return n?(0,o.vn)():t}function je(e){return e.globalSearch.query}function Ve(e){return e.payment.chatId}function We(e){return e.payment.messageId}function Ge(e){return e.payment.formId}function He(e){return e.payment.requestId}function ze(e){return e.payment.nativeParams?e.payment.nativeParams.publishableKey:void 0}function Qe(e){return e.payment.stripeCredentials}function Ke(e){return e.settings.byKey}function Je(e){return e.settings.notifyExceptions}},6376:(e,t,n)=>{function r(e,t){return e.users.byId[t]}function o(e,t){return e.users.statusesById[t]}function d(e,t){var n;const o=r(e,t);return null==o||null===(n=o.fullInfo)||void 0===n?void 0:n.isBlocked}function a(e,t){return e.contactList&&e.contactList.userIds.includes(t.id)}n.d(t,{dy:()=>r,ss:()=>o,s4:()=>d,nM:()=>a})},1713:(e,t,n)=>{let r,o,d,a,u,s,i,c,l,f,h,m,p,g;n.d(t,{Uq:()=>r,fo:()=>o,MT:()=>d,du:()=>a,nJ:()=>u,qt:()=>s,bZ:()=>i,Cr:()=>c,Nh:()=>l,rN:()=>f,wv:()=>h,WB:()=>m,vi:()=>p,KB:()=>g,mp:()=>v,u1:()=>y}),function(e){e[e.Backwards=0]="Backwards",e[e.Forwards=1]="Forwards",e[e.Around=2]="Around"}(r||(r={})),function(e){e[e.Up=0]="Up",e[e.Down=1]="Down",e[e.Static=2]="Static"}(o||(o={})),function(e){e[e.Main=0]="Main",e[e.EditProfile=1]="EditProfile",e[e.Notifications=2]="Notifications",e[e.DataStorage=3]="DataStorage",e[e.Language=4]="Language",e[e.General=5]="General",e[e.GeneralChatBackground=6]="GeneralChatBackground",e[e.GeneralChatBackgroundColor=7]="GeneralChatBackgroundColor",e[e.Privacy=8]="Privacy",e[e.PrivacyPhoneNumber=9]="PrivacyPhoneNumber",e[e.PrivacyLastSeen=10]="PrivacyLastSeen",e[e.PrivacyProfilePhoto=11]="PrivacyProfilePhoto",e[e.PrivacyForwarding=12]="PrivacyForwarding",e[e.PrivacyGroupChats=13]="PrivacyGroupChats",e[e.PrivacyPhoneNumberAllowedContacts=14]="PrivacyPhoneNumberAllowedContacts",e[e.PrivacyPhoneNumberDeniedContacts=15]="PrivacyPhoneNumberDeniedContacts",e[e.PrivacyLastSeenAllowedContacts=16]="PrivacyLastSeenAllowedContacts",e[e.PrivacyLastSeenDeniedContacts=17]="PrivacyLastSeenDeniedContacts",e[e.PrivacyProfilePhotoAllowedContacts=18]="PrivacyProfilePhotoAllowedContacts",e[e.PrivacyProfilePhotoDeniedContacts=19]="PrivacyProfilePhotoDeniedContacts",e[e.PrivacyForwardingAllowedContacts=20]="PrivacyForwardingAllowedContacts",e[e.PrivacyForwardingDeniedContacts=21]="PrivacyForwardingDeniedContacts",e[e.PrivacyGroupChatsAllowedContacts=22]="PrivacyGroupChatsAllowedContacts",e[e.PrivacyGroupChatsDeniedContacts=23]="PrivacyGroupChatsDeniedContacts",e[e.PrivacyActiveSessions=24]="PrivacyActiveSessions",e[e.PrivacyBlockedUsers=25]="PrivacyBlockedUsers",e[e.Folders=26]="Folders",e[e.FoldersCreateFolder=27]="FoldersCreateFolder",e[e.FoldersEditFolder=28]="FoldersEditFolder",e[e.FoldersEditFolderFromChatList=29]="FoldersEditFolderFromChatList",e[e.FoldersIncludedChats=30]="FoldersIncludedChats",e[e.FoldersIncludedChatsFromChatList=31]="FoldersIncludedChatsFromChatList",e[e.FoldersExcludedChats=32]="FoldersExcludedChats",e[e.FoldersExcludedChatsFromChatList=33]="FoldersExcludedChatsFromChatList",e[e.TwoFaDisabled=34]="TwoFaDisabled",e[e.TwoFaNewPassword=35]="TwoFaNewPassword",e[e.TwoFaNewPasswordConfirm=36]="TwoFaNewPasswordConfirm",e[e.TwoFaNewPasswordHint=37]="TwoFaNewPasswordHint",e[e.TwoFaNewPasswordEmail=38]="TwoFaNewPasswordEmail",e[e.TwoFaNewPasswordEmailCode=39]="TwoFaNewPasswordEmailCode",e[e.TwoFaEnabled=40]="TwoFaEnabled",e[e.TwoFaChangePasswordCurrent=41]="TwoFaChangePasswordCurrent",e[e.TwoFaChangePasswordNew=42]="TwoFaChangePasswordNew",e[e.TwoFaChangePasswordConfirm=43]="TwoFaChangePasswordConfirm",e[e.TwoFaChangePasswordHint=44]="TwoFaChangePasswordHint",e[e.TwoFaTurnOff=45]="TwoFaTurnOff",e[e.TwoFaRecoveryEmailCurrentPassword=46]="TwoFaRecoveryEmailCurrentPassword",e[e.TwoFaRecoveryEmail=47]="TwoFaRecoveryEmail",e[e.TwoFaRecoveryEmailCode=48]="TwoFaRecoveryEmailCode",e[e.TwoFaCongratulations=49]="TwoFaCongratulations",e[e.QuickReaction=50]="QuickReaction"}(d||(d={})),function(e){e[e.ChatList=0]="ChatList",e[e.GlobalSearch=1]="GlobalSearch",e[e.Settings=2]="Settings",e[e.Contacts=3]="Contacts",e[e.Archived=4]="Archived",e[e.NewChannelStep1=5]="NewChannelStep1",e[e.NewChannelStep2=6]="NewChannelStep2",e[e.NewGroupStep1=7]="NewGroupStep1",e[e.NewGroupStep2=8]="NewGroupStep2"}(a||(a={})),function(e){e[e.ChatList=0]="ChatList",e[e.Media=1]="Media",e[e.Links=2]="Links",e[e.Files=3]="Files",e[e.Music=4]="Music",e[e.Voice=5]="Voice"}(u||(u={})),function(e){e[e.ChatInfo=0]="ChatInfo",e[e.Search=1]="Search",e[e.Management=2]="Management",e[e.StickerSearch=3]="StickerSearch",e[e.GifSearch=4]="GifSearch",e[e.PollResults=5]="PollResults",e[e.AddingMembers=6]="AddingMembers"}(s||(s={})),function(e){e[e.Inline=0]="Inline",e[e.ScheduledInline=1]="ScheduledInline",e[e.SharedMedia=2]="SharedMedia",e[e.ProfileAvatar=3]="ProfileAvatar",e[e.SettingsAvatar=4]="SettingsAvatar",e[e.MiddleHeaderAvatar=5]="MiddleHeaderAvatar",e[e.Album=6]="Album",e[e.ScheduledAlbum=7]="ScheduledAlbum",e[e.SearchResult=8]="SearchResult"}(i||(i={})),function(e){e[e.Inline=0]="Inline",e[e.SharedMedia=1]="SharedMedia",e[e.Search=2]="Search"}(c||(c={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(l||(l={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(f||(f={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(h||(h={})),function(e){e[e.Closed=0]="Closed",e[e.InProgress=1]="InProgress",e[e.Loading=2]="Loading"}(m||(m={})),function(e){e[e.Profile=0]="Profile",e[e.SharedMedia=1]="SharedMedia",e[e.MemberList=2]="MemberList"}(p||(p={})),function(e){e[e.ShippingInfo=0]="ShippingInfo",e[e.Shipping=1]="Shipping",e[e.PaymentInfo=2]="PaymentInfo",e[e.Checkout=3]="Checkout"}(g||(g={}));const v="UPLOADING_WALLPAPER_SLUG";let y;!function(e){e[e.Initial=0]="Initial",e[e.ChatPrivacyType=1]="ChatPrivacyType",e[e.Discussion=2]="Discussion",e[e.ChannelSubscribers=3]="ChannelSubscribers",e[e.GroupType=4]="GroupType",e[e.GroupPermissions=5]="GroupPermissions",e[e.GroupRemovedUsers=6]="GroupRemovedUsers",e[e.GroupUserPermissionsCreate=7]="GroupUserPermissionsCreate",e[e.GroupUserPermissions=8]="GroupUserPermissions",e[e.ChatAdministrators=9]="ChatAdministrators",e[e.GroupRecentActions=10]="GroupRecentActions",e[e.ChatAdminRights=11]="ChatAdminRights",e[e.ChatNewAdminRights=12]="ChatNewAdminRights",e[e.GroupMembers=13]="GroupMembers",e[e.GroupAddAdmins=14]="GroupAddAdmins",e[e.Invites=15]="Invites",e[e.EditInvite=16]="EditInvite",e[e.Reactions=17]="Reactions",e[e.InviteInfo=18]="InviteInfo",e[e.JoinRequests=19]="JoinRequests"}(y||(y={}))},9933:(e,t,n)=>{n.d(t,{cK:()=>d,jt:()=>a,M8:()=>u,vr:()=>s});var r=n(9118);let o;function d(e,t){t||(o&&!o.isCancelled&&(o.isCancelled=!0),o=t={isCancelled:!1}),!t.isCancelled&&e()&&(0,r.T2)((()=>{d(e,t)}))}function a(e){e()&&(0,r.T2)((()=>{a(e)}))}const u={linear:e=>e,easeIn:e=>e**1.675,easeOut:e=>1-(1-e**1.675),easeInOut:e=>.5*(Math.sin((e-.5)*Math.PI)+1),easeInQuad:e=>e*e,easeOutQuad:e=>e*(2-e),easeInOutQuad:e=>e<.5?2*e*e:(4-2*e)*e-1,easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1- --e*e*e*e,easeInOutQuart:e=>e<.5?8*e*e*e*e:1-8*--e*e*e*e,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1+--e*e*e*e*e,easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e};function s(e){let{timing:t=u.linear,onUpdate:n,duration:r,onEnd:o,from:d,to:s}=e;const i=Date.now();let c=!1;return a((()=>{if(c)return!1;let e=(Date.now()-i)/r;e>1&&(e=1);const a=t(e);if("number"==typeof d&&"number"==typeof s)n(d+(s-d)*a);else if(Array.isArray(d)&&Array.isArray(s)){const e=d.map(((e,t)=>e+(s[t]-e)*a));n(e)}return 1===e&&o&&o(),e<1})),()=>{c=!0,o&&o()}}},7358:(e,t,n)=>{n.d(t,{w:()=>o});var r=n(3716);function o(e){"function"==typeof window.navigator.setAppBadge&&window.navigator.setAppBadge(e).catch((e=>{r.eM&&console.error(e)}))}},275:(e,t,n)=>{function r(e,t){if(e===t)return!0;const n=Object.keys(e),r=n.length;if(r!==Object.keys(t).length)return!1;if(0===r)return!0;for(let o=0;o(e[r]!==t[r]&&n.push(`${r}: ${e[r]} => ${t[r]}`),n)),[])}n.d(t,{Z:()=>r,c:()=>o})},6752:(e,t,n)=>{function r(){for(var e=arguments.length,t=new Array(e),n=0;n1?r-1:0),d=1;d(t&&(Array.isArray(t)?e.push(...t):e.push(`${n}--${t}`)),e)),[n]).join(" ")}}n.d(t,{Z:()=>r,y:()=>o})},9524:(e,t,n)=>{n.d(t,{Type:()=>o,fetch:()=>d,save:()=>a,clear:()=>u});const r=self.caches;let o;async function d(e,t,n){let d=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(r)try{const a=new Request(t.replace(/:/g,"_")),u=await r.open(e),s=await u.match(a);if(!s)return;const i=s.headers.get("Content-Type");switch(n){case o.Text:return await s.text();case o.Blob:{if(t.startsWith("avatar")&&i&&i.startsWith("text"))return;const e=await s.blob(),n=!e.type||!d&&e.type.includes("html");let r=e.type||i;return n&&r?(d||(r=r.replace(/html/gi,"")),new Blob([e],{type:r})):e}case o.Json:return await s.json();default:return}}catch(e){return void console.warn(e)}}async function a(e,t,n){if(r)try{const o="string"==typeof n||n instanceof Blob?n:JSON.stringify(n),d=new Request(t.replace(/:/g,"_")),a=new Response(o),u=await r.open(e);return await u.put(d,a)}catch(e){return void console.warn(e)}}async function u(e){try{if(!r)return;return await r.delete(e)}catch(e){return void console.warn(e)}}!function(e){e[e.Text=0]="Text",e[e.Blob=1]="Blob",e[e.Json=2]="Json"}(o||(o={}))},6063:(e,t,n)=>{function r(){const e=[];function t(t){const n=e.indexOf(t);-1!==n&&e.splice(n,1)}return{runCallbacks:function(){for(var t=arguments.length,n=new Array(t),r=0;r{e(...n)}))},addCallback:function(n){return e.push(n),()=>{t(n)}},removeCallback:t,hasCallbacks:function(){return Boolean(e.length)}}}n.d(t,{_:()=>r})},3989:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(517);function o(e){return(0,r.Z)({onEsc:e})}},517:(e,t,n)=>{n.d(t,{Z:()=>d});const r={Enter:"onEnter",Backspace:"onBackspace",Delete:"onDelete",Esc:"onEsc",Escape:"onEsc",ArrowUp:"onUp",ArrowDown:"onDown",ArrowLeft:"onLeft",ArrowRight:"onRight",Tab:"onTab"},o={onEnter:[],onDelete:[],onBackspace:[],onEsc:[],onUp:[],onDown:[],onLeft:[],onRight:[],onTab:[]};function d(e){return a()||document.addEventListener("keydown",u,!0),Object.keys(e).forEach((t=>{const n=e[t];if(!n)return;const r=o[t];r&&r.push(n)})),()=>{!function(e){Object.keys(e).forEach((t=>{const n=e[t],r=o[t];if(r){const e=r.findIndex((e=>e===n));-1!==e&&r.splice(e,1)}})),a()||document.removeEventListener("keydown",u,!1)}(e)}}function a(){return Object.values(o).some((e=>Boolean(e.length)))}function u(e){const t=r[e.key];if(!t)return;const{length:n}=o[t];n&&(e.stopPropagation(),(0,o[t][n-1])(e))}},790:(e,t,n)=>{n.d(t,{xR:()=>a,zk:()=>u,$Y:()=>s,_F:()=>i,kj:()=>c,mr:()=>f,VX:()=>h,Tu:()=>m,np:()=>p,D:()=>g,j1:()=>v,ZK:()=>b,k9:()=>I,rM:()=>w,xH:()=>C,SA:()=>S,xk:()=>P,IS:()=>M});const r=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o=["January","February","March","April","May","June","July","August","September","October","November","December"],d=o.map((e=>e.toLowerCase())),a=864e5;function u(e){return s(new Date)===s(e)}function s(e){const t=new Date(e);return t.setHours(0,0,0,0),t}function i(e){return s(e).getTime()}function c(e){const t=new Date(1e3*e);return`${t.getFullYear()}-${t.getMonth()}`}function l(e){return`${e.getFullYear()}-${e.getMonth()+1}-${e.getDate()}`}function f(e,t){const n="number"==typeof t?new Date(t):t,r=e.timeFormat||"24h";let o=n.getHours(),d="";return"12h"===r&&(d=o>=12?" PM":" AM",o=o>12?o%12:o),`${String(o).padStart(2,"0")}:${String(n.getMinutes()).padStart(2,"0")}${d}`}function h(e,t){const n="number"==typeof t?new Date(t):t,o=s(new Date);if(n>=o)return f(e,n);const d=new Date(o);if(d.setDate(o.getDate()-7),n>=d)return e(`Weekday.Short${r[n.getDay()]}`);const a=n.getFullYear()!==o.getFullYear(),u=e(a?"formatDateScheduleYear":"formatDateSchedule")||(a?"d MMM yyyy":"d MMM");return y(e,n,u)}function m(e,t){const n="number"==typeof t?new Date(t):t,r=e("formatterYearMax")||"dd.MM.yyyy";return y(e,n,r)}function p(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=e(n?"formatterMonthYear2":"formatterMonthYear")||"MMM yyyy";return y(e,t,r)}function g(e,t){const n=Math.floor(t/a);return t<0?0:n<1?I(t/1e3):n<7?e("Days",n):n<30?e("Weeks",Math.floor(n/7)):n<365?e("Months",Math.floor(n/30)):e("Years",Math.floor(n/365))}function v(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],d=arguments.length>4?arguments[4]:void 0;const a="number"==typeof t?new Date(t):t,u=s(new Date);if(!o){if(l(a)===l(u))return(d||!n?k:A)(e("Weekday.Today"));const t=new Date(u);if(t.setDate(u.getDate()-1),l(a)===l(t))return(d||!n?k:A)(e("Weekday.Yesterday"));const o=new Date(u),s=new Date(u);if(o.setDate(u.getDate()-7),s.setDate(u.getDate()+7),a>=o&&a<=s){const t=r[a.getDay()];return(d||!n?k:A)(e(n?`Weekday.Short${t}`:`Weekday.${t}`))}}const i=a.getFullYear()!==u.getFullYear(),c=n?i?"formatDateScheduleYear":"formatDateSchedule":i?"chatFullDate":"chatDate",f=e(c)||"d MMMM yyyy";return(d||!n?k:A)(y(e,a,f))}function y(e,t,n){const r=t.getDate(),d=t.getMonth();return n.replace("LLLL",e(o[d])).replace("MMMM",e(`Month.Gen${o[d]}`)).replace("MMM",e(`Month.Short${o[d]}`)).replace("MM",String(d+1).padStart(2,"0")).replace("dd",String(r).padStart(2,"0")).replace("d",String(r)).replace("yyyy",String(t.getFullYear())).replace(/'de'/g,"de")}function b(e,t,n){const r="number"==typeof t?new Date(t):t;return`${v(e,r,!0,void 0,n)}, ${f(e,r)}`}function I(e,t){const n=Math.floor(e/3600),r=Math.floor(e%3600/60),o=Math.floor(e%3600%60),d=t?Math.floor(t/3600):0,a=t?Math.floor(t%3600/60):0;let u="";return n>0||d>0?(u+=`${String(n).padStart(2,"0")}:`,u+=`${String(r).padStart(2,"0")}:`):u+=a>=10?`${String(r).padStart(2,"0")}:`:`${String(r)}:`,u+=String(o).padStart(2,"0"),u}function w(e){const t=[];let n=e%1e3;e-=n,n=Math.floor(n/10);const r=(e=Math.floor(e/1e3))%60;e-=r;const o=(e=Math.floor(e/60))%60;e-=o;const d=(e=Math.floor(e/60))%60;return d>0&&t.push(String(d).padStart(2,"0")),t.push(String(o).padStart(d>0?2:1,"0")),t.push(String(r).padStart(2,"0")),`${t.join(":")},${String(n).padStart(2,"0")}`}function C(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";const n="number"==typeof e?new Date(e):e;return n.toLocaleString(t,{year:"numeric",month:"short",day:"numeric"})}function S(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";const n="number"==typeof e?new Date(e):e;return n.toLocaleString(t,{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}function E(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2021;if(t>11||e>31)return!1;const r=new Date(n,t,e);return!Number.isNaN(r.getTime())&&r.getDate()===e}function P(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=e.match(/\d{1,2}\s[a-zA-Z]{3,}/),n=e.match(/[a-zA-Z]{3,}\s\d{1,2}/),r=e.match(/\d{1,2}[./-]\d{1,2}([./-]\d{2,4})?/);if(!t&&!r&&!n)return;if(r){const[t,n,r]=e.split(/[./-]/).map(Number);return r&&r<2015||!E(t,n-1,r||void 0)?void 0:`${r?`${r}-`:""}${String(n).padStart(2,"0")}-${String(t).padStart(2,"0")}`}const o=e.split(" "),a=t?o[0]:o[1],u=(t?o[1]:o[0]).toLowerCase(),s=d.findIndex((e=>e.startsWith(u)));return-1!==s&&E(Number(a),s)?`${String(s+1).padStart(2,"0")}-${String(a).padStart(2,"0")}`:void 0}function M(e){return e+a/1e3}function A(e){return`${e[0].toLowerCase()}${e.slice(1)}`}function k(e){return`${e[0].toUpperCase()}${e.slice(1)}`}},4284:(e,t,n)=>{n.d(t,{g6:()=>u,U_:()=>s,NM:()=>i,Wg:()=>c});var r=n(3681);const o=["female_sign","male_sign","medical_symbol"],d=[[/\u{1f3f3}\u200d\u{1f308}/gu,"🏳️‍🌈"],[/\u{1f3f3}\u200d\u26a7\ufe0f/gu,"🏳️‍⚧️"],[/\u{1f937}\u200d\u2642[^\ufe0f]/gu,"🤷‍♂️"]];function a(e){const t=e.split("-").map((e=>parseInt(e,16)));return String.fromCodePoint(...t)}function u(e){if(!e.match(r.Z))return e;for(const[t,n]of d)e=e.replace(t,n);return e}function s(e){let t;if(1===e.length)t=e.charCodeAt(0).toString(16).padStart(4,"0");else{const n=[];for(let t=0;t=55296&&e.charCodeAt(t)<=56319?e.charCodeAt(t+1)>=56320&&e.charCodeAt(t+1)<=57343&&n.push(1024*(e.charCodeAt(t)-55296)+(e.charCodeAt(t+1)-56320)+65536):(e.charCodeAt(t)<55296||e.charCodeAt(t)>57343)&&n.push(e.charCodeAt(t));t=n.map((e=>e.toString(16).padStart(4,"0"))).join("-")}return t}function i(e){const t={categories:[],emojis:{}};for(let n=0;ne.codePointAt(0)+127397));return String.fromCodePoint(...n)}},1396:(e,t,n)=>{function r(e){if(e)return e.includes("://")?e:`http://${e}`}n.d(t,{X:()=>r})},7361:(e,t,n)=>{n.d(t,{Bi:()=>k,cL:()=>x,wZ:()=>p,vX:()=>M,op:()=>C,cj:()=>m,jm:()=>h,pA:()=>L,m5:()=>P,I_:()=>E,fl:()=>v,t0:()=>A,s$:()=>g,i4:()=>B,Mc:()=>S,wB:()=>b,p7:()=>I,$b:()=>y,mh:()=>w,Hh:()=>R,s0:()=>T,aZ:()=>Z,gZ:()=>O,Lt:()=>f,vn:()=>i,on:()=>d});var r=n(3716);let o;function d(){return Boolean(o)}var a,u;new Promise((e=>{const t=new Image;t.src="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA";const n=()=>{e(2===t.height)};t.onload=n,t.onerror=n})).then((e=>{o=e}));let s=null!==(a=(u=window).matchMedia)&&void 0!==a&&a.call(u,"(prefers-color-scheme: dark)").matches?"dark":"light";function i(){return s}function c(e){s=e.matches?"dark":"light"}const l=window.matchMedia("(prefers-color-scheme: dark)");"function"==typeof l.addEventListener?l.addEventListener("change",c):"function"==typeof l.addListener&&l.addListener(c);const f=function(){const{userAgent:e,platform:t}=window.navigator;let n;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?n="macOS":-1!==["iPhone","iPad","iPod"].indexOf(t)?n="iOS":-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?n="Windows":/Android/.test(e)?n="Android":/Linux/.test(t)&&(n="Linux"),n}(),h="macOS"===f,m="iOS"===f,p="Android"===f,g=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),v=window.matchMedia("(display-mode: standalone)").matches||window.navigator.standalone||document.referrer.includes("android-app://"),y=window.matchMedia("(pointer: coarse)").matches,b=window.innerWidth<=r.l3||window.innerWidth<=r.u_&&window.innerHeight<=r.rO,I=!b&&window.innerWidth<=r.ks,w=Boolean(navigator.mediaDevices&&"getUserMedia"in navigator.mediaDevices&&(window.AudioContext||window.webkitAudioContext)),C=(document.documentElement.style,f&&(h||m)),S="serviceWorker"in navigator,E=S,P=(window,Boolean((new Audio).canPlayType("audio/ogg; codecs=opus"))),M=!r.Cg&&"filter"in(document.createElement("canvas").getContext("2d")||{}),A="requestFullscreen"in document.createElement("div"),k=!navigator.userAgent.includes("Firefox"),T=p?"slide-fade":m?"slide-layers":"push-slide",N=document.createElement("video"),L=!0;L&&r.wG.add(r.Ng);const R=Boolean(N.canPlayType('video/webm; codecs="vp9"').replace("no",""))&&!(h&&g),x=window.devicePixelRatio||1,Z=!0,B=!h&&!m&&!p,O=B?300:750},1394:(e,t,n)=>{n.d(t,{A9:()=>d,YJ:()=>a,hl:()=>u,pt:()=>s,jj:()=>i,ud:()=>c,gm:()=>l,dc:()=>f,ao:()=>h});var r=n(9118);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e){const t=e.split(","),n=t[0].match(/:(.*?);/)[1],r=atob(t[1]);let o=r.length;const d=new Uint8Array(o);for(;o--;)d[o]=r.charCodeAt(o);return new Blob([d],{type:n})}function a(e){return new Promise(((t,n)=>{const r=new FileReader;r.onload=e=>{const{result:r}=e.target||{};"string"==typeof r&&t(r),n(new Error("Failed to read blob"))},r.onerror=n,r.readAsDataURL(e)}))}function u(e,t){return new File([e],t,{lastModified:Date.now(),type:e.type})}function s(e){return new Promise(((t,n)=>{const r=new Image;r.onload=()=>t(r),r.onerror=n,r.src=e}))}function i(e){return new Promise(((t,n)=>{const r=document.createElement("video");r.volume=0,r.onloadedmetadata=()=>t(r),r.onerror=n,r.src=e}))}async function c(e){const t=await i(e);return Promise.race([(0,r.wO)(2e3),new Promise(((e,n)=>{t.onseeked=()=>{t.videoWidth&&t.videoHeight||e(void 0);const n=document.createElement("canvas");n.width=t.videoWidth,n.height=t.videoHeight,n.getContext("2d").drawImage(t,0,0),e(n.toDataURL("image/jpeg"))},t.onerror=n,t.currentTime=Math.min(t.duration,1)}))])}async function l(e){return(await fetch(e)).blob()}async function f(e,t){return u(await l(e),t)}function h(e){const t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t}"undefined"==typeof File&&(self.File=class extends Blob{constructor(e,t,n){if(n){const{type:t,...r}=n;super(e,{type:t}),o(this,"name",void 0),Object.assign(this,r)}else super(e),o(this,"name",void 0);this.name=t}})},6974:(e,t,n)=>{n.d(t,{S1:()=>y,gO:()=>b,aE:()=>I,Yz:()=>w,wC:()=>C,xW:()=>S,M2:()=>E,r_:()=>P,O6:()=>M});var r=n(5116),o=n(3716),d=n(9066),a=n(8415),u=n(9118),s=n(782),i=n(275),c=n(6063);const l=L();let f=l.prevGlobal,h=l.prepared,m=l.results,p=l.callbacks;const g=(0,u.P2)((()=>{(0,u.Q8)((()=>{A((0,r.Rd)())}))}),500);let v=!1;function y(){v=!0,(0,r.ll)(g),(0,r.Q6)("reset",R),A((0,r.Rd)())}function b(e){return v||y(),m.orderedIdsByFolderId[e]}function I(e){return v||y(),m.pinnedCountByFolderId[e]||0}function w(){return v||y(),m.chatsCountByFolderId}function C(){return v||y(),m.unreadCountersByFolderId}function S(){var e;return(null===(e=C()[o.Nf])||void 0===e?void 0:e.notificationsCount)||0}function E(e,t){return p.orderedIdsByFolderId[e]||(p.orderedIdsByFolderId[e]=(0,c._)()),p.orderedIdsByFolderId[e].addCallback(t)}function P(e){return p.chatsCountByFolderId.addCallback(e)}function M(e){return p.unreadCountersByFolderId.addCallback(e)}function A(e){let t;o.eM&&(t=performance.now());const n=Boolean(e.chats.listIds.active&&k(o.Nf,e.chats.listIds.active,e.chats.orderedPinnedIds.active)),r=Boolean(e.chats.listIds.archived&&k(o.WS,e.chats.listIds.archived,e.chats.orderedPinnedIds.archived)),u=e.chats.isFullyLoaded.active!==f.isAllFolderFullyLoaded,c=e.chats.isFullyLoaded.archived!==f.isArchivedFolderFullyLoaded,l=e.chatFolders.byId!==f.foldersById,p=e.chats.byId!==f.chatsById,g=e.users.byId!==f.usersById,v=(0,d.dZ)(e)!==f.notifySettings,y=(0,d.NJ)(e)!==f.notifyExceptions;let b=[];if((u||c)&&(b=b.concat(function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[];t&&n.push(o.WS);const r=e.chats.isFullyLoaded.active,d=e.chats.isFullyLoaded.archived;if(r&&d){const e=Object.keys(h.folderSummariesById).filter((e=>!m.orderedIdsByFolderId[e])).map(Number);n=n.concat(e)}return f.isAllFolderFullyLoaded=r,f.isArchivedFolderFullyLoaded=d,n}(e,c))),!(n||r||l||p||g||v||y))return void(b.length&&N(b));const I=f.allFolderListIds,w=f.archivedFolderListIds;if(function(e,t,n,r){const d=[];if(t){const t=e.chats.listIds.active,n=e.chats.orderedPinnedIds.active;h.folderSummariesById[o.Nf]=T(o.Nf,t,n),f.allFolderListIds=t,f.allFolderPinnedIds=n,d.push(o.Nf)}if(n){const t=e.chats.listIds.archived,n=e.chats.orderedPinnedIds.archived;h.folderSummariesById[o.WS]=T(o.WS,t,n),f.archivedFolderListIds=t,f.archivedFolderPinnedIds=n,d.push(o.WS)}if(r){const t=e.chatFolders.byId;Object.values(t).forEach((e=>{e!==f.foldersById[e.id]&&(h.folderSummariesById[e.id]=function(e){return{...e,orderedPinnedIds:e.pinnedChatIds,excludedChatIds:e.excludedChatIds?new Set(e.excludedChatIds):void 0,includedChatIds:e.excludedChatIds?new Set(e.includedChatIds):void 0,pinnedChatIds:e.excludedChatIds?new Set(e.pinnedChatIds):void 0}}(e),d.push(e.id))})),f.foldersById=t}}(e,n,r,l),b=b.concat(function(e,t,n,r,u,c){const l=e.chats.byId,p=e.users.byId,g=(0,d.dZ)(e),v=(0,d.NJ)(e),y=Object.values(h.folderSummariesById),b=new Set,I=e.chats.listIds.active,w=e.chats.listIds.archived;let C=[...I||[],...w||[]];return I===u&&w===c||(C=(0,s.Tw)(C.concat(u||[],c||[]))),C.forEach((e=>{const d=l[e];if(!t&&!n&&!r&&d===f.chatsById[e]&&p[e]===f.usersById[e])return;let u;if(d){const n=h.chatSummariesById.get(e),r=function(e,t,n,r){const{id:d,type:u,lastMessage:s,isRestricted:i,isNotJoined:c,folderId:l,unreadCount:f,unreadMentionsCount:h,hasUnreadMark:m,joinDate:p,draftDate:g}=e,v="chatTypePrivate"===u&&r;return{id:d,type:u,isListed:Boolean(s&&!i&&!c),isArchived:l===o.WS,isMuted:(0,a.i4)(e,t,n),isUnread:Boolean(f||h||m),unreadCount:f,unreadMentionsCount:h,order:Math.max(p||0,g||0,(null==s?void 0:s.date)||0),isUserBot:v?"userTypeBot"===v.type:void 0,isUserContact:v?v.isContact:void 0}}(d,g,v,p[e]);if(!t&&n&&(0,i.Z)(r,n))return;h.chatSummariesById.set(e,r),u=function(e,t){return t.reduce(((t,n)=>(function(e,t){var n,r,d;if(!e.isListed)return!1;const{id:a,type:u}=e;if(t.listIds)return!(e.isArchived&&t.id===o.Nf||!e.isArchived&&t.id===o.WS)&&t.listIds.has(a);if(null!==(n=t.excludedChatIds)&&void 0!==n&&n.has(a))return!1;if(null!==(r=t.includedChatIds)&&void 0!==r&&r.has(a))return!0;if(null!==(d=t.pinnedChatIds)&&void 0!==d&&d.has(a))return!0;if(t.excludeArchived&&e.isArchived)return!1;if(t.excludeRead&&!e.isUnread)return!1;if(t.excludeMuted&&e.isMuted&&!e.unreadMentionsCount)return!1;if("chatTypePrivate"===u)if(e.isUserBot){if(t.bots)return!0}else{if(t.contacts&&e.isUserContact)return!0;if(t.nonContacts&&!e.isUserContact)return!0}else{if("chatTypeChannel"===u)return Boolean(t.channels);if("chatTypeBasicGroup"===u||"chatTypeSuperGroup"===u)return Boolean(t.groups)}return!1}(e,n)&&t.push(n.id),t)),[]).sort()}(r,y),u.forEach((e=>{b.add(e)}))}else h.chatSummariesById.delete(e),u=[];const c=h.folderIdsByChatId[e]||[];if((0,s.et)(u,c))return;const I=function(e,t,n){const r=new Set(t),o=new Set(n),d=[];return(0,s.Tw)([...t,...n]).forEach((t=>{let n=m.orderedIdsByFolderId[t];r.has(t)&&!o.has(t)?(h.chatIdsByFolderId[t].delete(e),d.push(t),n&&(n=n.filter((t=>t!==e)),h.isOrderedListJustPatched[t]=!0)):!r.has(t)&&o.has(t)&&(h.chatIdsByFolderId[t]||(h.chatIdsByFolderId[t]=new Set),h.chatIdsByFolderId[t].add(e),n&&(n.push(e),h.isOrderedListJustPatched[t]=!0)),m.orderedIdsByFolderId[t]=n})),h.folderIdsByChatId[e]=n,d}(e,c,u);I.forEach((e=>{b.add(e)}))})),f.chatsById=l,f.usersById=p,f.notifySettings=g,f.notifyExceptions=v,Array.from(b)}(e,l||n||r,v,y,I,w)),N((0,s.Tw)(b)),o.eM){const e=performance.now()-t;e>6&&console.warn(`Slow \`updateFolderManager\`: ${Math.round(e)} ms`)}}function k(e,t,n){const r=e===o.Nf?f.allFolderListIds:f.archivedFolderListIds,d=e===o.Nf?f.allFolderPinnedIds:f.archivedFolderPinnedIds;return r!==t||d!==n}function T(e,t,n){return{id:e,listIds:new Set(t),orderedPinnedIds:n,pinnedChatIds:new Set(n)}}function N(e){let t=!1,n=!1;if(Array.from(e).forEach((e=>{const{pinnedCount:r,orderedIds:o}=function(e){const t=h.folderSummariesById[e];if(!t)return{};const{orderedPinnedIds:n,pinnedChatIds:r}=t,{chatSummariesById:o,chatIdsByFolderId:{[e]:d}}=h,{orderedIdsByFolderId:{[e]:a}}=m,u=d?null==n?void 0:n.filter((e=>d.has(e))):n,s=a||d&&Array.from(d)||[],i=(r?s.filter((e=>!r.has(e))):s).sort(((e,t)=>o.get(t).order-o.get(e).order));return{pinnedCount:(null==u?void 0:u.length)||0,orderedIds:[...u||[],...i]}}(e);if(!o)return;const d=m.orderedIdsByFolderId[e],a=m.pinnedCountByFolderId[e];var u;d&&void 0!==a&&a===r&&!h.isOrderedListJustPatched[e]&&(0,s.et)(o,d)||(h.isOrderedListJustPatched[e]=!1,m.orderedIdsByFolderId[e]=o,m.pinnedCountByFolderId[e]=r,null===(u=p.orderedIdsByFolderId[e])||void 0===u||u.runCallbacks(o));const c=m.chatsCountByFolderId[e],l=o.length;n||(n=c!==l),m.chatsCountByFolderId[e]=l;const f=m.unreadCountersByFolderId[e],g=function(e){const{chatSummariesById:t}=h,{orderedIdsByFolderId:{[e]:n}}=m;return n.reduce(((e,n)=>{const r=t.get(n);return r?(r.isUnread&&(e.chatsCount++,r.unreadMentionsCount&&(e.notificationsCount+=r.unreadMentionsCount),r.isMuted||(r.unreadCount?e.notificationsCount+=r.unreadCount:r.unreadMentionsCount||(e.notificationsCount+=1))),e):e}),{chatsCount:0,notificationsCount:0})}(e);t||(t=!f||!(0,i.Z)(g,f)),m.unreadCountersByFolderId[e]=g})),n){const e={...m.chatsCountByFolderId};m.chatsCountByFolderId=e,p.chatsCountByFolderId.runCallbacks(e)}if(t){const e={...m.unreadCountersByFolderId};m.unreadCountersByFolderId=e,p.unreadCountersByFolderId.runCallbacks(e)}}function L(){return{prevGlobal:{foldersById:{},chatsById:{},usersById:{},notifySettings:{},notifyExceptions:{}},prepared:{folderSummariesById:{},chatSummariesById:new Map,folderIdsByChatId:{},chatIdsByFolderId:{},isOrderedListJustPatched:{}},results:{orderedIdsByFolderId:{},pinnedCountByFolderId:{},chatsCountByFolderId:{},unreadCountersByFolderId:{}},callbacks:{orderedIdsByFolderId:{},chatsCountByFolderId:(0,c._)(),unreadCountersByFolderId:(0,c._)()}}}function R(){const e=L();f=e.prevGlobal,h=e.prepared,m=e.results,p=e.callbacks}},9937:(e,t,n)=>{function r(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en";return new Intl.NumberFormat(n,{style:"currency",currency:t}).format("JPY"===t?e:e/100)}n.d(t,{x:()=>r})},6926:(e,t,n)=>{n.d(t,{Z:()=>r});const r=e=>{let t;do{t=String(Math.random()).replace("0.","id")}while(e.hasOwnProperty(t));return t}},1947:(e,t,n)=>{n.d(t,{ZP:()=>d,J_:()=>a});const r={CHAT_RESTRICTED:"You can't send messages in this chat, you were restricted",CHAT_WRITE_FORBIDDEN:"You can't write in this chat",CHAT_SEND_POLL_FORBIDDEN:"You can't create polls in this chat",CHAT_SEND_STICKERS_FORBIDDEN:"You can't send stickers in this chat",CHAT_SEND_GIFS_FORBIDDEN:"You can't send gifs in this chat",CHAT_SEND_MEDIA_FORBIDDEN:"You can't send media in this chat",CHAT_LINK_EXISTS:"The chat is public, you can't hide the history to new users",SLOWMODE_WAIT_X:"Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.",USER_BANNED_IN_CHANNEL:"You're banned from sending messages in supergroups / channels",USER_IS_BLOCKED:"You were blocked by this user",YOU_BLOCKED_USER:"You blocked this user",IMAGE_PROCESS_FAILED:"Failure while processing image",MEDIA_EMPTY:"The provided media object is invalid",MEDIA_INVALID:"Media invalid",PHOTO_EXT_INVALID:"The extension of the photo is invalid",PHOTO_INVALID_DIMENSIONS:"The photo dimensions are invalid",PHOTO_SAVE_FILE_INVALID:"Internal issues, try again later",MESSAGE_DELETE_FORBIDDEN:"You can't delete one of the messages you tried to delete, most likely because it is a service message.",MESSAGE_POLL_CLOSED:"Poll closed",MESSAGE_EDIT_TIME_EXPIRED:"You can't edit this message anymore.",CHAT_ADMIN_REQUIRED:"You must be an admin in this chat to do this",PINNED_DIALOGS_TOO_MUCH:"Sorry, you can only pin 5 chats to the top",DIALOG_FILTERS_TOO_MUCH:"Sorry, you can't have more than 10 folders",CHANNEL_PRIVATE:"This channel is private",MEDIA_CAPTION_TOO_LONG:"The provided caption is too long",ADDRESS_STREET_LINE1_INVALID:"The address you provided is not valid",ADDRESS_STREET_LINE2_INVALID:"The address you provided is not valid",ADDRESS_CITY_INVALID:"The city you provided is not valid",ADDRESS_COUNTRY_INVALID:"The country you provided is not valid",ADDRESS_POSTCODE_INVALID:"The postcode you provided is not valid",ADDRESS_STATE_INVALID:"The state you provided is not valid",REQ_INFO_NAME_INVALID:"The name you provided is not valid",REQ_INFO_PHONE_INVALID:"The phone you provided is not valid",REQ_INFO_EMAIL_INVALID:"The email you provided is not valid",LINK_NOT_MODIFIED:"This discussion is already linked to the channel",MESSAGE_TOO_LONG:"Message is too long",SERVICE_WORKER_DISABLED:"Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key",MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS:"The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.",FRESH_RESET_AUTHORISATION_FORBIDDEN:"You can’t logout other sessions if less than 24 hours have passed since you logged on the current session",BOTS_TOO_MUCH:"There are too many bots in this chat/channel",BOT_GROUPS_BLOCKED:"This bot can't be added to groups",USERS_TOO_MUCH:"The maximum number of users has been exceeded",USER_CHANNELS_TOO_MUCH:"One of the users you tried to add is already in too many channels/supergroups",USER_KICKED:"This user was kicked from this supergroup/channel",USER_NOT_MUTUAL_CONTACT:"The provided user is not a mutual contact",USER_PRIVACY_RESTRICTED:"The user's privacy settings do not allow you to do this",INVITE_HASH_EMPTY:"The invite hash is empty",INVITE_HASH_EXPIRED:"The invite link has expired",INVITE_HASH_INVALID:"The invite hash is invalid",CHANNELS_TOO_MUCH:"You have joined too many channels/supergroups",USER_ALREADY_PARTICIPANT:"You already in the group",SCHEDULE_DATE_INVALID:"Invalid schedule date provided",WALLPAPER_DIMENSIONS_INVALID:"The wallpaper dimensions are invalid, please select another file",ADMINS_TOO_MUCH:"There are too many admins",ADMIN_RANK_EMOJI_NOT_ALLOWED:"An admin rank cannot contain emojis",ADMIN_RANK_INVALID:"The specified admin rank is invalid",FRESH_CHANGE_ADMINS_FORBIDDEN:"You were just elected admin, you can't add or modify other admins yet",INPUT_USER_DEACTIVATED:"The specified user was deleted"},o={ADDRESS_STREET_LINE1_INVALID:{field:"streetLine1",message:"Incorrect street address"},ADDRESS_STREET_LINE2_INVALID:{field:"streetLine2",message:"Incorrect street address"},ADDRESS_CITY_INVALID:{field:"city",message:"Incorrect city"},ADDRESS_COUNTRY_INVALID:{field:"countryIso2",message:"Incorrect country"},ADDRESS_POSTCODE_INVALID:{field:"postCode",message:"Incorrect post code"},ADDRESS_STATE_INVALID:{field:"state",message:"Incorrect state"},REQ_INFO_NAME_INVALID:{field:"fullName",message:"Incorrect name"},REQ_INFO_PHONE_INVALID:{field:"phone",message:"Incorrect phone"},REQ_INFO_EMAIL_INVALID:{field:"email",message:"Incorrect email"}};function d(e){const{message:t,isSlowMode:n,textParams:o}=e;if(n){const e=t.indexOf(" (caused by");return e>0?t.substring(0,e):t}let d=r[t];return d&&o&&(d=Object.keys(o).reduce(((e,t)=>e.replace(t,o[t])),d)),d}function a(e){return o[e.message]}},3592:(e,t,n)=>{n.d(t,{S:()=>d}),n(3716);var r=n(9118);function o(e){e.preventDefault(),d(e instanceof ErrorEvent?e.error:e.reason)}function d(e){console.error(e)}window.addEventListener("error",o),window.addEventListener("unhandledrejection",o),(0,r.P2)(window.alert,1e3)},782:(e,t,n)=>{function r(e,t){return e.reduce(((e,n)=>(e[n[t]]=n,e)),{})}function o(e,t){return Object.keys(e).reduce(((n,r,o)=>(n[r]=t(e[r],r,o,e),n)),{})}function d(e,t){return t.reduce(((t,n)=>(t[n]=e[n],t)),{})}function a(e,t){return t.reduce(((t,n)=>(e[n]&&(t[n]=e[n]),t)),{})}function u(e,t){const n=new Set(t.map(String));return d(e,Object.keys(e).filter((e=>!n.has(e))))}function s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"asc";function r(e,t,n,r){const o=("function"==typeof n?n(e):e[n])||0,d=("function"==typeof n?n(t):t[n])||0;return r?o-d:d-o}if(Array.isArray(t)){const[o,d]=Array.isArray(n)?n:[n,n],[a,u]=t,s="asc"===o,i="asc"===d;return e.sort(((e,t)=>r(e,t,a,s)||r(e,t,u,i)))}const o="asc"===n;return e.sort(((e,n)=>r(e,n,t,o)))}function i(e){return e.reduce(((e,t)=>Array.isArray(t)?e.concat(t):(e.push(t),e)),[])}function c(e){return Array.from(new Set(e))}function l(e){return e.filter(Boolean)}function f(e,t){return e.length===t.length&&e.every(((e,n)=>e===t[n]))}function h(e,t){return e[0]<=t[t.length-1]&&e[e.length-1]>=t[0]}function m(e,t){return e.filter((e=>t.has(e)))}function p(e,t){const n=[];for(let r=0;r(t[n]=g(e[n]),t)),{})}function v(e,t){let n=e.length;for(;n--;)if(t(e[n],n,e))return e[n]}n.d(t,{ee:()=>r,Q8:()=>o,ei:()=>d,q0:()=>a,CE:()=>u,Xo:()=>s,xH:()=>i,Tw:()=>c,oA:()=>l,et:()=>f,YE:()=>h,eL:()=>m,Vl:()=>p,Xh:()=>g,dF:()=>v})},711:(e,t,n)=>{n.d(t,{ll:()=>p,i0:()=>I,Pn:()=>w,m0:()=>C,qf:()=>S});var r=n(5116),o=n(3716),d=n(9524),a=n(1226),u=n(6063),s=n(2155);const i=/%\d?\$?[sdf@]/g,c=["value","zeroValue","oneValue","twoValue","fewValue","manyValue","otherValue"],l={en:e=>1!==e?6:2,ar:e=>0===e?1:1===e?2:2===e?3:e%100>=3&&e%100<=10?4:e%100>=11?5:6,ca:e=>1!==e?6:2,de:e=>1!==e?6:2,es:e=>1!==e?6:2,fa:e=>e>1?6:2,fr:e=>e>1?6:2,id:()=>0,it:e=>1!==e?6:2,ko:()=>0,ms:()=>0,nl:e=>1!==e?6:2,pl:e=>1===e?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,pt_BR:e=>e>1?6:2,ru:e=>e%10==1&&e%100!=11?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,tr:e=>e>1?6:2,uk:e=>e%10==1&&e%100!=11?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,uz:e=>e>1?6:2},f=new Map;let h,m;const{addCallback:p,removeCallback:g,runCallbacks:v}=(0,u._)();let y,b;const I=(e,t,n)=>{var r,o;if(void 0!==t){const r=Array.isArray(t)?JSON.stringify(t):t,o=f.get(`${e}_${r}_${n}`);if(o)return o}if(!h&&!m)return e;const d=(null===(r=h)||void 0===r?void 0:r[e])||(null===(o=m)||void 0===o?void 0:o[e]);return d?M(d,e,t,n):(m||E(),e)};async function w(e,t){let n=await d.fetch(o.ee,`${o.$O}_${e}_${t}`,d.Type.Json);return n||(n=await async function(e,t,n){const r=await(0,a.t9)("fetchLangStrings",{langPack:e,langCode:t,keys:[n]});if(null!=r&&r.length)return await d.save(o.ee,`${e}_${t}_${n}`,r[0]),r[0]}(o.$O,e,t)),M(n,t)}async function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(h&&e===y)return void(t&&t());let a=await d.fetch(o.ee,e,d.Type.Json);if(!a&&(n&&await E(),a=await P(e),!a))return;f.clear(),y=e,h=a,document.documentElement.lang=e;const{languages:u,timeFormat:s}=(0,r.Rd)().settings.byKey,i=null==u?void 0:u.find((t=>t.langCode===e));I.isRtl=Boolean(null==i?void 0:i.rtl),I.code=e,I.timeFormat=s,t&&t(),v()}function S(e){e&&e===b||(b=e,I.timeFormat=e,v())}async function E(){m||(m=(await n.e(915).then(n.bind(n,1915))).default,v())}async function P(e){const t=await(0,a.t9)("fetchLangPack",{sourceLangPacks:o.Bg,langCode:e});if(t)return await d.save(o.ee,e,t.langPack),t.langPack}function M(e,t,n,r){const d=e?e["number"==typeof n?function(e){const t=y||o.sR,n=l[t]?l[t](e):0;return c[n]}(n):"value"]:void 0;if(!d||!d.trim()){const e=t.split(".");return e[e.length-1]}if(void 0!==n){const e=function(e,t){t=Array.isArray(t)?t:[t];const n=e.split(i),r=n.shift();return n.reduce(((e,n,r)=>`${e}${String(t[r]||"")}${n}`),r||"")}(d,"i"===r?(0,s.kh)(n):n),o=Array.isArray(n)?JSON.stringify(n):n;return f.set(`${t}_${o}_${r}`,e),e}return d}},647:(e,t,n)=>{n.d(t,{cC:()=>b,he:()=>v,UV:()=>y,Iq:()=>I});var r=n(6137),o=n(3716),d=n(1226),a=n(9524),u=n(1394),s=n(7361);const i=48e3;async function c(e){const t=await new Response(e).arrayBuffer();return new Promise((e=>{const r=new Uint8Array(t);let o=new Worker(new URL(n.p+n.u(745),n.b)),d=new Worker(new URL(n.p+n.u(993),n.b));o.onmessage=e=>{null===e.data?d.postMessage({command:"done"}):d.postMessage({command:"encode",buffers:e.data},e.data.map((e=>{let{buffer:t}=e;return t})))},d.onmessage=t=>{"page"===t.data.message&&(e(new Blob([t.data.page],{type:"audio/wav"})),o.terminate(),o=void 0,d.terminate(),d=void 0)},d.postMessage({command:"init",wavBitDepth:16,wavSampleRate:i}),o.postMessage({command:"init",decoderSampleRate:i,outputBufferSampleRate:i}),o.postMessage({command:"decode",pages:r},[r.buffer])}))}var l=n(862);const f={[r.IU.BlobUrl]:a.Type.Blob,[r.IU.Lottie]:a.Type.Blob,[r.IU.Progressive]:void 0,[r.IU.Stream]:void 0},h=new Map,m=new Map,p=new Map,g=new Map;function v(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],d=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;if(t===r.IU.Progressive)return s.I_?w(e):v(e,r.IU.BlobUrl,n,d,a);if(!m.has(e)){const r=C(e,t,n).catch((e=>{o.eM&&console.warn(e)})).finally((()=>{m.delete(e),p.delete(e),g.delete(e)}));m.set(e,r)}if(d&&a){let t=p.get(e);t||(t=new Map,p.set(e,t)),t.set(a,d)}return m.get(e)}function y(e){return h.get(e)}function b(e){p.forEach(((t,n)=>{t.forEach((t=>{if(t===e){const e=g.get(n);if(!e)return;(0,d.u3)(e),g.delete(n),p.delete(n)}}))}))}function I(e,t){const n=p.get(e);n&&n.delete(t)}function w(e){const t=`./progressive/${e}`;return h.set(e,t),Promise.resolve(t)}async function C(e,t,n){if(!o.Cy){const r=e.startsWith("avatar")?o.SG:o.lW,d=await a.fetch(r,e,f[t],n);if(d){let t=d;if("audio/ogg"!==d.type||s.m5||(t=await c(t)),"image/webp"===d.type&&!(0,s.on)()&&t){const n=await(0,l._y)(e,t);n&&(t=n)}const n=E(t);return h.set(e,n),n}}if(t===r.IU.Stream){const n=new MediaSource,r=URL.createObjectURL(n);let o=!1;return n.addEventListener("sourceopen",(()=>{if(o)return;o=!0;const r=n.addSourceBuffer("audio/mpeg"),a=S(e,n,r);g.set(e,a),(0,d.t9)("downloadMedia",{url:e,mediaFormat:t},a)})),h.set(e,r),r}const i=S(e);g.set(e,i);const m=await(0,d.t9)("downloadMedia",{url:e,mediaFormat:t,isHtmlAllowed:n},i);if(!m)throw new Error(`Failed to fetch media ${e}`);let{prepared:p,mimeType:v}=m;if("audio/ogg"===v&&!s.m5){const e=await(0,u.gm)(p);URL.revokeObjectURL(p);const t=await c(e);p=E(t),v=t.type}if("image/webp"===v&&!(0,s.on)()){const t=await(0,u.gm)(p);URL.revokeObjectURL(p);const n=await(0,l._y)(e,t);n&&(p=E(n))}return h.set(e,p),p}function S(e,t,n){const r=(o,d)=>{var a;null===(a=p.get(e))||void 0===a||a.forEach((e=>{e(o),e.isCanceled&&(r.isCanceled=!0)})),1===o&&(null==t||t.endOfStream()),d&&(null==n||n.appendBuffer(d))};return r}function E(e){return e instanceof Blob?URL.createObjectURL(e):e}s.I_&&navigator.serviceWorker.addEventListener("message",(async e=>{const{type:t,messageId:n,params:o}=e.data;if("requestPart"!==t)return;const a=await(0,d.t9)("downloadMedia",{mediaFormat:r.IU.Progressive,...o});if(!a)return;const{arrayBuffer:u,mimeType:s,fullSize:i}=a;navigator.serviceWorker.controller.postMessage({type:"partResponse",messageId:n,result:{arrayBuffer:u,mimeType:s,fullSize:i}},[u])}))},735:(e,t,n)=>{n.d(t,{D:()=>r});const r=[]},9203:(e,t,n)=>{n.d(t,{gl:()=>d,$y:()=>c,o5:()=>l,Qt:()=>f});var r=n(3716),o=n(6063);let d;!function(e){e[e.Auth=0]="Auth",e[e.Main=1]="Main",e[e.Extra=2]="Extra",e[e.Calls=3]="Calls"}(d||(d={}));const a={},u={},{addCallback:s,runCallbacks:i}=(0,o._)();async function c(e,t){if(!a[e]){switch(e){case d.Auth:a[d.Auth]=n.e(133).then(n.bind(n,1133));break;case d.Main:r.eM&&console.log(">>> START LOAD MAIN BUNDLE"),a[d.Main]=Promise.all([n.e(830),n.e(538),n.e(302),n.e(640)]).then(n.bind(n,5640));break;case d.Extra:a[d.Extra]=Promise.all([n.e(830),n.e(538),n.e(126)]).then(n.bind(n,9126));break;case d.Calls:a[d.Calls]=Promise.all([n.e(830),n.e(302),n.e(47)]).then(n.bind(n,6628))}a[e].then(i)}const o=await a[e];return u[e]||(u[e]=o),l(e,t)}function l(e,t){const n=u[e];if(n)return n[t]}const f=s},8406:(e,t,n)=>{n.d(t,{q3:()=>y,Nz:()=>b,r1:()=>C,Ld:()=>E,zP:()=>P,Vr:()=>M,KC:()=>A});var r=n(1226),o=n(6137),d=n(8005),a=n(3716),u=n(5116),s=n(8415),i=n(711),c=n(9959),l=n(9066),f=n(7361),h=n(647),m=n(9118);function p(e){const t=e.toJSON();return JSON.stringify({endpoint:t.endpoint,keys:t.keys})}function g(){return!!f.Mc&&("showNotification"in ServiceWorkerRegistration.prototype?"denied"===Notification.permission?(a.eM&&console.warn("[PUSH] The user has blocked push notifications."),!1):"PushManager"in window||(a.eM&&console.warn("[PUSH] Push messaging isn't supported."),!1):(a.eM&&console.warn("[PUSH] Push notifications aren't supported."),!1))}const v=new Set;async function y(e,t){if(void 0!==e&&v.has(e))return;const{notificationSoundVolume:n}=(0,l.dZ)((0,u.Rd)()),r=t?t/10:n/10;if(0===r)return;const o=new Audio("./notification.mp3");o.volume=r,o.setAttribute("mozaudiochannel","notification"),void 0!==e&&(o.addEventListener("ended",(()=>{v.add(e)}),{once:!0}),setTimeout((()=>{v.delete(e)}),3e3));try{await o.play()}catch(e){a.eM&&console.warn("[PUSH] Unable to play notification sound")}}const b=(0,m.Ds)(y,1e3,!0,!1);async function I(){"Notification"in window&&(["granted","denied"].includes(Notification.permission)||await Notification.requestPermission())}async function w(e){const t=(0,u.Rd)(),n=(0,u.uC)();if(e)try{const t=p(e);return await(0,r.t9)("unregisterDevice",t),await e.unsubscribe(),void n.deleteDeviceToken()}catch(e){a.eM&&console.log("[PUSH] Unable to unsubscribe from push.",e)}t.push&&(await(0,r.t9)("unregisterDevice",t.push.deviceToken),n.deleteDeviceToken())}async function C(){if(!g())return;const e=await navigator.serviceWorker.ready,t=await e.pushManager.getSubscription();await w(t)}let S=!1;async function E(){if(!g())return void await I();const e=await navigator.serviceWorker.ready;let t=await e.pushManager.getSubscription();if(function(e){const t=(0,u.Rd)();return!t.push||!e||p(e)!==t.push.deviceToken||Date.now()-t.push.subscribedAt>432e5}(t)){await w(t);try{t=await e.pushManager.subscribe({userVisibleOnly:!0});const n=p(t);a.eM&&console.log("[PUSH] Received push subscription: ",n),await(0,r.t9)("registerDevice",n),(0,u.uC)().setDeviceToken(n)}catch(e){"denied"===Notification.permission?a.eM&&console.warn("[PUSH] The user has blocked push notifications."):a.eM&&(console.log("[PUSH] Unable to subscribe to push.",e),e.code===DOMException.ABORT_ERR&&await I())}}}async function P(e){let{chat:t,message:n}=e;const{hasWebNotifications:f}=await async function(){if(S)return(0,l.dZ)((0,u.Rd)());const[e,t]=await Promise.all([(0,r.t9)("fetchNotificationSettings",{serverTimeOffset:(0,u.Rd)().serverTimeOffset}),(0,r.t9)("fetchNotificationExceptions",{serverTimeOffset:(0,u.Rd)().serverTimeOffset})]);if(!e)return(0,l.dZ)((0,u.Rd)());let n=(0,c.BI)((0,u.Rd)(),e);return t&&(n=(0,c.aJ)(n,t)),(0,u.R3)(n),S=!0,(0,l.dZ)(n)}();if(!function(e){if(!S)return!1;const t=(0,u.Rd)();return!((0,s.i4)(e,(0,l.dZ)(t),(0,l.NJ)(t))||e.isNotJoined||!e.isListed||document.hasFocus())}(t))return;const m="Notification"in window?"denied"!==Notification.permission||(a.eM&&console.warn("[PUSH] The user has blocked push notifications."),!1):(a.eM&&console.warn("[PUSH] This browser does not support desktop notification"),!1);if(!f||!m)return void b(String(n.id)||t.id);if(!m)return;if(!n.id)return;const{title:p,body:v}=function(e,t){const n=(0,u.Rd)(),{senderId:r,replyToMessageId:o}=t,a=r?(0,l.dy)(n,r):void 0,c=(0,s.N5)(t),f=c&&o?(0,l.hj)(n,e.id,o):void 0,{targetUserIds:h,targetChatId:m}=c||{},p=h?h.map((e=>(0,l.dy)(n,e))).filter(Boolean):void 0,g=(0,s.zX)(e),v=g?(0,l.dy)(n,g):void 0;let y;if((0,s.Sm)(e,(0,l.dZ)(n),(0,l.NJ)(n)))if((0,s.Lo)(t)){const n=e&&((0,s.eA)(e)||t.senderId===t.chatId);y=(0,d.D)(i.i0,t,n?void 0:a,n?e:void 0,p,f,m,{asPlainText:!0})}else{const n=(0,s.zF)(i.i0,e.id,a),r=(0,s.MK)(i.i0,t);y=n?`${n}: ${r}`:r}else y="New message";return{title:(0,s.U)(i.i0,e,v),body:y}}(t,n),y=await async function(e){const t=(0,s.RT)(e);if(!t)return;let n=h.UV(t);return n||(await h.he(t,o.IU.BlobUrl),n=h.UV(t)),n}(t);if(g()){var I;null!==(I=navigator.serviceWorker)&&void 0!==I&&I.controller&&navigator.serviceWorker.controller.postMessage({type:"newMessageNotification",payload:{title:p,body:v,icon:y,chatId:t.id,messageId:n.id}})}else{const e=(0,u.uC)(),r={body:v,icon:y,badge:y,tag:String(n.id)};"vibrate"in navigator&&(r.vibrate=[200,100,200]);const o=new Notification(p,r);o.onclick=()=>{o.close(),e.focusMessage({chatId:t.id,messageId:n.id}),window.focus&&window.focus()},o.onshow=()=>{b(String(n.id)||t.id)}}}function M(e){var t;!a.Cg&&null!==(t=navigator.serviceWorker)&&void 0!==t&&t.controller&&navigator.serviceWorker.controller.postMessage({type:"closeMessageNotifications",payload:e})}function A(){var e;null!==(e=navigator.serviceWorker)&&void 0!==e&&e.controller&&navigator.serviceWorker.controller.postMessage({type:"clientReady"})}},7926:(e,t,n)=>{n.d(t,{L:()=>d,$:()=>a});const r="kz_version",o=["Z","K"];function d(e){localStorage.setItem(r,JSON.stringify(e))}function a(){(function(){const e=localStorage.getItem(r);if(!e)return!1;try{const t=JSON.parse(e);return o.includes(t)}catch(e){return!1}})()||d("Z")}},6272:(e,t,n)=>{n.d(t,{U9:()=>a,g3:()=>u,un:()=>s,WZ:()=>i});var r=n(782);const o="X",d="XXX XXX XXX XXX";function a(e,t){return e.filter((e=>e.iso2===t))}function u(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=n.replace(/[^\d+]+/g,"");o.startsWith("+")&&(o=o.substr(1));const d=e.filter((e=>o.startsWith(e.countryCode))),a=(0,r.xH)(d.map((e=>(e.prefixes||[""]).map((t=>({code:`${e.countryCode}${t}`,country:e})))))),u=a.filter((e=>{let{code:t}=e;return o.startsWith(t)})).sort(((e,t)=>e.code.length-t.code.length));return null===(t=u[u.length-1])||void 0===t?void 0:t.country}function s(e,t){let n=e.replace(/[^\d]+/g,"");if(t)n=n.substr(t.countryCode.length);else if(e.startsWith("+"))return e;const r=function(e,t){if(!t||0===t.length)return d;if(1===t.length)return t[0];const n=t.find((e=>e.startsWith(o)))||d,r=t.filter((t=>{const n=t.replace(/[^\dX]+/g,"");if(n.startsWith(o))return!1;for(let t=0;tn.length-1||n[t]!==o&&n[t]!==e[t])return!1;return!0}));return 1===r.length?r[0]:n}(n,null==t?void 0:t.patterns),a=[];let u=0;for(let e=0;e{n.d(t,{q:()=>d,V:()=>a});var r=n(6137),o=n(6590);function d(e){const t="thread"!==e.type?`_${e.type}`:-1!==e.threadId?`_${e.threadId}`:"";return`${e.chatId}${t}`}function a(){if(!o.Oy)return;const[e,t]=o.Oy.replace(/^#/,"").split("_");if(null==e||!e.match(/^-?\d+$/))return;const n=["thread","pinned","scheduled"].includes(t);return{chatId:e,type:Boolean(t)&&n?t:"thread",threadId:Boolean(t)&&!n?Number(t):r._f}}},9118:(e,t,n)=>{function r(e,t){let n,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return function(){for(var d=arguments.length,a=new Array(d),u=0;u{o&&e(...a),n=void 0}),t)}}function o(e,t){let n,r,o,d=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return function(){r=!0;for(var a=arguments.length,u=new Array(a),s=0;s{if(!r)return self.clearInterval(n),void(n=void 0);r=!1,e(...o)}),t))}}function d(e){return s(v,e)}function a(e){return s(y,e)}function u(e){return s(b,e)}function s(e,t){let n,r=!1;return function(){for(var o=arguments.length,d=new Array(o),a=0;a{r=!1,t(...n)})))}}function i(e,t){self.requestIdleCallback?self.requestIdleCallback(e,{timeout:t}):b(e)}n.d(t,{Ds:()=>r,P2:()=>o,mS:()=>d,wT:()=>a,$6:()=>u,Q8:()=>i,wO:()=>c,Pn:()=>l,T2:()=>v,D0:()=>y,R3:()=>b,zD:()=>I,Gq:()=>w});const c=e=>new Promise((t=>{setTimeout((()=>t()),e)}));function l(){return new Promise((e=>{v(e)}))}let f,h,m,p,g;function v(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f?t?h.push(e):f.push(e):(f=t?[]:[e],h=t?[e]:[],requestAnimationFrame((()=>{const e=f,t=h;f=void 0,h=void 0,t.forEach((e=>e())),e.forEach((e=>e()))})))}function y(e){v(e,!0)}function b(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];m?t?p.push(e):m.push(e):(m=t?[]:[e],p=t?[e]:[],Promise.resolve().then((()=>{const e=m,t=p;m=void 0,p=void 0,t.forEach((e=>e())),e.forEach((e=>e()))})))}function I(e){b(e,!0)}function w(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return g||(g=[],self.addEventListener("beforeunload",(()=>{g.forEach((e=>e()))}))),t?g.push(e):g.unshift(e),()=>{g=g.filter((t=>t!==e))}}},5765:(e,t,n)=>{let r;n.d(t,{Z:()=>o,W:()=>d});try{r=new RegExp("[^\\p{L}\\p{M}]+","ui")}catch(e){r=new RegExp("[^\\wа-яё]+","i")}function o(e,t){if(!e||!t)return!1;const n="string"==typeof t?t.toLowerCase().split(r):t,o=e.toLowerCase();if(1===n.length&&!o.includes(n[0]))return!1;let d;return n.every((e=>!!o.includes(e)&&(d||(d=o.split(r)),d.some((t=>t.startsWith(e))))))}function d(e){const t=e.toLowerCase().split(r);return e=>o(e,t)}},2267:(e,t,n)=>{n.d(t,{b:()=>r});const r=e=>Math.floor(Date.now()/1e3)+e},3100:(e,t,n)=>{n.d(t,{f3:()=>m,jv:()=>l,ti:()=>i,Qw:()=>h,K8:()=>f,wX:()=>c});function r(e){return new Promise(((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)}))}let o;function d(){return o||(o=function(e,t){const n=(!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(e){var t=function(){return indexedDB.databases().finally(e)};o=setInterval(t,100),t()})).finally((function(){return clearInterval(o)})):Promise.resolve()).then((()=>{const e=indexedDB.open("keyval-store");return e.onupgradeneeded=()=>e.result.createObjectStore(t),r(e)}));var o;return(e,r)=>n.then((n=>r(n.transaction(t,e).objectStore(t))))}(0,"keyval")),o}var a=n(3716),u=n(9524);const s=[1,2,3,4,5];function i(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&localStorage.getItem(a.Vx))return!0;const t=localStorage.getItem(a.b_);if(!t)return!1;try{const e=JSON.parse(t);return Boolean(e&&e.id&&e.dcID)}catch(e){return!1}}function c(e,t){const{mainDcId:n,keys:r,hashes:o}=e;localStorage.setItem(a.b_,JSON.stringify({dcID:n,id:t})),localStorage.setItem("dc",String(n)),Object.keys(r).map(Number).forEach((e=>{localStorage.setItem(`dc${e}_auth_key`,JSON.stringify(r[e]))})),o&&Object.keys(o).map(Number).forEach((e=>{localStorage.setItem(`dc${e}_hash`,JSON.stringify(o[e]))}))}function l(){[a.b_,"dc",...s.map((e=>`dc${e}_auth_key`)),...s.map((e=>`dc${e}_hash`))].forEach((e=>{localStorage.removeItem(e)}))}function f(){if(!i())return;const e=JSON.parse(localStorage.getItem(a.b_)),t=Number(e.dcID),n={},r={};return s.forEach((e=>{try{const t=localStorage.getItem(`dc${e}_auth_key`);t&&(n[e]=JSON.parse(t));const o=localStorage.getItem(`dc${e}_hash`);o&&(r[e]=JSON.parse(o))}catch(e){a.eM&&console.warn("Failed to load stored session",e)}})),Object.keys(n).length?{mainDcId:t,keys:n,hashes:r}:void 0}async function h(){const e=localStorage.getItem(a.Vx);if(!e)return;const t=await function(e,t=d()){return t("readonly",(t=>r(t.get(e))))}(`GramJs:${e}`);try{c(JSON.parse(t))}catch(e){a.eM&&console.warn("Failed to load legacy session",e)}}async function m(){localStorage.removeItem(a.Vx);const e=await function(e=d()){return e("readonly",(e=>{if(e.getAllKeys)return r(e.getAllKeys());const t=[];return function(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},r(e.transaction)}(e,(e=>t.push(e.key))).then((()=>t))}))}();await Promise.all([u.clear("GramJs"),...e.filter((e=>"string"==typeof e&&e.startsWith("GramJs:GramJs-session-"))).map((e=>function(e,t=d()){return t("readwrite",(t=>(t.delete(e),r(t.transaction))))}(e)))])}},7370:(e,t,n)=>{n.d(t,{Z:()=>h});var r=n(9933),o=n(9118);const d=JSON.parse('{"--color-primary":["#3390EC","#8774E1"],"--color-primary-opacity":["#50A2E980","#8378DB80"],"--color-primary-shade":["#4a95d6","#7b71c6"],"--color-background":["#FFFFFF","#212121"],"--color-background-secondary":["#f4f4f5","#0F0F0F"],"--color-background-secondary-accent":["#E4E4E5","#100f10"],"--color-background-own":["#EEFFDE","#8774E1"],"--color-background-own-apple":["#DCF8C5","#8774E1"],"--color-background-selected":["#F4F4F5","#2C2C2C"],"--color-background-own-selected":["#d0ffac","#6549d4"],"--color-chat-hover":["#F4F4F5","#2C2C2C"],"--color-chat-active":["#3390EC","#8774E1"],"--color-item-active":["#ededed","#292929"],"--color-text":["#000000","#FFFFFF"],"--color-text-secondary":["#707579","#AAAAAA"],"--color-text-secondary-apple":["#8E8E92","#AAAAAA"],"--color-borders":["#DADCE0","#303030"],"--color-borders-input":["#DADCE0","#5B5B5A"],"--color-dividers":["#C8C6CC","#404040"],"--color-links":["#3390EC","#8774E1"],"--color-gray":["#C4C9CC","#717579"],"--color-pinned":["#C4C9CC","#707579"],"--color-default-shadow":["#72727240","#1010109c"],"--color-light-shadow":["#7272722B","#00000040"],"--color-green":["#00C73E","#8774E1"],"--color-text-meta-colored":["#4DCD5E","#8378DB"],"--color-reply-hover":["#F4F4F4","#272727"],"--color-reply-active":["#E8E9E9","#2E2F2F"],"--color-reply-own-hover":["#D9F5CE","#7d6bca"],"--color-reply-own-hover-apple":["#cbefb7","#7d6bca"],"--color-reply-own-active":["#C5ECBE","#7264b6"],"--color-reply-own-active-apple":["#bae6a8","#7264b6"],"--color-accent-own":["#45AF54","#FFFFFF"],"--color-message-meta-own":["#4FAE4EFF","#FFFFFF88"],"--color-own-links":["#3390EC","#FFFFFF"],"--color-code":["#4a729a","#8774E1"],"--color-code-own":["#3c7940","#FFFFFF"],"--color-code-bg":["#70757914","#ffffff26"],"--color-code-own-bg":["#70757914","#ffffff26"],"--color-composer-button":["#707579CC","#AAAAAACC"],"--color-message-reaction":["#ebf3fd","#2b2a35"],"--color-message-reaction-hover":["#c5def9","#343147"],"--color-message-reaction-own":["#cef0ba","#7a68ca"],"--color-message-reaction-hover-own":["#b5e0a4","#7567bc"]}');let a=!1;const u=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i,s=new Set(["--color-primary-shade","--color-text-secondary"]),i=(e,t,n)=>(1-n)*e+n*t,c=Object.keys(d).map((e=>({property:e,colors:[l(d[e][0]),l(d[e][1])]})));function l(e){const t=u.exec(e);return{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16),a:void 0!==t[4]?parseInt(t[4],16):void 0}}function f(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;c.forEach((r=>{let{property:o,colors:d}=r;const a=Math.round(i(d[e].r,d[t].r,n)),u=Math.round(i(d[e].g,d[t].g,n)),c=Math.round(i(d[e].b,d[t].b,n)),l=void 0!==d[e].a?Math.round(i(d[e].a,d[t].a,n)):void 0;document.documentElement.style.setProperty(o,void 0!==l?`rgba(${a},${u},${c},${l/255})`:`rgb(${a},${u},${c})`),s.has(o)&&document.documentElement.style.setProperty(`${o}-rgb`,`${a},${u},${c}`)}))}const h=(e,t)=>{const n="dark"===e,d=a&&t,u=n?0:1,s=n?1:0,i=Date.now(),c=document.querySelector('meta[name="theme-color"]');document.documentElement.classList.remove("theme-"+(n?"light":"dark")),a&&document.documentElement.classList.add("no-animations"),document.documentElement.classList.add(`theme-${e}`),c&&c.setAttribute("content",n?"#212121":"#fff"),setTimeout((()=>{document.documentElement.classList.remove("no-animations")}),500),a=!0,d?(0,o.T2)((()=>{(0,r.cK)((()=>{const e=Math.min((Date.now()-i)/200,1);return f(u,s,function(e){return 1-(1-e)**3.5}(e)),e<1}))})):f(u,s)}},2155:(e,t,n)=>{n.d(t,{kh:()=>d,bi:()=>u,Xv:()=>s});var r=n(3681),o=n(4284);function d(e){return String(e).replace(/\d(?=(\d{3})+$)/g,"$& ")}function a(e){return".0"===String(e.toFixed(1)).substr(-2)?Math.round(e):e.toFixed(1).replace(".",",")}function u(e){return e<1e3?e:e<1e6?`${a(e/1e3)}K`:`${a(e/1e6)}M`}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return e.replace(/[.,!@#$%^&*()_+=\-`~[\]/\\{}:"|<>?]+/gi,"").trim().split(/\s+/).slice(0,t).map((e=>{if(!e.length)return"";const t=(e=(0,o.g6)(e)).match(r.Z);return t&&e.startsWith(t[0])?t[0]:e.match(/./u)[0].toUpperCase()})).join("")}},8035:(e,t,n)=>{function r(e,t){return!e||!t||e.length<=t?e:`${e.substring(0,t)}...`}n.d(t,{Z:()=>r})},862:(e,t,n)=>{n.d(t,{Hu:()=>s,_y:()=>i,p6:()=>c});var r=n(7361),o=n(1394),d=n(9118);let a,u;const s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";async function i(e,t){for(l();!u.wasmReady;)await(0,d.wO)(2e3);const{result:n,width:r,height:o}=await function(e,t){return new Promise((n=>{u.requests||(u.requests=new Map),u.requests.set(e,n),u.postMessage({id:e,blob:t})}))}(e,t);if(r&&o)return function(e){let{result:t,width:n,height:r}=e;return a||(a=document.createElement("canvas")),new Promise((e=>{const o=new ImageData(t,n,r);a.width=n,a.height=r,a.getContext("2d").putImageData(o,0,0),a.toBlob((t=>{e(null!=t?t:void 0)}),"image/png",1)}))}({result:n,width:r,height:o})}async function c(e,t){if((0,r.on)()||"data:image/webp"!==t.substr(0,15))return t;l();const n=await i(e,(0,o.A9)(t));if(!n)throw new Error(`Can't convert webp to png. Url: ${t}`);return(0,o.YJ)(n)}function l(){u||(u=new Worker(new URL(n.p+n.u(536),n.b)),u.wasmReady=!1,u.onmessage=f)}function f(e){const{id:t}=e.data;switch(e.data.type){case"initialized":u.wasmReady=!0;break;case"result":if(u.requests.has(t)){const n=u.requests.get(t);u.requests.delete(t),n(e.data)}}}},1622:(e,t,n)=>{n.d(t,{IT:()=>l,px:()=>f,W8:()=>h});var r=n(3716),o=n(5116),d=n(3100);const a=["t.me","telegram.me"].map((e=>`//${e}/_websync_?`)),u=`${r.Ji} Z`,s="tgme_sync",i=()=>Math.floor(Number(new Date)/1e3);let c;const l=e=>{const t=i(),{canRedirect:n,ts:r}=JSON.parse(localStorage.getItem(s)||"{}");return n!==e||r+86400<=t?Promise.all(a.map((t=>new Promise(((n,r)=>{const o=document.createElement("script"),d=()=>Boolean(document.body.removeChild(o));o.src=t+new URLSearchParams({authed:Number(e).toString(),version:u}),document.body.appendChild(o),o.onload=()=>{(e=>{const t=i();localStorage.setItem(s,JSON.stringify({canRedirect:e,ts:t}))})(e),d(),c&&(clearTimeout(c),c=void 0),f(),n()},o.onerror=()=>{d(),r()}}))))):Promise.resolve()};function f(){if(r.eM)return;if(void 0!==c)return;const e=i(),{ts:t}=JSON.parse(localStorage.getItem(s)||"{}"),n=86400-(e-t);c=setTimeout((()=>{const{authState:e}=(0,o.Rd)(),t="authorizationStateReady"===e||(0,d.ti)(!0);l(t)}),Math.max(0,1e3*n))}function h(){localStorage.removeItem(s)}},3858:(e,t,n)=>{n.d(t,{z:()=>l,Z:()=>h});var r=n(9118),o=n(3716),d=n(7361);const a=d.wB&&f(),u=window.innerHeight;let s=l(),i=!1;const c=(0,r.P2)((()=>{s=l(),!i&&((s.width<=o.l3||s.width<=o.u_&&s.height<=o.rO)!==d.wB||d.wB&&a!==f())&&window.location.reload()}),250,!0);function l(){let e;e=d.cj?window.visualViewport.height+window.visualViewport.pageTop:window.innerHeight;const t=.01*e;return document.documentElement.style.setProperty("--vh",`${t}px`),{width:window.innerWidth,height:window.innerHeight}}function f(){return d.cj?window.matchMedia("(orientation: landscape)").matches:window.matchMedia("screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)").matches}window.addEventListener("orientationchange",c),d.cj?window.visualViewport.addEventListener("resize",c):window.addEventListener("resize",c);const h={get:()=>s,getIsKeyboardVisible:()=>u>s.height,disableRefresh:function(){i=!0},enableRefresh:function(){i=!1}}},5359:(e,t,n)=>{e.exports=n.p+"app-inactive.bc7953c2dfebcabce2c4..png"},2162:(e,t,n)=>{e.exports=n.p+"monkey.a3d5fcdc50b18dc55695..svg"},5523:(e,t,n)=>{e.exports=n.p+"reaction-thumbs.4007ef2a82a070efb3ce..png"},4128:(e,t,n)=>{e.exports=n.p+"telegram-logo.1b2bb5b107f046ea9325..svg"}},u={};function s(e){var t=u[e];if(void 0!==t)return t.exports;var n=u[e]={exports:{}};return a[e].call(n.exports,n,n.exports,s),n.exports}s.m=a,s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,s.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);s.r(o);var d={};e=e||[null,t({}),t([]),t(t)];for(var a=2&r&&n;"object"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((e=>d[e]=()=>n[e]));return d.default=()=>n,s.d(o,d),o},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce(((t,n)=>(s.f[n](e,t),t)),[])),s.u=e=>e+"."+{47:"6587cf7cd58625267285",99:"4acb17d13e1a5b87b131",126:"6c11ab2d3cdbd7baf2dd",133:"7825bcf69db105db21d4",161:"4fade15904bfe66b4f71",302:"1d8fb1e8ea7f52fb7236",354:"b73ee1ca5b4052509fe6",472:"65a66b6c1fb1be8db986",501:"3c8f4d2d9fb141fac95f",524:"5bc50ddd32084536b8b8",536:"ab2a889dae72ec88f68c",538:"6bd37e70917b1b6ff08e",626:"dd96f6cb20b270561325",640:"c329e19eedaf84c239cd",745:"cc53f6e29328dbd2c9ff",830:"cf4ac714b9e5af5f91a7",915:"af01666698d37aea6ce6",941:"367e239e47c825643813",993:"5065d2f591c9fc4f83b4"}[e]+".js",s.miniCssF=e=>e+"."+{47:"6587cf7cd58625267285",126:"6c11ab2d3cdbd7baf2dd",133:"7825bcf69db105db21d4",472:"65a66b6c1fb1be8db986",538:"6bd37e70917b1b6ff08e",640:"c329e19eedaf84c239cd"}[e]+".css",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},r="telegram-t:",s.l=(e,t,o,d)=>{if(n[e])n[e].push(t);else{var a,u;if(void 0!==o)for(var i=document.getElementsByTagName("script"),c=0;c{a.onerror=a.onload=null,clearTimeout(h);var o=n[e];if(delete n[e],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(r))),t)return t(r)},h=setTimeout(f.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=f.bind(null,a.onerror),a.onload=f.bind(null,a.onload),u&&document.head.appendChild(a)}},s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;s.g.importScripts&&(e=s.g.location+"");var t=s.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=e})(),o=e=>new Promise(((t,n)=>{var r=s.miniCssF(e),o=s.p+r;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),r=0;r{var o=document.createElement("link");o.rel="stylesheet",o.type="text/css",o.onerror=o.onload=d=>{if(o.onerror=o.onload=null,"load"===d.type)n();else{var a=d&&("load"===d.type?"missing":d.type),u=d&&d.target&&d.target.href||t,s=new Error("Loading CSS chunk "+e+" failed.\n("+u+")");s.code="CSS_CHUNK_LOAD_FAILED",s.type=a,s.request=u,o.parentNode.removeChild(o),r(s)}},o.href=t,document.head.appendChild(o)})(e,o,t,n)})),d={179:0},s.f.miniCss=(e,t)=>{d[e]?t.push(d[e]):0!==d[e]&&{47:1,126:1,133:1,472:1,538:1,640:1}[e]&&t.push(d[e]=o(e).then((()=>{d[e]=0}),(t=>{throw delete d[e],t})))},(()=>{s.b=document.baseURI||self.location.href;var e={179:0};s.f.j=(t,n)=>{var r=s.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var d=s.p+s.u(t),a=new Error;s.l(d,(n=>{if(s.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),d=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+o+": "+d+")",a.name="ChunkLoadError",a.type=o,a.request=d,r[1](a)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,o,[d,a,u]=n,i=0;if(d.some((t=>0!==e[t]))){for(r in a)s.o(a,r)&&(s.m[r]=a[r]);u&&u(s)}for(t&&t(n);i{s(3592);var e=s(3716),t=s(5116),n=s(7361),r=s(8406);function o(n){const o=n.data;if(e.ZT&&console.log("[SW] Message from worker",o),!o.type)return;const d=(0,t.uC)();switch(o.type){case"focusMessage":d.focusMessage&&d.focusMessage(o.payload);break;case"playNotificationSound":(0,r.Nz)(o.payload.id)}}function d(){navigator.serviceWorker.removeEventListener("message",o),navigator.serviceWorker.addEventListener("message",o),(0,r.KC)()}n.Mc&&(window.addEventListener("load",(async()=>{try{if(!navigator.serviceWorker.controller){const t=await navigator.serviceWorker.getRegistrations();t.length&&(e.eM&&console.log("[SW] Hard reload detected, re-enabling Service Worker"),await Promise.all(t.map((e=>e.unregister()))))}await navigator.serviceWorker.register(new URL(s.p+s.u(524),s.b)),e.eM&&console.log("[SW] ServiceWorker registered"),await navigator.serviceWorker.ready,navigator.serviceWorker.controller?(e.eM&&console.log("[SW] ServiceWorker ready"),d()):(e.eM&&console.error("[SW] ServiceWorker not available"),n.cj||n.wZ||(0,t.uC)().showDialog({data:{message:"SERVICE_WORKER_DISABLED",hasErrorKey:!0}}))}catch(t){e.eM&&console.error("[SW] ServiceWorker registration failed: ",t)}})),window.addEventListener("focus",(async()=>{await navigator.serviceWorker.ready,d()})));var a=s(2916);const u={isLeftColumnShown:!0,isChatInfoShown:!1,newChatMembersProgress:s(1713).WB.Closed,uiReadyState:0,serverTimeOffset:0,authRememberMe:!0,countryList:{phoneCodes:[],general:[]},blocked:{ids:[],totalCount:0},users:{byId:{},statusesById:{}},chats:{listIds:{},isFullyLoaded:{},orderedPinnedIds:{},totalCount:{},byId:{}},messages:{byChatId:{},messageLists:[],sponsoredByChatId:{}},groupCalls:{byId:{}},scheduledMessages:{byChatId:{}},chatFolders:{byId:{},activeChatFolder:0},fileUploads:{byMessageLocalId:{}},recentEmojis:["grinning","kissing_heart","christmas_tree","brain","trophy"],stickers:{setsById:{},added:{},recent:{stickers:[]},favorite:{stickers:[]},greeting:{stickers:[]},featured:{setIds:[]},search:{},forEmoji:{}},emojiKeywords:{},gifs:{saved:{},search:{}},inlineBots:{isLoading:!1,byUsername:{}},globalSearch:{},userSearch:{},localTextSearch:{byChatThreadKey:{}},localMediaSearch:{byChatId:{}},management:{byChatId:{}},topPeers:{},topInlineBots:{},mediaViewer:{},audioPlayer:{volume:e.Qx,playbackRate:e.mw,isMuted:!1},forwardMessages:{},pollResults:{},payment:{},notifications:[],dialogs:[],activeSessions:[],settings:{byKey:{theme:"light",shouldUseSystemTheme:!0,messageTextSize:n.cj?e.b6:n.jm?e.AR:e.xS,animationLevel:e.CX,messageSendKeyCombo:"enter",canAutoLoadPhotoFromContacts:!0,canAutoLoadPhotoInPrivateChats:!0,canAutoLoadPhotoInGroups:!0,canAutoLoadPhotoInChannels:!0,canAutoLoadVideoFromContacts:!0,canAutoLoadVideoInPrivateChats:!0,canAutoLoadVideoInGroups:!0,canAutoLoadVideoInChannels:!0,canAutoLoadFileFromContacts:!1,canAutoLoadFileInPrivateChats:!1,canAutoLoadFileInGroups:!1,canAutoLoadFileInChannels:!1,autoLoadFileMaxSizeMb:10,hasWebNotifications:!0,hasPushNotifications:!0,notificationSoundVolume:5,canAutoPlayGifs:!0,canAutoPlayVideos:!0,shouldSuggestStickers:!0,shouldLoopStickers:!0,language:"en",timeFormat:"24h",wasTimeFormatSetManually:!1,isConnectionStatusMinimized:!0},themes:{light:{isBlurred:!0,patternColor:e.g},dark:{isBlurred:!0,patternColor:e.Vv}},privacy:{},notifyExceptions:{}},twoFaSettings:{},activeReactions:{},shouldShowContextMenuHint:!0,activeDownloads:{byChatId:{}},serviceNotifications:[]};var i=s(6137),c=s(9118),l=s(8674),f=s(782),h=s(9066),m=s(3100),p=s(5780),g=s(8415),v=s(6974);const y=(0,c.P2)((()=>(0,c.Q8)(S)),5e3,!1);let b,I=!1;function w(){I=!0,b=(0,c.Gq)(S,!0),window.addEventListener("blur",S),(0,t.ll)(y)}function C(){I=!1,(0,t.Iq)(y),window.removeEventListener("blur",S),b&&b()}function S(){if(!I||(0,l.zG)())return;const n=(0,t.Rd)();if(n.isLoggingOut)return;const r={...u,...(0,f.ei)(n,["authState","authPhoneNumber","authRememberMe","authNearestCountry","currentUserId","contactList","topPeers","topInlineBots","recentEmojis","push","shouldShowContextMenuHint","leftColumnWidth","serviceNotifications"]),audioPlayer:{volume:n.audioPlayer.volume,playbackRate:n.audioPlayer.playbackRate,isMuted:n.audioPlayer.isMuted},isChatInfoShown:E(n),users:P(n),chats:M(n),messages:A(n),globalSearch:{recentlyFoundChatIds:n.globalSearch.recentlyFoundChatIds},settings:k(n),chatFolders:T(n),groupCalls:N(n),availableReactions:L(n)},o=JSON.stringify(r);localStorage.setItem(e.Uh,o)}function E(t){return window.innerWidth>e._m&&t.isChatInfoShown}function P(t){var n,r,o,d,a;const{users:{byId:u,statusesById:s},currentUserId:i}=t,{chatId:c}=(0,h.Bt)(t)||{},l=null===(n=(0,h.P2)(t))||void 0===n?void 0:n.map((e=>{let{id:t}=e;return t})),m=(0,f.Tw)([...i?[i]:[],...c&&(0,g.YC)(c)?[c]:[],...l||[],...t.topPeers.userIds||[],...(null===(r=(0,v.gO)(e.Nf))||void 0===r?void 0:r.filter(g.YC))||[],...(null===(o=(0,v.gO)(e.WS))||void 0===o?void 0:o.filter(g.YC))||[],...(null===(d=t.contactList)||void 0===d?void 0:d.userIds)||[],...(null===(a=t.globalSearch.recentlyFoundChatIds)||void 0===a?void 0:a.filter(g.YC))||[],...Object.keys(u)]).slice(0,e.lO);return{byId:(0,f.ei)(u,m),statusesById:(0,f.ei)(s,m)}}function M(t){const{chats:{byId:n},currentUserId:r}=t,o=(0,h.jr)(t),d=(0,f.Tw)([...r?[r]:[],...o?[o.id]:[],...(0,v.gO)(e.Nf)||[],...(0,v.gO)(e.WS)||[],...t.globalSearch.recentlyFoundChatIds||[],...Object.keys(n)]).slice(0,e.gJ);return{...t.chats,isFullyLoaded:{},byId:(0,f.ei)(t.chats.byId,d)}}function A(t){var n;const{currentUserId:r}=t,o={},{chatId:d}=(0,h.Bt)(t)||{};return[...d?[d]:[],...r?[r]:[],...(null===(n=(0,v.gO)(e.Nf))||void 0===n?void 0:n.slice(0,e.Rk))||[]].forEach((e=>{const n=t.messages.byChatId[e];if(!n)return;const r=n.threadsById[i._f];r&&r.viewportIds&&(o[e]={byId:(0,f.ei)(n.byId,r.viewportIds),threadsById:{[i._f]:r}})})),{byChatId:o,messageLists:[],sponsoredByChatId:{}}}function k(e){const{byKey:t,themes:n}=e.settings;return{byKey:t,themes:n,privacy:{},notifyExceptions:{}}}function T(e){return{...e.chatFolders,activeChatFolder:0}}function N(e){return{...e.groupCalls,byId:{},activeGroupCallId:void 0,isGroupCallPanelHidden:void 0,isFallbackConfirmOpen:void 0}}function L(e){var t;return null===(t=e.availableReactions)||void 0===t?void 0:t.map((e=>(0,f.ei)(e,["reaction","staticIcon","title","isInactive"])))}e.sd||((0,t.Q6)("saveSession",(()=>{I||w()})),(0,t.Q6)("reset",(()=>{localStorage.removeItem(e.Uh),I&&C()}))),(0,t.Q6)("init",(()=>{const t=(0,f.Xh)(u);return function(t){if(!e.sd)return(0,m.ti)(!0)?(w(),function(t){e.eM&&console.time("global-state-cache-read");const r=localStorage.getItem(e.Uh),o=r?JSON.parse(r):void 0;e.eM&&console.timeEnd("global-state-cache-read"),o&&function(t,n){if("shouldAutoDownloadMediaFromContacts"in t.settings.byKey){const{shouldAutoDownloadMediaFromContacts:e,shouldAutoDownloadMediaInPrivateChats:n,shouldAutoDownloadMediaInGroups:r,shouldAutoDownloadMediaInChannels:o,shouldAutoPlayVideos:d,shouldAutoPlayGifs:a,...u}=t.settings.byKey;t.settings.byKey={...u,canAutoLoadPhotoFromContacts:e,canAutoLoadVideoFromContacts:e,canAutoLoadPhotoInPrivateChats:n,canAutoLoadVideoInPrivateChats:n,canAutoLoadPhotoInGroups:r,canAutoLoadVideoInGroups:r,canAutoLoadPhotoInChannels:o,canAutoLoadVideoInChannels:o,canAutoPlayVideos:d,canAutoPlayGifs:a}}t.settings.byKey={...n.settings.byKey,...t.settings.byKey},t.settings.themes={...n.settings.themes,...t.settings.themes},t.chatFolders={...n.chatFolders,...t.chatFolders},t.stickers.greeting||(t.stickers.greeting=n.stickers.greeting),t.activeDownloads||(t.activeDownloads={byChatId:{}}),t.serviceNotifications||(t.serviceNotifications=[]),void 0===t.audioPlayer.volume&&(t.audioPlayer.volume=e.Qx),void 0===t.audioPlayer.playbackRate&&(t.audioPlayer.playbackRate=e.mw),t.groupCalls||(t.groupCalls=n.groupCalls),t.users.statusesById||(t.users.statusesById={}),t.messages.sponsoredByChatId||(t.messages.sponsoredByChatId={}),t.activeReactions||(t.activeReactions={})}(o,t);const d={...t,...o},a=n.wB?void 0:(0,p.V)();return{...d,messages:{...d.messages,messageLists:a?[a]:[]}}}(t)):void C()}(t)||t}));var R=s(4050),x=s(3858);const Z="tt-active-tab",B=String(Date.now()+Math.random());let O;localStorage.setItem(Z,B);const F=window.setInterval((()=>{O&&localStorage.getItem(Z)!==B&&(O(),clearInterval(F))}),2e3);var D=s(706),_=(s(7895),s(3781),s(1363),s(9667),s(4907),s(6590)),$=s(8332),U=s(1212),j=s(1394);const V=["400 1em Roboto","500 1em Roboto"];function W(){if("fonts"in document)return Promise.all(V.map((e=>document.fonts.load(e))))}var G=s(647),H=s(9203),z=s(6752),Q=s(4128),K=s(5523),J=s(2162);function q(){const{listIds:e,byId:n}=(0,t.Rd)().chats;if(e.active)return Promise.all(e.active.slice(0,10).map((e=>{const t=n[e];if(!t)return;const r=(0,$.RT)(t);return r?G.he(r,i.IU.BlobUrl):void 0})))}const Y={main:()=>Promise.all([(0,H.$y)(H.gl.Main,"Main").then(W),q(),(0,j.pt)(K)]),authPhoneNumber:()=>Promise.all([W(),(0,j.pt)(Q)]),authCode:()=>(0,j.pt)(J),authPassword:()=>(0,j.pt)(J),authQrCode:W},X=(0,t.c$)((e=>{const t=(0,h.Pu)(e),{background:n,backgroundColor:r}=e.settings.themes[t]||{};return{shouldSkipHistoryAnimations:e.shouldSkipHistoryAnimations,uiReadyState:e.uiReadyState,hasCustomBackground:Boolean(n),hasCustomBackgroundColor:Boolean(r),isRightColumnShown:(0,h.Jf)(e),leftColumnWidth:e.leftColumnWidth}}))((e=>{let{page:n,children:r,hasCustomBackground:o,hasCustomBackgroundColor:d,isRightColumnShown:a,shouldSkipHistoryAnimations:u,leftColumnWidth:s}=e;const{setIsUiReady:i}=(0,t.uC)(),[l,f]=(0,D.Z)(),{shouldRender:h,transitionClassNames:m}=(0,U.Z)(!l,void 0,!0);return(0,R.d4)((()=>{let e;return Promise.race([(0,c.wO)(700),(async()=>{try{await Y[n]()}catch(e){}})()]).then((()=>{f(),i({uiReadyState:1}),e=window.setTimeout((()=>{i({uiReadyState:2})}),1e3)})),()=>{e&&(clearTimeout(e),e=void 0),i({uiReadyState:0})}}),[]),R.ZP.createElement("div",{id:"UiLoader"},r,h&&!u&&R.ZP.createElement("div",{className:(0,z.Z)("mask",m)},"main"===n?R.ZP.createElement(R.ZP.Fragment,null,R.ZP.createElement("div",{className:"left",style:s?`width: ${s}px`:void 0}),R.ZP.createElement("div",{className:(0,z.Z)("middle",o&&"custom-bg-image",d&&"custom-bg-color",a&&"with-right-column")}),a&&R.ZP.createElement("div",{className:"right"})):R.ZP.createElement("div",{className:"blank"})))}));var ee=s(6272),te=s(711),ne=s(9107);const re=(e,t)=>{const[n,r]=(0,R.eJ)();return e&&te.Pn(e,t).then(r),n};function oe(){let e=navigator.language;return e&&"pt-br"!==e&&(e=e.substr(0,2)),e}var de=s(231),ae=s(4605),ue=s(7687),se=s(4288),ie=s(5765),ce=s(2340),le=s(4284),fe=s(9290),he=s(3106),me=s(8964),pe=s(9204);const ge=200+e.fK,ve=(0,R.X$)((0,t.c$)((e=>{const{countryList:{phoneCodes:t}}=e;return{phoneCodeList:t}}))((e=>{let{id:t,value:n,isLoading:r,onChange:o,phoneCodeList:d}=e;const a=(0,ne.Z)(),u=(0,R.sO)(null),[s,i]=(0,R.eJ)(),[c,l]=(0,R.eJ)([]),f=(0,R.I4)((e=>{i(e),l(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!t.length)return e;const n=(0,ie.W)(t);return e.filter((e=>n(e.defaultName)||e.name&&n(e.name)))}(d,e))}),[d]);(0,fe.Z)((e=>{let[t]=e;0===(null==t?void 0:t.length)&&d.length>0&&f(s)}),[d,f]);const h=(0,R.I4)((e=>{o(e),setTimeout((()=>f(void 0)),ge)}),[o,f]),m=(0,R.I4)((e=>{f(e.currentTarget.value)}),[f]),p=(0,R.I4)((e=>{if(8!==e.keyCode)return;const t=e.currentTarget;n&&void 0===s&&(t.value=""),f(t.value)}),[s,f,n]);return R.ZP.createElement(he.Z,{className:"CountryCodeInput",trigger:e=>{let{onTrigger:o,isOpen:d}=e;const i=()=>{if(d)return;setTimeout((()=>{u.current.select()}),50),o();const e=document.getElementById("auth-phone-number-form");e.scrollTo({top:e.scrollHeight,behavior:"smooth"})},c=null!=s?s:(null==n?void 0:n.name)||(null==n?void 0:n.defaultName)||"";return R.ZP.createElement("div",{className:(0,z.Z)("input-group",n&&"touched")},R.ZP.createElement("input",{ref:u,className:(0,z.Z)("form-control",d&&"focus"),type:"text",id:t,value:c,autoComplete:"off",onClick:i,onFocus:i,onInput:e=>{m(e),i()},onKeyDown:p}),R.ZP.createElement("label",null,a("Login.SelectCountry.Title")),r?R.ZP.createElement(pe.Z,{color:"black"}):R.ZP.createElement("i",{onClick:i,className:(0,z.Z)("css-icon-down",d&&"open")}))}},c.map((e=>R.ZP.createElement(me.Z,{key:e.iso2,className:n&&e.iso2===n.iso2?"selected":"",onClick:()=>h(e)},R.ZP.createElement("span",{className:"country-flag"},(0,ce.Z)((0,le.Wg)(e.iso2),["hq_emoji"])),R.ZP.createElement("span",{className:"country-name"},e.name||e.defaultName),R.ZP.createElement("span",{className:"country-code"},e.countryCode)))),!c.length&&R.ZP.createElement(me.Z,{key:"no-results",className:"no-results",disabled:!0},R.ZP.createElement("span",null,a("lng_country_none"))))})));let ye=!1;const be=(0,R.X$)((0,t.c$)((e=>{const{settings:{byKey:{language:t}},countryList:{phoneCodes:n}}=e;return{...(0,f.ei)(e,["connectionState","authState","authPhoneNumber","authIsLoading","authIsLoadingQrCode","authError","authRememberMe","authNearestCountry"]),language:t,phoneCodeList:n}}))((e=>{let{connectionState:r,authState:o,authPhoneNumber:d,authIsLoading:a,authIsLoadingQrCode:u,authError:s,authRememberMe:i,authNearestCountry:c,phoneCodeList:l,language:f}=e;const{setAuthPhoneNumber:h,setAuthRememberMe:m,loadNearestCountry:p,loadCountryList:g,clearAuthError:v,goToAuthQrCode:y,setSettingOption:b}=(0,t.uC)(),I=(0,ne.Z)(),w=(0,R.sO)(null),C=oe(),S=re(C,"ContinueOnThisLanguage"),[E,P]=(0,R.eJ)(),[M,A]=(0,R.eJ)(),[k,T]=(0,R.eJ)(!1),[N,L]=(0,R.eJ)(),[x,Z,B]=(0,D.Z)(),O=E?`+${E.countryCode} ${M||""}`:M,F=O&&O.replace(/[^\d]+/g,"").length>=7;(0,R.d4)((()=>{n.$b||w.current.focus()}),[E]),(0,R.d4)((()=>{"connectionStateReady"!==r||c||p()}),[r,c,p]),(0,R.d4)((()=>{"connectionStateReady"===r&&g({langCode:f})}),[r,f,g]),(0,R.d4)((()=>{c&&l&&!E&&!k&&P((0,ee.U9)(l,c)[0])}),[E,c,k,l]);const _=(0,R.I4)((e=>{e.length||A("");const t=l&&(0,ee.g3)(l,e),n=!E||t&&t.iso2!==E.iso2||!t&&e.length?t:E;(!E||!n||n&&n.iso2!==E.iso2)&&P(n),A((0,ee.un)(e,n))}),[l,E]),$=(0,R.I4)((()=>{Z(),(0,te.m0)(C,(()=>{B(),b({language:C})}))}),[Z,b,C,B]);(0,R.d4)((()=>{void 0===M&&d&&_(d)}),[d,M,_]),(0,R.bt)((()=>{w.current&&N&&w.current.setSelectionRange(...N)}),[N]);const U=(0,R.sO)(!1),V=(0,R.I4)((()=>{U.current=!0,requestAnimationFrame((()=>{U.current=!1}))}),[]),G=(0,R.I4)((e=>{P(e),A("")}),[]),H=(0,R.I4)((e=>{s&&v(),ye||(ye=!0,W(),(0,j.pt)(J));const{value:t,selectionStart:r,selectionEnd:o}=e.target;L(r&&o&&o1&&!U.current;_(d?`${E.countryCode} ${t}`:t)}),[s,v,E,O,_]),z=(0,R.I4)((e=>{m(e.target.checked)}),[m]),Q="authorizationStateWaitPhoneNumber"===o;return R.ZP.createElement("div",{id:"auth-phone-number-form",className:"custom-scroll"},R.ZP.createElement("div",{className:"auth-form"},R.ZP.createElement("div",{id:"logo"}),R.ZP.createElement("h2",null,"Telegram"),R.ZP.createElement("p",{className:"note"},I("StartText")),R.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),a||F&&h({phoneNumber:O})}},R.ZP.createElement(ve,{id:"sign-in-phone-code",value:E,isLoading:!c&&!E,onChange:G}),R.ZP.createElement(ue.Z,{ref:w,id:"sign-in-phone-number",label:I("Login.PhonePlaceholder"),value:O,error:s&&I(s),inputMode:"tel",onChange:H,onPaste:n.s$?V:void 0}),R.ZP.createElement(ae.Z,{id:"sign-in-keep-session",label:"Keep me signed in",checked:Boolean(i),onChange:z}),F&&(Q?R.ZP.createElement(de.Z,{type:"submit",ripple:!0,isLoading:a},I("Login.Next")):R.ZP.createElement(se.Z,null)),Q&&R.ZP.createElement(de.Z,{isText:!0,ripple:!0,isLoading:u,onClick:y},I("Login.QR.Login")),C&&C!==f&&S&&R.ZP.createElement(de.Z,{isText:!0,isLoading:x,onClick:$},S))))})));var Ie=s(8778);const we=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Auth,"AuthCode");return e?R.ZP.createElement(e,null):R.ZP.createElement(se.Z,null)})),Ce=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Auth,"AuthPassword");return e?R.ZP.createElement(e,null):R.ZP.createElement(se.Z,null)})),Se=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Auth,"AuthRegister");return e?R.ZP.createElement(e,null):R.ZP.createElement(se.Z,null)}));let Ee=null;class Pe{}Pe.render=function(e,t){Ee(e,t)},self.QrCreator=Pe,function(e){function t(t,n,r,o){var d={},a=e(r,n);a.u(t),a.J(),o=o||0;var u=a.h(),s=a.h()+2*o;return d.text=t,d.level=n,d.version=r,d.O=s,d.a=function(e,t){return t-=o,!(0>(e-=o)||e>=u||0>t||t>=u)&&a.a(e,t)},d}function n(e,t,n,r,o,d,a,u,s,i){function c(t,n,r,o,a,u,s){t?(e.lineTo(n+u,r+s),e.arcTo(n,r,o,a,d)):e.lineTo(n,r)}a?e.moveTo(t+d,n):e.moveTo(t,n),c(u,r,n,r,o,-d,0),c(s,r,o,t,o,0,-d),c(i,t,o,t,n,d,0),c(a,t,n,r,n,0,d)}function r(e,t,n,r,o,d,a,u,s,i){function c(t,n,r,o){e.moveTo(t+r,n),e.lineTo(t,n),e.lineTo(t,n+o),e.arcTo(t,n,t+r,n,d)}a&&c(t,n,d,d),u&&c(r,n,-d,d),s&&c(r,o,-d,-d),i&&c(t,o,d,-d)}function o(e,o){e:{var d=o.text,a=o.v,u=o.N,s=o.K,i=o.P;for(u=Math.max(1,u||1),s=Math.min(40,s||40);u<=s;u+=1)try{var c=t(d,a,u,i);break e}catch(e){}c=void 0}if(!c)return null;for(d=e.getContext("2d"),o.background&&(d.fillStyle=o.background,d.fillRect(o.left,o.top,o.size,o.size)),a=c.O,s=o.size/a,d.beginPath(),i=0;iMath.round(e*t.size))),"linear-gradient"===r)var d=e.createLinearGradient.apply(e,n);else{if("radial-gradient"!==r)throw Error("Unsupported fill");d=e.createRadialGradient.apply(e,n)}o.forEach((([e,t])=>{d.addColorStop(e,t)})),e.fillStyle=d}}(d,o),d.fill(),e}var d={minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:.5,quiet:0};Ee=function(e,t){var n={};Object.assign(n,d,e),n.N=n.minVersion,n.K=n.maxVersion,n.v=n.ecLevel,n.left=n.left,n.top=n.top,n.size=n.size,n.fill=n.fill,n.background=n.background,n.text=n.text,n.R=n.radius,n.P=n.quiet,t instanceof HTMLCanvasElement?(t.width===n.size&&t.height===n.size||(t.width=n.size,t.height=n.size),t.getContext("2d").clearRect(0,0,t.width,t.height),o(t,n)):((e=document.createElement("canvas")).width=n.size,e.height=n.size,n=o(e,n),t.appendChild(n))}}(function(){function e(o,a){function u(e,t){for(var n=-1;7>=n;n+=1)if(!(-1>=e+n||l<=e+n))for(var r=-1;7>=r;r+=1)-1>=t+r||l<=t+r||(c[e+n][t+r]=0<=n&&6>=n&&(0==r||6==r)||0<=r&&6>=r&&(0==n||6==n)||2<=n&&4>=n&&2<=r&&4>=r)}function s(e,n){for(var a=l=4*o+17,s=Array(a),m=0;m=v;v+=1)for(var y=-2;2>=y;y+=1)c[p+v][g+y]=-2==v||2==v||-2==y||2==y||0==v&&0==y}for(a=8;as;s+=1)m=!e&&1==(a>>s&1),c[6>s?s:8>s?s+1:l-15+s][8]=m,c[8][8>s?l-s-1:9>s?15-s:14-s]=m;if(c[l-8][8]=!e,7<=o){for(a=r.A(o),s=0;18>s;s+=1)m=!e&&1==(a>>s&1),c[Math.floor(s/3)][s%3+l-8-3]=m;for(s=0;18>s;s+=1)m=!e&&1==(a>>s&1),c[s%3+l-8-3][Math.floor(s/3)]=m}if(null==f){for(e=d.I(o,i),a=function(){var e=[],t=0,n={B:function(){return e},c:function(t){return 1==(e[Math.floor(t/8)]>>>7-t%8&1)},put:function(e,t){for(var r=0;r>>t-r-1&1))},f:function(){return t},m:function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1}};return n}(),s=0;s8*m)throw Error("code length overflow. ("+a.f()+">"+8*m+")");for(a.f()+4<=8*m&&a.put(0,4);0!=a.f()%8;)a.m(!1);for(;!(a.f()>=8*m||(a.put(236,8),a.f()>=8*m));)a.put(17,8);var b=0;for(m=s=0,p=Array(e.length),g=Array(e.length),v=0;vv;v+=1)null==c[s][g-v]&&(y=!1,p>>m&1)),n(s,g-v)&&(y=!y),c[s][g-v]=y,-1==--m&&(p+=1,m=7));if(0>(s+=a)||l<=s){s-=a,a=-a;break}}}var i=n[a],c=null,l=0,f=null,h=[],m={u:function(t){t=function(t){var n=e.s(t);return{S:function(){return 4},b:function(){return n.length},write:function(e){for(var t=0;te||l<=e||0>t||l<=t)throw Error(e+","+t);return c[e][t]},h:function(){return l},J:function(){for(var e=0,t=0,n=0;8>n;n+=1){s(!0,n);var o=r.D(m);(0==n||e>o)&&(e=o,t=n)}s(!1,t)}};return m}function t(e,n){if(void 0===e.length)throw Error(e.length+"/"+n);var r=function(){for(var t=0;td.b()-e.b())return d;for(var n=o.g(d.c(0))-o.g(e.c(0)),r=Array(d.b()),a=0;ar?t.push(r):2048>r?t.push(192|r>>6,128|63&r):55296>r||57344<=r?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t};var n={L:1,M:0,Q:3,H:2},r=function(){function e(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t}var n=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r={w:function(t){for(var n=t<<10;0<=e(n)-e(1335);)n^=1335<t||40t?8:16},D:function(e){for(var t=e.h(),n=0,r=0;r=u;u+=1)if(!(0>r+u||t<=r+u))for(var s=-1;1>=s;s+=1)0>o+s||t<=o+s||(0!=u||0!=s)&&a==e.a(r+u,o+s)&&(d+=1);5n;n+=1)e[n]=1<n;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(n=0;255>n;n+=1)t[e[n]]=n;return{g:function(e){if(1>e)throw Error("glog("+e+")");return t[e]},i:function(t){for(;0>t;)t+=255;for(;256<=t;)t-=255;return e[t]}}}(),d=function(){function e(e,r){switch(r){case n.L:return t[4*(e-1)];case n.M:return t[4*(e-1)+1];case n.Q:return t[4*(e-1)+2];case n.H:return t[4*(e-1)+3]}}var t=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],r={I:function(t,n){var r=e(t,n);if(void 0===r)throw Error("bad rs block @ typeNumber:"+t+"/errorCorrectLevel:"+n);t=r.length/3,n=[];for(var o=0;o{const{connectionState:t,authState:n,authQrCode:r,settings:{byKey:{language:o}}}=e;return{connectionState:t,authState:n,authQrCode:r,language:o}}))((n=>{let{connectionState:r,authState:o,authQrCode:d,language:a}=n;const{returnToAuthPhoneNumber:u,setSettingOption:s}=(0,t.uC)(),i=oe(),c=(0,ne.Z)(),l=(0,R.sO)(null),f=re(i,"ContinueOnThisLanguage"),[h,m,p]=(0,D.Z)();(0,R.d4)((()=>{if(!d||"connectionStateReady"!==r)return;const e=l.current;e.innerHTML="",e.classList.remove("pre-animate"),Me.render({text:`tg://login?token=${d.token}`,radius:.5,ecLevel:"M",fill:"#4E96D4",size:280},e)}),[r,d]),(0,R.d4)((()=>{"connectionStateReady"===r&&(0,te.m0)(e.sR)}),[r]);const g=(0,R.I4)((()=>{m(),(0,te.m0)(i,(()=>{p(),s({language:i})}))}),[m,s,i,p]),v="authorizationStateWaitQrCode"===o;return R.ZP.createElement("div",{id:"auth-qr-form",className:"custom-scroll"},R.ZP.createElement("div",{className:"auth-form qr"},d?R.ZP.createElement("div",{key:"qr-container",className:"qr-container pre-animate",ref:l}):R.ZP.createElement("div",{key:"qr-loading",className:"qr-loading"},R.ZP.createElement(se.Z,null)),R.ZP.createElement("h3",null,c("Login.QR.Title")),R.ZP.createElement("ol",null,R.ZP.createElement("li",null,R.ZP.createElement("span",null,c("Login.QR.Help1"))),R.ZP.createElement("li",null,R.ZP.createElement("span",null,(0,ce.Z)(c("Login.QR.Help2"),["simple_markdown"]))),R.ZP.createElement("li",null,R.ZP.createElement("span",null,c("Login.QR.Help3")))),v&&R.ZP.createElement(de.Z,{isText:!0,onClick:u},c("Login.QR.Cancel")),i&&i!==a&&f&&R.ZP.createElement(de.Z,{isText:!0,isLoading:h,onClick:g},f)))}))),ke=(0,R.X$)((0,t.c$)((e=>(0,f.ei)(e,["authState"])))((e=>{let{authState:r}=e;const{reset:o,initApi:d,returnToAuthPhoneNumber:a,goToAuthQrCode:u}=(0,t.uC)();(0,R.d4)((()=>{o(),d()}),[o,d]);const s="iOS"===n.Lt||"Android"===n.Lt;switch((0,_.ZP)(!s&&"authorizationStateWaitPhoneNumber"===r||s&&"authorizationStateWaitQrCode"===r,(()=>{s?a():u()})),(0,R.d4)((()=>(x.Z.disableRefresh(),()=>{x.Z.enableRefresh()})),[]),r){case"authorizationStateWaitCode":return R.ZP.createElement(X,{page:"authCode",key:"authCode"},R.ZP.createElement(we,null));case"authorizationStateWaitPassword":return R.ZP.createElement(X,{page:"authPassword",key:"authPassword"},R.ZP.createElement(Ce,null));case"authorizationStateWaitRegistration":return R.ZP.createElement(Se,null);case"authorizationStateWaitPhoneNumber":return R.ZP.createElement(X,{page:"authPhoneNumber",key:"authPhoneNumber"},R.ZP.createElement(be,null));case"authorizationStateWaitQrCode":return R.ZP.createElement(X,{page:"authQrCode",key:"authQrCode"},R.ZP.createElement(Ae,null));default:return s?R.ZP.createElement(X,{page:"authPhoneNumber",key:"authPhoneNumber"},R.ZP.createElement(be,null)):R.ZP.createElement(X,{page:"authQrCode",key:"authQrCode"},R.ZP.createElement(Ae,null))}}))),Te=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Main,"Main");return e?R.ZP.createElement(e,null):void 0}));var Ne=s(5359);const Le=()=>R.ZP.createElement("div",{id:"AppInactive"},R.ZP.createElement("div",{className:"content"},R.ZP.createElement("img",{src:Ne,alt:""}),R.ZP.createElement("h3",{className:"title"},"Such error, many tabs"),R.ZP.createElement("div",{className:"description"},"Telegram supports only one active tab with the app.",R.ZP.createElement("br",null),"Please reload this page to continue using this tab or close it."),R.ZP.createElement("div",{className:"actions"},R.ZP.createElement(de.Z,{isText:!0,ripple:!0,onClick:()=>{window.location.reload()}},"Reload app"))));function Re(){return t.ZP.createElement(X,{page:"main",key:"main"},t.ZP.createElement(Te,null))}const xe=(0,t.c$)((e=>(0,f.ei)(e,["authState"])))((n=>{let{authState:r}=n;const{disconnect:o}=(0,t.uC)(),[d,a]=(0,D.Z)(!1);if((0,R.d4)((()=>{(0,x.z)(),O=()=>{o(),document.title=`${e.Ti}${e.ou}`,a()}}),[o,a]),d)return t.ZP.createElement(Le,null);if(r)switch(r){case"authorizationStateWaitPhoneNumber":case"authorizationStateWaitCode":case"authorizationStateWaitPassword":case"authorizationStateWaitRegistration":case"authorizationStateWaitQrCode":return t.ZP.createElement(ke,null);case"authorizationStateClosed":case"authorizationStateClosing":case"authorizationStateLoggingOut":case"authorizationStateReady":return Re()}return(0,m.ti)(!0)?Re():t.ZP.createElement(ke,null)}));e.eM&&console.log(">>> INIT"),(0,t.uC)().init(),e.eM&&console.log(">>> START INITIAL RENDER"),a.Z.render(t.ZP.createElement(xe,null),document.getElementById("root")),e.eM&&console.log(">>> FINISH INITIAL RENDER"),document.addEventListener("dblclick",(()=>{console.warn("GLOBAL STATE",(0,t.Rd)())}))})()})(); -//# sourceMappingURL=main.1506acf7f7cfa5302ad7.js.map \ No newline at end of file diff --git a/dist/main.1506acf7f7cfa5302ad7.js.map b/dist/main.1506acf7f7cfa5302ad7.js.map deleted file mode 100644 index 96141913e..000000000 --- a/dist/main.1506acf7f7cfa5302ad7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.1506acf7f7cfa5302ad7.js","mappings":"uBACIA,EADAC,ECAAC,EACAC,ECwCAC,EASAC,E,wFC/BJ,IAAIC,EACJ,MAAMC,EAAgB,IAAIC,IACpBC,EAA0B,IAAID,IAI7B,SAASE,EAAQC,EAAuBC,GAe7C,OAdKN,IACCO,EAAAA,IAEFC,QAAQC,IAAI,yBAGdT,EAAS,IAAIU,OAAO,IAAIC,IAAI,mBAsEhC,SAA2BN,GACzBL,EAAOY,iBAAiB,WAAW,IAAkC,IAAjC,KAAEC,GAA+B,EACnE,GAAkB,WAAdA,EAAKC,KACPT,EAASQ,EAAKE,aACT,GAAkB,mBAAdF,EAAKC,KAA2B,CACzC,MAAME,EAAef,EAAcgB,IAAIJ,EAAKK,WACxCF,IACEH,EAAKM,MACPH,EAAaI,OAAOP,EAAKM,OAEzBH,EAAaK,QAAQR,EAAKS,gBAGzB,GAAkB,mBAAdT,EAAKC,KAA2B,SACzC,UAAAb,EAAcgB,IAAIJ,EAAKK,kBAAvB,mBAAmCK,gBAAnC,mBAAiDV,EAAKW,mBACjD,GAAkB,mBAAdX,EAAKC,KAA2B,OACzC,MAAM,IAAIW,MAAJ,UAAUZ,EAAKM,aAAf,aAAU,EAAYO,aArF9BC,CAAkBtB,GAEW,QAAzBC,EAAYsB,UAiIlBC,OAAOjB,iBAAiB,SAAS,KAC1BkB,IAELC,YAAW,IAAMD,KAAoB,SA/HhCE,EAAY,CACjBlB,KAAM,UACNmB,KAAM,CAAC3B,KAIJ,SAAS4B,EAAiCC,GAC/C,IAAKnC,EAMH,YALIO,EAAAA,IAEFC,QAAQ4B,KAAK,2BAJiE,2BAArBH,EAAqB,iCAArBA,EAAqB,kBAUlF,MAAMI,EAAUL,EAAY,CAC1BlB,KAAM,aACNwB,KAAMH,EACNF,KAAAA,IA0BF,OAtBI1B,EAAAA,IACF,WACE,UASyB8B,EAKvB,MAAOE,MAfX,GAqBKF,EAGF,SAASG,EAAkBC,GAChCA,EAAiBC,YAAa,EAE9B,MAAM,UAAExB,GAAcf,EAAwBc,IAAIwB,IAAqB,GAClEvB,GAILlB,EAAO2C,YAAY,CACjB7B,KAAM,iBACNI,UAAAA,IAyBJ,SAASc,EAAYN,GACnB,MAAMR,GAAY0B,EAAAA,EAAAA,GAAc3C,GAC1B4C,EAAyB,CAC7B3B,UAAAA,KACGQ,GAGCV,EAAe,CAAEE,UAAAA,GAGjBmB,EAAkD,IAAIS,SAAQ,CAACzB,EAASD,KAC5E2B,OAAOC,OAAOhC,EAAc,CAAEK,QAAAA,EAASD,OAAAA,OAGzC,GAAK,SAAUyB,GAAuC,mBAApBA,EAAQZ,KAAK,GAAmB,CAChE,MAAMV,EAAWsB,EAAQZ,KAAKgB,MAC9BjC,EAAaO,SAAWA,EACxBpB,EAAwB+C,IAAI3B,EAAUP,GAiBxC,OAdAf,EAAciD,IAAIhC,EAAWF,GAE7BqB,EACGc,OAAM,SACNC,SAAQ,KACPnD,EAAcoD,OAAOnC,GAEjBF,EAAaO,UACfpB,EAAwBkD,OAAOrC,EAAaO,aAIlDvB,EAAO2C,YAAYE,GAEZR,EAGT,MAAMiB,EAAYC,KAAKC,MAWvBC,eAAe3B,IACb,UACQgB,QAAQY,KAAK,CACjB1B,EAAY,CAAElB,KAAM,UACpB6C,EAAAA,EAAAA,IA/JuB,KA+JKC,MAAK,IAAMd,QAAQ1B,OAAO,IAAIK,MAAM,6BAElE,MAAOc,GAEP/B,QAAQW,MAAMoB,GAEVgB,KAAKC,MAAQF,GApKU,KAqKzBzB,OAAOgC,SAASC,Y,+GCnLf,IAAKC,E,0BAAAA,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,OAAAA,GAAAA,S,CAAAA,IAAAA,EAAAA,M,eCqML,IAAKC,E,6CAAAA,GAAAA,EAAAA,KAAAA,oBAAAA,EAAAA,WAAAA,0BAAAA,EAAAA,WAAAA,0BAAAA,EAAAA,QAAAA,uBAAAA,EAAAA,KAAAA,oBAAAA,EAAAA,MAAAA,qBAAAA,EAAAA,QAAAA,uBAAAA,EAAAA,OAAAA,sBAAAA,EAAAA,YAAAA,2BAAAA,EAAAA,QAAAA,uBAAAA,EAAAA,MAAAA,qBAAAA,EAAAA,IAAAA,mBAAAA,EAAAA,OAAAA,sBAAAA,EAAAA,QAAAA,uBAAAA,EAAAA,IAAAA,mBAAAA,EAAAA,UAAAA,yBAAAA,EAAAA,QAAAA,uBAAAA,EAAAA,QAAAA,uB,CAAAA,IAAAA,EAAAA,KA8JL,MAAMC,GAAkB,EAGlBC,EAAkB,mB,sDCtW/B,MAgDMC,EAAO,GAKPC,EAAS,WAWf,SAASC,EAAMC,EAAOC,EAAWC,GAC/B,IAAIC,EAIJ,IAHAH,EAAQE,EAAYE,KAAKC,MAAML,EAjBpB,KAiBoCA,GAAS,EACxDA,GAASI,KAAKC,MAAML,EAAQC,GAEvBE,EAAI,EAAGH,EAAS,IAA4BG,GAAKN,EACpDG,EAAQI,KAAKC,MAAML,EAAQ,IAE7B,OAAOI,KAAKC,MAAMF,EAAK,GAAoBH,GAAUA,EApB1C,KAwBb,SAASM,EAAOC,EAAOC,GAErB,MAAMC,EAAS,GACTC,EAAa,GACbC,EAAeJ,EAAMK,OAE3B,IAAIC,EAAOC,EAASC,EAAOC,EAAUC,EAAWC,EAAOC,EAAQC,EAAUC,EAAOlB,EAAOmB,EAAWC,EAAOC,EAezG,IAXAX,EAzCgB,IA0ChBE,EAAI,EACJC,EA1CmB,GAgDnBC,EAAQV,EAAMkB,YA/CE,KAgDZR,EAAQ,IAAGA,EAAQ,GAElBC,EAAI,EAAGA,EAAID,IAASC,EAAG,CAE1B,GADIV,IAAcE,EAAWD,EAAOG,QAAUL,EAAMmB,WAAWR,GAAK,GAAK,IACrEX,EAAMmB,WAAWR,IAAM,IACzB,MAAM,IAAIS,WAAW,yBAEvBlB,EAAOmB,KAAKrB,EAAMmB,WAAWR,IAM/B,IAAKC,EAAKF,EAAQ,EAAIA,EAAQ,EAAI,EAAGE,EAAKR,GAAe,CAOvD,IAAKS,EAAOL,EAAGM,EAAI,EAAGlB,EAAIN,GAAQM,GAAKN,EAAM,CAC3C,GAAIsB,GAAMR,EACR,MAAMgB,WAAW,yBAInB,GAFAL,GA5DgBO,EA4DKtB,EAAMmB,WAAWP,MA3D9B,GAAK,GAAKU,EAAK,GAAKA,EAAK,GAAK,GAAKA,EAAK,GAAKA,EAAK,GAAK,GAAKA,EAAK,GAAKhC,EA6D1EyB,GAASzB,EACX,MAAM8B,WAAW,yBAEnB,GAAIL,EAAQlB,KAAKC,OAAOP,EAASiB,GAAKM,GACpC,MAAMM,WAAW,wBAInB,GAFAZ,GAAKO,EAAQD,EACbE,EAAIpB,GAAKa,EA9EF,EA8EgBb,GAAKa,EA7ErB,MA6E0Cb,EAAIa,EACjDM,EAAQC,EACV,MAEF,GAAIF,EAAIjB,KAAKC,MAAMP,GAAUD,EAAO0B,IAClC,MAAMI,WAAW,wBAEnBN,GAAKxB,EAAO0B,EAQd,GALAT,EAAML,EAAOG,OAAS,EACtBI,EAAOjB,EAAMgB,EAAIK,EAAMN,EAAc,IAATM,GAIxBhB,KAAKC,MAAMU,EAAID,GAAOhB,EAASe,EACjC,MAAMc,WAAW,wBAEnBd,GAAKT,KAAKC,MAAMU,EAAID,GACpBC,GAAKD,EAIDN,GACFE,EAAWoB,OAAOf,EAAG,EAAGR,EAAMmB,WAAWP,EAAK,GAAK,GAAK,IAG1DV,EAAOqB,OAAOf,EAAG,EAAGF,GACpBE,IAjGJ,IAAsBc,EAmGpB,GAAIrB,EACF,IAAKO,EAAI,EAAGS,EAAMf,EAAOG,OAAQG,EAAIS,EAAKT,IACpCL,EAAWK,KACbN,EAAOM,GAAKgB,OAAOC,aAAavB,EAAOM,IACpCkB,cACAP,WAAW,IAIpB,MAjJSnB,CAAAA,IACP,MAAME,EAAS,GACf,IAAIM,EAAI,EACR,MAAMS,EAAMjB,EAAMK,OAClB,IAAIsB,EAEJ,KAAOnB,EAAIS,GAAK,CAEd,GADAU,EAAQ3B,EAAMQ,KACW,QAAZ,MAARmB,GACH,MAAM,IAAIP,WAAW,wCAEnBO,EAAQ,QACVA,GAAS,MACTzB,EAAOmB,KAAKG,OAAOC,aAAeE,IAAU,GAAM,KAAS,QAC3DA,EAAQ,MAAkB,KAARA,GAEpBzB,EAAOmB,KAAKG,OAAOC,aAAaE,IAElC,OAAOzB,EAAO0B,KAAK,KA+HdC,CAAa3B,G,kCC/FtB,SAAS4B,EAAUC,GACjB,IAAKA,EACH,OAGF,MAAMC,GAAOC,EAAAA,EAAAA,GAAeF,GAC5B,GAAKC,EAIL,IACE,IAAIE,EAAcC,UAAUH,GAE5B,MAAMI,EAAQF,EAAYE,MAAM,uCAChC,IAAKA,EACH,OAEF,MAAMC,EAASD,EAAM,GAGrB,OAFAF,EAAcA,EAAYI,QAAQD,EDgFtC,SAAmBA,GACjB,MAAME,EAAeF,EAAOG,MAAM,KAC5BjC,EAAM,GACZ,IAAK,IAAIC,EAAI,EAAGA,EAAI+B,EAAalC,SAAUG,EAAG,CAC5C,MAAMiC,EAAIF,EAAa/B,GACvBD,EAAIc,KAAKoB,EAAEL,MAAM,SAAWrC,EAAO0C,EAAEC,MAAM,IAAMD,GAEnD,OAAOlC,EAAIqB,KAAK,KCvF4Be,CAAgBN,IAEnDH,EACP,MAAO5F,GACHZ,EAAAA,IAEFC,QAAQW,MAAM,gCAAiCyF,EAAKzF,IAO1D,SAAesG,EAAAA,EAAAA,KAxFgB,IAMzB,IAN0B,IAC9Bb,EAD8B,KAE9Bc,EAF8B,UAG9BC,EAH8B,SAI9BC,EAJ8B,MAK9BC,GACI,EACJ,MAAM,oBAAEC,EAAF,iBAAuBC,IAAqBC,EAAAA,EAAAA,MAE5CC,EAAUL,GAAYF,EACtBQ,EAAYtB,IAAQqB,EAEpBE,GAAcC,EAAAA,EAAAA,KAAaC,GAE7BA,EAAEC,SAAWD,EAAEE,QAAUF,EAAEG,UAAYH,EAAEI,UACrC7B,IAASA,EAAIK,MAAMyB,EAAAA,MAAiB9B,EAAIK,MAAM0B,EAAAA,KAE9CT,IACFJ,EAAoB,CAAElB,IAAAA,IAEtByB,EAAEO,kBACK,IAMXP,EAAEO,iBACFb,EAAiB,CAAEnB,IAAAA,KAEZ,IACN,CAACsB,EAAWH,EAAkBD,EAAqBlB,IAEtD,IAAKA,EACH,OAGF,MAAMiC,GAAaC,EAAAA,EAAAA,GACjBnB,GAAa,mBACbD,EAAKxC,OAAS,IAAM,uBAGtB,OACE,wBACE2B,MAAMC,EAAAA,EAAAA,GAAeF,GACrBmC,MAAOpC,EAAUC,GACjBoC,OAAO,SACPC,IAAI,sBACJtB,UAAWkB,EACXK,QAASf,EACTgB,IAAKtB,EAAQ,MAAQ,QAEpBI,O,qECjEA,SAASmB,EAAkBC,GAChC,OAAIA,EAASC,UACH,IAAGD,EALM,YAKgBE,QAAQ,QAEvCF,EAASG,OACH,IAAGH,EAPM,SAOgBE,QAAQ,QAEnC,IAAGF,EAAS,MAAOE,QAAQ,QAG9B,SAASE,EAAqBC,GACnC,MAAM,SAAEC,EAAF,SAAYC,GAAaF,EAE/B,OAAOG,EAAiBF,EAAUC,GAG7B,SAASC,EAAiBF,EAAkBC,GACjD,OAAID,IAAuC,IAA3BA,EAASG,QAAQ,KACxBH,EAAStC,MAAM,KAAKpE,MAEpB2G,EAASvC,MAAM,KAAKpE,MAIxB,SAAS8G,EAAsBC,GACpC,OAAQA,GACN,IAAK,MACL,IAAK,MACL,IAAK,OACH,MAAO,QACT,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,OACH,MAAO,SACT,IAAK,MACL,IAAK,MACH,MAAO,MACT,QACE,MAAO,WAIN,SAASC,EAAsBP,GACpC,OAAOQ,QAAQR,EAASS,gBAAkBT,EAASU,a,8CClDrD,MAEMC,EAAgB,IAAIC,OAAQ,OAAMC,EAAAA,EAAAA,YAA0B,IAyBlE,EAvB8B7C,IAC5B,GAAIA,EAAKxC,OAJQsF,GAKf,OAAO,EAIT,IADoBN,QAAQxC,EAAKT,MAAMoD,IAErC,OAAO,EAGT,IAAII,EAAa,EACjB,KAAOF,EAAAA,EAAAA,KAAkB7C,IAGvB,GAFA+C,IAEIA,EAlBa,EAoBf,OADAF,EAAAA,EAAAA,UAAyB,GAClB,EAIX,OAAOE,I,6HCXT,MAoBA,EApB+B,IAEzB,IAF0B,UAC9B9C,EAD8B,OACnB+C,EADmB,SACX9C,GACf,EACJ,MAAM,SAAE+C,IAAa3C,EAAAA,EAAAA,MAEfG,GAAcC,EAAAA,EAAAA,KAAY,KAC1BsC,GACFC,EAAS,CAAEC,GAAIF,EAAOE,OAEvB,CAACF,EAAQC,IAEZ,OAAKD,EAKH,mBAACG,EAAA,EAAD,CAAMlD,WAAWmB,EAAAA,EAAAA,GAAe,WAAYnB,GAAYuB,QAASf,GAAcP,GAJxEA,GCQX,EApBkC,IAE5B,IAF6B,UACjCD,EADiC,QACtBjG,EADsB,SACbkG,GAChB,EACJ,MAAM,aAAEkD,IAAiB9C,EAAAA,EAAAA,MAEnB+C,GAAqB3C,EAAAA,EAAAA,KAAY,KACjC1G,GACFoJ,EAAa,CAAEE,OAAQtJ,EAAQsJ,OAAQ9J,UAAWQ,EAAQkJ,OAE3D,CAACE,EAAcpJ,IAElB,OAAKA,EAKH,mBAACmJ,EAAA,EAAD,CAAMlD,WAAWmB,EAAAA,EAAAA,GAAe,cAAenB,GAAYuB,QAAS6B,GAAqBnD,GAJlFA,GCMX,EApB+B,IAEzB,IAF0B,UAC9BD,EAD8B,OACnBqD,EADmB,SACXpD,GACf,EACJ,MAAM,SAAE+C,IAAa3C,EAAAA,EAAAA,MAEfG,GAAcC,EAAAA,EAAAA,KAAY,KAC1B4C,GACFL,EAAS,CAAEC,GAAII,MAEhB,CAACA,EAAQL,IAEZ,OAAKK,EAKH,mBAACH,EAAA,EAAD,CAAMlD,WAAWmB,EAAAA,EAAAA,GAAe,WAAYnB,GAAYuB,QAASf,GAAcP,GAJxEA,GCUX,EApBoC,IAE9B,IAF+B,UACnCD,EADmC,UACxBsD,EADwB,SACbrD,GAClB,EACJ,MAAM,cAAEsD,IAAkBlD,EAAAA,EAAAA,MAEpBG,GAAcC,EAAAA,EAAAA,KAAY,KAC1B6C,GACFC,EAAc,CAAEN,GAAIK,EAAUL,GAAIO,WAAYF,EAAUE,eAEzD,CAACF,EAAWC,IAEf,OAAKD,EAKH,mBAACJ,EAAA,EAAD,CAAMlD,WAAWmB,EAAAA,EAAAA,GAAe,gBAAiBnB,GAAYuB,QAASf,GAAcP,GAJ7EA,GCDLwD,EAAa,GACbC,EAAO,IAEN,SAASC,EACdC,EACA7J,EACA8J,EACAC,EACAC,EACAC,EACAC,GAEA,IADAC,EACA,uDADyB,GAEzB,IAAKnK,EAAQuG,QAAQ6D,OACnB,MAAO,GAGT,MAAM,KACJpE,EADI,kBACEqE,EADF,OACqBC,EADrB,SAC6BC,EAD7B,KACuCC,GACzCxK,EAAQuG,QAAQ6D,OACd7D,EAAsB,GACtBkE,EAAUN,EAAQO,aAAeP,EAAQQ,mBACzCC,EAA0B,6CAAT5E,GAAwDiE,EAE3EjE,EADA,+BAGJ,IACI6E,EADAC,EAAcjB,EAAKe,EAAgBP,MAAAA,GAAAA,EAAmB7G,OAAS6G,OAAoBU,GAkEvF,OA/DID,EAAYE,SAAS,sBACvBH,EAAYI,EACVH,EACA,oBACAI,EAAAA,EAAAA,GAAeZ,EAASC,EAAUV,EAAKsB,OAEzCL,EAAcD,EAAUtJ,MACxBgF,EAAQ/B,QAAQqG,IAGlBA,EAAYI,EACVH,EACA,kBACAhB,EACEsB,EAAkBtB,EAAkBW,IAAYd,EAC9CI,EACFsB,EAAkBxB,EAAME,EAAkBU,IAAYd,EACpD,QAGNmB,EAAcD,EAAUtJ,MACxBgF,EAAQ/B,QAAQqG,GAEhBA,EAAYI,EACVH,EACA,gBACAd,EACIA,EAAYsB,KAAKC,GAASH,EAAkBG,EAAMd,KAAUe,OAAiBhD,SAC7E,QAGNsC,EAAcD,EAAUtJ,MACxBgF,EAAQ/B,QAAQqG,GAEhBA,EAAYI,EACVH,EACA,YACAb,EACIwB,EAAqB5B,EAAMI,EAAeE,GAC1C,aAENW,EAAcD,EAAUtJ,MACxBgF,EAAQ/B,QAAQqG,GAEhBA,EAAYI,EACVH,EACA,YACAb,EACIyB,EAAqBzB,GACrB,aAENa,EAAcD,EAAUtJ,MACxBgF,EAAQ/B,QAAQqG,GAEhBA,EAAYI,EACVH,EACA,gBACAZ,EACIyB,EAAsBzB,EAAcO,GACpC,gBAENlE,EAAQ/B,QAAQqG,GAEZV,EAAQO,YACHnE,EAAQxB,KAAK,IAAI6G,OAGtBpB,EACKqB,EAAuBrB,EAAMjE,GAG/BA,EAGT,SAASmF,EAAqB1L,GAC5B,OAAOA,EAAQuG,SAAWvG,EAAQuG,QAAQuF,QACtC9L,EAAQuG,QAAQuF,QAAQzE,MACxB,YAGN,SAASoE,EAAqB5B,EAAc7J,GAAkD,IAA7BmK,EAA6B,uDAAJ,GACxF,MAAM,YAAEO,EAAF,mBAAeC,GAAuBR,EAE5C,GAAIO,EACF,OAAOqB,EAAAA,EAAAA,IAAsBlC,EAAM7J,OAAS+K,EAAWrB,GAGzD,MAAMsC,GAAiBC,EAAAA,EAAAA,GAAqBpC,EAAM7J,OAAS+K,OAAWA,EAAWrB,GAEjF,OAAIiB,EAEA,+BAAOqB,GAKT,mBAAC,EAAD,CAAa/F,UAAU,cAAcjG,QAASA,GAAUgM,GAI5D,SAASH,EAAuBtC,EAAkCvD,GAChE,OACE,mBAAC,EAAD,CAAeuD,UAAWA,GACvBvD,GAKP,SAASoF,EAAkBpC,EAAiByB,GAC1C,MAAMzE,GAAOkG,EAAAA,EAAAA,IAASC,EAAAA,EAAAA,IAAgBnD,GAASU,GAE/C,OAAIe,EACKzE,EAGF,mBAAC,EAAD,CAAUC,UAAU,cAAc+C,OAAQA,GAASA,IAAUoD,EAAAA,EAAAA,GAAWpG,IAGjF,SAASqF,EAAkBxB,EAAcwC,EAAe5B,GACtD,MAAMzE,GAAOkG,EAAAA,EAAAA,IAASI,EAAAA,EAAAA,GAAazC,EAAMwC,GAAO3C,GAEhD,OAAIe,EACKzE,EAGF,mBAAC,EAAD,CAAUC,UAAU,cAAcqD,OAAQ+C,EAAKnD,IAAKmD,IAAQD,EAAAA,EAAAA,GAAWpG,IAGhF,SAAS2F,EAAsBrC,EAAgBmB,GAC7C,MAAMzE,EAAO,eAEb,OAAIyE,EACKzE,EAGF,mBAAC,EAAD,CAAUC,UAAU,cAAcqD,OAAQA,GAAStD,GAG5D,SAASiF,EAAmBjF,EAAcuG,EAAqBC,GAC7D,MAAMC,EAAsBzG,EAAKoC,QAAQmE,GACzC,GAAIE,EAAsB,IAAMD,EAC9B,MAAO,CAACxG,GAGV,MAAMO,EAAsB,GAc5B,OAbAA,EAAQ/B,KAAKwB,EAAK0G,UAAU,EAAGD,IAC3BE,MAAMC,QAAQJ,GAChBA,EAAaK,SAAQ,CAAC/H,EAAOgI,KAC3BvG,EAAQ/B,KAAKM,GACTgI,EAAQ,EAAIN,EAAahJ,QAC3B+C,EAAQ/B,KAAK,SAIjB+B,EAAQ/B,KAAKgI,GAEfjG,EAAQ/B,KAAKwB,EAAK0G,UAAUD,EAAsBF,EAAY/I,SAEvD+C,I,6FCtMF,SAASwG,EACd/M,EACAgN,EACAC,EACAC,EACAC,GAEA,MAAM,KAAEnH,EAAF,SAAQoH,GAAapN,EAAQuG,QAAQP,MAAQ,GAEnD,IAAKA,EAAM,CACT,MAAMqH,GAA0BC,EAAAA,EAAAA,IAAetN,GAC/C,OAAOqN,EAA0B,EAACnB,EAAAA,EAAAA,GAASmB,EAAyBF,SAAmBpC,EAGzF,OAAOwC,EAAAA,EAAAA,IACLrB,EAAAA,EAAAA,GAASlG,EAAMmH,GACfC,EACAJ,EACAC,OACAlC,EACA/K,EAAQkJ,GACRgE,GAIG,SAASjB,EACdpC,EACA7J,GAIY,IAHZwN,EAGY,wDAFZR,EAEY,uCADZG,EACY,uDADKM,EAAAA,IAEb,SAAEL,GAAapN,EAAQuG,QAAQP,MAAQ,GAE3C,MAAM0H,EAAcN,MAAAA,OAAH,EAAGA,EAAUO,MAAMhH,GAAMA,EAAEvH,OAASkD,EAAAA,GAAAA,UACrD,IAAKoL,EAAa,CAChB,MAAM1H,GAAOkG,EAAAA,EAAAA,IAASH,EAAAA,EAAAA,IAAsBlC,EAAM7J,EAASwN,GAAUL,GAErE,OAAIH,GACKZ,EAAAA,EAAAA,GAAWpG,EAAM,CAAC,QAAS,aAAc,CAAEgH,UAAAA,KAE3CZ,EAAAA,EAAAA,GAAWpG,GAItB,MAAM4H,GAASJ,IAAWK,EAAAA,EAAAA,IAAuB7N,GAC3C8N,EAAiBF,EAAS,GAAEA,KAAW,GAEvC5H,EAAO+G,EAAkB/M,EAASgN,OAAWjC,GAAW,EAAMoC,GAC9DY,GAAcC,EAAAA,EAAAA,IAA6BnE,EAAM7J,EAASgG,GAEhE,MAAO,CACL8H,KACInB,MAAMC,QAAQmB,GAAeA,EAAc,CAACA,IAChDvC,OAAiBhD,W,2HCnDrB,MAAMyF,EAAqB,gBACrBC,EAAwB,kBAEf,SAAS9B,EACtB+B,GAGY,IAFZC,EAEY,uDAFiB,CAAC,SAC9BC,EACY,uCACZ,MAAoB,iBAATF,EACF,CAACA,IAGHG,EAAAA,EAAAA,IAAQF,EAAQG,QAAO,CAACvI,EAAMwF,KACnC,OAAQA,GACN,IAAK,cACH,OAAOgD,EAAWxI,GAEpB,IAAK,WAEH,OADAyI,EAAAA,EAAAA,UAAwB,EACjBC,EAAc1I,EAAM,MAAO,OAEpC,IAAK,QAEH,OADAyI,EAAAA,EAAAA,UAAwB,EACjBC,EAAc1I,EAAM,QAAS,OAEtC,IAAK,aAEH,OADAyI,EAAAA,EAAAA,UAAwB,EACjBC,EAAc1I,EAAM,QAAS,QAEtC,IAAK,KACH,OAAO2I,EAAc3I,EAAM,OAE7B,IAAK,UACH,OAAO2I,EAAc3I,EAAM,QAE7B,IAAK,YACH,OAAO4I,EAAa5I,EAAMqI,EAAQrB,WAEpC,IAAK,QACH,OAAO6B,EAAS7I,GAElB,IAAK,kBACH,OAAO8I,EAAsB9I,EAAM,OAErC,IAAK,uBACH,OAAO8I,EAAsB9I,EAAM,QAGvC,OAAOA,IACN,CAACmI,KAGN,SAASK,EAAWO,GAClB,MAAMC,EAAQhH,SAASiH,cAAc,OACrC,OAAOF,EAAUR,QAAO,CAACW,EAAQf,IACX,iBAATA,GACTe,EAAO1K,KAAK2J,GACLe,IAGTF,EAAMG,UAAYhB,EAClBe,EAAO1K,KAAKwK,EAAMI,WAEXF,IACN,IAGL,SAASR,EAAcK,EAAuBM,EAAuBjQ,GACnE,OAAIkQ,EAAAA,GACKP,EAGFA,EAAUR,QAAO,CAACW,EAAQf,KAC/B,GAAoB,iBAATA,EAET,OADAe,EAAO1K,KAAK2J,GACLe,EAIT,MAAMK,GADNpB,GAAOqB,EAAAA,EAAAA,IAAoBrB,IACRxI,MAAM8I,EAAAA,GACnBgB,EAAStB,EAAK5I,MAAMkJ,EAAAA,IAAgB,GAG1C,OAFAS,EAAO1K,KAAK+K,EAAM,IAEXE,EAAOlB,QAAO,CAACmB,EAAyB9B,EAAOjK,KACpD,MAAMwH,GAAOwE,EAAAA,EAAAA,KAAgBC,EAAAA,EAAAA,GAAYhC,IACzC,IAAKzC,EAAM,OAAOuE,EAClB,MAAMzJ,GAAYmB,EAAAA,EAAAA,GAChB,QACS,UAATiI,GAAoB,eAET,QAATjQ,GACFsQ,EAAYlL,KACV,0BACEyB,UAAWA,EACX4J,IAAM,eAAuB,QAATR,EAAiB,MAAQ,QAAQlE,QACrD2E,IAAKlC,KAIE,SAATxO,GACFsQ,EAAYlL,KAGT,iCAAgCyB,uBAAwC,QAAToJ,EAAiB,MAAQ,QAAQlE,eAAkByC,SAIvH,MAAMd,EAAY,EAAJnJ,EAAQ,EAKtB,OAJI4L,EAAMzC,IACR4C,EAAYlL,KAAK+K,EAAMzC,IAGlB4C,IACNR,KACF,IAGL,SAASP,EAAcI,EAAuB3P,GAC5C,OAAO2P,EAAUR,QAAO,CAACW,EAAoBf,KAC3C,GAAoB,iBAATA,EAET,OADAe,EAAO1K,KAAK2J,GACLe,EAGT,MAAMa,EAAgB5B,EACnBxI,MAAM,eACN4I,QAAO,CAACgB,EAAmBS,EAAcrM,EAAGsM,KAE3C,MAAMC,EAAcF,EAAKG,WACnBC,EAAeJ,EAAKxM,OAAS0M,EAAY1M,OAS/C,OARA+L,EAAM/K,KAAKG,OAAOC,aAAa,KAAKyL,OAAOD,GAAgBF,GAEvDvM,IAAMsM,EAAOzM,OAAS,GACxB+L,EAAM/K,KACK,QAATpF,EAAiB,8BAAS,UAIvBmQ,IACN,IAEL,MAAO,IAAIL,KAAWa,KACrB,IAGL,SAASnB,EAAaG,EAAuB/B,GAC3C,OAAO+B,EAAUR,QAAO,CAACW,EAAQf,KAC/B,GAAoB,iBAATA,IAAsBnB,EAE/B,OADAkC,EAAO1K,KAAK2J,GACLe,EAGT,MAAMoB,EAAgBnC,EAAKoC,cACrBC,EAAgBF,EAAclI,QAAQ4E,EAAUuD,eAChDE,EAAaH,EAAcE,EAAgBxD,EAAUxJ,QAC3D,GAAIgN,EAAgB,GAAMC,GAAcA,EAAWlL,MAAM0I,GAEvD,OADAiB,EAAO1K,KAAK2J,GACLe,EAGT,MAAMwB,EAAuB,GAS7B,OARAA,EAASlM,KAAK2J,EAAKzB,UAAU,EAAG8D,IAChCE,EAASlM,KACP,2BAAMyB,UAAU,2BACbkI,EAAKzB,UAAU8D,EAAeA,EAAgBxD,EAAUxJ,UAG7DkN,EAASlM,KAAK2J,EAAKzB,UAAU8D,EAAgBxD,EAAUxJ,SAEhD,IAAI0L,KAAWwB,KACrB,IAGL,MAAMC,EAAU,IAAI/H,OAAQ,GAAEgI,EAAAA,MAAoBC,EAAAA,KAAuB,MAEzE,SAAShC,EAASE,GAChB,OAAOA,EAAUR,QAAO,CAACW,EAAQf,KAC/B,GAAoB,iBAATA,EAET,OADAe,EAAO1K,KAAK2J,GACLe,EAGT,MAAM4B,EAAQ3C,EAAK5I,MAAMoL,GACzB,IAAKG,IAAUA,EAAMtN,OAEnB,OADA0L,EAAO1K,KAAK2J,GACLe,EAGT,MAAM3I,EAAsB,GAE5B,IAAIwK,EAAWD,EAAME,QACjBC,EAAY,EAChB,KAAOF,GAAU,CACf,MAAMjE,EAAQqB,EAAK/F,QAAQ2I,EAAUE,GACrC1K,EAAQ/B,KAAK2J,EAAKzB,UAAUuE,EAAWnE,IACnCiE,EAASG,WAAW,KACtB3K,EAAQ/B,KACN,mBAAC,IAAD,CAAa2M,SAAUJ,GACpBA,KAIDA,EAASK,SAAS,OACpBL,EAAWA,EAASlL,MAAM,EAAGkL,EAASvN,OAAS,IAGjD+C,EAAQ/B,KACN,mBAAC,IAAD,CAAUwB,KAAM+K,EAAU7L,IAAK6L,MAGnCE,EAAYnE,EAAQiE,EAASvN,OAC7BuN,EAAWD,EAAME,QAInB,OAFAzK,EAAQ/B,KAAK2J,EAAKzB,UAAUuE,IAErB,IAAI/B,KAAW3I,KACrB,IAGL,SAASuI,EAAsBC,EAAuB3P,GACpD,OAAO2P,EAAUR,QAAO,CAACW,EAAQf,KAC/B,GAAoB,iBAATA,EAET,OADAe,EAAO1K,KAAK2J,GACLe,EAGT,MAAMK,EAAQpB,EAAKxI,MAAMuI,GACnBd,EAAWe,EAAK5I,MAAM2I,IAA0B,GAGtD,OAFAgB,EAAO1K,KAAK+K,EAAM,IAEXnC,EAASmB,QAAO,CAAC8C,EAA0BC,EAAQ3N,KAC3C,QAATvE,EACFiS,EAAa7M,KACX8M,EAAOJ,WAAW,MACd,4BAAII,EAAO7L,QAAQ,QAAS,KAC5B,4BAAI6L,EAAO7L,QAAQ,MAAO,MAGhC4L,EAAa7M,KACX8M,EAAOJ,WAAW,MACb,MAAKI,EAAO7L,QAAQ,QAAS,UAC7B,MAAK6L,EAAO7L,QAAQ,MAAO,WAIpC,MAAMqH,EAAY,EAAJnJ,EAAQ,EAKtB,OAJI4L,EAAMzC,IACRuE,EAAa7M,KAAK+K,EAAMzC,IAGnBuE,IACNnC,KACF,M,yHC/PL,MAIMqC,EAGC,IAAI/S,IAEL4I,GAAiBoK,EAAAA,EAAAA,GAAuB,WA2D9C,GAAezL,EAAAA,EAAAA,KAzDe,IAGxB,IAHyB,SAC7BG,EAD6B,UAE7B1G,GACI,EAEJ,MAAMiS,GAAaC,EAAAA,EAAAA,IAAuB,OAEnCC,EAAYC,EAAQC,IAAWC,EAAAA,EAAAA,KAEhCrL,GAAcC,EAAAA,EAAAA,KAAaC,IAAmD,MAClFA,EAAEO,iBACFP,EAAEoL,kBAEF,UAAAR,EAAmBhS,IAAIC,UAAvB,SAAoCqN,SAASmF,GAAYA,EAAQJ,WAEjE,MAAMK,EAAgBR,EAAWS,QAAS/C,UAAU3L,OAC9C2O,EAAqE,IAAzDnP,KAAKoP,MAAMH,EA3BE,IA4BzBI,EAAYrP,KAAKsP,IA3BF,IA2BwBtP,KAAKuP,IAAIJ,EA1BjC,MA4BrB9R,YAAW,KAAM,MACf,UAAAkR,EAAmBhS,IAAIC,UAAvB,SAAoCqN,SAASmF,GAAYA,EAAQH,YACjEA,MACCQ,KACF,CAACR,EAASrS,IAkBb,OAhBAgT,EAAAA,EAAAA,KAAU,KACR,GAAKhT,EAUL,OANI+R,EAAmBkB,IAAIjT,GACzB+R,EAAmBhS,IAAIC,GAAYgF,KAAK,CAAEoN,OAAAA,EAAQC,QAAAA,IAElDN,EAAmB/P,IAAIhC,EAAW,CAAC,CAAEoS,OAAAA,EAAQC,QAAAA,KAGxC,KACLN,EAAmB5P,OAAOnC,MAE3B,CAACqS,EAASpL,EAAakL,EAAYnS,EAAWoS,IAG/C,2BACE3L,UAAWmB,EACT,KACCuK,GAAc,aACdA,GAAcnJ,QAAQhJ,IAAc,YAEvCgI,QAAShI,IAAcmS,EAAalL,OAAcsE,GAElD,2BAAM9E,UAAWmB,EAAe,WAAYsL,IAAKjB,GAC9CvL,OCxDF,SAASqH,EACdvH,EACAoH,EACAJ,EACAC,EACA0F,EACAnT,EACA0N,GAEA,IAAKE,IAAaA,EAAS5J,OACzB,OAAOoP,EAAkB5M,EAAMgH,EAAWC,EAAqB0F,EAAoBzF,GAGrF,MAAMgC,EAAqB,GAC3B,IAAI2D,GAA0B,EAE9B,MAAMC,EAyKR,SAA0B1F,GACxB,MAAM2F,EAAsC,IAAIC,IAC1CF,EAAwC,GAiB9C,OAfA1F,EAASP,SAAQ,CAACyE,EAAQxE,KACxB,GAAIiG,EAAuBN,IAAI3F,GAC7B,OAGF,MAAMmG,EAAkBC,EAAe5B,EAAQxE,EAAOM,EAAU2F,GAC5DE,IACFA,EAAgBE,iBAAiBtG,SAASuG,IACxCL,EAAuBM,IAAID,MAG7BN,EAAkBtO,KAAKyO,OAIpBH,EA5LmBQ,CAAiBlG,GAG3C,SAASmG,EACPC,EACAC,EACAR,EACAS,GAEA,MAAMC,EAA2B,IAC3B,OAAErC,EAAF,eAAUsC,GAAmBX,GAC7B,OAAEY,EAAF,OAAUrQ,EAAV,KAAkBpE,GAASkS,EAGjC,IAAIwC,EAAa9N,EAAK0G,UAAU8G,EAAeK,GAC/C,MAAME,EAAmBD,EAAWtQ,OAChCsQ,IACEjB,GAA2BiB,EAAWtQ,OAAS,GAAuB,OAAlBsQ,EAAW,KACjEA,EAAaA,EAAWE,OAAO,GAC/BnB,GAA0B,GAExBiB,GACFH,EAAanP,QAAQoO,EACnBkB,EAAY9G,EAAWC,EAAqB0F,EAAoBzF,KAKtE,MAAM+G,EAAmBT,EAAgBO,EACnCG,EAAiBD,EAAmBzQ,EAE1C,IAAI2Q,EAA0BnO,EAAK0G,UAAUmH,EAAQA,EAASrQ,GAC9D,MAAM4Q,EAAkC,GAYxC,GAVIvB,GAA2BsB,EAAc3Q,OAAS,GAA0B,OAArB2Q,EAAc,KACvEA,EAAgBA,EAAcH,OAAO,GACrCnB,GAA0B,GAGxBzT,IAASkD,EAAAA,GAAAA,MACXuQ,GAA0B,GAIxBe,EAAepQ,OAAQ,CACzB,IAAI6Q,EAAcJ,EAElBL,EAAe/G,SAAQ,CAACyH,EAAcC,KACpC,MACEZ,aAAca,EACdN,eAAgBO,GACdlB,EACFc,EACAH,EACAI,EACAC,IAAsBX,EAAepQ,OAAS,GAGhD4Q,EAAoB5P,QAAQgQ,GAC5BH,EAAcI,KAKlB,MAAMC,EAAY/B,EAuStB,SACErB,EACA6C,EACAC,GAEA,MAAMO,EAAyC,iBAAlBR,GAA8BA,EAErDS,EAAkBR,EAAoB5Q,OACxC4Q,EAAoBrP,KAAK,KACzBqH,EAAAA,EAAAA,GAAW+H,EAAe,CAAC,cAAe,aAAc,YAAYpP,KAAK,IAE7E,IAAK4P,EACH,OAAOC,EAGT,OAAQtD,EAAOlS,MACb,KAAKkD,EAAAA,GAAAA,KACH,MAAQ,MAAKsS,QACf,KAAKtS,EAAAA,GAAAA,OACH,MAAQ,MAAKsS,QACf,KAAKtS,EAAAA,GAAAA,UACH,MAAQ,MAAKsS,QACf,KAAKtS,EAAAA,GAAAA,KACH,MAAQ,kCAAiCsS,WAC3C,KAAKtS,EAAAA,GAAAA,IACH,MAAQ,cAAasS,eACvB,KAAKtS,EAAAA,GAAAA,OACH,MAAQ,QAAOsS,UACjB,KAAKtS,EAAAA,GAAAA,YACH,MAAQ,mEAEcA,EAAAA,GAAAA,uCACJgP,EAAOuD,wEAGtBD,QACL,KAAKtS,EAAAA,GAAAA,IACL,KAAKA,EAAAA,GAAAA,QACH,MAAQ,sDAECwS,EAAWH,EAAerD,iCACbA,EAAOlS,qCAE1BwV,QACL,KAAKtS,EAAAA,GAAAA,QACH,MAAQ,6DAEcA,EAAAA,GAAAA,sBACjBsS,WACP,QACE,OAAOA,GAxVLG,CAAoBzD,EAAQ6C,EAAeC,GAyKnD,SACE9C,EACA6C,EACAC,EACApH,EACAxN,EACA0N,GAEA,MAAM8H,EAAsC,iBAAlBb,GAA8BA,EAClDS,EAAkBR,EAAoB5Q,OAAS4Q,EAAsBD,EAE3E,SAASc,IACP,OAAOrC,EACLgC,EAAiB5H,OAAWjC,OAAWA,EAAWmC,GAItD,IAAK8H,EACH,OAAOC,IAGT,GAAI/H,EAAU,CACZ,MAAMlH,EAAOiP,IACb,OAAI3D,EAAOlS,OAASkD,EAAAA,GAAAA,QACX,mBAAC,EAAD,KAAU0D,GAEZA,EAGT,OAAQsL,EAAOlS,MACb,KAAKkD,EAAAA,GAAAA,KACH,OAAO,iCAAS2S,KAClB,KAAK3S,EAAAA,GAAAA,WACH,OAAO,qCAAa2S,KACtB,KAAK3S,EAAAA,GAAAA,WACH,OACE,wBACEkF,QAAS0N,EACTjP,UAAU,mBACVwB,IAAI,QAEHwN,KAGP,KAAK3S,EAAAA,GAAAA,QAUL,KAAKA,EAAAA,GAAAA,QACH,OACE,wBACEkF,QAAS2N,EACTlP,UAAU,mBACVwB,IAAI,QAEHwN,KAGP,KAAK3S,EAAAA,GAAAA,KACH,OAAO,2BAAM2D,UAAU,oBAAoBgP,KAC7C,KAAK3S,EAAAA,GAAAA,MACH,OACE,wBACE6C,KAAO,UAAS6P,IAChB1N,OAAO,SACPC,IAAI,sBACJtB,UAAU,mBACVwB,IAAI,QAEHwN,KAGP,KAAK3S,EAAAA,GAAAA,OACH,OAAO,6BAAK2S,KACd,KAAK3S,EAAAA,GAAAA,YACH,OACE,mBAAC8S,EAAA,EAAD,CAAaP,OAAQvD,EAAOuD,QACzBI,KAGP,KAAK3S,EAAAA,GAAAA,QACH,OACE,mBAAC8S,EAAA,EAAD,CAAajE,SAAU6D,GACpBC,KAGP,KAAK3S,EAAAA,GAAAA,MACH,OACE,wBACE6C,KAAO,OAAM6P,IACb/O,UAAU,mBACVwB,IAAI,QAEHwN,KAGP,KAAK3S,EAAAA,GAAAA,IACH,OAAO,0BAAK2D,UAAU,mBAAmBgP,KAC3C,KAAK3S,EAAAA,GAAAA,OACH,OAAO,8BAAM2S,KACf,KAAK3S,EAAAA,GAAAA,QACL,KAAKA,EAAAA,GAAAA,IACH,OACE,mBAAC+S,EAAA,EAAD,CACEnQ,IAAK4P,EAAWE,EAAY1D,GAC5BtL,KAAMgP,GAELC,KAGP,KAAK3S,EAAAA,GAAAA,UACH,OAAO,8BAAM2S,KACf,KAAK3S,EAAAA,GAAAA,QACH,OAAO,mBAAC,EAAD,CAAS9C,UAAWA,GAAYyV,KACzC,QACE,OAAOA,KAjSLK,CAAchE,EAAQ6C,EAAeC,EAAqBpH,EAAWxN,EAAW0N,GAUpF,GARIP,MAAMC,QAAQ8H,GAChBf,EAAanP,QAAQkQ,GAErBf,EAAanP,KAAKkQ,GAKhBhB,GAAgBQ,EAAiBT,EAAa,CAChD,IAAI8B,EAAYvP,EAAK0G,UAAUwH,EAAgBT,GAC3CZ,GAA2B0C,EAAU/R,OAAS,GAAsB,OAAjB+R,EAAU,KAC/DA,EAAYA,EAAU7I,UAAU,IAE9B6I,GACF5B,EAAanP,QAAQoO,EACnB2C,EAAWvI,EAAWC,EAAqB0F,EAAoBzF,IAKrE,MAAO,CACLyG,aAAAA,EACAO,eAAAA,GAKJ,IAAIpH,EAAQ,EAcZ,OAZAgG,EAAkBjG,SAAQ,CAACyE,EAAQkE,KACjC,MAAM,aAAE7B,EAAF,eAAgBO,GAAmBX,EACvCzG,EACA9G,EAAKxC,OACL8N,EACAkE,IAAe1C,EAAkBtP,OAAS,GAG5C0L,EAAO1K,QAAQmP,GACf7G,EAAQoH,KAGHhF,EAGF,SAASuG,EAA0BC,GACxC,MAAM,KAAE1P,EAAF,SAAQoH,GAAasI,GAAiB,GAC5C,IAAK1P,EACH,MAAO,GAGT,MAAMkJ,EAAS3B,EACbvH,EACAoH,OACArC,OACAA,GACA,GAGF,OAAI4B,MAAMC,QAAQsC,GACTA,EAAOnK,KAAK,IAGdmK,EAGT,SAAS0D,EACPrM,EACAyG,EACAC,EACA0F,EACAzF,GAEA,GAAIP,MAAMC,QAAQrG,GAAU,CAC1B,MAAM2I,EAAqB,GAM3B,OAJA3I,EAAQsG,SAAS8I,IACfzG,EAAO1K,QAAQoO,EAAkB+C,EAAG3I,EAAWC,EAAqB0F,EAAoBzF,OAGnFgC,EAGT,GAAIyD,EACF,OAAOvG,EAAAA,EAAAA,GAAW7F,EAAS,CAAC,cAAe,aAAc,YAG3D,MAEM6H,EAAwB,CAFVnB,EAAsB,WAAa,SAOvD,OAJKC,GACHkB,EAAQ5J,KAAK,MAGXwI,GACKZ,EAAAA,EAAAA,GAAW7F,EAAS6H,EAAQwH,OAAO,aAAc,CAAE5I,UAAAA,KAEnDZ,EAAAA,EAAAA,GAAW7F,EAAS6H,GA2B/B,SAAS8E,EACP5B,EACAxE,EACAM,EACA2F,GAEA,MAAM,OAAEc,EAAF,OAAUrQ,GAAW8N,EACrB6B,EAAmB,IAAIH,IAAI,CAAClG,IAElC,GAAIiG,EAAuBN,IAAI3F,GAC7B,OAIF,MAAM8G,EAAqC,GAsB3C,OArB6BxG,EAC1B5B,QAAO,CAAC7E,EAAGhD,IAAMA,EAAImJ,GAASnG,EAAEkN,QAAUA,GAAUlN,EAAEkN,OAASA,EAASrQ,IACxE8H,KAAK3E,GAAMuM,EAAevM,EAAGyG,EAAShF,QAAQzB,GAAIyG,EAAU2F,KAC5DvH,OAAyBhD,SAEPqE,SAASgJ,IAC5B,IAAIC,GAAY,EAEhBD,EAAa1C,iBAAiBtG,SAASuG,IAChC0C,GAAc3C,EAAiBV,IAAIW,KACtC0C,GAAY,GAGd3C,EAAiBE,IAAID,MAGnB0C,GACFlC,EAAepP,KAAKqR,MAIjB,CACLvE,OAAAA,EACA6B,iBAAAA,EACAS,eAAAA,GAuLJ,SAASkB,EAAWX,EAAuB7C,GACzC,MAAM,KAAElS,EAAF,IAAQ8F,GAAQoM,EACtB,OAAOlS,IAASkD,EAAAA,GAAAA,SAAiC4C,EAAMA,EAAMiP,EAG/D,SAASe,EAAsBvO,IAC7BL,EAAAA,EAAAA,MAAcyP,eAAe,CAAEC,QAASrP,EAAEsP,cAAc9G,YAG1D,SAASgG,EAAmBxO,IAC1BL,EAAAA,EAAAA,MAAc4P,wBAAwB,CAAEC,MAAOxP,EAAEsP,cAAc9G,aAC/D7I,EAAAA,EAAAA,MAAc8P,4B,+DCxcT,SAASC,EAAwB1P,GAAwD,IAAtB2P,EAAsB,wDAE5FC,EAAAA,KACIvO,SAASwO,eACVxO,SAASwO,cAActN,KAAOuN,EAAAA,KAC5BH,GAAgB3P,EAAEW,SAAWX,EAAEsP,eAKtCtP,EAAEO,iBAGG,SAASwP,EAAoC/P,GAClD0P,EAAwB1P,GAAG,K,kECF7B,MAyBA,GAAegQ,EAAAA,EAAAA,KACb,CAACC,EAAD,KAAoC,IAA3B,OAAE/B,GAAyB,EAClC,MAAO,CACLgC,WAAYhC,GAASiC,EAAAA,EAAAA,IAAWF,EAAQ/B,QAAU9J,KAHxD,EAzB+C,IAIzC,IAJ0C,SAC9CoG,EAD8C,WAE9C0F,EAF8C,SAG9C3Q,GACI,EACJ,MAAM,SACJ+C,EADI,mBAEJ8N,IACEzQ,EAAAA,EAAAA,MAUJ,OACE,wBAAGkB,QATe,KACdqP,EACF5N,EAAS,CAAEC,GAAI2N,EAAW3N,KACjBiI,GACT4F,EAAmB,CAAE5F,SAAUA,EAASzE,UAAU,MAK3BzG,UAAU,mBAAmBwB,IAAI,QACvDvB,O,2ECSP,MA4HA,EA1H6B,IA4BvB,IA5BwB,IAC5BwM,EAD4B,KAE5BtT,EAAO,SAFqB,QAG5BoI,EAH4B,cAI5BwP,EAJ4B,YAK5BC,EAL4B,aAM5BC,EAN4B,aAO5BC,EAP4B,QAQ5BC,EAR4B,SAS5BlR,EAT4B,KAU5BmJ,EAAO,UAVqB,MAW5BgI,EAAQ,UAXoB,gBAY5BC,EAZ4B,UAa5BrR,EAb4B,MAc5BmM,EAd4B,KAe5BmF,EAf4B,MAgB5BC,EAhB4B,OAiB5BC,EAjB4B,UAkB5BC,EAlB4B,UAmB5BC,EAnB4B,KAoB5BxS,EApB4B,SAqB5ByS,EArB4B,SAsB5BC,EAtB4B,OAuB5BC,EAvB4B,MAwB5BC,EAxB4B,SAyB5BC,EAzB4B,MA0B5B7R,EA1B4B,qBA2B5B8R,GACI,EAEAC,GAAaxG,EAAAA,EAAAA,IAA8C,MAC3DgB,IACFwF,EAAaxF,GAGf,MAAOyF,EAAWC,IAAgBC,EAAAA,EAAAA,KAAS,GAErCC,GAAgBlR,EAAAA,EAAAA,GACpB,SACAnB,EACAoJ,EACAgI,EACAjF,GAAS,QACTmF,GAAQ,OACRC,GAAS,QACTK,GAAY,WACZJ,GAAU,OACVC,GAAa,UACbI,GAAU,aACVC,GAAS,QACTI,GAAa,UACbb,GAAmB,cAGf7Q,GAAcC,EAAAA,EAAAA,KAAaC,KAC1BkR,GAAYrQ,GACfA,EAAQb,GAGVyR,GAAa,GACb/X,YAAW,KACT+X,GAAa,KA/DK,OAiEnB,CAACP,EAAUrQ,IAER+Q,GAAkB7R,EAAAA,EAAAA,KAAaC,IAC9BsR,GAAsBtR,EAAEO,kBACxB2Q,GAAYZ,GACfA,EAAYtQ,KAEb,CAACsQ,EAAaY,EAAUI,IAE3B,OAAI9S,EAEA,wBACEuN,IAAKwF,EACLjS,UAAWqS,EACXnT,KAAMA,EACNkC,MAAOsQ,EACPC,SAAUA,EACVI,SAAUA,EACVvQ,IAAKtB,EAAQ,WAAQ4E,GAEpB7E,GACC2R,GAAYC,GACZ,mBAAC,IAAD,OAQN,6BACEpF,IAAKwF,EACL9Y,KAAMA,EACN6G,UAAWqS,EACX9Q,QAASf,EACTuQ,cAAeA,EACfC,YAAasB,EACbrB,aAAcA,IAAiBW,EAAWX,OAAenM,EACzDoM,aAAcA,IAAiBU,EAAWV,OAAepM,EACzDqM,QAASA,IAAYS,EAAWT,OAAUrM,EAC1C,aAAY4M,EACZtQ,MAAOsQ,EACPK,SAAUA,EACVvQ,IAAKtB,EAAQ,WAAQ4E,EACrByN,MAAOlB,EAAmB,yBAAwBA,UAAqBvM,GAEtE2M,EACC,8BACE,2BAAMjQ,IAAKtB,EAAQ,YAAS4E,GAA5B,kBACA,mBAAC,IAAD,CAASsM,MAAOI,EAAS,OAAS,WAElCvR,GACF2R,GAAYC,GACZ,mBAAC,IAAD,S,sFCzIR,MAqDA,GAAe/R,EAAAA,EAAAA,KArDgB,IAazB,IAb0B,GAC9BmD,EAD8B,KAE9BtI,EAF8B,MAG9BkE,EAH8B,MAI9B2T,EAJ8B,SAK9BC,EAL8B,QAM9BC,EAN8B,SAO9Bd,EAP8B,MAQ9BzF,EAR8B,SAS9BwG,EAT8B,UAU9BlB,EAV8B,SAW9BmB,EAX8B,QAY9BC,GACI,EACJ,MAAMjP,GAAOkP,EAAAA,EAAAA,KACPC,GAAetS,EAAAA,EAAAA,KAAauS,IAC5BJ,GACFA,EAASI,GAGPH,GACFA,EAAQG,EAAMhD,cAAc0C,WAE7B,CAACE,EAAUC,IAER7S,GAAYmB,EAAAA,EAAAA,GAChB,WACAyQ,GAAY,WACZzF,GAAS,QACTsF,GAAa,UACbkB,GAAY,YAGd,OACE,4BAAO3S,UAAWA,EAAWwB,IAAKoC,EAAK1D,MAAQ,WAAQ4E,GACrD,4BACE3L,KAAK,WACL8J,GAAIA,EACJtI,KAAMA,EACNkE,MAAOA,EACP6T,QAASA,EACTd,SAAUA,EACVgB,SAAUG,IAEZ,0BAAK/S,UAAU,iBACb,2BAAMA,UAAU,QAAQwB,IAAI,SAAQ2E,EAAAA,EAAAA,GAAWqM,IAC9CC,GAAY,2BAAMzS,UAAU,WAAWwB,IAAI,SAAQ2E,EAAAA,EAAAA,GAAWsM,KAEhEhB,GAAa,mBAAC,IAAD,W,wDCzDpB,MAsEA,EAtEmC,IAU7B,IAV8B,QAClCwB,EADkC,UAElCjT,EAFkC,SAGlCC,EAHkC,UAIlCiT,EAAY,OAJsB,UAKlCC,EAAY,MALsB,OAMlCC,EANkC,UAOlCC,EAPkC,OAQlCC,EARkC,QASlCC,GACI,EAEJ,MAAMC,GAAU/H,EAAAA,EAAAA,IAAuB,MAEjCgI,GAAchI,EAAAA,EAAAA,IAAuB,OACpCiI,EAAQC,IAAavB,EAAAA,EAAAA,KAAS,GA6BrC,OACE,0BACE3F,IAAKgH,EACLzT,UAAY,gBAAeA,GAAa,KACxC4T,UAxBmBlT,IACrB,MAAMmT,EAAOL,EAAQvH,QAErB,IAAKyH,GAAwB,KAAdhT,EAAEoT,UAAmBD,EAClC,OAGF,MAAME,EAAiBhS,SAASwO,cAC1ByD,EAAkBtN,MAAMuN,KAAKJ,EAAK5T,UAEnC8T,IAA+D,IAA7CC,EAAgB7R,QAAQ4R,IAC5CC,EAAgB,GAAmBE,UAenCjB,EAAQ,CAAEkB,UAjCM,KACnBR,GAAWD,GACPA,EACEH,GAASA,IACJD,GAAQA,KA6BmBI,OAAAA,IAEpC,mBAAC,IAAD,CACEjH,IAAK+G,EACLY,aAAcX,EACdC,OAAQA,GAAUnR,QAAQ8Q,GAC1BrT,UAAWA,GAAa,GACxBkT,UAAWA,EACXC,UAAWA,EACXC,OAAQA,EACRiB,WAAS,EACTd,QAtBc,KAClBI,GAAU,GACNJ,GAASA,KAqBTe,qBAAsBjB,GAErBpT,M,kECpDT,MA8DA,GAAeH,EAAAA,EAAAA,KA9DiB,IAoB1B,IApB2B,IAC/B2M,EAD+B,GAE/BxJ,EAF+B,UAG/BjD,EAH+B,MAI/BnB,EAJ+B,MAK/B2T,EAL+B,MAM/BhZ,EAN+B,QAO/B+a,EAP+B,SAQ/B3C,EAR+B,SAS/B4C,EAT+B,YAU/BlO,EAV+B,aAW/BmO,EAX+B,UAY/BC,EAZ+B,UAa/BC,EAb+B,SAc/B/B,EAd+B,QAe/BgC,EAf+B,WAgB/BC,EAhB+B,UAiB/BjB,EAjB+B,OAkB/BkB,EAlB+B,QAmB/BC,GACI,EACJ,MAAMnR,GAAOkP,EAAAA,EAAAA,KACPkC,EAAYxb,GAAS+a,GAAW/B,EAChCH,GAAgBlR,EAAAA,EAAAA,GACpB,cACAtC,GAAS,UACTrF,EAAQ,QAAU+a,GAAW,UAC7B3C,GAAY,WACZ4C,GAAY,WACZQ,GAAa,aACbhV,GAGF,OACE,0BAAKA,UAAWqS,EAAe7Q,IAAKoC,EAAK1D,MAAQ,WAAQ4E,GACvD,4BACE2H,IAAKA,EACLzM,UAAU,eACV7G,KAAK,OACL8J,GAAIA,EACJzB,IAAI,OACJ3C,MAAOA,GAAS,GAChByH,YAAaA,EACbqO,UAAWA,EACXF,aAAcA,EACdC,UAAWA,EACX9C,SAAUA,EACV4C,SAAUA,EACV5B,SAAUA,EACVgC,QAASA,EACTC,WAAYA,EACZjB,UAAWA,EACXkB,OAAQA,EACRC,QAASA,IAEVC,GACC,4BAAOC,QAAShS,GAAK+R,Q,wDCzE7B,MAoBA,EApB2B,IAErB,IAFsB,SAC1B/U,EAD0B,UAChBD,EADgB,MACLE,EADK,QACEqB,GACxB,EACJ,MAAMf,GAAcC,EAAAA,EAAAA,KAAaC,IAC/BA,EAAEO,iBACFM,EAASb,KACR,CAACa,IAEJ,OACE,wBACErC,KAAK,IACLc,WAAWmB,EAAAA,EAAAA,GAAe,OAAQnB,GAClCwB,IAAKtB,EAAQ,MAAQ,OACrBqB,QAASA,EAAUf,OAAcsE,GAEhC7E,K,kECfP,MAQA,GAAeH,EAAAA,EAAAA,KARe,IAAkD,IAAjD,MAAEsR,EAAQ,OAAV,gBAAkB8D,EAAlB,QAAmC3T,GAAc,EAC9E,OACE,0BAAKvB,WAAWmB,EAAAA,EAAAA,GAAe,UAAWI,GAAW,eAAgBA,QAASA,GAC5E,mBAAC,IAAD,CAAS6P,MAAOA,EAAO8D,gBAAiBA,S,sICsB9C,MAkGA,EAhG2B,IAoBrB,IApBsB,IAC1BzI,EAD0B,aAE1B2H,EAF0B,OAG1BV,EAH0B,UAI1B1T,EAJ0B,MAK1BuS,EAL0B,YAM1B4C,EAN0B,SAO1BlV,EAP0B,iBAQ1BmV,EAR0B,iBAS1BC,EAT0B,UAU1BnC,EAAY,OAVc,UAW1BC,EAAY,MAXc,UAY1BkB,GAAY,EAZc,OAa1BjB,EAb0B,kBAc1BkC,GAAoB,EAdM,oBAe1BC,EAf0B,QAgB1BhC,EAhB0B,aAiB1BtC,EAjB0B,aAkB1BC,EAlB0B,qBAmB1BoD,GACI,EAEAd,GAAU/H,EAAAA,EAAAA,IAAuB,MACjCgB,IACF+G,EAAU/G,GAEZ,MAAM+I,EAAuBpB,GAAgBZ,GAEvC,qBACJiC,IACEC,EAAAA,EAAAA,GACFhC,EACA6B,EACAjB,OACAxP,EACAwP,IAGF/H,EAAAA,EAAAA,KACE,IAAOmH,GAAUH,GAAUoC,EAAAA,EAAAA,GAAsBpC,QAAWzO,GAC5D,CAAC4O,EAAQH,KAGXqC,EAAAA,EAAAA,IAAelC,EAAQH,OAASzO,OAAWA,EAAWuP,IAEtDwB,EAAAA,EAAAA,IAAsB,IAAkB,IAAhBC,GAAgB,GAClCpC,IAAYA,IAAyB,IAAfoC,KACxBC,EAAAA,EAAAA,IAjDqB,OAmDtB,CAACrC,IAEJ,MAAMsC,GAAgBC,EAAAA,EAAAA,GAA0BzC,EAASE,EAAQW,EAAYd,OAAUzO,OAAWA,GAAW,IAE7GoR,EAAAA,EAAAA,GACExC,EACA8B,EACAF,OAAoBxQ,EAAYyO,GAGlC,MAAM4C,GAAkBhV,EAAAA,EAAAA,GACtB,sCACAgS,EACAD,EACAE,GAAU,cACVqC,GAGIW,OAA6CtR,IAArBuQ,EAAkC,GAAEA,WAAuBvQ,EACnFuR,OAA6CvR,IAArBsQ,EAAkC,GAAEA,WAAuBtQ,EAEzF,OACE,0BACE9E,WAAWmB,EAAAA,EAAAA,GAAe,oBAAqBnB,GAC/C4T,UAAWF,EAASsC,OAAgBlR,EACpCmM,aAAcA,EACdC,aAAcwC,EAASxC,OAAepM,EACtCyN,MAAOA,GAENmB,GAEC,0BAAK1T,UAAU,WAAWgR,YAAaP,EAAAA,IAEzC,0BACEhE,IAAK+G,EACLxT,UAAWmW,EACX5D,MAAQ,qBAAoB8D,GAAyBnD,KAAakD,GAAyBjD,KACzFgC,GAAe,KACjB5T,QAAS8S,EAAYd,OAAUzO,GAE9B7E,EACAmT,GAAU,0BAAKpT,UAAU,UAAUoT,O,kEC7G5C,MA2FA,EA3FgCkD,IAC9B,MAAM,KACJC,EADI,UAEJvW,EAFI,SAGJC,EAHI,QAIJsB,EAJI,KAKJrC,EALI,SAMJyS,EANI,SAOJC,EAPI,YAQJ4E,EARI,UASJ9E,GACE4E,EAEE1S,GAAOkP,EAAAA,EAAAA,KACPtS,GAAcC,EAAAA,EAAAA,KAAaC,IAC/B,GAAIkR,IAAarQ,EAIf,OAHAb,EAAEoL,uBACFpL,EAAEO,iBAKJM,EAAQb,KACP,CAACkR,EAAUrQ,IAERyU,GAAgBvV,EAAAA,EAAAA,KAAaC,IACjC,GAAkB,KAAdA,EAAEoT,SAAgC,KAAdpT,EAAEoT,QAI1B,OAAIlC,IAAarQ,GACfb,EAAEoL,uBACFpL,EAAEO,uBAKJM,EAAQb,KACP,CAACkR,EAAUrQ,IAER8Q,GAAgBlR,EAAAA,EAAAA,GACpB,WACAnB,EACA4R,GAAY,WACZ4E,GAAe,eAGXlW,EACJ,sCACGiW,GACC,wBAAGvW,UAAY,QAAOuW,IAAQ,YAAWA,EAAKtL,WAAW,SAAWsL,EAAK/W,QAAQ,QAAS,SAAMsF,IAEjG7E,GAIL,OAAIf,EAEA,wBACE6S,SAAU,EACV/R,UAAWqS,EACXnT,KAAMA,EACNyS,SAAUA,EACV,aAAYD,EACZtQ,MAAOsQ,EACPrQ,OAAQnC,EAAK+L,WAAW/Q,OAAOgC,SAASua,QAAU,QAAU,SAC5DnV,IAAI,sBACJE,IAAKoC,EAAK1D,MAAQ,WAAQ4E,EAC1BvD,QAASA,GAERjB,GAML,0BACEoW,KAAK,SACL3E,SAAU,EACV/R,UAAWqS,EACX9Q,QAASf,EACToT,UAAWoC,EACX,aAAYtE,EACZtQ,MAAOsQ,EACPlQ,IAAKoC,EAAK1D,MAAQ,WAAQ4E,GAEzBxE,K,wDC9FP,MA8CA,GAAeR,EAAAA,EAAAA,KA5CU,KACvB,MAAO6W,EAASC,IAAcxE,EAAAA,EAAAA,IAAmB,IAE3CyE,GAAmBC,EAAAA,EAAAA,KAAQ,KACxBC,EAAAA,EAAAA,KAAS,KACdH,EAAW,MAPa,KAQA,IACzB,IAEGtE,GAAkB7R,EAAAA,EAAAA,KAAaC,IACnC,GAAiB,IAAbA,EAAEsW,OACJ,OAGF,MAAMC,EAAYvW,EAAEsP,cACdkH,EAAWD,EAAUE,wBAErBC,EAAaH,EAAUI,YAAc,EAE3CT,EAAW,IACND,EACH,CACEW,EAAG5W,EAAE6W,QAAUL,EAASI,EAAKF,EAAa,EAC1CI,EAAG9W,EAAE+W,QAAUP,EAASM,EAAKJ,EAAa,EAC1ChO,KAAMgO,KAIVM,uBAAsB,KACpBb,SAED,CAACF,EAASE,IAEb,OACE,0BAAK7W,UAAU,mBAAmBgR,YAAasB,GAC5CqE,EAAQtR,KAAI,QAAC,EAAEiS,EAAF,EAAKE,EAAL,KAAQpO,GAAT,SACX,2BACEmJ,MAAQ,SAAQ+E,aAAaE,eAAepO,gBAAmBA,iB,wDC9CzE,MAcA,EAXK,IAGC,IAHA,MACJgI,EAAQ,OADJ,gBAEJ8D,GACI,EACJ,OACE,0BAAKlV,WAAWmB,EAAAA,EAAAA,GAAe,UAAWiQ,EAAO8D,GAAmB,kBAAoB,MAAKA,MAC3F,kC,8iCCfC,MAAMyC,EAAa,WACbC,EAAkB,cAElBC,EAAWC,gBACXC,EAAcD,SAEdlf,GACXkf,EAEWE,GAAa,EAEbC,GAAUH,EAGVI,EAAkB,mFAGlBC,EAAmB,YACnBC,EAAqB,mBAErBC,GAA8B,EAC9BC,EAAyB,kBACzBC,EAAqC,IACrCC,EAAqC,IACrCC,EAA+C,GAE/CC,GAAuB,EACvBC,EAAmB,WACnBC,EAA2B,mBAE3BC,EAA+B,uBAE/BC,EAAuB,eACvBC,EAAkB,mBAElBC,EAAkC,CAAC,EAAG,EAAG,GAAI,GAAI,IAAK,KAK7DC,EAAgC,oBAAX/e,QAA0BA,OAAOgf,aAAe,IAE9DC,EAAsB,EAEtBC,EAAqBH,EAAc,GAAK,GACxCI,EAAmD,EAArBD,EAE9BE,EAAiB,GACjBC,EAAkBN,EAAc,GAAK,GACrCO,EAAuB,IACvBC,EAAqB,GACrBC,EAAuB,GACvBC,EAAsB,GACtBC,EAAgB,GAChBC,EAAqB,IAIrBC,EAAyB,IAKzBC,EAAkC,GAIlCC,EAAiB,EACjBC,EAAwB,EAExBC,EAAsB,EAEtBC,EAAsB,EACtBC,EAA0BD,EAE1BE,EAA+B,GAC/BC,EAAmC,GACnCC,EAAqC,GAErCC,EAAiB,IACjBC,EAA+B,IAE/BjK,EAAoB,wBACpBkK,EAA0B,8BAG1BC,EAA4C,KAE5CC,EAAkC,KAElCC,EAA2C,KAC3CC,GAA0C,IAC1CC,GAA0B,IAC1BC,GAAoC,IACpCC,GAAqC,IAErCC,GAAwB,IACxBC,GAAc,IAEdC,GAAsB,IAEtBC,GAA2B,KAC3BC,GAA2B,IAC3BC,GAA2B,IAC3BC,GAA4C,IAQ5CC,IALsB1e,KAAKoP,OAAOmP,GAA2BC,IAA4B,GAC5D,IAAIxO,IAAI,CAChD,aAAc,sBAAuB,iBAAkB,0BAA2B,kBAGlC,IACrC2O,GAAoC,GACpCC,GAAoB,IACpBC,GAA2B,IAC3BC,GAAsB,GACtBC,GAAgC,GAChCC,GAA6B,GAC7BC,GAAsB,GACtBC,GAAqB,GACrBC,GAAsB,IACtBC,GAAiC,IACjCC,GAA+B,IAC/BC,GAAiC,IACjCC,GAA6B,IAC7BC,GAAuB,IAEvBC,GAAoB,iBAEpBC,GAA0B,KAE1BC,GAA2B,IAC3BC,GAA4B,IAE5BC,GAAiB,kBAGjBC,GAAgC,IAAI9P,IAAI,CACnD,YAAa,YAAa,eAGf+P,GAAgC,IAAI/P,IAAI,CACnD,cAGWgQ,GAA6B,IAAIhQ,IAAI,IAC7C8P,MACAC,KAGQE,GAAwB,4DAGxBrS,GAAmB,sHACnBC,GAAsB,iBACtB5J,GAAa,+BACbD,GAAc,iCAGdkc,GAAiC,IAAIlQ,IAAI,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAGhJmQ,GAAgC,SAChCC,GAAkB,aAClBC,GAAgB,EAChBC,GAAqB,EAErBC,GAA4B,GAC5BC,GAA0B,EAC1BC,GAAwB,WACxBC,GAAoB,KACpBC,GAAoB,UACpBC,GAAa,CAAC,UAAW,MAAO,WAAY,SAC5CC,GAAgB,eAChBC,GAAiB,CAAC,KAAM,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACrEC,GAAe,kDACfC,GAAuB,UACvBC,GAAsB,UACtBC,GAA2B,YAC3BC,GAAwB,yBAGxBC,GAA+B,IAC/BC,GAA4B,IAAMD,GAClCE,IAAyB,G,uDCtLtC,MAQA,EAR8B,CAAkBC,EAA4BC,EAAiBC,KAC3F,MAAMC,GAAWC,EAAAA,EAAAA,GAAeH,GAChC,OAAOhS,EAAAA,EAAAA,KAAU,IACR+R,EAAGG,GAAY,KAErBF,EAAcC,K,6CCNnB,MAcA,EAdgB,WAAsE,IAArEG,EAAqE,wDACpF,MAAO9f,EAAO+f,IAAYxM,EAAAA,EAAAA,IAASuM,GAE7BE,GAAUpe,EAAAA,EAAAA,KAAY,KAC1Bme,GAAS,KACR,IAEGE,GAAWre,EAAAA,EAAAA,KAAY,KAC3Bme,GAAS,KACR,IAEH,MAAO,CAAC/f,EAAOggB,EAASC,K,8CCX1B,MAQA,EARuB,KACrB,MAAO,CAAEC,IAAc3M,EAAAA,EAAAA,KAAkB,GAEzC,OAAO3R,EAAAA,EAAAA,KAAY,KACjBse,GAAY9L,IAAaA,MACxB,M,iECLL,MAAM+L,EAAwB,iCACxBC,EAAsB,+BAE5B,IAAIC,EACAC,GAAc,EA6BX,SAASC,IACd,OAAOD,EAGF,SAASpJ,IAAyD,IAA7BsJ,EAA6B,uDA9BhD,IA0CvB,SAASC,IACHJ,IACFK,aAAaL,GACbA,OAAUpa,GAGZqa,GAAc,EACdpd,SAASyd,cAAc,IAAIC,MAAMR,IAKnC,OAvBKE,IACHA,GAAc,EACdpd,SAASyd,cAAc,IAAIC,MAAMT,KAG/BE,IACFK,aAAaL,GACbA,OAAUpa,GAcZoa,EAAUhlB,OAAOE,WAAWklB,EAAOD,GAE5BC,EAGT,QAvD+B,SAC7BI,EACAC,GAEG,IADHC,EACG,yDACHrT,EAAAA,EAAAA,KAAU,KACR,IAAIqT,EAWJ,OAPIT,GACFO,IAGF3d,SAAS9I,iBAAiB+lB,EAAuBU,GACjD3d,SAAS9I,iBAAiBgmB,EAAqBU,GAExC,KACL5d,SAAS8d,oBAAoBZ,EAAqBU,GAClD5d,SAAS8d,oBAAoBb,EAAuBU,MAErD,CAACE,EAAYD,EAAoBD,M,wGCdtC,MAEaI,EAAgB5lB,OAAOgC,SAAS6jB,KACvCC,EAAa,GAAE9lB,OAAOgC,SAAS+jB,WAAW/lB,OAAOgC,SAASgkB,SAE1DC,EAA6B,CACjCC,aAAc,EACdC,yBAA0B,EAC1BC,kBAAkB,EAClBV,YAAY,EACZW,QAAQ,EACRC,eAAgB,IAGLC,EAAqB,KAChCN,EAAaP,YAAa,GAWtBc,EAAiB,KACjBP,EAAaI,QACfnmB,YAAW,KACT+lB,EAAaI,QAAS,IA5Bc,MAyC3B,SAAS3K,EACtB+K,EACAC,EACAC,EACAC,GAGA,IAFAC,EAEA,wDADAC,EACA,uCACA,MAAMC,GAAWxV,EAAAA,EAAAA,KAAQ,GACnByV,GAAYzV,EAAAA,EAAAA,KAAO,GACnB0V,GAAezC,EAAAA,EAAAA,GAAYiC,GAC3BS,GAAW3V,EAAAA,EAAAA,KAAO,GAClB4V,GAAe5V,EAAAA,EAAAA,IAA0C,IACzD6V,GAAa5C,EAAAA,EAAAA,GAAYsC,GACzBO,GAAyB9V,EAAAA,EAAAA,KAAgB,GAEzCsH,GAAetS,EAAAA,EAAAA,KAAY,WAA0B,IAAzB+gB,EAAyB,wDACzD,GAAKR,EAiDE,CACL,MAAMS,EAAOH,GAAc,GAC3B,GAAIG,EAAKlkB,OAASyjB,EAAOzjB,OACvBnD,YAAW,KACT,MAAMyM,IAAUsZ,EAAaC,aAC7BD,EAAaK,eAAejiB,KAAKsI,GAEjC3M,OAAOwnB,QAAQC,UAAU,CACvB9a,MAAAA,EACA+a,MAAOd,GACN,GAAK,IAAGE,EAAOA,EAAOzjB,OAAS,MAElC8jB,EAAapV,QAAQ1N,KAAK,CACxBsI,MAAAA,EACAkZ,KAAMiB,EAAOA,EAAOzjB,OAAS,OAE9B,OACE,CACL,MAAMZ,EAAQ8kB,EAAKlkB,OAASyjB,EAAOzjB,OACnC,GAAIgkB,EAAuBtV,QACzBsV,EAAuBtV,SAAU,MAC5B,CACL,GAAI+U,EAAOzjB,SAAW8jB,EAAapV,QAAQ1O,QACrCZ,EAAQ,EAAG,CACb,MAAMklB,EAAOR,EAAapV,QAAQoV,EAAapV,QAAQ1O,OAASZ,EAAQ,GACxE,IAAImlB,EAAYnlB,EAChB,GAAIklB,EAAM,CACR,MAAME,EAAY5B,EAAaK,eAAewB,WAC3CC,GAAMA,IAAMJ,EAAKhb,QAEpBib,EAAY3B,EAAaK,eAAejjB,OAASwkB,EAAY,EAE/D5B,EAAaG,kBAAmB,EAChCpmB,OAAOwnB,QAAQQ,IAAIJ,GACHT,EAAapV,QAAQxN,OAAO4iB,EAAapV,QAAQ1O,OAASZ,EAAQ,EAAGA,GAC7EiK,SAAQ,IAAe,IAAd,MAAEC,GAAY,EAC7BsZ,EAAaK,eAAe/hB,OAAO0hB,EAAaK,eAAere,QAAQ0E,GAAQ,MAKjFma,EAAOzjB,OAAS,GAClBnD,YAAW,KACT,MAAMyM,IAAUsZ,EAAaC,aAC7BD,EAAaK,eAAeL,EAAaK,eAAejjB,OAAS,GAAKsJ,EAEtE3M,OAAOwnB,QAAQS,aAAa,CAC1Btb,MAAAA,EACA+a,MAAOd,GACN,GAAK,GAAEd,KAAagB,EAAOA,EAAOzjB,OAAS,MAE9C8jB,EAAapV,QAAQoV,EAAapV,QAAQ1O,OAAS,GAAK,CACtDsJ,MAAAA,EACAkZ,KAAMiB,EAAOA,EAAOzjB,OAAS,MAE9B,UAvGLojB,IAAaa,IACfJ,EAASnV,SAAU,EAEfiV,EAAUjV,SACZiV,EAAUjV,SAAU,EACpBkU,EAAaK,eAAejiB,KAAK0iB,EAAShV,UAE1C7R,YAAW,KACT,MAAMyM,IAAUsZ,EAAaC,aAE7BD,EAAaK,eAAejiB,KAAKsI,GAEjC3M,OAAOwnB,QAEHvB,EAAaK,eAAezb,SAASob,EAAaE,wBAA0B,IAC1C,IAA/BnmB,OAAOwnB,QAAQE,MAAM/a,OACrBsZ,EAAaE,0BAA4BxZ,IACxCka,EAEF,eACA,aACH,CACDla,MAAAA,EACA+a,MAAOd,GACN,IAEHG,EAAShV,QAAUpF,EAEfka,IACFZ,EAAaE,wBAA0BF,EAAaC,aAAe,KAEpE,KAIFoB,GAAiBb,GAAcS,EAASnV,UACtCgV,EAAShV,UAAYkU,EAAaC,cAAiBW,IACtDZ,EAAaG,kBAAmB,EAChCpmB,OAAOwnB,QAAQU,OAEfhoB,YAAW,KACT+lB,EAAaE,yBAA2B,IACvC,MAELF,EAAaK,eAAe/hB,OAAO0hB,EAAaK,eAAere,QAAQ8e,EAAShV,SAAU,GAE1FmV,EAASnV,SAAU,KA8DtB,CAAC6U,EAAcE,EAAQL,EAAUW,EAAYP,IA8DhD,OA5DAxU,EAAAA,EAAAA,KAAU,KACR,MAAM8V,EAAkBrP,IACtB,GAAImN,EAAaG,iBAIf,YAHAlmB,YAAW,KACT+lB,EAAaG,kBAAmB,IAC/B,GAGL,MAAQzZ,MAAOnJ,GAAMsV,EAAM4O,MACrB/a,EAAQnJ,GAAK,EACnB,IACE,MAAM4kB,EAAYtB,EAASK,EAAapV,QAAQoV,EAAapV,QAAQ1O,OAAS,GAAGsJ,MAAQoa,EAAShV,QAE5FwV,EAAOtB,EAAaK,eAAeL,EAAaK,eAAere,QAAQmgB,GAAa,GAE1F,GAAInC,EAAaP,WAAY,QAEvBwB,EAASnV,UAAsB,IAAVpF,GAAeA,IAAU4a,IAAWT,IAAqB,IAAVna,GAAeA,IAAU4a,IAC7FT,IACFO,EAAuBtV,SAAU,EACjCoV,EAAapV,QAAQ3Q,OAGvB6kB,EAAaK,eAAe/hB,OAAO0hB,EAAaK,eAAere,QAAQmgB,GAAY,GAE/E1B,IACET,EAAaI,SACflgB,EAAAA,EAAAA,MACGkiB,2BAEL3B,GAAQT,EAAaI,QACrBa,EAASnV,SAAU,IAEZpF,IAAUyb,GAAalB,EAASnV,SAAW4U,IAAcG,IAClEE,EAAUjV,SAAU,EAChBkU,EAAaI,SACflgB,EAAAA,EAAAA,MACGkiB,2BAEL1B,EAAU7N,EAAM4O,MAAMA,QAExB,MAAOlhB,MAKL8hB,EAAaxB,GACbM,KAAemB,EAAAA,EAAAA,IAAqBnB,EAAYN,GAClDG,IAAiBR,EAOrB,OALKR,EAAaP,YAAc4C,GAC9BzP,IAGF7Y,OAAOjB,iBAAiB,WAAYopB,GAC7B,IAAMnoB,OAAO2lB,oBAAoB,WAAYwC,KACnD,CACDvB,EAAc/N,EAAciO,EAAQL,EAAUC,EAAQC,EAAWS,EAAYH,EAAcJ,IAGtF,CACL2B,WAAY,IAAM3P,GAAa,IArM/BzC,EAAAA,KACFpW,OAAOjB,iBAAiB,cAjBA+Z,IACxB,MAAMsE,EAAItE,EAAM2P,QAAQ,GAAGC,OAEvBtL,GArBiC,KAqBMA,GAAKpd,OAAO2oB,WArBlB,OAsBnC1C,EAAaI,QAAS,MAcxBrmB,OAAOjB,iBAAiB,WAAYynB,GACpCxmB,OAAOjB,iBAAiB,WAAYynB,IAGtCxmB,OAAOwnB,QAAQS,aAAa,CAAEtb,MAAOsZ,EAAaC,cAAgB,GAAIJ,I,8CCvDtE,MA4DA,EA5DkC,CAChC/N,EACAyB,EACAoP,EACAC,EACAC,KAEA,MAAOC,EAAcC,IAAmB9Q,EAAAA,EAAAA,KAAU,GAkDlD,OAhDA7F,EAAAA,EAAAA,KAAU,KACR2W,GAAiB,GAEjB,MAAMC,EAAUlR,EAAWhG,QACvByH,GAAUyP,IAAYH,IACxBG,EAAQpR,UAAY,EACpBoR,EAAQjP,WAET,CAACjC,EAAYyB,EAAQsP,KAEFviB,EAAAA,EAAAA,KAAaC,IACjC,MAAMyiB,EAAUlR,EAAWhG,QAE3B,IAAKkX,EACH,OAGF,GAAkB,KAAdziB,EAAEoT,SAAkBgP,EAEtB,YADAA,EAAkBG,GAIpB,GAAkB,KAAdviB,EAAEoT,SAAgC,KAAdpT,EAAEoT,QACxB,OAGF,MAAMC,EAAiBhS,SAASwO,cAC1ByD,EAAkBtN,MAAMuN,KAAK8O,EAAeI,EAAQC,iBAAiBL,GAAgBI,EAAQljB,UAEnG,IAAIojB,EAAYtP,GAAkBC,EAAgB7R,QAAQ4R,IAAoBkP,EAE9E,GAAkB,KAAdviB,EAAEoT,SAAkBuP,EAAW,EACjCA,SACK,GAAkB,KAAd3iB,EAAEoT,SAAkBuP,EAAWrP,EAAgBzW,OAAS,EACjE8lB,QACK,IAA+B,IAA3BrP,EAAgBzW,OAGzB,OAFA8lB,EAAW,EAKb,MAAMC,EAAOtP,EAAgBqP,GACzBC,IACFJ,EAAgBG,GAChBC,EAAKpP,WAEN,CAACjC,EAAY6Q,EAAmBC,EAAcE,M,iECpDnD,MAUA,EAVgB,KACd,MAAMM,GAAcC,EAAAA,EAAAA,KAMpB,OAJAC,EAAAA,EAAAA,IAAY,IACHC,EAAAA,GAAyBH,IAC/B,CAACA,IAEGG,EAAAA,K,kECLT,MAuBA,EAvBwB,SACtBC,EAAeC,GACZ,IAD2BC,EAC3B,wDAD2CC,EAC3C,wDACH,MAAMC,GAASC,EAAAA,EAAAA,IAAoBL,EAAYC,GACzCL,GAAcC,EAAAA,EAAAA,KAgBpB,OAdAjX,EAAAA,EAAAA,KAAU,KACR,GAAKuX,EAIL,OAAOG,EAAAA,EAAAA,IAAgBV,KACtB,CAACO,EAAYP,KAEhBhX,EAAAA,EAAAA,KAAU,KACHsX,GAAWE,IACdG,EAAAA,EAAAA,IAAWP,EAAYC,GAAY3nB,KAAKsnB,KAEzC,CAACI,EAAYJ,EAAaQ,EAAQH,EAAYC,IAE1CE,I,8CC1BT,MAOA,EAPoB,CAAkBzF,EAA4BC,KAChE,MAAME,GAAWC,EAAAA,EAAAA,GAAeH,GAC3BE,IAAYF,EAAa7W,MAAK,CAACyc,EAAGzmB,IAAMymB,IAAM1F,EAAS/gB,MAC1D4gB,EAAGG,GAAY,M,8CCUnB,QAVA,SAAoC2F,EAASC,GAC3C,MAAM5X,GAAMhB,EAAAA,EAAAA,OACN,QAAEQ,GAAYQ,EAKpB,OAJK4X,QAAgCvf,IAATsf,IAC1B3X,EAAIR,QAAUmY,GAGTnY,I,wDCTT,MA8DA,EA5D0B,WAMrB,IALHyH,EAKG,wDAJH4Q,EAIG,uCAHHC,EAGG,wDAFHvkB,EAEG,uDAFyB,OAC5BwkB,EACG,wDACH,MAAOpD,EAAUqD,IAAerS,EAAAA,EAAAA,KAAUsB,GACpCgR,GAAkBjZ,EAAAA,EAAAA,OAEjBkZ,EAAkBC,IAAuBxS,EAAAA,EAAAA,IAASsB,GAAU6Q,GAEnE,GAAI7Q,EACF+Q,GAAY,GACZG,GAAoB,GAEhBF,EAAgBzY,UAClB/R,OAAOqlB,aAAamF,EAAgBzY,SACpCyY,EAAgBzY,aAAUnH,QAK5B,GAFA8f,GAAoB,IAEfxD,IAAasD,EAAgBzY,QAAS,CACzC,MAAM4Y,EAAO,KACXJ,GAAY,GAERH,GACFA,IAGFI,EAAgBzY,aAAUnH,GAGxB0f,EACFK,IAEAH,EAAgBzY,QAAU/R,OAAOE,WAAWyqB,EAvC7B,KA6CrB,MAAMC,EAA0BH,KAAsBH,IAAsB9Q,GACtEqR,EAAYxiB,QAAQmiB,EAAgBzY,SACpC+Y,EAAetR,GAAUqR,EACzBtP,GAAuBtU,EAAAA,EAAAA,GAC3BnB,GAAa,qBACbA,EACA8kB,GAA2B,OAC3BE,GAAgB,QAChBD,GAAa,WAGf,MAAO,CACLC,aAAAA,EACAvP,qBAAAA,K,8CCtDW,SAASS,EACtBxC,EACAF,EACAD,IAEAhH,EAAAA,EAAAA,KAAU,KACR,MAAM0Y,EAAevkB,IACnB,MAAMmT,EAAOL,EAAQvH,QACf5K,EAASX,EAAEW,OACZwS,GAASxS,IAKXwS,EAAKqR,SAASxkB,EAAEW,UACdA,EAAO8jB,UAAUD,SAnBD,cAqBnBxkB,EAAEO,iBACFP,EAAEoL,kBACEyH,GACFA,OASN,OAJIG,GAAUH,GACZxR,SAAS9I,iBAAiB,YAAagsB,GAGlC,KACLljB,SAAS8d,oBAAoB,YAAaoF,MAE3C,CAACvR,EAAQF,EAASD,M,iEClCvB,MAAM6R,EAAwB,IAAIrY,IAAI,CAAC,SAAU,aAAc,eAEzDsY,EAAgD,GAChDC,EAAoE,GACpEC,EAA+B,IAAIhtB,IAElC,SAASU,EAAiBkqB,EAAsBqC,EAAkBC,GAAqC,IAAnBC,EAAmB,wDAC5G,MAAMC,EAAYC,EAAiBJ,EAAUrC,GACzC0C,EAAsBF,EAAWxC,EAASuC,GAC5CI,EAAqBH,EAAWxC,EAASsC,GAEzCtC,EAAQlqB,iBAAiB0sB,EAAWF,EAASC,GAI1C,SAAS7F,EAAoBsD,EAAsBqC,EAAkBC,GAAqC,IAAnBC,EAAmB,wDAC/G,MAAMC,EAAYC,EAAiBJ,EAAUrC,GACzC0C,EAAsBF,EAAWxC,EAASuC,GAC5CK,EAAwBJ,EAAWxC,GAEnCA,EAAQtD,oBAAoB8F,EAAWF,EAASC,GAIpD,SAASE,EAAiBJ,EAAkBrC,GAC1C,MAAMwC,EAAYH,EACfhmB,QAAQ,MAAO,IACfA,QAAQ,WAAY,IAAI8K,cAE3B,MAAkB,WAAdqb,GAA8C,WAApBxC,EAAQ6C,QAG7B,QAGS,gBAAdL,EACK,WAIS,UAAdA,EACK,UAGS,SAAdA,EACK,WAGFA,EAGT,SAASE,EAAsBI,EAAuB9C,EAAsBuC,GAC1E,OACGA,IACGN,EAAsB5Y,IAAIyZ,IACP,UAApB9C,EAAQ6C,SACY,WAApB7C,EAAQ6C,QAIf,SAASF,EAAqBH,EAAmBxC,EAAsBsC,GAChEJ,EAAsBM,KACzBN,EAAsBM,GAAa,EACnC5jB,SAAS9I,iBAAiB0sB,EAAWV,IA6EzC,SAAmCU,GAKjC,OAJKL,EAA8BK,KACjCL,EAA8BK,GAAa,IAAIptB,KAG1C+sB,EAA8BK,GA/ErCO,CAA0BP,GAAWpqB,IAAI4nB,EAASsC,GAkFpD,SAAoCtC,GAClC,MAAMgD,EAAWZ,EAA6BjsB,IAAI6pB,GAClD,GAAIgD,EACF,OAAOA,EAGT,MAAMC,EAAS,IAAIrZ,IAGnB,OAFAwY,EAA6BhqB,IAAI4nB,EAASiD,GAEnCA,EA1FPC,CAA2BlD,GAAS/V,IAAIuY,GACxCN,EAAsBM,KAGxB,SAASI,EAAwBJ,EAAmBxC,GAClDkC,EAAsBM,KACjBN,EAAsBM,IAGzB5jB,SAAS8d,oBAAoB8F,EAAWV,GAG1CK,EAA8BK,GAAWjqB,OAAOynB,GAChDoC,EAA6BjsB,IAAI6pB,GAAUznB,OAAOiqB,GAG7C,SAASW,EAA4BnD,GAC1C,MAAMoD,EAAahB,EAA6BjsB,IAAI6pB,GAC/CoD,IAILA,EAAW3f,SAAS+e,GAAcI,EAAwBJ,EAAWxC,KACrEoC,EAA6B7pB,OAAOynB,IAGtC,SAAS8B,EAAYuB,GACnB,MAAMC,EAASnB,EAA8BkB,EAAUrtB,MAEvD,GAAIstB,EAAQ,CACV,IAAIC,GAAwB,EACxBza,EAAuBua,EAAUnlB,OAErC,MAAMyK,EAAkB,KACtB4a,GAAwB,GAGpBzlB,EAAiB,KACrBulB,EAAUvlB,kBAIN+R,EAAQ,IAAI2T,MAAMH,EAAW,CACjCltB,IAAG,CAAC+H,EAAQulB,IACA,kBAANA,EACK3a,EAEC,oBAAN2a,GAAiC,6BAANA,EACtB9a,EAEC,mBAAN8a,EAEK3lB,EAEF4lB,QAAQvtB,IAAI+H,EAAQulB,KAK/B,KAAO3a,GAAWA,IAAYlK,SAAS+kB,MAAM,CAC3C,MAAMrB,EAAUgB,EAAOntB,IAAI2S,GAC3B,GAAIwZ,IACFA,EAAQzS,GACJ0T,GACF,OAIJza,EAAUA,EAAQ8a,aAyBpBnuB,EAAAA,IACFmJ,SAAS9I,iBAAiB,YAAY,KACpC,MAAM+tB,EAAyB5rB,OAAO6rB,KAAK5B,GAAuB9nB,OAC5D2pB,EAA0B9rB,OAAO+rB,OAAO9B,GAC3C/c,QAAO,CAAC8e,EAAKC,IAAYD,EAAMC,GAAS,GACrCC,EAA4BlsB,OAAO6rB,KAAK3B,GAA+B/nB,OACvEgqB,EAA0BnsB,OAAO+rB,OAAO7B,GAC3Chd,QAAO,CAAC8e,EAAKI,IAAuBJ,EAAMI,EAAmBpe,MAAM,GAChEqe,EAA0BlC,EAA6Bnc,KACvDse,EAA2BhhB,MAAMuN,KAAKsR,EAA6B4B,UACtE7e,QAAO,CAAC8e,EAAKb,IAAea,EAAMb,EAAWnd,MAAM,GAGtDvQ,QAAQ4B,KAAK,yBAA0B,CACrCysB,wBAAAA,EACAK,wBAAAA,EACAG,yBAAAA,EACAJ,0BAAAA,EACAG,wBAAAA,EACAT,uBAAAA,Q,4ECjKN,MAAMW,EAAsB,IAAI5a,IAAI,CAAC,MAAO,MAAO,gBAAiB,kBAC9D6a,EAAkB,IAAI7a,IAAI,CAAC,MAAO,SAClC8a,EAA6C,CACjDC,SAAU,WACVrT,aAAc,gBAIVsT,EAAiD,GA6BvD,SAASC,EACPC,EACAC,EACAC,EACAC,EACAvhB,GAYA,IAXA,oBACEwhB,GAAsB,EADxB,WAEEC,GAAa,EAFf,SAGEC,EAHF,cAIEC,GAOF,uDADI,GAEJ,MAAMC,EAAqBP,IAAYQ,EAAAA,EAAAA,IAAmBR,GACpDS,EAAiBR,IAAQO,EAAAA,EAAAA,IAAmBP,GAelD,IAZGE,GACEI,GAAsBE,KACrBC,EAAAA,EAAAA,GAAkBV,EAAWC,KAEjCA,EAAOU,EAAgBX,EAAqCC,KAIzDE,GAAuBM,GAAmBR,EAAiCW,kBAAkBC,WAChGC,EAA6Bb,EAAiCC,EAASvhB,EAAOohB,GAG5EC,IAAaC,EACf,OAAOA,EAGT,IAAKD,GAAYC,EAAM,CACjBQ,IACFR,EAAOc,EAAcd,EAAiCC,EAASvhB,EAAOohB,IAGxE,MAAMiB,EAAOC,EAAWhB,IACxBiB,EAAAA,EAAAA,IAAUjB,EAAMe,GAEZZ,GAAcL,EAASoB,WAAWxiB,GACpCohB,EAASqB,aAAaJ,EAAMjB,EAASoB,WAAWxiB,KAE/C0hB,GAAYN,GAAUsB,YAAYL,QAEhC,GAAIhB,IAAaC,EACtBF,EAASuB,aAAYC,EAAAA,EAAAA,IAAUvB,KAC/BwB,EAAAA,EAAAA,IAAYxB,QACP,GAAIA,GAAYC,EACrB,IAAIS,EAAAA,EAAAA,GAAkBV,EAAUC,GAAO,CACjCQ,IACFR,EAAOc,EAAcd,EAAiCC,EAASvhB,EAAOohB,IAGxE,MAAMiB,EAAOC,EAAWhB,IACxBiB,EAAAA,EAAAA,IAAUjB,EAAMe,GAChBjB,EAAS0B,aAAaT,GAAMO,EAAAA,EAAAA,IAAUvB,KACtCwB,EAAAA,EAAAA,IAAYxB,OACP,CACL,MAAM0B,EAAgBnB,GAAsBE,EACtC3Y,GAAgByZ,EAAAA,EAAAA,IAAUvB,GAWhC,GATK0B,KACHR,EAAAA,EAAAA,IAAUjB,EAAMnY,IAChBoZ,EAAAA,EAAAA,IAAUlB,OAAUpjB,GAEhB,UAAWojB,GAAY,UAAWC,IACpCA,EAAK7R,MAAM7J,IAAMyb,EAAS5R,MAAM7J,OAIhCod,EAAAA,EAAAA,IAAc1B,GAAO,CACvB,GAAIK,EAAe,CACjB,MAAMU,EAAOlZ,EACP8Z,EAAc7B,EAASoB,WAA6B,OAAlBb,EAAyB3hB,EAAQA,EAAQ,GAE7EijB,EACF7B,EAASqB,aAAaJ,EAAMY,IAE3BvB,GAAYN,GAAUsB,YAAYL,GAIlCU,GACHG,EAAkB7B,EAAiCC,EAAMnY,GAG3DmY,EAAKloB,SAAW+pB,EACb9B,EACDC,EACAyB,EAAgB3B,EAAWjY,IAMnC,OAAOmY,EAGT,SAASc,EACPgB,EAAmC7B,EAA8CvhB,EAAeohB,GAEhG,KAAKS,EAAAA,EAAAA,IAAmBuB,GACtB,OAAOA,EAGT,MAAM,kBAAEnB,GAAsBmB,EAE9B,IAAKnB,EAAkBC,UAAW,CAEhCC,EADAiB,GAAWC,EAAAA,EAAAA,IAAepB,GACaV,EAASvhB,EAAOohB,GAEvD,MAAMkC,EAAcF,EAAShqB,SAAS,IAClCyoB,EAAAA,EAAAA,IAAmByB,KACrBF,EAAShqB,SAAW,CAACgpB,EAAckB,EAAaF,EAAU,EAAGhC,KAG/Da,EAAkBC,WAAY,EAGhC,OAAOkB,EAGT,SAASpB,EAAgBX,EAAmCC,GAG1D,OAFAD,EAASY,kBAAkBxS,MAAQ6R,EAAKW,kBAAkBxS,OAEnD8T,EAAAA,EAAAA,IAAgBlC,EAASY,mBAGlC,SAASE,EACPiB,EAAmC7B,EAA8CvhB,EAAeohB,GAEhG,MAAM,kBAAEa,GAAsBmB,EAE9BnB,EAAkBpwB,SAAW,KAC3B0vB,EAAQnoB,SAAS4G,GAASmhB,EACxBC,EACAG,EAAQnoB,SAAS4G,GACjBiiB,EAAkBmB,SAClB7B,EACAvhB,EACA,CAAEwhB,qBAAqB,KAK7B,SAASc,EAAWc,GAClB,IAAII,EAAAA,EAAAA,IAAeJ,GACjB,OAAOloB,SAASuoB,eAAe,IAGjC,IAAIC,EAAAA,EAAAA,IAAcN,GAChB,OAAOloB,SAASuoB,eAAeL,EAASprB,OAG1C,IAAI6pB,EAAAA,EAAAA,IAAmBuB,GACrB,OAAOd,EAAWc,EAAShqB,SAAS,IAGtC,MAAM,IAAEuqB,EAAF,MAAOlU,EAAP,SAAcrW,EAAW,IAAOgqB,EAChC9G,EAAUphB,SAASiH,cAAcwhB,GAgBvC,MAdyB,iBAAdlU,EAAM7J,MACf6J,EAAM7J,IAAIR,QAAUkX,GAGtB/nB,OAAOqvB,QAAQnU,GAAO1P,SAAQ,IAAkB,IAAhB8jB,EAAK7rB,GAAW,OAC3BiG,IAAfwR,EAAMoU,IACRC,EAAaxH,EAASuH,EAAK7rB,MAI/BorB,EAAShqB,SAAWA,EAASoF,KAAI,CAACulB,EAAQltB,IACxCsqB,EAAkB7E,OAASre,EAAW8lB,EAAQX,EAAUvsB,KAGnDylB,EAGT,SAAS6G,EACP9B,EAA8BC,EAA0B0C,GAExD,GAAI1C,EAAK7R,MAAMwU,cACb,OA+BJ,SAAgC5C,EAA8BC,EAA0B0C,GACtF,MAAME,EAAU,IAAIhe,IAClBob,EAAKloB,SAASoF,KAAK2lB,IACjB,MAAMN,EAAM,UAAWM,GAAaA,EAAU1U,MAAMoU,IAQpD,OALI9xB,EAAAA,KAASixB,EAAAA,EAAAA,IAAcmB,IAAvB,MAAsCN,GAExC7xB,QAAQ4B,KAAK,oCAGRiwB,MAIX,IAAIO,EAAwB,EAC5B,MAAMC,EAAiBhD,EAASjoB,SAC7BqI,QAAO,CAAC8e,EAAK+D,EAAeztB,KAC3B,IAAIgtB,EAAM,UAAWS,EAAgBA,EAAc7U,MAAMoU,SAAM5lB,EAE/D,MAAMsmB,EAAeV,MAAAA,EAGrB,GAAIU,IAAiBL,EAAQve,IAAIke,GAG/B,OAFA1C,EAAkB6C,EAAWM,OAAermB,EAAWqjB,GAAO,GAEvDf,EACF,IAAKgE,EAAc,CACxB,MAAMJ,EAAY7C,EAAKloB,SAASvC,GAC1B2tB,EAAeL,GAAa,UAAWA,EAAaA,EAAU1U,MAAMoU,SAAM5lB,EAEhF,IAAIkmB,GAAcK,EAKhB,OAFArD,EAAkB6C,EAAWM,OAAermB,EAAWqjB,GAAO,GAEvDf,EAJPsD,EAAO,cAAqBhtB,IAchC,OALA0pB,EAAIsD,GAAO,CACTT,SAAUkB,EACVtkB,MAAOokB,IACPK,MAAO,UAAWH,EAAgBA,EAAc7U,MAAMiV,mBAAgBzmB,GAEjEsiB,IACN,IAEL,IAEIoE,EACAC,EAHAC,EAAgC,GAKhCC,EAAwB,EA6C5B,OA3CAxD,EAAKloB,SAAS2G,SAAQ,CAACokB,EAAWttB,KAChC,MAAMgtB,EAAM,UAAWM,EAAYA,EAAU1U,MAAMoU,IAAO,cAAqBhtB,IACzEkuB,EAAmBV,EAAeR,GAExC,IAAKkB,EAQH,OANKJ,IACHA,EAAgB,GAChBC,EAAgB/tB,QAGlB8tB,EAAcjtB,KAAKysB,GAIjBQ,IACFE,EAAcA,EAAY/b,OAAOkc,EAAmBL,EAAeC,EAAgBZ,EAAW1C,IAC9FsD,OAAgB3mB,EAChB0mB,OAAgB1mB,GAIlB,MAAMwmB,EAAQ,UAAWN,EAAYA,EAAU1U,MAAMiV,mBAAgBzmB,EAC/DgnB,EAAiBF,EAAiB/kB,QAAU8kB,GAAyBC,EAAiBN,QAAUA,EAChGS,EAAeD,GAAkBH,EAAwBC,EAAiB/kB,MAG3EilB,IAAkBC,GACrBJ,IAGFD,EAAYntB,KACVypB,EAAkB6C,EAAWe,EAAiB3B,SAAUe,EAAW7C,EAAMzqB,EAAG,CAC1E4qB,YAAY,EACZE,cAAesD,EAAkBC,EAAe,OAAS,UAAQjnB,QAKnE0mB,IACFE,EAAcA,EAAY/b,OAAOkc,EAAmBL,EAAeC,EAAgBZ,EAAW1C,KAGzFuD,EAlIEM,CAAuB9D,EAAUC,EAAM0C,GAGhD,MAAMoB,EAAwB/D,EAASjoB,SAAS1C,OAC1C2uB,EAAoB/D,EAAKloB,SAAS1C,OAClCoX,EAAY5X,KAAKsP,IAAI4f,EAAuBC,GAC5CR,EAAc,GACdnD,EAAW2D,EAAoBD,EAAwB,EAAIlqB,SAASoqB,8BAA2BrnB,EAErG,IAAK,IAAIpH,EAAI,EAAGA,EAAIiX,EAAWjX,IAAK,CAClC,MAAMstB,EAAYhD,EAChB6C,EACA3C,EAASjoB,SAASvC,GAClByqB,EAAKloB,SAASvC,GACdyqB,EACAzqB,EACAA,GAAKuuB,EAAwB,CAAE1D,SAAAA,QAAazjB,GAG1CkmB,GACFU,EAAYntB,KAAKysB,GAQrB,OAJIzC,GACFsC,EAAUtB,YAAYhB,GAGjBmD,EAyGT,SAASG,EACPL,EAAiCC,EAAuBxD,EAAuBG,GAE/E,GAA6B,IAAzBoD,EAAcjuB,OAChB,MAAO,CAACyqB,EAAkBC,OAAUnjB,EAAW0mB,EAAc,GAAIpD,EAASqD,EAAe,CAAEnD,YAAY,KAClG,GAAIkD,EAAcjuB,OAAS,EAAG,CACnC,MAAMgrB,EAAWxmB,SAASoqB,yBACpBT,EAAcF,EAAcnmB,KAAK+mB,GACrCpE,EAAkBC,OAAUnjB,EAAWsnB,EAAgBhE,EAASqD,EAAgB,CAAElD,SAAAA,MASpF,OANIN,EAASoB,WAAWoC,GACtBxD,EAASqB,aAAaf,EAAUN,EAASoB,WAAWoC,IAEpDxD,EAASsB,YAAYhB,GAGhBmD,EAGT,MAAM,IAAI5xB,MAAM,oBAGlB,SAASiwB,EAAiB7B,EAA8BC,EAA0BhF,GAChF,MAAMkJ,EAAiBjxB,OAAOqvB,QAAQvC,EAAS5R,OACzCgW,EAAalxB,OAAOqvB,QAAQtC,EAAK7R,OAEvC+V,EAAezlB,SAAQ,IAAyB,IAAvB8jB,EAAK6B,GAAkB,EAC9C,MAAMC,EAAWrE,EAAK7R,MAAMoU,QAGT5lB,IAAjBynB,SAEeznB,IAAb0nB,GACID,IAAiBC,GAAY9B,EAAIzf,WAAW,QAuCxD,SAAyBkY,EAAsBuH,EAAa7rB,GAC9C,cAAR6rB,EACFvH,EAAQnjB,UAAY,GACH,UAAR0qB,EACRvH,EAA6BtkB,MAAQ,GACrB,UAAR6rB,EACTvH,EAAQ5Q,MAAMka,QAAU,GACP,4BAAR/B,EACTvH,EAAQha,UAAY,GACXuhB,EAAIzf,WAAW,OACxB4U,EAAAA,EAAAA,IAAoBsD,EAASuH,EAAK7rB,EAAO6rB,EAAIvf,SAAS,YAC7Cuf,EAAIzf,WAAW,UAAYyf,EAAIzf,WAAW,UAAY2c,EAAgBpb,IAAIke,GACnFvH,EAAQuJ,gBAAgBhC,GACd/C,EAAoBnb,IAAIke,WAC1BvH,EAAgB0E,EAAkB6C,IAAQA,GAlDhDgC,CAAgBvJ,EAASuH,EAAK6B,MAIlCD,EAAW1lB,SAAQ,IAAqB,IAAnB8jB,EAAK8B,GAAc,EACtC,MAAMD,EAAerE,EAAS5R,MAAMoU,QAEnB5lB,IAAb0nB,GAA0BA,IAAaD,GACzC5B,EAAaxH,EAASuH,EAAK8B,MAKjC,SAAS7B,EAAaxH,EAAsBuH,EAAa7rB,GAE3C,cAAR6rB,EACFvH,EAAQnjB,UAAYnB,EAEH,UAAR6rB,EACJvH,EAA6BtkB,QAAUA,IACzCskB,EAA6BtkB,MAAQA,GAEvB,UAAR6rB,EACTvH,EAAQ5Q,MAAMka,QAAU5tB,EACP,4BAAR6rB,EAETvH,EAAQha,UAAYtK,EAAM8tB,OACjBjC,EAAIzf,WAAW,OACxBhS,EAAAA,EAAAA,IAAiBkqB,EAASuH,EAAK7rB,EAAO6rB,EAAIvf,SAAS,YAC1Cuf,EAAIzf,WAAW,UAAYyf,EAAIzf,WAAW,UAAY2c,EAAgBpb,IAAIke,GACnFvH,EAAQwH,aAAaD,EAAK7rB,GAChB8oB,EAAoBnb,IAAIke,KACjCvH,EAAgB0E,EAAkB6C,IAAQA,GAAO7rB,GAiCtD,MACA,EADiB,CAAE+tB,OAjcnB,SAAgB3C,EAA2BhC,GACzC,IAAKA,EACH,OAGF,IAAI4E,EAAS5E,EAAS6E,aAAa,sBAC9BD,IACHA,GAAS5xB,EAAAA,EAAAA,GAAc8sB,GACvBA,EAAe8E,GAAU,CAAE5sB,SAAU,IACrCgoB,EAAS0C,aAAa,qBAAsBkC,IAG9C,MAAME,EAAQhF,EAAe8E,GAC7BE,EAAM9sB,SAAW,CAAC+nB,EAAkBC,EAAU8E,EAAM9sB,SAAS,GAAIgqB,EAAU8C,EAAO,O,uPChC7E,IAAKC,G,SAAAA,GAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,IAAAA,GAAAA,MAAAA,EAAAA,EAAAA,UAAAA,GAAAA,Y,CAAAA,IAAAA,EAAAA,KAkFZ,MAAMC,EAAWC,OAAO,YAIlBC,EAA2B,IAAIpgB,IAAI,CAAC,mBAAoB,kBAAmB,SAAU,WAAY,aAEvG,IAAIqgB,EAEG,SAAS/C,EAAeJ,GAC7B,OAAOA,EAAS9wB,OAAS6zB,EAAwBK,MAG5C,SAAS9C,EAAcN,GAC5B,OAAOA,EAAS9wB,OAAS6zB,EAAwBM,KAG5C,SAASC,EAAatD,GAC3B,OAAOA,EAAS9wB,OAAS6zB,EAAwBQ,IAG5C,SAAS9E,EAAmBuB,GACjC,OAAOA,EAAS9wB,OAAS6zB,EAAwBS,UAG5C,SAAS5D,EAAcI,GAC5B,OAAOsD,EAAatD,IAAavB,EAAmBuB,GAGtD,SAASjhB,EACPgB,EACAsM,GAE6C,2BAD1CrW,EAC0C,iCAD1CA,EAC0C,kBAO7C,OANKqW,IACHA,EAAQ,IAGVrW,GAAWytB,EAAAA,EAAAA,IAAQztB,GAEf+J,IAAWijB,EACNhtB,EACoB,mBAAX+J,EACT2jB,EAAwB3jB,EAAQsM,EAAOrW,GAEvC2tB,EAAgB5jB,EAAQsM,EAAOrW,GAI1C,SAAS0tB,EAAwBF,EAAenX,EAAcrW,GAC5D,IAAI4tB,EACoB,IAApB5tB,EAAS1C,OACXswB,OAAiB/oB,EACY,IAApB7E,EAAS1C,QACjBswB,GAAkB5tB,EAEnB4tB,EAAiB5tB,EAGnB,MAAM6oB,EAAuC,CAC3CmB,SAAU,GACVwD,UAAAA,EACA9yB,KAAM8yB,EAAU9yB,KAChB2b,MAAO,IACFA,KACCuX,GAAkB,CAAE5tB,SAAU4tB,IAEpC9E,WAAW,EACX+E,MAAO,CACLlM,MAAO,CACLmM,OAAQ,EACRC,SAAU,IAEZC,QAAS,CACPF,OAAQ,EACRC,SAAU,IAEZE,MAAO,CACLH,OAAQ,EACRC,SAAU,MAOhB,OAFAlF,EAAkBmB,SAAWkE,EAAsBrF,GAE5CA,EAAkBmB,SAG3B,SAASkE,EACPrF,GAEyB,IADzB7oB,EACyB,uDADU,GAEnC,MAAM,MAAEqW,GAAUwS,EAElB,MAAO,CACLA,kBAAAA,EACA3vB,KAAM6zB,EAAwBS,UAC9BnX,MAAAA,EACArW,SAAAA,GAIJ,SAAS2tB,EAAgBpD,EAAalU,EAAcrW,GAClD,MAAO,CACL9G,KAAM6zB,EAAwBQ,IAC9BhD,IAAAA,EACAlU,MAAAA,EACArW,SAAUmuB,EAAcnuB,GAAUoF,IAAIgpB,IAK1C,SAASD,EAAcnuB,GACrB,IAAIvC,EAAIuC,EAAS1C,OAAS,EAE1B,KAAOG,GAAK,GACL4wB,EAAmBruB,EAASvC,IADpBA,KAMf,OAAOA,EAAI,EAAIuC,EAAS1C,OAAS0C,EAASL,MAAM,EAAGlC,EAAI,GAAKuC,EAG9D,SAASquB,EAAmBC,GAE1B,OAAiB,IAAVA,GAAAA,MAAmBA,EAG5B,SAASF,EAAkBE,GACzB,OAAID,EAAmBC,GAiBhB,CAAEp1B,KAAM6zB,EAAwBK,OAf5BxD,EAAc0E,GAChBA,GAMe1vB,EAJE0vB,EAKnB,CACLp1B,KAAM6zB,EAAwBM,KAC9BzuB,MAAOH,OAAOG,KAHlB,IAA0BA,EAY1B,MAAM2vB,EAA+B,GAO9B,SAASpE,EAAgBtB,GAC9BsE,EAAoBtE,EACpBA,EAAkBgF,MAAMlM,MAAMmM,OAAS,EACvCjF,EAAkBgF,MAAMG,QAAQF,OAAS,EACzCjF,EAAkBgF,MAAMI,MAAMH,OAAS,EAEvC,MAAM,UAAEN,EAAF,MAAanX,GAAUwS,EAC7B,IAAI2F,EAEJ,IAEE,IAAIC,EACJ,GAAI91B,EAAAA,GAAO,CACT,MAAM+1B,EAAgB7F,EAAkBnuB,KACnC6zB,EAAiBG,KACpBH,EAAiBG,GAAiB,CAChCA,cAAAA,EACAC,YAAa,EACbC,YAAa,KAIb7W,EAAAA,KACGmV,EAAyB3gB,IAAImiB,IAEhC91B,QAAQC,IAAK,kBAAiB61B,MAIlCD,EAAgBI,YAAYjzB,MAK9B,GAFA4yB,EAAmBhB,EAAUnX,GAEzB1d,EAAAA,GAAO,CACT,MAAMymB,EAAWyP,YAAYjzB,MAAQ6yB,EAC/BC,EAAgB7F,EAAkBnuB,KACpC0kB,EAjMqB,GAmMvBxmB,QAAQ4B,KAAM,kCAAiCk0B,MAAkB5xB,KAAKoP,MAAMkT,SAE9EmP,EAAiBG,GAAeE,YAAYtwB,KAAK8gB,GACjDmP,EAAiBG,GAAeC,eAElC,MAAOh0B,IACPm0B,EAAAA,EAAAA,GAAYn0B,GAEZ6zB,EAAmB3F,EAAkBkG,cAGvC,GAAIlG,EAAkBC,WAAa0F,IAAqB3F,EAAkBkG,cACxE,OAAOlG,EAAkBmB,SAG3BnB,EAAkBkG,cAAgBP,EAElC,MAAMQ,EAAWZ,EAAkBI,GAGnC,OAFA3F,EAAkBmB,SAAWkE,EAAsBrF,EAAmB,CAACmG,IAEhEnG,EAAkBmB,SAGpB,SAASrB,EAAkBsG,EAAsB/G,GACtD,cAAW+G,UAAgB/G,GAEhB+G,EAAK/1B,OAASgvB,EAAKhvB,OAEnBoxB,EAAc2E,IAAS3E,EAAcpC,GACvC+G,EAAKrwB,QAAUspB,EAAKtpB,MAClB0uB,EAAa2B,IAAS3B,EAAapF,GACpC+G,EAAK1E,MAAQrC,EAAKqC,KAAS0E,EAAK5Y,MAAMoU,MAAQvC,EAAK7R,MAAMoU,OACxDhC,EAAmBwG,KAASxG,EAAmBP,IAEtD+G,EAAKpG,kBAAkB2E,YAActF,EAAKW,kBAAkB2E,WAE5DyB,EAAK5Y,MAAMoU,MAAQvC,EAAK7R,MAAMoU,MAO7B,SAAShB,EAAYO,GAC1B,GAAIvB,EAAmBuB,IA+BCnB,EA9BLmB,EAASnB,mBA+BLC,YAKvBD,EAAkBgF,MAAMI,MAAMF,SAASpnB,SAASuoB,IAC9CA,EAAcljB,aAAUnH,KAG1BgkB,EAAkBgF,MAAMG,QAAQD,SAASpnB,SAAQ,IAAiB,IAAhB,QAAEwoB,GAAc,EAChE,GAAuB,mBAAZA,EACT,IACEA,IACA,MAAOx0B,IACPm0B,EAAAA,EAAAA,GAAYn0B,OAKlBkuB,EAAkBC,WAAY,EAMhC,SAAgBD,GACdA,EAAkBgF,MAAMG,QAAQD,SAASpnB,SAASyoB,IAChDA,EAAKD,aAAUtqB,EACfuqB,EAAKC,YAASxqB,EACduqB,EAAK9Q,kBAAezZ,KAGtBgkB,EAAkBgF,MAAMlM,MAAMoM,SAASpnB,SAASyoB,IAC9CA,EAAKxwB,WAAQiG,EACbuqB,EAAKE,eAAYzqB,EACjBuqB,EAAKG,YAAS1qB,KAGhBgkB,EAAkBgF,MAAMI,MAAMF,SAASpnB,SAASyoB,IAC9CA,EAAK9Q,kBAAezZ,KAGtBgkB,EAAkBgF,WAAQhpB,EAC1BgkB,EAAkBmB,cAAWnlB,EAC7BgkB,EAAkBkG,mBAAgBlqB,EAClCgkB,EAAkB2E,eAAY3oB,EAC9BgkB,EAAkBxS,WAAQxR,EAC1BgkB,EAAkBvF,iBAAcze,EAChCgkB,EAAkBpwB,cAAWoM,EA3B7B2qB,CAAO3G,SApCL,GAdIyE,EAAatD,KACXA,EAAS5oB,SACXilB,EAAAA,EAAAA,IAA4B2D,EAAS5oB,QAGnC4oB,EAAS3T,MAAM7J,MACjBwd,EAAS3T,MAAM7J,IAAIR,aAAUnH,IAI7BmlB,EAAS5oB,SACX4oB,EAAS5oB,YAASyD,IAGf+kB,EAAcI,GACjB,OAaN,IAA0BnB,EATxBmB,EAAShqB,SAAS2G,QAAQ8iB,GAGrB,SAASQ,EAAepB,GAG7B,OAFAsB,EAAgBtB,GAChBA,EAAkBC,WAAY,EACvBD,EAAkBmB,SAuD3B,SAASyF,EAAyB5G,GAC3BA,EAAkBC,YAIvBD,EAAkBgF,MAAMlM,MAAMoM,SAASpnB,SAASyoB,IAC9CA,EAAKxwB,MAAQwwB,EAAKE,aAGpBzG,EAAkB6G,iBAAkBC,EAAAA,EAAAA,KAAuB,IAAMF,EAAyB5G,KAC1FA,EAAkBvF,aAAcsM,EAAAA,EAAAA,KAAgB,IAAMC,EAAqBhH,MAG7E,SAASgH,EAAqBhH,GAC5B,IAAKA,EAAkBC,YAAcD,EAAkBpwB,SACrD,OAGF,MAAMq3B,EAAiBjH,EAAkBmB,SAEzCG,EAAgBtB,GAEZA,EAAkBmB,WAAa8F,GACjCjH,EAAkBpwB,WAIf,SAAS+wB,EAAUQ,GACxB,OAAIvB,EAAmBuB,GACdR,EAAUQ,EAAShqB,SAAS,IAE5BgqB,EAAS5oB,OAIb,SAAS+nB,EAAUa,EAA0B5oB,GAC9CqnB,EAAmBuB,GACrBb,EAAUa,EAAShqB,SAAS,GAAIoB,GAEhC4oB,EAAS5oB,OAASA,EAMf,SAAS+Q,EAAYuM,GAC1B,MAAM,OAAEoP,EAAF,SAAUC,GAAaZ,EAAkBU,MAAMlM,MAMzC,IAAEkH,EAwCd,YA5CyBhkB,IAArBkpB,EAASD,KACXC,EAASD,GAAU,CACjBlvB,MAAO8f,EACP4Q,UAAW5Q,EACX6Q,QAAU1G,EAkCPsE,EAlC8BZ,IAC3BwB,EAASD,GAAQwB,YAAc/C,IACjCwB,EAASD,GAAQwB,UAAgC,mBAAb/C,EAC/BA,EAA+BwB,EAASD,GAAQlvB,OACjD2tB,EAEC1D,EAAkB6G,iBAAoB7G,EAAkBvF,cAC3DuF,EAAkB6G,iBAAkBC,EAAAA,EAAAA,KAClC,IAAMF,EAAyB5G,KAEjCA,EAAkBvF,aAAcsM,EAAAA,EAAAA,KAC9B,IAAMC,EAAqBhH,MAI/BA,EAAkB6G,kBAClB7G,EAAkBvF,cAEdvL,EAAAA,IAC6B,oBAA3B8Q,EAAkBnuB,MAEpB9B,QAAQC,IACN,mBACAgwB,EAAkBnuB,KAElBmuB,EAAkB2E,WAAc3E,EAAkB2E,UAA2BuC,2BACxE,KAAKlH,EAAkB2E,UAA2BuC,6BACnD,GACH,4BAA2BjC,kBAC5BC,EAASD,GAAQwB,gBAS/BnC,EAAkBU,MAAMlM,MAAMmM,SAEvB,CACLC,EAASD,GAAQlvB,MACjBmvB,EAASD,GAAQyB,QAIrB,SAASS,EACPC,EACAC,EACAb,EACA/Q,EACAC,GAEA,MAAM,OAAEuP,EAAF,SAAUC,GAAaZ,EAAkBU,MAAMG,QAC/CnF,EAAoBsE,EAE1B,SAASgD,IACP,IAAKtH,EAAkBC,UACrB,OAGF,MAAM,QAAEqG,GAAYpB,EAASD,GAC7B,GAAuB,mBAAZqB,EACT,IAEE,IAAIV,EAOJ,GANI91B,EAAAA,KACF81B,EAAgBI,YAAYjzB,OAG9BuzB,IAEIx2B,EAAAA,GAAO,CACT,MAAMymB,EAAWyP,YAAYjzB,MAAQ6yB,EAC/BC,EAAgB7F,EAAkBnuB,KACpC0kB,EAhciB,GAkcnBxmB,QAAQ4B,KACL,0CAAyCszB,MAAWY,MAAkB5xB,KAAKoP,MAAMkT,UAIxF,MAAOzkB,IACPm0B,EAAAA,EAAAA,GAAYn0B,IAKlB,SAASiqB,IACP,IAAKiE,EAAkBC,UACrB,OAIF,IAAI2F,EAOJ,GANI91B,EAAAA,KACF81B,EAAgBI,YAAYjzB,OAG9BmyB,EAASD,GAAQqB,QAAUE,IAEvB12B,EAAAA,GAAO,CACT,MAAMymB,EAAWyP,YAAYjzB,MAAQ6yB,EAC/BC,EAAgB7F,EAAkBnuB,KACpC0kB,EA7dqB,GA+dvBxmB,QAAQ4B,KAAM,kCAAiCszB,MAAWY,MAAkB5xB,KAAKoP,MAAMkT,UAK7F,QAAyBva,IAArBkpB,EAASD,IAAyBxP,GAAgByP,EAASD,GAAQxP,cACrE,GAAIA,EAAa7W,MAAK,CAAC2oB,EAAY3yB,IAAM2yB,IAAerC,EAASD,GAAQxP,aAAc7gB,KAAK,CAC1F,GAAI8gB,EAAU,CACZ,MAAM8R,EAAW/R,EAAajW,QAAO,CAACioB,EAAK/D,EAAU9uB,KACnD,MAAM8yB,EAAYxC,EAASD,GAAQxP,aAAc7gB,GAKjD,OAJI8uB,IAAagE,GACfD,EAAIhyB,KAAM,GAAEb,MAAM8yB,QAAgBhE,KAG7B+D,IACN,IAGH13B,QAAQC,IAAK,mBAAkB0lB,6BAAqC8R,EAASxxB,KAAK,OAGpFqxB,EAAmBC,GACnBF,EAAYrL,SAGVrG,GAEF3lB,QAAQC,IAAK,mBAAkB0lB,sCAGjC2R,EAAmBC,GACnBF,EAAYrL,GAGdmJ,EAASD,GAAU,CACjBuB,OAAAA,EACA/Q,aAAAA,EACA6Q,QAASpB,EAASD,GAAUC,EAASD,GAAQqB,aAAUtqB,GAGzDsoB,EAAkBU,MAAMG,QAAQF,SAG3B,SAASxhB,EAAU+iB,EAA+B/Q,EAA+BC,GACtF,OAAOyR,EAAoBQ,EAAAA,GAASC,EAAAA,GAAgBpB,EAAQ/Q,EAAcC,GAGrE,SAASmS,EAAgBrB,EAA+B/Q,EAA+BC,GAC5F,OAAOyR,EAAoBW,EAAAA,GAAWC,EAAAA,GAAkBvB,EAAQ/Q,EAAcC,GAGzE,SAAS1H,EAAuBga,EAAmBvS,EAAqBC,GAC7E,MAAM,OAAEuP,EAAF,SAAUC,GAAaZ,EAAkBU,MAAMI,MACrD,IAAI,QAAEjiB,GAAY+hB,EAASD,IAAW,GA0BtC,YAvBuBjpB,IAArBkpB,EAASD,IACNxP,EAAa7W,MAAK,CAAC2oB,EAAY3yB,IAAM2yB,IAAerC,EAASD,GAAQxP,aAAa7gB,QAEjF9E,EAAAA,IAAS4lB,GAEX3lB,QAAQC,IACL,mBAAkBs0B,EAAkBzyB,SAAS6jB,2BAC9CwP,EAASD,IACLgD,EAAAA,EAAAA,GAAgBxS,EAAcyP,EAASD,GAAQxP,cAAczf,KAAK,MAClE,kBAIRmN,EAAU6kB,KAGZ9C,EAASD,GAAU,CACjB9hB,QAAAA,EACAsS,aAAAA,GAGF6O,EAAkBU,MAAMI,MAAMH,SAEvB9hB,EAGF,SAASxL,EAAmCuwB,EAAgBzS,EAAqBC,GAEtF,OAAO1H,GAAQ,IAAMka,GAAazS,EAAcC,GAO3C,SAAS/S,EAAUkT,GACxB,OAAO7H,GAAQ,KAAM,CACnB7K,QAAS0S,KAEP,IAGC,SAAS7e,EAAmB2tB,GAAkE,IAApDwD,EAAoD,uDAAzCC,EAAAA,EAAsB1S,EAAmB,uCACnG,OAAO,SAA0BlI,GAE/B,MAAM6a,EAAW1lB,EAAO6K,GAClB8a,EAAc3lB,IAepB,QAbK2lB,EAAYnlB,SAAYklB,EAASllB,UAAYglB,EAASE,EAASllB,QAASqK,MACvE1d,EAAAA,IAAS4lB,GAEX3lB,QAAQC,IACL,gBAAe20B,EAAU9yB,SAAS6jB,4BACnCuS,EAAAA,EAAAA,GAAgBI,EAASllB,QAAUqK,GAAOxX,KAAK,OAInDqyB,EAASllB,QAAUqK,EACnB8a,EAAYnlB,QAAUjD,EAAcykB,EAAWnX,IAG1C8a,EAAYnlB,SA9bvBlK,SAAS9I,iBAAiB,YAAY,KAEpCJ,QAAQ4B,KAAK,cAAc42B,EAAAA,EAAAA,IAAQj2B,OAAO+rB,OAAOqH,GAAmB,cAAe,YAicrF,MAKA,EALc,CACZxlB,cAAAA,EACAikB,SAAAA,I,4YChrBF,QAAeqE,EAAf,GAYA,IAAIC,EAAgB,GAEpB,MAAMC,EAAsC,GACtCC,EAAwB,CAqD9B,WAEE,IAAI/C,EACA91B,EAAAA,KACF81B,EAAgBI,YAAYjzB,OAI9B,IAAK,MAAMob,KAAaya,EAAWvK,SAAU,CAC3C,MAAM,gBACJwK,EADI,SACaC,EADb,YACuBC,EADvB,YACoCtO,GACtCtM,EAEJ,IAAI6a,EAEJ,IACEA,EAAiBH,EAAgBJ,EAAeK,GAChD,MAAOh3B,GAGP,YAFAm0B,EAAAA,EAAAA,GAAYn0B,GAKVhC,EAAAA,IACEwC,OAAO+rB,OAAO2K,GAAgBpqB,KAAKqqB,OAAOC,QAE5Cn5B,QAAQ4B,KAEL,sBAAqBwc,EAAUgb,2HAKlC72B,OAAO6rB,KAAK6K,GAAgBv0B,UAAW2zB,EAAAA,EAAAA,GAAqBW,EAAcC,KACxE9Z,EAAAA,IAEFnf,QAAQC,IACN,uBACAme,EAAUgb,oBACV,aACAlB,EAAAA,EAAAA,GAAgBc,EAAcC,GAAgBhzB,KAAK,OAIvDmY,EAAU4a,YAAcC,EACxB7a,EAAUib,uBAAwB,EAClCjb,EAAUkb,gBAEV5O,KAIJ,GAAI3qB,EAAAA,GAAO,CACT,MAAMw5B,EAAatD,YAAYjzB,MAAQ6yB,EACnC0D,EAAa,GAEfv5B,QAAQ4B,KAAM,oCAAmCsC,KAAKoP,MAAMimB,YA5G5DrmB,EAAU,GACV2lB,EAAa,IAAIn5B,IAUjB85B,GAAwBC,EAAAA,EAAAA,IAAoBC,GAElD,SAASA,IAA4C,IAA/BC,EAA+B,wDAC9CA,KAAyBpT,EAAAA,EAAAA,MAK9BqS,EAAU7qB,SAAS0X,GAAOA,EAAGiT,MAJ3Bd,EAAAA,EAAAA,IAAQ4B,GAOL,SAASI,EAAUC,EAAyBxuB,GACxB,iBAAdwuB,GAA0BA,IAAcnB,IACjDA,EAAgBmB,EACZxuB,MAAAA,GAAAA,EAASyuB,eACXJ,GAAa,GAEbF,EAAsBnuB,MAAAA,OAAD,EAACA,EAASsuB,wBAK9B,SAASI,IACd,OAAOrB,EAGF,SAASlxB,IACd,OAAO0L,EA2EF,SAAS8mB,EAAWl4B,EAAmBm4B,GACvCtB,EAAS72B,KACZ62B,EAAS72B,GAAQ,GAEjBoR,EAAQpR,GAAQ,CAACO,EAAyBgJ,MA5E9C,SAAoBvJ,EAAcO,EAAyBgJ,GACrDstB,EAAS72B,IACX62B,EAAS72B,GAAMiM,SAASksB,IACtB,MAAMJ,EAAYI,EAAQvB,EAAexlB,EAAS7Q,GAC9Cw3B,GACFD,EAAUC,EAAWxuB,MAwEvB6uB,CAAWp4B,EAAMO,EAASgJ,KAI9BstB,EAAS72B,GAAM4D,KAAKu0B,GAGf,SAASE,EAAY1U,GAC1BmT,EAAUlzB,KAAK+f,GAGV,SAAS2U,EAAe3U,GAC7B,MAAMzX,EAAQ4qB,EAAUtvB,QAAQmc,IACjB,IAAXzX,GACF4qB,EAAUhzB,OAAOoI,EAAO,GAIrB,SAAS6J,IAEd,IADAihB,EACA,uDAD6C,KAAM,IAEnD,OAAQlE,GACC,SAASyF,EAAgB5c,GAC7B4c,EAAiClD,2BAA6BvC,EAAU9yB,KAEzE,MAAOsI,IAAMmP,EAAAA,EAAAA,KAASnX,EAAAA,EAAAA,GAAcy2B,IAC9BnO,GAAcC,EAAAA,EAAAA,MAEpBjX,EAAAA,EAAAA,KAAU,IACD,KACLmlB,EAAWh2B,OAAOuH,KAEnB,CAACA,IAEJ,IAAIgU,EAAYya,EAAWp4B,IAAI2J,GAkB/B,GAjBKgU,IACHA,EAAY,CACV0a,gBAAAA,EACAC,SAAUtb,EACV4b,uBAAuB,EACvB3O,YAAAA,EACA4O,cAAe,EACfF,oBAAqBxE,EAAU9yB,MAGjC+2B,EAAWn2B,IAAI0H,EAAIgU,IAGjBA,EAAUib,wBACZjb,EAAUib,uBAAwB,IAG/Bjb,EAAU4a,eAAgBX,EAAAA,EAAAA,GAAqBja,EAAU2a,SAAUtb,GAAQ,CAC9EW,EAAU2a,SAAWtb,EAErB,IACEW,EAAU4a,YAAcF,EAAgBJ,EAAejb,GACvD,MAAO1b,IACPm0B,EAAAA,EAAAA,GAAYn0B,IAKhB,OAAO,mBAAC6yB,EAAD,KAAexW,EAAU4a,YAAiBvb,KAKnD1d,EAAAA,KACDsB,OAAe04B,UAAYA,EAE5B7wB,SAAS9I,iBAAiB,YAAY,KAEpCJ,QAAQ4B,KACN,qBACA42B,EAAAA,EAAAA,IACE3qB,MAAMuN,KAAKyd,EAAWvK,UACnB9hB,KAAI,QAAC,oBAAE4sB,EAAF,cAAuBE,GAAxB,QAA6C,CAAEF,oBAAAA,EAAqBE,cAAAA,MAC3E,gBACA,c,wCCjOR,MAAMgB,EAAa,UAEbC,EAAkB10B,OAAOC,aAAa,MAErC,SAASgL,EAAY0pB,GAC1B,OAAOA,EAASlxB,QAAQixB,GAAmB,EAAIC,EAAS7zB,QAAQ2zB,EAAY,IAAME,EAKpF,+vY,8GCcAR,EAAAA,EAAAA,IAAW,WAAW,CAACliB,EAAqB5E,KAC1C,WACOkM,EAAAA,WACGqb,EAAAA,EAAAA,OACDC,EAAAA,EAAAA,QAGF96B,EAAAA,EAAAA,IAAQsT,EAAQynB,UAAW,CAC9BC,UAAWC,UAAUD,UACrBx5B,SAAU05B,EAAAA,GACVC,aAAaC,EAAAA,EAAAA,MACbC,OAAQ55B,OAAOgC,SAASgkB,OAAOnb,SAAS,QACxCgvB,eAAgBC,EAAAA,GAChBC,gBAAiBC,EAAAA,MAZrB,OAiBFrB,EAAAA,EAAAA,IAAW,sBAAsB,CAACliB,EAAQ5E,EAAS7Q,KACjD,MAAM,YAAEi5B,GAAgBj5B,EAIxB,OAFKX,EAAAA,EAAAA,IAAQ,yBAA0B45B,EAAY30B,QAAQ,SAAU,KAE9D,IACFmR,EACHyjB,eAAe,EACfC,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,eAAe,CAACliB,EAAQ5E,EAAS7Q,KAC1C,MAAM,KAAEgK,GAAShK,EAIjB,OAFKX,EAAAA,EAAAA,IAAQ,kBAAmB2K,GAEzB,IACFyL,EACHyjB,eAAe,EACfC,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,mBAAmB,CAACliB,EAAQ5E,EAAS7Q,KAC9C,MAAM,SAAEo5B,GAAap5B,EAIrB,OAFKX,EAAAA,EAAAA,IAAQ,sBAAuB+5B,GAE7B,IACF3jB,EACHyjB,eAAe,EACfC,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,sBAAsB,CAACliB,EAAQ5E,EAAS7Q,KACjD,MAAM,KAAEq5B,GAASr5B,GAEZX,EAAAA,EAAAA,IAAQ,qBAAsBg6B,OAGrC1B,EAAAA,EAAAA,IAAW,UAAU,CAACliB,EAAQ5E,EAAS7Q,KACrC,MAAM,UAAEs5B,EAAF,SAAaC,GAAav5B,EAIhC,OAFKX,EAAAA,EAAAA,IAAQ,0BAA2B,CAAEi6B,UAAAA,EAAWC,SAAAA,IAE9C,IACF9jB,EACHyjB,eAAe,EACfC,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,2BAA4BliB,KAChCpW,EAAAA,EAAAA,IAAQ,eAEN,IACFoW,EACH0jB,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,kBAAmBliB,KACvBpW,EAAAA,EAAAA,IAAQ,qBAEN,IACFoW,EACH+jB,qBAAqB,EACrBL,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,eAAe,CAACliB,EAAQ5E,EAAS7Q,KAC1C,MAAM,YAAE04B,GAAgB14B,EAEpB04B,GACFe,EAAAA,EAAAA,IAAaz5B,EAAQ04B,YAAajjB,EAAOikB,gBAEzCC,EAAAA,EAAAA,UAIJhC,EAAAA,EAAAA,IAAW,WAAW,KACpB,WACE,UACQiC,EAAAA,EAAAA,YACAv6B,EAAAA,EAAAA,IAAQ,iBACRw6B,EAAAA,EAAAA,KAAa,GACnB,MAAOn6B,KAITyF,EAAAA,EAAAA,MAAc20B,SAThB,OAaFnC,EAAAA,EAAAA,IAAW,SAAS,MAClBgC,EAAAA,EAAAA,MAEKI,EAAAA,MAAetc,EAAAA,IACfsc,EAAAA,MAAerc,EAAAA,IACfqc,EAAAA,MAAepc,EAAAA,IACfoc,EAAAA,MAAenc,EAAAA,IAEpB,MAAMoc,EAAkBnc,EAAAA,GAAAA,QAAwB,OAAQ,IAClDoc,GAAoBpc,EAAAA,GAAAA,MAAsB,SAAW,CAAC,IAAI,GAChE,IAAK,IAAIrb,EAAI,EAAGA,EAAIy3B,EAAkBz3B,IAC/Bu3B,EAAAA,MAAgB,GAAEC,IAAwB,IAANx3B,EAAU,GAAKA,MAGrD61B,EAAAA,EAAAA,OAEL6B,EAAAA,EAAAA,GAAe,IAEf/0B,EAAAA,EAAAA,MAAcg1B,WAGhBxC,EAAAA,EAAAA,IAAW,cAAc,KACvB,iBACQt4B,EAAAA,EAAAA,IAAQ,eADhB,OAKFs4B,EAAAA,EAAAA,IAAW,sBAAuBliB,IACD,yBAA3BA,EAAO2kB,iBAIX,WACE,MAAMC,QAA2Bh7B,EAAAA,EAAAA,IAAQ,wBAEzCk4B,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACH2C,mBAAAA,KALJ,OAUF1C,EAAAA,EAAAA,IAAW,kBAAkB,CAACliB,EAAQ5E,EAASypB,MAC7C/C,EAAAA,EAAAA,IAAU,IACL9hB,EACHpS,KAAM,CACJi3B,YAAAA,EACAC,aAAc75B,KAAKC,aAKzBg3B,EAAAA,EAAAA,IAAW,qBAAsBliB,IAC/B,MAAM+hB,EAAY,IAAK/hB,UAChB+hB,EAAUn0B,MACjBk0B,EAAAA,EAAAA,IAAUC,O,qHCuRZ,SAASgD,EAAuB/kB,EAAhC,GAQsB,IAR+B,WACnDglB,EADmD,WAEnDC,EAFmD,UAGnDC,GAKoB,EACpB,MACEC,OAASC,KAAMC,GACfC,OAASF,KAAMG,IACbvlB,EAEEwlB,EAA2B,CAC/BR,WAAAA,GAEF,IAAIG,EACAG,EAEJ,MAAMG,EAAgBxnB,IACpB,KAAKynB,EAAAA,EAAAA,IAASznB,GACZ,OAEF,MAAM,GAAE3L,EAAF,WAAMO,GAAewyB,EAAUpnB,IAAW,GAChD,OAAK3L,EAIE,CAAEA,GAAAA,EAAIO,WAAAA,QAJb,GAOI8yB,EAAgB1nB,IACpB,IAAIynB,EAAAA,EAAAA,IAASznB,GACX,OAEF,MAAMxI,EAAO8vB,EAAUtnB,GAEvB,OAAOxI,EAAO,CAAEnD,GAAImD,EAAKnD,SAAO6B,GA2BlC,MAxBmB,aAAf6wB,GAA4C,WAAfA,IAC/BG,EAAQF,EAAWvwB,IAAI+wB,GAAc7wB,OAAOhD,SAC5C0zB,EAAQL,EAAWvwB,IAAIixB,GAAc/wB,OAAOhD,SAExCuzB,EAAMv4B,OAAS,IACjB44B,EAAMI,aAAeT,GAEnBG,EAAM14B,OAAS,IACjB44B,EAAMK,aAAeP,IAIN,cAAfN,GAA6C,aAAfA,IAChCG,EAAQD,EAAUxwB,IAAI+wB,GAAc7wB,OAAOhD,SAC3C0zB,EAAQJ,EAAUxwB,IAAIixB,GAAc/wB,OAAOhD,SAEvCuzB,EAAMv4B,OAAS,IACjB44B,EAAMM,aAAeX,GAEnBG,EAAM14B,OAAS,IACjB44B,EAAMO,aAAeT,IAIlBE,GA1gBTtD,EAAAA,EAAAA,IAAW,iBAAiB,CAACliB,EAAQ5E,EAAS7Q,KAC5C,MAAM,MACJy7B,EADI,UACGnC,EADH,SACcC,EAAUmC,IAAKC,EAD7B,SACoC3rB,GACtChQ,EAEJ,WACE,MAAM,cAAE05B,GAAkBjkB,EAC1B,GAAKikB,EAAL,CAeA,IAXAnC,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHkE,YAAa,CACXC,SAAUC,EAAAA,GAAAA,cAIVL,SACIp8B,EAAAA,EAAAA,IAAQ,qBAAsBo8B,IAGlCnC,GAAaC,GAAYoC,UACNt8B,EAAAA,EAAAA,IAAQ,gBAAiB,CAAEi6B,UAAAA,EAAWC,SAAAA,EAAUoC,MAAAA,IACzD,CACVlmB,GAASiiB,EAAAA,EAAAA,MACT,MAAMqE,EAAcrC,IAAiB/jB,EAAAA,EAAAA,IAAWF,EAAQikB,GAEpDqC,IACFxE,EAAAA,EAAAA,KAAUyE,EAAAA,EAAAA,IACRvmB,EACAsmB,EAAYh0B,GACZ,CACEuxB,UAAAA,EACAC,SAAAA,EACA0C,SAAU,IACLF,EAAYE,SACfP,IAAKC,MAQb3rB,SACmB3Q,EAAAA,EAAAA,IAAQ,iBAAkB2Q,IACjC0pB,IACZnC,EAAAA,EAAAA,KAAUyE,EAAAA,EAAAA,KAAWtE,EAAAA,EAAAA,MAAagC,EAAe,CAAE1pB,SAAAA,MAIvDunB,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHkE,YAAa,CACXC,SAAUC,EAAAA,GAAAA,cAlDhB,OAwDFnE,EAAAA,EAAAA,IAAW,iBAAiB,CAACliB,EAAQ5E,EAAS7Q,KAC5C,MAAM,SAAEgQ,GAAahQ,EAErB,WAEE,GAAIyV,EAAOmmB,aAAenmB,EAAOmmB,YAAYC,WAAaC,EAAAA,GAAAA,WACxD,QAGFvE,EAAAA,EAAAA,IAAU,IACL9hB,EACHmmB,YAAa,CACXC,SAAUpmB,EAAOmmB,YAAcnmB,EAAOmmB,YAAYC,SAAWC,EAAAA,GAAAA,KAC7DI,yBAAqBtyB,KAIzB,MAAMsyB,QAA4B78B,EAAAA,EAAAA,IAAQ,gBAAiB2Q,GAE3DyF,GAASiiB,EAAAA,EAAAA,OACTH,EAAAA,EAAAA,IAAU,IACL9hB,EACHmmB,YAAa,IACRnmB,EAAOmmB,YACVM,oBAAAA,MArBN,OA2BFvE,EAAAA,EAAAA,IAAW,kBAAkB,KAC3B,WACE,MAAM5pB,QAAe1O,EAAAA,EAAAA,IAAQ,mBAC7B,IAAK0O,EACH,OAGF,MAAM0H,GAASiiB,EAAAA,EAAAA,OACfH,EAAAA,EAAAA,IAAU,IACL9hB,EACH0mB,SAAU,IACL1mB,EAAO0mB,SACVC,iBAAkBruB,EAAOsuB,eAX/B,OAiBF1E,EAAAA,EAAAA,IAAW,mBAAmB,CAACliB,EAAQ5E,EAAS7Q,KAC9C,MAAMq5B,EAAOr5B,EACPsH,EAAiBxJ,IAAIw+B,gBAAgBjD,IAE3C9B,EAAAA,EAAAA,IAAU,IACL9hB,EACH0mB,SAAU,IACL1mB,EAAO0mB,SACVC,iBAAkB,CAChB,CACEG,KAAMC,EAAAA,GACN31B,SAAU,CACRC,SAAU,GACVoH,KAAMmrB,EAAKnrB,KACXnH,SAAUsyB,EAAKp7B,KACfqJ,eAAAA,OAGAmO,EAAO0mB,SAASC,kBAAoB,OAK9C,WACE,MAAMruB,QAAe1O,EAAAA,EAAAA,IAAQ,kBAAmBg6B,GAChD,IAAKtrB,EACH,OAGF,MAAM,UAAE0uB,GAAc1uB,EAGtB,KADA0H,GAASiiB,EAAAA,EAAAA,OACGyE,SAASC,iBACnB,OAGF,MAAMM,EAAiBjnB,EAAO0mB,SAASC,iBAAiB,GACxD,IAAKM,GAAkBA,EAAeH,OAASC,EAAAA,GAC7C,OAGF,MAAMG,EAAiB,IAClBF,EACH51B,SAAU,IACL41B,EAAU51B,SACbS,eAAAA,KAIJiwB,EAAAA,EAAAA,IAAU,IACL9hB,EACH0mB,SAAU,IACL1mB,EAAO0mB,SACVC,iBAAkB,CAChBO,KACGlnB,EAAO0mB,SAASC,iBAAiB13B,MAAM,QAhClD,OAuCFizB,EAAAA,EAAAA,IAAW,uBAAuB,KAChC,WAAa,QACX,MAAM5pB,QAAe1O,EAAAA,EAAAA,IAAQ,wBAE7B,IAAK0O,EACH,OAGF,IAAIypB,GAAYE,EAAAA,EAAAA,MAEhB,UAAI3pB,EAAO6sB,aAAX,OAAI,EAAcv4B,SAChBm1B,GAAYoF,EAAAA,EAAAA,IAASpF,GAAWqF,EAAAA,EAAAA,IAAqB9uB,EAAO6sB,MAAO,QAErE,UAAI7sB,EAAOgtB,aAAX,OAAI,EAAc14B,SAChBm1B,GAAYsF,EAAAA,EAAAA,IAAYtF,GAAWqF,EAAAA,EAAAA,IAAqB9uB,EAAOgtB,MAAO,QAGxEvD,EAAY,IACPA,EACHuF,QAAS,IACJvF,EAAUuF,QACbC,IAAK,IAAKxF,EAAUuF,QAAQC,KAAO,MAAQjvB,EAAOkvB,YAClDC,WAAYnvB,EAAOmvB,cAIvB3F,EAAAA,EAAAA,IAAUC,IAzBZ,OA6BFG,EAAAA,EAAAA,IAAW,gBAAgB,CAACliB,EAAQ5E,EAAS7Q,KAC3C,MAAM,UAAEm9B,EAAF,WAAa70B,GAAetI,EAElC,WAEE,UADqBX,EAAAA,EAAAA,IAAQ,eAAgB89B,EAAW70B,GAEtD,OAGF,MAAMkvB,GAAYE,EAAAA,EAAAA,OAElBH,EAAAA,EAAAA,KAAU6F,EAAAA,EAAAA,IAAkB5F,EAAW2F,KARzC,OAYFxF,EAAAA,EAAAA,IAAW,kBAAkB,CAACliB,EAAQ5E,EAAS7Q,KAC7C,MAAM,UAAEm9B,GAAcn9B,EACtB,IAAIsI,EAGJ,IAFkB6yB,EAAAA,EAAAA,IAASgC,GAEZ,CACb,MAAM/yB,GAAOuL,EAAAA,EAAAA,IAAWF,EAAQ0nB,GAChC,IAAK/yB,EACH,OAGF9B,EAAa8B,EAAK9B,WAGpB,WAEE,UADqBjJ,EAAAA,EAAAA,IAAQ,iBAAkB89B,EAAW70B,GAExD,OAGF,MAAMkvB,GAAYE,EAAAA,EAAAA,OAElBH,EAAAA,EAAAA,KAAU8F,EAAAA,EAAAA,IAAqB7F,EAAW2F,KAR5C,OAYFxF,EAAAA,EAAAA,IAAW,sBAAsB,KAC/B,WACE,MAAM5pB,QAAe1O,EAAAA,EAAAA,IAAQ,uBACxB0O,IAILwpB,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACH4F,eAAgBvvB,KARpB,OAaF4pB,EAAAA,EAAAA,IAAW,0BAA0B,CAACliB,EAAQ5E,EAAS7Q,KACrD,MAAM,KAAE6kB,GAAS7kB,EAEjB,WAEE,UADqBX,EAAAA,EAAAA,IAAQ,yBAA0BwlB,GAErD,OAGF,MAAM2S,GAAYE,EAAAA,EAAAA,OAElBH,EAAAA,EAAAA,IAAU,IACLC,EACH8F,eAAgB9F,EAAU8F,eAAejzB,QAAQkzB,GAAYA,EAAQ1Y,OAASA,OAVlF,OAeF8S,EAAAA,EAAAA,IAAW,8BAA8B,KACvC,WAEE,UADqBt4B,EAAAA,EAAAA,IAAQ,8BAE3B,OAGF,MAAMoW,GAASiiB,EAAAA,EAAAA,OAEfH,EAAAA,EAAAA,IAAU,IACL9hB,EACH6nB,eAAgB7nB,EAAO6nB,eAAejzB,QAAQkzB,GAAYA,EAAQC,eAVtE,OAeF7F,EAAAA,EAAAA,IAAW,8BAA+BliB,IACxC,MAAM,iBAAEgoB,GAAqBhoB,EAE7B,WACE,MAAM1H,QAAe1O,EAAAA,EAAAA,IAAQ,8BAA+B,CAAEo+B,iBAAAA,IACzD1vB,IAILwpB,EAAAA,EAAAA,KAAUmG,EAAAA,EAAAA,KAAoBhG,EAAAA,EAAAA,MAAa3pB,KAN7C,OAUF4pB,EAAAA,EAAAA,IAAW,4BAA6BliB,IACtC,MAAM,iBAAEgoB,GAAqBhoB,EAC7B,WACE,MAAM1H,QAAe1O,EAAAA,EAAAA,IAAQ,4BAA6B,CACxDo+B,iBAAAA,IAEG1vB,IAILwpB,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa3pB,KARzC,OAYF4pB,EAAAA,EAAAA,IAAW,8BAA8B,CAACliB,EAAQ5E,EAAS7Q,KACzD,MAAM,SAAE49B,EAAF,SAAYC,EAAZ,mBAAsBC,GAAuB99B,EAEnD,iBACuBX,EAAAA,EAAAA,IAAQ,6BAA8Bu+B,EAAU,CAAEC,SAAAA,EAAUC,mBAAAA,MAMjFvG,EAAAA,EAAAA,KAAUwG,EAAAA,EAAAA,KAAqBrG,EAAAA,EAAAA,MAAakG,EAAUC,EAAUC,KAPlE,OAWFnG,EAAAA,EAAAA,IAAW,iCAAiC,CAACliB,EAAQ5E,EAAS7Q,KAC5D,YACEu3B,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa13B,IACvC,MAAMw3B,GAAYE,EAAAA,EAAAA,OACZ,qBAAEsG,EAAF,oBAAwBC,GAAwBzG,EAAU2E,SAAS+B,MACrED,GAAuBD,QACnBG,EAAAA,EAAAA,YAEAvE,EAAAA,EAAAA,OAPV,OAYFjC,EAAAA,EAAAA,IAAW,mCAAmC,CAACliB,EAAQ5E,EAAS7Q,KAC9D,MAAM,SAAE69B,GAAa79B,EAErB,iBACuBX,EAAAA,EAAAA,IAAQ,kCAAmCw+B,KAKhEtG,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa,CAAE0G,+BAAgCP,MAN3E,OAUFlG,EAAAA,EAAAA,IAAW,iBAAiB,KAC1B,WACE,MAAM5pB,QAAe1O,EAAAA,EAAAA,IAAQ,kBACxB0O,IAILwpB,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa,CAAE2G,UAAWtwB,MANtD,OAUF4pB,EAAAA,EAAAA,IAAW,uBAAuB,KAChC,WACE,MACE2G,EAAqBC,EAAkBC,EAAsBC,EAAkBC,SACvEz+B,QAAQ0+B,IAAI,EACpBt/B,EAAAA,EAAAA,IAAQ,uBAAwB,gBAChCA,EAAAA,EAAAA,IAAQ,uBAAwB,aAChCA,EAAAA,EAAAA,IAAQ,uBAAwB,iBAChCA,EAAAA,EAAAA,IAAQ,uBAAwB,aAChCA,EAAAA,EAAAA,IAAQ,uBAAwB,gBAGlC,KACGi/B,GAAwBC,GAAqBC,GAAyBC,GAAqBC,GAE5F,OAGF,MAAMjpB,GAASiiB,EAAAA,EAAAA,MAEfjiB,EAAO0mB,SAASyC,QAAQ3F,YAAcqF,EACtC7oB,EAAO0mB,SAASyC,QAAQC,SAAWN,EACnC9oB,EAAO0mB,SAASyC,QAAQE,aAAeN,EACvC/oB,EAAO0mB,SAASyC,QAAQG,SAAWN,EACnChpB,EAAO0mB,SAASyC,QAAQI,WAAaN,GAErCnH,EAAAA,EAAAA,IAAU9hB,IAzBZ,OA6BFkiB,EAAAA,EAAAA,IAAW,wBAAwB,CAACliB,EAAQ5E,EAAS7Q,KACnD,MAAM,WAAEi/B,EAAF,WAAcxE,GAAez6B,GAGjC4+B,SAAW,CAACK,GAA8B9C,IACxC1mB,EAAO0mB,SAEX,IAAKA,EACH,OAGF,MAAMlB,EAAQT,EAAuB/kB,EAAQ,CAC3CglB,WAAAA,EACAC,WAAY,IAAIyB,EAAS+C,gBAAiB/C,EAASgD,cACnDxE,UAAW,IAAIwB,EAASiD,gBAAiBjD,EAASkD,gBAGpD,WACE,MAAMtxB,QAAe1O,EAAAA,EAAAA,IAAQ,qBAAsB4/B,EAAYhE,GAE/D,GAAIltB,EAAQ,CACV,MAAMypB,GAAYE,EAAAA,EAAAA,MAElBF,EAAU2E,SAASyC,QAAQK,GAA+BlxB,GAE1DwpB,EAAAA,EAAAA,IAAUC,KARd,OAaFG,EAAAA,EAAAA,IAAW,sBAAsB,CAACliB,EAAQ5E,EAAS7Q,KACjD,MAAM,WAAEi/B,EAAF,YAAcK,EAAd,YAA2BC,GAAgBv/B,GAE/C4+B,SAAW,CAACK,GAA8B9C,IACxC1mB,EAAO0mB,SAEX,IAAKA,EACH,OAGF,MAAMlB,EAAQT,EAAuB/kB,EAAQ,CAC3CglB,WAAY0B,EAAS1B,WACrBC,WAAY4E,EAAcC,EAAc,IAAIpD,EAAS+C,gBAAiB/C,EAASgD,cAC/ExE,UAAY2E,EAA4B,IAAInD,EAASiD,gBAAiBjD,EAASkD,cAArDE,IAG5B,WACE,MAAMxxB,QAAe1O,EAAAA,EAAAA,IAAQ,qBAAsB4/B,EAAYhE,GAE/D,GAAIltB,EAAQ,CACV,MAAMypB,GAAYE,EAAAA,EAAAA,MAElBF,EAAU2E,SAASyC,QAAQK,GAA+BlxB,GAE1DwpB,EAAAA,EAAAA,IAAUC,KARd,OAiFFG,EAAAA,EAAAA,IAAW,kBAAkB,CAACliB,EAAQ5E,EAAS7Q,MAC7CX,EAAAA,EAAAA,IAAQ,iBAAkBW,OAG5B23B,EAAAA,EAAAA,IAAW,uBAAuB,KAChC,WACE,MAAM5pB,QAAe1O,EAAAA,EAAAA,IAAQ,wBACxB0O,IAELwpB,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa3pB,KAJzC,OAQF4pB,EAAAA,EAAAA,IAAW,yBAAyB,CAACliB,EAAQ5E,EAAS7Q,KACpD,YACEu3B,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa,CAAE8H,mBAAoBx/B,WAExCX,EAAAA,EAAAA,IAAQ,wBAAyBW,KAEpDu3B,EAAAA,EAAAA,KAAUoG,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAa,CAAE8H,oBAAqBx/B,MALlE,OAUF23B,EAAAA,EAAAA,IAAW,mBAAmB,SAACliB,EAAQ5E,GAA0B,IAAjB7Q,EAAiB,uDAAP,IACpD,SAAEy/B,GAAaz/B,EACdy/B,IAAUA,EAAWhqB,EAAO0mB,SAAS+B,MAAMwB,UAEhD,WACE,MAAMC,QAAoBtgC,EAAAA,EAAAA,IAAQ,mBAAoB,CAAEogC,SAAAA,IACnDE,IAELpI,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHiI,YAAAA,KANJ,OAWFhI,EAAAA,EAAAA,IAAW,oBAAoB,CAACliB,EAAQ5E,KACtC,GAAI4E,EAAO4kB,mBAAoB,CAC7B,MAAMuF,EAAa7d,EAAAA,GAAAA,IAAmCtM,EAAO4kB,mBAAmB32B,eAAiB,MAAQ,MACzGmN,EAAQgvB,iBAAiB,CAAED,WAAAA,KAC3BE,EAAAA,EAAAA,IAAcF,GAGhB,WACE,IAAIlI,EAAAA,EAAAA,MAAYyE,SAAS+B,MAAM6B,yBAC7B,OAGF,MAAMC,QAA2B3gC,EAAAA,EAAAA,IAAQ,uBACzC,GAAI2gC,EAAoB,CACtB,MAAMJ,EAAa7d,EAAAA,GAAAA,IAAmCie,EAAmBt8B,eAAiB,MAAQ,MAClGmN,EAAQgvB,iBAAiB,CAAED,WAAAA,KAC3BE,EAAAA,EAAAA,IAAcF,KATlB,OAcFjI,EAAAA,EAAAA,IAAW,iBAAiB,KAC1B,WACE,MAAMsI,QAAkB5gC,EAAAA,EAAAA,IAAQ,kBAE3B4gC,IAEL1I,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHuI,UAAAA,KAPJ,O,mGCxkBFtI,EAAAA,EAAAA,IAAW,aAAa,CAACliB,EAAQ5E,EAAS3S,KAQxC,OAPIR,EAAAA,IACsB,qBAApBQ,EAAO,UAAuD,2BAApBA,EAAO,UAEnDP,QAAQC,IAAI,kBAAmBM,EAAO,SAAU,CAAEA,OAAAA,IAI9CA,EAAO,UACb,IAAK,kBA6CT,SAA0BuX,GACxB,MAAM,oBAAEwoB,EAAF,qBAAuBD,IAAyBkC,EAAAA,EAAAA,IAAqBzqB,GACvEwoB,GAAuBD,IACpBG,EAAAA,EAAAA,OAEFgC,EAAAA,EAAAA,IAAY1qB,EAAO0mB,SAAS+B,MAAMwB,UAjDnCU,CAAiB3qB,GACjB,MAEF,IAAK,4BAiDT,SAAoCvX,GAClC,IAAIuX,GAASiiB,EAAAA,EAAAA,MAEb,MAAM2I,EAAoC,4BAArB5qB,EAAO6qB,UACtBA,EAAYpiC,EAAOqiC,mBAUzB,QARAhJ,EAAAA,EAAAA,IAAU,IACL9hB,EACH6qB,UAAAA,EACApH,eAAe,IAGjBzjB,GAASiiB,EAAAA,EAAAA,MAED4I,GACN,IAAK,gCACEzG,EAAAA,EAAAA,KAAa,IAElBtC,EAAAA,EAAAA,IAAU,IACL9hB,EACH+qB,cAAc,IAEhB,MACF,IAAK,8BACHjJ,EAAAA,EAAAA,IAAU,IACL9hB,EACHgrB,iBAAkBviC,EAAOwiC,eAE3B,MACF,IAAK,kCACHnJ,EAAAA,EAAAA,IAAU,IACL9hB,EACHkrB,SAAUziC,EAAO0iC,OAEnB,MACF,IAAK,gCACHrJ,EAAAA,EAAAA,IAAU,IACL9hB,EACH+jB,qBAAqB,EACrBqH,WAAY3iC,EAAO4iC,SAErB,MACF,IAAK,0BACH,GAAIT,EACF,OAGGxG,EAAAA,EAAAA,KAAa,IAElBtC,EAAAA,EAAAA,IAAU,IACL9hB,EACH+qB,cAAc,KAnGhBO,CAA2B7iC,GAC3B,MAEF,IAAK,4BAwGT,SAAoCA,IAClCq5B,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHyB,UAAWj7B,EAAOW,UA1GhBmiC,CAA2B9iC,GAC3B,MAEF,IAAK,yBA2GT,SAAiCA,GAC/B,MAAM,gBAAEk8B,GAAoBl8B,EACtBuX,GAASiiB,EAAAA,EAAAA,MAEX0C,IAAoB3kB,EAAO2kB,mBAI/B7C,EAAAA,EAAAA,IAAU,IACL9hB,EACH2kB,gBAAAA,IAGsB,0BAApBA,IACFj1B,EAAAA,EAAAA,MAAc87B,WAxHZC,CAAwBhjC,GACxB,MAEF,IAAK,iBAyHT,SAAyBA,GACvB,MAAM,YAAEw6B,GAAgBx6B,GAClB,eAAEijC,EAAF,UAAkBb,IAAc5I,EAAAA,EAAAA,MAChC0J,GAAW1I,IAAgBA,EAAY2I,SAExCF,GAAgC,4BAAdb,IAA2Cc,IAIlEj8B,EAAAA,EAAAA,MAAcm8B,YAAY,CAAE5I,YAAAA,IAjIxB6I,CAAgBrjC,GAChB,MAEF,IAAK,0BAiIT,SAAkCA,GAChC,MAAMuX,GAASiiB,EAAAA,EAAAA,MAEXjiB,EAAOgoB,mBAAqBv/B,EAAOu/B,mBAIvClG,EAAAA,EAAAA,IAAU,IACL9hB,EACHgoB,iBAAkBv/B,EAAOu/B,mBAzIvB+D,CAAyBtjC,GACzB,MAEF,IAAK,qBA0IT,SAA6BA,GAC3B,MAAM,YAAE69B,GAAgB79B,GAExBq5B,EAAAA,EAAAA,IAAU,KACLyE,EAAAA,EAAAA,KAAWtE,EAAAA,EAAAA,MAAaqE,EAAYh0B,GAAIg0B,GAC3CrC,cAAeqC,EAAYh0B,KAM/B,SAA6B2xB,GAC3B,MAAM+H,EAAkBC,aAAaC,QAAQ1kB,EAAAA,IAC7C,IAAKwkB,EAAiB,OAEtB,MAAMG,EAAWC,KAAKC,MAAML,GAC5BG,EAAS75B,GAAK2xB,EAEdgI,aAAaK,QAAQ9kB,EAAAA,GAAkB4kB,KAAKG,UAAUJ,IAVtDK,CAAoBlG,EAAYh0B,IAjJ5Bm6B,CAAoBhkC,GACpB,MAEF,IAAK,QAAS,CACiB,oBAAzBA,EAAOI,MAAMO,SACfgS,EAAQowB,UAGV,MAAMkB,GAAuBC,EAAAA,EAAAA,IAAiBlkC,EAAOI,OACjD6jC,EACFtxB,EAAQwxB,gBAAgB,CAAE/jC,MAAO6jC,IACxBtxB,EAAQyxB,YACjBzxB,EAAQyxB,WAAW,CAAEtkC,KAAME,EAAOI,QAGpC,Y,mGC6BN,WACE,SAASikC,IACP,MAAMC,EAAoB37B,SAAS47B,gBAAgB39B,UAAUV,MAAM,eAC7Ds+B,EAAeF,EAAoBA,EAAkB,GAAK,QAC1D/sB,GAASiiB,EAAAA,EAAAA,MACTiL,GAAYC,EAAAA,EAAAA,IAAYntB,IACxB,eAAEotB,GAAmBptB,EAAO0mB,SAAS+B,MAEvCyE,IAAcD,KAChBI,EAAAA,EAAAA,GAAYH,EAAWE,IAAmB5jB,EAAAA,KAE1CsY,EAAAA,EAAAA,IAAU,IAAK9hB,KAInB,MAAMstB,EAAM/jC,OAAOgkC,WAAW,gCACM,mBAAzBD,EAAIhlC,iBACbglC,EAAIhlC,iBAAiB,SAAUwkC,GACK,mBAApBQ,EAAIE,aACpBF,EAAIE,YAAYV,GAzGpBW,IAEAvL,EAAAA,EAAAA,IAAW,QAASliB,IAClB,MAAM,eAAEotB,EAAF,gBAAkBM,EAAlB,SAAmCzD,GAAajqB,EAAO0mB,SAAS+B,MAChEkF,GAAQR,EAAAA,EAAAA,IAAYntB,IAErB0qB,EAAAA,EAAAA,IAAYT,OAAU91B,GAAW,GAEtC/C,SAAS47B,gBAAgBprB,MAAMgsB,YAC7B,uBAAyB,GAAExhC,KAAKsP,IAAIgyB,EAAiB/tB,EAAAA,GAAS,GAAK,SAErEvO,SAAS47B,gBAAgBprB,MAAMgsB,YAAY,wBAA0B,GAAExhC,KAAKC,MAAwB,OAAlBqhC,QAClFt8B,SAAS47B,gBAAgBprB,MAAMgsB,YAAY,sBAAwB,GAAEF,OACrEt8B,SAAS47B,gBAAgBhT,aAAa,yBAA0B0T,EAAgBG,YAChFz8B,SAAS+kB,KAAK3B,UAAU/X,IAAI,WAC5BrL,SAAS+kB,KAAK3B,UAAU/X,IAAK,mBAAkB2wB,KAC/Ch8B,SAAS+kB,KAAK3B,UAAU/X,IAAIqxB,EAAAA,GAAe,eAAiB,mBAE5DT,EAAAA,EAAAA,GAAYM,EAAOP,IAAmB5jB,EAAAA,KAEtCukB,EAAAA,EAAAA,MACAC,EAAAA,EAAAA,MAEIruB,EAAAA,GACFvO,SAAS+kB,KAAK3B,UAAU/X,IAAI,UACnBwxB,EAAAA,GACT78B,SAAS+kB,KAAK3B,UAAU/X,IAAI,cACnByxB,EAAAA,IACT98B,SAAS+kB,KAAK3B,UAAU/X,IAAI,YAE1B0xB,EAAAA,IACF/8B,SAAS+kB,KAAK3B,UAAU/X,IAAI,iBAIhCylB,EAAAA,EAAAA,IAAW,gBAAgB,CAACliB,EAAQ5E,EAAS7Q,KAC3C,MAAM,aAAE6jC,GAAiB7jC,EAMzB,OAJqB,IAAjB6jC,GACFh9B,SAAS+kB,KAAK3B,UAAU6Z,OAAO,WAG1B,IACFruB,EACHouB,aAAAA,OAIJlM,EAAAA,EAAAA,IAAW,sBAAsB,CAACliB,EAAQ5E,EAAS7Q,KACjD,MAAM,YAAEi5B,GAAgBj5B,EAExB,MAAO,IACFyV,EACHsuB,gBAAiB9K,OAIrBtB,EAAAA,EAAAA,IAAW,qBAAqB,CAACliB,EAAQ5E,EAAS7Q,KACzC,IACFyV,EACH0rB,eAAgB95B,QAAQrH,QAI5B23B,EAAAA,EAAAA,IAAW,kBAAmBliB,IACrB,IACFA,EACH0jB,eAAWvvB,OAIf+tB,EAAAA,EAAAA,IAAW,4BAA4B,KACrCz4B,YAAW,MACTq4B,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHsM,6BAA6B,IAE/Bn9B,SAAS+kB,KAAK3B,UAAU6Z,OAAO,gBA/EA,MAkFjCvM,EAAAA,EAAAA,IAAU,KACLG,EAAAA,EAAAA,MACHsM,6BAA6B,GAC5B,CAAEvM,gBAAgB,Q,wCC7FvBE,EAAAA,EAAAA,IAAW,oBAAoB,CAACliB,EAAQ5E,EAAS7Q,KACxC29B,EAAAA,EAAAA,IAAgBloB,EAAQzV,MAGjC23B,EAAAA,EAAAA,IAAW,oBAAoB,CAACliB,EAAQ5E,EAAS7Q,KAC/C,MAAM,MAAEojC,KAAUjH,GAAan8B,EAE/B,OAAOikC,EAAAA,EAAAA,IAAqBxuB,EAAQ2tB,EAAOjH,O,0VCO7C,MAAM+H,EAAsBxjC,KAAKC,MAAQ,IAAO,SAE1CwjC,EAAyB,IACzBC,EAAuB,IAEtB,SAASjJ,EAASkJ,GAEvB,MAAwB,iBAAbA,EACFA,EAAW,GAGZA,EAASt0B,WAAW,KAGvB,SAASu0B,EAAYp5B,GAC1B,OAAOq5B,EAAiBr5B,IAASs5B,EAAiBt5B,GAG7C,SAASq5B,EAAiBr5B,GAC/B,MAAqB,uBAAdA,EAAKjN,KAGP,SAASumC,EAAiBt5B,GAC/B,MAAqB,uBAAdA,EAAKjN,KAGP,SAASwmC,EAAcv5B,GAC5B,MAAqB,oBAAdA,EAAKjN,KAGP,SAASymC,EAAgBx5B,GAC9B,MAAqB,oBAAdA,EAAKjN,MAA4C,uBAAdiN,EAAKjN,KAG1C,SAAS0mC,EAAqBx8B,GACnC,OAAOA,IAAW8Z,EAAAA,GAGb,SAAS2iB,EAAkB15B,GAChC,OAAQA,EAAKjN,MACX,IAAK,kBACH,MAAO,cACT,IAAK,qBACL,IAAK,qBACH,MAAO,gBACT,IAAK,kBACH,MAAO,kBACT,QACE,MAAO,QAIN,SAAS4mC,EAAqB35B,GACnC,GAAkB,oBAAdA,EAAKjN,MAA4C,mBAAdiN,EAAKjN,KAG5C,OAAOiN,EAAKnD,GAIP,SAASoD,EAAazC,EAAcwC,EAAed,GAAgC,IAAhB06B,EAAgB,wDACxF,OAAIA,GAAW16B,GAAQc,EAAKnD,KAAOqC,EAAKrC,IAAMqC,EAAK06B,OAC1Cp8B,EAAK,iBAEPwC,EAAKhF,OAASwC,EAAK,cAGrB,SAASq8B,EAAmB75B,GACjC,GAAKA,EAAK+wB,SAGV,OAAO/wB,EAAK+wB,SAASN,MAGhB,SAASqJ,EAAY95B,GAC1B,MAAM,SAAE8E,GAAa9E,EACrB,GAAI8E,EACF,MAAQ,gBAAeA,IAGzB,MAAM,WAAEi1B,GAAe/5B,EAAK+wB,UAAY,GAExC,OAAOgJ,EAGF,SAASC,EACdC,GAEA,IADAj3B,EACA,uDADyB,SAEzB,GAAKi3B,EAAMC,WAIX,MACO,QADCl3B,EAEI,UAASi3B,EAAMp9B,MAAMo9B,EAAMC,aAE3B,SAAQD,EAAMp9B,MAAMo9B,EAAMC,aAIjC,SAASC,EAAkBn6B,GAChC,OAAQA,EAAKo6B,YAGR,SAASC,EAAYr6B,GAC1B,OAAO7D,QAAQ6D,EAAKs6B,aAGf,SAASC,EAAiBv6B,EAAeskB,GAC9C,QAAOtkB,EAAKs6B,aAAct6B,EAAKs6B,YAAYhW,GAGtC,SAASkW,EAAkBx6B,EAAeskB,GAAgC,QAC/E,OAAOnoB,SACL,UAAC6D,EAAKy6B,+BAAN,aAAC,EAA+BnW,MAAhC,UACItkB,EAAK06B,2BADT,aACI,EAA2BpW,KAI5B,SAASqW,EAAiB36B,EAAe46B,GAC9C,OAAIA,IAAa1kC,EAAAA,MAIb8J,EAAK66B,cAAgB76B,EAAK86B,YAAc96B,EAAK+6B,aAAetB,EAAqBz5B,EAAKnD,SAItFmD,EAAKg7B,aAIL/K,EAASjwB,EAAKnD,MAId08B,EAAcv5B,GACTu6B,EAAiBv6B,EAAM,gBAGzBq6B,EAAYr6B,KAAUw6B,EAAkBx6B,EAAM,kBAWhD,SAASi7B,EAA4Bj7B,GAAkE,IAAlDk7B,EAAkD,wDAC5G,IAAKl7B,EACH,MAAO,CACLm7B,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EACjBC,aAAa,EACbC,qBAAqB,GAIzB,MAAMC,EAAUnB,EAAYr6B,GAE5B,MAAO,CACLm7B,eAAgBK,IAAYhB,EAAkBx6B,EAAM,aACpDo7B,gBAAiBI,IAAYhB,EAAkBx6B,EAAM,iBAAmBiwB,EAASjwB,EAAKnD,KAAOq+B,GAC7FG,gBAAiBG,IAAYhB,EAAkBx6B,EAAM,gBACrDs7B,YAAaE,IAAYhB,EAAkBx6B,EAAM,YACjDu7B,oBAAqBC,IAAYhB,EAAkBx6B,EAAM,eAItD,SAASy7B,EACdj+B,EACAi9B,EACAC,GAEA,GAAID,MAAAA,GAAAA,EAAyBiB,aAAc,CACzC,MAAM,UAAEC,GAAclB,EACtB,OAAOkB,GAAaA,EAAY3C,EAC5Bx7B,EACA,gDACAA,EACE,mBACA,EAACo+B,EAAAA,EAAAA,IAAmB,IAAIpmC,KAAiB,IAAZmmC,GAAmBn+B,EAAKsB,OAAO+8B,EAAAA,EAAAA,IAAWr+B,EAAkB,IAAZm+B,MAG/En+B,EAAK,mDAGX,GAAIk9B,MAAAA,GAAAA,EAAqBgB,aACvB,OAAOl+B,EAAK,iEAMT,SAASs+B,EAAuB97B,GACrC,GAAKA,GAASA,EAAK+wB,SAInB,OAAO/wB,EAAK+wB,SAASgL,SAOhB,SAASC,EAAeh8B,GAC7B,OAAOA,EAAKi8B,WAAahlB,EAAAA,GAGpB,SAASilB,EACdl8B,EAAem8B,GACf,IAD+CC,EAC/C,uDADmG,GAGnG,OAAIA,EAAiBp8B,EAAKnD,UAA6C6B,IAAtC09B,EAAiBp8B,EAAKnD,IAAIw/B,QAClDD,EAAiBp8B,EAAKnD,IAAIw/B,QAIjCr8B,EAAKq8B,SACDpM,EAASjwB,EAAKnD,MAAQs/B,EAAeG,8BACrC/C,EAAcv5B,KAAUm8B,EAAeI,2BACvCnD,EAAYp5B,KAAUm8B,EAAeK,sBAItC,SAASC,EACdz8B,EAAem8B,GACf,IAD+CC,EAC/C,uDADmG,GAEnG,MAAM,8BACJM,GAAgC,EAD5B,2BAEJC,GAA6B,EAFzB,uBAGJC,GAAyB,GACvBT,EAEJ,OAAIC,EAAiBp8B,EAAKnD,UAAwD6B,IAAjD09B,EAAiBp8B,EAAKnD,IAAI+1B,mBAClDwJ,EAAiBp8B,EAAKnD,IAAI+1B,mBAG3B3C,EAASjwB,EAAKnD,KAAO6/B,GACvBnD,EAAcv5B,IAAS28B,GACvBvD,EAAYp5B,IAAS48B,EAGtB,SAASC,EAAiB78B,GAC/B,OAAOq5B,EAAiBr5B,KAAWs5B,EAAiBt5B,IAASu5B,EAAcv5B,KAAUA,EAAKg7B,UAGrF,SAAS8B,EAAyBt/B,EAAcu/B,EAAuBC,GAC5E,MAAM,GACJngC,EADI,MACA7B,EADA,SACOiiC,EADP,YACiBv7B,EADjB,cAC8Bw7B,EAD9B,gBAEJC,EAFI,gBAEaC,EAFb,gBAGJC,EAHI,aAGaC,EAHb,YAG2BC,KAC5Bx7B,GACDg7B,EAIJ,YACiBr+B,IAAfs+B,IACEhoC,OAAO+rB,OAAOhf,GAAS5C,OAAOhD,SAAShF,OAAS,GAC5CgmC,MAAAA,GAAAA,EAAiBhmC,QACjBimC,MAAAA,GAAAA,EAAiBjmC,QAEhBqG,EAAK,QAASw/B,GAInBj7B,EAAQy7B,KACHhgC,EAAK,cACHuE,EAAQ07B,OACVjgC,EAAK,gBACHuE,EAAQ27B,SACVlgC,EAAK,kBACHuE,EAAQ47B,SACVngC,EAAK,kBACHuE,EAAQ67B,YACVpgC,EAAK,0BAEZ,EAIG,SAASqgC,EAAqBrgC,EAAcP,EAAgBN,GACjE,GAAKA,IAAUszB,EAAShzB,GAIxB,OAAIN,EAAOi9B,OACFp8B,EAAK,YAGPsgC,EAAAA,EAAAA,IAAuBnhC,GAGzB,SAASohC,EACdC,EACAlO,GAGA,IAFAmO,EAEA,wDADAC,EACA,uCACA,OAAOjT,EAAAA,EAAAA,IAAQ+S,GAAUnhC,IACvB,MAAMmD,EAAO8vB,EAAUjzB,GACvB,IAAKmD,EACH,OAAO,EAGT,IAAIm+B,EAAW,EAcf,OAZIn+B,EAAKo6B,cACP+D,GAAYn+B,EAAKo6B,YAAYgE,MAG3BH,GAA4Bj+B,EAAKq+B,aACnCF,GAAYlF,GAGViF,GAAeA,EAAYv/B,SAAS9B,KACtCshC,EAAW3oC,KAAKC,MAAQyjC,GAAwBgF,EAAY/mC,OAAS+mC,EAAYniC,QAAQc,KAGpFshC,IACN,QAGE,SAASG,EACd9gC,EACAwgC,EACAlO,EACAhmB,EACA0kB,GAEA,IAAK1kB,EACH,OAAOk0B,EAGT,MAAMO,GAAcC,EAAAA,EAAAA,GAA4B10B,GAEhD,OAAOk0B,EAAQ7+B,QAAQtC,IACrB,MAAMmD,EAAO8vB,EAAUjzB,GACvB,QAAKmD,GAIEu+B,EAAYt+B,EAAazC,EAAMwC,OAAMtB,EAAW7B,IAAO2xB,S,ukCC/VlE,MAAMlqB,EAAU,IAAI/H,OAAOgI,EAAAA,GAAkB,KAItC,SAASk6B,EAAc9qC,GAC5B,MAAM,OAAEsJ,EAAF,GAAUJ,GAAOlJ,EAEvB,OAGK,SAAyBsJ,EAAgByhC,GAC9C,MAAQ,MAAKzhC,KAAUyhC,IAJhBC,CAAgB1hC,EAAQJ,GAO1B,SAAS+hC,EAAgBta,GAC9B,MAAMprB,EAAQorB,EAAIprB,MAAM,qBAExB,MAAO,CAAE+D,OAAQ/D,EAAM,GAAI/F,UAAWw4B,OAAOzyB,EAAM,KAG9C,SAAS2lC,EAAqBlrC,GACnC,OAAOA,EAAQmrC,iBAAmBnrC,EAAQkJ,GAGrC,SAASoE,EAAetN,GAC7B,MAAM,KACJgG,EADI,QACEolC,EADF,MACWxO,EADX,MACkByO,EADlB,MACyBC,EADzB,MACgCC,EADhC,SACuCvjC,EADvC,KACiDwjC,EADjD,QACuDC,EADvD,QACgEC,EADhE,QACyE5/B,GAC3E9L,EAAQuG,QAEZ,OAAIP,EACKA,EAAKA,KAGVolC,GAAWxO,GAASyO,GAASC,GAASC,GAASvjC,GAAY0jC,GAAWF,GAAQC,GAAW3/B,OAA7F,EAIOmX,EAAAA,GAGF,SAAS0oB,EAAsB3rC,GACpC,MAAM,KACJgG,EADI,QACEolC,EADF,MACWxO,EADX,MACkByO,EADlB,MACyBC,EADzB,MACgCC,EADhC,SACuCvjC,EADvC,KACiDwjC,EADjD,QACuDC,EADvD,QACgEC,GAClE1rC,EAAQuG,QAEZ,SAAI6kC,GAAYC,MAAAA,GAAAA,EAAOO,aAIlB5lC,GAAQ42B,GAASyO,GAASC,GAASC,GAASvjC,GAAYwjC,GAAQC,GAAWC,MAKzEG,EAAAA,EAAAA,GAAqB7lC,EAAKA,QAAS,GAGrC,SAAS8lC,EAAsB9rC,GACpC,MAAM,KAAEgG,GAAShG,EAAQuG,QACzB,GAAMP,GAAQA,EAAKA,KAAKxC,QAAU,GAIK,IAAnCmoC,EAAsB3rC,GAI1B,OAAOgG,EAAKA,KAGP,SAAS+lC,EAAsB/rC,GACpC,MAAM,KAAEgG,GAAShG,EAAQuG,QAEzB,IAAIhB,EACJ,GAAIS,MAAAA,GAAAA,EAAMoH,SAAU,CAClB,IAAI4+B,EAAOhmC,EAAKoH,SAAS6+B,MAAM36B,GAAWA,EAAOlS,OAASkD,EAAAA,GAAAA,UAK1D,GAJI0pC,IACFzmC,EAAQymC,EAAK9mC,IAAKK,MAAMoL,KAGrBpL,IACHymC,EAAOhmC,EAAKoH,SAAS6+B,MAAM36B,GAAWA,EAAOlS,OAASkD,EAAAA,GAAAA,MAClD0pC,GAAM,CACR,MAAM,OAAEn4B,EAAF,OAAUrQ,GAAWwoC,EAC3BzmC,EAAQS,EAAKA,KAAK0G,UAAUmH,EAAQA,EAASrQ,GAAQ+B,MAAMoL,IASjE,IAJKpL,GAASS,IACZT,EAAQS,EAAKA,KAAKT,MAAMoL,IAGrBpL,EAIL,MAAO,CACLL,IAAKK,EAAM,GACXC,OAAQD,EAAM,IAkBX,SAAS2mC,EAAalsC,GAC3B,OAAOA,EAAQmsC,WAGV,SAASC,EAAepsC,GAC7B,OAAOwI,QAAQxI,EAAQqsC,kBAGlB,SAASC,EAAmBtsC,GACjC,OAAOwI,QAAQxI,EAAQusC,aAGlB,SAASC,EAAgBxsC,GAC9B,OAAOwI,QAAQxI,EAAQuG,QAAQ6D,QAG1B,SAASqiC,EAA6BzsC,GAC3C,OAAOA,EAAQsJ,SAAW6Z,EAAAA,IAAiCngB,KAAKoP,MAAMpS,EAAQkJ,MAAQlJ,EAAQkJ,GAGzF,SAASwjC,EAAsB1sC,GACpC,OAAOwI,QAAQxI,EAAQ2sC,aAAcrQ,EAAAA,EAAAA,IAASt8B,EAAQ2sC,WAAcT,EAAalsC,GAG5E,SAAS4sC,EAAe/iC,EAAcb,GAC3C,OAAOszB,EAAAA,EAAAA,IAAStzB,EAAOE,KAAMiD,EAAAA,EAAAA,IAAgBnD,IAAqBsD,EAAAA,EAAAA,GAAazC,EAAMb,GAGhF,SAAS6jC,EAAgB7sC,GAC9B,OAAKA,EAAQ8sC,aAImB,8BAAzB9sC,EAAQ8sC,aAA+C,SAAW,UAHhE,YAMJ,SAASC,EAAe/sC,GAC7B,OAAOA,EAAQkJ,IAAMiY,EAAAA,GAGhB,SAAS6rB,EAAsBhtC,GACpC,OAAOA,EAAQuG,QAAQ6D,QAA0C,iBAAhCpK,EAAQuG,QAAQ6D,OAAOhL,KAGnD,SAAS6tC,EAA0BjtC,GACxC,MAAM,QAAEuG,GAAYvG,EAEdqrC,EAAQ9kC,EAAQklC,QAAUllC,EAAQklC,QAAQJ,MAAQ9kC,EAAQ8kC,MAC1DzO,EAAQr2B,EAAQklC,QAAUllC,EAAQklC,QAAQ7O,MAAQr2B,EAAQq2B,MAC1D50B,EAAWzB,EAAQklC,QAAUllC,EAAQklC,QAAQzjC,SAAWzB,EAAQyB,SACtE,GAAIA,EACF,OAAOA,EAASC,SAGlB,GAAIojC,EACF,OAAOA,EAAMpjC,SAGf,GAAI1B,EAAQ6kC,QAAS,CACnB,MAAM9iC,EAAY/B,EAAQ6kC,QAAQ8B,SAAW,MAAQ3mC,EAAQ6kC,QAAQ+B,MACjE,QAASC,EAAAA,EAAAA,MAAoB,OAAS,MAC1C,MAAQ,GAAE7mC,EAAQ6kC,QAAQliC,MAAMZ,IAGlC,GAAI/B,EAAQ+kC,MACV,OAAO/kC,EAAQ+kC,MAAMrjC,SAGvB,MAAMolC,EAAevC,EAAc9qC,GAEnC,OAAI48B,EACM,GAAEyQ,QAGR9mC,EAAQglC,MACH+B,EAAAA,GAAqB,GAAED,QAAsB,GAAEA,QAGjDA,EAGF,SAASE,EAAkBC,GAChC,OAAQA,EAAUC,QAAQ9/B,MAAMua,GAAMA,EAAEwlB,MAAQ,I,cC/MlD,MAAMC,EAAgB,CAAC,IAAK,IAAK,IAAK,KACzBlgC,EAA2B,GAEjC,SAAS1B,EACdlC,EACA7J,GAGA,IAFAwN,EAEA,wDADAL,EACA,uDADiBM,EAEjB,MAAMG,GAASJ,GAAWK,EAAuB7N,GAC3C8N,EAAiBF,EAAS,GAAEA,KAAW,GACvC5H,GAAOkG,EAAAA,EAAAA,GAAS0hC,EAA2B5tC,GAAUmN,GACrDY,EAAcC,EAA6BnE,EAAM7J,EAASgG,GAEhE,MAAQ,GAAE8H,IAAiBC,IAGtB,SAAS6/B,EAA2B5tC,GACzC,MAAMgG,EAAOsH,EAAetN,GAC5B,IAAKgG,EACH,OAGF,MAAM,SAAEoH,GAAapN,EAAQuG,QAAQP,MAAQ,GAC7C,OAAKoH,MAAAA,GAAAA,EAAU5J,OAIR4J,EAASmB,QAAO,CAACs/B,EAAD,KAAuC,IAA7B,KAAEzuC,EAAF,OAAQyU,EAAR,OAAgBrQ,GAAa,EAC5D,GAAIpE,IAASkD,EAAAA,GAAAA,QACX,OAAOurC,EAGT,MAAMC,EA+FH,SAAgCtqC,GACrC,OAAO,IAAImJ,MAAMnJ,GACduqC,UAAKhjC,GACLO,KAAI,IAAMqiC,EAAc3qC,KAAKC,MAAMD,KAAKgrC,SAAWL,EAAcnqC,WACjEuB,KAAK,IAnGUkpC,CAAuBzqC,GAGvC,MAAQ,GAAEqqC,EAAQ75B,OAAO,EAAGH,KAAUi6B,IAAUD,EAAQ75B,OAAOH,EAASrQ,EAAQqqC,EAAQrqC,YACvFwC,GAZMA,EAeJ,SAAS6H,EAAuB7N,GACrC,MAAM,MACJ48B,EADI,MACGyO,EADH,MACUC,EADV,MACiBC,EADjB,SACwBvjC,EADxB,QACkCojC,EADlC,KAC2CI,GAC7CxrC,EAAQuG,QAEZ,OAAIvG,EAAQkuC,WAAatR,EAChB,KAGLyO,EACK,KAGLD,EACKA,EAAQx9B,MAGb09B,EACK,KAGLC,EACK,KAGLvjC,EACK,KAGLwjC,EACK,UADT,EAOK,SAASx9B,EAA6BnE,EAAc7J,EAAqBmuC,GAC9E,MAAM,KACJnoC,EADI,MACE42B,EADF,MACSyO,EADT,MACgBC,EADhB,MACuBC,EADvB,SAC8BvjC,EAD9B,QACwCojC,EADxC,QACiDM,EADjD,KAC0DF,EAD1D,QACgE1/B,GAClE9L,EAAQuG,QAEZ,OAAIvG,EAAQkuC,UACHC,GAAiBtkC,EAAK,oBAG3B+yB,EACKuR,GAAiBtkC,EAAK,eAG3BwhC,EACK8C,GAAiBtkC,EAAKwhC,EAAM8B,MAAQ,YAAc,eAGvD/B,EACKvhC,EAAK,iBAAiB+B,OAG3B0/B,EAsCN,SAAgCtrC,GAC9B,MAAM,MAAEsrC,EAAF,KAAStlC,GAAShG,EAAQuG,QAEhC,OAAQ+kC,GAAS,CAACA,EAAMjkC,MAAOikC,EAAM8C,WAAW5iC,OAAOhD,SAASzD,KAAK,SAAYiB,MAAAA,OAA1E,EAA0EA,EAAMA,MAxC9EqoC,CAAuBruC,IAAY6J,EAAK,eAG7C0hC,EACK4C,GAAiBtkC,EAAK,eAG3B7B,EACKmmC,GAAiBnmC,EAASC,SAG/ByjC,EACK7hC,EAAK,iBAGV2hC,EACKA,EAAK8C,QAAQC,SAGlBziC,EACK,UAGL9F,EACKmoC,EAGFlrB,EAAAA,G,cCrHF,SAASurB,EAAkBxuC,GAChC,OAAOA,EAAQuG,QAGV,SAASkoC,EAAgBzuC,GAC9B,OAAOwI,QACLkmC,EAAgB1uC,IACb2uC,EAAgB3uC,IAChB4uC,EAAmB5uC,IACnB6uC,EAAkB7uC,IAqDlB,SAA2BA,GAChC,OAAOA,EAAQuG,QAAQmlC,QArDlBoD,CAAkB9uC,IAClB+uC,EAAe/uC,IACfgvC,EAAiBhvC,IACjBivC,EAAgBjvC,IAChBkvC,EAAgBlvC,IAIhB,SAAS0uC,EAAgB1uC,GAC9B,OAAOA,EAAQuG,QAAQq2B,MAGlB,SAAS+R,EAAgB3uC,GAC9B,OAAOA,EAAQuG,QAAQ8kC,MAGlB,SAAS8D,EAAqBnvC,GACnC,MAAM,MAAEqrC,GAAUrrC,EAAQuG,QAE1B,OAAO8kC,MAAAA,GAAAA,EAAOO,QAAUP,OAAQtgC,EAG3B,SAASikC,EAAiBhvC,GAC/B,OAAOA,EAAQuG,QAAQ6D,OAGlB,SAAS6kC,EAAgBjvC,GAC9B,OAAOA,EAAQuG,QAAQ+kC,MAGlB,SAAS4D,EAAgBlvC,GAC9B,OAAOA,EAAQuG,QAAQglC,MAGlB,SAASsD,EAAkB7uC,GAChC,OAAOA,EAAQuG,QAAQ6kC,QAGlB,SAASwD,EAAmB5uC,GACjC,OAAOA,EAAQuG,QAAQyB,SAGlB,SAASonC,EAAuBpvC,GACrC,MAAMgI,EAAW4mC,EAAmB5uC,GACpC,OAAOgI,EAAkC,UAAvBA,EAASqnC,eAAwBtkC,EAG9C,SAASukC,EAAuBtvC,GACrC,MAAMgI,EAAW4mC,EAAmB5uC,GACpC,OAAOgI,EAAkC,UAAvBA,EAASqnC,eAAwBtkC,EAO9C,SAASgkC,EAAe/uC,GAC7B,OAAOA,EAAQuG,QAAQilC,KAGlB,SAAS+D,EAAkBvvC,GAChC,OAAOA,EAAQuG,QAAQuF,QAGlB,SAAS0jC,EAAkBxvC,GAChC,OAAOA,EAAQuG,QAAQklC,QAGlB,SAASgE,EAAuBzvC,GAAqB,MAC1D,iBAAOwvC,EAAkBxvC,UAAzB,aAAO,EAA4B48B,MAO9B,SAAS8S,EAAuB1vC,GAA2C,MAChF,iBAAOwvC,EAAkBxvC,UAAzB,aAAO,EAA4BqrC,MAkB9B,SAASsE,GAA4B3vC,GAAqB,MAC/D,iBAhBK,SAAkCA,GACvC,MAAM4vC,EAAQlB,EAAgB1uC,IACzB2uC,EAAgB3uC,IAChB4uC,EAAmB5uC,IACnB6uC,EAAkB7uC,IAClByvC,EAAuBzvC,IACvB0vC,EAAuB1vC,GAE5B,GAAK4vC,EAIL,OAAOA,EAAMlnC,UAINmnC,CAAyB7vC,UAAhC,aAAO,EAAmC8vC,QAGrC,SAASC,GACd/vC,EACAsH,GAEA,MAAM,MACJs1B,EADI,MACGyO,EADH,QACUD,EADV,MACmBE,EADnB,MAC0BC,EAD1B,SACiCvjC,GACnChI,EAAQuG,QACNypC,EAAeP,EAAuBzvC,GACtCiwC,EAAeP,EAAuB1vC,GAEtCkwC,EAAe7E,GAAS4E,EACxBE,EAAevT,GAASoT,EAE9B,KAAMG,GAAgBD,GAAgB9E,GAAWE,GAASC,GAASvjC,GACjE,OAGF,MAAMooC,GAAWD,GAAgBD,GAAgB9E,GAAWE,GAASC,GAASvjC,GAAWkB,GACnFzG,EAAQ,GAAEqoC,EAAc9qC,KAAWowC,EAAW,IAAGA,IAAY,KAEnE,GAAIF,EACF,OAAQ5oC,GACN,IAAK,QACL,IAAK,YAIL,IAAK,gBACH,MAAQ,GAAE7E,WAHZ,IAAK,SACH,OAAQ4tC,GAAuBrwC,QAAyD+K,EAA9CulC,GAAwBJ,EAAcztC,GAGlF,IAAK,aACH,OAAO6tC,GAAwBJ,EAAcztC,GAC/C,IAAK,WACH,MAAQ,GAAEA,aAIhB,GAAI0tC,EACF,OAAQ7oC,GACN,IAAK,QACL,IAAK,YACH,MAAQ,GAAE7E,WACZ,IAAK,SACH,OAAQ4tC,GAAuBrwC,QAA8B+K,EAAlB,GAAEtI,WAC/C,IAAK,gBACH,MAAQ,GAAEA,WACZ,IAAK,aACL,IAAK,WACH,MAAQ,GAAEA,WAIhB,GAAIuF,EACF,OAAQV,GACN,IAAK,QACL,IAAK,YACL,IAAK,SACL,IAAK,gBACH,KAAKiB,EAAAA,EAAAA,IAAsBP,IAAaqoC,GAAuBrwC,GAC7D,OAGF,MAAQ,GAAEyC,WACZ,IAAK,aACL,IAAK,WACH,OAAOA,EAIb,GAAI2oC,EACF,OAAQ9jC,GACN,IAAK,QACH,OACF,IAAK,YACH,MAAQ,GAAE7E,WACZ,IAAK,SACH,OAAOA,EACT,IAAK,WACH,MAAQ,GAAEA,aAIhB,GAAI6oC,EACF,OAAQhkC,GACN,IAAK,QACL,IAAK,YACH,OAAOipC,GAAiBjF,GAAU,GAAE7oC,gBAAgBsI,EACtD,IAAK,SACH,OAAOulC,GAAwBhF,EAAO7oC,GACxC,IAAK,WACH,MAAQ,GAAEA,aAIhB,GAAI8oC,EACF,OAAQjkC,GACN,IAAK,QACL,IAAK,YACH,OACF,IAAK,SACH,OAAO7E,EACT,IAAK,WACH,MAAQ,GAAEA,cAOlB,SAAS6tC,GAAwBV,EAA4BntC,GAC3D,OAAI+tC,EAAAA,IAA4BzL,EAAAA,GACtB,GAAEtiC,cAAiBmtC,EAAMvgC,iBAAiBugC,EAAM1nC,WAGnDzF,EAGF,SAAS8tC,GAAiBX,GAC/B,OAAOA,EAAMa,gBAAkBb,EAAMa,eAAejtC,OAAS,EAGxD,SAASktC,GACd1wC,EAAqBsH,GAErB,MAAM,QACJ8jC,EADI,MACKC,EADL,MACYC,EADZ,MACmBC,GACrBvrC,EAAQuG,QAENoqC,EAAYtF,GAASqE,EAAuB1vC,GAElD,OAAIorC,GAAsB,WAAX9jC,GAAuB8jC,EAAQ8B,SACrC7qC,EAAAA,GAAAA,OACEsuC,GAAaH,EAAAA,KACX,eAAXlpC,GAAsC,WAAXA,GAEpBjF,EAAAA,GAAAA,YACEipC,GAASC,EAEdA,IAAU+B,EAAAA,GACLjrC,EAAAA,GAAAA,QAGFA,EAAAA,GAAAA,YAGFA,EAAAA,GAAAA,QAGF,SAASuuC,GAAmB5wC,GACjC,MAAM,MACJ48B,EADI,MACGyO,EADH,SACUrjC,GACZhI,EAAQuG,QACNypC,EAAeP,EAAuBzvC,GACtCiwC,EAAeP,EAAuB1vC,GAE5C,GAAI48B,GAASoT,EACX,MAAQ,QAAOhwC,EAAQyqC,YAGzB,MAAM,SAAExiC,GAAaojC,GAAS4E,GAAgBjoC,GAAY,GAE1D,OAAOC,EAGF,SAAS4oC,GAAmB7wC,GACjC,MAAM,MAAEqrC,EAAF,SAASrjC,GAAahI,EAAQuG,QAC9B0pC,EAAeP,EAAuB1vC,IACtC,KAAEqP,GAASg8B,GAAS4E,GAAgBjoC,GAAY,GAEtD,OAAOqH,EAGF,SAASghC,GAAuBrwC,GACrC,MAAM,MAAE48B,EAAF,MAASyO,EAAT,SAAgBrjC,GAAahI,EAAQuG,QAE3C,OAAQq2B,MAAAA,OAAD,EAACA,EAAOkU,WAAazF,MAAAA,OAArB,EAAqBA,EAAOyF,WAAa9oC,MAAAA,OAAzC,EAAyCA,EAAUS,gBAGrD,SAASsoC,GACdC,EAAsCC,GACtC,IAD2DC,EAC3D,wDACA,OAAOC,GAAqBH,EAAUC,EAAWC,EAAoB,QAAU,eAG1E,SAASE,GAAuBxU,GACrC,OACEA,EAAMyU,MAAMpF,MAAM58B,GAAuB,MAAdA,EAAKjQ,QAC7Bw9B,EAAMyU,MAAMpF,MAAM58B,GAAuB,MAAdA,EAAKjQ,QAChCkyC,GAAyB1U,GAIzB,SAAS0U,GAAyB1U,GACvC,OACEA,EAAMyU,MAAMpF,MAAM58B,GAAuB,MAAdA,EAAKjQ,QAC7Bw9B,EAAMyU,MAAMpF,MAAM58B,GAAuB,MAAdA,EAAKjQ,QAChCw9B,EAAMyU,MAAMpF,MAAM58B,GAAuB,MAAdA,EAAKjQ,QAChCw9B,EAAMl0B,UAIN,SAAS6oC,GAAmBlG,GACjC,GAAIA,EAAMmG,OAASnG,EAAMoG,OACvB,OAAOpG,EAMJ,SAASqG,GAAsB1xC,EAAqBg9B,GAAyC,IAAtB2U,EAAsB,wDAClG,MAAMC,EAAc7E,EAAe/sC,GAC7B6xC,EAAiBD,GAAeD,EAChCG,EAAmB9Z,OAAOgF,GAEhC,MAAO,CACL4U,YAAAA,EAAaC,eAAAA,EAAgBC,iBAAAA,GAI1B,SAASX,GACdH,EAAsCe,EAAsBC,GAE5D,IAAIC,EAEJ,OAAQD,GACN,IAAK,QACHC,EAAajyC,IACX,MAAMqrC,EAAQsD,EAAgB3uC,GAC9B,OAAO0uC,EAAgB1uC,IAAaqrC,IAAUA,EAAMO,UAAYP,EAAM8B,OAExE,MAEF,IAAK,YACH8E,EAAYrD,EACZ,MAEF,IAAK,QACHqD,EAAajyC,GAAwBwvC,EAAkBxvC,IFlPtD,SAAgCA,GACrC,MAAM,KAAEgG,GAAShG,EAAQuG,QACnBhB,EAAQS,GAAQA,EAAKA,KAAKT,MAAMoL,GAEtC,GAAKpL,EAIL,MAAO,CACLL,IAAKK,EAAM,GACXC,OAAQD,EAAM,IEwOuD2sC,CAAuBlyC,GAC1F,MAEF,IAAK,QACHiyC,EAAYhD,EACZ,MAEF,IAAK,QACHgD,EAAajyC,IACX,MAAMqrC,EAAQsD,EAAgB3uC,GAC9B,OAAOkvC,EAAgBlvC,IAAaqrC,GAASA,EAAMO,SAErD,MAEF,IAAK,cACHqG,EAAajyC,IACX,MAAMqrC,EAAQsD,EAAgB3uC,GAC9B,OACE0uC,EAAgB1uC,IACZqrC,IAAUA,EAAMO,UAAYP,EAAM8B,OACnCiC,EAAuBpvC,IACvBsvC,EAAuBtvC,IAG9B,MAEF,QACE,MAAO,GAGX,OAAO+xC,EAAWxjC,QAAO,CAACW,EAAQ1P,KAC5BwxC,EAASxxC,IAAcyyC,EAAUjB,EAASxxC,KAC5C0P,EAAO1K,KAAKhF,GAGP0P,IACN,IAGE,SAASijC,GAAiBnyC,GAC/B,MAAM,MAAEsrC,EAAF,MAASC,EAAT,MAAgBF,GAAUmD,EAAkBxuC,GAC5C4vC,EAAQtE,GAASC,GAASF,GAASqE,EAAuB1vC,GAChE,GAAK4vC,EAIL,OAAOA,EAAMtqB,SCvZR,SAAS8sB,GAAmB9oC,EAAgB29B,GACjD,MAAQ,GAAE39B,KAAU29B,ICCtB,MAAMoL,GAA+C,CACnDC,4BAA6B,CAC3BC,MAAO,aACPvyC,QAAS,yBAEXwyC,eAAgB,CACdD,MAAO,aACPvyC,QAAS,yBAEXyyC,OAAQ,CACNF,MAAO,aACPvyC,QAAS,yBAEX0yC,SAAU,CACRH,MAAO,SACPvyC,QAAS,kBAEX2yC,UAAW,CACTJ,MAAO,SACPvyC,QAAS,mBAEX4yC,oBAAqB,CACnBL,MAAO,SACPvyC,QAAS,kBAEX6yC,qBAAsB,CACpBN,MAAO,SACPvyC,QAAS,mBAEX8yC,IAAK,CACHP,MAAO,MACPvyC,QAAS,iBAEX+yC,YAAa,CACXR,MAAO,MACPvyC,QAAS,kBAIN,SAASgzC,GAAevzC,GAK7B,MAAQO,QAAS+N,EAAX,KAAwB5C,EAAxB,MAA8B8nC,GAAUxzC,GACxC,MAAE8yC,EAAF,QAASvyC,GAAYizC,EAAQZ,GAAcY,GAASZ,GAAclnC,GAExE,MAAO,CAAEonC,MAAAA,EAAOvyC,QAAAA,EAAS+N,YAAAA,K,+KCxC3B,MAAMmlC,EAAkB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEpC,SAAS/I,EAAuB5+B,GACrC,GAAKA,EAIL,OAAQA,EAAKnM,MACX,IAAK,cACL,IAAK,kBACH,OAAOmM,EAAKkvB,WAAalvB,EAAKmvB,SAGhC,IAAK,kBACL,IAAK,kBACH,MAAO,UAGT,QACE,QAIC,SAASvuB,EAAgBZ,GAC9B,GAAKA,EAAL,CAIA,GAAI4nC,EAAc5nC,GAChB,MAAO,kBAGT,OAAQA,EAAKnM,MACX,IAAK,cACL,IAAK,kBACH,GAAImM,EAAKkvB,WAAalvB,EAAKmvB,SACzB,MAAQ,GAAEnvB,EAAKkvB,aAAalvB,EAAKmvB,WAGnC,GAAInvB,EAAKkvB,UACP,OAAOlvB,EAAKkvB,UAGd,GAAIlvB,EAAKmvB,SACP,OAAOnvB,EAAKmvB,SAGd,MAGF,IAAK,kBACL,IAAK,kBACH,MAAO,oBAON,SAAS0Y,EACdvpC,EAAc0B,EAAe8nC,EAAuCzU,GAEpE,GAAIrzB,EAAKrC,KAAOia,EAAAA,GACd,OAAOtZ,EAAK,wBAAwB0G,cAGtC,GAAIhF,EAAKnM,MAAsB,gBAAdmM,EAAKnM,KACpB,OAAOyK,EAAK,OAGd,IAAKwpC,EACH,MAAO,GAGT,OAAQA,EAAWj0C,MACjB,IAAK,kBACH,OAAOyK,EAAK,gBAGd,IAAK,sBACH,OAAOA,EAAK,gBAGd,IAAK,qBACH,OAAOA,EAAK,eAGd,IAAK,oBAAqB,CACxB,MAAM,UAAEypC,GAAcD,EAEtB,IAAKC,EAAW,OAAOzpC,EAAK,oBAE5B,MAAM/H,EAAM,IAAID,MAAK,IAAIA,MAAO0xC,UAA+B,IAAnB3U,GACtC4U,EAAgB,IAAI3xC,KAAiB,IAAZyxC,GAE/B,GAAIE,GAAiB1xC,EACnB,OAAO+H,EAAK,oBAGd,MAAM4pC,EAAO,IAAI5xC,KAAKC,EAAIyxC,UAAYC,EAAcD,WAGpD,GAAIE,EAAKF,UAAY,IAAO,GAC1B,OAAO1pC,EAAK,oBAId,GAAI4pC,EAAKF,UAAY,IAAO,KAE1B,OAAO1pC,EAAK,sBADI7G,KAAKC,MAAMwwC,EAAKF,UAAY,IAAO,KAKrD,MAAMG,EAAQ,IAAI7xC,KAGlB,GAFA6xC,EAAMC,SAAS,EAAG,EAAG,EAAG,GAEpBH,EADgB,IAAI3xC,KAAK6xC,EAAMH,UAA+B,IAAnB3U,GAG7C,OAAI6U,EAAKF,UAAY,IAAO,MAEnB1pC,EAAK,oBADE7G,KAAKC,MAAMwwC,EAAKF,UAAY,IAAO,GAAK,KAKjD1pC,EAAK,oBAAoBq+B,EAAAA,EAAAA,IAAWr+B,EAAM2pC,IAInD,MAAMI,EAAY,IAAI/xC,KAItB,OAHA+xC,EAAUC,QAAQ/xC,EAAIgyC,UAAY,GAClCF,EAAUD,SAAS,EAAG,EAAG,EAAG,GAExBH,EADoB,IAAI3xC,KAAK+xC,EAAUL,UAA+B,IAAnB3U,GAE9C/0B,EAAK,wBAAwBq+B,EAAAA,EAAAA,IAAWr+B,EAAM2pC,IAGhD3pC,EAAK,mBAAmBkqC,EAAAA,EAAAA,IAAelqC,EAAM2pC,IAGtD,IAAK,mBACH,OAAO3pC,EAAK,UAGd,IAAK,qBACH,OAAOA,EAAK,UAGd,QACE,QAIC,SAASmqC,EAAazoC,EAAe8nC,GAC1C,MAAM,GAAEnqC,EAAF,KAAM9J,GAASmM,EAErB,QAAK8nC,GAIDnqC,IAAOia,EAAAA,IAIgB,qBAApBkwB,EAAWj0C,MAAwC,gBAATA,EAG5C,SAAS+zC,EAAc5nC,GAC5B,OAAIA,EAAK0oC,UAA0B,gBAAd1oC,EAAKnM,MAA0BmM,EAAKrC,KAAOia,EAAAA,KAI3C,oBAAd5X,EAAKnM,MACO,oBAAdmM,EAAKnM,MAGL,SAAS80C,EAAU3oC,GACxB,MAAqB,gBAAdA,EAAKnM,KAGP,SAAS+0C,EAAiB5oC,GAC/B,OAAQA,EAAK6oC,YAAcF,EAAU3oC,GAGhC,SAAS8oC,EACdC,EACArY,EACAsY,EACAhK,GAEA,IADA3L,EACA,uDADmB,EAEnB,OAAOtH,EAAAA,EAAAA,IAAQgd,GAAUprC,IACvB,MAAMpH,GAAM0yC,EAAAA,EAAAA,GAAc5V,GAE1B,GAAI2L,GAAeA,EAAYv/B,SAAS9B,GAItC,OAAOpH,EAAO,QAAiByoC,EAAY/mC,OAAS+mC,EAAYniC,QAAQc,IAG1E,MAAMqC,EAAO0wB,EAAU/yB,GACjBmqC,EAAakB,EAAiBrrC,GACpC,IAAKqC,IAAS8nC,EACZ,OAAO,EAGT,GAAwB,qBAApBA,EAAWj0C,KACb,OAAOi0C,EAAWoB,QACb,GAAwB,sBAApBpB,EAAWj0C,MAAgCi0C,EAAWC,UAC/D,OAAOD,EAAWC,UAGpB,OAAQD,EAAWj0C,MACjB,IAAK,qBACH,OAAO0C,EAAM,MACf,IAAK,qBACH,OAAOA,EAAM,OACf,IAAK,sBACH,OAAOA,EAAM,QACf,QACE,OAAO,KAEV,QAGE,SAAS4yC,EACdJ,EACArY,EACA9lB,EACA0kB,EACA8Z,GAEA,IAAKx+B,EACH,OAAOm+B,EAGT,MAAM1J,GAAcC,EAAAA,EAAAA,GAA4B10B,GAEhD,OAAOm+B,EAAQ9oC,QAAQtC,IACrB,MAAMqC,EAAO0wB,EAAU/yB,GACvB,IAAKqC,EACH,OAAO,EAGT,MAAM3K,EAAOsI,IAAO2xB,EAAgB8Z,EAAoBxoC,EAAgBZ,GACxE,OAAQ3K,GAAQgqC,EAAYhqC,IAAUgqC,EAAYr/B,EAAK4F,aAIpD,SAASyjC,EAAkB//B,GAEhC,MAAsB,iBAAXA,EACF7R,KAAK6xC,IAAIhgC,GAGX7R,KAAK6xC,IAAI7c,OAAOnjB,IAKlB,SAASigC,EAAgBC,GAC9B,MAAMjoC,EAAQioC,EAAOH,EAAkBG,EAAK7rC,IAAM,EAAI,EAEtD,OAAOgqC,EAAgBpmC,K,0ICzQlB,SAASkoC,EACdp+B,EACAxX,EACA61C,GAEA,MAAO,IACFr+B,EACHslB,MAAO,IACFtlB,EAAOslB,MACVgZ,QAAS,IACJt+B,EAAOslB,MAAMgZ,QAChB,CAAC91C,GAAO61C,KAMT,SAASE,EAAkBv+B,EAAqBxX,EAA6Bg2C,GAClF,MAAQ,CAACh2C,GAAO81C,GAAYt+B,EAAOslB,MAAMgZ,QACnCD,EAASC,MAAAA,GAAAA,EAAS1xC,OACpB4xC,EAAU5pC,QAAQtC,IAAQgsC,EAAQlqC,SAAS9B,KAC3CksC,EAEJ,OAAIF,IAAYD,EAAOzxC,OACdoT,EAGFo+B,EAAmBp+B,EAAQxX,EAAM,IAClC81C,GAAW,MACZD,IAIA,SAASI,EAAaz+B,EAAqB0+B,GAChD,MAAO,IACF1+B,EACHslB,MAAO,IACFtlB,EAAOslB,MACVF,KAAMsZ,IAKL,SAASC,EACd3+B,EAAqBtN,EAAgBksC,EAA8B5Y,GAEnE,MAAM,KAAEZ,GAASplB,EAAOslB,MAElBuZ,EAAcC,EAAe9+B,EAAQtN,EAAQksC,EAAY5Y,GAC/D,OAAK6Y,EAIEJ,EAAaz+B,EAAQ,IACvBolB,EACH,CAAC1yB,GAASmsC,IALH7+B,EASJ,SAASqnB,EAAYrnB,EAAqB0+B,GAC/C,MAAMK,EAAct0C,OAAO6rB,KAAKooB,GAAS/mC,QAAO,CAAC8e,EAA8BnkB,KAC7E,MAAMusC,EAAcC,EAAe9+B,EAAQ1N,EAAIosC,EAAQpsC,IAKvD,OAJIusC,IACFpoB,EAAInkB,GAAMusC,GAGLpoB,IACN,IAOH,OALAzW,EAASy+B,EAAaz+B,EAAQ,IACzBA,EAAOslB,MAAMF,QACb2Z,IAOA,SAASC,EAASh/B,EAAqB0+B,GAC5C,MAAM,KAAEtZ,GAASplB,EAAOslB,MACxB,IAAI2Z,GAAY,EAEhB,MAAMC,EAAYz0C,OAAO6rB,KAAKooB,GAAS/mC,QAAgC,CAAC8e,EAAKnkB,KAC3E,IAAK8yB,EAAK9yB,IAAQ8yB,EAAK9yB,GAAI6sC,QAAUT,EAAQpsC,GAAI6sC,MAAQ,CACvD,MAAMN,EAAcC,EAAe9+B,EAAQ1N,EAAIosC,EAAQpsC,IACnDusC,IACFpoB,EAAInkB,GAAMusC,EACLI,IACHA,GAAY,IAIlB,OAAOxoB,IACN,IAEH,OAAKwoB,EAILj/B,EAASy+B,EAAaz+B,EAAQ,IACzBolB,KACA8Z,IALIl/B,EAYX,SAAS8+B,EACP9+B,EAAqBtN,EAAgBksC,EAA8B5Y,GAEnE,MAAM,KAAEZ,GAASplB,EAAOslB,MAClB7vB,EAAO2vB,EAAK1yB,GACZ0sC,EAAoBR,EAAWO,OAAS1pC,IAASA,EAAK0pC,MACtDN,EAAuB,IACxBppC,KACC2pC,GAAoBC,EAAAA,EAAAA,IAAKT,EAAY,CAAC,QAAS,eAAiBA,KAChE5Y,GAAS,CAAEsZ,OAAQ,CAACtZ,KAAWvwB,EAAK6pC,QAAU,MAGpD,GAAKT,EAAYvsC,IAAOusC,EAAYr2C,KAIpC,OAAOq2C,EAGF,SAASU,EACdv/B,EACAtN,EACAg/B,GAEA,MAAM8N,EAAW9N,IAAahlB,EAAAA,GAAqB,WAAa,SAEhE,IAAI+yB,EAAiBz/B,EAAOslB,MAAMgZ,QA0BlC,OAzBC7zC,OAAO6rB,KAAKmpB,GAAuDxpC,SAASypC,IAC3E,MAAMC,EAAoBF,EAAeC,IAAgB,GACrDA,IAAgBF,GAAaG,EAAkBvrC,SAAS1B,GAKjDgtC,IAAgBF,GAAYG,EAAkBvrC,SAAS1B,KAChE+sC,EAAiB,IACZA,EACH,CAACC,GAAcC,EAAkB/qC,QAAQtC,GAAOA,IAAOI,MAPzD+sC,EAAiB,IACZA,EACH,CAACC,GAAc,IAAIC,EAAmBjtC,OAkBnCisC,EART3+B,EAAS,IACJA,EACHslB,MAAO,IACFtlB,EAAOslB,MACVgZ,QAASmB,IAIe/sC,EAAQ,CAAEg/B,SAAUA,QAAYv9B,IAKvD,SAASyrC,EACd5/B,EACAxX,EACAq3C,GAKA,MAAMC,EAAyB,WAATt3C,EAAoB,MAAQ,WAElD,MAAO,IACFwX,EACHslB,MAAO,IACFtlB,EAAOslB,SACNua,EAAKE,kBAAoB,CAC3BA,iBAAkB,IACb//B,EAAOslB,MAAMya,iBAChB,CAACv3C,GAAOq3C,EAAKE,mBAGjBtY,WAAY,IACPznB,EAAOslB,MAAMmC,WAChB,CAACqY,GAAgBD,EAAKG,gBAExBC,cAAe,IACVjgC,EAAOslB,MAAM2a,cAChB,CAACz3C,IAAO,KAMT,SAAS03C,EAAUlgC,EAAqBmgC,GAC7C,MAAMX,GAAWY,EAAAA,EAAAA,IAAmBpgC,EAAQmgC,GAC5C,IAAKX,EACH,OAAOx/B,EAGT,MAAQ,CAACw/B,GAAWlB,GAAYt+B,EAAOslB,MAAMgZ,QAQ7C,OANIA,IACFt+B,EAASo+B,EAAmBp+B,EAAQw/B,EAAUlB,EAAQ1pC,QAAQyrC,GAAWA,IAAWF,MAG7ExB,EAAW3+B,EAAQmgC,EAAY,CAAE3P,aAAa,M,+zBCjNlD,SAAS8P,EACdtgC,EACAugC,EACAnxB,EACAoxB,EACAC,GAEA,MAAMC,EAAcF,EAAK9rC,KAAKisC,IAC5B,MAAMnrB,EAAWxV,EAAO4gC,SAASC,SAASF,EAAWruC,IACrD,OAAKkjB,EAIE,IACFA,KACAmrB,GALIA,KASX,MAAO,IACF3gC,EACH4gC,SAAU,IACL5gC,EAAO4gC,SACVC,SAAU,IACL7gC,EAAO4gC,SAASC,aAChBzZ,EAAAA,EAAAA,IAAqBsZ,EAAa,OAEvC,CAACH,GAAW,IACPvgC,EAAO4gC,SAASL,GACnBnxB,KAAAA,KAEe,WAAbmxB,EACI,CAAEE,UAAAA,GACF,CAAEK,OAAQN,EAAK9rC,KAAI,QAAC,GAAEpC,GAAH,SAAYA,SAOtC,SAASyuC,EACd/gC,EAAqBghC,EAAsBv4C,GAE3C,MAAMw4C,EAAoBjhC,EAAO4gC,SAASC,SAASG,IAAiB,GAC9DE,EAAYlhC,EAAO4gC,SAASO,MAAML,QAAU,GAClD,IAAIA,EAAmBI,EASvB,OARIz4C,EAAO24C,eAAiBF,IAAcA,EAAU9sC,SAAS4sC,KAC3DF,EAAS,CAACE,KAAiBF,KAGxBr4C,EAAO24C,eAAR,MAAyBF,GAAAA,EAAW9sC,SAAS4sC,KAC/CF,EAASA,EAAOlsC,QAAQtC,GAAOA,IAAO0uC,KAGjC,IACFhhC,EACH4gC,SAAU,IACL5gC,EAAO4gC,SACVO,MAAO,IACFnhC,EAAO4gC,SAASO,MACnBL,OAAAA,GAEFD,SAAU,IACL7gC,EAAO4gC,SAASC,SACnB,CAACG,GAAe,IACXC,KACAx4C,MAON,SAAS44C,EACdrhC,EAAqBshC,EAAgBzK,EAAqB0K,GAE1D,MAAQ1K,QAAS2K,GAAmBxhC,EAAOyhC,KAAKlyB,OAEhD,IAAImyB,EACJ,GAAIJ,IAAUE,EACZE,EAAa7K,MACR,CACL,MAAM8K,EAAa,IAAIvlC,IAAIolC,EAAe9sC,KAAKktC,GAAQA,EAAItvC,MAC3DovC,EAAa,IACRF,KACA3K,EAAQjiC,QAAQgtC,IAASD,EAAW9lC,IAAI+lC,EAAItvC,OAInD,MAAO,IACF0N,EACHyhC,KAAM,IACDzhC,EAAOyhC,KACVlyB,OAAQ,IACHvP,EAAOyhC,KAAKlyB,OACftS,OAAQskC,EACR1K,QAAS6K,KAMV,SAASG,EAAsB7hC,EAAqB2gC,GACzD,MAAO,IACF3gC,EACH8hC,eAAgBnB,GAIb,SAASoB,EACd/hC,EAAqBhJ,EAAegrC,EAA+B5yB,GAEnE,MACM6yB,EAAc,KADEC,EAAAA,EAAAA,IAAuBliC,EAAQhJ,MACVgrC,GAAkB,IACvDG,GAAYC,EAAAA,EAAAA,IAAOH,EAAYvtC,KAAI,QAAC,GAAEpC,GAAH,SAAYA,MAC/C8yB,GAAOgC,EAAAA,EAAAA,IAAqB6a,EAAa,MACzCrB,EAAWuB,EAAUztC,KAAKpC,GAAO8yB,EAAK9yB,KAE5C,MAAO,IACF0N,EACH4gC,SAAU,IACL5gC,EAAO4gC,SACVyB,SAAU,CACRrrC,MAAAA,EACA4pC,SAAAA,EACAxxB,KAAAA,KAMD,SAASkzB,EAAwBtiC,GACtC,MAAM,MAAEhJ,EAAF,SAAS4pC,EAAT,KAAmBxxB,GAASpP,EAAO4gC,SAASyB,UAAY,GAC9D,OAAKrrC,EAIE+qC,EAAuB/hC,EAAQhJ,EAAO4pC,EAAUxxB,GAH9CpP,E,aCrIJ,SAASuiC,EAAaviC,EAAqB0+B,GAChD,MAAO,IACF1+B,EACHmlB,MAAO,IACFnlB,EAAOmlB,MACVC,KAAMsZ,IAKZ,SAAS8D,EAAkBxiC,EAAqByiC,GAC9C,MAAQ/E,QAASgF,GAAmB1iC,EAAO2iC,aAAe,GAE1D,IAAKD,EAAgB,OAAO1iC,EAE5B,MAAM4iC,EAAoBH,EACvB7tC,QAAQD,IAASA,MAAAA,OAAA,EAAAA,EAAM6oC,aAAckF,EAAetuC,SAASO,EAAKrC,MAClEoC,KAAKC,GAASA,EAAKrC,KAEtB,OAAiC,IAA7BswC,EAAkBh2C,OAAqBoT,EAEpC,IACFA,EACH2iC,YAAa,CACXjF,QAAS,IACJkF,KACAF,KAMJ,SAASnc,EAAWvmB,EAAqB/B,EAAgB4kC,GAC9D,MAAM,KAAEzd,GAASplB,EAAOmlB,MAElB2d,EAAcC,EAAe/iC,EAAQ/B,EAAQ4kC,GACnD,OAAKC,EAMEP,EAFPviC,EAASwiC,EAAkBxiC,EAAQ,CAAC8iC,IAER,IACvB1d,EACH,CAACnnB,GAAS6kC,IAPH9iC,EAWJ,SAASgjC,EAAYhjC,EAAqB0+B,GAC/C,MAAMK,EAAct0C,OAAO6rB,KAAKooB,GAAS/mC,QAAO,CAAC8e,EAA8BnkB,KAC7E,MAAMwwC,EAAcC,EAAe/iC,EAAQ1N,EAAIosC,EAAQpsC,IAKvD,OAJIwwC,IACFrsB,EAAInkB,GAAMwwC,GAGLrsB,IACN,IASH,OAFAzW,EAASwiC,EALTxiC,EAASuiC,EAAaviC,EAAQ,IACzBA,EAAOmlB,MAAMC,QACb2Z,IAG8Bt0C,OAAO+rB,OAAOuoB,IAM5C,SAAS5X,EAASnnB,EAAqB0+B,GAC5C,MAAM,KAAEtZ,GAASplB,EAAOmlB,MACxB,IAAI8Z,GAAY,EAEhB,MAAMC,EAAYz0C,OAAO6rB,KAAKooB,GAAS/mC,QAAgC,CAAC8e,EAAKnkB,KAC3E,IAAK8yB,EAAK9yB,IAAQ8yB,EAAK9yB,GAAI6sC,QAAUT,EAAQpsC,GAAI6sC,MAAQ,CACvD,MAAM2D,EAAcC,EAAe/iC,EAAQ1N,EAAIosC,EAAQpsC,IACnDwwC,IACFrsB,EAAInkB,GAAMwwC,EACL7D,IACHA,GAAY,IAIlB,OAAOxoB,IACN,IAEH,OAAKwoB,EASLj/B,EAASwiC,EALTxiC,EAASuiC,EAAaviC,EAAQ,IACzBolB,KACA8Z,IAG8Bz0C,OAAO+rB,OAAO0oB,IARxCl/B,EAcX,SAAS+iC,EAAe/iC,EAAqB/B,EAAgB4kC,GAC3D,MAAM,KAAEzd,GAASplB,EAAOmlB,MAClBxwB,EAAOywB,EAAKnnB,GACZmhC,EAAoByD,EAAW1D,OAASxqC,IAASA,EAAKwqC,MAEtD2D,EAAc,IACfnuC,KACCyqC,GAAoBC,EAAAA,EAAAA,IAAKwD,EAAY,CAAC,QAAS,eAAiBA,GAGtE,GAAKC,EAAYxwC,IAAOwwC,EAAYt6C,KAIpC,OAAOs6C,EAGF,SAASG,EAAcjjC,EAAqB/B,GACjD,MAAM,KAAEmnB,GAASplB,EAAOmlB,OAClB,QAAEuY,GAAY19B,EAAO2iC,aAAe,GAS1C,OAAOJ,EAPPviC,EAAS,IACJA,EACH2iC,YAAa,CACXjF,QAASA,EAAUA,EAAQ9oC,QAAQtC,GAAOA,IAAO2L,IAAUilC,EAAAA,IAInC,IACvB9d,EACH,CAACnnB,GAAS,IACLmnB,EAAKnnB,GACRu/B,eAAWrpC,KAKV,SAASgvC,EACdnjC,EACAojC,GAEA,MAAO,IACFpjC,EACHqjC,WAAY,IACPrjC,EAAOqjC,cACPD,IAKF,SAASE,EACdtjC,EAAqBujC,GAErB,OAAOJ,EAAiBnjC,EAAQ,CAC9BwjC,eAAgBD,IAIb,SAASE,EAAuBzjC,EAAqB/B,EAAgBylC,GAC1E,MAAM,KAAEte,GAASplB,EAAOmlB,MAClBxwB,EAAOywB,EAAKnnB,GAClB,OAAKtJ,GAASA,EAAK6xB,SAIZD,EAAWvmB,EAAQ/B,EAAQ,IAC7BtJ,EACH6xB,SAAU,IACL7xB,EAAK6xB,SACRkd,UAAAA,KAPK1jC,EAYJ,SAAS2jC,EAAoB3jC,EAAqB0+B,GACvD,MAAO,IACF1+B,EACHmlB,MAAO,IACFnlB,EAAOmlB,MACVye,aAAclF,IAMb,SAASmF,EAAgB7jC,EAAqB0+B,GACnD,MAAM,aAAEkF,GAAiB5jC,EAAOmlB,MAE1B/K,EAAU3vB,OAAO6rB,KAAKooB,GAAS9pC,QAAQtC,IAAQsxC,EAAatxC,KAClE,OAAK8nB,EAAQxtB,OAIboT,EAAS2jC,EAAoB3jC,EAAQ,IAChC4jC,MACAE,EAAAA,EAAAA,IAAKpF,EAAStkB,KALVpa,EChMX,MAAM+jC,EAAiB36C,GAAyB,GAAEA,EAAQsJ,UAAUtJ,EAAQkJ,KAErE,SAAS0xC,EACdhkC,EACAojC,GAEA,MAAO,IACFpjC,EACHikC,aAAc,IACTjkC,EAAOikC,gBACPb,IAKF,SAASc,EACdlkC,EACAmkC,GAEA,OAAOH,EAAmBhkC,EAAQ,CAAEmkC,eAAAA,IAG/B,SAASC,EACdpkC,EACAqkC,EACA5c,EACAj/B,EACA87C,GACa,MACb,MAAM,cAAEC,GAAkBvkC,EAAOikC,cAAgB,GAC3CO,EAAuBH,EAAiB1sC,QAAO,CAACW,EAAQlP,KAC5DkP,EAAOyrC,EAAc36C,IAAYA,EAE1BkP,IACN,IACGmsC,EAAkBF,MAAAA,GAAH,UAAGA,EAAgB/7C,UAAnB,aAAG,EAAuBk8C,SAE/C,QAAwBvwC,IAApBswC,GACCh6C,OAAO6rB,KAAKkuB,GAAsBG,OAClCC,GAAUH,EAAgBrwC,SAAS2vC,EAAcS,EAAqBI,OAGzE,OAAOC,EAAiC7kC,EAAQ,CAAEo6B,UAAU,IAG9D,MAAM0K,EAAeL,GAAmB,GAClCM,EAAcV,EAAiB3vC,KAAKtL,GAAY26C,EAAc36C,KAC9Ds7C,EAAW3uC,MAAMivC,UAAUhmC,OAAO8lC,EAAcC,GAChDE,GAAsBnzB,EAAAA,EAAAA,IAAqBgzB,EAAcJ,GAAYI,EAAeJ,EAI1F,OAAOV,EAFPhkC,EAAS6kC,EAAiC7kC,EAAQ,CAAEo6B,UAAU,IAE5B,CAChCmK,cAAe,KACTvkC,EAAOikC,cAAgB,IAAIM,cAC/B,CAAC/7C,GAAO,CACNi/B,WAAAA,EACAyd,aAAcZ,EACdI,SAAUO,MAMX,SAASJ,EACd7kC,EAAqBujC,GAErB,OAAOS,EAAmBhkC,EAAQ,CAChCwjC,eAAgB,IACXxjC,EAAOikC,aAAaT,kBACpBD,K,cCjDT,SAAS4B,EACPnlC,EACAolC,EACAC,GAEA,MAAO,IACFrlC,EACHslC,gBAAiB,CACfC,gBAAiB,IACZvlC,EAAOslC,gBAAgBC,gBAC1B,CAACH,GAAgBC,KAMlB,SAASG,EACdxlC,EACAtN,EACA29B,EACArgB,EACAzQ,GAEA,MAAM6lC,GAAgB5J,EAAAA,EAAAA,IAAmB9oC,EAAQ29B,GAEjD,OAAO8U,EAAuBnlC,EAAQolC,EAAe,IAChDplC,EAAOslC,gBAAgBC,gBAAgBH,GAC1Cp1B,SAAAA,EACAzQ,MAAAA,IAIG,SAASkmC,EACdzlC,EACAtN,EACA29B,EACAqU,EACAjd,EACAyd,GAEA,MAAME,GAAgB5J,EAAAA,EAAAA,IAAmB9oC,EAAQ29B,GAEjD,OAAO8U,EAAuBnlC,EAAQolC,EAAe,IAChDplC,EAAOslC,gBAAgBC,gBAAgBH,GAC1CvO,QAAS,CACP6N,SAAAA,EACAjd,WAAAA,EACAyd,aAAAA,KAKC,SAASQ,EACd1lC,EACAtN,EACA29B,EACA0U,EACAtd,EACAyd,GAEA,MAAME,GAAgB5J,EAAAA,EAAAA,IAAmB9oC,EAAQ29B,IAC3C,QAAEwG,GAAY72B,EAAOslC,gBAAgBC,gBAAgBH,IAAkB,GACvEN,GAAgBjO,MAAAA,OAAD,EAACA,EAAS6N,WAAa,GACtCA,EAAWiB,GAAcvD,EAAAA,EAAAA,IAAOrsC,MAAMivC,UAAUhmC,OAAO8lC,EAAcC,KAG3E,OAAOU,EAA8BzlC,EAAQtN,EAAQ29B,GAFzBve,EAAAA,EAAAA,IAAqBgzB,EAAcJ,GAAYI,EAAeJ,EAENjd,EAAYyd,GAGlG,SAASU,EACP5lC,EACAtN,EACA2yC,GAEA,MAAO,IACFrlC,EACH6lC,iBAAkB,CAChBC,SAAU,IACL9lC,EAAO6lC,iBAAiBC,SAC3B,CAACpzC,GAAS2yC,KAMX,SAASU,EACd/lC,EACAtN,EACAszC,GAEA,OAAOJ,EAAwB5lC,EAAQtN,EAAQ,IAC1CsN,EAAO6lC,iBAAiBC,SAASpzC,GACpCszC,YAAAA,IAyBG,SAASC,EACdjmC,EACAtN,EACAlK,EACAu8C,EACAtd,EACAyd,GAEA,MAAM,cAAEX,GAAkBvkC,EAAO6lC,iBAAiBC,SAASpzC,IAAW,GAChEoyC,EAAeP,MAAAA,GAAAA,EAAgB/7C,GAAQ+7C,EAAc/7C,GAAOk8C,SAAW,GACvEA,EAAWiB,GAAcvD,EAAAA,EAAAA,IAAOrsC,MAAMivC,UAAUhmC,OAAO8lC,EAAcC,KAG3E,OAlCK,SACL/kC,EACAtN,EACAlK,EACAk8C,EACAjd,EACAyd,GAEA,OAAOU,EAAwB5lC,EAAQtN,EAAQ,IAC1CsN,EAAO6lC,iBAAiBC,SAASpzC,GACpC6xC,cAAe,KACTvkC,EAAO6lC,iBAAiBC,SAASpzC,IAAW,IAAI6xC,cACpD,CAAC/7C,GAAO,CACNk8C,SAAAA,EACAjd,WAAAA,EACAyd,aAAAA,MAmBCgB,CAA+BlmC,EAAQtN,EAAQlK,GAF1BspB,EAAAA,EAAAA,IAAqBgzB,EAAcJ,GAAYI,EAAeJ,EAETjd,EAAYyd,GAG/F,SAASS,EAActL,GACrB,OAAOA,EAAU8L,MAAK,CAACC,EAAGC,IAAMA,EAAID,IC7J/B,SAASE,EAAyBtmC,EAAqBomB,GAC5D,MAAO,IACFpmB,EACHumC,WAAY,IACPvmC,EAAOumC,WACVngB,SAAAA,IAKC,SAASogB,EAAiBxmC,EAAqBtN,EAAgBjK,GACpE,MAAO,IACFuX,EACHumC,WAAY,IACPvmC,EAAOumC,WACVT,SAAU,IACL9lC,EAAOumC,WAAWT,SACrB,CAACpzC,GAAS,IACJsN,EAAOumC,WAAWT,SAASpzC,IAAW,MACvCjK,MCfN,SAASy/B,EAAgBloB,EAAqBymC,GACnD,MAAO,IACFzmC,EACH0mB,SAAU,IACL1mB,EAAO0mB,SACV+B,MAAO,IACFzoB,EAAO0mB,SAAS+B,SAChBge,KAMJ,SAASjY,EACdxuB,EAAqB2tB,EAAiB8Y,GAEtC,MAAO,IACFzmC,EACH0mB,SAAU,IACL1mB,EAAO0mB,SACVggB,OAAQ,IACH1mC,EAAO0mB,SAASggB,OACnB,CAAC/Y,GAAQ,IACH3tB,EAAO0mB,SAASggB,OAAO/Y,IAAU,MAClC8Y,MAON,SAASxe,EACdjoB,EAAqB6xB,GAOrB,OALAA,EAAiB57B,SAAS0wC,IACxB,MAAM,OAAEj0C,KAAWk0C,GAAkBD,EACrC3mC,EAAS6mC,EAAmB7mC,EAAQtN,EAAQk0C,MAGvC5mC,EAGF,SAAS6mC,EACd7mC,EAAqB1N,EAAYq0C,GAEjC,MAAO,IACF3mC,EACH0mB,SAAU,IACL1mB,EAAO0mB,SACVmL,iBAAkB,IACb7xB,EAAO0mB,SAASmL,iBACnB,CAACv/B,GAAKq0C,KAMP,SAASre,EACdtoB,EAAqBmoB,EAA6CC,EAAoBC,GAEtF,OAAQF,GACN,IAAK,UACH,OAAOD,EAAgBloB,EAAQ,SACL,IAAbooB,GAA4B,CAAE2J,8BAA+B3J,WACtC,IAAvBC,GAAsC,CAAE8J,8BAA+B9J,KAEtF,IAAK,QACH,OAAOH,EAAgBloB,EAAQ,SACL,IAAbooB,GAA4B,CAAE6J,uBAAwB7J,WAC/B,IAAvBC,GAAsC,CAAEgK,uBAAwBhK,KAE/E,IAAK,YACH,OAAOH,EAAgBloB,EAAQ,SACL,IAAbooB,GAA4B,CAAE4J,2BAA4B5J,WACnC,IAAvBC,GAAsC,CAAE+J,2BAA4B/J,KAGnF,QACE,QAIC,SAASV,EAAkB3nB,EAAqB0nB,GAGrD,OAFA1nB,EAASyjC,EAAuBzjC,EAAQ0nB,GAAW,GAE5C,IACF1nB,EACHsnB,QAAS,IACJtnB,EAAOsnB,QACVC,IAAK,CAACG,KAAc1nB,EAAOsnB,QAAQC,KACnCE,WAAYznB,EAAOsnB,QAAQG,WAAa,IAKvC,SAASG,EAAqB5nB,EAAqB0nB,GAGxD,OAFA1nB,EAASyjC,EAAuBzjC,EAAQ0nB,GAAW,GAE5C,IACF1nB,EACHsnB,QAAS,IACJtnB,EAAOsnB,QACVC,IAAKvnB,EAAOsnB,QAAQC,IAAI3yB,QAAQtC,GAAOA,IAAOo1B,IAC9CD,WAAYznB,EAAOsnB,QAAQG,WAAa,IC5GvC,SAASqf,EACd9mC,EACAvX,GAEA,MAAO,IACFuX,EACH+mC,cAAe,IACV/mC,EAAO+mC,iBACPt+C,ICNF,SAASu+C,EACdhnC,EACAinC,GAEA,MAAO,IACFjnC,EACHknC,QAAS,IACJlnC,EAAOknC,QACVD,gBAAAA,IAKC,SAASE,EAAiBnnC,EAAqB1N,GACpD,MAAO,IACF0N,EACHknC,QAAS,IACJlnC,EAAOknC,QACVE,UAAW90C,IAKV,SAAS+0C,EAAernC,EAAqBsnC,GAClD,MAAO,IACFtnC,EACHknC,QAAS,IACJlnC,EAAOknC,QACVI,KAAAA,IAKC,SAASC,EAAsBvnC,EAAqB5W,GACzD,IAAKA,EAAQuG,UAAYvG,EAAQuG,QAAQuF,QACvC,OAAO8K,EAET,MAAM,MACJvP,EADI,KAEJrB,EAFI,OAGJsE,EAHI,SAIJC,EAJI,OAKJwvB,EALI,SAMJqkB,GACEp+C,EAAQuG,QAAQuF,QACpB,MAAO,IACF8K,EACHknC,QAAS,IACJlnC,EAAOknC,QACVO,eAAgB,CACdh3C,MAAAA,EACArB,KAAAA,EACAo4C,SAAAA,EACA9zC,OAAAA,EACAC,SAAAA,EACAwvB,OAAAA,KAMD,SAASukB,GAAkB1nC,EAAqB2nC,GACrD,MAAO,IACF3nC,EACHknC,QAAS,IACJlnC,EAAOknC,QACVU,kBAAmB,IACdD,KAMJ,SAASE,GAAe7nC,EAAqB8nC,GAClD,MAAO,IACF9nC,EACHknC,QAAS,IACJlnC,EAAOknC,WACPY,IAKF,SAASC,GACd/nC,EACAgoC,EACA5+C,GAEA,IAAK4+C,IAAY5+C,EACf,MAAO,IACF4W,EACHknC,QAAS,IACJlnC,EAAOknC,QACVc,aAAS7zC,IAKf,MAAQe,QAAS+yC,GAAmB7+C,EAAQuG,SACtC,SAAE63C,EAAF,KAAYp4C,EAAZ,MAAkBqB,GAAWw3C,GAAkB,GAErD,MAAO,IACFjoC,EACHknC,QAAS,IACJlnC,EAAOknC,QACVc,QAAS,IACJA,EACHR,SAAAA,EACAp4C,KAAAA,EACAqB,MAAAA,KAMD,SAASy3C,GAAaloC,GAC3B,MAAO,IACFA,EACHknC,QAAS,IAIN,SAASiB,GAAanoC,GAC3B,MAAO,IACFA,EACHknC,QAAS,IACJlnC,EAAOknC,QACVkB,oBAAoB,M,yQCjGnB,SAASC,EACdroC,EACAtN,GAIa,IAHb29B,EAGa,uDAHM1kC,EAAAA,GACnBnD,EAEa,uDAFW,SACxB8/C,EACa,uCACb,MAAM,aAAEC,GAAiBvoC,EAAOo6B,SAChC,IAAIoO,EAAiCD,EACrC,GAAID,GAAwBhhC,EAAAA,GAC1BkhC,EAAkB91C,EAAS,CAAC,CAAEA,OAAAA,EAAQ29B,SAAAA,EAAU7nC,KAAAA,IAAU,QACrD,GAAIkK,EAAQ,CACjB,MAAMwe,EAAOq3B,EAAaA,EAAa37C,OAAS,GAC3CskB,GAAQA,EAAKxe,SAAWA,GAAUwe,EAAKmf,WAAaA,GAAYnf,EAAK1oB,OAASA,IAE/EggD,EADEt3B,GAAQA,EAAKxe,SAAW8X,EAAAA,GACR,IAAI+9B,EAAat5C,MAAM,GAAI,GAAI,CAAEyD,OAAAA,EAAQ29B,SAAAA,EAAU7nC,KAAAA,IAEnD,IAAI+/C,EAAc,CAAE71C,OAAAA,EAAQ29B,SAAAA,EAAU7nC,KAAAA,UAI5DggD,EAAkBD,EAAat5C,MAAM,GAAI,GAG3C,MAAO,IACF+Q,EACHo6B,SAAU,IACLp6B,EAAOo6B,SACVmO,aAAcC,IAKpB,SAASC,EAAoBzoC,EAAqBtN,EAAgBgsC,GAChE,OAAOgK,EAAmB1oC,EAAQtN,EAAQ,CACxC0yB,KAAMsZ,IAoBV,SAASgK,EACP1oC,EAAqBtN,EAAgBjK,GAErC,MAAM6S,EAAU0E,EAAOo6B,SAAS0L,SAASpzC,IAAW,CAAE0yB,KAAM,GAAIujB,YAAa,IAE7E,MAAO,IACF3oC,EACHo6B,SAAU,IACLp6B,EAAOo6B,SACV0L,SAAU,IACL9lC,EAAOo6B,SAAS0L,SACnB,CAACpzC,GAAS,IACL4I,KACA7S,MAON,SAASmgD,EACd5oC,EAAqBtN,EAAgB29B,EAAkBwY,EAAchtB,GAErE,OAvCF,SACE7b,EAAqBtN,EAAgB29B,EAAkByY,GAEvD,MAAMxtC,EAAU0E,EAAOo6B,SAAS0L,SAASpzC,GAEzC,OAAOg2C,EAAmB1oC,EAAQtN,EAAQ,CACxCi2C,YAAa,IACPrtC,MAAAA,OAAJ,EAAIA,EAASqtC,YACb,CAACtY,GAAW,IACN/0B,MAAAA,OAAJ,EAAIA,EAASqtC,YAAYtY,MACtByY,MA6BFC,CAAa/oC,EAAQtN,EAAQ29B,EAAU,CAAE,CAACwY,GAAYhtB,IAGxD,SAASmtB,EACdhpC,EAAqBo6B,GAErB,MAAM6O,EAAgB7O,EAASziC,QAAO,CAACuxC,EAAkB9/C,KAClD8/C,EAAiB9/C,EAAQsJ,UAC5Bw2C,EAAiB9/C,EAAQsJ,QAAU,IAErCw2C,EAAiB9/C,EAAQsJ,QAAQtJ,EAAQkJ,IAAMlJ,EAExC8/C,IACN,IAMH,OAJAz+C,OAAO6rB,KAAK2yB,GAAehzC,SAASvD,IAClCsN,EAASmpC,EAAoBnpC,EAAQtN,EAAQu2C,EAAcv2C,OAGtDsN,EAGF,SAASmpC,EACdnpC,EAAqBtN,EAAgBgsC,GAErC,MAAMtZ,GAAOgkB,EAAAA,EAAAA,IAAmBppC,EAAQtN,GAExC,OAAI0yB,GAAQ36B,OAAO6rB,KAAKooB,GAASiG,OAAOC,GAAUhzC,QAAQwzB,EAAKhE,OAAOwjB,OAC7D5kC,EAGFyoC,EAAoBzoC,EAAQtN,EAAQ,IACtCgsC,KACAtZ,IAIA,SAASikB,EACdrpC,EAAqBtN,EAAgB9J,EAAmB0gD,GAExD,MAAMlkB,GAAOgkB,EAAAA,EAAAA,IAAmBppC,EAAQtN,IAAW,GAE7C62C,EAAiB,IADPnkB,EAAKx8B,MAGhB0gD,GAGL,OAAKC,EAAej3C,GAIbm2C,EAAoBzoC,EAAQtN,EAAQ,IACtC0yB,EACH,CAACx8B,GAAY2gD,IALNvpC,EASJ,SAASwpC,EACdxpC,EAAqBtN,EAAgB9J,EAAmB0gD,GAExD,MAAMlkB,GAAOqkB,EAAAA,EAAAA,IAAwBzpC,EAAQtN,IAAW,GAElD62C,EAAiB,IADPnkB,EAAKx8B,MAGhB0gD,GAGL,OAAKC,EAAej3C,GAIbo3C,EAAyB1pC,EAAQtN,EAAQ,IAC3C0yB,EACH,CAACx8B,GAAY2gD,IALNvpC,EASJ,SAAS2pC,EACd3pC,EACAtN,EACAyoC,GAEA,MAAM/V,GAAOgkB,EAAAA,EAAAA,IAAmBppC,EAAQtN,GACxC,IAAK0yB,EACH,OAAOplB,EAET,MAAM0+B,GAAUW,EAAAA,EAAAA,IAAKja,EAAM+V,GACrByO,EAAwBn/C,OAAO+rB,QAAOqzB,EAAAA,EAAAA,IAAWzkB,EAAM+V,IAAavmC,QACxE,QAAC,YAAE+gC,GAAH,SAAqBA,MAAAA,OAArB,EAAqBA,EAAamU,uBA6CpC,GA1CkBr/C,OAAO6rB,KAAKtW,EAAOo6B,SAAS0L,SAASpzC,GAAQi2C,aAAaj0C,IAAI0sB,QACtEnrB,SAASo6B,IACjB,MAAM0Z,GAAaC,EAAAA,EAAAA,IAAiBhqC,EAAQtN,EAAQ29B,GAEpD,IAAIgK,GAAY4P,EAAAA,EAAAA,IAAgBjqC,EAAQtN,EAAQ29B,GAC5C6Z,GAAcC,EAAAA,EAAAA,IAAkBnqC,EAAQtN,EAAQ29B,GAChD+Z,GAAcC,EAAAA,EAAAA,IAAkBrqC,EAAQtN,EAAQ29B,GAChDia,GAAYC,EAAAA,EAAAA,IAAgBvqC,EAAQtN,GACpC83C,EAAkBT,MAAAA,OAAH,EAAGA,EAAYU,cAElCtP,EAAWllC,SAASrN,IACdyxC,GAAaA,EAAUjmC,SAASxL,KAClCyxC,EAAYA,EAAUzlC,QAAQtC,GAAOA,IAAO1J,SACpBuL,IAApBq2C,IAA+BA,GAAmB,IAGpDN,GAAeA,EAAY91C,SAASxL,KACtCshD,EAAcA,EAAYt1C,QAAQtC,GAAOA,IAAO1J,KAG9CwhD,GAAeA,EAAYh2C,SAASxL,KACtCwhD,EAAcA,EAAYx1C,QAAQtC,GAAOA,IAAO1J,KAG9C0hD,GAAaA,EAAUl2C,SAASxL,KAClC0hD,EAAYA,EAAU11C,QAAQtC,GAAOA,IAAO1J,QAIhDoX,EAAS4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,YAAagK,GACnEr6B,EAAS4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,cAAe6Z,GACrElqC,EAAS4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,cAAe+Z,GACrEpqC,EAAS4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,YAAaia,GAE/DP,QAAkC51C,IAApBq2C,IAChBxqC,EAAS4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,aAAc,IAC/D0Z,EACHU,cAAeD,QAKjBZ,EAAsBh9C,OAAQ,CAChC,MAAM89C,GAAqBC,EAAAA,EAAAA,IAAyB3qC,GAC9C4qC,EAAyBF,GAAsBA,EAAmBh4C,SAAWA,GAClD,WAA5Bg4C,EAAmBliD,KAClBqiD,EAAkBH,MAAAA,OAAH,EAAGA,EAAoBra,SAE5CuZ,EAAsB3zC,SAAS7M,IAC7B,MAAM,WAAE0hD,EAAF,cAAcC,GAAkB3hD,EAAQusC,YACxCqV,GAAeC,EAAAA,EAAAA,IAAkBjrC,EAAQ8qC,EAAaC,GAExDH,GAA0BC,IAAoBE,IAChD/qC,EAASqoC,EAAyBroC,EAAQtN,IAExCs4C,IACFhrC,EAASqpC,EAAkBrpC,EAAQ8qC,EAAaC,EAAgB,CAAEhB,gBAAY51C,QAOpF,OAFA6L,EAASyoC,EAAoBzoC,EAAQtN,EAAQgsC,GAKxC,SAASwM,EACdlrC,EACAtN,EACAyoC,GAEA,MAAM/V,GAAOqkB,EAAAA,EAAAA,IAAwBzpC,EAAQtN,GAC7C,IAAK0yB,EACH,OAAOplB,EAET,MAAM0+B,GAAUW,EAAAA,EAAAA,IAAKja,EAAM+V,GAE3B,IAAIgQ,GAAeC,EAAAA,EAAAA,IAAmBprC,EAAQtN,GAY9C,OAXIy4C,IACFhQ,EAAWllC,SAASrN,IACduiD,EAAc/2C,SAASxL,KACzBuiD,EAAeA,EAAcv2C,QAAQtC,GAAOA,IAAO1J,QAGvDoX,EAAS4oC,EAAmB5oC,EAAQtN,EAAQ/G,EAAAA,GAAgB,eAAgBw/C,IAGrEzB,EAAyB1pC,EAAQtN,EAAQgsC,GAK7C,SAAS2M,EACdrrC,EACAtN,EACA29B,EACAmO,GAEA,MAAMnE,GAAY4P,EAAAA,EAAAA,IAAgBjqC,EAAQtN,EAAQ29B,GAC5CgO,EAAShE,MAAAA,GAAAA,EAAWztC,OACtB4xC,EAAU5pC,QAAQtC,IAAQ+nC,EAAUjmC,SAAS9B,KAC7CksC,EAEJ,OAAInE,IAAcgE,EAAOzxC,OAChBoT,EAGF4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,YAAaib,EAAgB,IAC3EjR,GAAa,MACdgE,KAIA,SAASkN,EACdvrC,EACAtN,EACA29B,EACAmO,GAEA,MAAM0L,GAAcC,EAAAA,EAAAA,IAAkBnqC,EAAQtN,EAAQ29B,GAChDgO,EAAS6L,MAAAA,GAAAA,EAAat9C,OACxB4xC,EAAU5pC,QAAQtC,IAAQ43C,EAAY91C,SAAS9B,KAC/CksC,EAEJ,OAAI0L,IAAgB7L,EAAOzxC,OAClBoT,EAGF4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,cAAeib,EAAgB,IAC7EpB,GAAe,MAChB7L,KAIP,SAASiN,EAAgBjR,GACvB,OAAOA,EAAU8L,MAAK,CAACC,EAAGC,IAAMD,EAAIC,IAG/B,SAASmF,EACdxrC,EACAtN,EACA29B,EACAuU,GAEA,MAAMwF,GAAcC,EAAAA,EAAAA,IAAkBrqC,EAAQtN,EAAQ29B,IAAa,GACnE,OAAI+Z,EAAYh2C,SAASwwC,GAChB5kC,EAYF4oC,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,cATrCib,EAAgB,IAE3BlB,EAAYx9C,OAAS8b,EAAAA,GACjB0hC,EACAA,EAAYn7C,OAAQwZ,EAAAA,GAAqB,GAE/Cm8B,KAMG,SAAS6G,EACdzrC,EACAtN,EACA29B,EACAqb,GAEA,MAAM/J,GAAa0I,EAAAA,EAAAA,IAAkBrqC,EAAQtN,EAAQ29B,IAAa,GAC5DgO,EAASiN,EAAgBI,GAE/B,OAAO9C,EACL5oC,EACAtN,EACA29B,EACA,eACAve,EAAAA,EAAAA,IAAqB6vB,EAAYtD,GAAUsD,EAAatD,GAIrD,SAASsN,EACd3rC,EAAqBtN,EAAgB29B,EAAkB5nC,GAEvD,MAAMmjD,EAAgB,KAChB5B,EAAAA,EAAAA,IAAiBhqC,EAAQtN,EAAQ29B,MAClC5nC,GAGL,OAAKmjD,EAAcvb,SAIZuY,EAAmB5oC,EAAQtN,EAAQ29B,EAAU,aAAcub,GAHzD5rC,EAMJ,SAAS6rC,EACd7rC,EAAqBtN,EAAgBo5C,GAMrC,OAJAA,EAAQ71C,SAASxN,IACfuX,EAAS2rC,EAAiB3rC,EAAQvX,EAAOiK,OAASjK,EAAO4nC,SAAW5nC,MAG/DuX,EAGF,SAAS0pC,EACd1pC,EAAqBtN,EAAgBgsC,GAErC,OAKF,SACE1+B,EAAqBtN,EAAgBjK,GAErC,MAAM6S,EAAU0E,EAAO+rC,kBAAkBjG,SAASpzC,IAAW,CAAE0yB,KAAM,GAAIhW,KAAM,GAE/E,MAAO,IACFpP,EACH+rC,kBAAmB,CACjBjG,SAAU,IACL9lC,EAAO+rC,kBAAkBjG,SAC5B,CAACpzC,GAAS,IACL4I,KACA7S,MAjBJujD,CAAwBhsC,EAAQtN,EAAQ,CAC7C0yB,KAAMsZ,IAuBH,SAASuN,EACdjsC,EAAqBtN,EAAiB9J,GACzB,IAD6CsjD,EAC7C,wDADkEC,EAClE,wDACb,MAAO,IACFnsC,EACHosC,eAAgB,IACXpsC,EAAOosC,eACV15C,OAAAA,EACA9J,UAAAA,EACAsjD,YAAAA,EACAC,oBAAAA,IAKC,SAASE,EACdrsC,EAAqBtN,EAAgBtJ,GAErC,MAAO,IACF4W,EACHo6B,SAAU,IACLp6B,EAAOo6B,SACVkS,kBAAmB,IACdtsC,EAAOo6B,SAASkS,kBACnB,CAAC55C,GAAStJ,KAMX,SAASmjD,EACdvsC,EAAqBwsC,GAErB,MAAO,IACFxsC,EACHosC,eAAgB,IACXpsC,EAAOosC,eACVI,UAAAA,IAKC,SAASC,EACdzsC,EACAtN,EACA9J,GAGA,MAAO,IACFoX,EACH0sC,iBAAkB,CAChBh6C,OAAAA,EACAyoC,WALevyC,EAAYmN,MAAMivC,UAAUhmC,OAAO,GAAIpW,GAAa,KAUlE,SAAS+jD,EACd3sC,EACAtN,EACA29B,EACAuc,EACAhkD,EACA0uC,EACAuV,GAEa,IADbC,EACa,wDACb,MAAQJ,iBAAkBK,GAAwB/sC,EAC9Cs3B,IACFuV,GAAkBG,EAAAA,EAAAA,IAA0BhtC,EAAQtN,EAAQ4kC,IAE9D,MAAM2V,EAAqBJ,GAAmB,CAACjkD,GAC/C,IAAKmkD,EACH,OAAON,EAAuBzsC,EAAQtN,EAAQu6C,GAGhD,MAAM,WAAE9R,GAAe4R,EAEvB,IAAIG,EACJ,MAAMC,EAAwBF,EAAmBr4C,QAAQtC,IAAQ6oC,EAAW/mC,SAAS9B,KACrF,GAAI66C,IAA0BA,EAAsBvgD,OAClDsgD,EAAgB/R,EAAWvmC,QAAQtC,IAAQ26C,EAAmB74C,SAAS9B,UAClE,GAAIw6C,GAAa3R,EAAWvuC,OAAQ,CACzC,MAAMw9C,GAAcgD,EAAAA,EAAAA,IAAwBptC,EAAQtN,EAAQ29B,EAAUuc,GAChES,EAAYjD,EAAY54C,QAAQ2pC,EAAWA,EAAWvuC,OAAS,IAC/D6iB,EAAe26B,EAAY54C,QAAQ5I,GACnC0a,EAAOlX,KAAKuP,IAAI0xC,EAAW59B,GAC3B69B,EAAKlhD,KAAKsP,IAAI2xC,EAAW59B,GACzBxgB,EAAQm7C,EAAYn7C,MAAMqU,EAAMgqC,EAAK,GAC3CJ,GAAgB9K,EAAAA,EAAAA,IAAO,IAAIjH,KAAelsC,SAE1Ci+C,EAAgB,IAAI/R,KAAegS,GAGrC,OAAKD,EAActgD,OAIZ,IACFoT,EACH0sC,iBAAkB,IACbK,EACH5R,WAAY+R,IAPPK,EAAsBvtC,GAY1B,SAASutC,EAAsBvtC,GACpC,MAAO,IACFA,EACH0sC,sBAAkBv4C,GAIf,SAASq5C,EACdxtC,EACAytC,EACA/6C,EACAg7C,EACAC,GAEA,MAAM,cAAEC,EAAF,WAAiB9C,GAAe2C,EAAc9X,aAAe,GACnE,GAAIiY,GAAiB9C,EAAY,CAC/B,MAAM+C,GAAgB7D,EAAAA,EAAAA,IAAiBhqC,EAAQtN,EAAQk7C,GACnDC,IACF7tC,EAAS4oC,EAAmB5oC,EAAQtN,EAAQk7C,EAAe,aAAc,IACpEC,EACHH,cAAAA,EACAjD,cAAeoD,EAAcpD,eAAiBkD,GAAc,EAAI,MAItE,OAAO3tC,I,mNC3iBF,SAAS8tC,EAAW9tC,EAAqBtN,GAC9C,OAAOsN,EAAOslB,MAAMF,KAAK1yB,GAGpB,SAASq7C,EAAe/tC,EAAqBvK,GAClD,MAAMwI,GAASmxB,EAAAA,EAAAA,IAAqB35B,GACpC,QAAKwI,IAIEiC,EAAAA,EAAAA,IAAWF,EAAQ/B,GAGrB,SAAS+vC,EAAqBhuC,EAAqBtN,GACxD,OAAOA,IAAWsN,EAAOikB,cAGpB,SAASgqB,EAAoBjuC,EAAqBvK,GACvD,MAAMd,EAAOo5C,EAAe/tC,EAAQvK,GACpC,OAAOd,IAAQ2oC,EAAAA,EAAAA,IAAU3oC,GAGpB,SAASu5C,EAAkBluC,GAChC,OAAOvV,OAAO+rB,OAAOxW,EAAOslB,MAAMF,MAAMiQ,MAAK,QAAC,UAAE8Y,GAAH,SAA4BA,KAGpE,SAASC,EAAsBpuC,EAAqBvK,GACzD,KAAIiwB,EAAAA,EAAAA,IAASjwB,EAAKnD,OAAO08B,EAAAA,EAAAA,IAAcv5B,IAAUA,EAAK+wB,SAItD,OAAK/wB,EAAK+wB,SAAS6nB,SAAW54C,EAAK+wB,SAAS6nB,QAAQzhD,SAAWsc,EAAAA,GAIxDzT,EAAK+wB,SAAS6nB,QAAQ12C,QAAO,CAAC22C,EAAD,KAA6B,IAAf,OAAErwC,GAAa,EAC/D,OACEA,IAAW+B,EAAOikB,eACfjkB,EAAOmlB,MAAMC,KAAKnnB,KAClBm/B,EAAAA,EAAAA,IAAap9B,EAAOmlB,MAAMC,KAAKnnB,GAAS+B,EAAOmlB,MAAMye,aAAa3lC,IAE9DqwC,EAAc,EAGhBA,IACN,GAbM74C,EAAK+wB,SAAS8nB,YAgBlB,SAASC,EAAcvuC,EAAqBtN,GACjD,MAAM+C,EAAOq4C,EAAW9tC,EAAQtN,GAC1BuL,EAASxI,IAAQ25B,EAAAA,EAAAA,IAAqB35B,GACtCd,EAAOsJ,IAAUiC,EAAAA,EAAAA,IAAWF,EAAQ/B,GAC1C,GAAKtJ,IAAS2oC,EAAAA,EAAAA,IAAU3oC,GAIxB,OAAOA,EAGF,SAAS65C,EAA0BxuC,EAAqBtN,GAC7D,MAAM+C,EAAOq4C,EAAW9tC,EAAQtN,GAC1B+7C,EAAMF,EAAcvuC,EAAQtN,GAClC,IAAK+C,IAASg5C,EACZ,OAAO,EAGT,GAAIh5C,EAAKo6B,cAAeuG,EAAAA,EAAAA,IAAsB3gC,EAAKo6B,aACjD,OAAO,EAGT,MAAM6e,EAAc1uC,EAAOo6B,SAAS0L,SAASpzC,GAC7C,IAAKg8C,EACH,OAAO,EAGT,MAAM,UAAErU,GAAcqU,EAAY/F,YAAYh9C,EAAAA,KAAmB,GACjE,OAAO0uC,IAAcA,EAAUztC,OAG1B,SAAS+hD,EAA2B3uC,GACzC,OAAOpO,QAAQoO,EAAOslB,MAAMgZ,QAAQsQ,QAG/B,SAASC,EAAmB7uC,EAAqBtN,EAAgBlK,GACtE,MAAM,QAAE81C,GAAYt+B,EAAOslB,MAC3B,GAAI98B,EAAM,CACR,MAAMsmD,EAAaxQ,EAAQ91C,GAC3B,OAAOoJ,QAAQk9C,GAAcA,EAAW16C,SAAS1B,IAGnD,OAAOjI,OAAO+rB,OAAO8nB,GAASvnC,MAAMg4C,GAASA,GAAQA,EAAK36C,SAAS1B,KAG9D,SAAS0tC,EAAmBpgC,EAAqBtN,GACtD,MAAM+C,EAAOq4C,EAAW9tC,EAAQtN,GAChC,GAAK+C,GAASo5C,EAAmB7uC,EAAQtN,GAIzC,OAAO+C,EAAKi8B,WAAahlB,EAAAA,GAAqB,WAAa,SAGtD,SAASsiC,EAAiBhvC,EAAqB0xB,GACpD,OAAO1xB,EAAOivC,YAAY7pB,KAAKsM,GAe1B,SAASwd,EAAmBlvC,EAAqBtN,GAAmD,IAAnCg/B,EAAmC,uDAAxBjlB,EAAAA,GACjF,MAAM,OAAEmiC,EAAF,SAAUO,GAAanvC,EAAOslB,MAAMya,iBAE1C,GAAIrO,IAAajlB,EAAAA,GACf,OAAO7a,QAAQg9C,MAAAA,OAAD,EAACA,EAAQx6C,SAAS1B,IAGlC,GAAIg/B,IAAahlB,EAAAA,GACf,OAAO9a,QAAQu9C,MAAAA,OAAD,EAACA,EAAU/6C,SAAS1B,IAGpC,MAAQ0yB,KAAMgqB,GAAoBpvC,EAAOivC,aAEnC,cAAEtc,GAAkByc,EAAgB1d,IAAa,GACvD,OAAO9/B,QAAQ+gC,MAAAA,OAAD,EAACA,EAAev+B,SAAS1B,IAIlC,SAAS28C,EAAqBrvC,EAAqBzF,GACxD,MAAM+0C,EAAkB/0C,EAASZ,cACjC,OAAOlP,OAAO+rB,OAAOxW,EAAOslB,MAAMF,MAAMiQ,MACrC5/B,GAASA,EAAK8E,UAAY9E,EAAK8E,SAASZ,gBAAkB21C,IAIxD,SAASC,EAAyBvvC,GACvC,OAAOpO,QAAQk8C,EAAW9tC,EAAQuM,EAAAA,KAG7B,SAASijC,EAAaxvC,EAAqBtN,GAAgB,MAChE,MAAM+C,EAAOq4C,EAAW9tC,EAAQtN,GAChC,IAAK+C,EAAM,OAEX,MAAMnD,EAAKmD,MAAAA,GAAH,UAAGA,EAAM+wB,gBAAT,aAAG,EAAgBipB,SAC3B,OAAKn9C,GAEE4N,EAAAA,EAAAA,IAAWF,EAAQ1N,IAAOw7C,EAAW9tC,EAAQ1N,QAFpD,I,spCC3JK,SAASo9C,EAA2B1vC,GACzC,OAAOA,EAAO4gC,SAASrxB,OAGlB,SAASogC,EAAuB3vC,GACrC,OAAOA,EAAOyhC,KAAKlyB,OAGd,SAASqgC,EAAiB5vC,EAAqB1N,GACpD,OAAO0N,EAAO4gC,SAASC,SAASvuC,GAG3B,SAASu9C,EAA4B7vC,EAAqB8vC,GAC/D,OAAOrlD,OAAO+rB,OAAOxW,EAAO4gC,SAASC,UAAUxL,MAAM/jB,GAAMA,EAAEw+B,UAAUn2C,gBAAkBm2C,EAAUn2C,gBAG9F,SAASuoC,EAAuBliC,EAAqBhJ,GAC1D,MAAM+4C,EAActlD,OAAO+rB,OAAOxW,EAAO4gC,SAASC,UAClD,IAAImP,EAAiC,GAcrC,OAZAhwC,EAAO4gC,SAASqP,SAASrP,SAAS3qC,SAASu+B,IACrCA,EAAQx9B,QAAUA,GAAOg5C,EAAiBpiD,KAAK4mC,MAIrDub,EAAY95C,SAAQ,IAAe,IAAd,MAAEi6C,GAAY,EAC5BA,IAILF,EAAmBA,EAAiBhxC,OAAOkxC,EAAMl5C,IAAU,GAAIk5C,EAAMC,EAAWn5C,KAAW,QAEtFg5C,EAGT,SAASG,EAAWn5C,GAElB,OAAOA,EAAMnI,QAAQ,IAAU,IAG1B,SAASuhD,EAAoBpwC,EAAqBhJ,GACvD,MAAM,eAAE8qC,GAAmB9hC,EAC3B,IAAK8hC,IAAmBA,EAAelB,SACrC,OAGF,MAAMyP,EAAeF,EAAWn5C,GAEhC,OAAO8qC,EAAelB,SAASvL,MAAMb,GAAYA,EAAQx9B,QAAUA,GAASw9B,EAAQx9B,QAAUq5C,IAGzF,SAASC,EAA0BtwC,EAAqBhJ,GAC7D,MAAM,qBAAEu5C,GAAyBvwC,EACjC,IAAKuwC,IAAyBA,EAAqB3P,SACjD,OAGF,MAAMyP,EAAeF,EAAWn5C,GAEhC,OAAOu5C,EAAqB3P,SAASvL,MAAMb,GAAYA,EAAQx9B,QAAUA,GAASw9B,EAAQx9B,QAAUq5C,IAG/F,SAASG,EAAyBxwC,EAAqBhJ,GAAe,MAC3E,OAAOgJ,MAAAA,GAAP,UAAOA,EAAQwqB,iBAAf,aAAO,EAAmBimB,YAAYN,EAAWn5C,IAG5C,SAAS05C,EAAyB1wC,EAAqBhJ,GAC5D,MAAMq5C,EAAeF,EAAWn5C,GAEhC,MAAwB,OAAjBq5C,EAAwB,QAA4B,OAAjBA,EAAwB,gBAAal8C,EAG1E,SAASw8C,EAA+B35C,GAC7C,MAAiB,aAAVA,EAAuB,eAAY7C,EAGrC,SAASy8C,EAAqC5mD,GACnD,MAAgB,YAATA,EAAqB,UAAOmK,E,uBCxC9B,SAASw2C,EAAyB3qC,GACvC,MAAM,aAAEuoC,GAAiBvoC,EAAOo6B,SAEhC,GAAImO,EAAa37C,OACf,OAAO27C,EAAaA,EAAa37C,OAAS,GAMvC,SAASikD,EAAkB7wC,GAChC,MAAM,OAAEtN,GAAWi4C,EAAyB3qC,IAAW,GAEvD,OAAOtN,GAASo7C,EAAAA,EAAAA,IAAW9tC,EAAQtN,QAAUyB,EAGxC,SAASi1C,EAAmBppC,EAAqBtN,GAAgB,MACtE,iBAAOsN,EAAOo6B,SAAS0L,SAASpzC,UAAhC,aAAO,EAAkC0yB,KAGpC,SAASqkB,EAAwBzpC,EAAqBtN,GAAgB,MAC3E,iBAAOsN,EAAO+rC,kBAAkBjG,SAASpzC,UAAzC,aAAO,EAA2C0yB,KAG7C,SAAS0rB,EACd9wC,EACAtN,EACA29B,EACAtW,GAEA,MAAM20B,EAAc1uC,EAAOo6B,SAAS0L,SAASpzC,GAC7C,IAAKg8C,EACH,OAGF,MAAMqC,EAASrC,EAAY/F,YAAYtY,GACvC,OAAK0gB,EAIEA,EAAOh3B,QAJd,EAOK,SAASkwB,EAAgBjqC,EAAqBtN,EAAgB29B,GACnE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,aAG9C,SAAS8Z,EAAkBnqC,EAAqBtN,EAAgB29B,GACrE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,eAG9C,SAAS+c,EACdptC,EAAqBtN,EAAgB29B,EAAkBuc,GAEvD,OAAQA,GACN,IAAK,SACH,OAAOvC,EAAkBrqC,EAAQtN,EAAQ29B,GAC3C,IAAK,SACH,OAAOka,EAAgBvqC,EAAQtN,GACjC,IAAK,YACH,OAAO04C,EAAmBprC,EAAQtN,IAMjC,SAAS23C,EAAkBrqC,EAAqBtN,EAAgB29B,GACrE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,eAG9C,SAASka,EAAgBvqC,EAAqBtN,GACnD,OAAOo+C,EAAkB9wC,EAAQtN,EAAQ/G,EAAAA,GAAgB,aAGpD,SAASy/C,EAAmBprC,EAAqBtN,GACtD,OAAOo+C,EAAkB9wC,EAAQtN,EAAQ/G,EAAAA,GAAgB,gBAGpD,SAASqlD,EAAmBhxC,EAAqBtN,EAAgB29B,GACtE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,gBAG9C,SAAS4gB,EAAmBjxC,EAAqBtN,EAAgB29B,GACtE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,gBAG9C,SAAS6gB,EAAgBlxC,EAAqBtN,EAAgB29B,GACnE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,aAG9C,SAAS8gB,EAAyBnxC,EAAqBtN,GAC5D,OAAOo+C,EAAkB9wC,EAAQtN,EAAQ/G,EAAAA,GAAgB,sBAGpD,SAASylD,EAAYpxC,EAAqBtN,EAAgB29B,GAC/D,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,SAG9C,SAASghB,EAAgBrxC,EAAqBtN,EAAgB29B,GACnE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,aAG9C,SAAS2Z,EAAiBhqC,EAAqBtN,EAAgB29B,GACpE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,cAG9C,SAASihB,EAAqBtxC,EAAqBtN,EAAgB29B,GACxE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,kBAG9C,SAASkhB,EAAiBvxC,EAAqBtN,EAAgB29B,GACpE,OAAOygB,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,cAG9C,SAASmhB,EAAuBxxC,EAAqBtN,EAAgB29B,GAC1E,GAAIA,IAAa1kC,EAAAA,GACf,OAAOmiD,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAG5B,MAAMq3C,EAAaC,EAAiBhqC,EAAQtN,EAAQ29B,GACpD,OAAK0Z,GAIE+D,EAAAA,EAAAA,IAAW9tC,EAAQ+pC,EAAW0H,iBAAmB/+C,QAJxD,EAOK,SAASg/C,EAAyB1xC,EAAqBtN,EAAgB29B,GAC5E,GAAIA,IAAa1kC,EAAAA,GACf,OAGF,MAAMo+C,EAAaC,EAAiBhqC,EAAQtN,EAAQ29B,GACpD,OAAK0Z,EAIEA,EAAW4H,kBAJlB,EAOK,SAASC,EAAsB5xC,EAAqBtN,EAAgBtJ,GACzE,MAAMslD,EAAc1uC,EAAOo6B,SAAS0L,SAASpzC,GAC7C,IAAKg8C,EACH,OAGF,MAAM,iBAAEjZ,EAAF,oBAAoBoc,GAAwBzoD,EAClD,OAAKqsC,GAAqBoc,EAInBpnD,OAAO+rB,OAAek4B,EAAY/F,aAAatT,MAAM0b,GACnDA,EAAOhH,aACXtU,GAAoBA,IAAqBsb,EAAOhH,WAAW4H,cACxDE,GAAuBA,IAAwBd,EAAOhH,WAAW4H,qBAPzE,EAYK,SAASG,EAA8B9xC,EAAqBtN,EAAgBtJ,GACjF,MAAMshD,EAAqBC,EAAyB3qC,GACpD,IAAK0qC,EACH,OAAO,EAGT,MAAM,WAAEX,GAAe6H,EAAsB5xC,EAAQtN,EAAQtJ,IAAY,GACzE,OACEsJ,IAAWg4C,EAAmBh4C,SAE3Bg4C,EAAmBra,WAAa1kC,EAAAA,IAC7Bo+C,GAAcW,EAAmBra,WAAa0Z,EAAW1Z,UAK5D,SAAS0hB,EAAuB/xC,EAAqBtN,EAAgB29B,GAC1E,MAAM+Z,EAAcC,EAAkBrqC,EAAQtN,EAAQ29B,GACtD,IAAK+Z,IAAgBA,EAAYx9C,OAC/B,OAAO,EAGT,IAAI8gD,EAEJ,GAAIrd,IAAa1kC,EAAAA,GAAgB,CAC/B,MAAM8J,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAChC,IAAK+C,IAASA,EAAKo6B,YACjB,OAAO,EAGT6d,EAAgBj4C,EAAKo6B,YAAYv9B,OAC5B,CACL,MAAMy3C,EAAaC,EAAiBhqC,EAAQtN,EAAQ29B,GACpD,IAAK0Z,IAAeA,EAAW2D,cAC7B,OAGFA,EAAgB3D,EAAW2D,cAI7B,OAAIA,GAAiBnjC,EAAAA,KAA0B0gC,EAAkBjrC,EAAQtN,EAAQg7C,IAI1EtD,EAAYA,EAAYx9C,OAAS,IAAM8gD,EAGzC,SAASzC,EAAkBjrC,EAAqBtN,EAAgB9J,GACrE,MAAMopD,EAAe5I,EAAmBppC,EAAQtN,GAEhD,OAAOs/C,EAAeA,EAAappD,QAAauL,EAG3C,SAAS89C,EAAuBjyC,EAAqBtN,EAAgB9J,GAC1E,MAAMopD,EAAevI,EAAwBzpC,EAAQtN,GAErD,OAAOs/C,EAAeA,EAAappD,QAAauL,EAG3C,SAAS+9C,EACdlyC,EAAqBtN,EAAgB29B,EAAkBuc,GAEvD,GAAwB,cAApBA,EAAiC,CACnC,MAAMhkD,EAAYuoD,EAAyBnxC,EAAQtN,GACnD,OAAO9J,EAAYqpD,EAAuBjyC,EAAQtN,EAAQ9J,QAAauL,EAClE,CACL,MAAMvL,EAAYsoD,EAAgBlxC,EAAQtN,EAAQ29B,GAClD,OAAOznC,EAAYqiD,EAAkBjrC,EAAQtN,EAAQ9J,QAAauL,GAI/D,SAASg+C,EAA0BnyC,EAAqBoyC,GAC7D,IAAIC,EAGJ,IAAK,MAAML,KAAgBvnD,OAAO+rB,OAAOxW,EAAOo6B,SAAS0L,UAAW,CAClE,MAAM,KAAE1gB,GAAS4sB,EAIjB,GAHAK,EAAkB5nD,OAAO+rB,OAAO4O,GAAMiQ,MAAMjsC,GACnCA,EAAQuG,QAAQilC,MAAQxrC,EAAQuG,QAAQilC,KAAKtiC,KAAO8/C,IAEzDC,EACF,MAIJ,OAAOA,EAGF,SAASC,GAAuBtyC,EAAqBtN,GAC1D,MAAQA,OAAQ6/C,EAAV,UAAyB3pD,GAAcoX,EAAOosC,gBAAkB,GAEtE,OAAOmG,IAAkB7/C,EAAS9J,OAAYuL,EAGzC,SAASq+C,GAAuBxyC,EAAqB5W,GAC1D,MAAMqpD,EAAYH,GAAuBtyC,EAAQ5W,EAAQsJ,QAEzD,QAAO+/C,IAAYA,IAAcrpD,EAAQkJ,IAAMmgD,IAAcrpD,EAAQmrC,iBAGhE,SAASme,GAAsB1yC,EAAqB5W,GACzD,MAAM,wBAAEupD,IAA4B7E,EAAAA,EAAAA,IAAW9tC,EAAQ5W,EAAQsJ,SAAW,GAC1E,OAAOyjC,EAAAA,EAAAA,IAAe/sC,KAAaupD,GAA2BA,EAA0BvpD,EAAQkJ,GAG3F,SAASsgD,GACd5yC,EAAqB5W,GACK,IADgBypD,EAChB,wDAC1B,OAAKH,GAAsB1yC,EAAQ5W,IAAaypD,GAIzC5c,EAAAA,EAAAA,IAAgB7sC,GAHd,OAMJ,SAAS0pD,GAAa9yC,EAAqB5W,GAChD,MAAM,SAAE2sC,GAAa3sC,EACrB,GAAK2sC,EAIL,OAAOrQ,EAAAA,EAAAA,IAASqQ,IAAY71B,EAAAA,EAAAA,IAAWF,EAAQ+1B,IAAY+X,EAAAA,EAAAA,IAAW9tC,EAAQ+1B,GAGzE,SAASgd,GAAsB/yC,EAAqB5W,GACzD,MAAM,YAAEusC,GAAgBvsC,EACxB,GAAKusC,EAIL,OAAIA,EAAYqd,eAAiBrd,EAAYmV,YACpCgD,EAAAA,EAAAA,IAAW9tC,EAAQ21B,EAAYmV,YAC7BnV,EAAYsd,cACd/yC,EAAAA,EAAAA,IAAWF,EAAQ21B,EAAYsd,gBAAiBnF,EAAAA,EAAAA,IAAW9tC,EAAQ21B,EAAYsd,mBADjF,EAOF,SAASC,GAA4BlzC,EAAqB5W,EAAqBinC,GAAkB,YACtG,MAAM56B,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQ5W,EAAQsJ,QACxC,IAAK+C,GAAQA,EAAK66B,aAChB,MAAO,GAGT,MAAM6iB,GAAYztB,EAAAA,EAAAA,IAASjwB,EAAKnD,IAC1B8gD,GAAiBpF,EAAAA,EAAAA,IAAqBhuC,EAAQ5W,EAAQsJ,QACtD2gD,GAAevkB,EAAAA,EAAAA,IAAiBr5B,GAChC69C,GAAevkB,EAAAA,EAAAA,IAAiBt5B,GAChC89C,GAAYvkB,EAAAA,EAAAA,IAAcv5B,GAC1B+9C,GAAUrd,EAAAA,EAAAA,IAAe/sC,GACzBqqD,GAAwB5d,EAAAA,EAAAA,IAA6BzsC,GACrDsqD,GAAQpe,EAAAA,EAAAA,IAAalsC,GACrBuqD,GAAW/d,EAAAA,EAAAA,IAAgBxsC,IAC3B,QAAEuG,GAAYvG,EAKdwqD,GAH8BR,GAC9BE,IAAgBtjB,EAAAA,EAAAA,IAAiBv6B,EAAM,gBACvC89C,IAAavjB,EAAAA,EAAAA,IAAiBv6B,EAAM,kBAInCmoC,EAAAA,EAAAA,GAAc59B,EAAOgoB,kBAAoB5+B,EAAQyqC,KApUxB,WAsU5BlkC,EAAQ6kC,SAAW7kC,EAAQmlC,SAAWnlC,EAAQilC,MAAQjlC,EAAQ6D,QAAU7D,EAAQ+kC,OAAhF,UACI/kC,EAAQ8kC,aADZ,OACI,EAAeO,YAEjBU,EAAAA,EAAAA,IAAmBtsC,KACnBA,EAAQyqD,SAGRC,GAAYN,IAAYC,IAAyBrjB,EAAAA,EAAAA,IAAiB36B,EAAM46B,GAExE0jB,EAAmBZ,GACvB19C,EAAKg7B,YACA8iB,KAActjB,EAAAA,EAAAA,IAAkBx6B,EAAM,iBACxCu6B,EAAAA,EAAAA,IAAiBv6B,EAAM,eAG5B,IAAIu+C,GAAUR,IAAYC,IAA0BE,GAAYI,EAC5DE,GAAW,EAEf,MAAMC,EAAmB3J,EAAgBvqC,EAAQvK,EAAKnD,IAElD0hD,IACFC,EAAWriD,QAAQsiD,GAAoBA,EAAiB9/C,SAAShL,EAAQkJ,KACzE0hD,GAAUC,GAGZ,MAAME,GAAaX,IAAYC,IAC7BN,GACGO,GACAL,GACA59C,EAAKg7B,YACLT,EAAAA,EAAAA,IAAiBv6B,EAAM,mBAGtB2+C,GAAajB,IAAcO,EAE3BW,EAAkBF,IACrBhB,IAAcC,GACXC,IACFK,IAAS1jB,EAAAA,EAAAA,IAAiBv6B,EAAM,mBAAqBA,EAAKg7B,YAIxD6jB,GAAWd,IAAYG,GAAYC,IACvCF,GACIH,IAAc99C,EAAKg7B,YAAaT,EAAAA,EAAAA,IAAiBv6B,EAAM,kBAGvD8+C,GAAcf,IAAYG,EAE1Ba,EAAa5iD,QAAQxI,EAAQuG,QAAQ6kC,SACrCigB,EAAqBD,GDhatB,SAAiCx0C,EAAqBw0B,GAC3D,MAAM,SAAEoM,GAAa5gC,EAAO4gC,SAASqP,SACrC,OAAOrP,GAAYA,EAAS7pC,MAAK,QAAC,GAAEzE,GAAH,SAAYA,IAAOkiC,EAAQliC,MC8ZnBoiD,CAAwB10C,EAAQ5W,EAAQuG,QAAQ6kC,SACnFmgB,GAAkBhB,GAAYa,IAAeC,EAC7CG,GAAoBjB,GAAYc,EAChCI,GAAWlB,EACXmB,GAAenB,IAAaJ,GAAaD,GACzCyB,GAAapB,EAEbqB,EAAcpjD,SAAQ,UAAAjC,EAAQklC,eAAR,eAAiBzjC,YAAjB,UAA6BzB,EAAQklC,eAArC,aAA6B,EAAiBJ,SAA9C,UAAuD9kC,EAAQklC,eAA/D,aAAuD,EAAiB7O,QAC/Fr2B,EAAQ+kC,OAAS/kC,EAAQglC,OAAShlC,EAAQq2B,OAASr2B,EAAQ8kC,OAAS9kC,EAAQyB,UAAYzB,EAAQ6kC,SAmBrG,MAAO,CACLygB,UAlBgB,CAChBnB,EACAQ,EACAN,EACAC,EACAG,EACAD,EACAE,EACAE,EACAI,EACAC,EACAC,EACAC,EACAC,EACAC,GACArQ,OAAOuQ,IAAaA,IAIpBpB,SAAAA,EACAQ,QAAAA,EACAN,OAAAA,EACAC,SAAAA,EACAG,UAAAA,EACAD,UAAAA,EACAE,gBAAAA,EACAE,WAAAA,EACAI,eAAAA,EACAC,iBAAAA,EACAC,QAAAA,EACAC,YAAAA,EACAC,UAAAA,EACAC,YAAAA,GAKG,SAASG,GAAgCn1C,GAC9C,MAAQm7B,WAAY8R,GAAuBjtC,EAAO0sC,kBAAoB,IAChE,OAAEh6C,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GAC3DgyC,EAAet/C,GAAU02C,EAAmBppC,EAAQtN,GAC1D,IAAKs/C,IAAiB/E,IAAuB5c,EAC3C,MAAO,GAGT,MAAM+kB,EAAiBnI,EACpBv4C,KAAKpC,GAAO0/C,EAAa1/C,IAAO4gD,GAA4BlzC,EAAQgyC,EAAa1/C,GAAK+9B,KACtFz7B,OAAOhD,SAEV,MAAO,CACLuiD,UAAWiB,EAAezQ,OAAOvpC,GAAYA,EAAQ+4C,YACrDE,gBAAiBe,EAAezQ,OAAOvpC,GAAYA,EAAQi5C,mBAIxD,SAASgB,GAAgCr1C,GAC9C,MAAQm7B,WAAY8R,GAAuBjtC,EAAO0sC,kBAAoB,IAChE,OAAEh6C,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GAC3DgyC,EAAet/C,GAAU02C,EAAmBppC,EAAQtN,GAC1D,SAAKs/C,GAAiB/E,GAAuB5c,IAItB4c,EACpBv4C,KAAKpC,GAAO0/C,EAAa1/C,IAAO4gD,GAA4BlzC,EAAQgyC,EAAa1/C,GAAK+9B,KACtFz7B,OAAOhD,SAEY+yC,OAAOvpC,GAAYA,EAAQg5C,YAG5C,SAASkB,GAAkCt1C,GAChD,MAAQm7B,WAAY8R,GAAuBjtC,EAAO0sC,kBAAoB,IAChE,OAAEh6C,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GAC3DgyC,EAAet/C,GAAU02C,EAAmBppC,EAAQtN,GAC1D,SAAKs/C,GAAiB/E,GAAuB5c,IAItB4c,EACpBv4C,KAAKpC,GAAO0/C,EAAa1/C,IAAO4gD,GAA4BlzC,EAAQgyC,EAAa1/C,GAAK+9B,KACtFz7B,OAAOhD,SAEYmF,MAAMqE,GAAYA,EAAQ45C,cAG3C,SAASO,GAAoBv1C,EAAqB5W,GACvD,MAAMosD,EAAex1C,EAAOy1C,gBAAgB3P,SAAS18C,EAAQsJ,QAC7D,QAAO8iD,GAAeA,EAAaphD,SAAShL,EAAQkJ,IAG/C,SAASojD,GAAwB11C,EAAqBtN,GAC3D,OAAOsN,EAAOy1C,gBAAgB3P,SAASpzC,IAAWwwC,EAAAA,EAG7C,SAASyS,GAAqB31C,EAAqB5W,GAAqB,MAC7E,iBAAO4W,EAAO41C,YAAYC,iBAAiBzsD,EAAQmrC,iBAAmBnrC,EAAQkJ,WAA9E,aAAO,EAA4E8zB,SAG9E,SAAS0vB,GAAqB91C,EAAqBtN,EAAgB29B,GACxE,GAAIA,IAAa1kC,EAAAA,GAAgB,CAC/B,MAAM8J,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAChC,IAAK+C,EACH,OAIF,IAAKA,EAAKsgD,uBACR,OAGF,OAAKtgD,EAAKo6B,aAINsG,EAAAA,EAAAA,IAAe1gC,EAAKo6B,aACfp6B,EAAKo6B,YAAYv9B,GAInBlG,KAAKuP,IAAIlG,EAAKo6B,YAAYv9B,GAAImD,EAAKsgD,wBARjCtgD,EAAKsgD,uBAST,CACL,MAAMhM,EAAaC,EAAiBhqC,EAAQtN,EAAQ29B,GACpD,IAAK0Z,EACH,OAGF,OAAKA,EAAWgM,uBAKT3pD,KAAKuP,IAAIouC,EAAWgM,uBAAwBhM,EAAW2D,eAAiBsI,EAAAA,GAJtEjM,EAAW4H,cAQjB,SAASsE,GAAoBj2C,EAAqBtN,EAAgB29B,GACvE,MAAM56B,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAEhC,GAAI29B,IAAa1kC,EAAAA,IACf,IAAK8J,EACH,WAEG,CACL,MAAMs0C,EAAaC,EAAiBhqC,EAAQtN,EAAQ29B,GACpD,IAAK0Z,QAC8B51C,IAA7B41C,EAAW2D,eAA+B3D,EAAW2D,gBAAkB3D,EAAWgM,uBACtF,OAIJ,MAAM7L,EAAcC,EAAkBnqC,EAAQtN,EAAQ29B,GAChDgK,EAAY4P,EAAgBjqC,EAAQtN,EAAQ29B,GAC5CjL,EAAOgkB,EAAmBppC,EAAQtN,GACxC,IAAK0yB,IAAU8kB,IAAe7P,EAC5B,OAGF,MAAM6b,EAAaJ,GAAqB91C,EAAQtN,EAAQ29B,GACxD,IAAK6lB,GAAczgD,GAAQA,EAAK+6B,YAC9B,OAGF,MAAM2lB,EAAgCzjD,IAAW6Z,EAAAA,GAC7CvM,EAAOo2C,qBAAqBz+C,QAAO,CAAC+D,EAAK26C,KACjCA,EAAaC,UAAYD,EAAa/jD,GAAKoJ,EAAM26C,EAAa/jD,GAAKoJ,IACzE,IACD,EAEL,SAAS66C,EAAoBjY,GAC3B,OAAOA,EAAQjJ,MAAM/iC,KAEf4jD,GAAc5jD,EAAK4jD,IAClB9wB,EAAK9yB,MACH8yB,EAAK9yB,GAAIijC,YAAcnQ,EAAK9yB,GAAIkkD,kBAClClkD,EAAK6jD,IAKd,GAAIjM,EAAa,CACf,MAAMuM,EAAQF,EAAoBrM,GAClC,GAAIuM,EACF,OAAOA,EAIX,GAAIpc,EAAW,CACb,MAAMoc,EAAQF,EAAoBlc,GAClC,GAAIoc,EACF,OAAOA,GAYN,SAASC,GAAyB12C,GACvC,MAAM,gBAAE22C,GAAoB32C,EAC5B,OAAOpO,QAAQ+kD,EAAgBC,cAG1B,SAASC,GAAsB72C,EAAqBpX,GACzD,MAAMkuD,EAAkBrsD,OAAO+rB,OAAOxW,EAAOslB,MAAMF,MAAMiQ,MAAM5/B,IAC7Dw5B,EAAAA,EAAAA,IAAgBx5B,IAASA,EAAKo6B,aAAep6B,EAAKo6B,YAAYv9B,KAAO1J,IAEvE,GAAIkuD,EACF,OAAOA,EAAgBxkD,GAGzB,MAAM,SAAEwzC,GAAa9lC,EAAOo6B,SAC5B,OAAO3vC,OAAO6rB,KAAKwvB,GAAUzQ,MAAM3iC,IACjC,MAAM+C,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAChC,OAAO+C,IAAQw5B,EAAAA,EAAAA,IAAgBx5B,IAASqwC,EAASrwC,EAAKnD,IAAI8yB,KAAKx8B,MAI5D,SAASmuD,GAAqB/2C,GACnC,MAAM,iBAAE0sC,GAAqB1sC,EAE7B,OAAOpO,QAAQ86C,GAGV,SAASsK,GAAwBh3C,EAAqBpX,GAC3D,MAAM,WAAEuyC,GAAen7B,EAAO0sC,kBAAoB,GAClD,QAAKvR,GAIEA,EAAW/mC,SAASxL,GAGtB,SAASquD,GAAmCj3C,EAAqBtN,EAAgB4kC,GACtF,MAAM0a,EAAe5I,EAAmBppC,EAAQtN,GAChD,GAAKs/C,EAIL,OAAOvnD,OAAO+rB,OAAOw7B,GAClBp9C,QAAQxL,GAAYA,EAAQkuC,YAAcA,GAAaluC,EAAQusC,cAC/DjhC,KAAI,QAAC,YAAEihC,GAAH,SAAqBA,EAAaoV,iBAGpC,SAASiC,GAA0BhtC,EAAqBtN,EAAgB4kC,GAC7E,MAAM0a,EAAe5I,EAAmBppC,EAAQtN,GAChD,GAAKs/C,EAIL,OAAOvnD,OAAO6rB,KAAK07B,GAChBt9C,IAAI0sB,QACJxsB,QAAQtC,GAAO0/C,EAAa1/C,GAAIglC,YAAcA,IAG5C,SAAS4f,GAA8Bl3C,EAAqBtN,EAAgB4kC,GACjF,MAAQ6D,WAAYgc,GAAgBn3C,EAAO0sC,kBAAoB,GAC/D,IAAKyK,EACH,OAAO,EAGT,MAAMC,EAAWpK,GAA0BhtC,EAAQtN,EAAQ4kC,GAC3D,OAAO8f,GAAYA,EAASzS,OAAOryC,GAAO6kD,EAAY/iD,SAAS9B,KAG1D,SAAS+kD,GAA4Br3C,GAC1C,MAAM,WAAEm7B,GAAen7B,EAAO0sC,kBAAoB,GAElD,OAAOvR,EAAaA,EAAWvuC,OAAS,EAGnC,SAAS0qD,GACdt3C,EAAqBtN,GAErB,MAAM+C,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAChC,IAAK+C,EACH,OAGF,KAAKw4C,EAAAA,EAAAA,IAAoBjuC,EAAQvK,GAC/B,OAGF,MAAMu8C,EAAe5I,EAAmBppC,EAAQtN,GAC1C03C,EAAcC,EAAkBrqC,EAAQtN,EAAQ/G,EAAAA,IACtD,IAAKqmD,IAAiB5H,EACpB,OAGF,MAAMxhD,GAAY2uD,EAAAA,EAAAA,IAASnN,GAAc93C,IAC/B0/C,EAAa1/C,GAAIijC,YAAc3jC,QAAQogD,EAAa1/C,GAAIklD,mBAG5DC,GAAqBF,EAAAA,EAAAA,IAASnN,GAAc93C,GACzCV,QAAQogD,EAAa1/C,GAAIolD,6BAGlC,OAAI9uD,GAAa6uD,GAAsBA,EAAqB7uD,OAA5D,EAIOA,EAAYopD,EAAappD,QAAauL,EAGxC,SAASwjD,GAAuB33C,EAAqB5W,GAC1D,MAAMqM,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQ5W,EAAQsJ,QACxC,IAAK+C,EACH,OAGF,MAAMrD,EAAS0gD,GAAa9yC,EAAQ5W,GAE9BwuD,EAAUhmD,SAAQkmC,EAAAA,EAAAA,IAAgB1uC,KAAYyvC,EAAAA,EAAAA,IAAuBzvC,IACrEyuD,EAAUjmD,SAAQmmC,EAAAA,EAAAA,IAAgB3uC,KAAY0vC,EAAAA,EAAAA,IAAuB1vC,IACrE0uD,EAASlmD,SAAQymC,EAAAA,EAAAA,IAAgBjvC,KAAYkvC,EAAAA,EAAAA,IAAgBlvC,KAAY4uC,EAAAA,EAAAA,IAAmB5uC,KAE5F,6BACJ2uD,EADI,+BAEJC,EAFI,yBAGJC,EAHI,2BAIJC,EAJI,6BAKJC,EALI,+BAMJC,EANI,yBAOJC,EAPI,2BAQJC,EARI,4BASJC,EATI,8BAUJC,EAVI,wBAWJC,EAXI,0BAYJC,GACE14C,EAAO0mB,SAAS+B,MAEpB,OAAImvB,EACKe,GAAiB,CACtB34C,OAAAA,EACAvK,KAAAA,EACArD,OAAAA,EACAwmD,6BAA8Bb,EAC9Bc,+BAAgCb,EAChCc,yBAA0Bb,EAC1Bc,2BAA4Bb,IAI5BL,EACKc,GAAiB,CACtB34C,OAAAA,EACAvK,KAAAA,EACArD,OAAAA,EACAwmD,6BAA8BT,EAC9BU,+BAAgCT,EAChCU,yBAA0BT,EAC1BU,2BAA4BT,KAI5BR,GACKa,GAAiB,CACtB34C,OAAAA,EACAvK,KAAAA,EACArD,OAAAA,EACAwmD,6BAA8BL,EAC9BM,+BAAgCL,EAChCM,yBAA0BL,EAC1BM,2BAA4BL,IAOlC,SAASC,GAAT,GAgBG,IAhBuB,OACxB34C,EADwB,KAExBvK,EAFwB,OAGxBrD,EAHwB,6BAIxBwmD,EAJwB,+BAKxBC,EALwB,yBAMxBC,EANwB,2BAOxBC,GASC,EACD,MAAMC,EAAqBpnD,QAAQQ,IACjCA,EAAOE,KAAO0N,EAAOikB,gBAAiBg1B,EAAAA,EAAAA,IAA0Bj5C,EAAQ5N,KAG1E,OAAOR,QACJonD,GAAsBJ,IAClBI,GAAsBH,IAAkCnzB,EAAAA,EAAAA,IAASjwB,EAAKnD,KACvEwmD,IAA4BjqB,EAAAA,EAAAA,IAAYp5B,IACxCsjD,IAA8B/pB,EAAAA,EAAAA,IAAcv5B,IAI7C,SAASyjD,GAAuBl5C,EAAqB5W,GAC1D,MAAMqrC,GAAQsD,EAAAA,EAAAA,IAAgB3uC,KAAY0vC,EAAAA,EAAAA,IAAuB1vC,GACjE,IAAKqrC,EACH,OAGF,MAAM,kBACJ0kB,EADI,gBAEJC,GACEp5C,EAAO0mB,SAAS+B,MAEd4wB,EAAQ5kB,EAAM8B,OAAS9B,EAAMO,QAEnC,OAAQmkB,IAAsBE,GAAWD,GAAmBC,EAGvD,SAASC,GAAyBt5C,GACvC,OAAOA,EAAO0mB,SAAS+B,MAAM8wB,mBAGxB,SAASC,GAA8Bx5C,GAC5C,MAAM,qBAAEo2C,GAAyBp2C,EAC3By5C,EAAQrtD,KAAKsP,OAAO06C,EAAqB1hD,KAAI,QAAC,GAAEpC,GAAH,SAAYA,MAE/D,OAAO8jD,EAAqB/gB,MAAK,QAAC,GAAE/iC,GAAH,SAAYA,IAAOmnD,KAG/C,SAASC,GAAyB15C,EAAqB5W,GAAsB,MAClF,QAAOA,IAAUA,EAAQuwD,cAAR,WAAuB7L,EAAAA,EAAAA,IAAW9tC,EAAQ5W,EAAQsJ,eAAlD,aAAuB,EAAoCinD,cAGvE,SAASC,GAA0B55C,EAAqBtN,EAAgByoC,GAAuB,MACpG,cAAI2S,EAAAA,EAAAA,IAAW9tC,EAAQtN,UAAvB,OAAI,EAA4BinD,YAC9B,OAAO,EAGT,IAAKxe,EACH,OAAO,EAGT,MAAMf,EAAWgP,EAAmBppC,EAAQtN,GAE5C,OAAOyoC,EAAWpkC,MAAMnO,IAAD,uBAAewxC,EAASxxC,UAAxB,aAAe,EAAqB+wD,eAGtD,SAASE,GAAuB75C,EAAqBtN,GAC1D,MAAM+C,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAC1BtJ,EAAUqM,IAAQu5B,EAAAA,EAAAA,IAAcv5B,GAAQuK,EAAOo6B,SAASkS,kBAAkB55C,QAAUyB,EAE1F,OAAO/K,GAAWA,EAAQ0wD,WAAa1tD,KAAKoP,MAAMvQ,KAAKC,MAAQ,KAAQ9B,OAAU+K,EAG5E,SAAS4lD,GAAsB/5C,EAAqBtN,GAAgB,UACzE,GAAIA,IAAW6Z,EAAAA,GAA+B,OAE9C,MAAM4mC,GAAYztB,EAAAA,EAAAA,IAAShzB,GACrBsnD,EAAe,UAAGh6C,EAAOwqB,iBAAV,aAAG,EAAkBwvB,iBACpC,mBAAEC,GAAuBj6C,EAC/B,IAAKg6C,GAAoBC,MAAAA,IAAAA,EAAoBljD,MAC1Cua,GAAMA,EAAE4oC,WAAaF,IAAoB1oC,EAAE6oC,aAE5C,OAGF,GAAIhH,EACF,OAAO6G,EAGT,MAAMI,EAAgB,WAAGtM,EAAAA,EAAAA,IAAW9tC,EAAQtN,UAAtB,iBAAG,EAA4B8zB,gBAA/B,aAAG,EAAsC4zB,iBAC/D,OAAKA,MAAAA,GAAAA,EAAkBhmD,SAAS4lD,GAIzBA,OAJP,EAQK,SAASK,GAAmBr6C,GACjC,MAAM,OAAEtN,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GACjE,IAAKtN,IAAW29B,EACd,OAGF,MAAM8K,EAAa2V,EAAkB9wC,EAAQtN,EAAQ29B,EAAU,eAC/D,OAAK8K,EAIEA,EAAWzmC,KAAK9L,IACrB,MAAM,SAAEmtC,GAAakV,EAAkBjrC,EAAQtN,EAAQ9J,IAAc,GACrE,OAAOmtC,GAAW71B,EAAAA,EAAAA,IAAWF,EAAQ+1B,QAAY5hC,KAChDS,OAAOhD,cAPV,EC/4BK,SAAS0oD,GAAwBt6C,GACtC,MAAM,OAAEtN,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GACjE,IAAKtN,IAAW29B,EACd,OAGF,MAAM+U,GAAgB5J,EAAAA,EAAAA,IAAmB9oC,EAAQ29B,GAC3CkqB,EAAgBv6C,EAAOslC,gBAAgBC,gBAAgBH,GAC7D,OAAKmV,GAAkBA,EAAcvqC,SAI9BuqC,OAJP,EAOK,SAASC,GAAyBx6C,GACvC,MAAM,OAAEtN,GAAWi4C,EAAyB3qC,IAAW,GACvD,GAAKtN,EAIL,OAAOsN,EAAO6lC,iBAAiBC,SAASpzC,GCnBnC,SAAS+nD,GAAiBz6C,EAAqBtN,GACpD,OAAOsN,EAAOumC,WAAWT,SAASpzC,GAiB7B,SAASgoD,GAA4B16C,GAC1C,MAAM,OAAEtN,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GACjE,IAAKtN,IAAW29B,EACd,OAGF,IAAI3K,EAAAA,EAAAA,IAAShzB,GACX,MAAO,OAGT,MAAM+C,GAAOq4C,EAAAA,EAAAA,IAAW9tC,EAAQtN,GAChC,OAAK+C,GAIDo5B,EAAAA,EAAAA,IAAYp5B,GACP,QAGF,eARP,EC1BK,SAASklD,GAAwB36C,GACtC,MAAM,YAAE46C,GAAgB56C,EACxB,OAAOpO,QAAQgpD,EAAYhyD,WAAagyD,EAAYC,eAG/C,SAASC,GAA4B96C,GAC1C,OHkmBK,SAAiCA,GACtC,MAAM,YAAE+6C,GAAgB/6C,EACxB,OAAOpO,QAAQmpD,EAAYnyD,WGpmBpBoyD,CAAwBh7C,GAC7Bi7C,EAAAA,GAAAA,aACGC,EAAAA,IAA2BZ,GAAwBt6C,GACtDi7C,EAAAA,GAAAA,ODRG,SAAiCj7C,GACtC,MAAM,OAAEtN,EAAF,SAAU29B,GAAasa,EAAyB3qC,IAAW,GACjE,IAAKtN,IAAW29B,EACd,OAGF,MAAM8qB,EAAoBn7C,EAAOumC,WAAWT,SAASpzC,GACrD,OAAKyoD,GAAsBA,EAAkBnrC,SAItCmrC,OAJP,ECEIC,CAAwBp7C,GAC1Bi7C,EAAAA,GAAAA,gBAC+C9mD,IAA7Cu7C,EAA2B1vC,GAAQT,MACrC07C,EAAAA,GAAAA,mBAC2C9mD,IAAzCw7C,EAAuB3vC,GAAQT,MACjC07C,EAAAA,GAAAA,UACEj7C,EAAOq7C,yBAA2BC,EAAAA,GAAAA,OACpCL,EAAAA,GAAAA,cACEj7C,EAAOu7C,iBAAmB5Q,EAAyB3qC,GACrDi7C,EAAAA,GAAAA,cACE9mD,EAGC,SAASqnD,GAAyBx7C,GACvC,YAA+C7L,IAAxC2mD,GAA4B96C,GAG9B,SAASmtB,GAAYntB,GAC1B,MAAM,MAAE2tB,EAAF,qBAAS8tB,GAAyBz7C,EAAO0mB,SAAS+B,MAExD,OAAOgzB,GAAuBC,EAAAA,EAAAA,MAAmB/tB,ECrC5C,SAASguB,GAA+B37C,GAC7C,OAAOA,EAAOikC,aAAa1kC,MCDtB,SAASq8C,GAAoB57C,GAClC,OAAOA,EAAOknC,QAAQx0C,OAGjB,SAASmpD,GAAuB77C,GACrC,OAAOA,EAAOknC,QAAQt+C,UAGjB,SAASkzD,GAAoB97C,GAClC,OAAOA,EAAOknC,QAAQ6U,OAGjB,SAASC,GAAuBh8C,GACrC,OAAOA,EAAOknC,QAAQE,UAGjB,SAAS6U,GAA6Bj8C,GAC3C,OAAOA,EAAOknC,QAAQgV,aAAel8C,EAAOknC,QAAQgV,aAAaC,oBAAiBhoD,EAG7E,SAASioD,GAAwBp8C,GACtC,OAAOA,EAAOknC,QAAQU,kBCrBjB,SAASnd,GAAqBzqB,GACnC,OAAOA,EAAO0mB,SAAS+B,MAGlB,SAAS4zB,GAAuBr8C,GACrC,OAAOA,EAAO0mB,SAASmL,mB,eCJlB,SAAS3xB,EAAWF,EAAqB/B,GAC9C,OAAO+B,EAAOmlB,MAAMC,KAAKnnB,GAGpB,SAASq+C,EAAiBt8C,EAAqB/B,GACpD,OAAO+B,EAAOmlB,MAAMye,aAAa3lC,GAG5B,SAASs+C,EAAoBv8C,EAAqB/B,GAAgB,MACvE,MAAMtJ,EAAOuL,EAAWF,EAAQ/B,GAEhC,OAAOtJ,MAAAA,GAAP,UAAOA,EAAM6xB,gBAAb,aAAO,EAAgBkd,UAWlB,SAASuV,EAA0Bj5C,EAAqBC,GAC7D,OAAOD,EAAO2iC,aAAe3iC,EAAO2iC,YAAYjF,QAAQtpC,SAAS6L,EAAW3N,I,6DCnBvE,IAAKkqD,EAMAC,EA8IAC,EA0DAC,EAYAC,EASA3B,EAUA4B,EAYAC,EAMAC,EAOA12B,EAOA22B,EAsBA1B,EAWA2B,EAMAC,E,kKApTAV,GAAAA,EAAAA,EAAAA,UAAAA,GAAAA,YAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,OAAAA,GAAAA,S,CAAAA,IAAAA,EAAAA,K,SAMAC,GAAAA,EAAAA,EAAAA,GAAAA,GAAAA,KAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,OAAAA,GAAAA,S,CAAAA,IAAAA,EAAAA,K,SA8IAC,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gBAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,sBAAAA,GAAAA,wBAAAA,EAAAA,EAAAA,2BAAAA,GAAAA,6BAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,mBAAAA,GAAAA,qBAAAA,EAAAA,EAAAA,gBAAAA,IAAAA,kBAAAA,EAAAA,EAAAA,oBAAAA,IAAAA,sBAAAA,EAAAA,EAAAA,kBAAAA,IAAAA,oBAAAA,EAAAA,EAAAA,kBAAAA,IAAAA,oBAAAA,EAAAA,EAAAA,kCAAAA,IAAAA,oCAAAA,EAAAA,EAAAA,iCAAAA,IAAAA,mCAAAA,EAAAA,EAAAA,+BAAAA,IAAAA,iCAAAA,EAAAA,EAAAA,8BAAAA,IAAAA,gCAAAA,EAAAA,EAAAA,mCAAAA,IAAAA,qCAAAA,EAAAA,EAAAA,kCAAAA,IAAAA,oCAAAA,EAAAA,EAAAA,iCAAAA,IAAAA,mCAAAA,EAAAA,EAAAA,gCAAAA,IAAAA,kCAAAA,EAAAA,EAAAA,iCAAAA,IAAAA,mCAAAA,EAAAA,EAAAA,gCAAAA,IAAAA,kCAAAA,EAAAA,EAAAA,sBAAAA,IAAAA,wBAAAA,EAAAA,EAAAA,oBAAAA,IAAAA,sBAAAA,EAAAA,EAAAA,QAAAA,IAAAA,UAAAA,EAAAA,EAAAA,oBAAAA,IAAAA,sBAAAA,EAAAA,EAAAA,kBAAAA,IAAAA,oBAAAA,EAAAA,EAAAA,8BAAAA,IAAAA,gCAAAA,EAAAA,EAAAA,qBAAAA,IAAAA,uBAAAA,EAAAA,EAAAA,iCAAAA,IAAAA,mCAAAA,EAAAA,EAAAA,qBAAAA,IAAAA,uBAAAA,EAAAA,EAAAA,iCAAAA,IAAAA,mCAAAA,EAAAA,EAAAA,cAAAA,IAAAA,gBAAAA,EAAAA,EAAAA,iBAAAA,IAAAA,mBAAAA,EAAAA,EAAAA,wBAAAA,IAAAA,0BAAAA,EAAAA,EAAAA,qBAAAA,IAAAA,uBAAAA,EAAAA,EAAAA,sBAAAA,IAAAA,wBAAAA,EAAAA,EAAAA,0BAAAA,IAAAA,4BAAAA,EAAAA,EAAAA,aAAAA,IAAAA,eAAAA,EAAAA,EAAAA,2BAAAA,IAAAA,6BAAAA,EAAAA,EAAAA,uBAAAA,IAAAA,yBAAAA,EAAAA,EAAAA,2BAAAA,IAAAA,6BAAAA,EAAAA,EAAAA,wBAAAA,IAAAA,0BAAAA,EAAAA,EAAAA,aAAAA,IAAAA,eAAAA,EAAAA,EAAAA,kCAAAA,IAAAA,oCAAAA,EAAAA,EAAAA,mBAAAA,IAAAA,qBAAAA,EAAAA,EAAAA,uBAAAA,IAAAA,yBAAAA,EAAAA,EAAAA,qBAAAA,IAAAA,uBAAAA,EAAAA,EAAAA,cAAAA,IAAAA,gB,CAAAA,IAAAA,EAAAA,K,SA0DAC,GAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,aAAAA,GAAAA,eAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,gBAAAA,GAAAA,kBAAAA,EAAAA,EAAAA,gBAAAA,GAAAA,kBAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gBAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gB,CAAAA,IAAAA,EAAAA,K,SAYAC,GAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,MAAAA,GAAAA,Q,CAAAA,IAAAA,EAAAA,K,SASA3B,GAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gBAAAA,EAAAA,EAAAA,UAAAA,GAAAA,YAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gB,CAAAA,IAAAA,EAAAA,K,SAUA4B,GAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,gBAAAA,GAAAA,kBAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,cAAAA,GAAAA,gBAAAA,EAAAA,EAAAA,eAAAA,GAAAA,iBAAAA,EAAAA,EAAAA,mBAAAA,GAAAA,qBAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,eAAAA,GAAAA,iBAAAA,EAAAA,EAAAA,aAAAA,GAAAA,e,CAAAA,IAAAA,EAAAA,K,SAYAC,GAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,OAAAA,GAAAA,S,CAAAA,IAAAA,EAAAA,K,SAMAC,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,MAAAA,GAAAA,Q,CAAAA,IAAAA,EAAAA,K,SAOA12B,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,MAAAA,GAAAA,Q,CAAAA,IAAAA,EAAAA,K,SAOA22B,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,MAAAA,GAAAA,Q,CAAAA,IAAAA,EAAAA,K,SAsBA1B,GAAAA,EAAAA,EAAAA,OAAAA,GAAAA,SAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,QAAAA,GAAAA,U,CAAAA,IAAAA,EAAAA,K,SAWA2B,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,WAAAA,GAAAA,a,CAAAA,IAAAA,EAAAA,K,SAMAC,GAAAA,EAAAA,EAAAA,aAAAA,GAAAA,eAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,SAAAA,GAAAA,W,CAAAA,IAAAA,EAAAA,KAOL,MAAMn2B,EAA2B,2BAEjC,IAAKo2B,G,SAAAA,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,gBAAAA,GAAAA,kBAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,mBAAAA,GAAAA,qBAAAA,EAAAA,EAAAA,UAAAA,GAAAA,YAAAA,EAAAA,EAAAA,iBAAAA,GAAAA,mBAAAA,EAAAA,EAAAA,kBAAAA,GAAAA,oBAAAA,EAAAA,EAAAA,2BAAAA,GAAAA,6BAAAA,EAAAA,EAAAA,qBAAAA,GAAAA,uBAAAA,EAAAA,EAAAA,mBAAAA,GAAAA,qBAAAA,EAAAA,EAAAA,mBAAAA,IAAAA,qBAAAA,EAAAA,EAAAA,gBAAAA,IAAAA,kBAAAA,EAAAA,EAAAA,mBAAAA,IAAAA,qBAAAA,EAAAA,EAAAA,aAAAA,IAAAA,eAAAA,EAAAA,EAAAA,eAAAA,IAAAA,iBAAAA,EAAAA,EAAAA,QAAAA,IAAAA,UAAAA,EAAAA,EAAAA,WAAAA,IAAAA,aAAAA,EAAAA,EAAAA,UAAAA,IAAAA,YAAAA,EAAAA,EAAAA,WAAAA,IAAAA,aAAAA,EAAAA,EAAAA,aAAAA,IAAAA,e,CAAAA,IAAAA,EAAAA,M,0EC9TZ,IAAIC,EAEG,SAASC,EAAcC,EAAgBC,GACvCA,IACCH,IAAoBA,EAAgBI,cACtCJ,EAAgBI,aAAc,GAIhCJ,EADAG,EAAW,CAAEC,aAAa,KAIvBD,EAAUC,aAAeF,MAC5Bx9B,EAAAA,EAAAA,KAAQ,KACNu9B,EAAcC,EAAMC,MAKnB,SAASE,EAAQH,GAClBA,MACFx9B,EAAAA,EAAAA,KAAQ,KACN29B,EAAQH,MAgBP,MAAMI,EAAkB,CAC7BC,OAASpwD,GAAcA,EACvBqwD,OAASrwD,GAAcA,GAAK,MAC5BswD,QAAUtwD,GAAc,GAAK,EAAIA,GAAK,OACtCuwD,UAAYvwD,GAAc,IAAOnB,KAAK2xD,KAAKxwD,EAAI,IAAOnB,KAAK4xD,IAAM,GACjEC,WAAa1wD,GAAcA,EAAIA,EAC/B2wD,YAAc3wD,GAAcA,GAAK,EAAIA,GACrC4wD,cAAgB5wD,GAAeA,EAAI,GAAM,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,EACtD6wD,YAAc7wD,GAAcA,EAAIA,EAAIA,EACpC8wD,aAAe9wD,KAAiBA,EAAKA,EAAIA,EAAI,EAC7C+wD,eAAiB/wD,GAAeA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,EAChGgxD,YAAchxD,GAAcA,EAAIA,EAAIA,EAAIA,EACxCixD,aAAejxD,GAAc,KAAOA,EAAKA,EAAIA,EAAIA,EACjDkxD,eAAiBlxD,GAAeA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAOA,EAAKA,EAAIA,EAAIA,EACtFmxD,YAAcnxD,GAAcA,EAAIA,EAAIA,EAAIA,EAAIA,EAC5CoxD,aAAepxD,GAAc,IAAOA,EAAKA,EAAIA,EAAIA,EAAIA,EACrDqxD,eAAiBrxD,GAAeA,EAAI,GAAM,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,KAAQA,EAAKA,EAAIA,EAAIA,EAAIA,GAG3F,SAASsxD,EAAT,GAOgB,IAPO,OAC5BC,EAASpB,EAAgBC,OADG,SAE5B51D,EAF4B,SAG5B2mB,EAH4B,MAI5BC,EAJ4B,KAK5BrL,EAL4B,GAM5BgqC,GACqB,EACrB,MAAMyR,EAAK9zD,KAAKC,MAChB,IAAI8zD,GAAW,EAkBf,OAhBAvB,GAAQ,KACN,GAAIuB,EAAU,OAAO,EAErB,IAAIzxD,GADOtC,KAAKC,MACF6zD,GAAMrwC,EAChBnhB,EAAI,IAAGA,EAAI,GACf,MAAM64B,EAAW04B,EAAOvxD,GACxB,GAAoB,iBAAT+V,GAAmC,iBAAPgqC,EACrCvlD,EAASub,GAASgqC,EAAKhqC,GAAQ8iB,QAC1B,GAAIrwB,MAAMC,QAAQsN,IAASvN,MAAMC,QAAQs3C,GAAK,CACnD,MAAMh1C,EAASgL,EAAK5O,KAAI,CAACuqD,EAAGlyD,IAAMkyD,GAAM3R,EAAGvgD,GAAKkyD,GAAK74B,IACrDr+B,EAASuQ,GAGX,OADU,IAAN/K,GAAWohB,GAAOA,IACfphB,EAAI,KAGN,KACLyxD,GAAW,EACPrwC,GAAOA,O,8CC1FR,SAAS8V,EAAey6B,GACe,mBAAjC31D,OAAOw5B,UAAUo8B,aAI5B51D,OAAOw5B,UAAUo8B,YAAYD,GAAar0D,OAAOZ,IAC3ChC,EAAAA,IAEFC,QAAQW,MAAMoB,Q,cCVL,SAASs2B,EAAqB6+B,EAA0BC,GACrE,GAAID,IAAiBC,EACnB,OAAO,EAGT,MAAMC,EAAc70D,OAAO6rB,KAAK8oC,GAC1BG,EAAoBD,EAAY1yD,OAGtC,GAAI2yD,IAFkB90D,OAAO6rB,KAAK+oC,GAAUzyD,OAG1C,OAAO,EAGT,GAA0B,IAAtB2yD,EACF,OAAO,EAGT,IAAK,IAAIxyD,EAAI,EAAGA,EAAIwyD,EAAmBxyD,IAAK,CAC1C,MAAMyyD,EAAOF,EAAYvyD,GACzB,GAAIqyD,EAAaI,KAAUH,EAASG,GAClC,OAAO,EAIX,OAAO,EAGF,SAASp/B,EAAgBg/B,EAA0BC,GACxD,MAAMC,EAAc70D,OAAO6rB,KAAK8oC,GAIhC,OAH0BE,EAAY1yD,SAChBnC,OAAO6rB,KAAK+oC,GAAUzyD,OAGnC,CAAC,YAGH0yD,EAAY3nD,QAAO,CAACioB,EAAK4/B,KAC1BJ,EAAaI,KAAUH,EAASG,IAClC5/B,EAAIhyB,KAAM,GAAE4xD,MAASJ,EAAaI,SAAYH,EAASG,MAGlD5/B,IACN,I,yCCvCU,SAASpvB,IAAgC,2BAAdmI,EAAc,yBAAdA,EAAc,gBACtD,OAAOA,EAAM/D,OAAOhD,SAASzD,KAAK,KAG7B,SAASyM,EAAuBojB,GACrC,OAAO,SAACyhC,GACN,MAAMC,EAA2B,MAAhBD,EAAsBzhC,EAAiB,GAAEA,MAAkByhC,IADd,2BAAhCE,EAAgC,iCAAhCA,EAAgC,kBAG9D,OAAOA,EAAUhoD,QAAiB,CAAC8e,EAAKmpC,KAClCA,IAEE7pD,MAAMC,QAAQ4pD,GAChBnpC,EAAI7oB,QAAQgyD,GAEZnpC,EAAI7oB,KAAM,GAAE8xD,MAAaE,MAItBnpC,IACN,CAACipC,IAAWvxD,KAAK,M,gGCrBxB,MAAMm2B,EAAWu7B,KAAKC,OAEf,IAAKC,EAML50D,eAAe60D,EACpBC,EAAmBlmC,EAAavxB,GAChC,IAD4C03D,EAC5C,wDACA,GAAK57B,EAIL,IAEE,MAAM67B,EAAU,IAAIC,QAAQrmC,EAAIlrB,QAAQ,KAAM,MACxCwxD,QAAc/7B,EAASg8B,KAAKL,GAC5Bj3D,QAAiBq3D,EAAM1xD,MAAMwxD,GACnC,IAAKn3D,EACH,OAGF,MAAMoyC,EAAcpyC,EAASu3D,QAAQ53D,IAAI,gBAEzC,OAAQH,GACN,KAAKu3D,EAAKpjC,KACR,aAAa3zB,EAASoG,OACxB,KAAK2wD,EAAKS,KAAM,CAEd,GAAIzmC,EAAIzf,WAAW,WAAa8gC,GAAeA,EAAY9gC,WAAW,QACpE,OAGF,MAAMmmD,QAAaz3D,EAASy3D,OACtBC,GAAkBD,EAAKj4D,OAAU03D,GAAiBO,EAAKj4D,KAAK4L,SAAS,QAE3E,IAAIusD,EAAeF,EAAKj4D,MAAQ4yC,EAEhC,OAAMslB,GAAkBC,GAKnBT,IACHS,EAAeA,EAAa9xD,QAAQ,SAAU,KAGzC,IAAI2xD,KAAK,CAACC,GAAO,CAAEj4D,KAAMm4D,KARvBF,EAUX,KAAKV,EAAKa,KACR,aAAa53D,EAAS63D,OACxB,QACE,QAEJ,MAAO52D,GAGP,YADA/B,QAAQ4B,KAAKG,IAKVkB,eAAe21D,EAAKb,EAAmBlmC,EAAaxxB,GACzD,GAAK+7B,EAIL,IACE,MAAMy8B,EAA4B,iBAATx4D,GAAqBA,aAAgBi4D,KAAOj4D,EAAO6jC,KAAKG,UAAUhkC,GAErF43D,EAAU,IAAIC,QAAQrmC,EAAIlrB,QAAQ,KAAM,MACxC7F,EAAW,IAAIg4D,SAASD,GACxBV,QAAc/7B,EAASg8B,KAAKL,GAClC,aAAaI,EAAMY,IAAId,EAASn3D,GAChC,MAAOiB,GAGP,YADA/B,QAAQ4B,KAAKG,IAKVkB,eAAe+1D,EAAMjB,GAC1B,IACE,IAAK37B,EACH,OAGF,aAAaA,EAASv5B,OAAOk1D,GAC7B,MAAOh2D,GAGP,YADA/B,QAAQ4B,KAAKG,K,SAzFL81D,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,KAAAA,GAAAA,O,CAAAA,IAAAA,EAAAA,M,eCHL,SAASoB,IACd,MAAMrgC,EAAiC,GAUvC,SAASwB,EAAe3U,GACtB,MAAMzX,EAAQ4qB,EAAUtvB,QAAQmc,IACjB,IAAXzX,GACF4qB,EAAUhzB,OAAOoI,EAAO,GAc5B,MAAO,CACL0rB,aAXF,WAAsC,2BAAbj4B,EAAa,yBAAbA,EAAa,gBACpCm3B,EAAU7qB,SAAShN,IACjBA,KAAYU,OAUd04B,YA3BF,SAAqB1U,GAGnB,OAFAmT,EAAUlzB,KAAK+f,GAER,KACL2U,EAAe3U,KAwBjB2U,eAAAA,EACA8+B,aARF,WACE,OAAOxvD,QAAQkvB,EAAUl0B,U,+DCrBd,SAASoY,EAAsB8P,GAC5C,OAAOusC,EAAAA,EAAAA,GAAwB,CAAEC,MAAOxsC,M,+BCA1C,MAAMysC,EAAgD,CACpDC,MAAO,UACPC,UAAW,cACXC,OAAQ,WACRC,IAAK,QACLC,OAAQ,QACRC,QAAS,OACTC,UAAW,SACXC,UAAW,SACXC,WAAY,UACZC,IAAK,SAGDC,EAA2C,CAC/CC,QAAS,GACTC,SAAU,GACVC,YAAa,GACbf,MAAO,GACPgB,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRC,QAAS,GACTC,MAAO,IAGM,SAASC,EAAyBpvD,GAiB/C,OAhBKqvD,KACHxxD,SAAS9I,iBAAiB,UAAW+c,GAAe,GAGrD5a,OAAO6rB,KAAK/iB,GAAgC0C,SAAS4sD,IACpD,MAAM/tC,EAAUvhB,EAAQsvD,GACxB,IAAK/tC,EACH,OAGF,MAAMguC,EAAuBZ,EAASW,GAClCC,GACFA,EAAqBl1D,KAAKknB,MAIvB,MAyBT,SAAiCvhB,GAC9B9I,OAAO6rB,KAAK/iB,GAAgC0C,SAAS4sD,IACpD,MAAM/tC,EAAUvhB,EAAQsvD,GAClBC,EAAuBZ,EAASW,GACtC,GAAIC,EAAsB,CACxB,MAAM5sD,EAAQ4sD,EAAqBzxC,WAAW1D,GAAOA,IAAOmH,KAC7C,IAAX5e,GACF4sD,EAAqBh1D,OAAOoI,EAAO,OAKpC0sD,KACHxxD,SAAS8d,oBAAoB,UAAW7J,GAAe,GArCvD09C,CAAwBxvD,IAI5B,SAASqvD,IACP,OAAOn4D,OAAO+rB,OAAO0rC,GAAUnrD,MAAMisD,GAAgBpxD,QAAQoxD,EAAYp2D,UAG3E,SAASyY,EAActV,GACrB,MAAM8yD,EAActB,EAAiBxxD,EAAEgqB,KACvC,IAAK8oC,EACH,OAGF,MAAM,OAAEj2D,GAAWs1D,EAASW,GACvBj2D,IAGLmD,EAAEoL,mBAGF2Z,EADgBotC,EAASW,GAAaj2D,EAAS,IACtCmD,M,wLCnEX,MAAMkzD,EAAgB,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACnFC,EAAc,CAClB,UAAW,WAAY,QAAS,QAAS,MAAO,OAChD,OAAQ,SAAU,YAAa,UAAW,WAAY,YAGlDC,EAAwBD,EAAYxuD,KAAK0uD,GAAUA,EAAMzpD,gBAIlD0pD,EAAsB,MAE5B,SAASC,EAAQzvB,GACtB,OAAO0vB,EAAY,IAAIt4D,QAAYs4D,EAAY1vB,GAG1C,SAAS0vB,EAAYC,GAC1B,MAAM3vB,EAAO,IAAI5oC,KAAKu4D,GAEtB,OADA3vB,EAAKkJ,SAAS,EAAG,EAAG,EAAG,GAChBlJ,EAGF,SAAS4vB,EAAcD,GAC5B,OAAOD,EAAYC,GAAU7mB,UAGxB,SAAS+mB,EAAYC,GAC1B,MAAM9vB,EAAO,IAAI5oC,KAAiB,IAAZ04D,GACtB,MAAQ,GAAE9vB,EAAK+vB,iBAAiB/vB,EAAKgwB,aAGvC,SAASC,EAAYjwB,GACnB,MAAQ,GAAEA,EAAK+vB,iBAAiB/vB,EAAKgwB,WAAa,KAAKhwB,EAAKqJ,YAIvD,SAAS5L,EAAWr+B,EAAcuwD,GACvC,MAAM3vB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EAC3Dr5B,EAAal3B,EAAKk3B,YAAc,MAEtC,IAAI45B,EAAQlwB,EAAKmwB,WACbC,EAAS,GAMb,MALmB,QAAf95B,IACF85B,EAASF,GAAS,GAAK,MAAQ,MAC/BA,EAAQA,EAAQ,GAAKA,EAAQ,GAAKA,GAG5B,GAAEh2D,OAAOg2D,GAAOG,SAAS,EAAG,QAAQn2D,OAAO8lC,EAAKswB,cAAcD,SAAS,EAAG,OAAOD,IAGpF,SAASG,EAAoBnxD,EAAcuwD,GAChD,MAAM3vB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EAE3D1mB,EAAQymB,EAAY,IAAIt4D,MAC9B,GAAI4oC,GAAQiJ,EACV,OAAOxL,EAAWr+B,EAAM4gC,GAG1B,MAAMwwB,EAAU,IAAIp5D,KAAK6xC,GAEzB,GADAunB,EAAQpnB,QAAQH,EAAMI,UAAY,GAC9BrJ,GAAQwwB,EACV,OAAOpxD,EAAM,gBAAegwD,EAAcpvB,EAAKywB,aAGjD,MAAMC,EAAW1wB,EAAK+vB,gBAAkB9mB,EAAM8mB,cACxCY,EACJvxD,EAAKsxD,EAAW,yBAA2B,wBACvCA,EAAW,aAAe,SAGhC,OAAOE,EAAWxxD,EAAM4gC,EAAM2wB,GAGzB,SAASrnB,EAAelqC,EAAcuwD,GAC3C,MAAM3vB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EAC3DgB,EAASvxD,EAAK,qBAAuB,aAE3C,OAAOwxD,EAAWxxD,EAAM4gC,EAAM2wB,GAGzB,SAASE,EAAmBzxD,EAAc4gC,GAA6B,IAAjB8wB,EAAiB,wDAC5E,MAAMH,EAASvxD,EAAK0xD,EAAU,sBAAwB,uBAAyB,WAE/E,OAAOF,EAAWxxD,EAAM4gC,EAAM2wB,GAGzB,SAASI,EACd3xD,EACA4xD,GAEA,MAAMC,EAAO14D,KAAKC,MAAMw4D,EAASxB,GACjC,OAAIwB,EAAS,EACJ,EACEC,EAAO,EACTC,EAAoBF,EAAS,KAC3BC,EAAO,EACT7xD,EAAK,OAAQ6xD,GACXA,EAAO,GACT7xD,EAAK,QAAS7G,KAAKC,MAAMy4D,EAAO,IAC9BA,EAAO,IACT7xD,EAAK,SAAU7G,KAAKC,MAAMy4D,EAAO,KAEjC7xD,EAAK,QAAS7G,KAAKC,MAAMy4D,EAAO,MAIpC,SAASE,EACd/xD,EACAuwD,GAIA,IAHAmB,EAGA,wDAFAM,EAEA,wDADAC,EACA,uCACA,MAAMrxB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EAE3D1mB,EAAQymB,EAAY,IAAIt4D,MAE9B,IAAKg6D,EAAY,CACf,GAAInB,EAAYjwB,KAAUiwB,EAAYhnB,GACpC,OAAQooB,IAAiBP,EAAUQ,EAAaC,GAAYnyD,EAAK,kBAGnE,MAAM+pC,EAAY,IAAI/xC,KAAK6xC,GAE3B,GADAE,EAAUC,QAAQH,EAAMI,UAAY,GAChC4mB,EAAYjwB,KAAUiwB,EAAY9mB,GACpC,OAAQkoB,IAAiBP,EAAUQ,EAAaC,GAAYnyD,EAAK,sBAGnE,MAAMoxD,EAAU,IAAIp5D,KAAK6xC,GACnBuoB,EAAY,IAAIp6D,KAAK6xC,GAG3B,GAFAunB,EAAQpnB,QAAQH,EAAMI,UAAY,GAClCmoB,EAAUpoB,QAAQH,EAAMI,UAAY,GAChCrJ,GAAQwwB,GAAWxwB,GAAQwxB,EAAW,CACxC,MAAMC,EAAUrC,EAAcpvB,EAAKywB,UAGnC,OAAQY,IAAiBP,EAAUQ,EAAaC,GAFhBnyD,EAAV0xD,EAAgB,gBAAeW,IAAmB,WAAUA,OAMtF,MAAMf,EAAW1wB,EAAK+vB,gBAAkB9mB,EAAM8mB,cACxC2B,EAAYZ,EACbJ,EAAW,yBAA2B,qBACtCA,EAAW,eAAiB,WAC3BC,EAASvxD,EAAKsyD,IAAc,cAElC,OAAQL,IAAiBP,EAAUQ,EAAaC,GAAYX,EAAWxxD,EAAM4gC,EAAM2wB,IAGrF,SAASC,EAAWxxD,EAAc4gC,EAAY2wB,GAC5C,MAAMgB,EAAM3xB,EAAKqJ,UACXuoB,EAAa5xB,EAAKgwB,WAExB,OAAOW,EACJ31D,QAAQ,OAAQoE,EAAKiwD,EAAYuC,KACjC52D,QAAQ,OAAQoE,EAAM,YAAWiwD,EAAYuC,OAC7C52D,QAAQ,MAAOoE,EAAM,cAAaiwD,EAAYuC,OAC9C52D,QAAQ,KAAMd,OAAO03D,EAAa,GAAGvB,SAAS,EAAG,MACjDr1D,QAAQ,KAAMd,OAAOy3D,GAAKtB,SAAS,EAAG,MACtCr1D,QAAQ,IAAKd,OAAOy3D,IACpB32D,QAAQ,OAAQd,OAAO8lC,EAAK+vB,gBAE5B/0D,QAAQ,QAAS,MAGf,SAAS62D,EACdzyD,EACAuwD,EACA0B,GAEA,MAAMrxB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EAEjE,MAAQ,GAAEwB,EAAgB/xD,EAAM4gC,GAAM,OAAM1/B,EAAW+wD,OAAkB5zB,EAAWr+B,EAAM4gC,KAGrF,SAASkxB,EAAoBr2C,EAAkBi3C,GACpD,MAAM5B,EAAQ33D,KAAKC,MAAMqiB,EAAW,MAC9Bk3C,EAAUx5D,KAAKC,MAAOqiB,EAAW,KAAQ,IACzCm3C,EAAUz5D,KAAKC,MAAMqiB,EAAW,KAAO,IAEvCo3C,EAAWH,EAAWv5D,KAAKC,MAAMs5D,EAAW,MAAQ,EACpDI,EAAaJ,EAAWv5D,KAAKC,MAAOs5D,EAAW,KAAQ,IAAM,EACnE,IAAIK,EAAS,GAWb,OAVIjC,EAAQ,GAAK+B,EAAW,GAC1BE,GAAW,GAAEj4D,OAAOg2D,GAAOG,SAAS,EAAG,QACvC8B,GAAW,GAAEj4D,OAAO63D,GAAS1B,SAAS,EAAG,SAEzC8B,GADSD,GAAc,GACZ,GAAEh4D,OAAO63D,GAAS1B,SAAS,EAAG,QAE9B,GAAEn2D,OAAO63D,MAEtBI,GAAUj4D,OAAO83D,GAAS3B,SAAS,EAAG,KAE/B8B,EAGF,SAASC,EAA0BC,GACxC,MAAMvtD,EAAQ,GAEd,IAAIwtD,EAAeD,EAAe,IAClCA,GAAgBC,EAChBA,EAAe/5D,KAAKC,MAAM85D,EAAe,IAGzC,MAAMN,GADNK,EAAe95D,KAAKC,MAAM65D,EAAe,MACV,GAC/BA,GAAgBL,EAGhB,MAAMD,GADNM,EAAe95D,KAAKC,MAAM65D,EAAe,KACV,GAC/BA,GAAgBN,EAGhB,MAAM7B,GADNmC,EAAe95D,KAAKC,MAAM65D,EAAe,KACZ,GAQ7B,OANInC,EAAQ,GACVprD,EAAM/K,KAAKG,OAAOg2D,GAAOG,SAAS,EAAG,MAEvCvrD,EAAM/K,KAAKG,OAAO63D,GAAS1B,SAASH,EAAQ,EAAI,EAAI,EAAG,MACvDprD,EAAM/K,KAAKG,OAAO83D,GAAS3B,SAAS,EAAG,MAE/B,GAAEvrD,EAAMxK,KAAK,QAAQJ,OAAOo4D,GAAcjC,SAAS,EAAG,OAGzD,SAAS7yB,EAAmBmyB,GAA2C,IAAlB4C,EAAkB,uDAAT,QACnE,MAAMvyB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EACjE,OAAO3vB,EAAKwyB,eACVD,EACA,CACEE,KAAM,UACNlD,MAAO,QACPoC,IAAK,YAKJ,SAASe,EAAuB/C,GAA2C,IAAlB4C,EAAkB,uDAAT,QACvE,MAAMvyB,EAA2B,iBAAb2vB,EAAwB,IAAIv4D,KAAKu4D,GAAYA,EACjE,OAAO3vB,EAAKwyB,eACVD,EACA,CACEE,KAAM,UACNlD,MAAO,QACPoC,IAAK,UACLgB,KAAM,UACNC,OAAQ,UACRC,OAAQ,YAKd,SAASC,EAAYnB,EAAapC,GAAqC,IAAtBkD,EAAsB,uDAAf,KACtD,GAAIlD,EAASwD,IAA0BpB,EAnPhB,GAoPrB,OAAO,EAET,MAAM3xB,EAAO,IAAI5oC,KAAKq7D,EAAMlD,EAAOoC,GACnC,OAAQpkC,OAAOC,MAAMwS,EAAK8I,YAAc9I,EAAKqJ,YAAcsoB,EAGtD,SAASqB,IAAgD,IAAhCtnD,EAAgC,uDAAxB,GACtC,MAAMunD,EAAkBvnD,EAAM5Q,MAAM,yBAC9Bo4D,EAAwBxnD,EAAM5Q,MAAM,yBACpCq4D,EAAkBznD,EAAM5Q,MAAM,sCACpC,IAAKm4D,IAAoBE,IAAoBD,EAC3C,OAGF,GAAIC,EAAiB,CACnB,MAAOnzB,EAAMuvB,EAAOkD,GAAQ/mD,EAAMxQ,MAAM,SAAS2F,IAAI0sB,QACrD,OAASklC,GAAQA,EArQG,OAqQwBK,EAAY9yB,EAAMuvB,EAAQ,EAAGkD,QAAQnyD,QAE7EA,EADC,GAAEmyD,EAAQ,GAAEA,KAAU,KAAKv4D,OAAOq1D,GAAOc,SAAS,EAAG,QAAQn2D,OAAO8lC,GAAMqwB,SAAS,EAAG,OAI7F,MAAM+C,EAAY1nD,EAAMxQ,MAAM,KACxB8kC,EAAOizB,EAAkBG,EAAU,GAAKA,EAAU,GAClD7D,GAAS0D,EAAkBG,EAAU,GAAKA,EAAU,IAAIttD,cACxD8rD,EAAatC,EAAsB9xC,WAAWsB,GAASA,EAAKrY,WAAW8oD,KAE7E,OAAuB,IAAhBqC,GAAqBkB,EAAYvlC,OAAOyS,GAAO4xB,GACjD,GAAE13D,OAAO03D,EAAa,GAAGvB,SAAS,EAAG,QAAQn2D,OAAO8lC,GAAMqwB,SAAS,EAAG,YACvE/vD,EAGC,SAAS+yD,EAAiBvD,GAC/B,OAAOA,EAAYN,EAAsB,IAG3C,SAAS+B,EAAW+B,GAClB,MAAQ,GAAEA,EAAI,GAAGxtD,gBAAgBwtD,EAAIl4D,MAAM,KAG7C,SAASk2D,EAAWgC,GAClB,MAAQ,GAAEA,EAAI,GAAGl5D,gBAAgBk5D,EAAIl4D,MAAM,O,0EClS7C,MAAMm4D,EAAiB,CAAC,cAAe,YAAa,kBAa9CC,EAAgD,CACpD,CAAC,6BAA8B,UAC/B,CAAC,gCAAiC,UAClC,CAAC,mCAAoC,UAGvC,SAASC,EAAgBC,GACvB,MACMC,EADWD,EAAQx4D,MAAM,KACH2F,KAAK3H,GAAM06D,SAAS16D,EAAG,MAEnD,OAAOgB,OAAO25D,iBAAiBF,GAG1B,SAAS5uD,EAAoBxJ,GAElC,IAAKA,EAAKT,MAAMkJ,EAAAA,GAAc,OAAOzI,EAErC,IAAK,MAAOu4D,EAAOC,KAAgBP,EACjCj4D,EAAOA,EAAKP,QAAQ84D,EAAOC,GAG7B,OAAOx4D,EAGF,SAAS2J,EAAgB/B,GAC9B,IAAIzC,EAEJ,GAAqB,IAAjByC,EAAMpK,OACR2H,EAAOyC,EAAMtJ,WAAW,GAAGmgC,SAAS,IAAIq2B,SAAS,EAAG,SAC/C,CACL,MAAM2D,EAAQ,GACd,IAAK,IAAI96D,EAAI,EAAGA,EAAIiK,EAAMpK,OAAQG,IAC5BiK,EAAMtJ,WAAWX,IAAM,OAAUiK,EAAMtJ,WAAWX,IAAM,MACtDiK,EAAMtJ,WAAWX,EAAI,IAAM,OAAUiK,EAAMtJ,WAAWX,EAAI,IAAM,OAClE86D,EAAMj6D,KAC6B,MAAhCoJ,EAAMtJ,WAAWX,GAAK,QAClBiK,EAAMtJ,WAAWX,EAAI,GAAK,OAAU,QAGpCiK,EAAMtJ,WAAWX,GAAK,OAAUiK,EAAMtJ,WAAWX,GAAK,QAC/D86D,EAAMj6D,KAAKoJ,EAAMtJ,WAAWX,IAIhCwH,EAAOszD,EAAMnzD,KAAKiS,GAAMA,EAAEknB,SAAS,IAAIq2B,SAAS,EAAG,OAAM/1D,KAAK,KAGhE,OAAOoG,EAGF,SAASuzD,EAAgBv/D,GAC9B,MAAMw/D,EAAuB,CAAEC,WAAY,GAAInvD,OAAQ,IAEvD,IAAK,IAAI9L,EAAI,EAAGA,EAAIxE,EAAKqE,OAAQG,GAAK,EAAG,CACvC,MAAMwzC,EAAW,CACfjuC,GAAI/J,EAAKwE,GAAG,GACZ/C,KAAMzB,EAAKwE,GAAG,GACd8L,OAAQ,IAGV,IAAK,IAAI3L,EAAI,EAAGA,EAAI3E,EAAKwE,EAAI,GAAGH,OAAQM,IAAK,CAC3C,MAAM+6D,EAAW1/D,EAAKwE,EAAI,GAAGG,GACxBk6D,EAAehzD,SAAS6zD,EAAS,GAAG,MACvC1nB,EAAS1nC,OAAOjL,KAAKq6D,EAAS,GAAG,IACjCF,EAAUlvD,OAAOovD,EAAS,GAAG,IAAM,CACjC31D,GAAI21D,EAAS,GAAG,GAChBC,MAAOD,EAAS,GAChBE,OAAQb,EAAgBW,EAAS,IACjCG,MAAQH,EAAS,GAActuD,gBAKrCouD,EAAUC,WAAWp6D,KAAK2yC,GAG5B,OAAOwnB,EAGF,SAASM,EAAWC,GACzB,MAAM/zD,EAAO+zD,EAAIr6D,cAEjB,IAAK,aAAas6D,KAAKh0D,GAAO,OAAO+zD,EACrC,MAAMd,EAAa,IAAIjzD,GAAMG,KAAKqK,GAAMA,EAAEypD,YAAY,GA9F/B,SA+FvB,OAAOz6D,OAAO25D,iBAAiBF,K,eCrG1B,SAASh5D,EAAeF,GAC7B,GAAKA,EAML,OAAOA,EAAI8F,SAAS,OAAS9F,EAAO,UAASA,I,kSCP/C,IAAIm6D,EAEG,SAASjyB,IACd,OAAO5kC,QAAQ62D,G,QAIR,IAAIj+D,SAASzB,IAClB,MAAM2/D,EAAO,IAAIC,MAEjBD,EAAKzvD,IAAM,kHACX,MAAM2vD,EAAoB,KACxB7/D,EAAwB,IAAhB2/D,EAAK7tB,SAEf6tB,EAAKG,OAASD,EACdF,EAAKI,QAAUF,KAIRt9D,MAAMy9D,IACfN,EAAuBM,KClBzB,IAAIC,EAA6B,QAAC,GAChC,EAAAz/D,QAAOgkC,kBADwB,OAC/B,SAAoB,gCAAgC07B,QAClD,OAAS,QAEN,SAASvN,IACd,OAAOsN,EAGT,SAASl8B,EAAwB/8B,GAC/Bi5D,EAAmBj5D,EAAEk5D,QAAU,OAAS,QAG1C,MAAM37B,EAAM/jC,OAAOgkC,WAAW,gCACM,mBAAzBD,EAAIhlC,iBACbglC,EAAIhlC,iBAAiB,SAAUwkC,GACK,mBAApBQ,EAAIE,aACpBF,EAAIE,YAAYV,GCkBX,MAAM9J,EAtBN,WACL,MAAM,UAAEF,EAAF,SAAax5B,GAAaC,OAAOw5B,UAIvC,IAAImmC,EAcJ,OAZ0C,IALnB,CAAC,YAAa,WAAY,SAAU,UAKxC13D,QAAQlI,GACzB4/D,EAAK,SACwC,IAL1B,CAAC,SAAU,OAAQ,QAKhB13D,QAAQlI,GAC9B4/D,EAAK,OAC4C,IAR1B,CAAC,QAAS,QAAS,UAAW,SAQ3B13D,QAAQlI,GAClC4/D,EAAK,UACI,UAAUX,KAAKzlC,GACxBomC,EAAK,UACI,QAAQX,KAAKj/D,KACtB4/D,EAAK,SAGAA,EAGmBC,GACfj7B,EAA6B,UAAjBlL,EACZrjB,EAA0B,QAAjBqjB,EACTiL,EAA8B,YAAjBjL,EACbmL,EAAY,iCAAiCo6B,KAAKxlC,UAAUD,WAC5DsmC,EACX7/D,OAAOgkC,WAAW,8BAA8B07B,SAC5C1/D,OAAOw5B,UAAkBsmC,YAC1Bj4D,SAASk4D,SAASl1D,SAAS,kBAGnB05B,EAAevkC,OAAOgkC,WAAW,qBAAqB07B,QAEtD/N,EAA0B3xD,OAAO2oB,YAAc9H,EAAAA,IAC1D7gB,OAAO2oB,YAAc7H,EAAAA,IAAqC9gB,OAAOgf,aAAe+B,EAAAA,GAGrEi/C,GAA2BrO,GACtC3xD,OAAO2oB,YAAc/H,EAAAA,GAEVq/C,EAA+B53D,QAC1CmxB,UAAU0mC,cAAgB,iBAAkB1mC,UAAU0mC,eACpDlgE,OAAOmgE,cAAiBngE,OAAeogE,qBAI9BjxD,GADiDtH,SAAS47B,gBAAgBprB,MACrDohB,IAAiBkL,GAAavuB,IACnDiqD,EAA8B,kBAAmB7mC,UAEjD6W,EAA2BgwB,EAE3BlzB,GAD0CntC,OACtBqI,SAAS,IAAIi4D,OAASC,YAAY,4BACtDC,GACVziD,EAAAA,IAAW,WAAalW,SAASiH,cAAc,UAAU2xD,WAAW,OAAS,IAEnEC,EAAkC,sBAAuB74D,SAASiH,cAAc,OAChF6xD,GAAuBnnC,UAAUD,UAAU1uB,SAAS,WACpD+1D,EAAwBl8B,EAAa,aAAetuB,EAAS,eAAiB,aAErFyqD,EAAah5D,SAASiH,cAAc,SAE7BgrB,GAAmB,EAE5BA,GAAkBlX,EAAAA,GAAAA,IAAkCF,EAAAA,IAEjD,MAAMsX,EAAoB3xB,QAAQw4D,EAAWN,YAAY,4BAA4Bj7D,QAAQ,KAAM,QACnGq/B,GAAaC,GAEPk8B,EAAM9gE,OAAO+gE,kBAAoB,EAEjCC,GAAsB,EAEtBC,GAA0Bt8B,IAAcvuB,IAAWsuB,EAGnDw8B,EAA8BD,EAAyB,IAAM,K,+OCrEnE,SAASE,EAAcxxB,GAC5B,MAAMyxB,EAAMzxB,EAAQnqC,MAAM,KACpB67D,EAAOD,EAAI,GAAGh8D,MAAM,WAAY,GAChCk8D,EAAOC,KAAKH,EAAI,IACtB,IAAI99D,EAAIg+D,EAAKj+D,OACb,MAAMm+D,EAAQ,IAAIC,WAAWn+D,GAE7B,KAAOA,KACLk+D,EAAMl+D,GAAKg+D,EAAKn9D,WAAWb,GAG7B,OAAO,IAAI2zD,KAAK,CAACuK,GAAQ,CAAEviE,KAAMoiE,IAG5B,SAASK,EAAcxK,GAC5B,OAAO,IAAIj2D,SAAQ,CAACzB,EAASD,KAC3B,MAAMoiE,EAAS,IAAIC,WAEnBD,EAAOrC,OAAU94D,IACf,MAAM,OAAEuI,GAAWvI,EAAEW,QAAU,GACT,iBAAX4H,GACTvP,EAAQuP,GAGVxP,EAAO,IAAIK,MAAM,yBAGnB+hE,EAAOpC,QAAUhgE,EACjBoiE,EAAOE,cAAc3K,MAIlB,SAAS4K,EAAW5K,EAAYpvD,GACrC,OAAO,IAAIi6D,KAAK,CAAC7K,GAAOpvD,EAAU,CAChCk6D,aAActgE,KAAKC,MACnB1C,KAAMi4D,EAAKj4D,OAIR,SAASgjE,EAAal9D,GAC3B,OAAO,IAAI9D,SAAQ,CAACzB,EAASD,KAC3B,MAAM2iE,EAAM,IAAI9C,MAChB8C,EAAI5C,OAAS,IAAM9/D,EAAQ0iE,GAC3BA,EAAI3C,QAAUhgE,EACd2iE,EAAIxyD,IAAM3K,KAIP,SAASo9D,EAAap9D,GAC3B,OAAO,IAAI9D,SAAQ,CAACzB,EAASD,KAC3B,MAAM2rC,EAAQrjC,SAASiH,cAAc,SACrCo8B,EAAMk3B,OAAS,EACfl3B,EAAMm3B,iBAAmB,IAAM7iE,EAAQ0rC,GACvCA,EAAMq0B,QAAUhgE,EAChB2rC,EAAMx7B,IAAM3K,KAITnD,eAAe0gE,EAAqBv9D,GACzC,MAAMmmC,QAAci3B,EAAap9D,GAEjC,OAAO9D,QAAQY,KAAK,EAClBC,EAAAA,EAAAA,IAAM,KACN,IAAIb,SAA4B,CAACzB,EAASD,KACxC2rC,EAAMq3B,SAAW,KACVr3B,EAAMs3B,YAAet3B,EAAMu3B,aAC9BjjE,OAAQoL,GAGV,MAAM83D,EAAS76D,SAASiH,cAAc,UACtC4zD,EAAOrxB,MAAQnG,EAAMs3B,WACrBE,EAAOpxB,OAASpG,EAAMu3B,YACVC,EAAOjC,WAAW,MAC1BkC,UAAUz3B,EAAO,EAAG,GACxB1rC,EAAQkjE,EAAOE,UAAU,gBAE3B13B,EAAMq0B,QAAUhgE,EAChB2rC,EAAM23B,YAAchgE,KAAKuP,IAAI84B,EAAM/lB,SAAU,QAK5CvjB,eAAekhE,EAAUnyB,GAE9B,aADuB8lB,MAAM9lB,IACbumB,OAGXt1D,eAAemhE,EAAUpyB,EAAiB7oC,GAE/C,OAAOg6D,QADYgB,EAAUnyB,GACL7oC,GAGnB,SAASk7D,EAAYd,GAC1B,MAAMQ,EAAS76D,SAASiH,cAAc,UAOtC,OANA4zD,EAAOrxB,MAAQ6wB,EAAI7wB,MACnBqxB,EAAOpxB,OAAS4wB,EAAI5wB,OAERoxB,EAAOjC,WAAW,MAC1BkC,UAAUT,EAAK,EAAG,GAEfQ,EAvHW,oBAATX,OAETzL,KAAKyL,KAAO,cAAc9K,KAGxBgM,YAAYC,EAAsBp7D,EAAkBkC,GAClD,GAAIA,EAAS,CACX,MAAM,KAAE/K,KAASkkE,GAASn5D,EAC1Bo5D,MAAMF,EAAU,CAAEjkE,KAAAA,IAFP,sBAGXiC,OAAOC,OAAOkiE,KAAMF,QAEpBC,MAAMF,GADD,sBAIPG,KAAK5iE,KAAOqH,M,2LC4BlB,MAGMw7D,EAAWC,IAEjB,IAAIC,EAYAF,EAASE,WAETC,EAMAH,EAASG,SAETn2B,EAQAg2B,EAASh2B,QAET/V,EAIA+rC,EAAS/rC,UAEb,MAAMmsC,GAA+BC,EAAAA,EAAAA,KAAS,MAC5CC,EAAAA,EAAAA,KAAO,KACLC,GAAoBnrC,EAAAA,EAAAA,YA7CA,KAiDxB,IAAIorC,GAAS,EAIN,SAAS3oC,IACd2oC,GAAS,GAEThrC,EAAAA,EAAAA,IAAY4qC,IACZ/qC,EAAAA,EAAAA,IAAW,QAASmC,GAEpB+oC,GAAoBnrC,EAAAA,EAAAA,OAGf,SAASqrC,EAAc57B,GAG5B,OAFK27B,GAAQ3oC,IAENmS,EAAQ02B,qBAAqB77B,GAG/B,SAAS87B,EAAoB97B,GAGlC,OAFK27B,GAAQ3oC,IAENmS,EAAQ42B,sBAAsB/7B,IAAa,EAG7C,SAASg8B,IAGd,OAFKL,GAAQ3oC,IAENmS,EAAQ82B,qBAGV,SAASC,IAGd,OAFKP,GAAQ3oC,IAENmS,EAAQg3B,yBAGV,SAASC,IAA2B,MACzC,OAAO,UAAAF,IAAoBnhD,EAAAA,WAApB,eAAoCshD,qBAAsB,EAK5D,SAASC,EAAsBt8B,EAAkBzoC,GAKtD,OAJK63B,EAAUysC,qBAAqB77B,KAClC5Q,EAAUysC,qBAAqB77B,IAAYyvB,EAAAA,EAAAA,MAGtCrgC,EAAUysC,qBAAqB77B,GAAUrP,YAAYp5B,GAGvD,SAASglE,EAAsBhlE,GACpC,OAAO63B,EAAU6sC,qBAAqBtrC,YAAYp5B,GAG7C,SAASilE,EAA0BjlE,GACxC,OAAO63B,EAAU+sC,yBAAyBxrC,YAAYp5B,GAKxD,SAASmkE,EAAoBptD,GAE3B,IAAImuD,EACAlmE,EAAAA,KACFkmE,EAAkBhwC,YAAYjzB,OAGhC,MAAMkjE,EAAqBx8D,QACzBoO,EAAOslB,MAAMgZ,QAAQsQ,QAClByf,EAAoB5hD,EAAAA,GAAezM,EAAOslB,MAAMgZ,QAAQsQ,OAAQ5uC,EAAOslB,MAAMya,iBAAiB6O,SAE7F0f,EAA0B18D,QAC9BoO,EAAOslB,MAAMgZ,QAAQ6Q,UAClBkf,EAAoB3hD,EAAAA,GAAoB1M,EAAOslB,MAAMgZ,QAAQ6Q,SAAUnvC,EAAOslB,MAAMya,iBAAiBoP,WAEpGof,EAA0BvuD,EAAOslB,MAAM2a,cAAc2O,SAAWme,EAAWyB,uBAC3EC,EAA+BzuD,EAAOslB,MAAM2a,cAAckP,WAAa4d,EAAW2B,4BAElFC,EAAoB3uD,EAAOivC,YAAY7pB,OAAS2nC,EAAW6B,YAC3DC,EAAkB7uD,EAAOslB,MAAMF,OAAS2nC,EAAWxnC,UACnDupC,EAAkB9uD,EAAOmlB,MAAMC,OAAS2nC,EAAW1nC,UACnD0pC,GAA2BtkC,EAAAA,EAAAA,IAAqBzqB,KAAY+sD,EAAWn7B,eACvEo9B,GAA6B3S,EAAAA,EAAAA,IAAuBr8C,KAAY+sD,EAAWl7B,iBAEjF,IAAIo9B,EAA8B,GAQlC,IANIV,GAA2BE,KAC7BQ,EAAoBA,EAAkBjwD,OAkD1C,SACEgB,GAEA,IADAyuD,EACA,wDACIQ,EAAoB,GAEpBR,GACFQ,EAAkBrhE,KAAK8e,EAAAA,IAGzB,MAAM8hD,EAAyBxuD,EAAOslB,MAAM2a,cAAc2O,OACpD8f,EAA8B1uD,EAAOslB,MAAM2a,cAAckP,SAE/D,GAAIqf,GAA0BE,EAA6B,CACzD,MAAMQ,EAAiBzkE,OAAO6rB,KAAK02C,EAASmC,qBACzCv6D,QAAQ88B,IAAcmF,EAAQ02B,qBAAqB77B,KACnDh9B,IAAI0sB,QAEP6tC,EAAoBA,EAAkBjwD,OAAOkwD,GAM/C,OAHAnC,EAAWyB,uBAAyBA,EACpCzB,EAAW2B,4BAA8BA,EAElCO,EAzEHG,CAAkBpvD,EAAQyuD,OAK5BL,GAAsBE,GAA2BK,GAC9CE,GAAmBC,GAAmBC,GAA4BC,GAOrE,YAJIC,EAAkBriE,QACpByiE,EAAcJ,IAMlB,MAAMK,EAAuBvC,EAAWwC,iBAClCC,EAA4BzC,EAAW0C,sBAY7C,GA+CF,SACEzvD,EAAqBouD,EAA6BE,EAAkCK,GAEpF,MAAMe,EAAiB,GAEvB,GAAItB,EAAoB,CACtB,MAAMuB,EAAa3vD,EAAOslB,MAAMgZ,QAAQsQ,OAClCghB,EAAe5vD,EAAOslB,MAAMya,iBAAiB6O,OAEnDoe,EAASmC,oBAAoB1iD,EAAAA,IAAiBojD,EAC5CpjD,EAAAA,GAAekjD,EAAYC,GAG7B7C,EAAWwC,iBAAmBI,EAC9B5C,EAAW+C,mBAAqBF,EAEhCF,EAAe9hE,KAAK6e,EAAAA,IAGtB,GAAI6hD,EAAyB,CAC3B,MAAMqB,EAAa3vD,EAAOslB,MAAMgZ,QAAQ6Q,SAClCygB,EAAe5vD,EAAOslB,MAAMya,iBAAiBoP,SAEnD6d,EAASmC,oBAAoBziD,EAAAA,IAAsBmjD,EACjDnjD,EAAAA,GAAoBijD,EAAYC,GAGlC7C,EAAW0C,sBAAwBE,EACnC5C,EAAWgD,wBAA0BH,EAErCF,EAAe9hE,KAAK8e,EAAAA,IAGtB,GAAIiiD,EAAmB,CACrB,MAAMqB,EAAiBhwD,EAAOivC,YAAY7pB,KAE1C36B,OAAO+rB,OAAOw5C,GAAgB/5D,SAASu8B,IACjCA,IAAWu6B,EAAW6B,YAAYp8B,EAAOlgC,MAI7C06D,EAASmC,oBAAoB38B,EAAOlgC,IAsB1C,SAA4BkgC,GAC1B,MAAO,IACFA,EACHuN,iBAAkBvN,EAAOG,cACzBC,gBAAiBJ,EAAOI,gBAAkB,IAAIx2B,IAAIo2B,EAAOI,sBAAmBz+B,EAC5E0+B,gBAAiBL,EAAOI,gBAAkB,IAAIx2B,IAAIo2B,EAAOK,sBAAmB1+B,EAC5Ew+B,cAAeH,EAAOI,gBAAkB,IAAIx2B,IAAIo2B,EAAOG,oBAAiBx+B,GA5B5B87D,CAAmBz9B,GAE7Dk9B,EAAe9hE,KAAK4kC,EAAOlgC,QAG7By6D,EAAW6B,YAAcoB,GAvG3BE,CAAclwD,EAAQouD,EAAoBE,EAAyBK,GAEnEM,EAAoBA,EAAkBjwD,OAgIxC,SACEgB,EACA2uD,EACAI,EACAC,EACAM,EACAE,GAEA,MAAMW,EAAenwD,EAAOslB,MAAMF,KAC5BgrC,EAAepwD,EAAOmlB,MAAMC,KAC5BirC,GAAoB5lC,EAAAA,EAAAA,IAAqBzqB,GACzCswD,GAAsBjU,EAAAA,EAAAA,IAAuBr8C,GAC7CuwD,EAAkB9lE,OAAO+rB,OAAOw2C,EAASmC,qBACzCF,EAAoB,IAAI7yD,IAExBo0D,EAAsBxwD,EAAOslB,MAAMgZ,QAAQsQ,OAC3C6hB,EAA2BzwD,EAAOslB,MAAMgZ,QAAQ6Q,SACtD,IAAIuhB,EAAS,IAAIF,GAAuB,MAAOC,GAA4B,IAqD3E,OApDID,IAAwBlB,GAAwBmB,IAA6BjB,IAC/EkB,GAAStuB,EAAAA,EAAAA,IAAOsuB,EAAO1xD,OAAOswD,GAAwB,GAAIE,GAA6B,MAGzFkB,EAAOz6D,SAASvD,IACd,MAAM+C,EAAO06D,EAAaz9D,GAE1B,IACGi8D,IACGI,IACAC,GACDv5D,IAASs3D,EAAWxnC,UAAU7yB,IAC9B09D,EAAa19D,KAAYq6D,EAAW1nC,UAAU3yB,GAEjD,OAGF,IAAIi+D,EACJ,GAAIl7D,EAAM,CACR,MAAMm7D,EAAiB5D,EAAS6D,kBAAkBloE,IAAI+J,GAChDo+D,EAmCZ,SACEr7D,EACAm8B,EACAC,EACAl9B,GAEA,MAAM,GACJrC,EADI,KACA9J,EADA,YACMqnC,EADN,aACmBS,EADnB,YACiCE,EADjC,SAC8CkB,EAD9C,YAEJwtB,EAFI,oBAES6R,EAFT,cAE8BC,EAF9B,SAGJC,EAHI,UAGMC,GACRz7D,EAEE07D,EAAoB,oBAAT3oE,GAA8BmM,EAE/C,MAAO,CACLrC,GAAAA,EACA9J,KAAAA,EACA4oE,SAAUx/D,QAAQi+B,IAAgBS,IAAiBE,GACnD6gC,WAAY3/B,IAAahlB,EAAAA,GACzBolB,SAASH,EAAAA,EAAAA,IAAkBl8B,EAAMm8B,EAAgBC,GACjDykB,SAAU1kD,QAAQstD,GAAe6R,GAAuBC,GACxD9R,YAAAA,EACA6R,oBAAAA,EACAp2C,MAAOvuB,KAAKsP,IAAIu1D,GAAY,EAAGC,GAAa,GAAGrhC,MAAAA,OAAA,EAAAA,EAAagE,OAAQ,GACpEyJ,UAAW6zB,EAA6B,gBAAlBA,EAAS3oE,UAAyB2L,EACxDm9D,cAAeH,EAAWA,EAAS3zB,eAAYrpC,GA5D1Bo9D,CAAiB97D,EAAM46D,EAAmBC,EAAqBF,EAAa19D,IAC/F,IAAKi8D,GAAqBiC,IAAkBrwC,EAAAA,EAAAA,GAAqBuwC,EAAYF,GAC3E,OAGF5D,EAAS6D,kBAAkBjmE,IAAI8H,EAAQo+D,GAEvCH,EAyDN,SAA4Ba,EAA0BjB,GACpD,OAAOA,EAAgB54D,QAAiB,CAAC8e,EAAKg7C,KAShD,SACED,EACAC,GACA,UACA,IAAKD,EAAYJ,SACf,OAAO,EAGT,MAAQ9+D,GAAII,EAAN,KAAclK,GAASgpE,EAE7B,GAAIC,EAAcnzB,QAChB,QACGkzB,EAAYH,YAAcI,EAAcn/D,KAAOma,EAAAA,KAC3C+kD,EAAYH,YAAcI,EAAcn/D,KAAOoa,EAAAA,KAK/C+kD,EAAcnzB,QAAQziC,IAAInJ,GAGnC,aAAI++D,EAAc7+B,uBAAlB,OAAI,EAA+B/2B,IAAInJ,GACrC,OAAO,EAGT,aAAI++D,EAAc5+B,uBAAlB,OAAI,EAA+Bh3B,IAAInJ,GACrC,OAAO,EAGT,aAAI++D,EAAc9+B,qBAAlB,OAAI,EAA6B92B,IAAInJ,GACnC,OAAO,EAGT,GAAI++D,EAAc3+B,iBAAmB0+B,EAAYH,WAC/C,OAAO,EAGT,GAAII,EAAcz+B,cAAgBw+B,EAAYlb,SAC5C,OAAO,EAGT,GAAImb,EAAc1+B,cAAgBy+B,EAAY1/B,UAAY0/B,EAAYT,oBACpE,OAAO,EAGT,GAAa,oBAATvoE,EACF,GAAIgpE,EAAYl0B,WACd,GAAIm0B,EAAcx+B,KAChB,OAAO,MAEJ,CACL,GAAIw+B,EAAcr+B,UAAYo+B,EAAYF,cACxC,OAAO,EAGT,GAAIG,EAAcp+B,cAAgBm+B,EAAYF,cAC5C,OAAO,MAGN,IAAa,oBAAT9oE,EACT,OAAOoJ,QAAQ6/D,EAAct+B,UACxB,GAAa,uBAAT3qC,GAA0C,uBAATA,EAC1C,OAAOoJ,QAAQ6/D,EAAcv+B,QAG/B,OAAO,EAzEDw+B,CAAeF,EAAaC,IAC9Bh7C,EAAI7oB,KAAK6jE,EAAcn/D,IAGlBmkB,IACN,IAAI0vB,OAhEYwrB,CAAmBb,EAAYP,GAC9CI,EAAa16D,SAASy7B,IACpBu9B,EAAkBxyD,IAAIi1B,WAGxBs7B,EAAS6D,kBAAkB9lE,OAAO2H,GAClCi+D,EAAe,GAGjB,MAAMiB,EAAmB5E,EAAS6E,kBAAkBn/D,IAAW,GAC/D,IAAIof,EAAAA,EAAAA,IAAqB6+C,EAAciB,GACrC,OAGF,MAAME,EAyHV,SAA4Bp/D,EAAgBk/D,EAA4BjB,GACtE,MAAMoB,EAAsB,IAAI31D,IAAIw1D,GAC9BI,EAAkB,IAAI51D,IAAIu0D,GAC1BmB,EAA6B,GAgCnC,OA9BA1vB,EAAAA,EAAAA,IAAO,IAAIwvB,KAAqBjB,IAAe16D,SAASy7B,IACtD,IAAIugC,EAA0Bp7B,EAAQ02B,qBAAqB77B,GAEvDqgC,EAAoBl2D,IAAI61B,KAAcsgC,EAAgBn2D,IAAI61B,IAC5Ds7B,EAASkF,kBAAkBxgC,GAAW3mC,OAAO2H,GAE7Co/D,EAAiBlkE,KAAK8jC,GAElBugC,IACFA,EAA0BA,EAAwBr9D,QAAQtC,GAAOA,IAAOI,IACxEs6D,EAASmF,yBAAyBzgC,IAAY,KAEtCqgC,EAAoBl2D,IAAI61B,IAAasgC,EAAgBn2D,IAAI61B,KAC9Ds7B,EAASkF,kBAAkBxgC,KAC9Bs7B,EAASkF,kBAAkBxgC,GAAY,IAAIt1B,KAG7C4wD,EAASkF,kBAAkBxgC,GAAWj1B,IAAI/J,GAEtCu/D,IACFA,EAAwBrkE,KAAK8E,GAC7Bs6D,EAASmF,yBAAyBzgC,IAAY,IAIlDmF,EAAQ02B,qBAAqB77B,GAAYugC,KAG3CjF,EAAS6E,kBAAkBn/D,GAAUi+D,EAE9BmB,EA5JoBM,CAAmB1/D,EAAQk/D,EAAkBjB,GACtEmB,EAAiB77D,SAASy7B,IACxBu9B,EAAkBxyD,IAAIi1B,SAI1Bq7B,EAAWxnC,UAAY4qC,EACvBpD,EAAW1nC,UAAY+qC,EACvBrD,EAAWn7B,eAAiBy+B,EAC5BtD,EAAWl7B,iBAAmBy+B,EAEvBv6D,MAAMuN,KAAK2rD,GAtM2B5nC,CAC3CrnB,EAAQ2uD,GAAqBP,GAAsBE,EACnDS,EAA0BC,EAC1BM,EAAsBE,IAGxBH,GAAcjtB,EAAAA,EAAAA,IAAO6sB,IAEjBhnE,EAAAA,GAAO,CACT,MAAMymB,EAAWyP,YAAYjzB,MAAQijE,EACjCz/C,EAxKqB,GA0KvBxmB,QAAQ4B,KAAM,iCAAgCsC,KAAKoP,MAAMkT,UAK/D,SAAS2/C,EAAoB38B,EAAkBi+B,EAAuBC,GACpE,MAAMnwB,EAAiB/N,IAAajlB,EAAAA,GAChCsgD,EAAWwC,iBACXxC,EAAW0C,sBACT4C,EAAmB3gC,IAAajlB,EAAAA,GAClCsgD,EAAW+C,mBACX/C,EAAWgD,wBAEf,OAAOtwB,IAAmBkwB,GAAc0C,IAAqBzC,EAkF/D,SAASC,EACPn+B,EAAkB4M,EAAmByB,GAErC,MAAO,CACLztC,GAAIo/B,EACJ4M,QAAS,IAAIliC,IAAIkiC,GACjByB,iBAAkBA,EAClBpN,cAAe,IAAIv2B,IAAI2jC,IAwO3B,SAASsvB,EAAcJ,GACrB,IAAIqD,GAA2B,EAC3BC,GAAuB,EAyC3B,GAvCAx8D,MAAMuN,KAAK2rD,GAAmBh5D,SAASy7B,IACrC,MAAQ8gC,YAAaC,EAAgBC,WAAYC,GAqDrD,SAA+BjhC,GAC7B,MAAM+/B,EAAgBzE,EAASmC,oBAAoBz9B,GACnD,IAAK+/B,EACH,MAAO,GAGT,MAAM,iBAAE1xB,EAAF,cAAoBpN,GAAkB8+B,GACtC,kBACJZ,EACAqB,mBAAqB,CAACxgC,GAAW+B,IAC/Bu5B,GAEFO,sBAAwB,CAAC77B,GAAWkhC,IAClC/7B,EAEEg8B,EAAkBp/B,EAAUsM,MAAAA,OAAH,EAAGA,EAAkBnrC,QAAQtC,GAAOmhC,EAAQ53B,IAAIvJ,KAAOytC,EAChF+yB,EAAaF,GAAmBn/B,GAAW19B,MAAMuN,KAAKmwB,IAAa,GAEnEs/B,GADepgC,EAAgBmgC,EAAWl+D,QAAQtC,IAAQqgC,EAAc92B,IAAIvJ,KAAOwgE,GACjD3sB,MAAK,CAAC6sB,EAAiBC,IACtDpC,EAAkBloE,IAAIsqE,GAAUt4C,MAAQk2C,EAAkBloE,IAAIqqE,GAAUr4C,QAGjF,MAAO,CACL63C,aAAaK,MAAAA,OAAA,EAAAA,EAAiBjmE,SAAU,EACxC8lE,WAAY,IACNG,GAAmB,MACpBE,IA/E8DG,CAAsBxhC,GAEzF,IAAKihC,EACH,OAGF,MAAMQ,EAAoBt8B,EAAQ02B,qBAAqB77B,GACjD0hC,EAAqBv8B,EAAQ42B,sBAAsB/7B,GAO/B,MALvByhC,QACyBh/D,IAAvBi/D,GAAoCA,IAAuBX,IAC3DzF,EAASmF,yBAAyBzgC,KACjC5f,EAAAA,EAAAA,IAAqB6gD,EAAeQ,KAGxCnG,EAASmF,yBAAyBzgC,IAAY,EAC9CmF,EAAQ02B,qBAAqB77B,GAAYihC,EACzC97B,EAAQ42B,sBAAsB/7B,GAAY+gC,EAC1C,UAAA3xC,EAAUysC,qBAAqB77B,UAA/B,SAA0C9P,aAAa+wC,IAGzD,MAAMU,EAAoBx8B,EAAQ82B,qBAAqBj8B,GACjD4hC,EAAgBX,EAAc/lE,OAC/B2lE,IACHA,EAAuBc,IAAsBC,GAE/Cz8B,EAAQ82B,qBAAqBj8B,GAAY4hC,EAEzC,MAAMC,EAAwB18B,EAAQg3B,yBAAyBn8B,GACzD8hC,EAuDV,SAAmC9hC,GACjC,MAAM,kBACJm/B,GACE7D,GAEFO,sBAAwB,CAAC77B,GAAWghC,IAClC77B,EAEJ,OAAO67B,EAAY/6D,QAAO,CAAC67D,EAAmB9gE,KAC5C,MAAM8+D,EAAcX,EAAkBloE,IAAI+J,GAC1C,OAAK8+D,GAIDA,EAAYlb,WACdkd,EAAkB/gC,aAEd++B,EAAYT,sBACdyC,EAAkBzF,oBAAsByD,EAAYT,qBAGjDS,EAAY1/B,UACX0/B,EAAYtS,YACdsU,EAAkBzF,oBAAsByD,EAAYtS,YAC1CsS,EAAYT,sBACtByC,EAAkBzF,oBAAsB,KAKvCyF,GAnBEA,IAoBR,CACD/gC,WAAY,EACZs7B,mBAAoB,IAxFM0F,CAA0B/hC,GAC/C4gC,IACHA,GACGiB,KAA0BhzC,EAAAA,EAAAA,GAAqBizC,EAAmBD,IAGvE18B,EAAQg3B,yBAAyBn8B,GAAY8hC,KAG3CjB,EAAsB,CAExB,MAAM12C,EAAW,IAAKgb,EAAQ82B,sBAC9B92B,EAAQ82B,qBAAuB9xC,EAC/BiF,EAAU6sC,qBAAqB/rC,aAAa/F,GAG9C,GAAIy2C,EAA0B,CAE5B,MAAMz2C,EAAW,IAAKgb,EAAQg3B,0BAC9Bh3B,EAAQg3B,yBAA2BhyC,EACnCiF,EAAU+sC,yBAAyBjsC,aAAa/F,IAwEpD,SAASixC,IACP,MAAO,CACLC,WAAY,CACV6B,YAAa,GACbrpC,UAAW,GACXF,UAAW,GACXuM,eAAgB,GAChBC,iBAAkB,IAGpBm7B,SAAU,CACRmC,oBAAqB,GACrB0B,kBAAmB,IAAIjpE,IACvBiqE,kBAAmB,GACnBK,kBAAmB,GACnBC,yBAA0B,IAG5Bt7B,QAAS,CACP02B,qBAAsB,GACtBE,sBAAuB,GACvBE,qBAAsB,GACtBE,yBAA0B,IAG5B/sC,UAAW,CACTysC,qBAAsB,GACtBI,sBAAsBxM,EAAAA,EAAAA,KACtB0M,0BAA0B1M,EAAAA,EAAAA,OAKhC,SAAS98B,IACP,MAAMqvC,EAAc5G,IAEpBC,EAAa2G,EAAY3G,WACzBC,EAAW0G,EAAY1G,SACvBn2B,EAAU68B,EAAY78B,QACtB/V,EAAY4yC,EAAY5yC,Y,eCzsBnB,SAASxsB,EAAeq/D,EAAoBhgE,GAA4C,IAAzByyD,EAAyB,uDAAN,KACvF,OAAO,IAAIwN,KAAKC,aAAazN,EAAQ,CACnCxkD,MAAO,WACPjO,SAAAA,IACC6wD,OAAoB,QAAb7wD,EAAqBggE,EAAaA,EAAa,K,kDCN3D,MAUA,EAVuBG,IACrB,IAAIxhE,EAEJ,GACEA,EAAKvE,OAAO3B,KAAKgrC,UAAUvoC,QAAQ,KAAM,YAClCilE,EAAMC,eAAezhE,IAE9B,OAAOA,I,0CCLT,MAAM0hE,EAAkD,CACtDC,gBAAiB,4DACjBC,qBAAsB,+BACtBC,yBAA0B,sCAC1BC,6BAA8B,uCAC9BC,yBAA0B,mCAC1BC,0BAA2B,oCAC3BC,iBAAkB,8DAElBC,gBAAiB,kIACjBC,uBAAwB,gEACxBC,gBAAiB,gCACjBC,iBAAkB,wBAClBC,qBAAsB,iCACtBC,YAAa,uCACbC,cAAe,gBACfC,kBAAmB,wCACnBC,yBAA0B,mCAC1BC,wBAAyB,mCAEzBC,yBAA0B,yGAC1BC,oBAAqB,cACrBC,0BAA2B,uCAC3BC,oBAAqB,+CACrBC,wBAAyB,6CACzBC,wBAAyB,6CACzBC,gBAAiB,0BACjBC,uBAAwB,mCACxBC,6BAA8B,wCAC9BC,6BAA8B,wCAC9BC,qBAAsB,qCACtBC,wBAAyB,wCACzBC,yBAA0B,yCAC1BC,sBAAuB,sCACvBC,sBAAuB,qCACvBC,uBAAwB,sCACxBC,uBAAwB,sCAGxBC,kBAAmB,mDACnBC,iBAAkB,sBAIlBC,wBAAyB,uHAEzBC,0CAA2C,2FAE3CC,oCAAqC,4GAErCC,cAAe,+CACfC,mBAAoB,oCACpBC,eAAgB,gDAChBC,uBAAwB,gFACxBC,YAAa,oDACbC,wBAAyB,4CACzBC,wBAAyB,0DACzBC,kBAAmB,2BACnBC,oBAAqB,8BACrBC,oBAAqB,6BACrBC,kBAAmB,gDACnBC,yBAA0B,2BAC1BC,sBAAuB,iCACvBC,6BAA8B,mEAC9BC,gBAAiB,4BACjBC,6BAA8B,sCAC9BC,mBAAoB,sCACpBC,8BAA+B,wEAC/BC,uBAAwB,kCAGbC,EAAiD,CAC5DjC,6BAA8B,CAC5B/5B,MAAO,cACPvyC,QAAS,4BAEXusE,6BAA8B,CAC5Bh6B,MAAO,cACPvyC,QAAS,4BAEXwsE,qBAAsB,CACpBj6B,MAAO,OACPvyC,QAAS,kBAEXysE,wBAAyB,CACvBl6B,MAAO,cACPvyC,QAAS,qBAEX0sE,yBAA0B,CACxBn6B,MAAO,WACPvyC,QAAS,uBAEX2sE,sBAAuB,CACrBp6B,MAAO,QACPvyC,QAAS,mBAEX4sE,sBAAuB,CACrBr6B,MAAO,WACPvyC,QAAS,kBAEX6sE,uBAAwB,CACtBt6B,MAAO,QACPvyC,QAAS,mBAEX8sE,uBAAwB,CACtBv6B,MAAO,QACPvyC,QAAS,oBAIE,SAASwuE,EAAqB/uE,GAC3C,MAAM,QAAEO,EAAF,WAAWyuE,EAAX,WAAuBC,GAAejvE,EAE5C,GAAIgvE,EAAY,CACd,MAAME,EAAiB3uE,EAAQoI,QAAQ,eACvC,OAAOumE,EAAiB,EAAI3uE,EAAQ0M,UAAU,EAAGiiE,GAAkB3uE,EAErE,IAAI4uE,EAAehE,EAAwB5qE,GAM3C,OALI4uE,GAAgBF,IAClBE,EAAevtE,OAAO6rB,KAAKwhD,GAAYngE,QAAO,CAAC8e,EAAKnb,IAC3Cmb,EAAI5nB,QAAQyM,EAASw8D,EAAWx8D,KACtC08D,IAEEA,EAGF,SAASrrC,EAAiB9jC,GAC/B,OAAO8uE,EAAgB9uE,EAAMO,W,sDCxH/B,SAAS6uE,EAAiBloE,GACxBA,EAAEO,iBAEF8tB,EAAYruB,aAAamoE,WAAanoE,EAAElH,MAAQkH,EAAEooE,QAK7C,SAAS/5C,EAAYn0B,GAE1B/B,QAAQW,MAAMoB,GAhBhBV,OAAOjB,iBAAiB,QAAS2vE,GACjC1uE,OAAOjB,iBAAiB,qBAAsB2vE,IAWvB/K,EAAAA,EAAAA,IAAS3jE,OAAO6uE,MAAO,M,cCLvC,SAAShxC,EAA2CixC,EAAiBt+C,GAC1E,OAAOs+C,EAAW1gE,QAAO,CAAC8wB,EAA2B6vC,KACnD7vC,EAAM6vC,EAAOv+C,IAAQu+C,EAEd7vC,IACN,IAGE,SAAS8vC,EACd9vC,EACAx/B,GAEA,OAAOwB,OAAO6rB,KAAKmS,GAAO9wB,QAAO,CAAC6gE,EAA8Bz+C,EAAK7jB,KACnEsiE,EAASz+C,GAAO9wB,EAASw/B,EAAM1O,GAAMA,EAAK7jB,EAAOuyB,GAC1C+vC,IACN,IAGE,SAAS10B,EAA2B20B,EAAWniD,GACpD,OAAOA,EAAK3e,QAAO,CAACW,EAAQyhB,KAC1BzhB,EAAOyhB,GAAO0+C,EAAO1+C,GACdzhB,IACN,IAGE,SAASuxC,EAAiC4uB,EAAWniD,GAC1D,OAAOA,EAAK3e,QAAO,CAACW,EAAQyhB,KACtB0+C,EAAO1+C,KACTzhB,EAAOyhB,GAAO0+C,EAAO1+C,IAGhBzhB,IACN,IAGE,SAAS+mC,EAA2Bo5B,EAAWniD,GACpD,MAAMoiD,EAAa,IAAIt8D,IAAIka,EAAK5hB,IAAI3G,SAIpC,OAAO+1C,EAAK20B,EAHMhuE,OAAO6rB,KAAKmiD,GAC3B7jE,QAAQmlB,IAAS2+C,EAAW78D,IAAIke,MAK9B,SAAS2G,EACd23C,EACAM,GAEK,IADLC,EACK,uDADqD,MAE1D,SAASC,EAAczyB,EAAMC,EAAMyyB,EAAgDC,GACjF,MAAMC,GAAsC,mBAArBF,EAAkCA,EAAiB1yB,GAAKA,EAAE0yB,KAAsB,EACjGG,GAAsC,mBAArBH,EAAkCA,EAAiBzyB,GAAKA,EAAEyyB,KAAsB,EAEvG,OAAOC,EAAQC,EAASC,EAASA,EAASD,EAG5C,GAAIjjE,MAAMC,QAAQ2iE,GAAY,CAC5B,MAAOO,EAAOC,GAASpjE,MAAMC,QAAQ4iE,GAAQA,EAAO,CAACA,EAAMA,IACpDQ,EAAYC,GAAcV,EAC3BW,EAAmB,QAAVJ,EACTK,EAAmB,QAAVJ,EAEf,OAAOd,EAAWlyB,MAAK,CAACC,EAAGC,IAClBwyB,EAAczyB,EAAGC,EAAG+yB,EAAYE,IAAWT,EAAczyB,EAAGC,EAAGgzB,EAAYE,KAItF,MAAMR,EAAiB,QAATH,EACd,OAAOP,EAAWlyB,MAAK,CAACC,EAAGC,IAClBwyB,EAAczyB,EAAGC,EAAGsyB,EAAWI,KAInC,SAASh8C,EAAQy8C,GACtB,OAAOA,EAAM7hE,QAAO,CAACW,EAAQggE,IACvBviE,MAAMC,QAAQsiE,GACThgE,EAAO0G,OAAOs5D,IAErBhgE,EAAO1K,KAAK0qE,GACLhgE,IAER,IAGE,SAAS8pC,EAAsBo3B,GACpC,OAAOzjE,MAAMuN,KAAK,IAAIlH,IAAIo9D,IAGrB,SAAS9hE,EAAuB8hE,GACrC,OAAOA,EAAM5kE,OAAOhD,SAGf,SAASkgB,EAAqB2nD,EAAeC,GAClD,OAAID,EAAO7sE,SAAW8sE,EAAO9sE,QAItB6sE,EAAO90B,OAAM,CAAChyB,EAAM5lB,IAAM4lB,IAAS+mD,EAAO3sE,KAG5C,SAAS4sE,EAA4BF,EAAeC,GACzD,OAAOD,EAAO,IAAMC,EAAOA,EAAO9sE,OAAS,IAAM6sE,EAAOA,EAAO7sE,OAAS,IAAM8sE,EAAO,GAGhF,SAASE,EAA2BJ,EAAY5uE,GACrD,OAAO4uE,EAAM5kE,QAAQwxC,GAAMx7C,EAAIiR,IAAIuqC,KAG9B,SAASr3C,EAAMyqE,EAAcK,GAClC,MAAMvhE,EAAS,GACf,IAAK,IAAIvL,EAAI,EAAGA,EAAIysE,EAAM5sE,OAAQG,GAAK8sE,EACrCvhE,EAAO1K,KAAK4rE,EAAMvqE,MAAMlC,EAAGA,EAAI8sE,IAGjC,OAAOvhE,EAGF,SAASwhE,EAAa5rE,GAC3B,MAAqB,iBAAVA,EACFA,EAGL6H,MAAMC,QAAQ9H,GACTA,EAAMwG,IAAIolE,GAGZrvE,OAAO6rB,KAAKpoB,GAAOyJ,QAAO,CAAC8e,EAAKsD,KACrCtD,EAAIsD,GAAkB+/C,EAAU5rE,EAAM6rB,IAC/BtD,IACN,IAGE,SAAS8gC,EAAYiiB,EAAiBO,GAC3C,IAAI38C,EAASo8C,EAAM5sE,OAEnB,KAAOwwB,KACL,GAAI28C,EAAUP,EAAMp8C,GAASA,EAAQo8C,GACnC,OAAOA,EAAMp8C,G,qRC7HnB,MAAM48C,EAAqB,iBACrBC,EAAiB,CAAC,QAAS,YAAa,WAAY,WAAY,WAAY,YAAa,cACzFC,EAAe,CAEnBC,GAAKttE,GAAqB,IAANA,EAAU,EAAI,EAClCutE,GAAKvtE,GAAqB,IAANA,EAAU,EAAU,IAANA,EAAU,EAAU,IAANA,EAAU,EAAIA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAAK,EAAIA,EAAI,KAAO,GAAK,EAAI,EACtHwtE,GAAKxtE,GAAqB,IAANA,EAAU,EAAI,EAClCytE,GAAKztE,GAAqB,IAANA,EAAU,EAAI,EAClC0tE,GAAK1tE,GAAqB,IAANA,EAAU,EAAI,EAClC2tE,GAAK3tE,GAAeA,EAAI,EAAI,EAAI,EAChC4tE,GAAK5tE,GAAeA,EAAI,EAAI,EAAI,EAChCyF,GAAI,IAAM,EACVooE,GAAK7tE,GAAqB,IAANA,EAAU,EAAI,EAClC8tE,GAAI,IAAM,EACVC,GAAI,IAAM,EACVC,GAAKhuE,GAAqB,IAANA,EAAU,EAAI,EAClCiuE,GAAKjuE,GAAqB,IAANA,EAAU,EAAIA,EAAI,IAAM,GAAKA,EAAI,IAAM,IAAMA,EAAI,IAAM,IAAMA,EAAI,KAAO,IAAM,EAAI,EACtGkuE,MAAQluE,GAAeA,EAAI,EAAI,EAAI,EACnCmuE,GAAKnuE,GAAeA,EAAI,IAAO,GAAKA,EAAI,KAAQ,GAAK,EAAIA,EAAI,IAAM,GAAKA,EAAI,IAAM,IAAMA,EAAI,IAAM,IAAMA,EAAI,KAAO,IAAM,EAAI,EAC7HouE,GAAKpuE,GAAeA,EAAI,EAAI,EAAI,EAChCquE,GAAKruE,GAAeA,EAAI,IAAO,GAAKA,EAAI,KAAQ,GAAK,EAAIA,EAAI,IAAM,GAAKA,EAAI,IAAM,IAAMA,EAAI,IAAM,IAAMA,EAAI,KAAO,IAAM,EAAI,EAC7HsuE,GAAKtuE,GAAeA,EAAI,EAAI,EAAI,GAI5BwzD,EAAQ,IAAIz4D,IAElB,IAAIwzE,EACAC,EAEJ,MAAM,YACJh5C,EADI,eAEJC,EAFI,aAGJV,IACEu/B,EAAAA,EAAAA,KAIJ,IAAIma,EACAC,EAEG,MAAMC,EAAyB,CAACzhD,EAAa7rB,EAAas2D,KAAiB,QAChF,QAAcrwD,IAAVjG,EAAqB,CACvB,MAAMutE,EAAa1lE,MAAMC,QAAQ9H,GAASk+B,KAAKG,UAAUr+B,GAASA,EAC5DwtE,EAASrb,EAAM13D,IAAK,GAAEoxB,KAAO0hD,KAAcjX,KACjD,GAAIkX,EACF,OAAOA,EAIX,IAAKN,IAAaC,EAChB,OAAOthD,EAGT,MAAM4hD,GAAa,UAACP,SAAD,aAAC,EAAWrhD,MAAZ,UAAsBshD,SAAtB,aAAsB,EAAmBthD,IAC5D,OAAK4hD,EAQEC,EAAmBD,EAAY5hD,EAAK7rB,EAAOs2D,IAP3C6W,GACEQ,IAGA9hD,IAMJ5uB,eAAe2wE,EAA4B9xC,EAAkBjQ,GAClE,IAAIgiD,QAAmDz3C,EAAAA,MACrDlc,EAAAA,GACC,GAAE2E,EAAAA,MAAqBid,KAAYjQ,IACpCuK,EAAAA,KAAAA,MAOF,OAJKy3C,IACHA,QA4EJ5wE,eACE6wE,EAA2ChyC,EAAkBjQ,GAE7D,MAAMkiD,QAAeryE,EAAAA,EAAAA,IAAQ,mBAAoB,CAC/CwxE,SAAUY,EACVhyC,SAAAA,EACA1T,KAAM,CAACyD,KAGT,GAAIkiD,MAAAA,GAAAA,EAAQrvE,OAGV,aAFM03B,EAAAA,KAAclc,EAAAA,GAAkB,GAAE4zD,KAAkBhyC,KAAYjQ,IAAOkiD,EAAO,IAE7EA,EAAO,GAxFUC,CAAkBnvD,EAAAA,GAAmBid,EAAUjQ,IAGlE6hD,EAAmBG,EAAiBhiD,GAGtC5uB,eAAeu/B,EAAYV,EAAoB/gC,GAAqD,IAAtBkzE,EAAsB,wDACzG,GAAIf,GAAYpxC,IAAasxC,EAK3B,YAJIryE,GACFA,KAMJ,IAAImzE,QAAoB93C,EAAAA,MAAelc,EAAAA,GAAiB4hB,EAAU1F,EAAAA,KAAAA,MAClE,IAAK83C,IACCD,SACIN,IAGRO,QAAoBC,EAAYryC,IAC3BoyC,GACH,OAIJ/b,EAAMa,QAENoa,EAAkBtxC,EAClBoxC,EAAWgB,EACXhrE,SAAS47B,gBAAgB/5B,KAAO+2B,EAEhC,MAAM,UAAEpB,EAAF,WAAauB,IAAelI,EAAAA,EAAAA,MAAYyE,SAAS+B,MACjD6zC,EAAW1zC,MAAAA,OAAH,EAAGA,EAAWyM,MAAM/jB,GAAMA,EAAE0Y,WAAaA,IACvDwxC,EAAejsE,MAAQqC,QAAQ0qE,MAAAA,OAAD,EAACA,EAAUC,KACzCf,EAAejnE,KAAOy1B,EACtBwxC,EAAerxC,WAAaA,EAExBlhC,GACFA,IAGF24B,IAGK,SAASyI,EAAcF,GACxBA,GAAcA,IAAeoxC,IAIjCA,EAAoBpxC,EACpBqxC,EAAerxC,WAAaA,EAE5BvI,KAGFz2B,eAAe0wE,IACTR,IAIJA,SAA0B,+BAA8BmB,QACxD56C,KAGFz2B,eAAekxE,EAAYryC,GACzB,MAAMiyC,QAAeryE,EAAAA,EAAAA,IAAQ,gBAAiB,CAAE6yE,gBAAiBzvD,EAAAA,GAAYgd,SAAAA,IAC7E,GAAIiyC,EAEF,aADM33C,EAAAA,KAAclc,EAAAA,GAAiB4hB,EAAUiyC,EAAOb,UAC/Ca,EAAOb,SA2ClB,SAASQ,EAAmBD,EAAuC5hD,EAAa7rB,EAAas2D,GAC3F,MAAMkY,EAAWf,EAAaA,EAA4B,iBAAVztE,EApBlD,SAAyBwF,GACvB,MAAMs2B,EAAWsxC,GAAmBxuD,EAAAA,GAC9B6vD,EAAczC,EAAalwC,GAC7BkwC,EAAalwC,GAAuCt2B,GACpD,EAEJ,OAAOumE,EAAe0C,GAc+CC,CAAgB1uE,GAAS,cAAWiG,EACzG,IAAKuoE,IAAaA,EAAS1nE,OAAQ,CACjC,MAAM2D,EAAQohB,EAAIhrB,MAAM,KAExB,OAAO4J,EAAMA,EAAM/L,OAAS,GAG9B,QAAcuH,IAAVjG,EAAqB,CACvB,MACMoK,EApBV,SAAyBokE,EAAkBxuE,GACzCA,EAAQ6H,MAAMC,QAAQ9H,GAASA,EAAQ,CAACA,GACxC,MAAM2uE,EAAoBH,EAAS3tE,MAAMirE,GACnC8C,EAAeD,EAAkBziE,QAEvC,OAAOyiE,EAAkBllE,QAAO,CAACW,EAAQ6uD,EAAKjxD,IACpC,GAAEoC,IAASvK,OAAOG,EAAMgI,IAAU,MAAMixD,KAC/C2V,GAAgB,IAaFC,CAAgBL,EADG,MAAXlY,GAAiBwY,EAAAA,EAAAA,IAAc9uE,GAASA,GAEzDutE,EAAa1lE,MAAMC,QAAQ9H,GAASk+B,KAAKG,UAAUr+B,GAASA,EAElE,OADAmyD,EAAMz1D,IAAK,GAAEmvB,KAAO0hD,KAAcjX,IAAUlsD,GACrCA,EAGT,OAAOokE,I,2HChOT,MAAMO,EAAc,KAGb9xE,eAAe+xE,EAASC,GAC7B,MAAMC,QAAoB,IAAIpc,SAASmc,GAAUC,cAEjD,OAAO,IAAI5yE,SAASzB,IAClB,MAAMs0E,EAAa,IAAIrS,WAAWoS,GAElC,IAAIE,EAAoC,IAAIl1E,OAC1C,IAAIC,IAAI,mBAENk1E,EAAgC,IAAIn1E,OAAO,IAAIC,IAAI,mBAEvDi1E,EAAcE,UAAaztE,IAEV,OAAXA,EAAExH,KAEJg1E,EAAWlzE,YAAY,CAAE+U,QAAS,SAGlCm+D,EAAWlzE,YACT,CACE+U,QAAS,SACTq+D,QAAS1tE,EAAExH,MAEbwH,EAAExH,KAAKmM,KAAI,QAAC,OAAEgpE,GAAH,SAA8BA,OAK/CH,EAAUC,UAAaztE,IACE,SAAnBA,EAAExH,KAAKa,UACTL,EAAQ,IAAIy3D,KAAK,CAACzwD,EAAExH,KAAKo1E,MAAO,CAAEn1E,KAAM,eAExC80E,EAAeM,YACfN,OAAgBnpE,EAChBopE,EAAWK,YACXL,OAAYppE,IAIhBopE,EAAUlzE,YAAY,CACpB+U,QAAS,OACTy+D,YA3CY,GA4CZC,cAAeb,IAGjBK,EAAcjzE,YAAY,CACxB+U,QAAS,OACT2+D,kBAAmBd,EACnBe,uBAAwBf,IAG1BK,EAAcjzE,YAAY,CACxB+U,QAAS,SACT6+D,MAAOZ,GACN,CAACA,EAAWK,Y,aCxCnB,MAAMQ,EAAiB,CACrB,CAACzyE,EAAAA,GAAAA,SAAyB64B,EAASy7B,KAAKS,KACxC,CAAC/0D,EAAAA,GAAAA,QAAwB64B,EAASy7B,KAAKS,KACvC,CAAC/0D,EAAAA,GAAAA,kBAA6B0I,EAC9B,CAAC1I,EAAAA,GAAAA,aAAwB0I,GAKrBgqE,EAAc,IAAIv2E,IAClBw2E,EAAgB,IAAIx2E,IACpBy2E,EAAoB,IAAIz2E,IACxB02E,EAAuB,IAAI12E,IAE1B,SAASo4D,EACd1xD,EACAiwE,GAI2B,IAH3Bre,EAG2B,wDAF3Bse,EAE2B,uCAD3BC,EAC2B,uCAC3B,GAAIF,IAAgB9yE,EAAAA,GAAAA,YAClB,OACEmuC,EAAAA,GACI8kC,EAAepwE,GACf0xD,EAAM1xD,EAAK7C,EAAAA,GAAAA,QAAwBy0D,EAAese,EAAYC,GAItE,IAAKL,EAAcviE,IAAIvN,GAAM,CAC3B,MAAMvE,EAAU40E,EAAuBrwE,EAAKiwE,EAAare,GACtDr1D,OAAOZ,IACFhC,EAAAA,IAEFC,QAAQ4B,KAAKG,MAKhBa,SAAQ,KACPszE,EAAcrzE,OAAOuD,GACrB+vE,EAAkBtzE,OAAOuD,GACzBgwE,EAAqBvzE,OAAOuD,MAGhC8vE,EAAcxzE,IAAI0D,EAAKvE,GAGzB,GAAIy0E,GAAcC,EAAkB,CAClC,IAAIG,EAAkBP,EAAkB11E,IAAI2F,GACvCswE,IACHA,EAAkB,IAAIh3E,IACtBy2E,EAAkBzzE,IAAI0D,EAAKswE,IAE7BA,EAAgBh0E,IAAI6zE,EAAkBD,GAGxC,OAAOJ,EAAcz1E,IAAI2F,GAGpB,SAASuwE,EAAcvwE,GAC5B,OAAO6vE,EAAYx1E,IAAI2F,GAGlB,SAASwwE,EAAe30E,GAC7Bk0E,EAAkBpoE,SAAQ,CAACvB,EAAKpG,KAC9BoG,EAAIuB,SAAShN,IACX,GAAIA,IAAakB,EAAkB,CACjC,MAAM40E,EAAiBT,EAAqB31E,IAAI2F,GAChD,IAAKywE,EAAgB,QAErB70E,EAAAA,EAAAA,IAAkB60E,GAClBT,EAAqBvzE,OAAOuD,GAC5B+vE,EAAkBtzE,OAAOuD,UAM1B,SAASg0B,EAAeh0B,EAAamwE,GAC1C,MAAM39C,EAAYu9C,EAAkB11E,IAAI2F,GACnCwyB,GACLA,EAAU/1B,OAAO0zE,GAGnB,SAASC,EAAepwE,GACtB,MAAM0wE,EAAkB,iBAA2B1wE,IAInD,OAFA6vE,EAAYvzE,IAAI0D,EAAK0wE,GAEdx0E,QAAQzB,QAAQi2E,GAGzB7zE,eAAewzE,EACbrwE,EAAaiwE,EAA6Bre,GAE1C,IAAKn4C,EAAAA,GAAsB,CACzB,MAAMk4C,EAAY3xD,EAAIgM,WAAW,UAAY2N,EAAAA,GAA2BD,EAAAA,GAClE0zD,QAAep3C,EAAS07B,MAAMC,EAAW3xD,EAAK4vE,EAAeK,GAAere,GAElF,GAAIwb,EAAQ,CACV,IAAI1iC,EAAQ0iC,EAMZ,GAJoB,cAAhBA,EAAOlzE,MAAyBkuC,EAAAA,KAClCsC,QAAckkC,EAASlkC,IAGL,eAAhB0iC,EAAOlzE,QAA0BguC,EAAAA,EAAAA,OAAqBwC,EAAO,CAC/D,MAAMimC,QAAiBC,EAAAA,EAAAA,IAAU5wE,EAAK0qC,GAClCimC,IACFjmC,EAAQimC,GAIZ,MAAMjS,EAAWmS,EAAanmC,GAI9B,OAFAmlC,EAAYvzE,IAAI0D,EAAK0+D,GAEdA,GAIX,GAAIuR,IAAgB9yE,EAAAA,GAAAA,OAAuB,CACzC,MAAM2zE,EAAc,IAAIC,YAClBC,EAAYj3E,IAAIw+B,gBAAgBu4C,GACtC,IAAIr8D,GAAS,EAiBb,OAfAq8D,EAAY92E,iBAAiB,cAAc,KACzC,GAAIya,EACF,OAEFA,GAAS,EAET,MAAMw8D,EAAeH,EAAYI,gBAAgB,cAE3ChB,EAAaiB,EAAenxE,EAAK8wE,EAAaG,GACpDjB,EAAqB1zE,IAAI0D,EAAKkwE,IAEzB50E,EAAAA,EAAAA,IAAQ,gBAAiB,CAAE0E,IAAAA,EAAKiwE,YAAAA,GAAeC,MAGtDL,EAAYvzE,IAAI0D,EAAKgxE,GACdA,EAGT,MAAMd,EAAaiB,EAAenxE,GAClCgwE,EAAqB1zE,IAAI0D,EAAKkwE,GAE9B,MAAMvC,QAAeryE,EAAAA,EAAAA,IAAQ,gBAAiB,CAAE0E,IAAAA,EAAKiwE,YAAAA,EAAare,cAAAA,GAAiBse,GACnF,IAAKvC,EACH,MAAM,IAAI9yE,MAAO,yBAAwBmF,KAG3C,IAAI,SAAE0+D,EAAF,SAAY17D,GAAa2qE,EAE7B,GAAiB,cAAb3qE,IAA6BolC,EAAAA,GAAmB,CAClD,MAAM+pB,QAAa4L,EAAAA,EAAAA,IAAUW,GAC7B3kE,IAAIq3E,gBAAgB1S,GACpB,MAAMh0B,QAAckkC,EAASzc,GAC7BuM,EAAWmS,EAAanmC,GACxB1nC,EAAW0nC,EAAMxwC,KAGnB,GAAiB,eAAb8I,KAA8BklC,EAAAA,EAAAA,MAAmB,CACnD,MAAMiqB,QAAa4L,EAAAA,EAAAA,IAAUW,GAC7B3kE,IAAIq3E,gBAAgB1S,GACpB,MAAMh0B,QAAckmC,EAAAA,EAAAA,IAAU5wE,EAAKmyD,GAC/BznB,IACFg0B,EAAWmS,EAAanmC,IAM5B,OAFAmlC,EAAYvzE,IAAI0D,EAAK0+D,GAEdA,EAGT,SAASyS,EAAenxE,EAAa8wE,EAA2BG,GAC9D,MAAMf,EAA4B,CAACp4C,EAAkBg3C,KAA6B,MAChF,UAAAiB,EAAkB11E,IAAI2F,UAAtB,SAA4B2H,SAAShN,IACnCA,EAASm9B,GACLn9B,EAASmB,aAAYo0E,EAAWp0E,YAAa,MAGlC,IAAbg8B,IACFg5C,MAAAA,GAAAA,EAAaO,eAGVvC,IAILmC,MAAAA,GAAAA,EAAcK,aAAaxC,KAG7B,OAAOoB,EAGT,SAASW,EAAaU,GACpB,OAAIA,aAAqBrf,KAChBn4D,IAAIw+B,gBAAgBg5C,GAGtBA,EAGLjmC,EAAAA,IACF7W,UAAU+8C,cAAcx3E,iBAAiB,WAAW6C,MAAAA,IAClD,MAAM,KAAE3C,EAAF,UAAQI,EAAR,OAAmB6O,GAAW1H,EAAExH,KAMtC,GAAa,gBAATC,EACF,OAGF,MAAM8P,QAAe1O,EAAAA,EAAAA,IAAQ,gBAAiB,CAAE20E,YAAa9yE,EAAAA,GAAAA,eAA+BgM,IAC5F,IAAKa,EACH,OAGF,MAAM,YAAE8kE,EAAF,SAAe9rE,EAAf,SAAyByuE,GAAaznE,EAE5CyqB,UAAU+8C,cAAcE,WAAY31E,YAAY,CAC9C7B,KAAM,eACNI,UAAAA,EACA0P,OAAQ,CACN8kE,YAAAA,EACA9rE,SAAAA,EACAyuE,SAAAA,IAED,CAAC3C,Q,+BC1PD,MAAMl6B,EAAmB,I,oFCGzB,IAAK+8B,G,SAAAA,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,MAAAA,GAAAA,Q,CAAAA,IAAAA,EAAAA,KAoBZ,MAAMC,EAAyC,GACzCC,EAAyC,IAEzC,YAAE99C,EAAF,aAAeT,IAAiBu/B,EAAAA,EAAAA,KAE/Bh2D,eAAeooB,EAA0DP,EAAeC,GAC7F,IAAKitD,EAAcltD,GAAa,CAC9B,OAAQA,GACN,KAAKitD,EAAQG,KACXF,EAAcD,EAAQG,MAAQ,8BAC9B,MACF,KAAKH,EAAQI,KACPp4E,EAAAA,IAEFC,QAAQC,IAAI,8BAGd+3E,EAAcD,EAAQI,MAAQ,wEAC9B,MACF,KAAKJ,EAAQK,MACXJ,EAAcD,EAAQK,OAAS,+DAC/B,MACF,KAAKL,EAAQM,MACXL,EAAcD,EAAQM,OAAS,8DAIlCL,EAAcltD,GAA4C1nB,KAAKs2B,GAGlE,MAAM4+C,QAAgBN,EAAcltD,GAMpC,OAJKmtD,EAAantD,KAChBmtD,EAAantD,GAAcwtD,GAGtBntD,EAAoBL,EAAYC,GAGlC,SAASI,EAAmEL,EAAeC,GAChG,MAAMutD,EAASL,EAAantD,GAE5B,GAAKwtD,EAIL,OAAOA,EAAOvtD,GAGT,MAAMK,EAAkB+O,G,iNC7C/B,SAASo+C,EAAeC,GACtB,MAAMn4E,EAAOm4E,EAAaC,SAC1B,OAAOv0C,KAAKG,UAAU,CACpBq0C,SAAUr4E,EAAKq4E,SACftqD,KAAM/tB,EAAK+tB,OAIf,SAASuqD,IACP,QAAKjX,EAAAA,KACC,qBAAsBkX,0BAA0B97B,UAWtB,WAA5B+7B,aAAaC,YACX/4E,EAAAA,IAEFC,QAAQ4B,KAAK,oDAER,GAIH,gBAAiBP,SACjBtB,EAAAA,IAEFC,QAAQ4B,KAAK,2CAER,IAxBH7B,EAAAA,IAEFC,QAAQ4B,KAAK,gDAER,IA6CX,MAGMm3E,EAAiB,IAAI7kE,IAEpBjR,eAAe+1E,EAAgB5uE,EAAaq5D,GACjD,QAAWx3D,IAAP7B,GAAoB2uE,EAAeplE,IAAIvJ,GAAK,OAChD,MAAM,wBAAE6uE,IAA4B12C,EAAAA,EAAAA,KAAqBxI,EAAAA,EAAAA,OACnDm/C,EAAgBzV,EAASA,EAAS,GAAKwV,EAA0B,GACvE,GAAsB,IAAlBC,EAAqB,OAEzB,MAAM1sC,EAAQ,IAAIm1B,MAAM,sBACxBn1B,EAAMi3B,OAASyV,EACf1sC,EAAM1a,aAAa,kBAAmB,qBAC3B7lB,IAAP7B,IACFoiC,EAAMpsC,iBAAiB,SAAS,KAC9B24E,EAAexkE,IAAInK,KAClB,CAAE+uE,MAAM,IAEX53E,YAAW,KACTw3E,EAAel2E,OAAOuH,KAlBH,MAsBvB,UACQoiC,EAAM4sC,OACZ,MAAOz4E,GACHZ,EAAAA,IAEFC,QAAQ4B,KAAK,6CAKZ,MAAMy3E,GAA2Bn7D,EAAAA,EAAAA,IAAS86D,EAAiB,KAAM,GAAM,GAS9E/1E,eAAeq2E,IACP,iBAAkBj4E,SACnB,CAAC,UAAW,UAAU6K,SAAS2sE,aAAaC,mBACzCD,aAAaS,qBAIvBr2E,eAAes2E,EAAoBf,GACjC,MAAM1gE,GAASiiB,EAAAA,EAAAA,MACTy/C,GAAWhyE,EAAAA,EAAAA,MACjB,GAAIgxE,EACF,IACE,MAAM77C,EAAc47C,EAAeC,GAInC,aAHM92E,EAAAA,EAAAA,IAAQ,mBAAoBi7B,SAC5B67C,EAAav8C,mBACnBu9C,EAASC,oBAET,MAAO94E,GACHZ,EAAAA,IAEFC,QAAQC,IAAI,0CAA2CU,GAIzDmX,EAAOpS,aACHhE,EAAAA,EAAAA,IAAQ,mBAAoBoW,EAAOpS,KAAKi3B,aAC9C68C,EAASC,qBAINx2E,eAAeg5B,IACpB,IAAK08C,IAAwB,OAC7B,MAAMe,QAAkC7+C,UAAU+8C,cAAc+B,MAC1DnB,QAAqBkB,EAA0BE,YAAYC,wBAC3DN,EAAoBf,GAI5B,IAAIsB,GAAoB,EAwBjB72E,eAAeu9B,IACpB,IAAKm4C,IAIH,kBADMW,IAGR,MAAMI,QAAkC7+C,UAAU+8C,cAAc+B,MAChE,IAAInB,QAAqBkB,EAA0BE,YAAYC,kBAC/D,GA9EF,SAAkCrB,GAChC,MAAM1gE,GAASiiB,EAAAA,EAAAA,MACf,OAAKjiB,EAAOpS,OAAS8yE,GACjBD,EAAeC,KAAkB1gE,EAAOpS,KAAKi3B,aAC1C55B,KAAKC,MAAQ8U,EAAOpS,KAAKk3B,aAxCX,MAkHhBm9C,CAAyBvB,GAA9B,OACMe,EAAoBf,GAC1B,IACEA,QAAqBkB,EAA0BE,YAAYp5C,UAAU,CACnEw5C,iBAAiB,IAEnB,MAAMr9C,EAAc47C,EAAeC,GAC/Bz4E,EAAAA,IAEFC,QAAQC,IAAI,sCAAuC08B,SAE/Cj7B,EAAAA,EAAAA,IAAQ,iBAAkBi7B,IAChCn1B,EAAAA,EAAAA,MACGyyE,eAAet9C,GAClB,MAAOh8B,GACyB,WAA5Bk4E,aAAaC,WAKX/4E,EAAAA,IAEFC,QAAQ4B,KAAK,mDAEN7B,EAAAA,KAKTC,QAAQC,IAAI,sCAAuCU,GAI/CA,EAAM0L,OAAS6tE,aAAaC,iBACxBb,OAmFPr2E,eAAem3E,EAAf,GAG6C,IAHR,KAC1C7sE,EAD0C,QAE1CrM,GACkD,EAClD,MAAM,oBAAEo/B,SAvJVr9B,iBACE,GAAI62E,EAAmB,OAAOv3C,EAAAA,EAAAA,KAAqBxI,EAAAA,EAAAA,OACnD,MAAOsgD,EAAgBC,SAA0Bh4E,QAAQ0+B,IAAI,EAC3Dt/B,EAAAA,EAAAA,IAAQ,4BAA6B,CACnCo+B,kBAAkB/F,EAAAA,EAAAA,MAAY+F,oBAEhCp+B,EAAAA,EAAAA,IAAQ,8BAA+B,CACrCo+B,kBAAkB/F,EAAAA,EAAAA,MAAY+F,qBAGlC,IAAKu6C,EAAgB,OAAO93C,EAAAA,EAAAA,KAAqBxI,EAAAA,EAAAA,OAEjD,IAAIjiB,GAASkoB,EAAAA,EAAAA,KAAgBjG,EAAAA,EAAAA,MAAasgD,GAM1C,OALIC,IACFxiE,GAASioB,EAAAA,EAAAA,IAAoBjoB,EAAQwiE,KAEvC1gD,EAAAA,EAAAA,IAAU9hB,GACVgiE,GAAoB,GACbv3C,EAAAA,EAAAA,IAAqBzqB,GAqIUyiE,GACtC,IAlFF,SAA6BhtE,GAC3B,IAAKusE,EAAmB,OAAO,EAC/B,MAAMhiE,GAASiiB,EAAAA,EAAAA,MAEf,SADgB0P,EAAAA,EAAAA,IAAkBl8B,GAAMg1B,EAAAA,EAAAA,IAAqBzqB,IAASq8C,EAAAA,EAAAA,IAAuBr8C,KAC9EvK,EAAK+6B,cAAgB/6B,EAAK27D,UAIjChgE,SAASsxE,YA0EZC,CAAoBltE,GAAO,OAChC,MAAMmtE,EA/PA,iBAAkBr5E,OAQQ,WAA5Bw3E,aAAaC,aACX/4E,EAAAA,IAEFC,QAAQ4B,KAAK,oDAER,IAZH7B,EAAAA,IAEFC,QAAQ4B,KAAK,8DAER,GA2PT,IAAK0+B,IAAwBo6C,EAG3B,YADArB,EAAyBxzE,OAAO3E,EAAQkJ,KAAOmD,EAAKnD,IAGtD,IAAKswE,EAA2B,OAChC,IAAKx5E,EAAQkJ,GAAI,OAEjB,MAAM,MACJ7B,EADI,KAEJ0lB,GAnFJ,SAAgC1gB,EAAerM,GAC7C,MAAM4W,GAASiiB,EAAAA,EAAAA,OACT,SACJ8T,EADI,iBAEJN,GACErsC,EAEEy5E,EAAgB9sC,GAAW71B,EAAAA,EAAAA,IAAWF,EAAQ+1B,QAAY5hC,EAC1D2uE,GAAgB1qC,EAAAA,EAAAA,IAAiBhvC,GACjC25E,EAAsBD,GAAiBrtC,GACzCwV,EAAAA,EAAAA,IAAkBjrC,EAAQvK,EAAKnD,GAAImjC,QACnCthC,GAEF6uE,cAAeC,EACf3vE,aAAc4vE,GACZJ,GAAiB,GAEfK,EAAoBF,EACtBA,EAAoBvuE,KAAKuJ,IAAWiC,EAAAA,EAAAA,IAAWF,EAAQ/B,KACtDrJ,OAAgBhD,cACjBuC,EACEivE,GAAoBh0C,EAAAA,EAAAA,IAAqB35B,GACzC4tE,EAAkBD,GAAoBljE,EAAAA,EAAAA,IAAWF,EAAQojE,QAAqBjvE,EAEpF,IAAIgiB,EACJ,IAAI+b,EAAAA,EAAAA,IAA+Bz8B,GAAMg1B,EAAAA,EAAAA,IAAqBzqB,IAASq8C,EAAAA,EAAAA,IAAuBr8C,IAC5F,IAAI41B,EAAAA,EAAAA,IAAgBxsC,GAAU,CAC5B,MAAMk6E,EAAS7tE,KAASu5B,EAAAA,EAAAA,IAAcv5B,IAASrM,EAAQ2sC,WAAa3sC,EAAQsJ,QAE5EyjB,GAAOnjB,EAAAA,EAAAA,GACLwoE,EAAAA,GACApyE,EACCk6E,OAAyBnvE,EAAhB0uE,EACVS,EAAS7tE,OAAOtB,EAChBgvE,EACAJ,EACAG,EACA,CAAEpvE,aAAa,QAEZ,CACL,MAAMyvE,GAAajwC,EAAAA,EAAAA,IAAqBkoC,EAAAA,GAAgB/lE,EAAKnD,GAAIuwE,GAC3DnrC,GAAUviC,EAAAA,EAAAA,IAAsBqmE,EAAAA,GAAgBpyE,GAEtD+sB,EAAOotD,EAAc,GAAEA,MAAe7rC,IAAYA,OAGpDvhB,EAAO,cAGT,MAAO,CACL1lB,OAAOiF,EAAAA,EAAAA,GAAa8lE,EAAAA,GAAgB/lE,EAAM4tE,GAC1CltD,KAAAA,GAiCEqtD,CAAuB/tE,EAAMrM,GAE3Bwc,QA/BRza,eAAyBsK,GACvB,MAAMguE,GAAYh0C,EAAAA,EAAAA,IAAkBh6B,GACpC,IAAKguE,EAAW,OAChB,IAAI5D,EAAY6D,EAAAA,GAA0BD,GAK1C,OAJK5D,UACG6D,EAAAA,GAAkBD,EAAWh4E,EAAAA,GAAAA,SACnCo0E,EAAY6D,EAAAA,GAA0BD,IAEjC5D,EAuBY8D,CAAUluE,GAE7B,GAAIorE,IAAwB,OAC1B,UAAI99C,UAAU+8C,qBAAd,OAAI,EAAyBE,YAE3Bj9C,UAAU+8C,cAAcE,WAAW31E,YAAY,CAC7C7B,KAAM,yBACN+B,QAAS,CACPkG,MAAAA,EACA0lB,KAAAA,EACAvQ,KAAAA,EACAlT,OAAQ+C,EAAKnD,GACb1J,UAAWQ,EAAQkJ,UAIpB,CACL,MAAMovE,GAAWhyE,EAAAA,EAAAA,MACX6D,EAA+B,CACnC4iB,KAAAA,EACAvQ,KAAAA,EACAg+D,MAAOh+D,EACPiU,IAAK9rB,OAAO3E,EAAQkJ,KAGlB,YAAaywB,YACfxvB,EAAQswE,QAAU,CAAC,IAAK,IAAK,MAG/B,MAAMxtB,EAAe,IAAI0qB,aAAatwE,EAAO8C,GAE7C8iD,EAAaytB,QAAU,KACrBztB,EAAa0tB,QACbrC,EAASlvE,aAAa,CACpBE,OAAQ+C,EAAKnD,GACb1J,UAAWQ,EAAQkJ,KAEjB/I,OAAOga,OACTha,OAAOga,SAKX8yC,EAAa2tB,OAAS,KACpBzC,EAAyBxzE,OAAO3E,EAAQkJ,KAAOmD,EAAKnD,MAKnD,SAAS2xE,EAA0B15E,GAA8D,OAClG+c,EAAAA,IAAW,UAACyb,UAAU+8C,qBAAX,OAAC,EAAyBE,YACzCj9C,UAAU+8C,cAAcE,WAAW31E,YAAY,CAC7C7B,KAAM,4BACN+B,QAAAA,IAKG,SAAS25E,IAAoB,MAC9B,UAACnhD,UAAU+8C,qBAAX,OAAC,EAAyBE,YAC9Bj9C,UAAU+8C,cAAcE,WAAW31E,YAAY,CAC7C7B,KAAM,kB,wCC/YV,MAAM27E,EAAwB,aACxBC,EAAqB,CAAC,IAAK,KAG1B,SAASC,EAAuBC,GACrCr4C,aAAaK,QAAQ63C,EAAuB/3C,KAAKG,UAAU+3C,IAGtD,SAASv2C,KAMhB,WACE,MAAM8yB,EAAO50B,aAAaC,QAAQi4C,GAClC,IAAKtjB,EACH,OAAO,EAGT,IACE,MAAMyjB,EAAUl4C,KAAKC,MAAMw0B,GAC3B,OAAOujB,EAAmBhwE,SAASkwE,GACnC,MAAOr6E,GACP,OAAO,IAfJs6E,IACHF,EARoB,O,yECCxB,MAAMG,EAAsB,IACtBC,EAAkB,kBAEjB,SAASC,EAAqBC,EAAiCrc,GACpE,OAAOqc,EAAc/vE,QAAQgwE,GAAYA,EAAQC,OAASvc,IAGrD,SAASwc,EAA0BH,GAA6C,UAAZp4E,EAAY,uDAAJ,GAC7Ei3B,EAAcj3B,EAAMsC,QAAQ,WAAY,IACxC20B,EAAYlpB,WAAW,OACzBkpB,EAAcA,EAAYpmB,OAAO,IAGnC,MAAM2nE,EAAoBJ,EACvB/vE,QAAQgwE,GAAYphD,EAAYlpB,WAAWsqE,EAAQI,eAChDC,GAA+DloD,EAAAA,EAAAA,IAAQgoD,EAC1ErwE,KAAKkwE,IAAaA,EAAQM,UAAY,CAAC,KAAKxwE,KAAKywE,IACzC,CACL5wE,KAAO,GAAEqwE,EAAQI,cAAcG,IAC/BP,QAAAA,SAIAQ,EAAcH,EACjBrwE,QAAO,QAAC,KAAEL,GAAH,SAAcivB,EAAYlpB,WAAW/F,MAC5C4xC,MAAK,CAACC,EAAGC,IAAMD,EAAE7xC,KAAK3H,OAASy5C,EAAE9xC,KAAK3H,SAEzC,iBAAOw4E,EAAYA,EAAYx4E,OAAS,UAAxC,aAAO,EAAqCg4E,QAGvC,SAASS,EAAkB94E,EAAeq4E,GAC/C,IAAIphD,EAAcj3B,EAAMsC,QAAQ,UAAW,IAC3C,GAAI+1E,EACFphD,EAAcA,EAAYpmB,OAAOwnE,EAAQI,YAAYp4E,aAChD,GAAIL,EAAM+N,WAAW,KAC1B,OAAO/N,EAET,MAAM+4E,EAqBR,SAAwBC,EAA2BC,GACjD,IAAKA,GAAgC,IAApBA,EAAS54E,OAAc,OAAO63E,EAC/C,GAAwB,IAApBe,EAAS54E,OAAc,OAAO44E,EAAS,GAE3C,MAAMC,EAAiBD,EAASnwC,MAAMiwC,GAAYA,EAAQhrE,WAAWkqE,MAAyBC,EAExFW,EAAcI,EAAS5wE,QAAQ0wE,IACnC,MAAMI,EAAWJ,EAAQz2E,QAAQ,WAAY,IAC7C,GAAI62E,EAASprE,WAAWkqE,GAAsB,OAAO,EACrD,IAAK,IAAIz3E,EAAI,EAAGA,EAAIw4E,EAAkB34E,OAAQG,IAC5C,GAAIA,EAAI24E,EAAS94E,OAAS,GAAM84E,EAAS34E,KAAOy3E,GAAuBkB,EAAS34E,KAAOw4E,EAAkBx4E,GACvG,OAAO,EAGX,OAAO,KAIT,OAA8B,IAAvBq4E,EAAYx4E,OAAew4E,EAAY,GAAKK,EAvCnCE,CAAeniD,EAAaohD,MAAAA,OAAd,EAAcA,EAASY,UAE/CltE,EAAmB,GACzB,IAAIpL,EAAI,EACR,IAAK,IAAIH,EAAI,EAAGA,EAAIy2B,EAAY52B,OAAQG,IAAK,CAC3C,KAAOu4E,EAAQp4E,KAAOs3E,GAAuBt3E,EAAIo4E,EAAQ14E,SACvD0L,EAAO1K,KAAK03E,EAAQp4E,IAChBo4E,EAAQp4E,KAAOs2B,EAAYz2B,KAC7BA,IACIA,IAAMy2B,EAAY52B,UAExBM,IAGFoL,EAAO1K,KAAK41B,EAAYz2B,IACxBG,IAGF,OAAOoL,EAAOnK,KAAK,IAwBd,SAASy3E,EAA0BjB,EAAiCnhD,GACzE,MAAMqiD,EAAiBriD,EAAYlpB,WAAW,KAAOkpB,EAAe,IAAGA,IACjEohD,EAAUE,EAA0BH,EAAekB,GACzD,OAAKjB,EAGG,IAAGA,EAAQI,eAAeK,EAAkBQ,EAAgBjB,KAF3DiB,I,gECjFJ,SAASC,EAAkBC,GAChC,MAAMC,EAAsC,WAArBD,EAAYv9E,KAChC,IAAGu9E,EAAYv9E,QACY,IAA1Bu9E,EAAY11C,SACb,IAAG01C,EAAY11C,WACd,GAEJ,MAAQ,GAAE01C,EAAYrzE,SAASszE,IAG1B,SAASC,IACd,IAAK92D,EAAAA,GAAe,OAEpB,MAAOzc,EAAQszE,GAAkB72D,EAAAA,GAAAA,QAAsB,KAAM,IAAIpgB,MAAM,KACvE,GAAK2D,MAAAA,IAAAA,EAAQ/D,MAAM,WAAY,OAE/B,MAAMu3E,EAAS,CAAC,SAAU,SAAU,aAAa9xE,SAAS4xE,GAE1D,MAAO,CACLtzE,OAAAA,EACAlK,KAAMoJ,QAAQo0E,IAAmBE,EAAUF,EAAqC,SAChF31C,SAAUz+B,QAAQo0E,KAAoBE,EAAS9kD,OAAO4kD,GAAkBr6E,EAAAA,M,eCrBrE,SAASya,EACd+/D,EACAvL,GAGA,IACIwL,EAHJC,IAEA,yDADAC,IACA,yDAGA,OAAO,WAA4B,2BAAxB38E,EAAwB,yBAAxBA,EAAwB,gBAC7By8E,GACFx3D,aAAaw3D,GACbA,OAAiBjyE,GACRkyE,GACTF,KAAMx8E,GAIRy8E,EAAiBvmB,KAAKp2D,YAAW,KAC3B68E,GACFH,KAAMx8E,GAGRy8E,OAAiBjyE,IAChBymE,IAIA,SAAS1N,EACdiZ,EACAvL,GAEA,IACI2L,EACAC,EACA78E,EAJJ08E,IACA,yDAKA,OAAO,WACLG,GAAY,EADsB,2BAAzBC,EAAyB,yBAAzBA,EAAyB,gBAElC98E,EAAO88E,EAEFF,IACCF,IACFG,GAAY,EACZL,KAAMx8E,IAIR48E,EAAW1mB,KAAK6mB,aAAY,KAC1B,IAAKF,EAIH,OAFA3mB,KAAK8mB,cAAcJ,QACnBA,OAAWpyE,GAIbqyE,GAAY,EACZL,KAAMx8E,KACLixE,KAKF,SAAS17C,EAA6CinD,GAC3D,OAAOS,EAAa9mD,EAASqmD,GAGxB,SAASlnD,EAAoDknD,GAClE,OAAOS,EAAa7mD,EAAgBomD,GAG/B,SAASxkD,EAAiDwkD,GAC/D,OAAOS,EAAa3mD,EAAWkmD,GAO1B,SAASS,EAA0CrnD,EAAwB4mD,GAChF,IACIx8E,EADAk9E,GAAU,EAGd,OAAO,WAA6B,2BAAzBJ,EAAyB,yBAAzBA,EAAyB,gBAClC98E,EAAO88E,EAEFI,IACHA,GAAU,EAEVtnD,GAAY,KACVsnD,GAAU,EACVV,KAAMx8E,QAMP,SAASwjE,EAAOx/C,EAAwBY,GAEzCsxC,KAAKinB,oBAEPjnB,KAAKinB,oBAAoBn5D,EAAI,CAAEY,QAAAA,IAE/B0R,EAAUtS,G,8HAQP,MAAMtiB,EAASuvE,GAAe,IAAIpwE,SAAezB,IACtDU,YAAW,IAAMV,KAAW6xE,MAGvB,SAASmM,IACd,OAAO,IAAIv8E,SAAezB,IACxB+2B,EAAQ/2B,MAIZ,IAAIi+E,EACAC,EA2BAC,EACAC,EA0BAC,EAnDG,SAAStnD,EAAQ72B,GAAiD,IAAnBo+E,EAAmB,wDAClEL,EAYMK,EACTJ,EAAyBr5E,KAAK3E,GAE9B+9E,EAAiBp5E,KAAK3E,IAdtB+9E,EAAmBK,EAAY,GAAK,CAACp+E,GACrCg+E,EAA0BI,EAAY,CAACp+E,GAAY,GAEnD8d,uBAAsB,KACpB,MAAMugE,EAAmBN,EACnBO,EAA0BN,EAChCD,OAAmB7yE,EACnB8yE,OAA0B9yE,EAC1BozE,EAAwBtxE,SAAS0X,GAAOA,MACxC25D,EAAiBrxE,SAAS0X,GAAOA,UAShC,SAASoS,EAAe92B,GAC7B62B,EAAQ72B,GAAU,GAMb,SAASg3B,EAAUh3B,GAAiD,IAAnBo+E,EAAmB,wDACpEH,EAYMG,EACTF,EAA2Bv5E,KAAK3E,GAEhCi+E,EAAmBt5E,KAAK3E,IAdxBi+E,EAAqBG,EAAY,GAAK,CAACp+E,GACvCk+E,EAA4BE,EAAY,CAACp+E,GAAY,GAErDuB,QAAQzB,UAAUuC,MAAK,KACrB,MAAMg8E,EAAmBJ,EACnBK,EAA0BJ,EAChCD,OAAqB/yE,EACrBgzE,OAA4BhzE,EAC5BozE,EAAwBtxE,SAAS0X,GAAOA,MACxC25D,EAAiBrxE,SAAS0X,GAAOA,UAShC,SAASuS,EAAiBj3B,GAC/Bg3B,EAAUh3B,GAAU,GAKf,SAASu+E,EAAev+E,GAA8C,IAAhBw+E,EAAgB,wDAe3E,OAdKL,IACHA,EAAwB,GAExBvnB,KAAKv3D,iBAAiB,gBAAgB,KACpC8+E,EAAuBnxE,SAAS0X,GAAOA,UAIvC85D,EACFL,EAAsBx5E,KAAK3E,GAE3Bm+E,EAAsBM,QAAQz+E,GAGzB,KACLm+E,EAAwBA,EAAuBxyE,QAAQ+Y,GAAOA,IAAO1kB,O,eCtMzE,IAAI0+E,E,yBAEJ,IACEA,EAAgB,IAAI31E,OAAO,mBAAoB,MAC/C,MAAOjC,GAEP43E,EAAgB,IAAI31E,OAAO,cAAe,KAG7B,SAASgiC,EAAY4zC,EAAkBC,GACpD,IAAKD,IAAaC,EAChB,OAAO,EAGT,MAAMC,EAAgC,iBAAXD,EAAsBA,EAAOluE,cAAc5K,MAAM44E,GAAiBE,EACvFE,EAAgBH,EAASjuE,cAG/B,GAA2B,IAAvBmuE,EAAYl7E,SAAiBm7E,EAAc3zE,SAAS0zE,EAAY,IAClE,OAAO,EAGT,IAAIE,EAEJ,OAAOF,EAAYnjC,OAAOsjC,KACnBF,EAAc3zE,SAAS6zE,KAIvBD,IACHA,EAAgBD,EAAch5E,MAAM44E,IAG/BK,EAAcjxE,MAAMmxE,GAAiBA,EAAa5tE,WAAW2tE,QAIjE,SAASh0C,EAA4B4zC,GAC1C,MAAMC,EAAcD,EAAOluE,cAAc5K,MAAM44E,GAE/C,OAAQC,GAAqB5zC,EAAY4zC,EAAUE,K,gCCxC9C,MAAMlqC,EAAiB5V,GACrB57B,KAAKC,MAAMpB,KAAKC,MAAQ,KAAQ88B,G,8ECCzC,SAASmgD,EAAiBhoB,GACtB,OAAO,IAAI31D,SAAQ,CAACzB,EAASD,KAEzBq3D,EAAQioB,WAAajoB,EAAQkoB,UAAY,IAAMt/E,EAAQo3D,EAAQ7nD,QAE/D6nD,EAAQmoB,QAAUnoB,EAAQ2I,QAAU,IAAMhgE,EAAOq3D,EAAQt3D,UAWjE,IAAI0/E,EACJ,SAASC,IAIL,OAHKD,IACDA,EAXR,SAAqBE,EAAQC,GACzB,MAAMC,ICJU5lD,UAAU6lD,eACtB,WAAWrgB,KAAKxlC,UAAUD,aACzB,iBAAiBylC,KAAKxlC,UAAUD,YAEnB+lD,UAAUC,UAGrB,IAAIt+E,SAAQ,SAAUzB,GACzB,IAAIggF,EAAS,WAAc,OAAOF,UAAUC,YAAYh+E,QAAQ/B,IAChEigF,EAAatC,YAAYqC,EAAQ,KACjCA,OACDj+E,SAAQ,WAAc,OAAO67E,cAAcqC,MANnCx+E,QAAQzB,WDDKuC,MAAK,KACzB,MAAM60D,EAAU0oB,UAAUvoB,KASQ,gBAPlC,OADAH,EAAQ8oB,gBAAkB,IAAM9oB,EAAQ7nD,OAAO4wE,kBAAkBR,GAC1DP,EAAiBhoB,MCRhC,IAOQ6oB,EDGJ,MAAO,CAACG,EAAQlgF,IAAa0/E,EAAIr9E,MAAM89E,GAAOngF,EAASmgF,EAAGC,YAAYX,EAAWS,GAAQG,YAAYZ,MAK3Ea,CAAY,EAAgB,WAE/ChB,E,wBEhBX,MAAMiB,EAAS,CAAC,EAAG,EAAG,EAAG,EAAG,GAErB,SAASC,IAAqC,IAApBC,EAAoB,wDACnD,GAAIA,GAAcz9C,aAAaC,QAAQzkB,EAAAA,IACrC,OAAO,EAGT,MAAMkiE,EAAe19C,aAAaC,QAAQ1kB,EAAAA,IAC1C,IAAKmiE,EAAc,OAAO,EAE1B,IACE,MAAMx9C,EAAWC,KAAKC,MAAMs9C,GAC5B,OAAO/3E,QAAQu6B,GAAYA,EAAS75B,IAAM65B,EAASy9C,MACnD,MAAO3/E,GAEP,OAAO,GAIJ,SAAS+5B,EAAaf,EAA6BgB,GACxD,MAAM,SAAE2H,EAAF,KAAYtV,EAAZ,OAAkBjG,GAAW4S,EAEnCgJ,aAAaK,QAAQ9kB,EAAAA,GAAkB4kB,KAAKG,UAAU,CAAEq9C,KAAMh+C,EAAUt5B,GAAI2xB,KAC5EgI,aAAaK,QAAQ,KAAMv+B,OAAO69B,IAClCnhC,OAAO6rB,KAAKA,GAAM5hB,IAAI0sB,QAAQnrB,SAAS4zE,IACrC59C,aAAaK,QAAS,KAAIu9C,aAAiBz9C,KAAKG,UAAUjW,EAAKuzD,QAG7Dx5D,GACF5lB,OAAO6rB,KAAKjG,GAAQ3b,IAAI0sB,QAAQnrB,SAAS4zE,IACvC59C,aAAaK,QAAS,KAAIu9C,SAAaz9C,KAAKG,UAAUlc,EAAOw5D,QAK5D,SAAS3lD,IACd,CACE1c,EAAAA,GACA,QACGgiE,EAAO90E,KAAKm1E,GAAU,KAAIA,kBAC1BL,EAAO90E,KAAKm1E,GAAU,KAAIA,YAC7B5zE,SAAS8jB,IACTkS,aAAa69C,WAAW/vD,MAIrB,SAASmJ,IACd,IAAKumD,IACH,OAGF,MAAMt9C,EAAWC,KAAKC,MAAMJ,aAAaC,QAAQ1kB,EAAAA,KAC3CokB,EAAWxK,OAAO+K,EAASy9C,MAC3BtzD,EAA+B,GAC/BjG,EAAiC,GAsBvC,OApBAm5D,EAAOvzE,SAAS4zE,IACd,IACE,MAAM9vD,EAAMkS,aAAaC,QAAS,KAAI29C,cAClC9vD,IACFzD,EAAKuzD,GAAQz9C,KAAKC,MAAMtS,IAG1B,MAAM3K,EAAO6c,aAAaC,QAAS,KAAI29C,UACnCz6D,IACFiB,EAAOw5D,GAAQz9C,KAAKC,MAAMjd,IAE5B,MAAOnlB,GACHhC,EAAAA,IAEFC,QAAQ4B,KAAK,gCAAiCG,OAM/CQ,OAAO6rB,KAAKA,GAAM1pB,OAEhB,CACLg/B,SAAAA,EACAtV,KAAAA,EACAjG,OAAAA,QALF,EASKllB,eAAew3B,IACpB,MAAMonD,EAAY99C,aAAaC,QAAQzkB,EAAAA,IACvC,IAAKsiE,EAAW,OAEhB,MAAMC,QFjER,SAAajwD,EAAKkwD,EAAczB,KAC5B,OAAOyB,EAAY,YAAanW,GAAUqU,EAAiBrU,EAAMnrE,IAAIoxB,MEgE7CmwD,CAAS,UAASH,KAC5C,IAEE/lD,EADoBoI,KAAKC,MAAM29C,IAE/B,MAAO//E,GACHhC,EAAAA,IAEFC,QAAQ4B,KAAK,gCAAiCG,IAO7CkB,eAAey3B,IACpBqJ,aAAa69C,WAAWriE,EAAAA,IAExB,MAAM0iE,QF6BR,SAAcF,EAAczB,KACxB,OAAOyB,EAAY,YAAanW,IAE5B,GAAIA,EAAMsW,WACN,OAAOjC,EAAiBrU,EAAMsW,cAElC,MAAMC,EAAQ,GACd,OArBR,SAAoBvW,EAAO7qE,GAOvB,OANA6qE,EAAMwW,aAAajC,UAAY,WACtBzb,KAAKt0D,SAEVrP,EAAS2jE,KAAKt0D,QACds0D,KAAKt0D,OAAOiyE,aAETpC,EAAiBrU,EAAMuV,aAcnBmB,CAAW1W,GAAQ12C,GAAWitD,EAAMz8E,KAAKwvB,EAAOrD,OAAMzuB,MAAK,IAAM++E,OEpCxDH,SAEhB1/E,QAAQ0+B,IAAkB,CAC9B5E,EAAS48B,MAAM,aACZipB,EACAv1E,QAAQzI,GAAmB,iBAANA,GAAkBA,EAAEmO,WAAW,4BACpD5F,KAAKvI,GFpBZ,SAAa4tB,EAAKkwD,EAAczB,KAC5B,OAAOyB,EAAY,aAAcnW,IAC7BA,EAAM/oE,OAAOgvB,GACNouD,EAAiBrU,EAAMuV,gBEiBpBa,CAAQ/9E,S,smECzG1B,IAAIs+E,GAAgB,EAEpB,MAAMC,EAAkB,yDAGlBC,EAAgB,IAAIvuE,IAAI,CAC5B,wBACA,2BAGIwuE,EAAO,CAACC,EAAeC,EAAaC,KAChC,EAAIA,GAAsBF,EAAQE,EAAqBD,EAG3DE,EAAUvgF,OAAO6rB,KAAK20D,GAAiDv2E,KAAKw2E,IAAD,CAC/EA,SAAAA,EACAF,OAAQ,CAACG,EAASF,EAAYC,GAAU,IAAKC,EAASF,EAAYC,GAAU,SA6C9E,SAASC,EAASC,GAChB,MAAM9yE,EAASoyE,EAAgBx2D,KAAKk3D,GAEpC,MAAO,CACLC,EAAG5jB,SAASnvD,EAAO,GAAI,IACvBgzE,EAAG7jB,SAASnvD,EAAO,GAAI,IACvB+tC,EAAGohB,SAASnvD,EAAO,GAAI,IACvB8tC,OAAiBjyC,IAAdmE,EAAO,GAAmBmvD,SAASnvD,EAAO,GAAI,SAAMnE,GAI3D,SAASo3E,EAAwBC,EAAoBC,GAAkD,IAAhCV,EAAgC,uDAAH,EAClGC,EAAO/0E,SAAQ,IAA0C,IAAzC,SAAEi1E,EAAUF,OAAQU,GAAqB,EACvD,MAAML,EAAIj/E,KAAKoP,MAAMovE,EAAKc,EAAeF,GAAYH,EAAGK,EAAeD,GAAUJ,EAAGN,IAC9EO,EAAIl/E,KAAKoP,MAAMovE,EAAKc,EAAeF,GAAYF,EAAGI,EAAeD,GAAUH,EAAGP,IAC9E1kC,EAAIj6C,KAAKoP,MAAMovE,EAAKc,EAAeF,GAAYnlC,EAAGqlC,EAAeD,GAAUplC,EAAG0kC,IAC9E3kC,OAAqCjyC,IAAjCu3E,EAAeF,GAAYplC,EACjCh6C,KAAKoP,MAAMovE,EAAKc,EAAeF,GAAYplC,EAAIslC,EAAeD,GAAUrlC,EAAI2kC,SAC5E52E,EAEJ/C,SAAS47B,gBAAgBprB,MAAMgsB,YAAYs9C,OAAgB/2E,IAANiyC,EAChD,QAAOilC,KAAKC,KAAKjlC,KAAKD,EAAI,OAC1B,OAAMilC,KAAKC,KAAKjlC,MAEjBskC,EAAc9uE,IAAIqvE,IACpB95E,SAAS47B,gBAAgBprB,MAAMgsB,YAAa,GAAEs9C,QAAiB,GAAEG,KAAKC,KAAKjlC,QAKjF,QAxEoB,CAAC1Y,EAA2Bg+C,KAC9C,MAAMC,EAAwB,SAAVj+C,EACdk+C,EAAgBpB,GAAiBkB,EACjCH,EAAaI,EAAc,EAAI,EAC/BH,EAAWG,EAAc,EAAI,EAC7BE,EAAU7gF,KAAKC,MACf6gF,EAAgB36E,SAAS46E,cAAc,4BAE7C56E,SAAS47B,gBAAgBxY,UAAU6Z,OAAQ,UAAQu9C,EAAc,QAAU,SACvEnB,GACFr5E,SAAS47B,gBAAgBxY,UAAU/X,IAAI,iBAEzCrL,SAAS47B,gBAAgBxY,UAAU/X,IAAK,SAAQkxB,KAC5Co+C,GACFA,EAAc/xD,aAAa,UAAW4xD,EAAc,UAAY,QAGlEniF,YAAW,KACT2H,SAAS47B,gBAAgBxY,UAAU6Z,OAAO,mBAjCZ,KAoChCo8C,GAAgB,EAEZoB,GACF/rD,EAAAA,EAAAA,KAAQ,MACNu9B,EAAAA,EAAAA,KAAc,KACZ,MAAM9vD,EAAInB,KAAKuP,KAAK1Q,KAAKC,MAAQ4gF,GA1CrB,IA0C6C,GAIzD,OAFAP,EAAwBC,EAAYC,EAU5C,SAAoBl+E,GAClB,OAAO,GAAM,EAAIA,IAAM,IAX6B0+E,CAAW1+E,IAElDA,EAAI,QAIfg+E,EAAwBC,EAAYC,K,2EChEjC,SAASzO,EAAc9uE,GAC5B,OAAOH,OAAOG,GAAOW,QAAQ,mBAAoB,OAGnD,SAASq9E,EAAkBrwC,GAEzB,MAAyB,OADX9tC,OAAO8tC,EAAO5qC,QAAQ,IAC1BmM,QAAQ,GACThR,KAAKoP,MAAMqgC,GAGbA,EAAO5qC,QAAQ,GAAGpC,QAAQ,IAAK,KAGjC,SAASs9E,EAAqBC,GACnC,OAAIA,EAAQ,IACHA,EAGLA,EAAQ,IACF,GAAEF,EAAkBE,EAAQ,QAG9B,GAAEF,EAAkBE,EAAQ,QAG/B,SAASC,EAAgBC,GAA2B,IAAXx1C,EAAW,uDAAH,EACtD,OAAOw1C,EACJz9E,QAAQ,yCAA0C,IAClDmG,OACAjG,MAAM,OACNE,MAAM,EAAG6nC,GACTpiC,KAAK63E,IACJ,IAAKA,EAAK3/E,OAAQ,MAAO,GAEzB,MAAMiM,GADN0zE,GAAO3zE,EAAAA,EAAAA,IAAoB2zE,IACP59E,MAAMkJ,EAAAA,GAC1B,OAAIgB,GAAU0zE,EAAKjyE,WAAWzB,EAAO,IAC5BA,EAAO,GAET0zE,EAAK59E,MAAM,MAAO,GAAGV,iBAE7BE,KAAK,M,eC3CK,SAASmH,EAAuClG,EAASxC,GACtE,OAAKwC,IAASxC,GAAUwC,EAAKxC,QAAUA,EAC9BwC,EAGD,GAAEA,EAAK0G,UAAU,EAAGlJ,Q,sGCC9B,IAAIq/D,EACAvkE,EAEG,MAAM8kF,EAAuB,qHAG7BrhF,eAAe+zE,EAAU5wE,EAAamyD,GAG3C,IAFAgsB,KAEQ/kF,EAAOglF,iBACPrhF,EAAAA,EAAAA,IAZ4B,KAepC,MAAM,OAAEiN,EAAF,MAAUsiC,EAAV,OAAiBC,SAuEzB,SAA0BvsC,EAAamyD,GACrC,OAAO,IAAIj2D,SAASzB,IACbrB,EAAOilF,WACVjlF,EAAOilF,SAAW,IAAI/kF,KAGxBF,EAAOilF,SAAS/hF,IAAI0D,EAAKvF,GACzBrB,EAAO2C,YAAY,CAAEiI,GAAIhE,EAAKmyD,KAAAA,OA9EQmsB,CAAiBt+E,EAAKmyD,GAC9D,GAAK7lB,GAAUC,EAIf,OA2BF,YAAwF,IAArE,OAAEviC,EAAF,MAAUsiC,EAAV,OAAiBC,GAAoD,EAKtF,OAJKoxB,IACHA,EAAS76D,SAASiH,cAAc,WAG3B,IAAI7N,SAASzB,IAClB,MAAM0iE,EAAM,IAAIohB,UAAUv0E,EAAQsiC,EAAOC,GAEzCoxB,EAAOrxB,MAAQA,EACfqxB,EAAOpxB,OAASA,EACJoxB,EAAOjC,WAAW,MAC1B8iB,aAAarhB,EAAK,EAAG,GAEzBQ,EAAO8gB,QAAQtsB,IACb13D,EAAQ03D,MAAAA,EAAAA,OAAQtsD,KACf,YAAa,MA1CX64E,CAAU,CAAE10E,OAAAA,EAAQsiC,MAAAA,EAAOC,OAAAA,IAG7B1vC,eAAe8hF,EAAgBlzD,EAAamf,GACjD,IAAI1C,EAAAA,EAAAA,OAA+C,oBAA1B0C,EAAQ97B,OAAO,EAAG,IACzC,OAAO87B,EAGTuzC,IAEA,MAAMS,QAAgBhO,EAAUnlD,GAAK2wC,EAAAA,EAAAA,IAAcxxB,IAEnD,IAAKg0C,EACH,MAAM,IAAI/jF,MAAO,mCAAkC+vC,KAGrD,OAAO+xB,EAAAA,EAAAA,IAAciiB,GAGvB,SAAST,IACF/kF,IACHA,EAAS,IAAIU,OAAO,IAAIC,IAAI,mBAC5BX,EAAOglF,WAAY,EACnBhlF,EAAO81E,UAAY2P,GAuBvB,SAASA,EAAqBp9E,GAC5B,MAAM,GAAEuC,GAAOvC,EAAExH,KACjB,OAAQwH,EAAExH,KAAKC,MACb,IAAK,cACHd,EAAOglF,WAAY,EACnB,MAGF,IAAK,SACH,GAAIhlF,EAAOilF,SAAS9wE,IAAIvJ,GAAK,CAC3B,MAAMvJ,EAAUrB,EAAOilF,SAAShkF,IAAI2J,GAEpC5K,EAAOilF,SAAS5hF,OAAOuH,GACvBvJ,EAAQgH,EAAExH,U,qFC/ElB,MAAM6kF,EAAe,CACnB,OACA,eACA14E,KAAK9F,GAAY,KAAIA,iBACjBy+E,EAAmB,GAAEjmE,EAAAA,OACrBkmE,EAAc,YAGdC,EAAQ,IACLnhF,KAAKC,MAAM+0B,OAAO,IAAIn2B,MAAU,KAWzC,IAAIuiF,EAEG,MAAMppD,EAAgBqpD,IAC3B,MAAMC,EAAYH,KAEZ,YAAEI,EAAF,GAAeC,GAAOxhD,KAAKC,MAAMJ,aAAaC,QAAQohD,IAAgB,MAE5E,OAAIK,IAAgBF,GAAUG,EArBR,OAqBgCF,EAC7CljF,QAAQ0+B,IAAIkkD,EAAa14E,KAAKpG,GAC5B,IAAI9D,SAAc,CAACzB,EAASD,KACjC,MAAM+kF,EAASz8E,SAASiH,cAAc,UAEhCy1E,EAAgB,IAAMl8E,QAAQR,SAAS+kB,KAAK0C,YAAYg1D,IAE9DA,EAAO50E,IAAM3K,EAAM,IAAIy/E,gBAAgB,CACrCN,OAAQrsD,OAAOqsD,GAAQ5/C,WACvBy2C,QAAS+I,IAGXj8E,SAAS+kB,KAAKyC,YAAYi1D,GAE1BA,EAAOhlB,OAAS,KA7BN4kB,CAAAA,IAChB,MAAMG,EAAKL,IACXthD,aAAaK,QAAQghD,EAAalhD,KAAKG,UAAU,CAC/CohD,YAAaF,EACbG,GAAAA,MA0BMI,CAASP,GACTK,IACIN,IACF5+D,aAAa4+D,GACbA,OAAcr5E,GAEhB65B,IACAjlC,KAGF8kF,EAAO/kB,QAAU,KACfglB,IACAhlF,WAKC0B,QAAQzB,WAIZ,SAASilC,IACd,GAAI/lC,EAAAA,GACF,OAGF,QAAoBkM,IAAhBq5E,EAA2B,OAC/B,MAAME,EAAYH,KAEZ,GAAEK,GAAOxhD,KAAKC,MAAMJ,aAAaC,QAAQohD,IAAgB,MAEzD/+D,EAnEgB,OAmEam/D,EAAYE,GAE/CJ,EAAc/jF,YAAW,KACvB,MAAM,UAAEohC,IAAc5I,EAAAA,EAAAA,MAEhBwrD,EAAuB,4BAAd5iD,IAA2C4+C,EAAAA,EAAAA,KAAiB,GAC3ErlD,EAAaqpD,KACZrhF,KAAKsP,IAAI,EAAa,IAAV6S,IAGV,SAAS0/D,IACdhiD,aAAa69C,WAAWwD,K,0EC3E1B,MAAMY,EAAehzB,EAAAA,IAA2BizB,IAE1CC,EAAgB7kF,OAAOgf,YAC7B,IAAI8lE,EAAoBC,IACpBC,GAAoB,EAUxB,MAAMC,GAAethB,EAAAA,EAAAA,KAAS,KAC5BmhB,EAAoBC,KAEfC,KAiCEF,EAAkBzzC,OAASxwB,EAAAA,IAChCikE,EAAkBzzC,OAASvwB,EAAAA,IACxBgkE,EAAkBxzC,QAAUvwB,EAAAA,MAlCV4wC,EAAAA,IACjBA,EAAAA,IAA2BgzB,IAAiBC,MAEhD5kF,OAAOgC,SAASC,WAEjB,KAAK,GASD,SAAS8iF,IACd,IAAIzzC,EAEFA,EADEl7B,EAAAA,GACOpW,OAAOklF,eAAe5zC,OAAStxC,OAAOklF,eAAeC,QAErDnlF,OAAOgf,YAElB,MAAMomE,EAAc,IAAT9zC,EAIX,OAFAzpC,SAAS47B,gBAAgBprB,MAAMgsB,YAAY,OAAS,GAAE+gD,OAE/C,CACL/zC,MAAOrxC,OAAO2oB,WACd2oB,OAAQtxC,OAAOgf,aAWnB,SAAS4lE,IACP,OAAIxuE,EAAAA,GACKpW,OAAOgkC,WAAW,4BAA4B07B,QAOhD1/D,OAAOgkC,WAAW,0EAA0E07B,QAxCrG1/D,OAAOjB,iBAAiB,oBAAqBkmF,GACzC7uE,EAAAA,GACFpW,OAAOklF,eAAenmF,iBAAiB,SAAUkmF,GAEjDjlF,OAAOjB,iBAAiB,SAAUkmF,GAuCpC,MAOA,EAPmB,CACjB7lF,IAAK,IAAM0lF,EACXO,qBAAsB,IAAMR,EAAgBC,EAAkBxzC,OAC9Dg0C,eAjEF,WACEN,GAAoB,GAiEpBO,cA9DF,WACEP,GAAoB,K,2RCvBlBQ,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB96E,IAAjB+6E,EACH,OAAOA,EAAaC,QAGrB,IAAI/7D,EAAS27D,EAAyBE,GAAY,CAGjDE,QAAS,IAOV,OAHAC,EAAoBH,GAAUr7E,KAAKwf,EAAO+7D,QAAS/7D,EAAQA,EAAO+7D,QAASH,GAGpE57D,EAAO+7D,QAIfH,EAAoBK,EAAID,ECxBxBJ,EAAoBniF,EAAKumB,IACxB,IAAIk8D,EAASl8D,GAAUA,EAAOm8D,WAC7B,IAAOn8D,EAAiB,QACxB,IAAM,EAEP,OADA47D,EAAoBx7D,EAAE87D,EAAQ,CAAElpC,EAAGkpC,IAC5BA,G7HNJjoF,EAAWoD,OAAO+kF,eAAkBC,GAAShlF,OAAO+kF,eAAeC,GAASA,GAASA,EAAa,UAQtGT,EAAoBzhF,EAAI,SAASW,EAAO0qE,GAEvC,GADU,EAAPA,IAAU1qE,EAAQ0+D,KAAK1+D,IAChB,EAAP0qE,EAAU,OAAO1qE,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAP0qE,GAAa1qE,EAAMqhF,WAAY,OAAOrhF,EAC1C,GAAW,GAAP0qE,GAAoC,mBAAf1qE,EAAM5C,KAAqB,OAAO4C,EAE5D,IAAIwhF,EAAKjlF,OAAOklF,OAAO,MACvBX,EAAoB3D,EAAEqE,GACtB,IAAIE,EAAM,GACVxoF,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,IAAKA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAIiU,EAAiB,EAAPs9D,GAAY1qE,EAAyB,iBAAXoN,KAAyBlU,EAAeoK,QAAQ8J,GAAUA,EAAUjU,EAASiU,GACxH7Q,OAAOolF,oBAAoBv0E,GAASrF,SAAS8jB,GAAS61D,EAAI71D,GAAO,IAAO7rB,EAAM6rB,KAI/E,OAFA61D,EAAa,QAAI,IAAM,EACvBZ,EAAoBx7D,EAAEk8D,EAAIE,GACnBF,G8HvBRV,EAAoBx7D,EAAI,CAAC27D,EAASW,KACjC,IAAI,IAAI/1D,KAAO+1D,EACXd,EAAoBe,EAAED,EAAY/1D,KAASi1D,EAAoBe,EAAEZ,EAASp1D,IAC5EtvB,OAAOulF,eAAeb,EAASp1D,EAAK,CAAEk2D,YAAY,EAAMtnF,IAAKmnF,EAAW/1D,MCJ3Ei1D,EAAoB/vB,EAAI,GAGxB+vB,EAAoBj/E,EAAKmgF,GACjB1lF,QAAQ0+B,IAAIz+B,OAAO6rB,KAAK04D,EAAoB/vB,GAAGtnD,QAAO,CAACw4E,EAAUp2D,KACvEi1D,EAAoB/vB,EAAEllC,GAAKm2D,EAASC,GAC7BA,IACL,KCNJnB,EAAoBoB,EAAKF,GAEZA,EAAU,IAAM,CAAC,GAAK,uBAAuB,GAAK,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,MCF/kBlB,EAAoBqB,SAAYH,GAEnBA,EAAU,IAAM,CAAC,GAAK,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,OCHvNlB,EAAoB1D,EAAI,WACvB,GAA0B,iBAAfgF,WAAyB,OAAOA,WAC3C,IACC,OAAO1jB,MAAQ,IAAI2jB,SAAS,cAAb,GACd,MAAOxgF,GACR,GAAsB,iBAAXxG,OAAqB,OAAOA,QALjB,GCAxBylF,EAAoBe,EAAI,CAACN,EAAKjwB,IAAU/0D,OAAOu6C,UAAU+uB,eAAengE,KAAK67E,EAAKjwB,GlIA9El4D,EAAa,GACbC,EAAoB,cAExBynF,EAAoB19D,EAAI,CAAChjB,EAAKkiF,EAAMz2D,EAAKm2D,KACxC,GAAG5oF,EAAWgH,GAAQhH,EAAWgH,GAAKV,KAAK4iF,OAA3C,CACA,IAAI3C,EAAQ4C,EACZ,QAAWt8E,IAAR4lB,EAEF,IADA,IAAI22D,EAAUt/E,SAASu/E,qBAAqB,UACpC5jF,EAAI,EAAGA,EAAI2jF,EAAQ9jF,OAAQG,IAAK,CACvC,IAAIiC,EAAI0hF,EAAQ3jF,GAChB,GAAGiC,EAAEmtB,aAAa,QAAU7tB,GAAOU,EAAEmtB,aAAa,iBAAmB50B,EAAoBwyB,EAAK,CAAE8zD,EAAS7+E,EAAG,OAG1G6+E,IACH4C,GAAa,GACb5C,EAASz8E,SAASiH,cAAc,WAEzBu4E,QAAU,QACjB/C,EAAOt/D,QAAU,IACbygE,EAAoB6B,IACvBhD,EAAO7zD,aAAa,QAASg1D,EAAoB6B,IAElDhD,EAAO7zD,aAAa,eAAgBzyB,EAAoBwyB,GACxD8zD,EAAO50E,IAAM3K,GAEdhH,EAAWgH,GAAO,CAACkiF,GACnB,IAAIM,EAAmB,CAAChgE,EAAMzO,KAE7BwrE,EAAO/kB,QAAU+kB,EAAOhlB,OAAS,KACjCj6C,aAAaL,GACb,IAAIwiE,EAAUzpF,EAAWgH,GAIzB,UAHOhH,EAAWgH,GAClBu/E,EAAOz3D,YAAcy3D,EAAOz3D,WAAWyC,YAAYg1D,GACnDkD,GAAWA,EAAQ96E,SAASkwE,GAAQA,EAAG9jE,KACpCyO,EAAM,OAAOA,EAAKzO,IAGlBkM,EAAU9kB,WAAWqnF,EAAiBE,KAAK,UAAM78E,EAAW,CAAE3L,KAAM,UAAWkI,OAAQm9E,IAAW,MACtGA,EAAO/kB,QAAUgoB,EAAiBE,KAAK,KAAMnD,EAAO/kB,SACpD+kB,EAAOhlB,OAASioB,EAAiBE,KAAK,KAAMnD,EAAOhlB,QACnD4nB,GAAcr/E,SAAS6/E,KAAKr4D,YAAYi1D,KmIvCzCmB,EAAoB3D,EAAK8D,IACH,oBAAX5yD,QAA0BA,OAAO20D,aAC1CzmF,OAAOulF,eAAeb,EAAS5yD,OAAO20D,YAAa,CAAEhjF,MAAO,WAE7DzD,OAAOulF,eAAeb,EAAS,aAAc,CAAEjhF,OAAO,K,MCLvD,IAAIijF,EACAnC,EAAoB1D,EAAE8F,gBAAeD,EAAYnC,EAAoB1D,EAAE//E,SAAW,IACtF,IAAI6F,EAAW49E,EAAoB1D,EAAEl6E,SACrC,IAAK+/E,GAAa//E,IACbA,EAASigF,gBACZF,EAAY//E,EAASigF,cAAcp4E,MAC/Bk4E,GAAW,CACf,IAAIT,EAAUt/E,EAASu/E,qBAAqB,UACzCD,EAAQ9jF,SAAQukF,EAAYT,EAAQA,EAAQ9jF,OAAS,GAAGqM,KAK7D,IAAKk4E,EAAW,MAAM,IAAIhoF,MAAM,yDAChCgoF,EAAYA,EAAUtiF,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFmgF,EAAoB/4D,EAAIk7D,G,GnI0BpB3pF,EAAkB0oF,GACd,IAAI1lF,SAAQ,CAACzB,EAASD,KAC5B,IAAIyF,EAAOygF,EAAoBqB,SAASH,GACpCoB,EAAWtC,EAAoB/4D,EAAI1nB,EACvC,GAlBmB,EAACA,EAAM+iF,KAE3B,IADA,IAAIC,EAAmBngF,SAASu/E,qBAAqB,QAC7C5jF,EAAI,EAAGA,EAAIwkF,EAAiB3kF,OAAQG,IAAK,CAChD,IACIykF,GADA33D,EAAM03D,EAAiBxkF,IACRovB,aAAa,cAAgBtC,EAAIsC,aAAa,QACjE,GAAe,eAAZtC,EAAIlpB,MAAyB6gF,IAAajjF,GAAQijF,IAAaF,GAAW,OAAOz3D,EAErF,IAAI43D,EAAoBrgF,SAASu/E,qBAAqB,SACtD,IAAQ5jF,EAAI,EAAGA,EAAI0kF,EAAkB7kF,OAAQG,IAAK,CACjD,IAAI8sB,EAEJ,IADI23D,GADA33D,EAAM43D,EAAkB1kF,IACTovB,aAAa,gBAChB5tB,GAAQijF,IAAaF,EAAU,OAAOz3D,IAOnD63D,CAAenjF,EAAM+iF,GAAW,OAAOvoF,IA7CrB,EAACmnF,EAASoB,EAAUvoF,EAASD,KACnD,IAAI6oF,EAAUvgF,SAASiH,cAAc,QAErCs5E,EAAQhhF,IAAM,aACdghF,EAAQnpF,KAAO,WAiBfmpF,EAAQ7oB,QAAU6oB,EAAQ9oB,OAhBJxmD,IAGrB,GADAsvE,EAAQ7oB,QAAU6oB,EAAQ9oB,OAAS,KAChB,SAAfxmD,EAAM7Z,KACTO,QACM,CACN,IAAI6oF,EAAYvvE,IAAyB,SAAfA,EAAM7Z,KAAkB,UAAY6Z,EAAM7Z,MAChEqpF,EAAWxvE,GAASA,EAAM3R,QAAU2R,EAAM3R,OAAOnC,MAAQ+iF,EACzDrnF,EAAM,IAAId,MAAM,qBAAuB+mF,EAAU,cAAgB2B,EAAW,KAChF5nF,EAAIsK,KAAO,wBACXtK,EAAIzB,KAAOopF,EACX3nF,EAAIk2D,QAAU0xB,EACdF,EAAQv7D,WAAWyC,YAAY84D,GAC/B7oF,EAAOmB,KAIT0nF,EAAQpjF,KAAO+iF,EAEflgF,SAAS6/E,KAAKr4D,YAAY+4D,IAsBzBG,CAAiB5B,EAASoB,EAAUvoF,EAASD,MAI3CrB,EAAqB,CACxB,IAAK,GAGNunF,EAAoB/vB,EAAE8yB,QAAU,CAAC7B,EAASC,KAEtC1oF,EAAmByoF,GAAUC,EAASviF,KAAKnG,EAAmByoF,IACzB,IAAhCzoF,EAAmByoF,IAFX,CAAC,GAAK,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,GAEPA,IACtDC,EAASviF,KAAKnG,EAAmByoF,GAAW1oF,EAAe0oF,GAAS5kF,MAAK,KACxE7D,EAAmByoF,GAAW,KAC3BngF,IAEH,aADOtI,EAAmByoF,GACpBngF,O,MoI9DTi/E,EAAoB3oC,EAAIj1C,SAAS4gF,SAAWnyB,KAAKt0D,SAASgD,KAK1D,IAAI0jF,EAAkB,CACrB,IAAK,GAGNjD,EAAoB/vB,EAAE/xD,EAAI,CAACgjF,EAASC,KAElC,IAAI+B,EAAqBlD,EAAoBe,EAAEkC,EAAiB/B,GAAW+B,EAAgB/B,QAAW/7E,EACtG,GAA0B,IAAvB+9E,EAGF,GAAGA,EACF/B,EAASviF,KAAKskF,EAAmB,QAC3B,CAGL,IAAInoF,EAAU,IAAIS,SAAQ,CAACzB,EAASD,IAAYopF,EAAqBD,EAAgB/B,GAAW,CAACnnF,EAASD,KAC1GqnF,EAASviF,KAAKskF,EAAmB,GAAKnoF,GAGtC,IAAIuE,EAAM0gF,EAAoB/4D,EAAI+4D,EAAoBoB,EAAEF,GAEpDrnF,EAAQ,IAAIM,MAgBhB6lF,EAAoB19D,EAAEhjB,GAfF+T,IACnB,GAAG2sE,EAAoBe,EAAEkC,EAAiB/B,KAEf,KAD1BgC,EAAqBD,EAAgB/B,MACR+B,EAAgB/B,QAAW/7E,GACrD+9E,GAAoB,CACtB,IAAIN,EAAYvvE,IAAyB,SAAfA,EAAM7Z,KAAkB,UAAY6Z,EAAM7Z,MAChE2pF,EAAU9vE,GAASA,EAAM3R,QAAU2R,EAAM3R,OAAOuI,IACpDpQ,EAAMO,QAAU,iBAAmB8mF,EAAU,cAAgB0B,EAAY,KAAOO,EAAU,IAC1FtpF,EAAMmB,KAAO,iBACbnB,EAAML,KAAOopF,EACb/oF,EAAMs3D,QAAUgyB,EAChBD,EAAmB,GAAGrpF,MAIgB,SAAWqnF,EAASA,KAiBlE,IAAIkC,EAAuB,CAACC,EAA4B9pF,KACvD,IAGI0mF,EAAUiB,GAHToC,EAAUC,EAAaC,GAAWjqF,EAGhBwE,EAAI,EAC3B,GAAGulF,EAASv7E,MAAMzE,GAAgC,IAAxB2/E,EAAgB3/E,KAAa,CACtD,IAAI28E,KAAYsD,EACZvD,EAAoBe,EAAEwC,EAAatD,KACrCD,EAAoBK,EAAEJ,GAAYsD,EAAYtD,IAG7CuD,GAAsBA,EAAQxD,GAGlC,IADGqD,GAA4BA,EAA2B9pF,GACrDwE,EAAIulF,EAAS1lF,OAAQG,IACzBmjF,EAAUoC,EAASvlF,GAChBiiF,EAAoBe,EAAEkC,EAAiB/B,IAAY+B,EAAgB/B,IACrE+B,EAAgB/B,GAAS,KAE1B+B,EAAgB/B,GAAW,GAKzBuC,EAAqB5yB,KAA6B,uBAAIA,KAA6B,wBAAK,GAC5F4yB,EAAmBx8E,QAAQm8E,EAAqBpB,KAAK,KAAM,IAC3DyB,EAAmB7kF,KAAOwkF,EAAqBpB,KAAK,KAAMyB,EAAmB7kF,KAAKojF,KAAKyB,K,6DC3EvF,SAASC,EAAoB3iF,GAC3B,MAAMyD,EAAuBzD,EAAExH,KAK/B,GAJI8e,EAAAA,IAEFnf,QAAQC,IAAI,2BAA4BqL,IAErCA,EAAOhL,KAAM,OAClB,MAAMk5E,GAAWhyE,EAAAA,EAAAA,MACjB,OAAQ8D,EAAOhL,MACb,IAAK,eACCk5E,EAASlvE,cACXkvE,EAASlvE,aAAagB,EAAOjJ,SAE/B,MACF,IAAK,yBACHg3E,EAAAA,EAAAA,IAAyB/tE,EAAOjJ,QAAQ+H,KAK9C,SAASjJ,IACP05B,UAAU+8C,cAAc5wD,oBAAoB,UAAWwjE,GACvD3vD,UAAU+8C,cAAcx3E,iBAAiB,UAAWoqF,IAEpDxO,EAAAA,EAAAA,MAGEta,EAAAA,KACFrgE,OAAOjB,iBAAiB,QAAQ6C,UAC9B,IACE,IAAK43B,UAAU+8C,cAAcE,WAAY,CACvC,MAAM2S,QAAsB5vD,UAAU+8C,cAAc8S,mBAChDD,EAAc/lF,SACZ3E,EAAAA,IAEFC,QAAQC,IAAI,+DAERqC,QAAQ0+B,IAAIypD,EAAcj+E,KAAI22E,GAAKA,EAAEwH,uBAIzC9vD,UAAU+8C,cAAcgT,SAAS,IAAIzqF,IAAI,mBAE3CJ,EAAAA,IAEFC,QAAQC,IAAI,uCAGR46B,UAAU+8C,cAAc+B,MAE1B9+C,UAAU+8C,cAAcE,YACtB/3E,EAAAA,IAEFC,QAAQC,IAAI,4BAEdkB,MAEIpB,EAAAA,IAEFC,QAAQW,MAAM,oCAGX8W,EAAAA,IAAWsuB,EAAAA,KACdv+B,EAAAA,EAAAA,MAAcm9B,WAAW,CAAEtkC,KAAM,CAAEa,QAAS,0BAA2B2pF,aAAa,MAGxF,MAAO9oF,GACHhC,EAAAA,IAEFC,QAAQW,MAAM,2CAA4CoB,OAIhEV,OAAOjB,iBAAiB,SAAS6C,gBACzB43B,UAAU+8C,cAAc+B,MAC9Bx4E,Q,cC1EG,MAAM2pF,EAA6B,CACxCC,mBAAmB,EACnB13B,iBAAiB,EACjBF,uB,QAAwBC,GAAAA,OACxBltB,aAAc,EACdpG,iBAAkB,EAElB0D,gBAAgB,EAChBxB,YAAa,CACXgpD,WAAY,GACZC,QAAS,IAGX7rD,QAAS,CACPC,IAAK,GACLE,WAAY,GAGdtC,MAAO,CACLC,KAAM,GACNwe,aAAc,IAGhBte,MAAO,CACLgZ,QAAS,GACT2B,cAAe,GACfF,iBAAkB,GAClBtY,WAAY,GACZrC,KAAM,IAGRgV,SAAU,CACR0L,SAAU,GACVyC,aAAc,GACd+D,kBAAmB,IAGrB8mC,WAAY,CACVhuD,KAAM,IAGR2mB,kBAAmB,CACjBjG,SAAU,IAGZmJ,YAAa,CACX7pB,KAAM,GACNiuD,iBAAkB,GAGpBz9B,YAAa,CACXC,iBAAkB,IAGpBy9B,aAAc,CAAC,WAAY,gBAAiB,iBAAkB,QAAS,UAEvE1yC,SAAU,CACRC,SAAU,GACVM,MAAO,GACPoyC,OAAQ,CACN3yC,SAAU,IAEZqP,SAAU,CACRrP,SAAU,IAEZ4yC,SAAU,CACR5yC,SAAU,IAEZ6yC,SAAU,CACR3yC,OAAQ,IAEVvxB,OAAQ,GACR8yB,SAAU,IAGZqxC,cAAe,GAEfjyC,KAAM,CACJkyC,MAAO,GACPpkE,OAAQ,IAGVqkE,WAAY,CACV9yE,WAAW,EACX+yE,WAAY,IAGd5vC,aAAc,GAEdZ,WAAY,GAEZiC,gBAAiB,CACfC,gBAAiB,IAGnBM,iBAAkB,CAChBC,SAAU,IAGZS,WAAY,CACVT,SAAU,IAGZguC,SAAU,GAEVC,cAAe,GAEfn5B,YAAa,GAEbo5B,YAAa,CACXroB,OAAQtiD,EAAAA,GACR4qE,aAAc3qE,EAAAA,GACdwoB,SAAS,GAGX6kB,gBAAiB,GAEjBoE,YAAa,GAEb7T,QAAS,GAETgtC,cAAe,GAEfC,QAAS,GAETtsD,eAAgB,GAEhBnB,SAAU,CACR+B,MAAO,CACLkF,MAAO,QACP8tB,sBAAsB,EACtB/tB,gBAAiB/tB,EAAAA,GACbgK,EAAAA,GACCukB,EAAAA,GAAYtkB,EAAAA,GAAqCF,EAAAA,GACtD0jB,eAAgB3jB,EAAAA,GAChB2qE,oBAAqB,QACrBr8B,8BAA8B,EAC9BC,gCAAgC,EAChCC,0BAA0B,EAC1BC,4BAA4B,EAC5BC,8BAA8B,EAC9BC,gCAAgC,EAChCC,0BAA0B,EAC1BC,4BAA4B,EAC5BC,6BAA6B,EAC7BC,+BAA+B,EAC/BC,yBAAyB,EACzBC,2BAA2B,EAC3B27B,sBAAuB,GACvB7rD,qBAAqB,EACrBD,sBAAsB,EACtB44C,wBAAyB,EACzB/nB,iBAAiB,EACjBD,mBAAmB,EACnBm7B,uBAAuB,EACvB/6B,oBAAoB,EACpBtvB,SAAU,KACVE,WAAY,MACZG,0BAA0B,EAC1BiqD,6BAA6B,GAE/B7tC,OAAQ,CACN8tC,MAAO,CACLC,WAAW,EACXC,aAAcnnE,EAAAA,GAEhBonE,KAAM,CACJF,WAAW,EACXC,aAAcpnE,EAAAA,KAGlB6b,QAAS,GACT0I,iBAAkB,IAGpBkV,cAAe,GACf6tC,gBAAiB,GAEjBC,2BAA2B,EAE3Bp/B,gBAAiB,CACf3P,SAAU,IAGZsQ,qBAAsB,I,6FChKxB,MAEM0+B,GAAuB5nB,EAAAA,EAAAA,KAAS,KAAMC,EAAAA,EAAAA,IAAO4nB,IAF3B,KAE0D,GAElF,IACIC,EADAC,GAAY,EA2ChB,SAASC,IACPD,GAAY,EACZD,GAA8BxN,EAAAA,EAAAA,IAAeuN,GAAa,GAC1DxrF,OAAOjB,iBAAiB,OAAQysF,IAChC1yD,EAAAA,EAAAA,IAAYyyD,GAGd,SAASK,IACPF,GAAY,GACZ3yD,EAAAA,EAAAA,IAAewyD,GACfvrF,OAAO2lB,oBAAoB,OAAQ6lE,GAC/BC,GACFA,IAyHJ,SAASD,IACP,IAAKE,IAAaxmE,EAAAA,EAAAA,MAChB,OAGF,MAAMzO,GAASiiB,EAAAA,EAAAA,MAEf,GAAIjiB,EAAO+qB,aACT,OAGF,MAAMqqD,EAA6B,IAC9BpC,MACAlvC,EAAAA,EAAAA,IAAK9jC,EAAQ,CACd,YACA,kBACA,iBACA,qBACA,gBACA,cACA,WACA,gBACA,eACA,OACA,4BACA,kBACA,yBAEFg0E,YAAa,CACXroB,OAAQ3rD,EAAOg0E,YAAYroB,OAC3BsoB,aAAcj0E,EAAOg0E,YAAYC,aACjCniD,QAAS9xB,EAAOg0E,YAAYliD,SAE9BypB,gBAAiB85B,EAAmBr1E,GACpCmlB,MAAOmwD,EAAYt1E,GACnBslB,MAAOiwD,EAAYv1E,GACnBo6B,SAAUo7C,EAAex1E,GACzBikC,aAAc,CACZwxC,qBAAsBz1E,EAAOikC,aAAawxC,sBAE5C/uD,SAAUgvD,EAAe11E,GACzBivC,YAAa0mC,EAAkB31E,GAC/BozE,WAAYwC,EAAiB51E,GAC7Bi6C,mBAAoB47B,EAAyB71E,IAGzC6gD,EAAOz0B,KAAKG,UAAU6oD,GAC5BnpD,aAAaK,QAAQ3kB,EAAAA,GAAwBk5C,GAG/C,SAASw0B,EAAmBr1E,GAC1B,OAAOzW,OAAO2oB,WAAahI,EAAAA,IACvBlK,EAAOu7C,gBAIb,SAAS+5B,EAAYt1E,GAA2C,cAC9D,MAAQmlB,OAAO,KAAEC,EAAF,aAAQwe,GAAjB,cAAiC3f,GAAkBjkB,GACjDtN,OAAQojF,IAAkBnrC,EAAAA,EAAAA,IAAyB3qC,IAAW,GAChE+1E,EAAc,WAAG17B,EAAAA,EAAAA,IAAmBr6C,UAAtB,aAAG,EAA4BtL,KAAI,QAAC,GAAEpC,GAAH,SAAYA,KAE7D0jF,GAAY5zC,EAAAA,EAAAA,IAAO,IACpBne,EAAgB,CAACA,GAAiB,MAClC6xD,IAAiBpwD,EAAAA,EAAAA,IAASowD,GAAiB,CAACA,GAAiB,MAC7DC,GAAkB,MAClB/1E,EAAO8zE,SAASp2C,SAAW,OAC3B,WAAA4vB,EAAAA,EAAAA,IAAc7gD,EAAAA,WAAd,eAA8B7X,OAAO8wB,EAAAA,MAAa,OAClD,WAAA4nC,EAAAA,EAAAA,IAAc5gD,EAAAA,WAAd,eAAmC9X,OAAO8wB,EAAAA,MAAa,OACvD,UAAA1lB,EAAO2iC,mBAAP,eAAoBjF,UAAW,OAC/B,UAAA19B,EAAOikC,aAAawxC,4BAApB,eAA0C7gF,OAAO8wB,EAAAA,MAAa,MAC9Dj7B,OAAO6rB,KAAK8O,KACdn2B,MAAM,EAAG2Y,EAAAA,IAEZ,MAAO,CACLwd,MAAM0e,EAAAA,EAAAA,IAAK1e,EAAM4wD,GACjBpyC,cAAcE,EAAAA,EAAAA,IAAKF,EAAcoyC,IAIrC,SAAST,EAAYv1E,GACnB,MAAQslB,OAAO,KAAEF,GAAX,cAAmBnB,GAAkBjkB,EACrCi2E,GAAcplC,EAAAA,EAAAA,IAAkB7wC,GAChCg2E,GAAY5zC,EAAAA,EAAAA,IAAO,IACpBne,EAAgB,CAACA,GAAiB,MAClCgyD,EAAc,CAACA,EAAY3jF,IAAM,OACjCg7D,EAAAA,EAAAA,IAAc7gD,EAAAA,KAAkB,OAChC6gD,EAAAA,EAAAA,IAAc5gD,EAAAA,KAAuB,MACrC1M,EAAOikC,aAAawxC,sBAAwB,MAC5ChrF,OAAO6rB,KAAK8O,KACdn2B,MAAM,EAAG4Y,EAAAA,IAEZ,MAAO,IACF7H,EAAOslB,MACV2a,cAAe,GACf7a,MAAM0e,EAAAA,EAAAA,IAAK9jC,EAAOslB,MAAMF,KAAM4wD,IAIlC,SAASR,EAAex1E,GAA8C,MACpE,MAAM,cAAEikB,GAAkBjkB,EACpB8lC,EAAgD,IAC9CpzC,OAAQojF,IAAkBnrC,EAAAA,EAAAA,IAAyB3qC,IAAW,GA0BtE,MAzBsB,IACjB81E,EAAgB,CAACA,GAAiB,MAClC7xD,EAAgB,CAACA,GAAiB,OAClC,WAAAqpC,EAAAA,EAAAA,IAAc7gD,EAAAA,WAAd,eAA8Bxd,MAAM,EAAG6Y,EAAAA,MAAiD,IAG/E7R,SAASvD,IACrB,MAAM4I,EAAU0E,EAAOo6B,SAAS0L,SAASpzC,GACzC,IAAK4I,EACH,OAGF,MAAM46E,EAAa56E,EAAQqtC,YAAYh9C,EAAAA,IAClCuqF,GAAeA,EAAW9rC,cAI/BtE,EAASpzC,GAAU,CACjB0yB,MAAM0e,EAAAA,EAAAA,IAAKxoC,EAAQ8pB,KAAM8wD,EAAW9rC,aACpCzB,YAAa,CACX,CAACh9C,EAAAA,IAAiBuqF,QAKjB,CACLpwC,SAAAA,EACAyC,aAAc,GACd+D,kBAAmB,IAIvB,SAASopC,EAAe11E,GACtB,MAAM,MAAEyoB,EAAF,OAASie,GAAW1mC,EAAO0mB,SAEjC,MAAO,CACL+B,MAAAA,EACAie,OAAAA,EACAvd,QAAS,GACT0I,iBAAkB,IAItB,SAAS8jD,EAAkB31E,GACzB,MAAO,IACFA,EAAOivC,YACVokC,iBAAkB,GAItB,SAASuC,EAAiB51E,GACxB,MAAO,IACFA,EAAOozE,WACVhuD,KAAM,GACN+wD,uBAAmBhiF,EACnBiiF,4BAAwBjiF,EACxBkiF,2BAAuBliF,GAI3B,SAAS0hF,EAAyB71E,GAAwD,MACxF,iBAAOA,EAAOi6C,0BAAd,aAAO,EACHvlD,KAAK22E,IAAMvnC,EAAAA,EAAAA,IAAKunC,EAAG,CAAC,WAAY,aAAc,QAAS,iBAhVvD3jE,EAAAA,MAIJwa,EAAAA,EAAAA,IAAW,eAAe,KACpB+yD,GAIJC,QAGFhzD,EAAAA,EAAAA,IAAW,SAAS,KAClB+J,aAAa69C,WAAWniE,EAAAA,IAEnBstE,GAILE,SCtDJjzD,EAAAA,EAAAA,IAAW,QAAQ,KACjB,MAAMlU,GAAU8rD,EAAAA,EAAAA,IAAUkZ,GAC1B,ODwDK,SAAmBsD,GACxB,IAAI5uE,EAAAA,GAIJ,OAAI+hE,EAAAA,EAAAA,KAAiB,IACnByL,IA0BJ,SAAmBoB,GACbruF,EAAAA,IAEFC,QAAQquF,KAAK,2BAGf,MAAM11B,EAAO50B,aAAaC,QAAQvkB,EAAAA,IAC5B+zD,EAAS7a,EAAOz0B,KAAKC,MAAMw0B,QAAuB1sD,EAEpDlM,EAAAA,IAEFC,QAAQsuF,QAAQ,2BAGd9a,GAoBN,SAAsBA,EAAqB4a,GAEzC,GAAI,wCAAyC5a,EAAOh1C,SAAS+B,MAAO,CAClE,MAAM,oCACJguD,EADI,sCAEJC,EAFI,gCAGJC,EAHI,kCAIJC,EAJI,qBAKJC,EALI,mBAMJC,KACGpqB,GACDgP,EAAOh1C,SAAS+B,MAEpBizC,EAAOh1C,SAAS+B,MAAQ,IACnBikC,EACH3U,6BAA8B0+B,EAC9Bt+B,6BAA8Bs+B,EAC9Bz+B,+BAAgC0+B,EAChCt+B,+BAAgCs+B,EAChCz+B,yBAA0B0+B,EAC1Bt+B,yBAA0Bs+B,EAC1Bz+B,2BAA4B0+B,EAC5Bt+B,2BAA4Bs+B,EAC5Bz9B,kBAAmB09B,EACnBz9B,gBAAiB09B,GAKrBpb,EAAOh1C,SAAS+B,MAAQ,IACnB6tD,EAAa5vD,SAAS+B,SACtBizC,EAAOh1C,SAAS+B,OAGrBizC,EAAOh1C,SAASggB,OAAS,IACpB4vC,EAAa5vD,SAASggB,UACtBg1B,EAAOh1C,SAASggB,QAGrBg1B,EAAOzsB,YAAc,IAChBqnC,EAAarnC,eACbysB,EAAOzsB,aAGPysB,EAAO96B,SAAS4yC,WACnB9X,EAAO96B,SAAS4yC,SAAW8C,EAAa11C,SAAS4yC,UAG9C9X,EAAOjmB,kBACVimB,EAAOjmB,gBAAkB,CACvB3P,SAAU,KAIT41B,EAAOtlB,uBACVslB,EAAOtlB,qBAAuB,SAGEjiD,IAA9BunE,EAAOsY,YAAYroB,SACrB+P,EAAOsY,YAAYroB,OAAStiD,EAAAA,SAGUlV,IAApCunE,EAAOsY,YAAYC,eACrBvY,EAAOsY,YAAYC,aAAe3qE,EAAAA,IAG/BoyD,EAAO0X,aACV1X,EAAO0X,WAAakD,EAAalD,YAG9B1X,EAAOv2C,MAAMye,eAChB83B,EAAOv2C,MAAMye,aAAe,IAGzB83B,EAAOthC,SAASkS,oBACnBovB,EAAOthC,SAASkS,kBAAoB,IAGjCovB,EAAOkZ,kBACVlZ,EAAOkZ,gBAAkB,IAlGzBmC,CAAarb,EAAQ4a,GAGvB,MAAM/yC,EAAW,IACZ+yC,KACA5a,GAGCsb,EAAqB97B,EAAAA,QAAgD/mD,GAAtB8xE,EAAAA,EAAAA,KAErD,MAAO,IACF1iC,EACHnJ,SAAU,IACLmJ,EAASnJ,SACZmO,aAAcyuC,EAAoB,CAACA,GAAqB,KArDnDC,CAAUX,SAEjBnB,IClEK+B,CAAUlpE,IAAYA,K,wBCV/B,MAAMmpE,EAAc,gBAGdC,EAASrpF,OAAO9C,KAAKC,MAAQkB,KAAKgrC,UAIxC,IAAInuC,EAFJgjC,aAAaK,QAAQ6qD,EAAaC,GAIlC,MAAM7Q,EAAWh9E,OAAOm9E,aAAY,KAC9Bz9E,GAAYgjC,aAAaC,QAAQirD,KAAiBC,IACpDnuF,IACA09E,cAAcJ,MAXD,K,+FCDjB,MAAM8Q,EAAa,CAAC,iBAAkB,kBAEvB,SAASC,IACtB,GAAI,UAAWlmF,SACb,OAAO5G,QAAQ0+B,IAAImuD,EAAW3iF,KAAK6iF,GAASnmF,SAASomF,MAAMC,KAAKF,M,+DCqCpE,SAASG,IACP,MAAM,QAAEp5C,EAAF,KAAWlZ,IAASnD,EAAAA,EAAAA,MAAYqD,MACtC,GAAKgZ,EAAQsQ,OAIb,OAAOpkD,QAAQ0+B,IAAIoV,EAAQsQ,OAAO3/C,MAAM,EARf,IAQsCyF,KAAKhC,IAClE,MAAM+C,EAAO2vB,EAAK1yB,GAClB,IAAK+C,EACH,OAGF,MAAMk6B,GAAaF,EAAAA,EAAAA,IAAkBh6B,GACrC,OAAKk6B,EAIE+zC,EAAAA,GAAkB/zC,EAAYlkC,EAAAA,GAAAA,cAJrC,MAQJ,MAAMksF,EAAe,CACnBC,KAAM,IAAMptF,QAAQ0+B,IAAI,EACtB3V,EAAAA,EAAAA,IAAW0sD,EAAAA,GAAAA,KAAc,QACtB30E,KAAKgsF,GACRI,KACAlsB,EAAAA,EAAAA,IAAaqsB,KAEfvpD,gBAAiB,IAAM9jC,QAAQ0+B,IAAI,CACjCouD,KACA9rB,EAAAA,EAAAA,IAAassB,KAEfC,SAAU,KAAMvsB,EAAAA,EAAAA,IAAawsB,GAC7BC,aAAc,KAAMzsB,EAAAA,EAAAA,IAAawsB,GACjC5sD,WAAYksD,GAmFd,GAAev3E,EAAAA,EAAAA,KACZC,IACC,MAAM2tB,GAAQR,EAAAA,EAAAA,IAAYntB,IACpB,WAAEk4E,EAAF,gBAAc3zE,GAAoBvE,EAAO0mB,SAASggB,OAAO/Y,IAAU,GAEzE,MAAO,CACLY,4BAA6BvuB,EAAOuuB,4BACpCH,aAAcpuB,EAAOouB,aACrB+pD,oBAAqBvmF,QAAQsmF,GAC7BE,yBAA0BxmF,QAAQ2S,GAClC8zE,oBAAoB78B,EAAAA,EAAAA,IAAyBx7C,GAC7Cs4E,gBAAiBt4E,EAAOs4E,mBAX9B,EAhF4C,IAQtC,IARuC,KAC3C3a,EAD2C,SAE3CruE,EAF2C,oBAG3C6oF,EAH2C,yBAI3CC,EAJ2C,mBAK3CC,EAL2C,4BAM3C9pD,EAN2C,gBAO3C+pD,GACI,EACJ,MAAM,aAAEC,IAAiB7oF,EAAAA,EAAAA,OAElB8oF,EAASC,IAAav9E,EAAAA,EAAAA,MAE3BmZ,aAAcqkE,EADV,qBAC4B5zE,IAC9BC,EAAAA,EAAAA,IAAmByzE,OAASrkF,GAAW,GAoC3C,OAlCAyH,EAAAA,EAAAA,KAAU,KACR,IAAI2S,EAsBJ,OAZA/jB,QAAQY,KAAK,EACXC,EAAAA,EAAAA,IArEoB,KA4DFF,WAClB,UACQwsF,EAAaha,KACnB,MAAO1zE,MAOT0uF,KACCrtF,MAAK,KACNmtF,IACAF,EAAa,CAAEnqD,aAAc,IAE7B7f,EAAUhlB,OAAOE,YAAW,KAC1B8uF,EAAa,CAAEnqD,aAAc,MA3EV,QA+EhB,KACD7f,IACFK,aAAaL,GACbA,OAAUpa,GAGZokF,EAAa,CAAEnqD,aAAc,OAG9B,IAGD,0BAAK97B,GAAG,YACLhD,EACAopF,IAAqBnqD,GACpB,0BAAKl/B,WAAWmB,EAAAA,EAAAA,GAAe,OAAQsU,IAC3B,SAAT64D,EACC,sCACE,0BACEtuE,UAAU,OACVuS,MAAO02E,EAAmB,UAASA,WAAsBnkF,IAE3D,0BACE9E,WAAWmB,EAAAA,EAAAA,GACT,SACA2nF,GAAuB,kBACvBC,GAA4B,kBAC5BC,GAAsB,uBAGzBA,GAAsB,0BAAKhpF,UAAU,WAGxC,0BAAKA,UAAU,e,oCCnJ3B,MAYA,GAZsB,CAAC26B,EAA8BjQ,KACnD,MAAO6+D,EAAaC,IAAkBp3E,EAAAA,EAAAA,MAQtC,OANIuoB,GACFjX,GAAAA,GAC+BiX,EAAUjQ,GACtCzuB,KAAKutF,GAGHD,GCVF,SAASE,KACd,IAAIC,EAAoBh2D,UAAUkH,SAMlC,OAJI8uD,GAA2C,UAAtBA,IACvBA,EAAoBA,EAAkB37E,OAAO,EAAG,IAG3C27E,E,4HCuBT,MAAMC,GAAuB,IAAMvuE,EAAAA,GA4InC,IAAetb,EAAAA,EAAAA,KAAK4Q,EAAAA,EAAAA,KACjBC,IACC,MAAQkqB,aAAegpD,WAAYvO,IAAoB3kE,EACvD,MAAO,CACL2kE,cAAAA,KAJc5kE,EAzIgC,IAM9C,IAN+C,GACnDzN,EADmD,MAEnDpE,EAFmD,UAGnD4S,EAHmD,SAInDmB,EAJmD,cAKnD0iE,GACI,EACJ,MAAM1xE,GAAOkP,EAAAA,GAAAA,KAEP82E,GAAWn+E,EAAAA,EAAAA,IAAyB,OAEnClG,EAAQskF,IAAaz3E,EAAAA,EAAAA,OACrB03E,EAAcC,IAAmB33E,EAAAA,EAAAA,IAA2B,IAE7D43E,GAAevpF,EAAAA,EAAAA,KAAawpF,IAChCJ,EAAUI,GACVF,EA6GJ,SAAyBlvD,GAA8D,IAA/Bt1B,EAA+B,uDAAtB,GAC/D,IAAKA,EAAOhI,OACV,OAAOs9B,EAGT,MAAM8J,GAAcC,EAAAA,GAAAA,GAA4Br/B,GAEhD,OAAOs1B,EAAYt1B,QAAQgwE,GACzB5wC,EAAY4wC,EAAQ2U,cAAiB3U,EAAQ56E,MAAQgqC,EAAY4wC,EAAQ56E,QArHzDwvF,CAAgB7U,EAAe2U,MAC9C,CAAC3U,KAEJ7xD,EAAAA,GAAAA,IAAY,IAAyB,IAAvB2mE,GAAuB,EACD,KAA9BA,MAAAA,OAAA,EAAAA,EAAmB7sF,SAAgB+3E,EAAc/3E,OAAS,GAC5DysF,EAAazkF,KAEd,CAAC+vE,EAAe0U,IAEnB,MAAMj3E,GAAetS,EAAAA,EAAAA,KAAa80E,IAChC3iE,EAAS2iE,GAETn7E,YAAW,IAAM4vF,OAAallF,IAAY6kF,MACzC,CAAC/2E,EAAUo3E,IAERK,GAAc5pF,EAAAA,EAAAA,KAAaC,IAC/BspF,EAAatpF,EAAEsP,cAAcnR,SAC5B,CAACmrF,IAEEM,GAAqB7pF,EAAAA,EAAAA,KAAaC,IACtC,GAAkB,IAAdA,EAAEoT,QACJ,OAGF,MAAMzS,EAASX,EAAEsP,cACbnR,QAAoBiG,IAAXS,IACXlE,EAAOxC,MAAQ,IAGjBmrF,EAAa3oF,EAAOxC,SACnB,CAAC0G,EAAQykF,EAAcnrF,IAiD1B,OACE,mBAAC0rF,GAAA,EAAD,CACEvqF,UAAU,mBACViT,QAlD+D,IAA2B,IAA1B,UAAEkB,EAAF,OAAaT,GAAa,EAC5F,MAAM82E,EAAgB,KACpB,GAAI92E,EACF,OAGFtZ,YAAW,KACTwvF,EAAS39E,QAASw+E,WAzDH,IA4DjBt2E,IAEA,MAAMu2E,EAAS3oF,SAAS4oF,eAAe,0BACvCD,EAAOE,SAAS,CAAEC,IAAKH,EAAOI,aAAcC,SAAU,YAQlDC,EAAazlF,MAAAA,EAAAA,GAAW1G,MAAAA,OAAA,EAAAA,EAAOlE,QAAQkE,MAAAA,OAAf,EAAeA,EAAOqrF,cAAe,GAEnE,OACE,0BAAKlqF,WAAWmB,EAAAA,EAAAA,GAAe,cAAetC,GAAS,YACrD,4BACE4N,IAAKm9E,EACL5pF,WAAWmB,EAAAA,EAAAA,GAAe,eAAgBuS,GAAU,SACpDva,KAAK,OACL8J,GAAIA,EACJpE,MAAOmsF,EACPv2E,aAAa,MACblT,QAASipF,EACTr5E,QAASq5E,EACT51E,QAlBmBlU,IACvB2pF,EAAY3pF,GACZ8pF,KAiBI52E,UAAW02E,IAEb,gCAAQ1mF,EAAK,8BACZ6N,EACC,mBAACw5E,GAAA,EAAD,CAAS75E,MAAM,UAEf,wBAAG7P,QAASipF,EAAexqF,WAAWmB,EAAAA,EAAAA,GAAe,gBAAiBuS,GAAU,aAWnFo2E,EACEzkF,KAAKkwE,GACJ,mBAAC2V,GAAA,EAAD,CACExgE,IAAK6qD,EAAQC,KACbx1E,UAAWnB,GAAS02E,EAAQC,OAAS32E,EAAM22E,KAAO,WAAa,GAC/Dj0E,QAAS,IAAMwR,EAAawiE,IAE5B,2BAAMv1E,UAAU,iBAAgBmG,EAAAA,GAAAA,IAAW6yD,EAAAA,GAAAA,IAAWuc,EAAQC,MAAO,CAAC,cACtE,2BAAMx1E,UAAU,gBAAgBu1E,EAAQ56E,MAAQ46E,EAAQ2U,aACxD,2BAAMlqF,UAAU,gBAAgBu1E,EAAQI,iBAG5CmU,EAAavsF,QACb,mBAAC2tF,GAAA,EAAD,CACExgE,IAAI,aACJ1qB,UAAU,aACV4R,UAAQ,GAER,+BAAOhO,EAAK,2BC/GtB,IAAIunF,IAAqB,EAEzB,MAoNA,IAAerrF,EAAAA,EAAAA,KAAK4Q,EAAAA,EAAAA,KACjBC,IACC,MACE0mB,UAAY+B,OAAO,SAAEwB,IACrBC,aAAegpD,WAAYvO,IACzB3kE,EAEJ,MAAO,KACF8jC,EAAAA,EAAAA,IAAK9jC,EAAQ,CACd,kBACA,YACA,kBACA,gBACA,sBACA,YACA,iBACA,uBAEFiqB,SAAAA,EACA06C,cAAAA,KAnBc5kE,EApNoB,IAWlC,IAXmC,gBACvC4kB,EADuC,UAEvCkG,EAFuC,gBAGvCyD,EAHuC,cAIvC7K,EAJuC,oBAKvCM,EALuC,UAMvCL,EANuC,eAOvCgI,EAPuC,mBAQvC9G,EARuC,cASvC+/C,EATuC,SAUvC16C,GACI,EACJ,MAAM,mBACJwwD,EADI,kBAEJC,EAFI,mBAGJC,EAHI,gBAIJC,EAJI,eAKJC,EALI,eAMJC,EANI,iBAOJ1wD,IACE16B,EAAAA,EAAAA,MAEEuD,GAAOkP,EAAAA,GAAAA,KAEP82E,GAAWn+E,EAAAA,EAAAA,IAAyB,MACpCi+E,EAAoBD,KAEpBiC,EAAeC,GAAcjC,EAAmB,2BAC/CnU,EAASqW,IAAcx5E,EAAAA,EAAAA,OACvB+hB,EAAa03D,IAAkBz5E,EAAAA,EAAAA,OAC/B05E,EAAWC,IAAgB35E,EAAAA,EAAAA,KAAS,IACpC45E,EAAeC,IAAoB75E,EAAAA,EAAAA,OACnCX,EAAWy6E,EAAeC,IAAmBtgF,EAAAA,EAAAA,KAE9CugF,EAAa7W,EAAW,IAAGA,EAAQI,eAAexhD,GAAe,KAAOA,EACxEk4D,EAAYD,GAAcA,EAAW5sF,QAAQ,UAAW,IAAIjC,QAvC1C,GAyCxBgP,EAAAA,EAAAA,KAAU,KACHkyB,EAAAA,IACHmrD,EAAS39E,QAASiI,UAEnB,CAACqhE,KAEJhpE,EAAAA,EAAAA,KAAU,KACgB,yBAApB+oB,GAA+CC,GACjD+1D,MAED,CAACh2D,EAAiBC,EAAoB+1D,KAEzC/+E,EAAAA,EAAAA,KAAU,KACgB,yBAApB+oB,GACFi2D,EAAgB,CAAE5wD,SAAUC,MAE7B,CAACtF,EAAiBsF,EAAU2wD,KAE/Bh/E,EAAAA,EAAAA,KAAU,KACJgpB,GAAsB+/C,IAAkBC,IAAYuW,GACtDF,GAAWvW,EAAAA,GAAAA,IAAqBC,EAAe//C,GAAoB,MAEpE,CAACggD,EAAShgD,EAAoBu2D,EAAWxW,IAE5C,MAAMgX,GAAkB7rF,EAAAA,EAAAA,KAAa8rF,IAC9BA,EAAchvF,QACjBsuF,EAAe,IAGjB,MAAMW,EAAmBlX,IAAiBG,EAAAA,GAAAA,IAA0BH,EAAeiX,GAG7EE,GAAmBlX,GACrBiX,GAAoBA,EAAiBhX,OAASD,EAAQC,OACrDgX,GAAoBD,EAAchvF,OACnCivF,EACAjX,IAECA,IAAYkX,GAAoBA,GAAmBA,EAAgBjX,OAASD,EAAQC,OACvFoW,EAAWa,GAEbZ,GAAe7V,EAAAA,GAAAA,IAAkBuW,EAAeE,MAC/C,CAACnX,EAAeC,IAEbmX,GAAmBjsF,EAAAA,EAAAA,KAAY,KACnCyrF,KAEK7wD,EAAAA,GAAAA,IAAYquD,GAAmB,KAClCyC,IAEApxD,EAAiB,CAAEH,SAAU8uD,SAE9B,CAACwC,EAAenxD,EAAkB2uD,EAAmByC,KAExD5/E,EAAAA,EAAAA,KAAU,UACYzH,IAAhBqvB,GAA6B8K,GAC/BqtD,EAAgBrtD,KAEjB,CAACA,EAAiB9K,EAAam4D,KAElC37D,EAAAA,EAAAA,KAAgB,KACVi5D,EAAS39E,SAAW+/E,GACtBpC,EAAS39E,QAAQ0gF,qBAAqBX,KAEvC,CAACA,IAEJ,MAAMY,GAAkBnhF,EAAAA,EAAAA,KAAO,GACzBohF,GAAcpsF,EAAAA,EAAAA,KAAY,KAC9BmsF,EAAgB3gF,SAAU,EAC1ByL,uBAAsB,KACpBk1E,EAAgB3gF,SAAU,OAE3B,IAEG6gF,GAAsBrsF,EAAAA,EAAAA,KAAa5B,IACvC+sF,EAAW/sF,GACXgtF,EAAe,MACd,IAEGkB,GAA0BtsF,EAAAA,EAAAA,KAAaC,IACvC2zB,GACFm3D,IAIGL,KACHA,IAAqB,EACrBlD,KACK9rB,EAAAA,EAAAA,IAAawsB,IAGpB,MAAM,MAAE9pF,EAAF,eAASmuF,EAAT,aAAyBC,GAAiBvsF,EAAEW,OAClD4qF,EACEe,GAAkBC,GAAgBA,EAAepuF,EAAMtB,OACnD,CAACyvF,EAAgBC,QACjBnoF,GAGNinF,GAAa,GAEb,MAAMmB,EACJpuD,EAAAA,IAAay2C,QAA0BzwE,IAAfsnF,GACrBvtF,EAAMtB,OAAS6uF,EAAW7uF,OAAS,IAAMqvF,EAAgB3gF,QAE9DqgF,EAAgBY,EAA+B,GAAE3X,EAASI,eAAe92E,IAAUA,KAClF,CAACw1B,EAAWm3D,EAAgBjW,EAAS6W,EAAYE,IAE9Ca,GAA0B1sF,EAAAA,EAAAA,KAAaC,IAC3C2qF,EAAkB3qF,EAAEW,OAAOqR,WAC1B,CAAC24E,IAcE+B,EAA4B,sCAAd5xD,EAEpB,OACE,0BAAKv4B,GAAG,yBAAyBjD,UAAU,iBACzC,0BAAKA,UAAU,aACb,0BAAKiD,GAAG,SACR,yCACA,wBAAGjD,UAAU,QAAQ4D,EAAK,cAC1B,2BAAMO,OAAO,GAAGkpF,SApBtB,SAAsBr6E,GACpBA,EAAM/R,iBAEFmzB,GAIAi4D,GACFjB,EAAmB,CAAEj3D,YAAai4D,MAa9B,mBAAC,GAAD,CACEnpF,GAAG,qBACHpE,MAAO02E,EACP9jE,WAAY8jB,IAAuBggD,EACnC3iE,SAAUk6E,IAEZ,mBAACQ,GAAA,EAAD,CACE7gF,IAAKm9E,EACL3mF,GAAG,uBACHuP,MAAO5O,EAAK,0BACZ/E,MAAOutF,EACP5yF,MAAO66B,GAAazwB,EAAKywB,GACzB3f,UAAU,MACV9B,SAAUm6E,EACVh4E,QAAS+pB,EAAAA,GAAY+tD,OAAc/nF,IAErC,mBAACyoF,GAAA,EAAD,CACEtqF,GAAG,uBACHuP,MAAM,oBACNE,QAASnQ,QAAQ85B,GACjBzpB,SAAUu6E,IAEXd,IACCe,EACE,mBAACI,GAAA,EAAD,CAAQr0F,KAAK,SAAS0Y,QAAM,EAACJ,UAAW2iB,GAAgBxwB,EAAK,eAE7D,mBAAC6pF,GAAA,EAAD,OAGHL,GACC,mBAACI,GAAA,EAAD,CAAQh8E,QAAM,EAACK,QAAM,EAACJ,UAAWijB,EAAqBnzB,QAASkqF,GAC5D7nF,EAAK,mBAGT8lF,GAAqBA,IAAsB9uD,GAAY8wD,GACtD,mBAAC8B,GAAA,EAAD,CAAQh8E,QAAM,EAACC,UAAWA,EAAWlQ,QAASmrF,GAAmBhB,U,eClP7E,MAMA,IAAe5rF,EAAAA,EAAAA,KANW,KACxB,MAAM4tF,GAAWC,EAAAA,GAAAA,GAAgB/c,EAAAA,GAAAA,KAAc,YAE/C,OAAO8c,EAAW,mBAACA,EAAD,MAAe,mBAACD,GAAA,EAAD,SCGnC,IAAe3tF,EAAAA,EAAAA,KANe,KAC5B,MAAM8tF,GAAeD,EAAAA,GAAAA,GAAgB/c,EAAAA,GAAAA,KAAc,gBAEnD,OAAOgd,EAAe,mBAACA,EAAD,MAAmB,mBAACH,GAAA,EAAD,SCG3C,IAAe3tF,EAAAA,EAAAA,KANe,KAC5B,MAAM+tF,GAAeF,EAAAA,GAAAA,GAAgB/c,EAAAA,GAAAA,KAAc,gBAEnD,OAAOid,EAAe,mBAACA,EAAD,MAAmB,mBAACJ,GAAA,EAAD,SCP9B,IAAIK,GAAE,KAAK,MAAMC,IAAGA,GAAEnhE,OAAO,SAAS5uB,EAAEgwF,GAAGF,GAAE9vF,EAAEgwF,IAAIx9B,KAAKy9B,UAAUF,GAC/E,SAAU/vF,GAAG,SAASgwF,EAAE9vF,EAAEwR,EAAEqnC,EAAEr2C,GAAG,IAAIs2C,EAAE,GAAGk3C,EAAElwF,EAAE+4C,EAAErnC,GAAGw+E,EAAEnN,EAAE7iF,GAAGgwF,EAAEC,IAAIztF,EAAEA,GAAG,EAAE,IAAIs7E,EAAEkS,EAAEA,IAAI/pE,EAAE+pE,EAAEA,IAAI,EAAExtF,EAA4G,OAA1Gs2C,EAAEj3C,KAAK7B,EAAE84C,EAAEo3C,MAAM1+E,EAAEsnC,EAAEi+B,QAAQl+B,EAAEC,EAAEq3C,EAAElqE,EAAE6yB,EAAED,EAAE,SAASC,EAAED,GAAa,OAALA,GAAGr2C,IAAS,GAAjBs2C,GAAGt2C,IAAmBs2C,GAAGglC,GAAG,EAAEjlC,GAAGA,GAAGilC,IAAKkS,EAAEn3C,EAAEC,EAAED,IAAWC,EAAE,SAASs3C,EAAEpwF,EAAEwR,EAAEqnC,EAAEr2C,EAAEs2C,EAAEk3C,EAAElS,EAAE73D,EAAE83D,EAAE3kE,GAAG,SAASypE,EAAE/pC,EAAED,EAAE6Y,EAAElgD,EAAEyU,EAAE63D,EAAEC,GAAGjlC,GAAG94C,EAAEqwF,OAAOx3C,EAAEilC,EAAEpsB,EAAEqsB,GAAG/9E,EAAEswF,MAAMz3C,EAAE6Y,EAAElgD,EAAEyU,EAAE+pE,IAAIhwF,EAAEqwF,OAAOx3C,EAAE6Y,GAAGosB,EAAE99E,EAAEuwF,OAAO/+E,EAAEw+E,EAAEn3C,GAAG74C,EAAEuwF,OAAO/+E,EAAEqnC,GAAGgqC,EAAE58D,EAAEzjB,EAAEq2C,EAAEr2C,EAAEs2C,GAAGk3C,EAAE,GAAGnN,EAAE9E,EAAEv7E,EAAEs2C,EAAEtnC,EAAEsnC,EAAE,GAAGk3C,GAAGnN,EAAEzpE,EAAE5H,EAAEsnC,EAAEtnC,EAAEqnC,EAAEm3C,EAAE,GAAGnN,EAAE/E,EAAEtsE,EAAEqnC,EAAEr2C,EAAEq2C,EAAE,EAAEm3C,GAAG,SAASQ,EAAExwF,EAAEwR,EAAEqnC,EAAEr2C,EAAEs2C,EAAEk3C,EAAElS,EAAE73D,EAAE83D,EAAE3kE,GAAG,SAASypE,EAAE/pC,EAAED,EAAErnC,EAAEyU,GAAGjmB,EAAEuwF,OAAOz3C,EAAEtnC,EAAEqnC,GAAG74C,EAAEqwF,OAAOv3C,EACtfD,GAAG74C,EAAEqwF,OAAOv3C,EAAED,EAAE5yB,GAAGjmB,EAAEswF,MAAMx3C,EAAED,EAAEC,EAAEtnC,EAAEqnC,EAAEm3C,GAAGlS,GAAG+E,EAAErxE,EAAEqnC,EAAEm3C,EAAEA,GAAG/pE,GAAG48D,EAAErgF,EAAEq2C,GAAGm3C,EAAEA,GAAGjS,GAAG8E,EAAErgF,EAAEs2C,GAAGk3C,GAAGA,GAAG52E,GAAGypE,EAAErxE,EAAEsnC,EAAEk3C,GAAGA,GAAmX,SAAS12E,EAAEtZ,EAAEwR,GAAGqnC,EAAE,CAAC,IAAIA,EAAErnC,EAAE3P,KAAKW,EACpfgP,EAAEi/E,EAAE33C,EAAEtnC,EAAEk/E,EAAEV,EAAEx+E,EAAEm/E,EAAE7S,EAAEtsE,EAAEo/E,EAAqB,IAAnB93C,EAAEj6C,KAAKsP,IAAI,EAAE2qC,GAAG,GAAOk3C,EAAEnxF,KAAKuP,IAAI,GAAG4hF,GAAG,IAAIl3C,GAAGk3C,EAAEl3C,GAAG,EAAE,IAAI,IAAI7yB,EAAE6pE,EAAEj3C,EAAEr2C,EAAEs2C,EAAEglC,GAAG,MAAMjlC,EAAE,MAAMo3C,IAAIhqE,OAAE,EAAO,IAAIA,EAAE,OAAO,KAAyI,IAApI4yB,EAAE74C,EAAEy8D,WAAW,MAAMjrD,EAAEm5E,aAAa9xC,EAAEg4C,UAAUr/E,EAAEm5E,WAAW9xC,EAAEi4C,SAASt/E,EAAEu/E,KAAKv/E,EAAEm7E,IAAIn7E,EAAEtG,KAAKsG,EAAEtG,OAAO1I,EAAEyjB,EAAEkqE,EAAEH,EAAEx+E,EAAEtG,KAAK1I,EAAEq2C,EAAEm4C,YAAgBlT,EAAE,EAAEA,EAAEt7E,EAAEs7E,GAAG,EAAE,IAAIhlC,EAAE,EAAEA,EAAEt2C,EAAEs2C,GAAG,EAAE,CAAC,IAAIilC,EAAEllC,EAAEz/B,EAAE5H,EAAEu/E,KAAKj4C,EAAEk3C,EAAEnN,EAAErxE,EAAEm7E,IAAI7O,EAAEkS,EAAEtnE,EAAEo1D,EAAEmT,EAAEn4C,EAAE4Y,EAAEzrC,EAAE4yB,EAAEj6C,EAAEwa,EAAE42E,EAAElO,EAAEe,EAAEmN,EAAEkB,EAAExoE,EAAE,EAAEyoE,EAAEzoE,EAAE,EAAEppB,EAAE2xF,EAAE,EAAEltE,EAAEktE,EAAE,EAAE33E,EAAEza,KAAKC,MAAMD,KAAKuP,IAAI,GAAGvP,KAAKsP,IAAI,EAAEqD,EAAE4/E,IAAIpB,GAAGS,EAAE/+B,EAAEhpC,EAAEuoE,GAAGI,EAAE3/B,EAAEw/B,EAAE5xF,GAAGQ,EAAE4xD,EAAEw/B,EAAED,GAAGC,EAAEx/B,EAAEw/B,EAAEntE,GAAG,IAAIutE,EAAE5/B,EAAEhpC,EAAE3E,GAAGA,EAAE2tC,EAAEy/B,EAAEptE,GAAGktE,EAAEv/B,EAAEy/B,EACnfF,GAAGE,EAAEz/B,EAAEy/B,EAAE7xF,GAAGopB,EAAEgpC,EAAEhpC,EAAEppB,GAAG8Z,EAAEva,KAAKoP,MAAMmL,GAAGypE,EAAEhkF,KAAKoP,MAAM40E,GAAGjkF,EAAEC,KAAKoP,MAAMrP,GAAGkjF,EAAEjjF,KAAKoP,MAAM6zE,GAAG2O,EAAEL,EAAErS,EAAE3kE,EAAEypE,EAAEjkF,EAAEkjF,EAAExoE,GAAGxZ,IAAI4oB,GAAG5oB,IAAIwxF,GAAGL,IAAIK,GAAGL,IAAIvoE,GAAG8nE,EAAEzS,EAAE3kE,EAAEypE,EAAEjkF,EAAEkjF,EAAExoE,EAAExZ,GAAG4oB,GAAG2oE,EAAEvxF,GAAGwxF,GAAGJ,EAAED,GAAGK,GAAGvtE,EAAEktE,GAAGvoE,GAAGyoE,GAAmB,OAF7F,SAAWnxF,EAAEwR,GAAG,IAAIqnC,EAAErnC,EAAEo4B,KAAK,GAAG,iBAAkBiP,EAAE74C,EAAE6wF,UAAUh4C,MAAM,CAAC,IAAIr2C,EAAEq2C,EAAE59C,KAAK69C,EAAED,EAAE04C,WAAuD,GAA5C14C,EAAEA,EAAE7/B,SAAS7R,KAAK2xC,GAAIj6C,KAAKoP,MAAM6qC,EAAEtnC,EAAEtG,QAAU,oBAAoB1I,EAAE,IAAIwtF,EAAEhwF,EAAEwxF,qBAAqBC,MAAMzxF,EAAE64C,OAAQ,IAAG,oBAAoBr2C,EAA2C,MAAM5G,MAAM,oBAArDo0F,EAAEhwF,EAAE0xF,qBAAqBD,MAAMzxF,EAAE64C,GAAwCC,EAAEpwC,SAAQ,EAAEowC,EAAED,MAAMm3C,EAAE2B,aAAa74C,EAAED,MAAK74C,EAAE6wF,UAAUb,GAEhS4B,CAAE/4C,EAAErnC,GAAGqnC,EAAEjP,OAAc5pC,EAAE,IAAIywF,EAAE,CAACoB,WAAW,EAAEC,WAAW,GAAGC,QAAQ,IAAIhB,KAAK,EAAEpE,IAAI,EAAEzhF,KAAK,IAAI0+B,KAAK,OAAO+gD,WAAW,KAAK9oF,KAAK,UAAUmwF,OAAO,GAAGC,MAAM,GAAGrC,GAAE,SAAS5vF,EAAEwR,GAAG,IAAIqnC,EAAE,GAAG37C,OAAOC,OAAO07C,EAAE43C,EAAEzwF,GAAG64C,EAAE63C,EAAE73C,EAAEg5C,WAAWh5C,EAAE83C,EAAE93C,EAAEi5C,WAAWj5C,EAAE43C,EAAE53C,EAAEk5C,QAAQl5C,EAAEk4C,KAAKl4C,EAAEk4C,KAAKl4C,EAAE8zC,IAAI9zC,EAAE8zC,IAAI9zC,EAAE3tC,KAAK2tC,EAAE3tC,KAAK2tC,EAAEjP,KAAKiP,EAAEjP,KAAKiP,EAAE8xC,WAAW9xC,EAAE8xC,WAC/e9xC,EAAEh3C,KAAKg3C,EAAEh3C,KAAKg3C,EAAEu4C,EAAEv4C,EAAEm5C,OAAOn5C,EAAE+3C,EAAE/3C,EAAEo5C,MAASzgF,aAAa0gF,mBAAsB1gF,EAAE67B,QAAQwL,EAAE3tC,MAAMsG,EAAE87B,SAASuL,EAAE3tC,OAAKsG,EAAE67B,MAAMwL,EAAE3tC,KAAKsG,EAAE87B,OAAOuL,EAAE3tC,MAAKsG,EAAEirD,WAAW,MAAM01B,UAAU,EAAE,EAAE3gF,EAAE67B,MAAM77B,EAAE87B,QAAQh0B,EAAE9H,EAAEqnC,MAAQ74C,EAAE6D,SAASiH,cAAc,WAAYuiC,MAAMwL,EAAE3tC,KAAKlL,EAAEstC,OAAOuL,EAAE3tC,KAAK2tC,EAAEv/B,EAAEtZ,EAAE64C,GAAGrnC,EAAE6Z,YAAYwtB,KAJxS,CAI8S,WACjE,SAASu3C,EAAE5+E,EAAEqnC,GAAG,SAASr2C,EAAEs2C,EAAEk3C,GAAG,IAAI,IAAIn3C,GAAG,EAAE,GAAGA,EAAEA,GAAG,EAAE,MAAM,GAAGC,EAAED,GAAG5yB,GAAG6yB,EAAED,GAAG,IAAI,IAAIrnC,GAAG,EAAE,GAAGA,EAAEA,GAAG,GAAG,GAAGw+E,EAAEx+E,GAAGyU,GAAG+pE,EAAEx+E,IAAIssE,EAAEhlC,EAAED,GAAGm3C,EAAEx+E,GAAG,GAAGqnC,GAAG,GAAGA,IAAI,GAAGrnC,GAAG,GAAGA,IAAI,GAAGA,GAAG,GAAGA,IAAI,GAAGqnC,GAAG,GAAGA,IAAI,GAAGA,GAAG,GAAGA,GAAG,GAAGrnC,GAAG,GAAGA,GAAS,SAASsnC,EAAEA,EAAED,GAAG,IAAI,IAAI6Y,EAAEzrC,EAAE,EAAEzU,EAAE,GAAG5S,EAAE4J,MAAMkpD,GAAGowB,EAAE,EAAEA,EACnfpwB,EAAEowB,GAAG,EAAE,CAACljF,EAAEkjF,GAAGt5E,MAAMkpD,GAAG,IAAI,IAAIhpC,EAAE,EAAEA,EAAEgpC,EAAEhpC,GAAG,EAAE9pB,EAAEkjF,GAAGp5D,GAAG,KAA2C,IAAtCo1D,EAAEl/E,EAAE4D,EAAE,EAAE,GAAGA,EAAEyjB,EAAE,EAAE,GAAGzjB,EAAE,EAAEyjB,EAAE,GAAGyrC,EAAEp4C,EAAEs2E,EAAEp+E,GAAO5S,EAAE,EAAEA,EAAE8yD,EAAEryD,OAAOT,GAAG,EAAE,IAAIkjF,EAAE,EAAEA,EAAEpwB,EAAEryD,OAAOyiF,GAAG,EAAE,CAACp5D,EAAEgpC,EAAE9yD,GAAG,IAAIqyF,EAAEv/B,EAAEowB,GAAG,GAAG,MAAMhE,EAAEp1D,GAAGuoE,GAAG,IAAI,IAAI3xF,GAAG,EAAE,GAAGA,EAAEA,GAAG,EAAE,IAAI,IAAIykB,GAAG,EAAE,GAAGA,EAAEA,GAAG,EAAE+5D,EAAEp1D,EAAEppB,GAAG2xF,EAAEltE,IAAI,GAAGzkB,GAAG,GAAGA,IAAI,GAAGykB,GAAG,GAAGA,GAAG,GAAGzkB,GAAG,GAAGykB,EAAE,IAAI2tC,EAAE,EAAEA,EAAEzrC,EAAE,EAAEyrC,GAAG,EAAE,MAAMosB,EAAEpsB,GAAG,KAAKosB,EAAEpsB,GAAG,GAAG,GAAGA,EAAE,GAAG,IAAIA,EAAE,EAAEA,EAAEzrC,EAAE,EAAEyrC,GAAG,EAAE,MAAMosB,EAAE,GAAGpsB,KAAKosB,EAAE,GAAGpsB,GAAG,GAAGA,EAAE,GAAiB,IAAdA,EAAEp4C,EAAExZ,EAAEkwF,GAAG,EAAEn3C,GAAOj6C,EAAE,EAAE,GAAGA,EAAEA,GAAG,EAAEkjF,GAAGhpC,GAAG,IAAI4Y,GAAG9yD,EAAE,GAAGk/E,EAAE,EAAEl/E,EAAEA,EAAE,EAAEA,EAAEA,EAAE,EAAEqnB,EAAE,GAAGrnB,GAAG,GAAGkjF,EAAEhE,EAAE,GAAG,EAAEl/E,EAAEqnB,EAAErnB,EAAE,EAAE,EAAEA,EAAE,GAAGA,EAAE,GAAGA,GAAGkjF,EAAe,GAAbhE,EAAE73D,EAAE,GAAG,IAAI6yB,EAAK,GACtftnC,EAAE,CAAU,IAATkgD,EAAEp4C,EAAEs4E,EAAEpgF,GAAO5S,EAAE,EAAE,GAAGA,EAAEA,GAAG,EAAEkjF,GAAGhpC,GAAG,IAAI4Y,GAAG9yD,EAAE,GAAGk/E,EAAEj/E,KAAKC,MAAMF,EAAE,IAAIA,EAAE,EAAEqnB,EAAE,EAAE,GAAG67D,EAAE,IAAIljF,EAAE,EAAE,GAAGA,EAAEA,GAAG,EAAEkjF,GAAGhpC,GAAG,IAAI4Y,GAAG9yD,EAAE,GAAGk/E,EAAEl/E,EAAE,EAAEqnB,EAAE,EAAE,GAAGpnB,KAAKC,MAAMF,EAAE,IAAIkjF,EAAE,GAAG,MAAM/D,EAAE,CAAkB,IAAjBjlC,EAAE94C,EAAEqxF,EAAE7/E,EAAEw+E,GAAGt+B,EAHmS,WAAa,IAAIlgD,EAAE,GAAGqnC,EAAE,EAAEr2C,EAAE,CAACstF,EAAE,WAAW,OAAOt+E,GAC/fA,EAAE,SAASsnC,GAAG,OAAO,IAAItnC,EAAE3S,KAAKC,MAAMg6C,EAAE,MAAM,EAAEA,EAAE,EAAE,IAAI4a,IAAI,SAAS5a,EAAEk3C,GAAG,IAAI,IAAIn3C,EAAE,EAAEA,EAAEm3C,EAAEn3C,GAAG,EAAEr2C,EAAEs/E,EAAE,IAAIhpC,IAAIk3C,EAAEn3C,EAAE,EAAE,KAAK6Y,EAAE,WAAW,OAAO7Y,GAAGipC,EAAE,SAAShpC,GAAG,IAAIk3C,EAAEnxF,KAAKC,MAAM+5C,EAAE,GAAGrnC,EAAEnS,QAAQ2wF,GAAGx+E,EAAEnR,KAAK,GAAGy4C,IAAItnC,EAAEw+E,IAAI,MAAMn3C,EAAE,GAAGA,GAAG,IAAI,OAAOr2C,EAE9DstF,GAAQlxF,EAAE,EAAEA,EAAEwa,EAAE/Z,OAAOT,GAAG,EAAEkjF,EAAE1oE,EAAExa,GAAG8yD,EAAEgC,IAAI,EAAE,GAAGhC,EAAEgC,IAAIouB,EAAEhpC,IAAIx/B,EAAEo4C,EAAE,EAAElgD,IAAIswE,EAAEsQ,MAAM1gC,GAAG,IAAI9yD,EAAEkjF,EAAE,EAAEljF,EAAEk6C,EAAEz5C,OAAOT,GAAG,EAAEkjF,GAAGhpC,EAAEl6C,GAAGe,EAAE,GAAG+xD,EAAEA,IAAI,EAAEowB,EAAE,MAAMlmF,MAAM,0BAA0B81D,EAAEA,IAAI,IAAI,EAAEowB,EAAE,KAAK,IAAIpwB,EAAEA,IAAI,GAAG,EAAEowB,GAAGpwB,EAAEgC,IAAI,EAAE,GAAG,GAAGhC,EAAEA,IAAI,GAAGA,EAAEowB,GAAE,GAAI,OAAOpwB,EAAEA,KAAK,EAAEowB,IAAKpwB,EAAEgC,IAAI,IAAI,GAAMhC,EAAEA,KAAK,EAAEowB,KAAQpwB,EAAEgC,IAAI,GAAG,GAAG,IAAImvB,EAAE,EAC7c,IAD+cf,EAAEljF,EAAE,EAAE8pB,EAAElgB,MAAMswC,EAAEz5C,QACjf4xF,EAAEzoF,MAAMswC,EAAEz5C,QAAYC,EAAE,EAAEA,EAAEw5C,EAAEz5C,OAAOC,GAAG,EAAE,CAAC,IAAImxF,EAAE33C,EAAEx5C,GAAGK,EAAEG,EAAEg5C,EAAEx5C,GAAGkjF,EAAEiO,EAAgD,IAA9C7xF,EAAEC,KAAKsP,IAAIvP,EAAE6xF,GAAG3O,EAAEjjF,KAAKsP,IAAI2zE,EAAEhiF,GAAG4oB,EAAEppB,GAAGkJ,MAAMioF,GAAO1sE,EAAE,EAAEA,EAAE2E,EAAEppB,GAAGD,OAAO0kB,GAAG,EAAE2E,EAAEppB,GAAGykB,GAAG,IAAI2tC,EAAEo+B,IAAI/rE,EAAE8+D,GAA4D,IAAzDA,GAAG4N,EAAE1sE,EAAEzK,EAAE82E,EAAEtwF,GAAG2wF,EAAED,EAAE9nE,EAAEppB,GAAGykB,EAAE+0B,IAAI,GAAG/0B,EAAEA,GAAGktE,EAAE3xF,GAAGkJ,MAAMub,EAAE+0B,IAAI,GAAO/0B,EAAE,EAAEA,EAAEktE,EAAE3xF,GAAGD,OAAO0kB,GAAG,EAAEjkB,EAAEikB,EAAE0sE,EAAE33C,IAAIm4C,EAAE3xF,GAAGD,OAAO4xF,EAAE3xF,GAAGykB,GAAG,GAAGjkB,EAAE2wF,EAAEj/E,EAAE1R,GAAG,EAAE,IAAIikB,EAAE2tC,EAAE,EAAE3tC,EAAE+0B,EAAEz5C,OAAO0kB,GAAG,EAAE2tC,GAAG5Y,EAAE/0B,GAAGy+D,EAAa,IAAX9wB,EAAElpD,MAAMkpD,GAAO3tC,EAAE8+D,EAAE,EAAE9+D,EAAEnlB,EAAEmlB,GAAG,EAAE,IAAIzkB,EAAE,EAAEA,EAAEw5C,EAAEz5C,OAAOC,GAAG,EAAEykB,EAAE2E,EAAEppB,GAAGD,SAASqyD,EAAEmxB,GAAGn6D,EAAEppB,GAAGykB,GAAG8+D,GAAG,GAAG,IAAI9+D,EAAE,EAAEA,EAAE+9D,EAAE/9D,GAAG,EAAE,IAAIzkB,EAAE,EAAEA,EAAEw5C,EAAEz5C,OAAOC,GAAG,EAAEykB,EAAEktE,EAAE3xF,GAAGD,SAASqyD,EAAEmxB,GAAGoO,EAAE3xF,GAAGykB,GAAG8+D,GAAG,GAAG9E,EAAErsB,EACpd,IADsd5Y,EAAEilC,EAAErsB,GACnf,EAAE9yD,EAAEqnB,EAAE,EAAE67D,EAAE,EAAEp5D,EAAE,EAAEmwB,EAAEv/B,EAAEg4E,EAAEz4C,GAAOo4C,EAAEhrE,EAAE,EAAE,EAAEgrE,EAAEA,GAAG,EAAE,IAAI,GAAGA,KAAKA,IAAI,CAAC,IAAI3xF,EAAE,EAAE,EAAEA,EAAEA,GAAG,EAAE,MAAMw+E,EAAEl/E,GAAGqyF,EAAE3xF,KAAKykB,GAAE,EAAG2E,EAAEowB,EAAEz5C,SAAS0kB,EAAE,IAAI+0B,EAAEpwB,KAAKo5D,EAAE,IAAIjpC,EAAEj6C,EAAEqyF,EAAE3xF,KAAKykB,GAAGA,GAAG+5D,EAAEl/E,GAAGqyF,EAAE3xF,GAAGykB,GAAO,KAAH+9D,IAAUp5D,GAAG,EAAEo5D,EAAE,IAAS,GAAG,GAARljF,GAAG8yD,IAAUzrC,GAAGrnB,EAAE,CAACA,GAAG8yD,EAAEA,GAAGA,EAAE,QAAQ,IAAIs+B,EAAE4B,EAAE/4C,GAAGilC,EAAE,KAAK73D,EAAE,EAAE83D,EAAE,KAAK3kE,EAAE,GAAGypE,EAAE,CAACA,EAAE,SAAS/pC,GAAGA,EALuC,SAAWtnC,GAAG,IAAIqnC,EAAEu3C,EAAE3uF,EAAE+P,GAAG,MAAM,CAAC6gF,EAAE,WAAW,OAAO,GAAGv5C,EAAE,WAAW,OAAOD,EAAEx5C,QAAQ+yF,MAAM,SAAS5gF,GAAG,IAAI,IAAIsnC,EAAE,EAAEA,EAAED,EAAEx5C,OAAOy5C,GAAG,EAAEtnC,EAAEkiD,IAAI7a,EAAEC,GAAG,KAKrLh5C,CAAEg5C,GAAG1/B,EAAE/Y,KAAKy4C,GAAGilC,EAAE,MAAMllC,EAAE,SAASC,EAAED,GAAG,GAAG,EAAEC,GAAG7yB,GAAG6yB,GAAG,EAAED,GAAG5yB,GAAG4yB,EAAE,MAAMj9C,MAAMk9C,EAAE,IAAID,GAAG,OAAOilC,EAAEhlC,GAAGD,IAAIm3C,EAAE,WAAW,OAAO/pE,GAAGgqE,EAAE,WAAW,IAAI,IAAIp3C,EAAE,EAAEm3C,EAAE,EAAEx+E,EAAE,EAAE,EAAEA,EAAEA,GAAG,EAAE,CAACsnC,GAAE,EAAGtnC,GAAG,IAAIyU,EAAE3M,EAAE43E,EAAErO,IAAM,GAAGrxE,GAAGqnC,EAAE5yB,KAAE4yB,EAAE5yB,EAAE+pE,EAAEx+E,GAAEsnC,GAAE,EAAGk3C,KAAK,OAAOnN,EACrf,SAAS2N,EAAEh/E,EAAEqnC,GAAG,QAAG,IAAoBrnC,EAAEnS,OAAO,MAAMzD,MAAM4V,EAAEnS,OAAO,IAAIw5C,GAAG,IAAIr2C,EAAE,WAAW,IAAI,IAAIs2C,EAAE,EAAEA,EAAEtnC,EAAEnS,QAAQ,GAAGmS,EAAEsnC,IAAIA,GAAG,EAAE,IAAI,IAAIglC,EAAEt1E,MAAMgJ,EAAEnS,OAAOy5C,EAAED,GAAG5yB,EAAE,EAAEA,EAAEzU,EAAEnS,OAAOy5C,EAAE7yB,GAAG,EAAE63D,EAAE73D,GAAGzU,EAAEyU,EAAE6yB,GAAG,OAAOglC,EAAxH,GAA6HhlC,EAAE,CAACtnC,EAAE,SAASsnC,GAAG,OAAOt2C,EAAEs2C,IAAIA,EAAE,WAAW,OAAOt2C,EAAEnD,QAAQizF,SAAS,SAASz5C,GAAG,IAAI,IAAIm3C,EAAExnF,MAAMswC,EAAEA,IAAID,EAAEC,IAAI,GAAGtnC,EAAE,EAAEA,EAAEsnC,EAAEA,IAAItnC,GAAG,EAAE,IAAI,IAAIusE,EAAE,EAAEA,EAAEllC,EAAEC,IAAIilC,GAAG,EAAEiS,EAAEx+E,EAAEusE,IAAI0S,EAAEjxF,EAAEixF,EAAE1S,EAAEjlC,EAAEtnC,EAAEA,IAAIi/E,EAAE1S,EAAEllC,EAAErnC,EAAEusE,KAAK,OAAOyS,EAAER,EAAE,IAAIjsE,EAAE,SAAS80B,GAAG,GAAG,EAAEC,EAAEA,IAAID,EAAEC,IAAI,OAAOA,EAAE,IAAI,IAAItnC,EAAEi/E,EAAE1S,EAAEjlC,EAAEtnC,EAAE,IAAIi/E,EAAE1S,EAAEllC,EAAErnC,EAAE,IAAIw+E,EAAExnF,MAAMswC,EAAEA,KACjfilC,EAAE,EAAEA,EAAEjlC,EAAEA,IAAIilC,GAAG,EAAEiS,EAAEjS,GAAGjlC,EAAEtnC,EAAEusE,GAAG,IAAIA,EAAE,EAAEA,EAAEllC,EAAEC,IAAIilC,GAAG,EAAEiS,EAAEjS,IAAI0S,EAAEjxF,EAAEixF,EAAE1S,EAAEllC,EAAErnC,EAAEusE,IAAIvsE,GAAG,OAAOg/E,EAAER,EAAE,GAAGjsE,EAAE80B,KAAK,OAAOC,EAAEs3C,EAAE3uF,EAAE,SAAS+P,GAAG,IAAI,IAAIqnC,EAAE,GAAGr2C,EAAE,EAAEA,EAAEgP,EAAEnS,OAAOmD,IAAI,CAAC,IAAIs2C,EAAEtnC,EAAErR,WAAWqC,GAAG,IAAIs2C,EAAED,EAAEx4C,KAAKy4C,GAAG,KAAKA,EAAED,EAAEx4C,KAAK,IAAIy4C,GAAG,EAAE,IAAM,GAAFA,GAAM,MAAMA,GAAG,OAAOA,EAAED,EAAEx4C,KAAK,IAAIy4C,GAAG,GAAG,IAAIA,GAAG,EAAE,GAAG,IAAM,GAAFA,IAAOt2C,IAAIs2C,EAAE,QAAU,KAAFA,IAAS,GAAmB,KAAhBtnC,EAAErR,WAAWqC,IAASq2C,EAAEx4C,KAAK,IAAIy4C,GAAG,GAAG,IAAIA,GAAG,GAAG,GAAG,IAAIA,GAAG,EAAE,GAAG,IAAM,GAAFA,IAAO,OAAOD,GAAG,IAAI+4C,EAAE,CAACW,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAE5C,EAAE,GAAGv2E,EAAE,WAAW,SAAS9H,EAAEsnC,GAAG,IAAI,IAAID,EAAE,EAAE,GAAGC,GAAGD,GAAG,EAAEC,KAAK,EAAE,OAAOD,EAAE,IAAIA,EAAE,CAAC,GAAG,CAAC,EAAE,IACjf,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KACjf,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,IAAI,MAAMr2C,EAAE,CAAC1C,EAAE,SAASg5C,GAAG,IAAI,IAAID,EAAEC,GAAG,GAAG,GAAGtnC,EAAEqnC,GAAGrnC,EAAE,OAAOqnC,GAAG,MAAMrnC,EAAEqnC,GAAGrnC,EAAE,MAAM,OAAgB,OAATsnC,GAAG,GAAGD,IAAU+4C,EAAE,SAAS94C,GAAG,IAAI,IAAID,EAAEC,GAAG,GAAG,GAAGtnC,EAAEqnC,GAAGrnC,EAAE,OAAOqnC,GAAG,MAAMrnC,EAAEqnC,GAAGrnC,EAAE,MAAM,OAAOsnC,GAAG,GAAGD,GAAG+2C,EAAE,SAAS92C,GAAG,OAAOD,EAAEC,EAAE,IAAIw4C,EAAE,SAASx4C,GAAG,OAAOA,GAAG,KAAK,EAAE,OAAO,SAASA,EAAED,GAAG,OAAO,IAAIC,EAAED,GAAG,GAAG,KAAK,EAAE,OAAO,SAASC,GAAG,OAAO,GAAGA,EAAE,GAAG,KAAK,EAAE,OAAO,SAASA,EAAED,GAAG,OAAO,GAAGA,EAAE,GAAG,KAAK,EAAE,OAAO,SAASC,EAAED,GAAG,OAAO,IACnfC,EAAED,GAAG,GAAG,KAAK,EAAE,OAAO,SAASC,EAAED,GAAG,OAAO,IAAIh6C,KAAKC,MAAMg6C,EAAE,GAAGj6C,KAAKC,MAAM+5C,EAAE,IAAI,GAAG,KAAK,EAAE,OAAO,SAASC,EAAED,GAAG,OAAO,GAAGC,EAAED,EAAE,EAAEC,EAAED,EAAE,GAAG,KAAK,EAAE,OAAO,SAASC,EAAED,GAAG,OAAO,IAAIC,EAAED,EAAE,EAAEC,EAAED,EAAE,GAAG,GAAG,KAAK,EAAE,OAAO,SAASC,EAAED,GAAG,OAAO,IAAIC,EAAED,EAAE,GAAGC,EAAED,GAAG,GAAG,GAAG,QAAQ,MAAMj9C,MAAM,mBAAmBk9C,KAAMs3C,EAAE,SAASt3C,GAAG,IAAI,IAAID,EAAE23C,EAAE,CAAC,GAAG,GAAGh/E,EAAE,EAAEA,EAAEsnC,EAAEtnC,GAAG,EAAEqnC,EAAEA,EAAEy5C,SAAS9B,EAAE,CAAC,EAAEC,EAAEjxF,EAAEgS,IAAI,IAAI,OAAOqnC,GAAG6Y,EAAE,SAAS5Y,EAAED,GAAG,GAAG,GAAGC,GAAG,EAAED,GAAG,GAAGA,EAAE,MAAMj9C,MAAM,SAASk9C,EAAE,WAAWD,GAAG,OAAO,GAAGA,EAAE,EAAE,IAAIq4C,EAAE,SAASp4C,GAAG,IAAI,IAAID,EAAEC,EAAEk3C,IAAIx+E,EAAE,EACpfyU,EAAE,EAAEA,EAAE4yB,EAAE5yB,GAAG,EAAE,IAAI,IAAI83D,EAAE,EAAEA,EAAEllC,EAAEklC,GAAG,EAAE,CAAC,IAAI,IAAIv7E,EAAE,EAAExC,EAAE84C,EAAED,EAAE5yB,EAAE83D,GAAGr1D,GAAG,EAAE,GAAGA,EAAEA,GAAG,EAAE,KAAK,EAAEzC,EAAEyC,GAAGmwB,GAAG5yB,EAAEyC,GAAG,IAAI,IAAIuoE,GAAG,EAAE,GAAGA,EAAEA,GAAG,EAAE,EAAElT,EAAEkT,GAAGp4C,GAAGklC,EAAEkT,IAAI,GAAGvoE,GAAG,GAAGuoE,IAAIjxF,GAAG84C,EAAED,EAAE5yB,EAAEyC,EAAEq1D,EAAEkT,KAAKzuF,GAAG,GAAG,EAAEA,IAAIgP,GAAG,EAAEhP,EAAE,GAAG,IAAIyjB,EAAE,EAAEA,EAAE4yB,EAAE,EAAE5yB,GAAG,EAAE,IAAI83D,EAAE,EAAEA,EAAEllC,EAAE,EAAEklC,GAAG,EAAKv7E,EAAE,EAAEs2C,EAAED,EAAE5yB,EAAE83D,KAAKv7E,GAAG,GAAGs2C,EAAED,EAAE5yB,EAAE,EAAE83D,KAAKv7E,GAAG,GAAGs2C,EAAED,EAAE5yB,EAAE83D,EAAE,KAAKv7E,GAAG,GAAGs2C,EAAED,EAAE5yB,EAAE,EAAE83D,EAAE,KAAKv7E,GAAG,IAAG,GAAGA,GAAG,GAAGA,KAAEgP,GAAG,GAAE,IAAIyU,EAAE,EAAEA,EAAE4yB,EAAE5yB,GAAG,EAAE,IAAI83D,EAAE,EAAEA,EAAEllC,EAAE,EAAEklC,GAAG,EAAEjlC,EAAED,EAAE5yB,EAAE83D,KAAKjlC,EAAED,EAAE5yB,EAAE83D,EAAE,IAAIjlC,EAAED,EAAE5yB,EAAE83D,EAAE,IAAIjlC,EAAED,EAAE5yB,EAAE83D,EAAE,IAAIjlC,EAAED,EAAE5yB,EAAE83D,EAAE,KAAKjlC,EAAED,EAAE5yB,EAAE83D,EAAE,IAAIjlC,EAAED,EAAE5yB,EAAE83D,EAAE,KAAKvsE,GAAG,IAAI,IAAIusE,EAAE,EAAEA,EAAEllC,EAAEklC,GAAG,EAAE,IAAI93D,EAAE,EAAEA,EAAE4yB,EAAE,EAAE5yB,GAAG,EAAE6yB,EAAED,EAAE5yB,EAAE83D,KAAKjlC,EAAED,EAAE5yB,EACrf,EAAE83D,IAAIjlC,EAAED,EAAE5yB,EAAE,EAAE83D,IAAIjlC,EAAED,EAAE5yB,EAAE,EAAE83D,IAAIjlC,EAAED,EAAE5yB,EAAE,EAAE83D,KAAKjlC,EAAED,EAAE5yB,EAAE,EAAE83D,IAAIjlC,EAAED,EAAE5yB,EAAE,EAAE83D,KAAKvsE,GAAG,IAAI,IAAIusE,EAAEv7E,EAAE,EAAEu7E,EAAEllC,EAAEklC,GAAG,EAAE,IAAI93D,EAAE,EAAEA,EAAE4yB,EAAE5yB,GAAG,EAAE6yB,EAAED,EAAE5yB,EAAE83D,KAAKv7E,GAAG,GAAG,OAAOgP,EAAG3S,KAAK6xC,IAAI,IAAIluC,EAAEq2C,EAAEA,EAAE,IAAI,EAAE,KAAK,OAAOr2C,EALqP,GAKhPiuF,EAAE,WAAW,IAAI,IAAIj/E,EAAEhJ,MAAM,KAAKqwC,EAAErwC,MAAM,KAAKhG,EAAE,EAAE,EAAEA,EAAEA,GAAG,EAAEgP,EAAEhP,GAAG,GAAGA,EAAE,IAAIA,EAAE,EAAE,IAAIA,EAAEA,GAAG,EAAEgP,EAAEhP,GAAGgP,EAAEhP,EAAE,GAAGgP,EAAEhP,EAAE,GAAGgP,EAAEhP,EAAE,GAAGgP,EAAEhP,EAAE,GAAG,IAAIA,EAAE,EAAE,IAAIA,EAAEA,GAAG,EAAEq2C,EAAErnC,EAAEhP,IAAIA,EAAE,MAAM,CAACu7E,EAAE,SAASjlC,GAAG,GAAG,EAAEA,EAAE,MAAMl9C,MAAM,QAAQk9C,EAAE,KAAK,OAAOD,EAAEC,IAAIt5C,EAAE,SAASs5C,GAAG,KAAK,EAAEA,GAAGA,GAAG,IAAI,KAAK,KAAKA,GAAGA,GAAG,IAAI,OAAOtnC,EAAEsnC,KAArR,GAA6R94C,EAAE,WAAW,SAASwR,EAAEsnC,EAAEtnC,GAAG,OAAOA,GAAG,KAAKogF,EAAEW,EAAE,OAAO15C,EAAE,GAC3gBC,EAAE,IAAI,KAAK84C,EAAEY,EAAE,OAAO35C,EAAE,GAAGC,EAAE,GAAG,GAAG,KAAK84C,EAAEa,EAAE,OAAO55C,EAAE,GAAGC,EAAE,GAAG,GAAG,KAAK84C,EAAE/B,EAAE,OAAOh3C,EAAE,GAAGC,EAAE,GAAG,IAAI,IAAID,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAClf,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GACnf,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EACrf,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAChf,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAClf,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IA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","sources":["webpack://telegram-t/webpack/runtime/create fake namespace object","webpack://telegram-t/webpack/runtime/load script","webpack://telegram-t/webpack/runtime/css loading","webpack://telegram-t/./src/api/gramjs/worker/provider.ts","webpack://telegram-t/./src/api/types/media.ts","webpack://telegram-t/./src/api/types/messages.ts","webpack://telegram-t/./src/lib/punycode.js","webpack://telegram-t/./src/components/common/SafeLink.tsx","webpack://telegram-t/./src/components/common/helpers/documentInfo.ts","webpack://telegram-t/./src/components/common/helpers/parseEmojiOnlyString.ts","webpack://telegram-t/./src/components/common/UserLink.tsx","webpack://telegram-t/./src/components/common/MessageLink.tsx","webpack://telegram-t/./src/components/common/ChatLink.tsx","webpack://telegram-t/./src/components/common/GroupCallLink.tsx","webpack://telegram-t/./src/components/common/helpers/renderActionMessageText.tsx","webpack://telegram-t/./src/components/common/helpers/renderMessageText.ts","webpack://telegram-t/./src/components/common/helpers/renderText.tsx","webpack://telegram-t/./src/components/common/spoiler/Spoiler.tsx","webpack://telegram-t/./src/components/common/helpers/renderTextWithEntities.tsx","webpack://telegram-t/./src/components/middle/helpers/preventMessageInputBlur.ts","webpack://telegram-t/./src/components/middle/message/MentionLink.tsx","webpack://telegram-t/./src/components/ui/Button.tsx","webpack://telegram-t/./src/components/ui/Checkbox.tsx","webpack://telegram-t/./src/components/ui/DropdownMenu.tsx","webpack://telegram-t/./src/components/ui/InputText.tsx","webpack://telegram-t/./src/components/ui/Link.tsx","webpack://telegram-t/./src/components/ui/Loading.tsx","webpack://telegram-t/./src/components/ui/Menu.tsx","webpack://telegram-t/./src/components/ui/MenuItem.tsx","webpack://telegram-t/./src/components/ui/RippleEffect.tsx","webpack://telegram-t/./src/components/ui/Spinner.tsx","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/hooks/useEffectWithPrevDeps.ts","webpack://telegram-t/./src/hooks/useFlag.ts","webpack://telegram-t/./src/hooks/useForceUpdate.ts","webpack://telegram-t/./src/hooks/useHeavyAnimationCheck.ts","webpack://telegram-t/./src/hooks/useHistoryBack.ts","webpack://telegram-t/./src/hooks/useKeyboardListNavigation.ts","webpack://telegram-t/./src/hooks/useLang.ts","webpack://telegram-t/./src/hooks/useModuleLoader.ts","webpack://telegram-t/./src/hooks/useOnChange.ts","webpack://telegram-t/./src/hooks/usePrevious.ts","webpack://telegram-t/./src/hooks/useShowTransition.ts","webpack://telegram-t/./src/hooks/useVirtualBackdrop.ts","webpack://telegram-t/./src/lib/teact/dom-events.ts","webpack://telegram-t/./src/lib/teact/teact-dom.ts","webpack://telegram-t/./src/lib/teact/teact.ts","webpack://telegram-t/./src/lib/teact/teactn.tsx","webpack://telegram-t/./src/lib/twemojiRegex.js","webpack://telegram-t/./src/modules/actions/api/initial.ts","webpack://telegram-t/./src/modules/actions/api/settings.ts","webpack://telegram-t/./src/modules/actions/apiUpdaters/initial.ts","webpack://telegram-t/./src/modules/actions/ui/initial.ts","webpack://telegram-t/./src/modules/actions/ui/settings.ts","webpack://telegram-t/./src/modules/helpers/chats.ts","webpack://telegram-t/./src/modules/helpers/messages.ts","webpack://telegram-t/./src/modules/helpers/messageSummary.ts","webpack://telegram-t/./src/modules/helpers/messageMedia.ts","webpack://telegram-t/./src/modules/helpers/localSearch.ts","webpack://telegram-t/./src/modules/helpers/payments.ts","webpack://telegram-t/./src/modules/helpers/users.ts","webpack://telegram-t/./src/modules/reducers/chats.ts","webpack://telegram-t/./src/modules/reducers/symbols.ts","webpack://telegram-t/./src/modules/reducers/users.ts","webpack://telegram-t/./src/modules/reducers/globalSearch.ts","webpack://telegram-t/./src/modules/reducers/localSearch.ts","webpack://telegram-t/./src/modules/reducers/management.ts","webpack://telegram-t/./src/modules/reducers/settings.ts","webpack://telegram-t/./src/modules/reducers/twoFaSettings.ts","webpack://telegram-t/./src/modules/reducers/payments.ts","webpack://telegram-t/./src/modules/reducers/messages.ts","webpack://telegram-t/./src/modules/selectors/chats.ts","webpack://telegram-t/./src/modules/selectors/symbols.ts","webpack://telegram-t/./src/modules/selectors/messages.ts","webpack://telegram-t/./src/modules/selectors/localSearch.ts","webpack://telegram-t/./src/modules/selectors/management.ts","webpack://telegram-t/./src/modules/selectors/ui.ts","webpack://telegram-t/./src/modules/selectors/globalSearch.ts","webpack://telegram-t/./src/modules/selectors/payments.ts","webpack://telegram-t/./src/modules/selectors/settings.ts","webpack://telegram-t/./src/modules/selectors/users.ts","webpack://telegram-t/./src/types/index.ts","webpack://telegram-t/./src/util/animation.ts","webpack://telegram-t/./src/util/appBadge.ts","webpack://telegram-t/./src/util/arePropsShallowEqual.ts","webpack://telegram-t/./src/util/buildClassName.ts","webpack://telegram-t/./src/util/cacheApi.ts","webpack://telegram-t/./src/util/callbacks.ts","webpack://telegram-t/./src/util/captureEscKeyListener.ts","webpack://telegram-t/./src/util/captureKeyboardListeners.ts","webpack://telegram-t/./src/util/dateFormat.ts","webpack://telegram-t/./src/util/emoji.ts","webpack://telegram-t/./src/util/ensureProtocol.ts","webpack://telegram-t/./src/util/environmentWebp.ts","webpack://telegram-t/./src/util/environmentSystemTheme.ts","webpack://telegram-t/./src/util/environment.ts","webpack://telegram-t/./src/util/files.ts","webpack://telegram-t/./src/util/folderManager.ts","webpack://telegram-t/./src/util/formatCurrency.ts","webpack://telegram-t/./src/util/generateIdFor.ts","webpack://telegram-t/./src/util/getReadableErrorText.ts","webpack://telegram-t/./src/util/handleError.ts","webpack://telegram-t/./src/util/iteratees.ts","webpack://telegram-t/./src/util/langProvider.ts","webpack://telegram-t/./src/util/oggToWav.ts","webpack://telegram-t/./src/util/mediaLoader.ts","webpack://telegram-t/./src/util/memo.ts","webpack://telegram-t/./src/util/moduleLoader.ts","webpack://telegram-t/./src/util/notifications.ts","webpack://telegram-t/./src/util/permanentWebVersion.ts","webpack://telegram-t/./src/util/phoneNumber.ts","webpack://telegram-t/./src/util/routing.ts","webpack://telegram-t/./src/util/schedulers.ts","webpack://telegram-t/./src/util/searchWords.ts","webpack://telegram-t/./src/util/serverTime.ts","webpack://telegram-t/./node_modules/idb-keyval/dist/index.js","webpack://telegram-t/./node_modules/safari-14-idb-fix/dist/index.js","webpack://telegram-t/./src/util/sessions.ts","webpack://telegram-t/./src/util/switchTheme.ts","webpack://telegram-t/./src/util/textFormat.ts","webpack://telegram-t/./src/util/trimText.ts","webpack://telegram-t/./src/util/webpToPng.ts","webpack://telegram-t/./src/util/websync.ts","webpack://telegram-t/./src/util/windowSize.ts","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/compat get default export","webpack://telegram-t/webpack/runtime/define property getters","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/make namespace object","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/jsonp chunk loading","webpack://telegram-t/./src/util/setupServiceWorker.ts","webpack://telegram-t/./src/global/initial.ts","webpack://telegram-t/./src/global/cache.ts","webpack://telegram-t/./src/global/index.ts","webpack://telegram-t/./src/util/activeTabMonitor.ts","webpack://telegram-t/./src/util/fonts.ts","webpack://telegram-t/./src/components/common/UiLoader.tsx","webpack://telegram-t/./src/hooks/useLangString.ts","webpack://telegram-t/./src/components/auth/helpers/getSuggestedLanguage.ts","webpack://telegram-t/./src/components/auth/CountryCodeInput.tsx","webpack://telegram-t/./src/components/auth/AuthPhoneNumber.tsx","webpack://telegram-t/./src/components/auth/AuthCode.async.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.async.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.async.tsx","webpack://telegram-t/./node_modules/qr-creator/dist/qr-creator.es6.min.js","webpack://telegram-t/./src/components/auth/AuthQrCode.tsx","webpack://telegram-t/./src/components/auth/Auth.tsx","webpack://telegram-t/./src/components/main/Main.async.tsx","webpack://telegram-t/./src/components/main/AppInactive.tsx","webpack://telegram-t/./src/App.tsx","webpack://telegram-t/./src/index.tsx"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"telegram-t:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = (chunkId, fullhref, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"47\":1,\"126\":1,\"133\":1,\"472\":1,\"538\":1,\"640\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","import { Api } from '../../../lib/gramjs';\nimport { ApiInitialArgs, ApiOnProgress, OnApiUpdate } from '../../types';\nimport { Methods, MethodArgs, MethodResponse } from '../methods/types';\nimport { WorkerMessageEvent, OriginRequest } from './types';\n\nimport { DEBUG } from '../../../config';\nimport generateIdFor from '../../../util/generateIdFor';\nimport { pause } from '../../../util/schedulers';\n\ntype RequestStates = {\n messageId: string;\n resolve: Function;\n reject: Function;\n callback?: AnyToVoidFunction;\n};\n\nconst HEALTH_CHECK_TIMEOUT = 150;\nconst HEALTH_CHECK_MIN_DELAY = 5 * 1000; // 5 sec\n\nlet worker: Worker;\nconst requestStates = new Map();\nconst requestStatesByCallback = new Map();\n\n// TODO Re-use `util/WorkerConnector.ts`\n\nexport function initApi(onUpdate: OnApiUpdate, initialArgs: ApiInitialArgs) {\n if (!worker) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD WORKER');\n }\n\n worker = new Worker(new URL('./worker.ts', import.meta.url));\n subscribeToWorker(onUpdate);\n\n if (initialArgs.platform === 'iOS') {\n setupIosHealthCheck();\n }\n }\n\n return makeRequest({\n type: 'initApi',\n args: [initialArgs],\n });\n}\n\nexport function callApi(fnName: T, ...args: MethodArgs) {\n if (!worker) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('API is not initialized');\n }\n\n return undefined;\n }\n\n const promise = makeRequest({\n type: 'callMethod',\n name: fnName,\n args,\n });\n\n // Some TypeScript magic to make sure `VirtualClass` is never returned from any method\n if (DEBUG) {\n (async () => {\n try {\n type ForbiddenTypes =\n Api.VirtualClass\n | (Api.VirtualClass | undefined)[];\n type ForbiddenResponses =\n ForbiddenTypes\n | (AnyLiteral & { [k: string]: ForbiddenTypes });\n\n // Unwrap all chained promises\n const response = await promise;\n // Make sure responses do not include `VirtualClass` instances\n const allowedResponse: Exclude = response;\n // Suppress \"unused variable\" constraint\n void allowedResponse;\n } catch (err) {\n // Do noting\n }\n })();\n }\n\n return promise as MethodResponse;\n}\n\nexport function cancelApiProgress(progressCallback: ApiOnProgress) {\n progressCallback.isCanceled = true;\n\n const { messageId } = requestStatesByCallback.get(progressCallback) || {};\n if (!messageId) {\n return;\n }\n\n worker.postMessage({\n type: 'cancelProgress',\n messageId,\n });\n}\n\nfunction subscribeToWorker(onUpdate: OnApiUpdate) {\n worker.addEventListener('message', ({ data }: WorkerMessageEvent) => {\n if (data.type === 'update') {\n onUpdate(data.update);\n } else if (data.type === 'methodResponse') {\n const requestState = requestStates.get(data.messageId);\n if (requestState) {\n if (data.error) {\n requestState.reject(data.error);\n } else {\n requestState.resolve(data.response);\n }\n }\n } else if (data.type === 'methodCallback') {\n requestStates.get(data.messageId)?.callback?.(...data.callbackArgs);\n } else if (data.type === 'unhandledError') {\n throw new Error(data.error?.message);\n }\n });\n}\n\nfunction makeRequest(message: OriginRequest) {\n const messageId = generateIdFor(requestStates);\n const payload: OriginRequest = {\n messageId,\n ...message,\n };\n\n const requestState = { messageId } as RequestStates;\n\n // Re-wrap type because of `postMessage`\n const promise: Promise> = new Promise((resolve, reject) => {\n Object.assign(requestState, { resolve, reject });\n });\n\n if (('args' in payload) && typeof payload.args[1] === 'function') {\n const callback = payload.args.pop() as AnyToVoidFunction;\n requestState.callback = callback;\n requestStatesByCallback.set(callback, requestState);\n }\n\n requestStates.set(messageId, requestState);\n\n promise\n .catch(() => undefined)\n .finally(() => {\n requestStates.delete(messageId);\n\n if (requestState.callback) {\n requestStatesByCallback.delete(requestState.callback);\n }\n });\n\n worker.postMessage(payload);\n\n return promise;\n}\n\nconst startedAt = Date.now();\n\n// Workaround for iOS sometimes stops interacting with worker\nfunction setupIosHealthCheck() {\n window.addEventListener('focus', () => {\n void ensureWorkerPing();\n // Sometimes a single check is not enough\n setTimeout(() => ensureWorkerPing(), 1000);\n });\n}\n\nasync function ensureWorkerPing() {\n try {\n await Promise.race([\n makeRequest({ type: 'ping' }),\n pause(HEALTH_CHECK_TIMEOUT).then(() => Promise.reject(new Error('HEALTH_CHECK_TIMEOUT'))),\n ]);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (Date.now() - startedAt >= HEALTH_CHECK_MIN_DELAY) {\n window.location.reload();\n }\n }\n}\n","// We cache avatars as Data URI for faster initial load\n// and messages media as Blob for smaller size.\n\nexport enum ApiMediaFormat {\n BlobUrl,\n Lottie,\n Progressive,\n Stream,\n}\n\nexport type ApiParsedMedia = string | Blob | ArrayBuffer;\nexport type ApiPreparedMedia = string;\n","import { ApiGroupCall } from './calls';\n\nexport interface ApiDimensions {\n width: number;\n height: number;\n}\n\nexport interface ApiPhotoSize extends ApiDimensions {\n type: 's' | 'm' | 'x' | 'y' | 'z';\n}\n\nexport interface ApiThumbnail extends ApiDimensions {\n dataUri: string;\n}\n\nexport interface ApiPhoto {\n id: string;\n thumbnail?: ApiThumbnail;\n sizes: ApiPhotoSize[];\n blobUrl?: string;\n}\n\nexport interface ApiSticker {\n id: string;\n stickerSetId: string;\n stickerSetAccessHash?: string;\n emoji?: string;\n isLottie: boolean;\n isGif: boolean;\n width?: number;\n height?: number;\n thumbnail?: ApiThumbnail;\n isPreloadedGlobally?: boolean;\n}\n\nexport interface ApiStickerSet {\n archived?: true;\n isLottie?: true;\n isGifs?: true;\n installedDate?: number;\n id: string;\n accessHash: string;\n title: string;\n hasThumbnail?: boolean;\n count: number;\n stickers?: ApiSticker[];\n packs?: Record;\n covers?: ApiSticker[];\n shortName: string;\n}\n\nexport interface ApiVideo {\n id: string;\n mimeType: string;\n duration: number;\n fileName: string;\n width?: number;\n height?: number;\n supportsStreaming?: boolean;\n isRound?: boolean;\n isGif?: boolean;\n thumbnail?: ApiThumbnail;\n blobUrl?: string;\n size: number;\n}\n\nexport interface ApiAudio {\n id: string;\n size: number;\n mimeType: string;\n fileName: string;\n duration: number;\n performer?: string;\n title?: string;\n thumbnailSizes?: ApiPhotoSize[];\n}\n\nexport interface ApiVoice {\n id: string;\n duration: number;\n waveform?: number[];\n}\n\nexport interface ApiDocument {\n id?: string;\n fileName: string;\n size: number;\n timestamp?: number;\n mimeType: string;\n thumbnail?: ApiThumbnail;\n previewBlobUrl?: string;\n mediaType?: 'photo' | 'video';\n mediaSize?: ApiDimensions;\n}\n\nexport interface ApiContact {\n firstName: string;\n lastName: string;\n phoneNumber: string;\n userId: string;\n}\n\nexport interface ApiPollAnswer {\n text: string;\n option: string;\n}\n\nexport interface ApiPollResult {\n isChosen?: true;\n isCorrect?: true;\n option: string;\n votersCount: number;\n}\n\nexport interface ApiPoll {\n id: string;\n summary: {\n closed?: true;\n isPublic?: true;\n multipleChoice?: true;\n quiz?: true;\n question: string;\n answers: ApiPollAnswer[];\n closePeriod?: number;\n closeDate?: number;\n };\n results: {\n results?: ApiPollResult[];\n totalVoters?: number;\n recentVoterIds?: string[];\n solution?: string;\n solutionEntities?: ApiMessageEntity[];\n };\n}\n\nexport interface ApiInvoice {\n text: string;\n title: string;\n photoUrl?: string;\n amount: number;\n currency: string;\n receiptMsgId?: number;\n isTest?: boolean;\n}\n\nexport type ApiNewPoll = {\n summary: ApiPoll['summary'];\n quiz?: {\n correctAnswers: string[];\n solution?: string;\n solutionEntities?: ApiMessageEntity[];\n };\n};\n\nexport interface ApiAction {\n text: string;\n targetUserIds?: string[];\n targetChatId?: string;\n type: 'historyClear' | 'contactSignUp' | 'chatCreate' | 'other';\n photo?: ApiPhoto;\n amount?: number;\n currency?: string;\n translationValues: string[];\n call?: Partial;\n}\n\nexport interface ApiWebPage {\n id: number;\n url: string;\n displayUrl: string;\n type?: string;\n siteName?: string;\n title?: string;\n description?: string;\n photo?: ApiPhoto;\n duration?: number;\n document?: ApiDocument;\n video?: ApiVideo;\n}\n\nexport interface ApiMessageForwardInfo {\n date: number;\n isChannelPost: boolean;\n channelPostId?: number;\n isLinkedChannelPost?: boolean;\n fromChatId?: string;\n senderUserId?: string;\n fromMessageId?: number;\n hiddenUserName?: string;\n adminTitle?: string;\n}\n\nexport interface ApiMessageEntity {\n type: string;\n offset: number;\n length: number;\n userId?: string;\n url?: string;\n}\n\nexport enum ApiMessageEntityTypes {\n Bold = 'MessageEntityBold',\n Blockquote = 'MessageEntityBlockquote',\n BotCommand = 'MessageEntityBotCommand',\n Cashtag = 'MessageEntityCashtag',\n Code = 'MessageEntityCode',\n Email = 'MessageEntityEmail',\n Hashtag = 'MessageEntityHashtag',\n Italic = 'MessageEntityItalic',\n MentionName = 'MessageEntityMentionName',\n Mention = 'MessageEntityMention',\n Phone = 'MessageEntityPhone',\n Pre = 'MessageEntityPre',\n Strike = 'MessageEntityStrike',\n TextUrl = 'MessageEntityTextUrl',\n Url = 'MessageEntityUrl',\n Underline = 'MessageEntityUnderline',\n Spoiler = 'MessageEntitySpoiler',\n Unknown = 'MessageEntityUnknown',\n}\n\nexport interface ApiFormattedText {\n text: string;\n entities?: ApiMessageEntity[];\n}\n\nexport interface ApiMessage {\n id: number;\n chatId: string;\n content: {\n text?: ApiFormattedText;\n photo?: ApiPhoto;\n video?: ApiVideo;\n document?: ApiDocument;\n sticker?: ApiSticker;\n contact?: ApiContact;\n poll?: ApiPoll;\n action?: ApiAction;\n webPage?: ApiWebPage;\n audio?: ApiAudio;\n voice?: ApiVoice;\n invoice?: ApiInvoice;\n };\n date: number;\n isOutgoing: boolean;\n senderId?: string;\n replyToChatId?: string;\n replyToMessageId?: number;\n replyToTopMessageId?: number;\n sendingState?: 'messageSendingStatePending' | 'messageSendingStateFailed';\n forwardInfo?: ApiMessageForwardInfo;\n isDeleting?: boolean;\n previousLocalId?: number;\n views?: number;\n isEdited?: boolean;\n editDate?: number;\n isMentioned?: boolean;\n isMediaUnread?: boolean;\n groupedId?: string;\n isInAlbum?: boolean;\n hasUnreadMention?: boolean;\n inlineButtons?: ApiKeyboardButtons;\n keyboardButtons?: ApiKeyboardButtons;\n keyboardPlaceholder?: string;\n isKeyboardSingleUse?: boolean;\n viaBotId?: string;\n threadInfo?: ApiThreadInfo;\n adminTitle?: string;\n isScheduled?: boolean;\n shouldHideKeyboardButtons?: boolean;\n isFromScheduled?: boolean;\n seenByUserIds?: string[];\n isProtected?: boolean;\n reactors?: {\n nextOffset?: string;\n count: number;\n reactions: ApiUserReaction[];\n };\n reactions?: ApiReactions;\n}\n\nexport interface ApiReactions {\n canSeeList?: boolean;\n results: ApiReactionCount[];\n recentReactions?: ApiUserReaction[];\n}\n\nexport interface ApiUserReaction {\n userId: string;\n reaction: string;\n}\n\nexport interface ApiReactionCount {\n isChosen?: boolean;\n count: number;\n reaction: string;\n}\n\nexport interface ApiAvailableReaction {\n selectAnimation?: ApiDocument;\n staticIcon?: ApiDocument;\n centerIcon?: ApiDocument;\n aroundAnimation?: ApiDocument;\n reaction: string;\n title: string;\n isInactive?: boolean;\n}\n\nexport interface ApiThreadInfo {\n threadId: number;\n chatId: string;\n topMessageId?: number;\n originChannelId?: string;\n messagesCount: number;\n lastMessageId?: number;\n lastReadInboxMessageId?: number;\n recentReplierIds?: string[];\n}\n\nexport type ApiMessageOutgoingStatus = 'read' | 'succeeded' | 'pending' | 'failed';\n\nexport type ApiSponsoredMessage = {\n chatId?: string;\n randomId: string;\n isBot?: boolean;\n channelPostId?: number;\n startParam?: string;\n chatInviteHash?: string;\n chatInviteTitle?: string;\n text: ApiFormattedText;\n expiresAt: number;\n};\n\nexport interface ApiKeyboardButton {\n type: 'command' | 'url' | 'callback' | 'requestPoll' | 'requestSelfContact' | 'buy' | 'NOT_SUPPORTED';\n text: string;\n messageId: number;\n value?: string;\n}\n\nexport type ApiKeyboardButtons = ApiKeyboardButton[][];\nexport type ApiReplyKeyboard = {\n keyboardPlaceholder?: string;\n isKeyboardSingleUse?: boolean;\n} & {\n [K in 'inlineButtons' | 'keyboardButtons']?: ApiKeyboardButtons;\n};\n\nexport type ApiMessageSearchType = 'text' | 'media' | 'documents' | 'links' | 'audio' | 'voice' | 'profilePhoto';\nexport type ApiGlobalMessageSearchType = 'text' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\n\nexport type ApiReportReason = 'spam' | 'violence' | 'pornography' | 'childAbuse'\n| 'copyright' | 'geoIrrelevant' | 'fake' | 'other';\n\nexport type ApiSendMessageAction = {\n type: 'cancel' | 'typing' | 'recordAudio' | 'chooseSticker';\n};\n\nexport const MAIN_THREAD_ID = -1;\n\n// `Symbol` can not be transferred from worker\nexport const MESSAGE_DELETED = 'MESSAGE_DELETED';\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-bitwise */\n\nconst utf16 = {\n // The utf16-class is necessary to convert from javascripts internal character representation to unicode and back.\n decode: (input) => {\n const output = [];\n let i = 0;\n const len = input.length;\n let value;\n let extra;\n\n while (i < len) {\n value = input.charCodeAt(i++);\n if ((value & 0xf800) === 0xd800) {\n extra = input.charCodeAt(i++);\n if ((value & 0xfc00) !== 0xd800 || (extra & 0xfc00) !== 0xdc00) {\n throw new RangeError('UTF-16(decode): Illegal UTF-16 sequence');\n }\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n output.push(value);\n }\n return output;\n },\n encode: (input) => {\n const output = [];\n let i = 0;\n const len = input.length;\n let value;\n\n while (i < len) {\n value = input[i++];\n if ((value & 0xf800) === 0xd800) {\n throw new RangeError('UTF-16(encode): Illegal UTF-16 value');\n }\n if (value > 0xffff) {\n value -= 0x10000;\n output.push(String.fromCharCode(((value >>> 10) & 0x3ff) | 0xd800));\n value = 0xdc00 | (value & 0x3ff);\n }\n output.push(String.fromCharCode(value));\n }\n return output.join('');\n },\n};\n\n// Default parameters\nconst initial_n = 0x80;\nconst initial_bias = 72;\nconst delimiter = '\\x2D';\nconst base = 36;\nconst damp = 700;\nconst tmin = 1;\nconst tmax = 26;\nconst skew = 38;\nconst maxint = 0x7fffffff;\n\n// decode_digit(cp) returns the numeric value of a basic code\n// point (for use in representing integers) in the range 0 to\n// base-1, or base if cp is does not represent a value.\n\nfunction decode_digit(cp) {\n return cp - 48 < 10 ? cp - 22 : cp - 65 < 26 ? cp - 65 : cp - 97 < 26 ? cp - 97 : base;\n}\n\n// ** Bias adaptation function **\nfunction adapt(delta, numpoints, firsttime) {\n let k;\n delta = firsttime ? Math.floor(delta / damp) : delta >> 1;\n delta += Math.floor(delta / numpoints);\n\n for (k = 0; delta > ((base - tmin) * tmax) >> 1; k += base) {\n delta = Math.floor(delta / (base - tmin));\n }\n return Math.floor(k + ((base - tmin + 1) * delta) / (delta + skew));\n}\n\n// Main decode\nfunction decode(input, preserveCase) {\n // Dont use utf16\n const output = [];\n const case_flags = [];\n const input_length = input.length;\n\n let n; let out; let i; let bias; let basic; let j; let ic; let oldi; let w; let k; let digit; let t; let len;\n\n // Initialize the state:\n\n n = initial_n;\n i = 0;\n bias = initial_bias;\n\n // Handle the basic code points: Let basic be the number of input code\n // points before the last delimiter, or 0 if there is none, then\n // copy the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n if (basic < 0) basic = 0;\n\n for (j = 0; j < basic; ++j) {\n if (preserveCase) case_flags[output.length] = input.charCodeAt(j) - 65 < 26;\n if (input.charCodeAt(j) >= 0x80) {\n throw new RangeError('Illegal input >= 0x80');\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: Start just after the last delimiter if any\n // basic code points were copied; start at the beginning otherwise.\n\n for (ic = basic > 0 ? basic + 1 : 0; ic < input_length;) {\n // ic is the index of the next character to be consumed,\n\n // Decode a generalized variable-length integer into delta,\n // which gets added to i. The overflow checking is easier\n // if we increase i as we go, then subtract off its starting\n // value at the end to obtain delta.\n for (oldi = i, w = 1, k = base; ; k += base) {\n if (ic >= input_length) {\n throw RangeError('punycode_bad_input(1)');\n }\n digit = decode_digit(input.charCodeAt(ic++));\n\n if (digit >= base) {\n throw RangeError('punycode_bad_input(2)');\n }\n if (digit > Math.floor((maxint - i) / w)) {\n throw RangeError('punycode_overflow(1)');\n }\n i += digit * w;\n t = k <= bias ? tmin : k >= bias + tmax ? tmax : k - bias;\n if (digit < t) {\n break;\n }\n if (w > Math.floor(maxint / (base - t))) {\n throw RangeError('punycode_overflow(2)');\n }\n w *= base - t;\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi === 0);\n\n // i was supposed to wrap around from out to 0,\n // incrementing n each time, so we'll fix that now:\n if (Math.floor(i / out) > maxint - n) {\n throw RangeError('punycode_overflow(3)');\n }\n n += Math.floor(i / out);\n i %= out;\n\n // Insert n at position i of the output:\n // Case of last character determines uppercase flag:\n if (preserveCase) {\n case_flags.splice(i, 0, input.charCodeAt(ic - 1) - 65 < 26);\n }\n\n output.splice(i, 0, n);\n i++;\n }\n if (preserveCase) {\n for (i = 0, len = output.length; i < len; i++) {\n if (case_flags[i]) {\n output[i] = String.fromCharCode(output[i])\n .toUpperCase()\n .charCodeAt(0);\n }\n }\n }\n return utf16.encode(output);\n}\n\nfunction toUnicode(domain) {\n const domain_array = domain.split('.');\n const out = [];\n for (let i = 0; i < domain_array.length; ++i) {\n const s = domain_array[i];\n out.push(s.match(/^xn--/) ? decode(s.slice(4)) : s);\n }\n return out.join('.');\n}\n\nexport default toUnicode;\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\nimport convertPunycode from '../../lib/punycode';\n\nimport {\n DEBUG, RE_TG_LINK, RE_TME_LINK,\n} from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport { ensureProtocol } from '../../util/ensureProtocol';\n\ntype OwnProps = {\n url?: string;\n text: string;\n className?: string;\n children?: any;\n isRtl?: boolean;\n};\n\nconst SafeLink: FC = ({\n url,\n text,\n className,\n children,\n isRtl,\n}) => {\n const { toggleSafeLinkModal, openTelegramLink } = getDispatch();\n\n const content = children || text;\n const isNotSafe = url !== content;\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (\n e.ctrlKey || e.altKey || e.shiftKey || e.metaKey\n || !url || (!url.match(RE_TME_LINK) && !url.match(RE_TG_LINK))\n ) {\n if (isNotSafe) {\n toggleSafeLinkModal({ url });\n\n e.preventDefault();\n return false;\n }\n\n return true;\n }\n\n e.preventDefault();\n openTelegramLink({ url });\n\n return false;\n }, [isNotSafe, openTelegramLink, toggleSafeLinkModal, url]);\n\n if (!url) {\n return undefined;\n }\n\n const classNames = buildClassName(\n className || 'text-entity-link',\n text.length > 50 && 'long-word-break-all',\n );\n\n return (\n \n {content}\n \n );\n};\n\nfunction getDomain(url?: string) {\n if (!url) {\n return undefined;\n }\n\n const href = ensureProtocol(url);\n if (!href) {\n return undefined;\n }\n\n try {\n let decodedHref = decodeURI(href);\n\n const match = decodedHref.match(/^https?:\\/\\/([^/:?#]+)(?:[/:?#]|$)/i);\n if (!match) {\n return undefined;\n }\n const domain = match[1];\n decodedHref = decodedHref.replace(domain, convertPunycode(domain));\n\n return decodedHref;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('SafeLink.getDecodedUrl error ', url, error);\n }\n }\n\n return undefined;\n}\n\nexport default memo(SafeLink);\n","import { ApiDocument } from '../../../api/types';\n\nconst ONE_GIGABYTE = 1024 * 1024 * 1024;\nconst ONE_MEGABYTE = 1024 * 1024;\n\nexport function getFileSizeString(bytes: number) {\n if (bytes > (ONE_GIGABYTE / 2)) {\n return `${(bytes / ONE_GIGABYTE).toFixed(1)} GB`;\n }\n if (bytes > (ONE_MEGABYTE / 2)) {\n return `${(bytes / ONE_MEGABYTE).toFixed(1)} MB`;\n }\n return `${(bytes / (1024)).toFixed(1)} KB`;\n}\n\nexport function getDocumentExtension(document: ApiDocument) {\n const { fileName, mimeType } = document;\n\n return getFileExtension(fileName, mimeType);\n}\n\nexport function getFileExtension(fileName: string, mimeType: string) {\n if (fileName && fileName.indexOf('.') !== -1) {\n return fileName.split('.').pop();\n } else {\n return mimeType.split('/').pop();\n }\n}\n\nexport function getColorFromExtension(extension: string) {\n switch (extension) {\n case 'apk':\n case 'xls':\n case 'xlsx':\n return 'green';\n case 'zip':\n case 'rar':\n case '7z':\n case 'tar':\n case 'gz':\n case 'ppt':\n case 'pptx':\n return 'orange';\n case 'pdf':\n case 'xps':\n return 'red';\n default:\n return 'default';\n }\n}\n\nexport function getDocumentHasPreview(document: ApiDocument) {\n return Boolean(document.previewBlobUrl || document.thumbnail);\n}\n","import twemojiRegex from '../../../lib/twemojiRegex';\n\nconst DETECT_UP_TO = 3;\nconst MAX_LENGTH = DETECT_UP_TO * 8; // Maximum 8 per one emoji.\nconst RE_EMOJI_ONLY = new RegExp(`^(?:${twemojiRegex.source})+$`, '');\n\nconst parseEmojiOnlyString = (text: string): number | false => {\n if (text.length > MAX_LENGTH) {\n return false;\n }\n\n const isEmojiOnly = Boolean(text.match(RE_EMOJI_ONLY));\n if (!isEmojiOnly) {\n return false;\n }\n\n let emojiCount = 0;\n while (twemojiRegex.exec(text)) {\n emojiCount++;\n\n if (emojiCount > DETECT_UP_TO) {\n twemojiRegex.lastIndex = 0;\n return false;\n }\n }\n\n return emojiCount;\n};\n\nexport default parseEmojiOnlyString;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport { ApiChat, ApiUser } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\nimport { getDispatch } from '../../lib/teact/teactn';\n\ntype OwnProps = {\n className?: string;\n sender?: ApiUser | ApiChat;\n children: any;\n};\n\nconst UserLink: FC = ({\n className, sender, children,\n}) => {\n const { openChat } = getDispatch();\n\n const handleClick = useCallback(() => {\n if (sender) {\n openChat({ id: sender.id });\n }\n }, [sender, openChat]);\n\n if (!sender) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default UserLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\n\ntype OwnProps = {\n className?: string;\n message?: ApiMessage;\n children: any;\n};\n\nconst MessageLink: FC = ({\n className, message, children,\n}) => {\n const { focusMessage } = getDispatch();\n\n const handleMessageClick = useCallback((): void => {\n if (message) {\n focusMessage({ chatId: message.chatId, messageId: message.id });\n }\n }, [focusMessage, message]);\n\n if (!message) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default MessageLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\n\ntype OwnProps = {\n className?: string;\n chatId?: string;\n children: any;\n};\n\nconst ChatLink: FC = ({\n className, chatId, children,\n}) => {\n const { openChat } = getDispatch();\n\n const handleClick = useCallback(() => {\n if (chatId) {\n openChat({ id: chatId });\n }\n }, [chatId, openChat]);\n\n if (!chatId) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default ChatLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport { ApiGroupCall } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\nimport { getDispatch } from '../../lib/teact/teactn';\n\ntype OwnProps = {\n className?: string;\n groupCall?: Partial;\n children: any;\n};\n\nconst GroupCallLink: FC = ({\n className, groupCall, children,\n}) => {\n const { joinGroupCall } = getDispatch();\n\n const handleClick = useCallback(() => {\n if (groupCall) {\n joinGroupCall({ id: groupCall.id, accessHash: groupCall.accessHash });\n }\n }, [groupCall, joinGroupCall]);\n\n if (!groupCall) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default GroupCallLink;\n","import React from '../../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMessage, ApiUser, ApiGroupCall,\n} from '../../../api/types';\nimport { LangFn } from '../../../hooks/useLang';\nimport {\n getChatTitle,\n getMessageSummaryText,\n getUserFullName,\n} from '../../../modules/helpers';\nimport trimText from '../../../util/trimText';\nimport { formatCurrency } from '../../../util/formatCurrency';\nimport { TextPart, renderMessageSummary } from './renderMessageText';\nimport renderText from './renderText';\n\nimport UserLink from '../UserLink';\nimport MessageLink from '../MessageLink';\nimport ChatLink from '../ChatLink';\nimport GroupCallLink from '../GroupCallLink';\n\ninterface RenderOptions {\n asPlainText?: boolean;\n asTextWithSpoilers?: boolean;\n}\n\nconst MAX_LENGTH = 32;\nconst NBSP = '\\u00A0';\n\nexport function renderActionMessageText(\n lang: LangFn,\n message: ApiMessage,\n actionOriginUser?: ApiUser,\n actionOriginChat?: ApiChat,\n targetUsers?: ApiUser[],\n targetMessage?: ApiMessage,\n targetChatId?: string,\n options: RenderOptions = {},\n) {\n if (!message.content.action) {\n return [];\n }\n\n const {\n text, translationValues, amount, currency, call,\n } = message.content.action;\n const content: TextPart[] = [];\n const noLinks = options.asPlainText || options.asTextWithSpoilers;\n const translationKey = text === 'Chat.Service.Group.UpdatedPinnedMessage1' && !targetMessage\n ? 'Message.PinnedGenericMessage'\n : text;\n\n let unprocessed = lang(translationKey, translationValues?.length ? translationValues : undefined);\n let processed: TextPart[];\n\n if (unprocessed.includes('%payment_amount%')) {\n processed = processPlaceholder(\n unprocessed,\n '%payment_amount%',\n formatCurrency(amount!, currency, lang.code),\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n }\n\n processed = processPlaceholder(\n unprocessed,\n '%action_origin%',\n actionOriginUser ? (\n renderUserContent(actionOriginUser, noLinks) || NBSP\n ) : actionOriginChat ? (\n renderChatContent(lang, actionOriginChat, noLinks) || NBSP\n ) : 'User',\n );\n\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%target_user%',\n targetUsers\n ? targetUsers.map((user) => renderUserContent(user, noLinks)).filter(Boolean as any)\n : 'User',\n );\n\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%message%',\n targetMessage\n ? renderMessageContent(lang, targetMessage, options)\n : 'a message',\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%product%',\n targetMessage\n ? renderProductContent(targetMessage)\n : 'a product',\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%target_chat%',\n targetChatId\n ? renderMigratedContent(targetChatId, noLinks)\n : 'another chat',\n );\n content.push(...processed);\n\n if (options.asPlainText) {\n return content.join('').trim();\n }\n\n if (call) {\n return renderGroupCallContent(call, content);\n }\n\n return content;\n}\n\nfunction renderProductContent(message: ApiMessage) {\n return message.content && message.content.invoice\n ? message.content.invoice.title\n : 'a product';\n}\n\nfunction renderMessageContent(lang: LangFn, message: ApiMessage, options: RenderOptions = {}) {\n const { asPlainText, asTextWithSpoilers } = options;\n\n if (asPlainText) {\n return getMessageSummaryText(lang, message, undefined, MAX_LENGTH);\n }\n\n const messageSummary = renderMessageSummary(lang, message, undefined, undefined, MAX_LENGTH);\n\n if (asTextWithSpoilers) {\n return (\n {messageSummary}\n );\n }\n\n return (\n {messageSummary}\n );\n}\n\nfunction renderGroupCallContent(groupCall: Partial, text: TextPart[]): string | TextPart | undefined {\n return (\n \n {text}\n \n );\n}\n\nfunction renderUserContent(sender: ApiUser, noLinks?: boolean): string | TextPart | undefined {\n const text = trimText(getUserFullName(sender), MAX_LENGTH);\n\n if (noLinks) {\n return text;\n }\n\n return {sender && renderText(text!)};\n}\n\nfunction renderChatContent(lang: LangFn, chat: ApiChat, noLinks?: boolean): string | TextPart | undefined {\n const text = trimText(getChatTitle(lang, chat), MAX_LENGTH);\n\n if (noLinks) {\n return text;\n }\n\n return {chat && renderText(text!)};\n}\n\nfunction renderMigratedContent(chatId: string, noLinks?: boolean): string | TextPart | undefined {\n const text = 'another chat';\n\n if (noLinks) {\n return text;\n }\n\n return {text};\n}\n\nfunction processPlaceholder(text: string, placeholder: string, replaceValue?: TextPart | TextPart[]): TextPart[] {\n const placeholderPosition = text.indexOf(placeholder);\n if (placeholderPosition < 0 || !replaceValue) {\n return [text];\n }\n\n const content: TextPart[] = [];\n content.push(text.substring(0, placeholderPosition));\n if (Array.isArray(replaceValue)) {\n replaceValue.forEach((value, index) => {\n content.push(value);\n if (index + 1 < replaceValue.length) {\n content.push(', ');\n }\n });\n } else {\n content.push(replaceValue);\n }\n content.push(text.substring(placeholderPosition + placeholder.length));\n\n return content;\n}\n","import { ApiMessage, ApiMessageEntityTypes } from '../../../api/types';\nimport {\n getMessageSummaryDescription,\n getMessageSummaryEmoji,\n getMessageSummaryText,\n getMessageText,\n TRUNCATED_SUMMARY_LENGTH,\n} from '../../../modules/helpers';\nimport { LangFn } from '../../../hooks/useLang';\nimport renderText from './renderText';\nimport { renderTextWithEntities, TextPart } from './renderTextWithEntities';\nimport trimText from '../../../util/trimText';\n\nexport type { TextPart };\n\nexport function renderMessageText(\n message: ApiMessage,\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n isSimple?: boolean,\n truncateLength?: number,\n) {\n const { text, entities } = message.content.text || {};\n\n if (!text) {\n const contentNotSupportedText = getMessageText(message);\n return contentNotSupportedText ? [trimText(contentNotSupportedText, truncateLength)] : undefined;\n }\n\n return renderTextWithEntities(\n trimText(text, truncateLength),\n entities,\n highlight,\n shouldRenderHqEmoji,\n undefined,\n message.id,\n isSimple,\n );\n}\n\nexport function renderMessageSummary(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n highlight?: string,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n): TextPart[] {\n let { entities } = message.content.text || {};\n\n const hasSpoilers = entities?.some((e) => e.type === ApiMessageEntityTypes.Spoiler);\n if (!hasSpoilers) {\n const text = trimText(getMessageSummaryText(lang, message, noEmoji), truncateLength);\n\n if (highlight) {\n return renderText(text, ['emoji', 'highlight'], { highlight });\n } else {\n return renderText(text);\n }\n }\n\n const emoji = !noEmoji && getMessageSummaryEmoji(message);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n\n const text = renderMessageText(message, highlight, undefined, true, truncateLength);\n const description = getMessageSummaryDescription(lang, message, text);\n\n return [\n emojiWithSpace,\n ...(Array.isArray(description) ? description : [description]),\n ].filter(Boolean);\n}\n","import React from '../../../lib/teact/teact';\nimport EMOJI_REGEX, { removeVS16s } from '../../../lib/twemojiRegex';\n\nimport { RE_LINK_TEMPLATE, RE_MENTION_TEMPLATE } from '../../../config';\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\nimport { fixNonStandardEmoji, nativeToUnified } from '../../../util/emoji';\nimport buildClassName from '../../../util/buildClassName';\nimport { compact } from '../../../util/iteratees';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\n\ntype TextPart = string | Element;\nexport type TextFilter = (\n 'escape_html' | 'hq_emoji' | 'emoji' | 'emoji_html' | 'br' | 'br_html' | 'highlight' | 'links' |\n 'simple_markdown' | 'simple_markdown_html'\n);\n\nconst RE_LETTER_OR_DIGIT = /^[\\d\\wа-яё]$/i;\nconst SIMPLE_MARKDOWN_REGEX = /(\\*\\*|__).+?\\1/g;\n\nexport default function renderText(\n part: TextPart,\n filters: Array = ['emoji'],\n params?: { highlight: string | undefined },\n): TextPart[] {\n if (typeof part !== 'string') {\n return [part];\n }\n\n return compact(filters.reduce((text, filter) => {\n switch (filter) {\n case 'escape_html':\n return escapeHtml(text);\n\n case 'hq_emoji':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'big', 'jsx');\n\n case 'emoji':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'small', 'jsx');\n\n case 'emoji_html':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'small', 'html');\n\n case 'br':\n return addLineBreaks(text, 'jsx');\n\n case 'br_html':\n return addLineBreaks(text, 'html');\n\n case 'highlight':\n return addHighlight(text, params!.highlight);\n\n case 'links':\n return addLinks(text);\n\n case 'simple_markdown':\n return replaceSimpleMarkdown(text, 'jsx');\n\n case 'simple_markdown_html':\n return replaceSimpleMarkdown(text, 'html');\n }\n\n return text;\n }, [part] as TextPart[]));\n}\n\nfunction escapeHtml(textParts: TextPart[]): TextPart[] {\n const divEl = document.createElement('div');\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n divEl.innerText = part;\n result.push(divEl.innerHTML);\n\n return result;\n }, [] as TextPart[]);\n}\n\nfunction replaceEmojis(textParts: TextPart[], size: 'big' | 'small', type: 'jsx' | 'html'): TextPart[] {\n if (IS_EMOJI_SUPPORTED) {\n return textParts;\n }\n\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n part = fixNonStandardEmoji(part);\n const parts = part.split(EMOJI_REGEX);\n const emojis = part.match(EMOJI_REGEX) || [];\n result.push(parts[0]);\n\n return emojis.reduce((emojiResult: TextPart[], emoji, i) => {\n const code = nativeToUnified(removeVS16s(emoji));\n if (!code) return emojiResult;\n const className = buildClassName(\n 'emoji',\n size === 'small' && 'emoji-small',\n );\n if (type === 'jsx') {\n emojiResult.push(\n ,\n );\n }\n if (type === 'html') {\n emojiResult.push(\n // For preventing extra spaces in html\n // eslint-disable-next-line max-len\n `\"${emoji}\"`,\n );\n }\n\n const index = i * 2 + 2;\n if (parts[index]) {\n emojiResult.push(parts[index]);\n }\n\n return emojiResult;\n }, result);\n }, [] as TextPart[]);\n}\n\nfunction addLineBreaks(textParts: TextPart[], type: 'jsx' | 'html'): TextPart[] {\n return textParts.reduce((result: TextPart[], part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const splittenParts = part\n .split(/\\r\\n|\\r|\\n/g)\n .reduce((parts: TextPart[], line: string, i, source) => {\n // This adds non-breaking space if line was indented with spaces, to preserve the indentation\n const trimmedLine = line.trimLeft();\n const indentLength = line.length - trimmedLine.length;\n parts.push(String.fromCharCode(160).repeat(indentLength) + trimmedLine);\n\n if (i !== source.length - 1) {\n parts.push(\n type === 'jsx' ?
: '
',\n );\n }\n\n return parts;\n }, []);\n\n return [...result, ...splittenParts];\n }, []);\n}\n\nfunction addHighlight(textParts: TextPart[], highlight: string | undefined): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string' || !highlight) {\n result.push(part);\n return result;\n }\n\n const lowerCaseText = part.toLowerCase();\n const queryPosition = lowerCaseText.indexOf(highlight.toLowerCase());\n const nextSymbol = lowerCaseText[queryPosition + highlight.length];\n if (queryPosition < 0 || (nextSymbol && nextSymbol.match(RE_LETTER_OR_DIGIT))) {\n result.push(part);\n return result;\n }\n\n const newParts: TextPart[] = [];\n newParts.push(part.substring(0, queryPosition));\n newParts.push(\n \n {part.substring(queryPosition, queryPosition + highlight.length)}\n ,\n );\n newParts.push(part.substring(queryPosition + highlight.length));\n\n return [...result, ...newParts];\n }, [] as TextPart[]);\n}\n\nconst RE_LINK = new RegExp(`${RE_LINK_TEMPLATE}|${RE_MENTION_TEMPLATE}`, 'ig');\n\nfunction addLinks(textParts: TextPart[]): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const links = part.match(RE_LINK);\n if (!links || !links.length) {\n result.push(part);\n return result;\n }\n\n const content: TextPart[] = [];\n\n let nextLink = links.shift();\n let lastIndex = 0;\n while (nextLink) {\n const index = part.indexOf(nextLink, lastIndex);\n content.push(part.substring(lastIndex, index));\n if (nextLink.startsWith('@')) {\n content.push(\n \n {nextLink}\n ,\n );\n } else {\n if (nextLink.endsWith('?')) {\n nextLink = nextLink.slice(0, nextLink.length - 1);\n }\n\n content.push(\n ,\n );\n }\n lastIndex = index + nextLink.length;\n nextLink = links.shift();\n }\n content.push(part.substring(lastIndex));\n\n return [...result, ...content];\n }, [] as TextPart[]);\n}\n\nfunction replaceSimpleMarkdown(textParts: TextPart[], type: 'jsx' | 'html'): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const parts = part.split(SIMPLE_MARKDOWN_REGEX);\n const entities = part.match(SIMPLE_MARKDOWN_REGEX) || [];\n result.push(parts[0]);\n\n return entities.reduce((entityResult: TextPart[], entity, i) => {\n if (type === 'jsx') {\n entityResult.push(\n entity.startsWith('**')\n ? {entity.replace(/\\*\\*/g, '')}\n : {entity.replace(/__/g, '')},\n );\n } else {\n entityResult.push(\n entity.startsWith('**')\n ? `${entity.replace(/\\*\\*/g, '')}`\n : `${entity.replace(/__/g, '')}`,\n );\n }\n\n const index = i * 2 + 2;\n if (parts[index]) {\n entityResult.push(parts[index]);\n }\n\n return entityResult;\n }, result);\n }, [] as TextPart[]);\n}\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\n\nimport './Spoiler.scss';\n\ntype OwnProps = {\n children?: React.ReactNode;\n messageId?: number;\n};\n\nconst READING_SYMBOLS_PER_SECOND = 23; // Heuristics\nconst MIN_HIDE_TIMEOUT = 5000; // 5s\nconst MAX_HIDE_TIMEOUT = 60000; // 1m\n\nconst actionsByMessageId: Map = new Map();\n\nconst buildClassName = createClassNameBuilder('Spoiler');\n\nconst Spoiler: FC = ({\n children,\n messageId,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n\n const [isRevealed, reveal, conceal] = useFlag();\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n actionsByMessageId.get(messageId!)?.forEach((actions) => actions.reveal());\n\n const contentLength = contentRef.current!.innerText.length;\n const readingMs = Math.round(contentLength / READING_SYMBOLS_PER_SECOND) * 1000;\n const timeoutMs = Math.max(MIN_HIDE_TIMEOUT, Math.min(readingMs, MAX_HIDE_TIMEOUT));\n\n setTimeout(() => {\n actionsByMessageId.get(messageId!)?.forEach((actions) => actions.conceal());\n conceal();\n }, timeoutMs);\n }, [conceal, messageId]);\n\n useEffect(() => {\n if (!messageId) {\n return undefined;\n }\n\n if (actionsByMessageId.has(messageId)) {\n actionsByMessageId.get(messageId)!.push({ reveal, conceal });\n } else {\n actionsByMessageId.set(messageId, [{ reveal, conceal }]);\n }\n\n return () => {\n actionsByMessageId.delete(messageId);\n };\n }, [conceal, handleClick, isRevealed, messageId, reveal]);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(Spoiler);\n","import { MouseEvent } from 'react';\nimport React from '../../../lib/teact/teact';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nimport { ApiFormattedText, ApiMessageEntity, ApiMessageEntityTypes } from '../../../api/types';\nimport renderText, { TextFilter } from './renderText';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\nimport Spoiler from '../spoiler/Spoiler';\n\nexport type TextPart =\n string\n | Element;\n\ninterface IOrganizedEntity {\n entity: ApiMessageEntity;\n organizedIndexes: Set;\n nestedEntities: IOrganizedEntity[];\n}\n\nexport function renderTextWithEntities(\n text: string,\n entities?: ApiMessageEntity[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n messageId?: number,\n isSimple?: boolean,\n) {\n if (!entities || !entities.length) {\n return renderMessagePart(text, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple);\n }\n\n const result: TextPart[] = [];\n let deleteLineBreakAfterPre = false;\n\n const organizedEntities = organizeEntities(entities);\n\n // Recursive function to render regular and nested entities\n function renderEntity(\n textPartStart: number,\n textPartEnd: number,\n organizedEntity: IOrganizedEntity,\n isLastEntity: boolean,\n ) {\n const renderResult: TextPart[] = [];\n const { entity, nestedEntities } = organizedEntity;\n const { offset, length, type } = entity;\n\n // Render text before the entity\n let textBefore = text.substring(textPartStart, offset);\n const textBeforeLength = textBefore.length;\n if (textBefore) {\n if (deleteLineBreakAfterPre && textBefore.length > 0 && textBefore[0] === '\\n') {\n textBefore = textBefore.substr(1);\n deleteLineBreakAfterPre = false;\n }\n if (textBefore) {\n renderResult.push(...renderMessagePart(\n textBefore, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n const entityStartIndex = textPartStart + textBeforeLength;\n const entityEndIndex = entityStartIndex + length;\n\n let entityContent: TextPart = text.substring(offset, offset + length);\n const nestedEntityContent: TextPart[] = [];\n\n if (deleteLineBreakAfterPre && entityContent.length > 0 && entityContent[0] === '\\n') {\n entityContent = entityContent.substr(1);\n deleteLineBreakAfterPre = false;\n }\n\n if (type === ApiMessageEntityTypes.Pre) {\n deleteLineBreakAfterPre = true;\n }\n\n // Render nested entities, if any\n if (nestedEntities.length) {\n let nestedIndex = entityStartIndex;\n\n nestedEntities.forEach((nestedEntity, nestedEntityIndex) => {\n const {\n renderResult: nestedResult,\n entityEndIndex: nestedEntityEndIndex,\n } = renderEntity(\n nestedIndex,\n entityEndIndex,\n nestedEntity,\n nestedEntityIndex === nestedEntities.length - 1,\n );\n\n nestedEntityContent.push(...nestedResult);\n nestedIndex = nestedEntityEndIndex;\n });\n }\n\n // Render the entity itself\n const newEntity = shouldRenderAsHtml\n ? processEntityAsHtml(entity, entityContent, nestedEntityContent)\n : processEntity(entity, entityContent, nestedEntityContent, highlight, messageId, isSimple);\n\n if (Array.isArray(newEntity)) {\n renderResult.push(...newEntity);\n } else {\n renderResult.push(newEntity);\n }\n\n // Render text after the entity, if it is the last entity in the text,\n // or the last nested entity inside of another entity\n if (isLastEntity && entityEndIndex < textPartEnd) {\n let textAfter = text.substring(entityEndIndex, textPartEnd);\n if (deleteLineBreakAfterPre && textAfter.length > 0 && textAfter[0] === '\\n') {\n textAfter = textAfter.substring(1);\n }\n if (textAfter) {\n renderResult.push(...renderMessagePart(\n textAfter, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n return {\n renderResult,\n entityEndIndex,\n };\n }\n\n // Process highest-level entities\n let index = 0;\n\n organizedEntities.forEach((entity, arrayIndex) => {\n const { renderResult, entityEndIndex } = renderEntity(\n index,\n text.length,\n entity,\n arrayIndex === organizedEntities.length - 1,\n );\n\n result.push(...renderResult);\n index = entityEndIndex;\n });\n\n return result;\n}\n\nexport function getTextWithEntitiesAsHtml(formattedText?: ApiFormattedText) {\n const { text, entities } = formattedText || {};\n if (!text) {\n return '';\n }\n\n const result = renderTextWithEntities(\n text,\n entities,\n undefined,\n undefined,\n true,\n );\n\n if (Array.isArray(result)) {\n return result.join('');\n }\n\n return result;\n}\n\nfunction renderMessagePart(\n content: TextPart | TextPart[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n isSimple?: boolean,\n) {\n if (Array.isArray(content)) {\n const result: TextPart[] = [];\n\n content.forEach((c) => {\n result.push(...renderMessagePart(c, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple));\n });\n\n return result;\n }\n\n if (shouldRenderAsHtml) {\n return renderText(content, ['escape_html', 'emoji_html', 'br_html']);\n }\n\n const emojiFilter = shouldRenderHqEmoji ? 'hq_emoji' : 'emoji';\n\n const filters: TextFilter[] = [emojiFilter];\n if (!isSimple) {\n filters.push('br');\n }\n\n if (highlight) {\n return renderText(content, filters.concat('highlight'), { highlight });\n } else {\n return renderText(content, filters);\n }\n}\n\n// Organize entities in a tree-like structure to better represent how the text will be displayed\nfunction organizeEntities(entities: ApiMessageEntity[]) {\n const organizedEntityIndexes: Set = new Set();\n const organizedEntities: IOrganizedEntity[] = [];\n\n entities.forEach((entity, index) => {\n if (organizedEntityIndexes.has(index)) {\n return;\n }\n\n const organizedEntity = organizeEntity(entity, index, entities, organizedEntityIndexes);\n if (organizedEntity) {\n organizedEntity.organizedIndexes.forEach((organizedIndex) => {\n organizedEntityIndexes.add(organizedIndex);\n });\n\n organizedEntities.push(organizedEntity);\n }\n });\n\n return organizedEntities;\n}\n\nfunction organizeEntity(\n entity: ApiMessageEntity,\n index: number,\n entities: ApiMessageEntity[],\n organizedEntityIndexes: Set,\n): IOrganizedEntity | undefined {\n const { offset, length } = entity;\n const organizedIndexes = new Set([index]);\n\n if (organizedEntityIndexes.has(index)) {\n return undefined;\n }\n\n // Determine any nested entities inside current entity\n const nestedEntities: IOrganizedEntity[] = [];\n const parsedNestedEntities = entities\n .filter((e, i) => i > index && e.offset >= offset && e.offset < offset + length)\n .map((e) => organizeEntity(e, entities.indexOf(e), entities, organizedEntityIndexes))\n .filter(Boolean as any);\n\n parsedNestedEntities.forEach((parsedEntity) => {\n let isChanged = false;\n\n parsedEntity.organizedIndexes.forEach((organizedIndex) => {\n if (!isChanged && !organizedIndexes.has(organizedIndex)) {\n isChanged = true;\n }\n\n organizedIndexes.add(organizedIndex);\n });\n\n if (isChanged) {\n nestedEntities.push(parsedEntity);\n }\n });\n\n return {\n entity,\n organizedIndexes,\n nestedEntities,\n };\n}\n\nfunction processEntity(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n highlight?: string,\n messageId?: number,\n isSimple?: boolean,\n) {\n const entityText = typeof entityContent === 'string' && entityContent;\n const renderedContent = nestedEntityContent.length ? nestedEntityContent : entityContent;\n\n function renderNestedMessagePart() {\n return renderMessagePart(\n renderedContent, highlight, undefined, undefined, isSimple,\n );\n }\n\n if (!entityText) {\n return renderNestedMessagePart();\n }\n\n if (isSimple) {\n const text = renderNestedMessagePart();\n if (entity.type === ApiMessageEntityTypes.Spoiler) {\n return {text};\n }\n return text;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Blockquote:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.BotCommand:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Hashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Cashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Code:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Email:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Italic:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.MentionName:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Mention:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Phone:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Pre:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.Strike:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.TextUrl:\n case ApiMessageEntityTypes.Url:\n return (\n \n {renderNestedMessagePart()}\n
\n );\n case ApiMessageEntityTypes.Underline:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Spoiler:\n return {renderNestedMessagePart()};\n default:\n return renderNestedMessagePart();\n }\n}\n\nfunction processEntityAsHtml(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n) {\n const rawEntityText = typeof entityContent === 'string' && entityContent;\n\n const renderedContent = nestedEntityContent.length\n ? nestedEntityContent.join('')\n : renderText(entityContent, ['escape_html', 'emoji_html', 'br_html']).join('');\n\n if (!rawEntityText) {\n return renderedContent;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Italic:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Underline:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Code:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Pre:\n return `\\`\\`\\`
${renderedContent}
\\`\\`\\``;\n case ApiMessageEntityTypes.Strike:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.MentionName:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Url:\n case ApiMessageEntityTypes.TextUrl:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Spoiler:\n return `${renderedContent}`;\n default:\n return renderedContent;\n }\n}\n\nfunction getLinkUrl(entityContent: string, entity: ApiMessageEntity) {\n const { type, url } = entity;\n return type === ApiMessageEntityTypes.TextUrl && url ? url : entityContent;\n}\n\nfunction handleBotCommandClick(e: MouseEvent) {\n getDispatch().sendBotCommand({ command: e.currentTarget.innerText });\n}\n\nfunction handleHashtagClick(e: MouseEvent) {\n getDispatch().setLocalTextSearchQuery({ query: e.currentTarget.innerText });\n getDispatch().searchTextMessagesLocal();\n}\n","import React from '../../../lib/teact/teact';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport { IS_IOS } from '../../../util/environment';\n\nexport function preventMessageInputBlur(e: React.MouseEvent, withBubbling = false) {\n if (\n IS_IOS\n || !document.activeElement\n || document.activeElement.id !== EDITABLE_INPUT_ID\n || (!withBubbling && e.target !== e.currentTarget)\n ) {\n return;\n }\n\n e.preventDefault();\n}\n\nexport function preventMessageInputBlurWithBubbling(e: React.MouseEvent) {\n preventMessageInputBlur(e, true);\n}\n","import React, { FC } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../modules/selectors';\n\ntype OwnProps = {\n userId?: string;\n username?: string;\n children: any;\n};\n\ntype StateProps = {\n userOrChat?: ApiUser | ApiChat;\n};\n\nconst MentionLink: FC = ({\n username,\n userOrChat,\n children,\n}) => {\n const {\n openChat,\n openChatByUsername,\n } = getDispatch();\n\n const handleClick = () => {\n if (userOrChat) {\n openChat({ id: userOrChat.id });\n } else if (username) {\n openChatByUsername({ username: username.substring(1) });\n }\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport default withGlobal(\n (global, { userId }): StateProps => {\n return {\n userOrChat: userId ? selectUser(global, userId) : undefined,\n };\n },\n)(MentionLink);\n","import { MouseEvent as ReactMouseEvent, RefObject } from 'react';\n\nimport React, {\n FC, useRef, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Spinner from './Spinner';\nimport RippleEffect from './RippleEffect';\n\nimport './Button.scss';\n\nexport type OwnProps = {\n ref?: RefObject;\n type?: 'button' | 'submit' | 'reset';\n children: any;\n size?: 'default' | 'smaller' | 'tiny';\n color?: (\n 'primary' | 'secondary' | 'gray' | 'danger' | 'translucent' | 'translucent-white' | 'translucent-black' | 'dark'\n );\n backgroundImage?: string;\n className?: string;\n round?: boolean;\n pill?: boolean;\n fluid?: boolean;\n isText?: boolean;\n isLoading?: boolean;\n ariaLabel?: string;\n href?: string;\n download?: string;\n disabled?: boolean;\n ripple?: boolean;\n faded?: boolean;\n tabIndex?: number;\n isRtl?: boolean;\n withClickPropagation?: boolean;\n onClick?: (e: ReactMouseEvent) => void;\n onContextMenu?: (e: ReactMouseEvent) => void;\n onMouseDown?: (e: ReactMouseEvent) => void;\n onMouseEnter?: NoneToVoidFunction;\n onMouseLeave?: NoneToVoidFunction;\n onFocus?: NoneToVoidFunction;\n};\n\n// Longest animation duration;\nconst CLICKED_TIMEOUT = 400;\n\nconst Button: FC = ({\n ref,\n type = 'button',\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n children,\n size = 'default',\n color = 'primary',\n backgroundImage,\n className,\n round,\n pill,\n fluid,\n isText,\n isLoading,\n ariaLabel,\n href,\n download,\n disabled,\n ripple,\n faded,\n tabIndex,\n isRtl,\n withClickPropagation,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let elementRef = useRef(null);\n if (ref) {\n elementRef = ref;\n }\n\n const [isClicked, setIsClicked] = useState(false);\n\n const fullClassName = buildClassName(\n 'Button',\n className,\n size,\n color,\n round && 'round',\n pill && 'pill',\n fluid && 'fluid',\n disabled && 'disabled',\n isText && 'text',\n isLoading && 'loading',\n ripple && 'has-ripple',\n faded && 'faded',\n isClicked && 'clicked',\n backgroundImage && 'with-image',\n );\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (!disabled && onClick) {\n onClick(e);\n }\n\n setIsClicked(true);\n setTimeout(() => {\n setIsClicked(false);\n }, CLICKED_TIMEOUT);\n }, [disabled, onClick]);\n\n const handleMouseDown = useCallback((e: ReactMouseEvent) => {\n if (!withClickPropagation) e.preventDefault();\n if (!disabled && onMouseDown) {\n onMouseDown(e);\n }\n }, [onMouseDown, disabled, withClickPropagation]);\n\n if (href) {\n return (\n }\n className={fullClassName}\n href={href}\n title={ariaLabel}\n download={download}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n >\n {children}\n {!disabled && ripple && (\n \n )}\n \n );\n }\n\n return (\n // eslint-disable-next-line react/button-has-type\n }\n type={type}\n className={fullClassName}\n onClick={handleClick}\n onContextMenu={onContextMenu}\n onMouseDown={handleMouseDown}\n onMouseEnter={onMouseEnter && !disabled ? onMouseEnter : undefined}\n onMouseLeave={onMouseLeave && !disabled ? onMouseLeave : undefined}\n onFocus={onFocus && !disabled ? onFocus : undefined}\n aria-label={ariaLabel}\n title={ariaLabel}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n style={backgroundImage ? `background-image: url(${backgroundImage})` : undefined}\n >\n {isLoading ? (\n
\n Please wait...\n \n
\n ) : children}\n {!disabled && ripple && (\n \n )}\n \n );\n};\n\nexport default Button;\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport renderText from '../common/helpers/renderText';\n\nimport Spinner from './Spinner';\n\nimport './Checkbox.scss';\n\ntype OwnProps = {\n id?: string;\n name?: string;\n value?: string;\n label: string;\n subLabel?: string;\n checked: boolean;\n disabled?: boolean;\n round?: boolean;\n blocking?: boolean;\n isLoading?: boolean;\n withCheckedCallback?: boolean;\n onChange?: (e: ChangeEvent) => void;\n onCheck?: (isChecked: boolean) => void;\n};\n\nconst Checkbox: FC = ({\n id,\n name,\n value,\n label,\n subLabel,\n checked,\n disabled,\n round,\n blocking,\n isLoading,\n onChange,\n onCheck,\n}) => {\n const lang = useLang();\n const handleChange = useCallback((event: ChangeEvent) => {\n if (onChange) {\n onChange(event);\n }\n\n if (onCheck) {\n onCheck(event.currentTarget.checked);\n }\n }, [onChange, onCheck]);\n\n const className = buildClassName(\n 'Checkbox',\n disabled && 'disabled',\n round && 'round',\n isLoading && 'loading',\n blocking && 'blocking',\n );\n\n return (\n \n );\n};\n\nexport default memo(Checkbox);\n","import React, { FC, useState, useRef } from '../../lib/teact/teact';\n\nimport Menu from './Menu';\n\nimport './DropdownMenu.scss';\n\ntype OwnProps = {\n className?: string;\n trigger: FC<{ onTrigger: () => void; isOpen?: boolean }>;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n footer?: string;\n forceOpen?: boolean;\n onOpen?: NoneToVoidFunction;\n onClose?: NoneToVoidFunction;\n children: any;\n};\n\nconst DropdownMenu: FC = ({\n trigger,\n className,\n children,\n positionX = 'left',\n positionY = 'top',\n footer,\n forceOpen,\n onOpen,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const dropdownRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen);\n if (isOpen) {\n if (onClose) onClose();\n } else if (onOpen) onOpen();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const menu = menuRef.current;\n\n if (!isOpen || e.keyCode !== 40 || !menu) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(menu.children);\n\n if (!focusedElement || elementChildren.indexOf(focusedElement) === -1) {\n (elementChildren[0] as HTMLElement).focus();\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n if (onClose) onClose();\n };\n\n return (\n \n {trigger({ onTrigger: toggleIsOpen, isOpen })}\n\n \n {children}\n \n \n );\n};\n\nexport default DropdownMenu;\n","import {\n ChangeEvent, FormEvent, RefObject,\n} from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\ntype OwnProps = {\n ref?: RefObject;\n id?: string;\n className?: string;\n value?: string;\n label?: string;\n error?: string;\n success?: string;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n autoComplete?: string;\n maxLength?: number;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: (e: ChangeEvent) => void;\n onInput?: (e: FormEvent) => void;\n onKeyPress?: (e: React.KeyboardEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n onPaste?: (e: React.ClipboardEvent) => void;\n};\n\nconst InputText: FC = ({\n ref,\n id,\n className,\n value,\n label,\n error,\n success,\n disabled,\n readOnly,\n placeholder,\n autoComplete,\n inputMode,\n maxLength,\n onChange,\n onInput,\n onKeyPress,\n onKeyDown,\n onBlur,\n onPaste,\n}) => {\n const lang = useLang();\n const labelText = error || success || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error ? 'error' : success && 'success',\n disabled && 'disabled',\n readOnly && 'disabled',\n labelText && 'with-label',\n className,\n );\n\n return (\n
\n \n {labelText && (\n \n )}\n
\n );\n};\n\nexport default memo(InputText);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Link.scss';\n\ntype OwnProps = {\n children: any;\n className?: string;\n isRtl?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n};\n\nconst Link: FC = ({\n children, className, isRtl, onClick,\n}) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n onClick!(e);\n }, [onClick]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default Link;\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport Spinner from './Spinner';\nimport buildClassName from '../../util/buildClassName';\n\nimport './Loading.scss';\n\ntype OwnProps = {\n color?: 'blue' | 'white' | 'black' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n onClick?: NoneToVoidFunction;\n};\n\nconst Loading: FC = ({ color = 'blue', backgroundColor, onClick }) => {\n return (\n
\n \n
\n );\n};\n\nexport default memo(Loading);\n","import { RefObject } from 'react';\nimport React, { FC, useEffect, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useVirtualBackdrop from '../../hooks/useVirtualBackdrop';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\n\nimport './Menu.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n containerRef?: RefObject;\n isOpen: boolean;\n className?: string;\n style?: string;\n bubbleStyle?: string;\n transformOriginX?: number;\n transformOriginY?: number;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n autoClose?: boolean;\n shouldSkipTransition?: boolean;\n footer?: string;\n noCloseOnBackdrop?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onCloseAnimationEnd?: () => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n children: any;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst Menu: FC = ({\n ref,\n containerRef,\n isOpen,\n className,\n style,\n bubbleStyle,\n children,\n transformOriginX,\n transformOriginY,\n positionX = 'left',\n positionY = 'top',\n autoClose = false,\n footer,\n noCloseOnBackdrop = false,\n onCloseAnimationEnd,\n onClose,\n onMouseEnter,\n onMouseLeave,\n shouldSkipTransition,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let menuRef = useRef(null);\n if (ref) {\n menuRef = ref;\n }\n const backdropContainerRef = containerRef || menuRef;\n\n const {\n transitionClassNames,\n } = useShowTransition(\n isOpen,\n onCloseAnimationEnd,\n shouldSkipTransition,\n undefined,\n shouldSkipTransition,\n );\n\n useEffect(\n () => (isOpen && onClose ? captureEscKeyListener(onClose) : undefined),\n [isOpen, onClose],\n );\n\n useHistoryBack(isOpen, onClose, undefined, undefined, autoClose);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n if (isOpen || (!isOpen && prevIsOpen === true)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n }, [isOpen]);\n\n const handleKeyDown = useKeyboardListNavigation(menuRef, isOpen, autoClose ? onClose : undefined, undefined, true);\n\n useVirtualBackdrop(\n isOpen,\n backdropContainerRef,\n noCloseOnBackdrop ? undefined : onClose,\n );\n\n const bubbleClassName = buildClassName(\n 'bubble menu-container custom-scroll',\n positionY,\n positionX,\n footer && 'with-footer',\n transitionClassNames,\n );\n\n const transformOriginYStyle = transformOriginY !== undefined ? `${transformOriginY}px` : undefined;\n const transformOriginXStyle = transformOriginX !== undefined ? `${transformOriginX}px` : undefined;\n\n return (\n \n {isOpen && (\n // This only prevents click events triggering on underlying elements\n
\n )}\n \n {children}\n {footer &&
{footer}
}\n
\n \n );\n};\n\nexport default Menu;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './MenuItem.scss';\n\ntype OnClickHandler = (e: React.SyntheticEvent) => void;\n\ntype OwnProps = {\n icon?: string;\n className?: string;\n children: any;\n onClick?: OnClickHandler;\n href?: string;\n download?: string;\n disabled?: boolean;\n destructive?: boolean;\n ariaLabel?: string;\n};\n\nconst MenuItem: FC = (props) => {\n const {\n icon,\n className,\n children,\n onClick,\n href,\n download,\n disabled,\n destructive,\n ariaLabel,\n } = props;\n\n const lang = useLang();\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 13 && e.keyCode !== 32) {\n return;\n }\n\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const fullClassName = buildClassName(\n 'MenuItem',\n className,\n disabled && 'disabled',\n destructive && 'destructive',\n );\n\n const content = (\n <>\n {icon && (\n \n )}\n {children}\n \n );\n\n if (href) {\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n \n );\n};\n\nexport default MenuItem;\n","import React, {\n FC, useCallback, useMemo, useState, memo,\n} from '../../lib/teact/teact';\nimport { debounce } from '../../util/schedulers';\n\nimport './RippleEffect.scss';\n\ninterface Ripple {\n x: number;\n y: number;\n size: number;\n}\n\nconst ANIMATION_DURATION_MS = 700;\n\nconst RippleEffect: FC = () => {\n const [ripples, setRipples] = useState([]);\n\n const cleanUpDebounced = useMemo(() => {\n return debounce(() => {\n setRipples([]);\n }, ANIMATION_DURATION_MS, false);\n }, []);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (e.button !== 0) {\n return;\n }\n\n const container = e.currentTarget as HTMLDivElement;\n const position = container.getBoundingClientRect() as DOMRect;\n\n const rippleSize = container.offsetWidth / 2;\n\n setRipples([\n ...ripples,\n {\n x: e.clientX - position.x - (rippleSize / 2),\n y: e.clientY - position.y - (rippleSize / 2),\n size: rippleSize,\n },\n ]);\n\n requestAnimationFrame(() => {\n cleanUpDebounced();\n });\n }, [ripples, cleanUpDebounced]);\n\n return (\n
\n {ripples.map(({ x, y, size }) => (\n \n ))}\n
\n );\n};\n\nexport default memo(RippleEffect);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Spinner.scss';\n\nconst Spinner: FC<{\n color?: 'blue' | 'white' | 'black' | 'green' | 'gray' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n}> = ({\n color = 'blue',\n backgroundColor,\n}) => {\n return (\n
\n
\n
\n );\n};\n\nexport default Spinner;\n","export const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION || 'dev';\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v7';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { useEffect } from '../lib/teact/teact';\nimport usePrevious from './usePrevious';\n\nconst useEffectWithPrevDeps = (cb: (args: T | []) => void, dependencies: T, debugKey?: string) => {\n const prevDeps = usePrevious(dependencies);\n return useEffect(() => {\n return cb(prevDeps || []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies, debugKey);\n};\n\nexport default useEffectWithPrevDeps;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useFlag = (initial = false): [boolean, AnyToVoidFunction, AnyToVoidFunction] => {\n const [value, setValue] = useState(initial);\n\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n\n return [value, setTrue, setFalse];\n};\n\nexport default useFlag;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useForceUpdate = () => {\n const [, setTrigger] = useState(false);\n\n return useCallback(() => {\n setTrigger((trigger) => !trigger);\n }, []);\n};\n\nexport default useForceUpdate;\n","import { useEffect } from '../lib/teact/teact';\n\nconst ANIMATION_START_EVENT = 'tt-event-heavy-animation-start';\nconst ANIMATION_END_EVENT = 'tt-event-heavy-animation-end';\n\nlet timeout: number | undefined;\nlet isAnimating = false;\n\n// Make sure to end even if end callback was not called (which was some hardly-reproducible bug)\nconst AUTO_END_TIMEOUT = 1000;\n\nconst useHeavyAnimationCheck = (\n handleAnimationStart: AnyToVoidFunction,\n handleAnimationEnd: AnyToVoidFunction,\n isDisabled = false,\n) => {\n useEffect(() => {\n if (isDisabled) {\n return undefined;\n }\n\n if (isAnimating) {\n handleAnimationStart();\n }\n\n document.addEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n document.addEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n\n return () => {\n document.removeEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n document.removeEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n };\n }, [isDisabled, handleAnimationEnd, handleAnimationStart]);\n};\n\nexport function isHeavyAnimating() {\n return isAnimating;\n}\n\nexport function dispatchHeavyAnimationEvent(duration = AUTO_END_TIMEOUT) {\n if (!isAnimating) {\n isAnimating = true;\n document.dispatchEvent(new Event(ANIMATION_START_EVENT));\n }\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n // Race condition may happen if another `dispatchHeavyAnimationEvent` is called before `onEnd`\n function onEnd() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n isAnimating = false;\n document.dispatchEvent(new Event(ANIMATION_END_EVENT));\n }\n\n timeout = window.setTimeout(onEnd, duration);\n\n return onEnd;\n}\n\nexport default useHeavyAnimationCheck;\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nimport { IS_IOS } from '../util/environment';\nimport usePrevious from './usePrevious';\nimport { getDispatch } from '../lib/teact/teactn';\nimport { areSortedArraysEqual } from '../util/iteratees';\n\ntype HistoryState = {\n currentIndex: number;\n nextStateIndexToReplace: number;\n isHistoryAltered: boolean;\n isDisabled: boolean;\n isEdge: boolean;\n currentIndexes: number[];\n};\n\n// Carefully selected by swiping and observing visual changes\n// TODO: may be different on other devices such as iPad, maybe take dpi into account?\nconst SAFARI_EDGE_BACK_GESTURE_LIMIT = 300;\nconst SAFARI_EDGE_BACK_GESTURE_DURATION = 350;\nexport const LOCATION_HASH = window.location.hash;\nconst PATH_BASE = `${window.location.pathname}${window.location.search}`;\n\nconst historyState: HistoryState = {\n currentIndex: 0,\n nextStateIndexToReplace: -1,\n isHistoryAltered: false,\n isDisabled: false,\n isEdge: false,\n currentIndexes: [],\n};\n\nexport const disableHistoryBack = () => {\n historyState.isDisabled = true;\n};\n\nconst handleTouchStart = (event: TouchEvent) => {\n const x = event.touches[0].pageX;\n\n if (x <= SAFARI_EDGE_BACK_GESTURE_LIMIT || x >= window.innerWidth - SAFARI_EDGE_BACK_GESTURE_LIMIT) {\n historyState.isEdge = true;\n }\n};\n\nconst handleTouchEnd = () => {\n if (historyState.isEdge) {\n setTimeout(() => {\n historyState.isEdge = false;\n }, SAFARI_EDGE_BACK_GESTURE_DURATION);\n }\n};\n\nif (IS_IOS) {\n window.addEventListener('touchstart', handleTouchStart);\n window.addEventListener('touchend', handleTouchEnd);\n window.addEventListener('popstate', handleTouchEnd);\n}\n\nwindow.history.replaceState({ index: historyState.currentIndex }, '', PATH_BASE);\n\nexport default function useHistoryBack(\n isActive: boolean | undefined,\n onBack: ((noDisableAnimation: boolean) => void) | undefined,\n onForward?: (state: any) => void,\n currentState?: any,\n shouldReplaceNext = false,\n hashes?: string[],\n) {\n const indexRef = useRef(-1);\n const isForward = useRef(false);\n const prevIsActive = usePrevious(isActive);\n const isClosed = useRef(true);\n const indexHashRef = useRef<{ index: number; hash: string }[]>([]);\n const prevHashes = usePrevious(hashes);\n const isHashChangedFromEvent = useRef(false);\n\n const handleChange = useCallback((isForceClose = false) => {\n if (!hashes) {\n if (isActive && !isForceClose) {\n isClosed.current = false;\n\n if (isForward.current) {\n isForward.current = false;\n historyState.currentIndexes.push(indexRef.current);\n } else {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n\n historyState.currentIndexes.push(index);\n\n window.history[(\n (\n historyState.currentIndexes.includes(historyState.nextStateIndexToReplace - 1)\n && window.history.state.index !== 0\n && historyState.nextStateIndexToReplace === index\n && !shouldReplaceNext\n )\n ? 'replaceState'\n : 'pushState'\n )]({\n index,\n state: currentState,\n }, '');\n\n indexRef.current = index;\n\n if (shouldReplaceNext) {\n historyState.nextStateIndexToReplace = historyState.currentIndex + 1;\n }\n }, 0);\n }\n }\n\n if ((isForceClose || !isActive) && !isClosed.current) {\n if ((indexRef.current === historyState.currentIndex || !shouldReplaceNext)) {\n historyState.isHistoryAltered = true;\n window.history.back();\n\n setTimeout(() => {\n historyState.nextStateIndexToReplace = -1;\n }, 400);\n }\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(indexRef.current), 1);\n\n isClosed.current = true;\n }\n } else {\n const prev = prevHashes || [];\n if (prev.length < hashes.length) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes.push(index);\n\n window.history.pushState({\n index,\n state: currentState,\n }, '', `#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current.push({\n index,\n hash: hashes[hashes.length - 1],\n });\n }, 0);\n } else {\n const delta = prev.length - hashes.length;\n if (isHashChangedFromEvent.current) {\n isHashChangedFromEvent.current = false;\n } else {\n if (hashes.length !== indexHashRef.current.length) {\n if (delta > 0) {\n const last = indexHashRef.current[indexHashRef.current.length - delta - 1];\n let realDelta = delta;\n if (last) {\n const indexLast = historyState.currentIndexes.findIndex(\n (l) => l === last.index,\n );\n realDelta = historyState.currentIndexes.length - indexLast - 1;\n }\n historyState.isHistoryAltered = true;\n window.history.go(-realDelta);\n const removed = indexHashRef.current.splice(indexHashRef.current.length - delta - 1, delta);\n removed.forEach(({ index }) => {\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(index), 1);\n });\n }\n }\n\n if (hashes.length > 0) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes[historyState.currentIndexes.length - 1] = index;\n\n window.history.replaceState({\n index,\n state: currentState,\n }, '', `${PATH_BASE}#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current[indexHashRef.current.length - 1] = {\n index,\n hash: hashes[hashes.length - 1],\n };\n }, 0);\n }\n }\n }\n }\n }, [currentState, hashes, isActive, prevHashes, shouldReplaceNext]);\n\n useEffect(() => {\n const handlePopState = (event: PopStateEvent) => {\n if (historyState.isHistoryAltered) {\n setTimeout(() => {\n historyState.isHistoryAltered = false;\n }, 0);\n return;\n }\n const { index: i } = event.state;\n const index = i || 0;\n try {\n const currIndex = hashes ? indexHashRef.current[indexHashRef.current.length - 1].index : indexRef.current;\n\n const prev = historyState.currentIndexes[historyState.currentIndexes.indexOf(currIndex) - 1];\n\n if (historyState.isDisabled) return;\n\n if ((!isClosed.current && (index === 0 || index === prev)) || (hashes && (index === 0 || index === prev))) {\n if (hashes) {\n isHashChangedFromEvent.current = true;\n indexHashRef.current.pop();\n }\n\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(currIndex), 1);\n\n if (onBack) {\n if (historyState.isEdge) {\n getDispatch()\n .disableHistoryAnimations();\n }\n onBack(!historyState.isEdge);\n isClosed.current = true;\n }\n } else if (index === currIndex && isClosed.current && onForward && !hashes) {\n isForward.current = true;\n if (historyState.isEdge) {\n getDispatch()\n .disableHistoryAnimations();\n }\n onForward(event.state.state);\n }\n } catch (e) {\n // Forward navigation for hashed is not supported\n }\n };\n\n const hasChanged = hashes\n ? (!prevHashes || !areSortedArraysEqual(prevHashes, hashes))\n : prevIsActive !== isActive;\n\n if (!historyState.isDisabled && hasChanged) {\n handleChange();\n }\n\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [\n currentState, handleChange, hashes, isActive, onBack, onForward, prevHashes, prevIsActive, shouldReplaceNext,\n ]);\n\n return {\n forceClose: () => handleChange(true),\n };\n}\n","import { RefObject } from 'react';\nimport { useState, useCallback, useEffect } from '../lib/teact/teact';\n\nconst useKeyboardListNavigation = (\n elementRef: RefObject,\n isOpen: boolean,\n onSelectWithEnter?: (index: number) => void,\n itemSelector?: string,\n noCaptureFocus?: boolean,\n) => {\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n useEffect(() => {\n setFocusedIndex(-1);\n\n const element = elementRef.current;\n if (isOpen && element && !noCaptureFocus) {\n element.tabIndex = -1;\n element.focus();\n }\n }, [elementRef, isOpen, noCaptureFocus]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n const element = elementRef.current;\n\n if (!element) {\n return;\n }\n\n if (e.keyCode === 13 && onSelectWithEnter) {\n onSelectWithEnter(focusedIndex);\n return;\n }\n\n if (e.keyCode !== 38 && e.keyCode !== 40) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(itemSelector ? element.querySelectorAll(itemSelector) : element.children);\n\n let newIndex = (focusedElement && elementChildren.indexOf(focusedElement)) || focusedIndex;\n\n if (e.keyCode === 38 && newIndex > 0) {\n newIndex--;\n } else if (e.keyCode === 40 && newIndex < elementChildren.length - 1) {\n newIndex++;\n } else if (elementChildren.length === 1) {\n newIndex = 0;\n } else {\n return;\n }\n\n const item = elementChildren[newIndex] as HTMLElement;\n if (item) {\n setFocusedIndex(newIndex);\n item.focus();\n }\n }, [elementRef, onSelectWithEnter, itemSelector, focusedIndex]);\n\n return handleKeyDown;\n};\n\nexport default useKeyboardListNavigation;\n","import * as langProvider from '../util/langProvider';\nimport useForceUpdate from './useForceUpdate';\nimport useOnChange from './useOnChange';\n\nexport type LangFn = typeof langProvider.getTranslation;\n\nconst useLang = (): LangFn => {\n const forceUpdate = useForceUpdate();\n\n useOnChange(() => {\n return langProvider.addCallback(forceUpdate);\n }, [forceUpdate]);\n\n return langProvider.getTranslation;\n};\n\nexport default useLang;\n","import { useEffect } from '../lib/teact/teact';\n\nimport {\n BundleModules, Bundles, getModuleFromMemory, loadModule, addLoadListener,\n} from '../util/moduleLoader';\n\nimport useForceUpdate from './useForceUpdate';\n\nconst useModuleLoader = >(\n bundleName: B, moduleName: M, noLoad = false, autoUpdate = false,\n) => {\n const module = getModuleFromMemory(bundleName, moduleName);\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!autoUpdate) {\n return undefined;\n }\n\n return addLoadListener(forceUpdate);\n }, [autoUpdate, forceUpdate]);\n\n useEffect(() => {\n if (!noLoad && !module) {\n loadModule(bundleName, moduleName).then(forceUpdate);\n }\n }, [bundleName, forceUpdate, module, moduleName, noLoad]);\n\n return module;\n};\n\nexport default useModuleLoader;\n","import usePrevious from './usePrevious';\n\nconst useOnChange = (cb: (args: T | []) => void, dependencies: T) => {\n const prevDeps = usePrevious(dependencies);\n if (!prevDeps || dependencies.some((d, i) => d !== prevDeps[i])) {\n cb(prevDeps || []);\n }\n};\n\nexport default useOnChange;\n","import { useRef } from '../lib/teact/teact';\n\nfunction usePrevious(next: T): T | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined: true): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean) {\n const ref = useRef();\n const { current } = ref;\n if (!shouldSkipUndefined || next !== undefined) {\n ref.current = next;\n }\n\n return current;\n}\n\nexport default usePrevious;\n","import { useRef, useState } from '../lib/teact/teact';\nimport buildClassName from '../util/buildClassName';\n\nconst CLOSE_DURATION = 350;\n\nconst useShowTransition = (\n isOpen = false,\n onCloseTransitionEnd?: () => void,\n noOpenTransition = false,\n className: string | false = 'fast',\n noCloseTransition = false,\n) => {\n const [isClosed, setIsClosed] = useState(!isOpen);\n const closeTimeoutRef = useRef();\n // СSS class should be added in a separate tick to turn on CSS transition.\n const [hasOpenClassName, setHasOpenClassName] = useState(isOpen && noOpenTransition);\n\n if (isOpen) {\n setIsClosed(false);\n setHasOpenClassName(true);\n\n if (closeTimeoutRef.current) {\n window.clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = undefined;\n }\n } else {\n setHasOpenClassName(false);\n\n if (!isClosed && !closeTimeoutRef.current) {\n const exec = () => {\n setIsClosed(true);\n\n if (onCloseTransitionEnd) {\n onCloseTransitionEnd();\n }\n\n closeTimeoutRef.current = undefined;\n };\n\n if (noCloseTransition) {\n exec();\n } else {\n closeTimeoutRef.current = window.setTimeout(exec, CLOSE_DURATION);\n }\n }\n }\n\n // `noCloseTransition`, when set to true, should remove the open class immediately\n const shouldHaveOpenClassName = hasOpenClassName && !(noCloseTransition && !isOpen);\n const isClosing = Boolean(closeTimeoutRef.current);\n const shouldRender = isOpen || isClosing;\n const transitionClassNames = buildClassName(\n className && 'opacity-transition',\n className,\n shouldHaveOpenClassName && 'open',\n shouldRender && 'shown',\n isClosing && 'closing',\n );\n\n return {\n shouldRender,\n transitionClassNames,\n };\n};\n\nexport default useShowTransition;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\n\nconst BACKDROP_CLASSNAME = 'backdrop';\n\n// This effect implements closing menus by clicking outside of them\n// without adding extra elements to the DOM\nexport default function useVirtualBackdrop(\n isOpen: boolean,\n menuRef: RefObject,\n onClose?: () => void | undefined,\n) {\n useEffect(() => {\n const handleEvent = (e: Event) => {\n const menu = menuRef.current;\n const target = e.target as HTMLElement | null;\n if (!menu || !target) {\n return;\n }\n\n if (\n !menu.contains(e.target as Node | null)\n || target.classList.contains(BACKDROP_CLASSNAME)\n ) {\n e.preventDefault();\n e.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n };\n\n if (isOpen && onClose) {\n document.addEventListener('mousedown', handleEvent);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleEvent);\n };\n }, [isOpen, menuRef, onClose]);\n}\n","import { DEBUG } from '../../config';\n\ntype Handler = (e: Event) => void;\ntype DelegationRegistry = Map;\n\nconst NON_BUBBLEABLE_EVENTS = new Set(['scroll', 'mouseenter', 'mouseleave']);\n\nconst documentEventCounters: Record = {};\nconst delegationRegistryByEventType: Record = {};\nconst delegatedEventTypesByElement = new Map>();\n\nexport function addEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n addDelegatedListener(eventType, element, handler);\n } else {\n element.addEventListener(eventType, handler, asCapture);\n }\n}\n\nexport function removeEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n removeDelegatedListener(eventType, element);\n } else {\n element.removeEventListener(eventType, handler, asCapture);\n }\n}\n\nfunction resolveEventType(propName: string, element: HTMLElement) {\n const eventType = propName\n .replace(/^on/, '')\n .replace(/Capture$/, '').toLowerCase();\n\n if (eventType === 'change' && element.tagName !== 'SELECT') {\n // React behavior repeated here.\n // https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput\n return 'input';\n }\n\n if (eventType === 'doubleclick') {\n return 'dblclick';\n }\n\n // Replace focus/blur by their \"bubbleable\" versions\n if (eventType === 'focus') {\n return 'focusin';\n }\n\n if (eventType === 'blur') {\n return 'focusout';\n }\n\n return eventType;\n}\n\nfunction canUseEventDelegation(realEventType: string, element: HTMLElement, asCapture: boolean) {\n return (\n !asCapture\n && !NON_BUBBLEABLE_EVENTS.has(realEventType)\n && element.tagName !== 'VIDEO'\n && element.tagName !== 'IFRAME'\n );\n}\n\nfunction addDelegatedListener(eventType: string, element: HTMLElement, handler: Handler) {\n if (!documentEventCounters[eventType]) {\n documentEventCounters[eventType] = 0;\n document.addEventListener(eventType, handleEvent);\n }\n\n resolveDelegationRegistry(eventType).set(element, handler);\n resolveDelegatedEventTypes(element).add(eventType);\n documentEventCounters[eventType]++;\n}\n\nfunction removeDelegatedListener(eventType: string, element: HTMLElement) {\n documentEventCounters[eventType]--;\n if (!documentEventCounters[eventType]) {\n // Synchronous deletion on 0 will cause perf degradation in the case of 1 element\n // which is not a real case, so it's ok to do it this way\n document.removeEventListener(eventType, handleEvent);\n }\n\n delegationRegistryByEventType[eventType].delete(element);\n delegatedEventTypesByElement.get(element)!.delete(eventType);\n}\n\nexport function removeAllDelegatedListeners(element: HTMLElement) {\n const eventTypes = delegatedEventTypesByElement.get(element);\n if (!eventTypes) {\n return;\n }\n\n eventTypes.forEach((eventType) => removeDelegatedListener(eventType, element));\n delegatedEventTypesByElement.delete(element);\n}\n\nfunction handleEvent(realEvent: Event) {\n const events = delegationRegistryByEventType[realEvent.type];\n\n if (events) {\n let furtherCallsPrevented = false;\n let current: HTMLElement = realEvent.target as HTMLElement;\n\n const stopPropagation = () => {\n furtherCallsPrevented = true;\n };\n\n const preventDefault = () => {\n realEvent.preventDefault();\n };\n\n // Proxy is a simplest way to provide an access to the event property\n const event = new Proxy(realEvent, {\n get(target, p) {\n if (p === 'currentTarget') {\n return current;\n }\n if (p === 'stopPropagation' || p === 'stopImmediatePropagation') {\n return stopPropagation;\n }\n if (p === 'preventDefault') {\n // \"this\" is changed to proxy and one can't call methods via it\n return preventDefault;\n }\n return Reflect.get(target, p);\n },\n });\n\n // This can also be limited by teact root\n while (current && current !== document.body) {\n const handler = events.get(current);\n if (handler) {\n handler(event);\n if (furtherCallsPrevented) {\n return;\n }\n }\n\n current = current.parentNode as HTMLElement;\n }\n }\n}\n\nfunction resolveDelegationRegistry(eventType: string) {\n if (!delegationRegistryByEventType[eventType]) {\n delegationRegistryByEventType[eventType] = new Map();\n }\n\n return delegationRegistryByEventType[eventType];\n}\n\nfunction resolveDelegatedEventTypes(element: HTMLElement) {\n const existing = delegatedEventTypesByElement.get(element);\n if (existing) {\n return existing;\n }\n\n const newSet = new Set();\n delegatedEventTypesByElement.set(element, newSet);\n\n return newSet;\n}\n\nif (DEBUG) {\n document.addEventListener('dblclick', () => {\n const documentListenersCount = Object.keys(documentEventCounters).length;\n const delegatedHandlersCount1 = Object.values(documentEventCounters)\n .reduce((acc, counter) => acc + counter, 0);\n const delegationRegistriesCount = Object.keys(delegationRegistryByEventType).length;\n const delegatedHandlersCount2 = Object.values(delegationRegistryByEventType)\n .reduce((acc, delegationRegistry) => acc + delegationRegistry.size, 0);\n const delegationElementsCount = delegatedEventTypesByElement.size;\n const delegatedEventTypesCount = Array.from(delegatedEventTypesByElement.values())\n .reduce((acc, eventTypes) => acc + eventTypes.size, 0);\n\n // eslint-disable-next-line no-console\n console.warn('DELEGATED EVENTS STATS', {\n delegatedHandlersCount1,\n delegatedHandlersCount2,\n delegatedEventTypesCount,\n delegationRegistriesCount,\n delegationElementsCount,\n documentListenersCount,\n });\n });\n}\n","import {\n hasElementChanged,\n isComponentElement,\n isEmptyElement,\n isRealElement,\n isTextElement,\n mountComponent,\n renderComponent,\n unmountTree,\n getTarget,\n setTarget,\n VirtualElement,\n VirtualElementComponent,\n VirtualRealElement,\n} from './teact';\nimport generateIdFor from '../../util/generateIdFor';\nimport { DEBUG } from '../../config';\nimport { addEventListener, removeEventListener } from './dom-events';\n\ntype VirtualDomHead = {\n children: [VirtualElement] | [];\n};\n\nconst FILTERED_ATTRIBUTES = new Set(['key', 'ref', 'teactFastList', 'teactOrderKey']);\nconst HTML_ATTRIBUTES = new Set(['dir', 'role']);\nconst MAPPED_ATTRIBUTES: { [k: string]: string } = {\n autoPlay: 'autoplay',\n autoComplete: 'autocomplete',\n};\nconst INDEX_KEY_PREFIX = '__indexKey#';\n\nconst headsByElement: Record = {};\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEBUG_virtualTreeSize = 1;\n\nfunction render($element?: VirtualElement, parentEl?: HTMLElement | null) {\n if (!parentEl) {\n return undefined;\n }\n\n let headId = parentEl.getAttribute('data-teact-head-id');\n if (!headId) {\n headId = generateIdFor(headsByElement);\n headsByElement[headId] = { children: [] };\n parentEl.setAttribute('data-teact-head-id', headId);\n }\n\n const $head = headsByElement[headId];\n $head.children = [renderWithVirtual(parentEl, $head.children[0], $element, $head, 0) as VirtualElement];\n\n if (process.env.APP_ENV === 'perf') {\n DEBUG_virtualTreeSize = 0;\n DEBUG_addToVirtualTreeSize($head);\n\n return DEBUG_virtualTreeSize;\n }\n\n return undefined;\n}\n\nfunction renderWithVirtual(\n parentEl: HTMLElement,\n $current: VirtualElement | undefined,\n $new: VirtualElement | undefined,\n $parent: VirtualRealElement | VirtualDomHead,\n index: number,\n {\n skipComponentUpdate = false,\n forceIndex = false,\n fragment,\n moveDirection,\n }: {\n skipComponentUpdate?: boolean;\n forceIndex?: boolean;\n fragment?: DocumentFragment;\n moveDirection?: 'up' | 'down';\n } = {},\n) {\n const isCurrentComponent = $current && isComponentElement($current);\n const isNewComponent = $new && isComponentElement($new);\n\n if (\n !skipComponentUpdate\n && isCurrentComponent && isNewComponent\n && !hasElementChanged($current!, $new!)\n ) {\n $new = updateComponent($current as VirtualElementComponent, $new as VirtualElementComponent);\n }\n\n // Parent element may have changed, so we need to update the listener closure.\n if (!skipComponentUpdate && isNewComponent && ($new as VirtualElementComponent).componentInstance.isMounted) {\n setupComponentUpdateListener($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n if ($current === $new) {\n return $new;\n }\n\n if (!$current && $new) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n\n if (forceIndex && parentEl.childNodes[index]) {\n parentEl.insertBefore(node, parentEl.childNodes[index]);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n } else if ($current && !$new) {\n parentEl.removeChild(getTarget($current)!);\n unmountTree($current);\n } else if ($current && $new) {\n if (hasElementChanged($current, $new)) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n parentEl.replaceChild(node, getTarget($current)!);\n unmountTree($current);\n } else {\n const areComponents = isCurrentComponent && isNewComponent;\n const currentTarget = getTarget($current);\n\n if (!areComponents) {\n setTarget($new, currentTarget!);\n setTarget($current, undefined as any); // Help GC\n\n if ('props' in $current && 'props' in $new) {\n $new.props.ref = $current.props.ref;\n }\n }\n\n if (isRealElement($new)) {\n if (moveDirection) {\n const node = currentTarget!;\n const nextSibling = parentEl.childNodes[moveDirection === 'up' ? index : index + 1];\n\n if (nextSibling) {\n parentEl.insertBefore(node, nextSibling);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n }\n\n if (!areComponents) {\n updateAttributes(($current as VirtualRealElement), $new, currentTarget as HTMLElement);\n }\n\n $new.children = renderChildren(\n ($current as VirtualRealElement),\n $new,\n areComponents ? parentEl : currentTarget as HTMLElement,\n );\n }\n }\n }\n\n return $new;\n}\n\nfunction initComponent(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n if (!isComponentElement($element)) {\n return $element;\n }\n\n const { componentInstance } = $element;\n\n if (!componentInstance.isMounted) {\n $element = mountComponent(componentInstance);\n setupComponentUpdateListener($element, $parent, index, parentEl);\n\n const $firstChild = $element.children[0];\n if (isComponentElement($firstChild)) {\n $element.children = [initComponent($firstChild, $element, 0, parentEl)];\n }\n\n componentInstance.isMounted = true;\n }\n\n return $element;\n}\n\nfunction updateComponent($current: VirtualElementComponent, $new: VirtualElementComponent) {\n $current.componentInstance.props = $new.componentInstance.props;\n\n return renderComponent($current.componentInstance);\n}\n\nfunction setupComponentUpdateListener(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n const { componentInstance } = $element;\n\n componentInstance.onUpdate = () => {\n $parent.children[index] = renderWithVirtual(\n parentEl,\n $parent.children[index],\n componentInstance.$element,\n $parent,\n index,\n { skipComponentUpdate: true },\n ) as VirtualElementComponent;\n };\n}\n\nfunction createNode($element: VirtualElement): Node {\n if (isEmptyElement($element)) {\n return document.createTextNode('');\n }\n\n if (isTextElement($element)) {\n return document.createTextNode($element.value);\n }\n\n if (isComponentElement($element)) {\n return createNode($element.children[0] as VirtualElement);\n }\n\n const { tag, props, children = [] } = $element;\n const element = document.createElement(tag);\n\n if (typeof props.ref === 'object') {\n props.ref.current = element;\n }\n\n Object.entries(props).forEach(([key, value]) => {\n if (props[key] !== undefined) {\n setAttribute(element, key, value);\n }\n });\n\n $element.children = children.map(($child, i) => (\n renderWithVirtual(element, undefined, $child, $element, i) as VirtualElement\n ));\n\n return element;\n}\n\nfunction renderChildren(\n $current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement,\n) {\n if ($new.props.teactFastList) {\n return renderFastListChildren($current, $new, currentEl);\n }\n\n const currentChildrenLength = $current.children.length;\n const newChildrenLength = $new.children.length;\n const maxLength = Math.max(currentChildrenLength, newChildrenLength);\n const newChildren = [];\n const fragment = newChildrenLength > currentChildrenLength + 1 ? document.createDocumentFragment() : undefined;\n\n for (let i = 0; i < maxLength; i++) {\n const $newChild = renderWithVirtual(\n currentEl,\n $current.children[i],\n $new.children[i],\n $new,\n i,\n i >= currentChildrenLength ? { fragment } : undefined,\n );\n\n if ($newChild) {\n newChildren.push($newChild);\n }\n }\n\n if (fragment) {\n currentEl.appendChild(fragment);\n }\n\n return newChildren;\n}\n\nfunction renderFastListChildren($current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement) {\n const newKeys = new Set(\n $new.children.map(($newChild) => {\n const key = 'props' in $newChild && $newChild.props.key;\n\n // eslint-disable-next-line no-null/no-null\n if (DEBUG && isRealElement($newChild) && (key === undefined || key === null)) {\n // eslint-disable-next-line no-console\n console.warn('Missing `key` in `teactFastList`');\n }\n\n return key;\n }),\n );\n\n let currentRemainingIndex = 0;\n const remainingByKey = $current.children\n .reduce((acc, $currentChild, i) => {\n let key = 'props' in $currentChild ? $currentChild.props.key : undefined;\n // eslint-disable-next-line no-null/no-null\n const isKeyPresent = key !== undefined && key !== null;\n\n // First we handle removed children\n if (isKeyPresent && !newKeys.has(key)) {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n } else if (!isKeyPresent) {\n const $newChild = $new.children[i];\n const newChildKey = ($newChild && 'props' in $newChild) ? $newChild.props.key : undefined;\n // If a non-key element remains at the same index we preserve it with a virtual `key`\n if ($newChild && !newChildKey) {\n key = `${INDEX_KEY_PREFIX}${i}`;\n } else {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n }\n }\n\n // Then we build up info about remaining children\n acc[key] = {\n $element: $currentChild,\n index: currentRemainingIndex++,\n order: 'props' in $currentChild ? $currentChild.props.teactOrderKey : undefined,\n };\n return acc;\n }, {} as Record);\n\n let newChildren: VirtualElement[] = [];\n\n let fragmentQueue: VirtualElement[] | undefined;\n let fragmentIndex: number | undefined;\n\n let currentPreservedIndex = 0;\n\n $new.children.forEach(($newChild, i) => {\n const key = 'props' in $newChild ? $newChild.props.key : `${INDEX_KEY_PREFIX}${i}`;\n const currentChildInfo = remainingByKey[key];\n\n if (!currentChildInfo) {\n // All new nodes are queued to be inserted with fragments if possible.\n if (!fragmentQueue) {\n fragmentQueue = [];\n fragmentIndex = i;\n }\n\n fragmentQueue.push($newChild);\n return;\n }\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n fragmentIndex = undefined;\n fragmentQueue = undefined;\n }\n\n // This is a \"magic\" `teactOrderKey` property that tells us the element is updated\n const order = 'props' in $newChild ? $newChild.props.teactOrderKey : undefined;\n const shouldMoveNode = currentChildInfo.index !== currentPreservedIndex && currentChildInfo.order !== order;\n const isMovingDown = shouldMoveNode && currentPreservedIndex > currentChildInfo.index;\n\n // When the node goes down, preserved indexing actually breaks, so the \"magic\" should help.\n if (!shouldMoveNode || isMovingDown) {\n currentPreservedIndex++;\n }\n\n newChildren.push(\n renderWithVirtual(currentEl, currentChildInfo.$element, $newChild, $new, i, {\n forceIndex: true,\n moveDirection: shouldMoveNode ? (isMovingDown ? 'down' : 'up') : undefined,\n })!,\n );\n });\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n }\n\n return newChildren;\n}\n\nfunction flushFragmentQueue(\n fragmentQueue: VirtualElement[], fragmentIndex: number, parentEl: HTMLElement, $parent: VirtualRealElement,\n) {\n if (fragmentQueue.length === 1) {\n return [renderWithVirtual(parentEl, undefined, fragmentQueue[0], $parent, fragmentIndex, { forceIndex: true })!];\n } else if (fragmentQueue.length > 1) {\n const fragment = document.createDocumentFragment();\n const newChildren = fragmentQueue.map(($fragmentChild) => (\n renderWithVirtual(parentEl, undefined, $fragmentChild, $parent, fragmentIndex!, { fragment })!\n ));\n\n if (parentEl.childNodes[fragmentIndex]) {\n parentEl.insertBefore(fragment, parentEl.childNodes[fragmentIndex]);\n } else {\n parentEl.appendChild(fragment);\n }\n\n return newChildren;\n }\n\n throw new Error('Unexpected input');\n}\n\nfunction updateAttributes($current: VirtualRealElement, $new: VirtualRealElement, element: HTMLElement) {\n const currentEntries = Object.entries($current.props);\n const newEntries = Object.entries($new.props);\n\n currentEntries.forEach(([key, currentValue]) => {\n const newValue = $new.props[key];\n\n if (\n currentValue !== undefined\n && (\n newValue === undefined\n || (currentValue !== newValue && key.startsWith('on'))\n )\n ) {\n removeAttribute(element, key, currentValue);\n }\n });\n\n newEntries.forEach(([key, newValue]) => {\n const currentValue = $current.props[key];\n\n if (newValue !== undefined && newValue !== currentValue) {\n setAttribute(element, key, newValue);\n }\n });\n}\n\nfunction setAttribute(element: HTMLElement, key: string, value: any) {\n // An optimization attempt\n if (key === 'className') {\n element.className = value;\n // An optimization attempt\n } else if (key === 'value') {\n if ((element as HTMLInputElement).value !== value) {\n (element as HTMLInputElement).value = value;\n }\n } else if (key === 'style') {\n element.style.cssText = value;\n } else if (key === 'dangerouslySetInnerHTML') {\n // eslint-disable-next-line no-underscore-dangle\n element.innerHTML = value.__html;\n } else if (key.startsWith('on')) {\n addEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.setAttribute(key, value);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n (element as any)[MAPPED_ATTRIBUTES[key] || key] = value;\n }\n}\n\nfunction removeAttribute(element: HTMLElement, key: string, value: any) {\n if (key === 'className') {\n element.className = '';\n } else if (key === 'value') {\n (element as HTMLInputElement).value = '';\n } else if (key === 'style') {\n element.style.cssText = '';\n } else if (key === 'dangerouslySetInnerHTML') {\n element.innerHTML = '';\n } else if (key.startsWith('on')) {\n removeEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.removeAttribute(key);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n delete (element as any)[MAPPED_ATTRIBUTES[key] || key];\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction DEBUG_addToVirtualTreeSize($current: VirtualRealElement | VirtualDomHead) {\n DEBUG_virtualTreeSize += $current.children.length;\n\n $current.children.forEach(($child) => {\n if (isRealElement($child)) {\n DEBUG_addToVirtualTreeSize($child);\n }\n });\n}\n\nconst TeactDOM = { render };\nexport default TeactDOM;\n","import { DEBUG, DEBUG_MORE } from '../../config';\nimport {\n fastRaf, fastRafPrimary, onTickEnd, onTickEndPrimary, throttleWithPrimaryRaf, throttleWithRaf,\n} from '../../util/schedulers';\nimport { flatten, orderBy } from '../../util/iteratees';\nimport arePropsShallowEqual, { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { handleError } from '../../util/handleError';\nimport { removeAllDelegatedListeners } from './dom-events';\n\nexport type Props = AnyLiteral;\nexport type FC

= (props: P) => any;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport type FC_withDebug = FC & {\n DEBUG_contentComponentName?: string;\n};\n\nexport enum VirtualElementTypesEnum {\n Empty,\n Text,\n Tag,\n Component,\n}\n\ninterface VirtualElementEmpty {\n type: VirtualElementTypesEnum.Empty;\n target?: Node;\n}\n\ninterface VirtualElementText {\n type: VirtualElementTypesEnum.Text;\n target?: Node;\n value: string;\n}\n\nexport interface VirtualElementTag {\n type: VirtualElementTypesEnum.Tag;\n target?: Node;\n tag: string;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport interface VirtualElementComponent {\n type: VirtualElementTypesEnum.Component;\n componentInstance: ComponentInstance;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport type StateHookSetter = (newValue: ((current: T) => T) | T) => void;\n\ninterface ComponentInstance {\n $element: VirtualElementComponent;\n Component: FC;\n name: string;\n props: Props;\n renderedValue?: any;\n isMounted: boolean;\n hooks: {\n state: {\n cursor: number;\n byCursor: {\n value: any;\n nextValue: any;\n setter: StateHookSetter;\n }[];\n };\n effects: {\n cursor: number;\n byCursor: {\n effect: () => void;\n dependencies?: readonly any[];\n cleanup?: Function;\n }[];\n };\n memos: {\n cursor: number;\n byCursor: {\n current: any;\n dependencies: any[];\n }[];\n };\n };\n prepareForFrame?: () => void;\n forceUpdate?: () => void;\n onUpdate?: () => void;\n}\n\nexport type VirtualElement =\n VirtualElementEmpty\n | VirtualElementText\n | VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualRealElement =\n VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualElementChildren = VirtualElement[];\n\nconst Fragment = Symbol('Fragment');\n\nconst DEBUG_RENDER_THRESHOLD = 7;\nconst DEBUG_EFFECT_THRESHOLD = 7;\nconst DEBUG_SILENT_RENDERS_FOR = new Set(['TeactMemoWrapper', 'TeactNContainer', 'Button', 'ListItem', 'MenuItem']);\n\nlet renderingInstance: ComponentInstance;\n\nexport function isEmptyElement($element: VirtualElement): $element is VirtualElementEmpty {\n return $element.type === VirtualElementTypesEnum.Empty;\n}\n\nexport function isTextElement($element: VirtualElement): $element is VirtualElementText {\n return $element.type === VirtualElementTypesEnum.Text;\n}\n\nexport function isTagElement($element: VirtualElement): $element is VirtualElementTag {\n return $element.type === VirtualElementTypesEnum.Tag;\n}\n\nexport function isComponentElement($element: VirtualElement): $element is VirtualElementComponent {\n return $element.type === VirtualElementTypesEnum.Component;\n}\n\nexport function isRealElement($element: VirtualElement): $element is VirtualRealElement {\n return isTagElement($element) || isComponentElement($element);\n}\n\nfunction createElement(\n source: string | FC | typeof Fragment,\n props: Props,\n ...children: any[]\n): VirtualRealElement | VirtualElementChildren {\n if (!props) {\n props = {};\n }\n\n children = flatten(children);\n\n if (source === Fragment) {\n return children;\n } else if (typeof source === 'function') {\n return createComponentInstance(source, props, children);\n } else {\n return buildTagElement(source, props, children);\n }\n}\n\nfunction createComponentInstance(Component: FC, props: Props, children: any[]): VirtualElementComponent {\n let parsedChildren: any | any[] | undefined;\n if (children.length === 0) {\n parsedChildren = undefined;\n } else if (children.length === 1) {\n [parsedChildren] = children;\n } else {\n parsedChildren = children;\n }\n\n const componentInstance: ComponentInstance = {\n $element: {} as VirtualElementComponent,\n Component,\n name: Component.name,\n props: {\n ...props,\n ...(parsedChildren && { children: parsedChildren }),\n },\n isMounted: false,\n hooks: {\n state: {\n cursor: 0,\n byCursor: [],\n },\n effects: {\n cursor: 0,\n byCursor: [],\n },\n memos: {\n cursor: 0,\n byCursor: [],\n },\n },\n };\n\n componentInstance.$element = buildComponentElement(componentInstance);\n\n return componentInstance.$element;\n}\n\nfunction buildComponentElement(\n componentInstance: ComponentInstance,\n children: VirtualElementChildren = [],\n): VirtualElementComponent {\n const { props } = componentInstance;\n\n return {\n componentInstance,\n type: VirtualElementTypesEnum.Component,\n props,\n children,\n };\n}\n\nfunction buildTagElement(tag: string, props: Props, children: any[]): VirtualElementTag {\n return {\n type: VirtualElementTypesEnum.Tag,\n tag,\n props,\n children: dropEmptyTail(children).map(buildChildElement),\n };\n}\n\n// We only need placeholders in the middle of collection (to ensure other elements order).\nfunction dropEmptyTail(children: any[]) {\n let i = children.length - 1;\n\n for (; i >= 0; i--) {\n if (!isEmptyPlaceholder(children[i])) {\n break;\n }\n }\n\n return i + 1 < children.length ? children.slice(0, i + 1) : children;\n}\n\nfunction isEmptyPlaceholder(child: any) {\n // eslint-disable-next-line no-null/no-null\n return child === false || child === null || child === undefined;\n}\n\nfunction buildChildElement(child: any): VirtualElement {\n if (isEmptyPlaceholder(child)) {\n return buildEmptyElement();\n } else if (isRealElement(child)) {\n return child;\n } else {\n return buildTextElement(child);\n }\n}\n\nfunction buildTextElement(value: any): VirtualElementText {\n return {\n type: VirtualElementTypesEnum.Text,\n value: String(value),\n };\n}\n\nfunction buildEmptyElement(): VirtualElementEmpty {\n return { type: VirtualElementTypesEnum.Empty };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DEBUG_components: AnyLiteral = {};\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('COMPONENTS', orderBy(Object.values(DEBUG_components), 'renderCount', 'desc'));\n});\n\nexport function renderComponent(componentInstance: ComponentInstance) {\n renderingInstance = componentInstance;\n componentInstance.hooks.state.cursor = 0;\n componentInstance.hooks.effects.cursor = 0;\n componentInstance.hooks.memos.cursor = 0;\n\n const { Component, props } = componentInstance;\n let newRenderedValue;\n\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n const componentName = componentInstance.name;\n if (!DEBUG_components[componentName]) {\n DEBUG_components[componentName] = {\n componentName,\n renderCount: 0,\n renderTimes: [],\n };\n }\n\n if (DEBUG_MORE) {\n if (!DEBUG_SILENT_RENDERS_FOR.has(componentName)) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Render ${componentName}`);\n }\n }\n\n DEBUG_startAt = performance.now();\n }\n\n newRenderedValue = Component(props);\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_RENDER_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow component render: ${componentName}, ${Math.round(duration)} ms`);\n }\n DEBUG_components[componentName].renderTimes.push(duration);\n DEBUG_components[componentName].renderCount++;\n }\n } catch (err: any) {\n handleError(err);\n\n newRenderedValue = componentInstance.renderedValue;\n }\n\n if (componentInstance.isMounted && newRenderedValue === componentInstance.renderedValue) {\n return componentInstance.$element;\n }\n\n componentInstance.renderedValue = newRenderedValue;\n\n const newChild = buildChildElement(newRenderedValue);\n componentInstance.$element = buildComponentElement(componentInstance, [newChild]);\n\n return componentInstance.$element;\n}\n\nexport function hasElementChanged($old: VirtualElement, $new: VirtualElement) {\n if (typeof $old !== typeof $new) {\n return true;\n } else if ($old.type !== $new.type) {\n return true;\n } else if (isTextElement($old) && isTextElement($new)) {\n return $old.value !== $new.value;\n } else if (isTagElement($old) && isTagElement($new)) {\n return ($old.tag !== $new.tag) || ($old.props.key !== $new.props.key);\n } else if (isComponentElement($old) && isComponentElement($new)) {\n return (\n $old.componentInstance.Component !== $new.componentInstance.Component\n ) || (\n $old.props.key !== $new.props.key\n );\n }\n\n return false;\n}\n\nexport function unmountTree($element: VirtualElement) {\n if (isComponentElement($element)) {\n unmountComponent($element.componentInstance);\n } else {\n if (isTagElement($element)) {\n if ($element.target) {\n removeAllDelegatedListeners($element.target as HTMLElement);\n }\n\n if ($element.props.ref) {\n $element.props.ref.current = undefined; // Help GC\n }\n }\n\n if ($element.target) {\n $element.target = undefined; // Help GC\n }\n\n if (!isRealElement($element)) {\n return;\n }\n }\n\n $element.children.forEach(unmountTree);\n}\n\nexport function mountComponent(componentInstance: ComponentInstance) {\n renderComponent(componentInstance);\n componentInstance.isMounted = true;\n return componentInstance.$element;\n}\n\nfunction unmountComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // We need to clean refs before running effect cleanups\n componentInstance.hooks.memos.byCursor.forEach((memoContainer) => {\n memoContainer.current = undefined;\n });\n\n componentInstance.hooks.effects.byCursor.forEach(({ cleanup }) => {\n if (typeof cleanup === 'function') {\n try {\n cleanup();\n } catch (err: any) {\n handleError(err);\n }\n }\n });\n\n componentInstance.isMounted = false;\n\n helpGc(componentInstance);\n}\n\n// We need to remove all references to DOM objects. We also clean all other references, just in case\nfunction helpGc(componentInstance: ComponentInstance) {\n componentInstance.hooks.effects.byCursor.forEach((hook) => {\n hook.cleanup = undefined;\n hook.effect = undefined as any;\n hook.dependencies = undefined;\n });\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = undefined;\n hook.nextValue = undefined;\n hook.setter = undefined as any;\n });\n\n componentInstance.hooks.memos.byCursor.forEach((hook) => {\n hook.dependencies = undefined as any;\n });\n\n componentInstance.hooks = undefined as any;\n componentInstance.$element = undefined as any;\n componentInstance.renderedValue = undefined;\n componentInstance.Component = undefined as any;\n componentInstance.props = undefined as any;\n componentInstance.forceUpdate = undefined;\n componentInstance.onUpdate = undefined;\n}\n\nfunction prepareComponentForFrame(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = hook.nextValue;\n });\n\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(() => prepareComponentForFrame(componentInstance));\n componentInstance.forceUpdate = throttleWithRaf(() => forceUpdateComponent(componentInstance));\n}\n\nfunction forceUpdateComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted || !componentInstance.onUpdate) {\n return;\n }\n\n const currentElement = componentInstance.$element;\n\n renderComponent(componentInstance);\n\n if (componentInstance.$element !== currentElement) {\n componentInstance.onUpdate();\n }\n}\n\nexport function getTarget($element: VirtualElement): Node | undefined {\n if (isComponentElement($element)) {\n return getTarget($element.children[0]);\n } else {\n return $element.target;\n }\n}\n\nexport function setTarget($element: VirtualElement, target: Node) {\n if (isComponentElement($element)) {\n setTarget($element.children[0], target);\n } else {\n $element.target = target;\n }\n}\n\nexport function useState(): [T, StateHookSetter];\nexport function useState(initial: T): [T, StateHookSetter];\nexport function useState(initial?: T): [T, StateHookSetter] {\n const { cursor, byCursor } = renderingInstance.hooks.state;\n\n if (byCursor[cursor] === undefined) {\n byCursor[cursor] = {\n value: initial,\n nextValue: initial,\n setter: ((componentInstance) => (newValue: ((current: T) => T) | T) => {\n if (byCursor[cursor].nextValue !== newValue) {\n byCursor[cursor].nextValue = typeof newValue === 'function'\n ? (newValue as (current: T) => T)(byCursor[cursor].value)\n : newValue;\n\n if (!componentInstance.prepareForFrame || !componentInstance.forceUpdate) {\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(\n () => prepareComponentForFrame(componentInstance),\n );\n componentInstance.forceUpdate = throttleWithRaf(\n () => forceUpdateComponent(componentInstance),\n );\n }\n\n componentInstance.prepareForFrame();\n componentInstance.forceUpdate();\n\n if (DEBUG_MORE) {\n if (componentInstance.name !== 'TeactNContainer') {\n // eslint-disable-next-line no-console\n console.log(\n '[Teact.useState]',\n componentInstance.name,\n // `componentInstance.Component` may be set to `null` by GC helper\n componentInstance.Component && (componentInstance.Component as FC_withDebug).DEBUG_contentComponentName\n ? `> ${(componentInstance.Component as FC_withDebug).DEBUG_contentComponentName}`\n : '',\n `Forced update at cursor #${cursor}, next value: `,\n byCursor[cursor].nextValue,\n );\n }\n }\n }\n })(renderingInstance),\n };\n }\n\n renderingInstance.hooks.state.cursor++;\n\n return [\n byCursor[cursor].value,\n byCursor[cursor].setter,\n ];\n}\n\nfunction useLayoutEffectBase(\n schedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n primarySchedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n effect: () => Function | void,\n dependencies?: readonly any[],\n debugKey?: string,\n) {\n const { cursor, byCursor } = renderingInstance.hooks.effects;\n const componentInstance = renderingInstance;\n\n function execCleanup() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n const { cleanup } = byCursor[cursor];\n if (typeof cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n cleanup();\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Teact] Slow cleanup at effect cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`,\n );\n }\n }\n } catch (err: any) {\n handleError(err);\n }\n }\n }\n\n function exec() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n byCursor[cursor].cleanup = effect() as Function;\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow effect at cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`);\n }\n }\n }\n\n if (byCursor[cursor] !== undefined && dependencies && byCursor[cursor].dependencies) {\n if (dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies![i])) {\n if (debugKey) {\n const causedBy = dependencies.reduce((res, newValue, i) => {\n const prevValue = byCursor[cursor].dependencies![i];\n if (newValue !== prevValue) {\n res.push(`${i}: ${prevValue} => ${newValue}`);\n }\n\n return res;\n }, []);\n\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by dependencies.`, causedBy.join(', '));\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n } else {\n if (debugKey) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by missing dependencies.`);\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n\n byCursor[cursor] = {\n effect,\n dependencies,\n cleanup: byCursor[cursor] ? byCursor[cursor].cleanup : undefined,\n };\n\n renderingInstance.hooks.effects.cursor++;\n}\n\nexport function useEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(fastRaf, fastRafPrimary, effect, dependencies, debugKey);\n}\n\nexport function useLayoutEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(onTickEnd, onTickEndPrimary, effect, dependencies, debugKey);\n}\n\nexport function useMemo(resolver: () => T, dependencies: any[], debugKey?: string): T {\n const { cursor, byCursor } = renderingInstance.hooks.memos;\n let { current } = byCursor[cursor] || {};\n\n if (\n byCursor[cursor] === undefined\n || dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies[i])\n ) {\n if (DEBUG && debugKey) {\n // eslint-disable-next-line no-console\n console.log(\n `[Teact.useMemo] ${renderingInstance.name} (${debugKey}): Update is caused by:`,\n byCursor[cursor]\n ? getUnequalProps(dependencies, byCursor[cursor].dependencies).join(', ')\n : '[first render]',\n );\n }\n\n current = resolver();\n }\n\n byCursor[cursor] = {\n current,\n dependencies,\n };\n\n renderingInstance.hooks.memos.cursor++;\n\n return current;\n}\n\nexport function useCallback(newCallback: F, dependencies: any[], debugKey?: string): F {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => newCallback, dependencies, debugKey);\n}\n\nexport function useRef(initial: T): { current: T };\nexport function useRef(): { current: T | undefined }; // TT way (empty is `undefined`)\nexport function useRef(initial: null): { current: T | null }; // React way (empty is `null`)\n// eslint-disable-next-line no-null/no-null\nexport function useRef(initial?: T | null) {\n return useMemo(() => ({\n current: initial,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), []);\n}\n\nexport function memo(Component: T, areEqual = arePropsShallowEqual, debugKey?: string) {\n return function TeactMemoWrapper(props: Props) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const propsRef = useRef(props);\n const renderedRef = useRef();\n\n if (!renderedRef.current || (propsRef.current && !areEqual(propsRef.current, props))) {\n if (DEBUG && debugKey) {\n // eslint-disable-next-line no-console\n console.log(\n `[Teact.memo] ${Component.name} (${debugKey}): Update is caused by:`,\n getUnequalProps(propsRef.current!, props).join(', '),\n );\n }\n\n propsRef.current = props;\n renderedRef.current = createElement(Component, props) as VirtualElementComponent;\n }\n\n return renderedRef.current;\n } as T;\n}\n\n// We need to keep it here for JSX.\nconst Teact = {\n createElement,\n Fragment,\n};\n\nexport default Teact;\n","import React, {\n FC, FC_withDebug, Props, useEffect, useState,\n} from './teact';\n\nimport { DEBUG, DEBUG_MORE } from '../../config';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport generateIdFor from '../../util/generateIdFor';\nimport { fastRaf, throttleWithTickEnd } from '../../util/schedulers';\nimport arePropsShallowEqual, { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { orderBy } from '../../util/iteratees';\nimport {\n GlobalState, GlobalActions, ActionTypes, DispatchOptions,\n} from '../../global/types';\nimport { handleError } from '../../util/handleError';\nimport { isHeavyAnimating } from '../../hooks/useHeavyAnimationCheck';\n\nexport default React;\n\ntype ActionPayload = AnyLiteral;\n\ntype Reducer = (\n global: GlobalState,\n actions: GlobalActions,\n payload: any,\n) => GlobalState | void;\n\ntype MapStateToProps = ((global: GlobalState, ownProps: OwnProps) => AnyLiteral);\n\nlet currentGlobal = {} as GlobalState;\n\nconst reducers: Record = {};\nconst callbacks: Function[] = [updateContainers];\nconst actions = {} as GlobalActions;\nconst containers = new Map;\n ownProps: Props;\n mappedProps?: Props;\n forceUpdate: Function;\n areMappedPropsChanged: boolean;\n DEBUG_updates: number;\n DEBUG_componentName: string;\n}>();\n\nconst runCallbacksThrottled = throttleWithTickEnd(runCallbacks);\n\nfunction runCallbacks(forceOnHeavyAnimation = false) {\n if (!forceOnHeavyAnimation && isHeavyAnimating()) {\n fastRaf(runCallbacksThrottled);\n return;\n }\n\n callbacks.forEach((cb) => cb(currentGlobal));\n}\n\nexport function setGlobal(newGlobal?: GlobalState, options?: DispatchOptions) {\n if (typeof newGlobal === 'object' && newGlobal !== currentGlobal) {\n currentGlobal = newGlobal;\n if (options?.forceSyncOnIOs) {\n runCallbacks(true);\n } else {\n runCallbacksThrottled(options?.forceOnHeavyAnimation);\n }\n }\n}\n\nexport function getGlobal() {\n return currentGlobal;\n}\n\nexport function getDispatch() {\n return actions;\n}\n\nfunction onDispatch(name: string, payload?: ActionPayload, options?: DispatchOptions) {\n if (reducers[name]) {\n reducers[name].forEach((reducer) => {\n const newGlobal = reducer(currentGlobal, actions, payload);\n if (newGlobal) {\n setGlobal(newGlobal, options);\n }\n });\n }\n}\n\nfunction updateContainers() {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const container of containers.values()) {\n const {\n mapStateToProps, ownProps, mappedProps, forceUpdate,\n } = container;\n\n let newMappedProps;\n\n try {\n newMappedProps = mapStateToProps(currentGlobal, ownProps);\n } catch (err: any) {\n handleError(err);\n\n return;\n }\n\n if (DEBUG) {\n if (Object.values(newMappedProps).some(Number.isNaN)) {\n // eslint-disable-next-line no-console\n console.warn(\n // eslint-disable-next-line max-len\n `[TeactN] Some of \\`${container.DEBUG_componentName}\\` mappers contain NaN values. This may cause redundant updates because of incorrect equality check.`,\n );\n }\n }\n\n if (Object.keys(newMappedProps).length && !arePropsShallowEqual(mappedProps!, newMappedProps)) {\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log(\n '[TeactN] Will update',\n container.DEBUG_componentName,\n 'caused by',\n getUnequalProps(mappedProps!, newMappedProps).join(', '),\n );\n }\n\n container.mappedProps = newMappedProps;\n container.areMappedPropsChanged = true;\n container.DEBUG_updates++;\n\n forceUpdate();\n }\n }\n\n if (DEBUG) {\n const updateTime = performance.now() - DEBUG_startAt!;\n if (updateTime > 7) {\n // eslint-disable-next-line no-console\n console.warn(`[TeactN] Slow containers update: ${Math.round(updateTime)} ms`);\n }\n }\n}\n\nexport function addReducer(name: ActionTypes, reducer: Reducer) {\n if (!reducers[name]) {\n reducers[name] = [];\n\n actions[name] = (payload?: ActionPayload, options?: DispatchOptions) => {\n onDispatch(name, payload, options);\n };\n }\n\n reducers[name].push(reducer);\n}\n\nexport function addCallback(cb: Function) {\n callbacks.push(cb);\n}\n\nexport function removeCallback(cb: Function) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n}\n\nexport function withGlobal(\n mapStateToProps: MapStateToProps = () => ({}),\n) {\n return (Component: FC) => {\n return function TeactNContainer(props: OwnProps) {\n (TeactNContainer as FC_withDebug).DEBUG_contentComponentName = Component.name;\n\n const [id] = useState(generateIdFor(containers));\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n return () => {\n containers.delete(id);\n };\n }, [id]);\n\n let container = containers.get(id);\n if (!container) {\n container = {\n mapStateToProps,\n ownProps: props,\n areMappedPropsChanged: false,\n forceUpdate,\n DEBUG_updates: 0,\n DEBUG_componentName: Component.name,\n };\n\n containers.set(id, container);\n }\n\n if (container.areMappedPropsChanged) {\n container.areMappedPropsChanged = false;\n }\n\n if (!container.mappedProps || !arePropsShallowEqual(container.ownProps, props)) {\n container.ownProps = props;\n\n try {\n container.mappedProps = mapStateToProps(currentGlobal, props);\n } catch (err: any) {\n handleError(err);\n }\n }\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ;\n };\n };\n}\n\nif (DEBUG) {\n (window as any).getGlobal = getGlobal;\n\n document.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn(\n 'GLOBAL CONTAINERS',\n orderBy(\n Array.from(containers.values())\n .map(({ DEBUG_componentName, DEBUG_updates }) => ({ DEBUG_componentName, DEBUG_updates })),\n 'DEBUG_updates',\n 'desc',\n ),\n );\n });\n}\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n// Version 2c193ce 28.05.2021\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nexport function removeVS16s(rawEmoji) {\n return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji;\n}\n\n// This file is generated by source/emoji/scripts/generate.sh\n// eslint-disable-next-line max-len\nexport default /(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91])|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd1d\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78\\udd7a-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcb\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7a\\ude80-\\ude86\\ude90-\\udea8\\udeb0-\\udeb6\\udec0-\\udec2\\uded0-\\uded6]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g;\n","import {\n addReducer, getDispatch, getGlobal, setGlobal,\n} from '../../../lib/teact/teactn';\n\nimport { initApi, callApi } from '../../../api/gramjs';\nimport { GlobalState } from '../../../global/types';\n\nimport {\n LANG_CACHE_NAME,\n CUSTOM_BG_CACHE_NAME,\n MEDIA_CACHE_NAME,\n MEDIA_CACHE_NAME_AVATARS,\n MEDIA_PROGRESSIVE_CACHE_NAME,\n IS_TEST,\n} from '../../../config';\nimport { IS_MOV_SUPPORTED, IS_WEBM_SUPPORTED, PLATFORM_ENV } from '../../../util/environment';\nimport { unsubscribe } from '../../../util/notifications';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { updateAppBadge } from '../../../util/appBadge';\nimport {\n storeSession,\n loadStoredSession,\n clearStoredSession,\n importLegacySession,\n clearLegacySessions,\n} from '../../../util/sessions';\nimport { forceWebsync } from '../../../util/websync';\n\naddReducer('initApi', (global: GlobalState, actions) => {\n (async () => {\n if (!IS_TEST) {\n await importLegacySession();\n void clearLegacySessions();\n }\n\n void initApi(actions.apiUpdate, {\n userAgent: navigator.userAgent,\n platform: PLATFORM_ENV,\n sessionData: loadStoredSession(),\n isTest: window.location.search.includes('test'),\n isMovSupported: IS_MOV_SUPPORTED,\n isWebmSupported: IS_WEBM_SUPPORTED,\n });\n })();\n});\n\naddReducer('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n void callApi('provideAuthPhoneNumber', phoneNumber.replace(/[^\\d]/g, ''));\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('setAuthCode', (global, actions, payload) => {\n const { code } = payload!;\n\n void callApi('provideAuthCode', code);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('setAuthPassword', (global, actions, payload) => {\n const { password } = payload!;\n\n void callApi('provideAuthPassword', password);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('uploadProfilePhoto', (global, actions, payload) => {\n const { file } = payload!;\n\n void callApi('uploadProfilePhoto', file);\n});\n\naddReducer('signUp', (global, actions, payload) => {\n const { firstName, lastName } = payload!;\n\n void callApi('provideAuthRegistration', { firstName, lastName });\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('returnToAuthPhoneNumber', (global) => {\n void callApi('restartAuth');\n\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddReducer('goToAuthQrCode', (global) => {\n void callApi('restartAuthWithQr');\n\n return {\n ...global,\n authIsLoadingQrCode: true,\n authError: undefined,\n };\n});\n\naddReducer('saveSession', (global, actions, payload) => {\n const { sessionData } = payload;\n\n if (sessionData) {\n storeSession(payload.sessionData, global.currentUserId);\n } else {\n clearStoredSession();\n }\n});\n\naddReducer('signOut', () => {\n (async () => {\n try {\n await unsubscribe();\n await callApi('destroy');\n await forceWebsync(false);\n } catch (err) {\n // Do nothing\n }\n\n getDispatch().reset();\n })();\n});\n\naddReducer('reset', () => {\n clearStoredSession();\n\n void cacheApi.clear(MEDIA_CACHE_NAME);\n void cacheApi.clear(MEDIA_CACHE_NAME_AVATARS);\n void cacheApi.clear(MEDIA_PROGRESSIVE_CACHE_NAME);\n void cacheApi.clear(CUSTOM_BG_CACHE_NAME);\n\n const langCachePrefix = LANG_CACHE_NAME.replace(/\\d+$/, '');\n const langCacheVersion = (LANG_CACHE_NAME.match(/\\d+$/) || [0])[0];\n for (let i = 0; i < langCacheVersion; i++) {\n void cacheApi.clear(`${langCachePrefix}${i === 0 ? '' : i}`);\n }\n\n void clearLegacySessions();\n\n updateAppBadge(0);\n\n getDispatch().init();\n});\n\naddReducer('disconnect', () => {\n (async () => {\n await callApi('disconnect');\n })();\n});\n\naddReducer('loadNearestCountry', (global) => {\n if (global.connectionState !== 'connectionStateReady') {\n return;\n }\n\n (async () => {\n const authNearestCountry = await callApi('fetchNearestCountry');\n\n setGlobal({\n ...getGlobal(),\n authNearestCountry,\n });\n })();\n});\n\naddReducer('setDeviceToken', (global, actions, deviceToken) => {\n setGlobal({\n ...global,\n push: {\n deviceToken,\n subscribedAt: Date.now(),\n },\n });\n});\n\naddReducer('deleteDeviceToken', (global) => {\n const newGlobal = { ...global };\n delete newGlobal.push;\n setGlobal(newGlobal);\n});\n","import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\nimport {\n ApiPrivacyKey, PrivacyVisibility, ProfileEditProgress, InputPrivacyRules, InputPrivacyContact,\n UPLOADING_WALLPAPER_SLUG,\n} from '../../../types';\n\nimport { COUNTRIES_WITH_12H_TIME_FORMAT } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport { subscribe, unsubscribe } from '../../../util/notifications';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport { selectUser } from '../../selectors';\nimport {\n addUsers, addBlockedContact, updateChats, updateUser, removeBlockedContact, replaceSettings, updateNotifySettings,\n addNotifyExceptions,\n} from '../../reducers';\nimport { isUserId } from '../../helpers';\n\naddReducer('updateProfile', (global, actions, payload) => {\n const {\n photo, firstName, lastName, bio: about, username,\n } = payload!;\n\n (async () => {\n const { currentUserId } = global;\n if (!currentUserId) {\n return;\n }\n\n setGlobal({\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.InProgress,\n },\n });\n\n if (photo) {\n await callApi('updateProfilePhoto', photo);\n }\n\n if (firstName || lastName || about) {\n const result = await callApi('updateProfile', { firstName, lastName, about });\n if (result) {\n global = getGlobal();\n const currentUser = currentUserId && selectUser(global, currentUserId);\n\n if (currentUser) {\n setGlobal(updateUser(\n global,\n currentUser.id,\n {\n firstName,\n lastName,\n fullInfo: {\n ...currentUser.fullInfo,\n bio: about,\n },\n },\n ));\n }\n }\n }\n\n if (username) {\n const result = await callApi('updateUsername', username);\n if (result && currentUserId) {\n setGlobal(updateUser(getGlobal(), currentUserId, { username }));\n }\n }\n\n setGlobal({\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.Complete,\n },\n });\n })();\n});\n\naddReducer('checkUsername', (global, actions, payload) => {\n const { username } = payload!;\n\n (async () => {\n // No need to check the username if profile update is already in progress\n if (global.profileEdit && global.profileEdit.progress === ProfileEditProgress.InProgress) {\n return;\n }\n\n setGlobal({\n ...global,\n profileEdit: {\n progress: global.profileEdit ? global.profileEdit.progress : ProfileEditProgress.Idle,\n isUsernameAvailable: undefined,\n },\n });\n\n const isUsernameAvailable = await callApi('checkUsername', username);\n\n global = getGlobal();\n setGlobal({\n ...global,\n profileEdit: {\n ...global.profileEdit!,\n isUsernameAvailable,\n },\n });\n })();\n});\n\naddReducer('loadWallpapers', () => {\n (async () => {\n const result = await callApi('fetchWallpapers');\n if (!result) {\n return;\n }\n\n const global = getGlobal();\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: result.wallpapers,\n },\n });\n })();\n});\n\naddReducer('uploadWallpaper', (global, actions, payload) => {\n const file = payload;\n const previewBlobUrl = URL.createObjectURL(file);\n\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n {\n slug: UPLOADING_WALLPAPER_SLUG,\n document: {\n fileName: '',\n size: file.size,\n mimeType: file.type,\n previewBlobUrl,\n },\n },\n ...(global.settings.loadedWallpapers || []),\n ],\n },\n });\n\n (async () => {\n const result = await callApi('uploadWallpaper', file);\n if (!result) {\n return;\n }\n\n const { wallpaper } = result;\n\n global = getGlobal();\n if (!global.settings.loadedWallpapers) {\n return;\n }\n\n const firstWallpaper = global.settings.loadedWallpapers[0];\n if (!firstWallpaper || firstWallpaper.slug !== UPLOADING_WALLPAPER_SLUG) {\n return;\n }\n\n const withLocalMedia = {\n ...wallpaper,\n document: {\n ...wallpaper.document,\n previewBlobUrl,\n },\n };\n\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n withLocalMedia,\n ...global.settings.loadedWallpapers.slice(1),\n ],\n },\n });\n })();\n});\n\naddReducer('loadBlockedContacts', () => {\n (async () => {\n const result = await callApi('fetchBlockedContacts');\n\n if (!result) {\n return;\n }\n\n let newGlobal = getGlobal();\n\n if (result.users?.length) {\n newGlobal = addUsers(newGlobal, buildCollectionByKey(result.users, 'id'));\n }\n if (result.chats?.length) {\n newGlobal = updateChats(newGlobal, buildCollectionByKey(result.chats, 'id'));\n }\n\n newGlobal = {\n ...newGlobal,\n blocked: {\n ...newGlobal.blocked,\n ids: [...(newGlobal.blocked.ids || []), ...result.blockedIds],\n totalCount: result.totalCount,\n },\n };\n\n setGlobal(newGlobal);\n })();\n});\n\naddReducer('blockContact', (global, actions, payload) => {\n const { contactId, accessHash } = payload!;\n\n (async () => {\n const result = await callApi('blockContact', contactId, accessHash);\n if (!result) {\n return;\n }\n\n const newGlobal = getGlobal();\n\n setGlobal(addBlockedContact(newGlobal, contactId));\n })();\n});\n\naddReducer('unblockContact', (global, actions, payload) => {\n const { contactId } = payload!;\n let accessHash: string | undefined;\n const isPrivate = isUserId(contactId);\n\n if (isPrivate) {\n const user = selectUser(global, contactId);\n if (!user) {\n return;\n }\n\n accessHash = user.accessHash;\n }\n\n (async () => {\n const result = await callApi('unblockContact', contactId, accessHash);\n if (!result) {\n return;\n }\n\n const newGlobal = getGlobal();\n\n setGlobal(removeBlockedContact(newGlobal, contactId));\n })();\n});\n\naddReducer('loadAuthorizations', () => {\n (async () => {\n const result = await callApi('fetchAuthorizations');\n if (!result) {\n return;\n }\n\n setGlobal({\n ...getGlobal(),\n activeSessions: result,\n });\n })();\n});\n\naddReducer('terminateAuthorization', (global, actions, payload) => {\n const { hash } = payload!;\n\n (async () => {\n const result = await callApi('terminateAuthorization', hash);\n if (!result) {\n return;\n }\n\n const newGlobal = getGlobal();\n\n setGlobal({\n ...newGlobal,\n activeSessions: newGlobal.activeSessions.filter((session) => session.hash !== hash),\n });\n })();\n});\n\naddReducer('terminateAllAuthorizations', () => {\n (async () => {\n const result = await callApi('terminateAllAuthorizations');\n if (!result) {\n return;\n }\n\n const global = getGlobal();\n\n setGlobal({\n ...global,\n activeSessions: global.activeSessions.filter((session) => session.isCurrent),\n });\n })();\n});\n\naddReducer('loadNotificationExceptions', (global) => {\n const { serverTimeOffset } = global;\n\n (async () => {\n const result = await callApi('fetchNotificationExceptions', { serverTimeOffset });\n if (!result) {\n return;\n }\n\n setGlobal(addNotifyExceptions(getGlobal(), result));\n })();\n});\n\naddReducer('loadNotificationSettings', (global) => {\n const { serverTimeOffset } = global;\n (async () => {\n const result = await callApi('fetchNotificationSettings', {\n serverTimeOffset,\n });\n if (!result) {\n return;\n }\n\n setGlobal(replaceSettings(getGlobal(), result));\n })();\n});\n\naddReducer('updateNotificationSettings', (global, actions, payload) => {\n const { peerType, isSilent, shouldShowPreviews } = payload!;\n\n (async () => {\n const result = await callApi('updateNotificationSettings', peerType, { isSilent, shouldShowPreviews });\n\n if (!result) {\n return;\n }\n\n setGlobal(updateNotifySettings(getGlobal(), peerType, isSilent, shouldShowPreviews));\n })();\n});\n\naddReducer('updateWebNotificationSettings', (global, actions, payload) => {\n (async () => {\n setGlobal(replaceSettings(getGlobal(), payload));\n const newGlobal = getGlobal();\n const { hasPushNotifications, hasWebNotifications } = newGlobal.settings.byKey;\n if (hasWebNotifications && hasPushNotifications) {\n await subscribe();\n } else {\n await unsubscribe();\n }\n })();\n});\n\naddReducer('updateContactSignUpNotification', (global, actions, payload) => {\n const { isSilent } = payload!;\n\n (async () => {\n const result = await callApi('updateContactSignUpNotification', isSilent);\n if (!result) {\n return;\n }\n\n setGlobal(replaceSettings(getGlobal(), { hasContactJoinedNotifications: !isSilent }));\n })();\n});\n\naddReducer('loadLanguages', () => {\n (async () => {\n const result = await callApi('fetchLanguages');\n if (!result) {\n return;\n }\n\n setGlobal(replaceSettings(getGlobal(), { languages: result }));\n })();\n});\n\naddReducer('loadPrivacySettings', () => {\n (async () => {\n const [\n phoneNumberSettings, lastSeenSettings, profilePhotoSettings, forwardsSettings, chatInviteSettings,\n ] = await Promise.all([\n callApi('fetchPrivacySettings', 'phoneNumber'),\n callApi('fetchPrivacySettings', 'lastSeen'),\n callApi('fetchPrivacySettings', 'profilePhoto'),\n callApi('fetchPrivacySettings', 'forwards'),\n callApi('fetchPrivacySettings', 'chatInvite'),\n ]);\n\n if (\n !phoneNumberSettings || !lastSeenSettings || !profilePhotoSettings || !forwardsSettings || !chatInviteSettings\n ) {\n return;\n }\n\n const global = getGlobal();\n\n global.settings.privacy.phoneNumber = phoneNumberSettings;\n global.settings.privacy.lastSeen = lastSeenSettings;\n global.settings.privacy.profilePhoto = profilePhotoSettings;\n global.settings.privacy.forwards = forwardsSettings;\n global.settings.privacy.chatInvite = chatInviteSettings;\n\n setGlobal(global);\n })();\n});\n\naddReducer('setPrivacyVisibility', (global, actions, payload) => {\n const { privacyKey, visibility } = payload!;\n\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility,\n allowedIds: [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n (async () => {\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n\n if (result) {\n const newGlobal = getGlobal();\n\n newGlobal.settings.privacy[privacyKey as ApiPrivacyKey] = result;\n\n setGlobal(newGlobal);\n }\n })();\n});\n\naddReducer('setPrivacySettings', (global, actions, payload) => {\n const { privacyKey, isAllowList, contactsIds } = payload!;\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility: settings.visibility,\n allowedIds: isAllowList ? contactsIds : [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: !isAllowList ? contactsIds : [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n (async () => {\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n\n if (result) {\n const newGlobal = getGlobal();\n\n newGlobal.settings.privacy[privacyKey as ApiPrivacyKey] = result;\n\n setGlobal(newGlobal);\n }\n })();\n});\n\nfunction buildInputPrivacyRules(global: GlobalState, {\n visibility,\n allowedIds,\n deniedIds,\n}: {\n visibility: PrivacyVisibility;\n allowedIds: string[];\n deniedIds: string[];\n}): InputPrivacyRules {\n const {\n users: { byId: usersById },\n chats: { byId: chatsById },\n } = global;\n\n const rules: InputPrivacyRules = {\n visibility,\n };\n let users: InputPrivacyContact[];\n let chats: InputPrivacyContact[];\n\n const collectUsers = (userId: string) => {\n if (!isUserId(userId)) {\n return undefined;\n }\n const { id, accessHash } = usersById[userId] || {};\n if (!id) {\n return undefined;\n }\n\n return { id, accessHash };\n };\n\n const collectChats = (userId: string) => {\n if (isUserId(userId)) {\n return undefined;\n }\n const chat = chatsById[userId];\n\n return chat ? { id: chat.id } : undefined;\n };\n\n if (visibility === 'contacts' || visibility === 'nobody') {\n users = allowedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = allowedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.allowedUsers = users;\n }\n if (chats.length > 0) {\n rules.allowedChats = chats;\n }\n }\n\n if (visibility === 'everybody' || visibility === 'contacts') {\n users = deniedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = deniedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.blockedUsers = users;\n }\n if (chats.length > 0) {\n rules.blockedChats = chats;\n }\n }\n\n return rules;\n}\n\naddReducer('updateIsOnline', (global, actions, payload) => {\n callApi('updateIsOnline', payload);\n});\n\naddReducer('loadContentSettings', () => {\n (async () => {\n const result = await callApi('fetchContentSettings');\n if (!result) return;\n\n setGlobal(replaceSettings(getGlobal(), result));\n })();\n});\n\naddReducer('updateContentSettings', (global, actions, payload) => {\n (async () => {\n setGlobal(replaceSettings(getGlobal(), { isSensitiveEnabled: payload }));\n\n const result = await callApi('updateContentSettings', payload);\n if (!result) {\n setGlobal(replaceSettings(getGlobal(), { isSensitiveEnabled: !payload }));\n }\n })();\n});\n\naddReducer('loadCountryList', (global, actions, payload = {}) => {\n let { langCode } = payload;\n if (!langCode) langCode = global.settings.byKey.language;\n\n (async () => {\n const countryList = await callApi('fetchCountryList', { langCode });\n if (!countryList) return;\n\n setGlobal({\n ...getGlobal(),\n countryList,\n });\n })();\n});\n\naddReducer('ensureTimeFormat', (global, actions) => {\n if (global.authNearestCountry) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(global.authNearestCountry.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n\n (async () => {\n if (getGlobal().settings.byKey.wasTimeFormatSetManually) {\n return;\n }\n\n const nearestCountryCode = await callApi('fetchNearestCountry');\n if (nearestCountryCode) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(nearestCountryCode.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n })();\n});\n\naddReducer('loadAppConfig', () => {\n (async () => {\n const appConfig = await callApi('fetchAppConfig');\n\n if (!appConfig) return;\n\n setGlobal({\n ...getGlobal(),\n appConfig,\n });\n })();\n});\n","import {\n addReducer, getDispatch, getGlobal, setGlobal,\n} from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\n\nimport {\n ApiUpdate,\n ApiUpdateAuthorizationState,\n ApiUpdateAuthorizationError,\n ApiUpdateConnectionState,\n ApiUpdateSession,\n ApiUpdateCurrentUser, ApiUpdateServerTimeOffset,\n} from '../../../api/types';\nimport { DEBUG, SESSION_USER_KEY } from '../../../config';\nimport { subscribe } from '../../../util/notifications';\nimport { updateUser } from '../../reducers';\nimport { setLanguage } from '../../../util/langProvider';\nimport { selectNotifySettings } from '../../selectors';\nimport { forceWebsync } from '../../../util/websync';\nimport { getShippingError } from '../../../util/getReadableErrorText';\n\naddReducer('apiUpdate', (global, actions, update: ApiUpdate) => {\n if (DEBUG) {\n if (update['@type'] !== 'updateUserStatus' && update['@type'] !== 'updateServerTimeOffset') {\n // eslint-disable-next-line no-console\n console.log('[GramJs] UPDATE', update['@type'], { update });\n }\n }\n\n switch (update['@type']) {\n case 'updateApiReady':\n onUpdateApiReady(global);\n break;\n\n case 'updateAuthorizationState':\n onUpdateAuthorizationState(update);\n break;\n\n case 'updateAuthorizationError':\n onUpdateAuthorizationError(update);\n break;\n\n case 'updateConnectionState':\n onUpdateConnectionState(update);\n break;\n\n case 'updateSession':\n onUpdateSession(update);\n break;\n\n case 'updateServerTimeOffset':\n onUpdateServerTimeOffset(update);\n break;\n\n case 'updateCurrentUser':\n onUpdateCurrentUser(update);\n break;\n\n case 'error': {\n if (update.error.message === 'SESSION_REVOKED') {\n actions.signOut();\n }\n\n const paymentShippingError = getShippingError(update.error);\n if (paymentShippingError) {\n actions.addPaymentError({ error: paymentShippingError });\n } else if (actions.showDialog) {\n actions.showDialog({ data: update.error });\n }\n\n break;\n }\n }\n});\n\nfunction onUpdateApiReady(global: GlobalState) {\n const { hasWebNotifications, hasPushNotifications } = selectNotifySettings(global);\n if (hasWebNotifications && hasPushNotifications) {\n void subscribe();\n }\n void setLanguage(global.settings.byKey.language);\n}\n\nfunction onUpdateAuthorizationState(update: ApiUpdateAuthorizationState) {\n let global = getGlobal();\n\n const wasAuthReady = global.authState === 'authorizationStateReady';\n const authState = update.authorizationState;\n\n setGlobal({\n ...global,\n authState,\n authIsLoading: false,\n });\n\n global = getGlobal();\n\n switch (authState) {\n case 'authorizationStateLoggingOut':\n void forceWebsync(false);\n\n setGlobal({\n ...global,\n isLoggingOut: true,\n });\n break;\n case 'authorizationStateWaitCode':\n setGlobal({\n ...global,\n authIsCodeViaApp: update.isCodeViaApp,\n });\n break;\n case 'authorizationStateWaitPassword':\n setGlobal({\n ...global,\n authHint: update.hint,\n });\n break;\n case 'authorizationStateWaitQrCode':\n setGlobal({\n ...global,\n authIsLoadingQrCode: false,\n authQrCode: update.qrCode,\n });\n break;\n case 'authorizationStateReady': {\n if (wasAuthReady) {\n break;\n }\n\n void forceWebsync(true);\n\n setGlobal({\n ...global,\n isLoggingOut: false,\n });\n\n break;\n }\n }\n}\n\nfunction onUpdateAuthorizationError(update: ApiUpdateAuthorizationError) {\n setGlobal({\n ...getGlobal(),\n authError: update.message,\n });\n}\n\nfunction onUpdateConnectionState(update: ApiUpdateConnectionState) {\n const { connectionState } = update;\n const global = getGlobal();\n\n if (connectionState === global.connectionState) {\n return;\n }\n\n setGlobal({\n ...global,\n connectionState,\n });\n\n if (connectionState === 'connectionStateBroken') {\n getDispatch().signOut();\n }\n}\n\nfunction onUpdateSession(update: ApiUpdateSession) {\n const { sessionData } = update;\n const { authRememberMe, authState } = getGlobal();\n const isEmpty = !sessionData || !sessionData.mainDcId;\n\n if (!authRememberMe || authState !== 'authorizationStateReady' || isEmpty) {\n return;\n }\n\n getDispatch().saveSession({ sessionData });\n}\n\nfunction onUpdateServerTimeOffset(update: ApiUpdateServerTimeOffset) {\n const global = getGlobal();\n\n if (global.serverTimeOffset === update.serverTimeOffset) {\n return;\n }\n\n setGlobal({\n ...global,\n serverTimeOffset: update.serverTimeOffset,\n });\n}\n\nfunction onUpdateCurrentUser(update: ApiUpdateCurrentUser) {\n const { currentUser } = update;\n\n setGlobal({\n ...updateUser(getGlobal(), currentUser.id, currentUser),\n currentUserId: currentUser.id,\n });\n\n updateSessionUserId(currentUser.id);\n}\n\nfunction updateSessionUserId(currentUserId: string) {\n const sessionUserAuth = localStorage.getItem(SESSION_USER_KEY);\n if (!sessionUserAuth) return;\n\n const userAuth = JSON.parse(sessionUserAuth);\n userAuth.id = currentUserId;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify(userAuth));\n}\n","import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\n\nimport { ANIMATION_LEVEL_MAX } from '../../../config';\nimport {\n IS_ANDROID, IS_IOS, IS_MAC_OS, IS_SAFARI, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport { setLanguage } from '../../../util/langProvider';\nimport switchTheme from '../../../util/switchTheme';\nimport { selectTheme } from '../../selectors';\nimport { startWebsync } from '../../../util/websync';\nimport { ensurePermanentWebVersion } from '../../../util/permanentWebVersion';\n\nconst HISTORY_ANIMATION_DURATION = 450;\n\nsubscribeToSystemThemeChange();\n\naddReducer('init', (global) => {\n const { animationLevel, messageTextSize, language } = global.settings.byKey;\n const theme = selectTheme(global);\n\n void setLanguage(language, undefined, true);\n\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(messageTextSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(messageTextSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${messageTextSize}px`);\n document.documentElement.setAttribute('data-message-text-size', messageTextSize.toString());\n document.body.classList.add('initial');\n document.body.classList.add(`animation-level-${animationLevel}`);\n document.body.classList.add(IS_TOUCH_ENV ? 'is-touch-env' : 'is-pointer-env');\n\n switchTheme(theme, animationLevel === ANIMATION_LEVEL_MAX);\n\n ensurePermanentWebVersion();\n startWebsync();\n\n if (IS_IOS) {\n document.body.classList.add('is-ios');\n } else if (IS_ANDROID) {\n document.body.classList.add('is-android');\n } else if (IS_MAC_OS) {\n document.body.classList.add('is-macos');\n }\n if (IS_SAFARI) {\n document.body.classList.add('is-safari');\n }\n});\n\naddReducer('setIsUiReady', (global, actions, payload) => {\n const { uiReadyState } = payload!;\n\n if (uiReadyState === 2) {\n document.body.classList.remove('initial');\n }\n\n return {\n ...global,\n uiReadyState,\n };\n});\n\naddReducer('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n return {\n ...global,\n authPhoneNumber: phoneNumber,\n };\n});\n\naddReducer('setAuthRememberMe', (global, actions, payload) => {\n return {\n ...global,\n authRememberMe: Boolean(payload),\n };\n});\n\naddReducer('clearAuthError', (global) => {\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddReducer('disableHistoryAnimations', () => {\n setTimeout(() => {\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: false,\n });\n document.body.classList.remove('no-animate');\n }, HISTORY_ANIMATION_DURATION);\n\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: true,\n }, { forceSyncOnIOs: true });\n});\n\nfunction subscribeToSystemThemeChange() {\n function handleSystemThemeChange() {\n const currentThemeMatch = document.documentElement.className.match(/theme-(\\w+)/);\n const currentTheme = currentThemeMatch ? currentThemeMatch[1] : 'light';\n const global = getGlobal();\n const nextTheme = selectTheme(global);\n const { animationLevel } = global.settings.byKey;\n\n if (nextTheme !== currentTheme) {\n switchTheme(nextTheme, animationLevel === ANIMATION_LEVEL_MAX);\n // Force-update component containers\n setGlobal({ ...global });\n }\n }\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n }\n}\n","import { addReducer } from '../../../lib/teact/teactn';\nimport { ISettings, IThemeSettings, ThemeKey } from '../../../types';\nimport { replaceSettings, replaceThemeSettings } from '../../reducers';\n\naddReducer('setSettingOption', (global, actions, payload?: Partial) => {\n return replaceSettings(global, payload);\n});\n\naddReducer('setThemeSettings', (global, actions, payload: { theme: ThemeKey } & Partial) => {\n const { theme, ...settings } = payload;\n\n return replaceThemeSettings(global, theme, settings);\n});\n","import {\n ApiChat,\n ApiUser,\n ApiChatBannedRights,\n ApiChatAdminRights,\n ApiChatFolder,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { NotifyException, NotifySettings } from '../../types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport { ARCHIVED_FOLDER_ID, REPLIES_USER_ID } from '../../config';\nimport { orderBy } from '../../util/iteratees';\nimport { getUserFirstOrLastName } from './users';\nimport { formatDateToString, formatTime } from '../../util/dateFormat';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst FOREVER_BANNED_DATE = Date.now() / 1000 + 31622400; // 366 days\n\nconst VERIFIED_PRIORITY_BASE = 3e9;\nconst PINNED_PRIORITY_BASE = 3e8;\n\nexport function isUserId(entityId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof entityId === 'number') {\n return entityId > 0;\n }\n\n return !entityId.startsWith('-');\n}\n\nexport function isChatGroup(chat: ApiChat) {\n return isChatBasicGroup(chat) || isChatSuperGroup(chat);\n}\n\nexport function isChatBasicGroup(chat: ApiChat) {\n return chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatSuperGroup(chat: ApiChat) {\n return chat.type === 'chatTypeSuperGroup';\n}\n\nexport function isChatChannel(chat: ApiChat) {\n return chat.type === 'chatTypeChannel';\n}\n\nexport function isCommonBoxChat(chat: ApiChat) {\n return chat.type === 'chatTypePrivate' || chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatWithRepliesBot(chatId: string) {\n return chatId === REPLIES_USER_ID;\n}\n\nexport function getChatTypeString(chat: ApiChat) {\n switch (chat.type) {\n case 'chatTypePrivate':\n return 'PrivateChat';\n case 'chatTypeBasicGroup':\n case 'chatTypeSuperGroup':\n return 'AccDescrGroup';\n case 'chatTypeChannel':\n return 'AccDescrChannel';\n default:\n return 'Chat';\n }\n}\n\nexport function getPrivateChatUserId(chat: ApiChat) {\n if (chat.type !== 'chatTypePrivate' && chat.type !== 'chatTypeSecret') {\n return undefined;\n }\n return chat.id;\n}\n\n// TODO Get rid of `user`\nexport function getChatTitle(lang: LangFn, chat: ApiChat, user?: ApiUser, isSelf = false) {\n if (isSelf || (user && chat.id === user.id && user.isSelf)) {\n return lang('SavedMessages');\n }\n return chat.title || lang('HiddenName');\n}\n\nexport function getChatDescription(chat: ApiChat) {\n if (!chat.fullInfo) {\n return undefined;\n }\n return chat.fullInfo.about;\n}\n\nexport function getChatLink(chat: ApiChat) {\n const { username } = chat;\n if (username) {\n return `https://t.me/${username}`;\n }\n\n const { inviteLink } = chat.fullInfo || {};\n\n return inviteLink;\n}\n\nexport function getChatAvatarHash(\n owner: ApiChat | ApiUser,\n size: 'normal' | 'big' = 'normal',\n) {\n if (!owner.avatarHash) {\n return undefined;\n }\n\n switch (size) {\n case 'big':\n return `profile${owner.id}?${owner.avatarHash}`;\n default:\n return `avatar${owner.id}?${owner.avatarHash}`;\n }\n}\n\nexport function isChatSummaryOnly(chat: ApiChat) {\n return !chat.lastMessage;\n}\n\nexport function isChatAdmin(chat: ApiChat) {\n return Boolean(chat.adminRights);\n}\n\nexport function getHasAdminRight(chat: ApiChat, key: keyof ApiChatAdminRights) {\n return chat.adminRights ? chat.adminRights[key] : false;\n}\n\nexport function isUserRightBanned(chat: ApiChat, key: keyof ApiChatBannedRights) {\n return Boolean(\n (chat.currentUserBannedRights?.[key])\n || (chat.defaultBannedRights?.[key]),\n );\n}\n\nexport function getCanPostInChat(chat: ApiChat, threadId: number) {\n if (threadId !== MAIN_THREAD_ID) {\n return true;\n }\n\n if (chat.isRestricted || chat.migratedTo || chat.isNotJoined || isChatWithRepliesBot(chat.id)) {\n return false;\n }\n\n if (chat.isCreator) {\n return true;\n }\n\n if (isUserId(chat.id)) {\n return true;\n }\n\n if (isChatChannel(chat)) {\n return getHasAdminRight(chat, 'postMessages');\n }\n\n return isChatAdmin(chat) || !isUserRightBanned(chat, 'sendMessages');\n}\n\nexport interface IAllowedAttachmentOptions {\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n canAttachEmbedLinks: boolean;\n}\n\nexport function getAllowedAttachmentOptions(chat?: ApiChat, isChatWithBot = false): IAllowedAttachmentOptions {\n if (!chat) {\n return {\n canAttachMedia: false,\n canAttachPolls: false,\n canSendStickers: false,\n canSendGifs: false,\n canAttachEmbedLinks: false,\n };\n }\n\n const isAdmin = isChatAdmin(chat);\n\n return {\n canAttachMedia: isAdmin || !isUserRightBanned(chat, 'sendMedia'),\n canAttachPolls: (isAdmin || !isUserRightBanned(chat, 'sendPolls')) && (!isUserId(chat.id) || isChatWithBot),\n canSendStickers: isAdmin || !isUserRightBanned(chat, 'sendStickers'),\n canSendGifs: isAdmin || !isUserRightBanned(chat, 'sendGifs'),\n canAttachEmbedLinks: isAdmin || !isUserRightBanned(chat, 'embedLinks'),\n };\n}\n\nexport function getMessageSendingRestrictionReason(\n lang: LangFn,\n currentUserBannedRights?: ApiChatBannedRights,\n defaultBannedRights?: ApiChatBannedRights,\n) {\n if (currentUserBannedRights?.sendMessages) {\n const { untilDate } = currentUserBannedRights;\n return untilDate && untilDate < FOREVER_BANNED_DATE\n ? lang(\n 'Channel.Persmission.Denied.SendMessages.Until',\n lang(\n 'formatDateAtTime',\n [formatDateToString(new Date(untilDate * 1000), lang.code), formatTime(lang, untilDate * 1000)],\n ),\n )\n : lang('Channel.Persmission.Denied.SendMessages.Forever');\n }\n\n if (defaultBannedRights?.sendMessages) {\n return lang('Channel.Persmission.Denied.SendMessages.DefaultRestrictedText');\n }\n\n return undefined;\n}\n\nexport function getChatSlowModeOptions(chat?: ApiChat) {\n if (!chat || !chat.fullInfo) {\n return undefined;\n }\n\n return chat.fullInfo.slowMode;\n}\n\nexport function getChatOrder(chat: ApiChat) {\n return Math.max(chat.joinDate || 0, chat.draftDate || 0, chat.lastMessage?.date || 0);\n}\n\nexport function isChatArchived(chat: ApiChat) {\n return chat.folderId === ARCHIVED_FOLDER_ID;\n}\n\nexport function selectIsChatMuted(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].isMuted !== undefined) {\n return notifyExceptions[chat.id].isMuted;\n }\n\n return (\n chat.isMuted\n || (isUserId(chat.id) && !notifySettings.hasPrivateChatsNotifications)\n || (isChatChannel(chat) && !notifySettings.hasBroadcastNotifications)\n || (isChatGroup(chat) && !notifySettings.hasGroupNotifications)\n );\n}\n\nexport function selectShouldShowMessagePreview(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n const {\n hasPrivateChatsMessagePreview = true,\n hasBroadcastMessagePreview = true,\n hasGroupMessagePreview = true,\n } = notifySettings;\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].shouldShowPreviews !== undefined) {\n return notifyExceptions[chat.id].shouldShowPreviews;\n }\n\n return (isUserId(chat.id) && hasPrivateChatsMessagePreview)\n || (isChatChannel(chat) && hasBroadcastMessagePreview)\n || (isChatGroup(chat) && hasGroupMessagePreview);\n}\n\nexport function getCanDeleteChat(chat: ApiChat) {\n return isChatBasicGroup(chat) || ((isChatSuperGroup(chat) || isChatChannel(chat)) && chat.isCreator);\n}\n\nexport function getFolderDescriptionText(lang: LangFn, folder: ApiChatFolder, chatsCount?: number) {\n const {\n id, title, emoticon, description, pinnedChatIds,\n excludedChatIds, includedChatIds,\n excludeArchived, excludeMuted, excludeRead,\n ...filters\n } = folder;\n\n // If folder has multiple additive filters or uses include/exclude lists,\n // we display folder chats count\n if (\n chatsCount !== undefined && (\n Object.values(filters).filter(Boolean).length > 1\n || (excludedChatIds?.length)\n || (includedChatIds?.length)\n )) {\n return lang('Chats', chatsCount);\n }\n\n // Otherwise, we return a short description of a single filter\n if (filters.bots) {\n return lang('FilterBots');\n } else if (filters.groups) {\n return lang('FilterGroups');\n } else if (filters.channels) {\n return lang('FilterChannels');\n } else if (filters.contacts) {\n return lang('FilterContacts');\n } else if (filters.nonContacts) {\n return lang('FilterNonContacts');\n } else {\n return undefined;\n }\n}\n\nexport function getMessageSenderName(lang: LangFn, chatId: string, sender?: ApiUser) {\n if (!sender || isUserId(chatId)) {\n return undefined;\n }\n\n if (sender.isSelf) {\n return lang('FromYou');\n }\n\n return getUserFirstOrLastName(sender);\n}\n\nexport function sortChatIds(\n chatIds: string[],\n chatsById: Record,\n shouldPrioritizeVerified = false,\n priorityIds?: string[],\n) {\n return orderBy(chatIds, (id) => {\n const chat = chatsById[id];\n if (!chat) {\n return 0;\n }\n\n let priority = 0;\n\n if (chat.lastMessage) {\n priority += chat.lastMessage.date;\n }\n\n if (shouldPrioritizeVerified && chat.isVerified) {\n priority += VERIFIED_PRIORITY_BASE; // ~100 years in seconds\n }\n\n if (priorityIds && priorityIds.includes(id)) {\n priority = Date.now() + PINNED_PRIORITY_BASE + (priorityIds.length - priorityIds.indexOf(id));\n }\n\n return priority;\n }, 'desc');\n}\n\nexport function filterChatsByName(\n lang: LangFn,\n chatIds: string[],\n chatsById: Record,\n query?: string,\n currentUserId?: string,\n) {\n if (!query) {\n return chatIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return chatIds.filter((id) => {\n const chat = chatsById[id];\n if (!chat) {\n return false;\n }\n\n return searchWords(getChatTitle(lang, chat, undefined, id === currentUserId));\n });\n}\n","import {\n ApiChat, ApiMessage, ApiMessageEntityTypes, ApiReactions, ApiUser,\n} from '../../api/types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport {\n CONTENT_NOT_SUPPORTED,\n LOCAL_MESSAGE_ID_BASE,\n RE_LINK_TEMPLATE,\n SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\nimport { getUserFullName } from './users';\nimport { IS_OPUS_SUPPORTED, isWebpSupported } from '../../util/environment';\nimport { getChatTitle, isUserId } from './chats';\nimport parseEmojiOnlyString from '../../components/common/helpers/parseEmojiOnlyString';\n\nconst RE_LINK = new RegExp(RE_LINK_TEMPLATE, 'i');\n\nexport type MessageKey = `msg${string}-${number}`;\n\nexport function getMessageKey(message: ApiMessage): MessageKey {\n const { chatId, id } = message;\n\n return buildMessageKey(chatId, id);\n}\n\nexport function buildMessageKey(chatId: string, msgId: number): MessageKey {\n return `msg${chatId}-${msgId}`;\n}\n\nexport function parseMessageKey(key: MessageKey) {\n const match = key.match(/^msg(-?\\d+)-(\\d+)/)!;\n\n return { chatId: match[1], messageId: Number(match[2]) };\n}\n\nexport function getMessageOriginalId(message: ApiMessage) {\n return message.previousLocalId || message.id;\n}\n\nexport function getMessageText(message: ApiMessage) {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact, invoice,\n } = message.content;\n\n if (text) {\n return text.text;\n }\n\n if (sticker || photo || video || audio || voice || document || contact || poll || webPage || invoice) {\n return undefined;\n }\n\n return CONTENT_NOT_SUPPORTED;\n}\n\nexport function getMessageCustomShape(message: ApiMessage): boolean | number {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact,\n } = message.content;\n\n if (sticker || (video?.isRound)) {\n return true;\n }\n\n if (!text || photo || video || audio || voice || document || poll || webPage || contact) {\n return false;\n }\n\n // This is a \"dual-intent\" method used to limit calls of `parseEmojiOnlyString`.\n return parseEmojiOnlyString(text.text) || false;\n}\n\nexport function getMessageSingleEmoji(message: ApiMessage) {\n const { text } = message.content;\n if (!(text && text.text.length <= 6)) {\n return undefined;\n }\n\n if (getMessageCustomShape(message) !== 1) {\n return undefined;\n }\n\n return text.text;\n}\n\nexport function getFirstLinkInMessage(message: ApiMessage) {\n const { text } = message.content;\n\n let match: RegExpMatchArray | null | undefined;\n if (text?.entities) {\n let link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.TextUrl);\n if (link) {\n match = link.url!.match(RE_LINK);\n }\n\n if (!match) {\n link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.Url);\n if (link) {\n const { offset, length } = link;\n match = text.text.substring(offset, offset + length).match(RE_LINK);\n }\n }\n }\n\n if (!match && text) {\n match = text.text.match(RE_LINK);\n }\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function matchLinkInMessageText(message: ApiMessage) {\n const { text } = message.content;\n const match = text && text.text.match(RE_LINK);\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function isOwnMessage(message: ApiMessage) {\n return message.isOutgoing;\n}\n\nexport function isReplyMessage(message: ApiMessage) {\n return Boolean(message.replyToMessageId);\n}\n\nexport function isForwardedMessage(message: ApiMessage) {\n return Boolean(message.forwardInfo);\n}\n\nexport function isActionMessage(message: ApiMessage) {\n return Boolean(message.content.action);\n}\n\nexport function isServiceNotificationMessage(message: ApiMessage) {\n return message.chatId === SERVICE_NOTIFICATIONS_USER_ID && Math.round(message.id) !== message.id;\n}\n\nexport function isAnonymousOwnMessage(message: ApiMessage) {\n return Boolean(message.senderId) && !isUserId(message.senderId!) && isOwnMessage(message);\n}\n\nexport function getSenderTitle(lang: LangFn, sender: ApiUser | ApiChat) {\n return isUserId(sender.id) ? getUserFullName(sender as ApiUser) : getChatTitle(lang, sender as ApiChat);\n}\n\nexport function getSendingState(message: ApiMessage) {\n if (!message.sendingState) {\n return 'succeeded';\n }\n\n return message.sendingState === 'messageSendingStateFailed' ? 'failed' : 'pending';\n}\n\nexport function isMessageLocal(message: ApiMessage) {\n return message.id >= LOCAL_MESSAGE_ID_BASE;\n}\n\nexport function isHistoryClearMessage(message: ApiMessage) {\n return message.content.action && message.content.action.type === 'historyClear';\n}\n\nexport function getMessageContentFilename(message: ApiMessage) {\n const { content } = message;\n\n const video = content.webPage ? content.webPage.video : content.video;\n const photo = content.webPage ? content.webPage.photo : content.photo;\n const document = content.webPage ? content.webPage.document : content.document;\n if (document) {\n return document.fileName;\n }\n\n if (video) {\n return video.fileName;\n }\n\n if (content.sticker) {\n const extension = content.sticker.isLottie ? 'tgs' : content.sticker.isGif\n ? 'webm' : isWebpSupported() ? 'webp' : 'png';\n return `${content.sticker.id}.${extension}`;\n }\n\n if (content.audio) {\n return content.audio.fileName;\n }\n\n const baseFilename = getMessageKey(message);\n\n if (photo) {\n return `${baseFilename}.jpg`;\n }\n\n if (content.voice) {\n return IS_OPUS_SUPPORTED ? `${baseFilename}.ogg` : `${baseFilename}.wav`;\n }\n\n return baseFilename;\n}\n\nexport function areReactionsEmpty(reactions: ApiReactions) {\n return !reactions.results.some((l) => l.count > 0);\n}\n","import type { TextPart } from '../../components/common/helpers/renderTextWithEntities';\n\nimport { LangFn } from '../../hooks/useLang';\nimport { ApiMessage, ApiMessageEntityTypes } from '../../api/types';\nimport { CONTENT_NOT_SUPPORTED } from '../../config';\nimport { getMessageText } from './messages';\nimport trimText from '../../util/trimText';\n\nconst SPOILER_CHARS = ['⠺', '⠵', '⠞', '⠟'];\nexport const TRUNCATED_SUMMARY_LENGTH = 80;\n\nexport function getMessageSummaryText(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n) {\n const emoji = !noEmoji && getMessageSummaryEmoji(message);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n const text = trimText(getMessageTextWithSpoilers(message), truncateLength);\n const description = getMessageSummaryDescription(lang, message, text);\n\n return `${emojiWithSpace}${description}`;\n}\n\nexport function getMessageTextWithSpoilers(message: ApiMessage) {\n const text = getMessageText(message);\n if (!text) {\n return undefined;\n }\n\n const { entities } = message.content.text || {};\n if (!entities?.length) {\n return text;\n }\n\n return entities.reduce((accText, { type, offset, length }) => {\n if (type !== ApiMessageEntityTypes.Spoiler) {\n return accText;\n }\n\n const spoiler = generateBrailleSpoiler(length);\n\n\n return `${accText.substr(0, offset)}${spoiler}${accText.substr(offset + length, accText.length)}`;\n }, text);\n}\n\nexport function getMessageSummaryEmoji(message: ApiMessage) {\n const {\n photo, video, audio, voice, document, sticker, poll,\n } = message.content;\n\n if (message.groupedId || photo) {\n return '🖼';\n }\n\n if (video) {\n return '📹';\n }\n\n if (sticker) {\n return sticker.emoji;\n }\n\n if (audio) {\n return '🎧';\n }\n\n if (voice) {\n return '🎤';\n }\n\n if (document) {\n return '📎';\n }\n\n if (poll) {\n return '📊';\n }\n\n return undefined;\n}\n\nexport function getMessageSummaryDescription(lang: LangFn, message: ApiMessage, truncatedText?: string | TextPart[]) {\n const {\n text, photo, video, audio, voice, document, sticker, contact, poll, invoice,\n } = message.content;\n\n if (message.groupedId) {\n return truncatedText || lang('lng_in_dlg_album');\n }\n\n if (photo) {\n return truncatedText || lang('AttachPhoto');\n }\n\n if (video) {\n return truncatedText || lang(video.isGif ? 'AttachGif' : 'AttachVideo');\n }\n\n if (sticker) {\n return lang('AttachSticker').trim();\n }\n\n if (audio) {\n return getMessageAudioCaption(message) || lang('AttachMusic');\n }\n\n if (voice) {\n return truncatedText || lang('AttachAudio');\n }\n\n if (document) {\n return truncatedText || document.fileName;\n }\n\n if (contact) {\n return lang('AttachContact');\n }\n\n if (poll) {\n return poll.summary.question;\n }\n\n if (invoice) {\n return 'Invoice';\n }\n\n if (text) {\n return truncatedText;\n }\n\n return CONTENT_NOT_SUPPORTED;\n}\n\nexport function generateBrailleSpoiler(length: number) {\n return new Array(length)\n .fill(undefined)\n .map(() => SPOILER_CHARS[Math.floor(Math.random() * SPOILER_CHARS.length)])\n .join('');\n}\n\nfunction getMessageAudioCaption(message: ApiMessage) {\n const { audio, text } = message.content;\n\n return (audio && [audio.title, audio.performer].filter(Boolean).join(' — ')) || (text?.text);\n}\n","import {\n ApiAudio, ApiMediaFormat, ApiMessage, ApiMessageSearchType, ApiPhoto, ApiVideo, ApiDimensions,\n} from '../../api/types';\n\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, IS_SAFARI } from '../../util/environment';\nimport { getMessageKey, isMessageLocal, matchLinkInMessageText } from './messages';\nimport { getDocumentHasPreview } from '../../components/common/helpers/documentInfo';\n\ntype Target =\n 'micro'\n | 'pictogram'\n | 'inline'\n | 'viewerPreview'\n | 'viewerFull'\n | 'download';\n\nexport function getMessageContent(message: ApiMessage) {\n return message.content;\n}\n\nexport function hasMessageMedia(message: ApiMessage) {\n return Boolean((\n getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageContact(message)\n || getMessagePoll(message)\n || getMessageAction(message)\n || getMessageAudio(message)\n || getMessageVoice(message)\n ));\n}\n\nexport function getMessagePhoto(message: ApiMessage) {\n return message.content.photo;\n}\n\nexport function getMessageVideo(message: ApiMessage) {\n return message.content.video;\n}\n\nexport function getMessageRoundVideo(message: ApiMessage) {\n const { video } = message.content;\n\n return video?.isRound ? video : undefined;\n}\n\nexport function getMessageAction(message: ApiMessage) {\n return message.content.action;\n}\n\nexport function getMessageAudio(message: ApiMessage) {\n return message.content.audio;\n}\n\nexport function getMessageVoice(message: ApiMessage) {\n return message.content.voice;\n}\n\nexport function getMessageSticker(message: ApiMessage) {\n return message.content.sticker;\n}\n\nexport function getMessageDocument(message: ApiMessage) {\n return message.content.document;\n}\n\nexport function isMessageDocumentPhoto(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'photo' : undefined;\n}\n\nexport function isMessageDocumentVideo(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'video' : undefined;\n}\n\nexport function getMessageContact(message: ApiMessage) {\n return message.content.contact;\n}\n\nexport function getMessagePoll(message: ApiMessage) {\n return message.content.poll;\n}\n\nexport function getMessageInvoice(message: ApiMessage) {\n return message.content.invoice;\n}\n\nexport function getMessageWebPage(message: ApiMessage) {\n return message.content.webPage;\n}\n\nexport function getMessageWebPagePhoto(message: ApiMessage) {\n return getMessageWebPage(message)?.photo;\n}\n\nexport function getMessageWebPageDocument(message: ApiMessage) {\n return getMessageWebPage(message)?.document;\n}\n\nexport function getMessageWebPageVideo(message: ApiMessage): ApiVideo | undefined {\n return getMessageWebPage(message)?.video;\n}\n\nexport function getMessageMediaThumbnail(message: ApiMessage) {\n const media = getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageWebPagePhoto(message)\n || getMessageWebPageVideo(message);\n\n if (!media) {\n return undefined;\n }\n\n return media.thumbnail;\n}\n\nexport function getMessageMediaThumbDataUri(message: ApiMessage) {\n return getMessageMediaThumbnail(message)?.dataUri;\n}\n\nexport function getMessageMediaHash(\n message: ApiMessage,\n target: Target,\n) {\n const {\n photo, video, sticker, audio, voice, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n const messageVideo = video || webPageVideo;\n const messagePhoto = photo || webPagePhoto;\n\n if (!(messagePhoto || messageVideo || sticker || audio || voice || document)) {\n return undefined;\n }\n\n const mediaId = (messagePhoto || messageVideo || sticker || audio || voice || document)!.id;\n const base = `${getMessageKey(message)}${mediaId ? `:${mediaId}` : ''}`;\n\n if (messageVideo) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? getVideoOrAudioBaseHash(messageVideo, base) : undefined;\n case 'viewerPreview':\n return `${base}?size=m`;\n case 'viewerFull':\n return getVideoOrAudioBaseHash(messageVideo, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (messagePhoto) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? `${base}?size=x` : undefined;\n case 'viewerPreview':\n return `${base}?size=x`;\n case 'viewerFull':\n case 'download':\n return `${base}?size=z`;\n }\n }\n\n if (document) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n case 'inline':\n case 'viewerPreview':\n if (!getDocumentHasPreview(document) || hasMessageLocalBlobUrl(message)) {\n return undefined;\n }\n\n return `${base}?size=m`;\n case 'viewerFull':\n case 'download':\n return base;\n }\n }\n\n if (sticker) {\n switch (target) {\n case 'micro':\n return undefined;\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (audio) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return getAudioHasCover(audio) ? `${base}?size=m` : undefined;\n case 'inline':\n return getVideoOrAudioBaseHash(audio, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (voice) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return undefined;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n return undefined;\n}\n\nfunction getVideoOrAudioBaseHash(media: ApiAudio | ApiVideo, base: string) {\n if (IS_PROGRESSIVE_SUPPORTED && IS_SAFARI) {\n return `${base}?fileSize=${media.size}&mimeType=${media.mimeType}`;\n }\n\n return base;\n}\n\nexport function getAudioHasCover(media: ApiAudio) {\n return media.thumbnailSizes && media.thumbnailSizes.length > 0;\n}\n\nexport function getMessageMediaFormat(\n message: ApiMessage, target: Target,\n): ApiMediaFormat {\n const {\n sticker, video, audio, voice,\n } = message.content;\n\n const fullVideo = video || getMessageWebPageVideo(message);\n\n if (sticker && target === 'inline' && sticker.isLottie) {\n return ApiMediaFormat.Lottie;\n } else if (fullVideo && IS_PROGRESSIVE_SUPPORTED && (\n target === 'viewerFull' || target === 'inline'\n )) {\n return ApiMediaFormat.Progressive;\n } else if (audio || voice) {\n // Safari\n if (voice && !IS_OPUS_SUPPORTED) {\n return ApiMediaFormat.BlobUrl;\n }\n\n return ApiMediaFormat.Progressive;\n }\n\n return ApiMediaFormat.BlobUrl;\n}\n\nexport function getMessageFileName(message: ApiMessage) {\n const {\n photo, video, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n if (photo || webPagePhoto) {\n return `photo${message.date}.jpeg`;\n }\n\n const { fileName } = video || webPageVideo || document || {};\n\n return fileName;\n}\n\nexport function getMessageFileSize(message: ApiMessage) {\n const { video, document } = message.content;\n const webPageVideo = getMessageWebPageVideo(message);\n const { size } = video || webPageVideo || document || {};\n\n return size;\n}\n\nexport function hasMessageLocalBlobUrl(message: ApiMessage) {\n const { photo, video, document } = message.content;\n\n return (photo?.blobUrl) || (video?.blobUrl) || (document?.previewBlobUrl);\n}\n\nexport function getChatMediaMessageIds(\n messages: Record, listedIds: number[], isFromSharedMedia = false,\n) {\n return getMessageContentIds(messages, listedIds, isFromSharedMedia ? 'media' : 'inlineMedia');\n}\n\nexport function getPhotoFullDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'z')\n || photo.sizes.find((size) => size.type === 'y')\n || getPhotoInlineDimensions(photo)\n );\n}\n\nexport function getPhotoInlineDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'x')\n || photo.sizes.find((size) => size.type === 'm')\n || photo.sizes.find((size) => size.type === 's')\n || photo.thumbnail\n );\n}\n\nexport function getVideoDimensions(video: ApiVideo): ApiDimensions | undefined {\n if (video.width && video.height) {\n return video as ApiDimensions;\n }\n\n return undefined;\n}\n\nexport function getMediaTransferState(message: ApiMessage, progress?: number, isLoadNeeded = false) {\n const isUploading = isMessageLocal(message);\n const isTransferring = isUploading || isLoadNeeded;\n const transferProgress = Number(progress);\n\n return {\n isUploading, isTransferring, transferProgress,\n };\n}\n\nexport function getMessageContentIds(\n messages: Record, messageIds: number[], contentType: ApiMessageSearchType | 'inlineMedia',\n) {\n let validator: Function;\n\n switch (contentType) {\n case 'media':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessagePhoto(message) || (video && !video.isRound && !video.isGif);\n };\n break;\n\n case 'documents':\n validator = getMessageDocument;\n break;\n\n case 'links':\n validator = (message: ApiMessage) => getMessageWebPage(message) || matchLinkInMessageText(message);\n break;\n\n case 'audio':\n validator = getMessageAudio;\n break;\n\n case 'voice':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessageVoice(message) || (video && video.isRound);\n };\n break;\n\n case 'inlineMedia':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return (\n getMessagePhoto(message)\n || (video && !video.isRound && !video.isGif)\n || isMessageDocumentPhoto(message)\n || isMessageDocumentVideo(message)\n );\n };\n break;\n\n default:\n return [] as Array;\n }\n\n return messageIds.reduce((result, messageId) => {\n if (messages[messageId] && validator(messages[messageId])) {\n result.push(messageId);\n }\n\n return result;\n }, [] as Array);\n}\n\nexport function getMediaDuration(message: ApiMessage) {\n const { audio, voice, video } = getMessageContent(message);\n const media = audio || voice || video || getMessageWebPageVideo(message);\n if (!media) {\n return undefined;\n }\n\n return media.duration;\n}\n","export function buildChatThreadKey(chatId: string, threadId: number) {\n return `${chatId}_${threadId}`;\n}\n","import { ApiFieldError } from '../../api/types';\n\nconst STRIPE_ERRORS: Record = {\n missing_payment_information: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n invalid_number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n exp_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n exp_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n invalid_expiry_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n invalid_expiry_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n invalid_cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n};\n\nexport function getStripeError(error: {\n code: string;\n message: string;\n param?: string;\n}) {\n const { message: description, code, param } = error;\n const { field, message } = param ? STRIPE_ERRORS[param] : STRIPE_ERRORS[code];\n\n return { field, message, description };\n}\n","import { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport { formatFullDate, formatTime } from '../../util/dateFormat';\nimport { orderBy } from '../../util/iteratees';\nimport { LangFn } from '../../hooks/useLang';\nimport { getServerTime } from '../../util/serverTime';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst USER_COLOR_KEYS = [1, 8, 5, 2, 7, 4, 6];\n\nexport function getUserFirstOrLastName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n return user.firstName || user.lastName;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted';\n }\n\n default:\n return undefined;\n }\n}\n\nexport function getUserFullName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n if (isDeletedUser(user)) {\n return 'Deleted account';\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n if (user.firstName && user.lastName) {\n return `${user.firstName} ${user.lastName}`;\n }\n\n if (user.firstName) {\n return user.firstName;\n }\n\n if (user.lastName) {\n return user.lastName;\n }\n\n break;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted account';\n }\n }\n\n return undefined;\n}\n\nexport function getUserStatus(\n lang: LangFn, user: ApiUser, userStatus: ApiUserStatus | undefined, serverTimeOffset: number,\n) {\n if (user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return lang('ServiceNotifications').toLowerCase();\n }\n\n if (user.type && user.type === 'userTypeBot') {\n return lang('Bot');\n }\n\n if (!userStatus) {\n return '';\n }\n\n switch (userStatus.type) {\n case 'userStatusEmpty': {\n return lang('ALongTimeAgo');\n }\n\n case 'userStatusLastMonth': {\n return lang('WithinAMonth');\n }\n\n case 'userStatusLastWeek': {\n return lang('WithinAWeek');\n }\n\n case 'userStatusOffline': {\n const { wasOnline } = userStatus;\n\n if (!wasOnline) return lang('LastSeen.Offline');\n\n const now = new Date(new Date().getTime() + serverTimeOffset * 1000);\n const wasOnlineDate = new Date(wasOnline * 1000);\n\n if (wasOnlineDate >= now) {\n return lang('LastSeen.JustNow');\n }\n\n const diff = new Date(now.getTime() - wasOnlineDate.getTime());\n\n // within a minute\n if (diff.getTime() / 1000 < 60) {\n return lang('LastSeen.JustNow');\n }\n\n // within an hour\n if (diff.getTime() / 1000 < 60 * 60) {\n const minutes = Math.floor(diff.getTime() / 1000 / 60);\n return lang('LastSeen.MinutesAgo', minutes);\n }\n\n // today\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const serverToday = new Date(today.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverToday) {\n // up to 6 hours ago\n if (diff.getTime() / 1000 < 6 * 60 * 60) {\n const hours = Math.floor(diff.getTime() / 1000 / 60 / 60);\n return lang('LastSeen.HoursAgo', hours);\n }\n\n // other\n return lang('LastSeen.TodayAt', formatTime(lang, wasOnlineDate));\n }\n\n // yesterday\n const yesterday = new Date();\n yesterday.setDate(now.getDate() - 1);\n yesterday.setHours(0, 0, 0, 0);\n const serverYesterday = new Date(yesterday.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverYesterday) {\n return lang('LastSeen.YesterdayAt', formatTime(lang, wasOnlineDate));\n }\n\n return lang('LastSeen.AtDate', formatFullDate(lang, wasOnlineDate));\n }\n\n case 'userStatusOnline': {\n return lang('Online');\n }\n\n case 'userStatusRecently': {\n return lang('Lately');\n }\n\n default:\n return undefined;\n }\n}\n\nexport function isUserOnline(user: ApiUser, userStatus?: ApiUserStatus) {\n const { id, type } = user;\n\n if (!userStatus) {\n return false;\n }\n\n if (id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return userStatus.type === 'userStatusOnline' && type !== 'userTypeBot';\n}\n\nexport function isDeletedUser(user: ApiUser) {\n if (user.noStatus || user.type === 'userTypeBot' || user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return user.type === 'userTypeDeleted'\n || user.type === 'userTypeUnknown';\n}\n\nexport function isUserBot(user: ApiUser) {\n return user.type === 'userTypeBot';\n}\n\nexport function getCanAddContact(user: ApiUser) {\n return !user.isContact && !isUserBot(user);\n}\n\nexport function sortUserIds(\n userIds: string[],\n usersById: Record,\n userStatusesById: Record,\n priorityIds?: string[],\n serverTimeOffset = 0,\n) {\n return orderBy(userIds, (id) => {\n const now = getServerTime(serverTimeOffset);\n\n if (priorityIds && priorityIds.includes(id)) {\n // Assuming that online status expiration date can't be as far as two days from now,\n // this should place prioritized on top of the list.\n // Then we subtract index of `id` in `priorityIds` to preserve selected order\n return now + (48 * 60 * 60) - (priorityIds.length - priorityIds.indexOf(id));\n }\n\n const user = usersById[id];\n const userStatus = userStatusesById[id];\n if (!user || !userStatus) {\n return 0;\n }\n\n if (userStatus.type === 'userStatusOnline') {\n return userStatus.expires;\n } else if (userStatus.type === 'userStatusOffline' && userStatus.wasOnline) {\n return userStatus.wasOnline;\n }\n\n switch (userStatus.type) {\n case 'userStatusRecently':\n return now - 60 * 60 * 24;\n case 'userStatusLastWeek':\n return now - 60 * 60 * 24 * 7;\n case 'userStatusLastMonth':\n return now - 60 * 60 * 24 * 7 * 30;\n default:\n return 0;\n }\n }, 'desc');\n}\n\nexport function filterUsersByName(\n userIds: string[],\n usersById: Record,\n query?: string,\n currentUserId?: string,\n savedMessagesLang?: string,\n) {\n if (!query) {\n return userIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return userIds.filter((id) => {\n const user = usersById[id];\n if (!user) {\n return false;\n }\n\n const name = id === currentUserId ? savedMessagesLang : getUserFullName(user);\n return (name && searchWords(name)) || searchWords(user.username);\n });\n}\n\nexport function getUserIdDividend(userId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof userId === 'number') {\n return Math.abs(userId);\n }\n\n return Math.abs(Number(userId));\n}\n\n// eslint-disable-next-line max-len\n// https://github.com/telegramdesktop/tdesktop/blob/371510cfe23b0bd226de8c076bc49248fbe40c26/Telegram/SourceFiles/data/data_peer.cpp#L53\nexport function getUserColorKey(peer: ApiUser | ApiChat | undefined) {\n const index = peer ? getUserIdDividend(peer.id) % 7 : 0;\n\n return USER_COLOR_KEYS[index];\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiChat, ApiPhoto } from '../../api/types';\n\nimport { ARCHIVED_FOLDER_ID } from '../../config';\nimport { omit } from '../../util/iteratees';\nimport { selectChatListType } from '../selectors';\n\nexport function replaceChatListIds(\n global: GlobalState,\n type: 'active' | 'archived',\n newIds: string[] | undefined,\n): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n listIds: {\n ...global.chats.listIds,\n [type]: newIds,\n },\n },\n };\n}\n\nexport function updateChatListIds(global: GlobalState, type: 'active' | 'archived', idsUpdate: string[]): GlobalState {\n const { [type]: listIds } = global.chats.listIds;\n const newIds = listIds?.length\n ? idsUpdate.filter((id) => !listIds.includes(id))\n : idsUpdate;\n\n if (listIds && !newIds.length) {\n return global;\n }\n\n return replaceChatListIds(global, type, [\n ...(listIds || []),\n ...newIds,\n ]);\n}\n\nexport function replaceChats(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n byId: newById,\n },\n };\n}\n\nexport function updateChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n): GlobalState {\n const { byId } = global.chats;\n\n const updatedChat = getUpdatedChat(global, chatId, chatUpdate, photo);\n if (!updatedChat) {\n return global;\n }\n\n return replaceChats(global, {\n ...byId,\n [chatId]: updatedChat,\n });\n}\n\nexport function updateChats(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n }\n\n return acc;\n }, {});\n\n global = replaceChats(global, {\n ...global.chats.byId,\n ...updatedById,\n });\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addChats(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.chats;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceChats(global, {\n ...byId,\n ...addedById,\n });\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n) {\n const { byId } = global.chats;\n const chat = byId[chatId];\n const shouldOmitMinInfo = chatUpdate.isMin && chat && !chat.isMin;\n const updatedChat: ApiChat = {\n ...chat,\n ...(shouldOmitMinInfo ? omit(chatUpdate, ['isMin', 'accessHash']) : chatUpdate),\n ...(photo && { photos: [photo, ...(chat.photos || [])] }),\n };\n\n if (!updatedChat.id || !updatedChat.type) {\n return undefined;\n }\n\n return updatedChat;\n}\n\nexport function updateChatListType(\n global: GlobalState,\n chatId: string,\n folderId?: number,\n): GlobalState {\n const listType = folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n\n let currentListIds = global.chats.listIds;\n (Object.keys(currentListIds) as Array).forEach((listTypeKey) => {\n const currentFolderList = currentListIds[listTypeKey] || [];\n if (listTypeKey === listType && !currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: [...currentFolderList, chatId],\n };\n } else if (listTypeKey !== listType && currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: currentFolderList.filter((id) => id !== chatId),\n };\n }\n });\n\n global = {\n ...global,\n chats: {\n ...global.chats,\n listIds: currentListIds,\n },\n };\n\n global = updateChat(global, chatId, { folderId: folderId || undefined });\n\n return global;\n}\n\nexport function updateChatListSecondaryInfo(\n global: GlobalState,\n type: 'active' | 'archived',\n info: {\n orderedPinnedIds?: string[];\n totalChatCount: number;\n },\n): GlobalState {\n const totalCountKey = type === 'active' ? 'all' : 'archived';\n\n return {\n ...global,\n chats: {\n ...global.chats,\n ...(info.orderedPinnedIds && {\n orderedPinnedIds: {\n ...global.chats.orderedPinnedIds,\n [type]: info.orderedPinnedIds,\n },\n }),\n totalCount: {\n ...global.chats.totalCount,\n [totalCountKey]: info.totalChatCount,\n },\n isFullyLoaded: {\n ...global.chats.isFullyLoaded,\n [type]: false,\n },\n },\n };\n}\n\nexport function leaveChat(global: GlobalState, leftChatId: string): GlobalState {\n const listType = selectChatListType(global, leftChatId);\n if (!listType) {\n return global;\n }\n\n const { [listType]: listIds } = global.chats.listIds;\n\n if (listIds) {\n global = replaceChatListIds(global, listType, listIds.filter((listId) => listId !== leftChatId));\n }\n\n global = updateChat(global, leftChatId, { isNotJoined: true });\n\n return global;\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiSticker, ApiStickerSet, ApiVideo } from '../../api/types';\nimport { buildCollectionByKey, unique } from '../../util/iteratees';\nimport { selectStickersForEmoji } from '../selectors';\n\nexport function updateStickerSets(\n global: GlobalState,\n category: 'added' | 'featured' | 'search',\n hash: string,\n sets: ApiStickerSet[],\n resultIds?: string[],\n): GlobalState {\n const updatedSets = sets.map((stickerSet) => {\n const existing = global.stickers.setsById[stickerSet.id];\n if (!existing) {\n return stickerSet;\n }\n\n return {\n ...existing,\n ...stickerSet,\n };\n });\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n setsById: {\n ...global.stickers.setsById,\n ...buildCollectionByKey(updatedSets, 'id'),\n },\n [category]: {\n ...global.stickers[category],\n hash,\n ...(\n category === 'search'\n ? { resultIds }\n : { setIds: sets.map(({ id }) => id) }\n ),\n },\n },\n };\n}\n\nexport function updateStickerSet(\n global: GlobalState, stickerSetId: string, update: Partial,\n): GlobalState {\n const currentStickerSet = global.stickers.setsById[stickerSetId] || {};\n const addedSets = global.stickers.added.setIds || [];\n let setIds: string[] = addedSets;\n if (update.installedDate && addedSets && !addedSets.includes(stickerSetId)) {\n setIds = [stickerSetId, ...setIds];\n }\n\n if (!update.installedDate && addedSets?.includes(stickerSetId)) {\n setIds = setIds.filter((id) => id !== stickerSetId);\n }\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n added: {\n ...global.stickers.added,\n setIds,\n },\n setsById: {\n ...global.stickers.setsById,\n [stickerSetId]: {\n ...currentStickerSet,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateGifSearch(\n global: GlobalState, isNew: boolean, results: ApiVideo[], nextOffset?: string,\n): GlobalState {\n const { results: currentResults } = global.gifs.search;\n\n let newResults!: ApiVideo[];\n if (isNew || !currentResults) {\n newResults = results;\n } else {\n const currentIds = new Set(currentResults.map((gif) => gif.id));\n newResults = [\n ...currentResults,\n ...results.filter((gif) => !currentIds.has(gif.id)),\n ];\n }\n\n return {\n ...global,\n gifs: {\n ...global.gifs,\n search: {\n ...global.gifs.search,\n offset: nextOffset,\n results: newResults,\n },\n },\n };\n}\n\nexport function replaceAnimatedEmojis(global: GlobalState, stickerSet: ApiStickerSet): GlobalState {\n return {\n ...global,\n animatedEmojis: stickerSet,\n };\n}\n\nexport function updateStickersForEmoji(\n global: GlobalState, emoji: string, remoteStickers?: ApiSticker[], hash?: string,\n): GlobalState {\n const localStickers = selectStickersForEmoji(global, emoji);\n const allStickers = [...localStickers, ...(remoteStickers || [])];\n const uniqueIds = unique(allStickers.map(({ id }) => id));\n const byId = buildCollectionByKey(allStickers, 'id');\n const stickers = uniqueIds.map((id) => byId[id]);\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n forEmoji: {\n emoji,\n stickers,\n hash,\n },\n },\n };\n}\n\nexport function rebuildStickersForEmoji(global: GlobalState): GlobalState {\n const { emoji, stickers, hash } = global.stickers.forEmoji || {};\n if (!emoji) {\n return global;\n }\n\n return updateStickersForEmoji(global, emoji, stickers, hash);\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { omit, pick } from '../../util/iteratees';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\n\nexport function replaceUsers(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n byId: newById,\n },\n };\n}\n\nfunction updateContactList(global: GlobalState, updatedUsers: ApiUser[]): GlobalState {\n const { userIds: contactUserIds } = global.contactList || {};\n\n if (!contactUserIds) return global;\n\n const newContactUserIds = updatedUsers\n .filter((user) => user?.isContact && !contactUserIds.includes(user.id))\n .map((user) => user.id);\n\n if (newContactUserIds.length === 0) return global;\n\n return {\n ...global,\n contactList: {\n userIds: [\n ...newContactUserIds,\n ...contactUserIds,\n ],\n },\n };\n}\n\nexport function updateUser(global: GlobalState, userId: string, userUpdate: Partial): GlobalState {\n const { byId } = global.users;\n\n const updatedUser = getUpdatedUser(global, userId, userUpdate);\n if (!updatedUser) {\n return global;\n }\n\n global = updateContactList(global, [updatedUser]);\n\n return replaceUsers(global, {\n ...byId,\n [userId]: updatedUser,\n });\n}\n\nexport function updateUsers(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n }\n\n return acc;\n }, {});\n\n global = replaceUsers(global, {\n ...global.users.byId,\n ...updatedById,\n });\n\n global = updateContactList(global, Object.values(updatedById));\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUsers(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.users;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceUsers(global, {\n ...byId,\n ...addedById,\n });\n\n global = updateContactList(global, Object.values(addedById));\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedUser(global: GlobalState, userId: string, userUpdate: Partial) {\n const { byId } = global.users;\n const user = byId[userId];\n const shouldOmitMinInfo = userUpdate.isMin && user && !user.isMin;\n\n const updatedUser = {\n ...user,\n ...(shouldOmitMinInfo ? omit(userUpdate, ['isMin', 'accessHash']) : userUpdate),\n };\n\n if (!updatedUser.id || !updatedUser.type) {\n return undefined;\n }\n\n return updatedUser;\n}\n\nexport function deleteContact(global: GlobalState, userId: string): GlobalState {\n const { byId } = global.users;\n const { userIds } = global.contactList || {};\n\n global = {\n ...global,\n contactList: {\n userIds: userIds ? userIds.filter((id) => id !== userId) : MEMO_EMPTY_ARRAY,\n },\n };\n\n return replaceUsers(global, {\n ...byId,\n [userId]: {\n ...byId[userId],\n isContact: undefined,\n },\n });\n}\n\nexport function updateUserSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n userSearch: {\n ...global.userSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateUserSearchFetchingStatus(\n global: GlobalState, newState: boolean,\n) {\n return updateUserSearch(global, {\n fetchingStatus: newState,\n });\n}\n\nexport function updateUserBlockedState(global: GlobalState, userId: string, isBlocked: boolean) {\n const { byId } = global.users;\n const user = byId[userId];\n if (!user || !user.fullInfo) {\n return global;\n }\n\n return updateUser(global, userId, {\n ...user,\n fullInfo: {\n ...user.fullInfo,\n isBlocked,\n },\n });\n}\n\nexport function replaceUserStatuses(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n statusesById: newById,\n },\n };\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUserStatuses(global: GlobalState, newById: Record): GlobalState {\n const { statusesById } = global.users;\n\n const newKeys = Object.keys(newById).filter((id) => !statusesById[id]);\n if (!newKeys.length) {\n return global;\n }\n\n global = replaceUserStatuses(global, {\n ...statusesById,\n ...pick(newById, newKeys),\n });\n\n return global;\n}\n","import { GlobalState } from '../../global/types';\nimport { GlobalSearchContent } from '../../types';\nimport { ApiGlobalMessageSearchType, ApiMessage } from '../../api/types';\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nconst getComplexKey = (message: ApiMessage) => `${message.chatId}_${message.id}`;\n\nexport function updateGlobalSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n globalSearch: {\n ...global.globalSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateGlobalSearchContent(\n global: GlobalState,\n currentContent: GlobalSearchContent | undefined,\n): GlobalState {\n return updateGlobalSearch(global, { currentContent });\n}\n\nexport function updateGlobalSearchResults(\n global: GlobalState,\n newFoundMessages: ApiMessage[],\n totalCount: number,\n type: ApiGlobalMessageSearchType,\n nextRate?: number,\n): GlobalState {\n const { resultsByType } = global.globalSearch || {};\n const newFoundMessagesById = newFoundMessages.reduce((result, message) => {\n result[getComplexKey(message)] = message;\n\n return result;\n }, {} as Record);\n const foundIdsForType = resultsByType?.[type]?.foundIds;\n\n if (foundIdsForType !== undefined\n && Object.keys(newFoundMessagesById).every(\n (newId) => foundIdsForType.includes(getComplexKey(newFoundMessagesById[newId])),\n )\n ) {\n return updateGlobalSearchFetchingStatus(global, { messages: false });\n }\n\n const prevFoundIds = foundIdsForType || [];\n const newFoundIds = newFoundMessages.map((message) => getComplexKey(message));\n const foundIds = Array.prototype.concat(prevFoundIds, newFoundIds);\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n global = updateGlobalSearchFetchingStatus(global, { messages: false });\n\n return updateGlobalSearch(global, {\n resultsByType: {\n ...(global.globalSearch || {}).resultsByType,\n [type]: {\n totalCount,\n nextOffsetId: nextRate,\n foundIds: foundOrPrevFoundIds,\n },\n },\n });\n}\n\nexport function updateGlobalSearchFetchingStatus(\n global: GlobalState, newState: { chats?: boolean; messages?: boolean },\n) {\n return updateGlobalSearch(global, {\n fetchingStatus: {\n ...global.globalSearch.fetchingStatus,\n ...newState,\n },\n });\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiMessageSearchType } from '../../api/types';\n\nimport { areSortedArraysEqual, unique } from '../../util/iteratees';\nimport { SharedMediaType } from '../../types';\nimport { buildChatThreadKey } from '../helpers';\n\ninterface TextSearchParams {\n isActive: boolean;\n query?: string;\n results?: {\n totalCount?: number;\n nextOffsetId?: number;\n foundIds?: number[];\n };\n}\n\ninterface MediaSearchParams {\n currentType?: SharedMediaType;\n resultsByType?: Partial>;\n}\n\nfunction replaceLocalTextSearch(\n global: GlobalState,\n chatThreadKey: string,\n searchParams: TextSearchParams,\n): GlobalState {\n return {\n ...global,\n localTextSearch: {\n byChatThreadKey: {\n ...global.localTextSearch.byChatThreadKey,\n [chatThreadKey]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalTextSearch(\n global: GlobalState,\n chatId: string,\n threadId: number,\n isActive: boolean,\n query?: string,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n isActive,\n query,\n });\n}\n\nexport function replaceLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n results: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n });\n}\n\nexport function updateLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const { results } = global.localTextSearch.byChatThreadKey[chatThreadKey] || {};\n const prevFoundIds = (results?.foundIds) || [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalTextSearchResults(global, chatId, threadId, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction replaceLocalMediaSearch(\n global: GlobalState,\n chatId: string,\n searchParams: MediaSearchParams,\n): GlobalState {\n return {\n ...global,\n localMediaSearch: {\n byChatId: {\n ...global.localMediaSearch.byChatId,\n [chatId]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalMediaSearchType(\n global: GlobalState,\n chatId: string,\n currentType: SharedMediaType | undefined,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n currentType,\n });\n}\n\nexport function replaceLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: ApiMessageSearchType,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n resultsByType: {\n ...(global.localMediaSearch.byChatId[chatId] || {}).resultsByType,\n [type]: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n },\n });\n}\n\nexport function updateLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: SharedMediaType,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const { resultsByType } = global.localMediaSearch.byChatId[chatId] || {};\n const prevFoundIds = resultsByType?.[type] ? resultsByType[type]!.foundIds : [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalMediaSearchResults(global, chatId, type, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction orderFoundIds(listedIds: number[]) {\n return listedIds.sort((a, b) => b - a);\n}\n","import { GlobalState } from '../../global/types';\nimport { ManagementProgress, ManagementState } from '../../types';\n\nexport function updateManagementProgress(global: GlobalState, progress: ManagementProgress): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n progress,\n },\n };\n}\n\nexport function updateManagement(global: GlobalState, chatId: string, update: Partial): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...(global.management.byChatId[chatId] || {}),\n ...update,\n },\n },\n },\n };\n}\n","import { GlobalState } from '../../global/types';\nimport {\n ISettings, IThemeSettings, ThemeKey, NotifyException,\n} from '../../types';\nimport { ApiNotifyException } from '../../api/types';\nimport { updateUserBlockedState } from './users';\n\nexport function replaceSettings(global: GlobalState, newSettings?: Partial): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n byKey: {\n ...global.settings.byKey,\n ...newSettings,\n },\n },\n };\n}\n\nexport function replaceThemeSettings(\n global: GlobalState, theme: ThemeKey, newSettings?: Partial,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n themes: {\n ...global.settings.themes,\n [theme]: {\n ...(global.settings.themes[theme] || {}),\n ...newSettings,\n },\n },\n },\n };\n}\n\nexport function addNotifyExceptions(\n global: GlobalState, notifyExceptions: ApiNotifyException[],\n): GlobalState {\n notifyExceptions.forEach((notifyException) => {\n const { chatId, ...exceptionData } = notifyException;\n global = addNotifyException(global, chatId, exceptionData);\n });\n\n return global;\n}\n\nexport function addNotifyException(\n global: GlobalState, id: string, notifyException: NotifyException,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n notifyExceptions: {\n ...global.settings.notifyExceptions,\n [id]: notifyException,\n },\n },\n };\n}\n\nexport function updateNotifySettings(\n global: GlobalState, peerType: 'contact' | 'group' | 'broadcast', isSilent?: boolean, shouldShowPreviews?: boolean,\n) {\n switch (peerType) {\n case 'contact':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasPrivateChatsNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasPrivateChatsMessagePreview: shouldShowPreviews }),\n });\n case 'group':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasGroupNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasGroupMessagePreview: shouldShowPreviews }),\n });\n case 'broadcast':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasBroadcastNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasBroadcastMessagePreview: shouldShowPreviews }),\n });\n\n default:\n return undefined;\n }\n}\n\nexport function addBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, true);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: [contactId, ...global.blocked.ids],\n totalCount: global.blocked.totalCount + 1,\n },\n };\n}\n\nexport function removeBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, false);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: global.blocked.ids.filter((id) => id !== contactId),\n totalCount: global.blocked.totalCount - 1,\n },\n };\n}\n","import { GlobalState } from '../../global/types';\n\nexport function updateTwoFaSettings(\n global: GlobalState,\n update: GlobalState['twoFaSettings'],\n): GlobalState {\n return {\n ...global,\n twoFaSettings: {\n ...global.twoFaSettings,\n ...update,\n },\n };\n}\n","import { GlobalState } from '../../global/types';\nimport { ShippingOption, PaymentStep } from '../../types';\nimport { ApiMessage, ApiPaymentForm, ApiReceipt } from '../../api/types';\n\nexport function updateShippingOptions(\n global: GlobalState,\n shippingOptions: ShippingOption[],\n): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n shippingOptions,\n },\n };\n}\n\nexport function setRequestInfoId(global: GlobalState, id: string): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n requestId: id,\n },\n };\n}\n\nexport function setPaymentStep(global: GlobalState, step: PaymentStep): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n step,\n },\n };\n}\n\nexport function setInvoiceMessageInfo(global: GlobalState, message: ApiMessage): GlobalState {\n if (!message.content || !message.content.invoice) {\n return global;\n }\n const {\n title,\n text,\n amount,\n currency,\n isTest,\n photoUrl,\n } = message.content.invoice;\n return {\n ...global,\n payment: {\n ...global.payment,\n invoiceContent: {\n title,\n text,\n photoUrl,\n amount,\n currency,\n isTest,\n },\n },\n };\n}\n\nexport function setStripeCardInfo(global: GlobalState, cardInfo: { type: string; id: string }): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n stripeCredentials: {\n ...cardInfo,\n },\n },\n };\n}\n\nexport function setPaymentForm(global: GlobalState, form: ApiPaymentForm): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n ...form,\n },\n };\n}\n\nexport function setReceipt(\n global: GlobalState,\n receipt?: ApiReceipt,\n message?: ApiMessage,\n): GlobalState {\n if (!receipt || !message) {\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: undefined,\n },\n };\n }\n\n const { invoice: messageInvoice } = message.content;\n const { photoUrl, text, title } = (messageInvoice || {});\n\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: {\n ...receipt,\n photoUrl,\n text,\n title,\n },\n },\n };\n}\n\nexport function clearPayment(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {},\n };\n}\n\nexport function closeInvoice(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n isPaymentModalOpen: false,\n },\n };\n}\n","import {\n GlobalState, MessageList, MessageListType, Thread,\n} from '../../global/types';\nimport {\n ApiMessage, ApiSponsoredMessage, ApiThreadInfo, MAIN_THREAD_ID,\n} from '../../api/types';\nimport { FocusDirection } from '../../types';\n\nimport {\n IS_TEST, MESSAGE_LIST_SLICE, MESSAGE_LIST_VIEWPORT_LIMIT, TMP_CHAT_ID,\n} from '../../config';\nimport {\n selectListedIds,\n selectChatMessages,\n selectViewportIds,\n selectOutlyingIds,\n selectPinnedIds,\n selectThreadInfo,\n selectMessageIdsByGroupId,\n selectScheduledMessages,\n selectScheduledIds,\n selectCurrentMessageIds,\n selectChatMessage,\n selectCurrentMessageList,\n} from '../selectors';\nimport {\n areSortedArraysEqual, omit, pickTruthy, unique,\n} from '../../util/iteratees';\n\ntype MessageStoreSections = {\n byId: Record;\n threadsById: Record;\n};\n\nexport function updateCurrentMessageList(\n global: GlobalState,\n chatId: string | undefined,\n threadId: number = MAIN_THREAD_ID,\n type: MessageListType = 'thread',\n shouldReplaceHistory?: boolean,\n): GlobalState {\n const { messageLists } = global.messages;\n let newMessageLists: MessageList[] = messageLists;\n if (shouldReplaceHistory || IS_TEST) {\n newMessageLists = chatId ? [{ chatId, threadId, type }] : [];\n } else if (chatId) {\n const last = messageLists[messageLists.length - 1];\n if (!last || last.chatId !== chatId || last.threadId !== threadId || last.type !== type) {\n if (last && last.chatId === TMP_CHAT_ID) {\n newMessageLists = [...messageLists.slice(0, -1), { chatId, threadId, type }];\n } else {\n newMessageLists = [...messageLists, { chatId, threadId, type }];\n }\n }\n } else {\n newMessageLists = messageLists.slice(0, -1);\n }\n\n return {\n ...global,\n messages: {\n ...global.messages,\n messageLists: newMessageLists,\n },\n };\n}\n\nfunction replaceChatMessages(global: GlobalState, chatId: string, newById: Record): GlobalState {\n return updateMessageStore(global, chatId, {\n byId: newById,\n });\n}\n\nfunction updateThread(\n global: GlobalState, chatId: string, threadId: number, threadUpdate: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId];\n\n return updateMessageStore(global, chatId, {\n threadsById: {\n ...(current?.threadsById),\n [threadId]: {\n ...(current?.threadsById[threadId]),\n ...threadUpdate,\n },\n },\n });\n}\n\nfunction updateMessageStore(\n global: GlobalState, chatId: string, update: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId] || { byId: {}, threadsById: {} };\n\n return {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {\n ...global.messages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function replaceThreadParam(\n global: GlobalState, chatId: string, threadId: number, paramName: T, newValue: Thread[T] | undefined,\n) {\n return updateThread(global, chatId, threadId, { [paramName]: newValue });\n}\n\nexport function addMessages(\n global: GlobalState, messages: ApiMessage[],\n): GlobalState {\n const addedByChatId = messages.reduce((messagesByChatId, message: ApiMessage) => {\n if (!messagesByChatId[message.chatId]) {\n messagesByChatId[message.chatId] = {};\n }\n messagesByChatId[message.chatId][message.id] = message;\n\n return messagesByChatId;\n }, {} as Record>);\n\n Object.keys(addedByChatId).forEach((chatId) => {\n global = addChatMessagesById(global, chatId, addedByChatId[chatId]);\n });\n\n return global;\n}\n\nexport function addChatMessagesById(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n\n if (byId && Object.keys(newById).every((newId) => Boolean(byId[Number(newId)]))) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...newById,\n ...byId,\n });\n}\n\nexport function updateChatMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectChatMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function updateScheduledMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceScheduledMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function deleteChatMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n const deletedForwardedPosts = Object.values(pickTruthy(byId, messageIds)).filter(\n ({ forwardInfo }) => forwardInfo?.isLinkedChannelPost,\n );\n\n const threadIds = Object.keys(global.messages.byChatId[chatId].threadsById).map(Number);\n threadIds.forEach((threadId) => {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n\n let listedIds = selectListedIds(global, chatId, threadId);\n let outlyingIds = selectOutlyingIds(global, chatId, threadId);\n let viewportIds = selectViewportIds(global, chatId, threadId);\n let pinnedIds = selectPinnedIds(global, chatId);\n let newMessageCount = threadInfo?.messagesCount;\n\n messageIds.forEach((messageId) => {\n if (listedIds && listedIds.includes(messageId)) {\n listedIds = listedIds.filter((id) => id !== messageId);\n if (newMessageCount !== undefined) newMessageCount -= 1;\n }\n\n if (outlyingIds && outlyingIds.includes(messageId)) {\n outlyingIds = outlyingIds.filter((id) => id !== messageId);\n }\n\n if (viewportIds && viewportIds.includes(messageId)) {\n viewportIds = viewportIds.filter((id) => id !== messageId);\n }\n\n if (pinnedIds && pinnedIds.includes(messageId)) {\n pinnedIds = pinnedIds.filter((id) => id !== messageId);\n }\n });\n\n global = replaceThreadParam(global, chatId, threadId, 'listedIds', listedIds);\n global = replaceThreadParam(global, chatId, threadId, 'outlyingIds', outlyingIds);\n global = replaceThreadParam(global, chatId, threadId, 'viewportIds', viewportIds);\n global = replaceThreadParam(global, chatId, threadId, 'pinnedIds', pinnedIds);\n\n if (threadInfo && newMessageCount !== undefined) {\n global = replaceThreadParam(global, chatId, threadId, 'threadInfo', {\n ...threadInfo,\n messagesCount: newMessageCount,\n });\n }\n });\n\n if (deletedForwardedPosts.length) {\n const currentMessageList = selectCurrentMessageList(global);\n const canDeleteCurrentThread = currentMessageList && currentMessageList.chatId === chatId\n && currentMessageList.type === 'thread';\n const currentThreadId = currentMessageList?.threadId;\n\n deletedForwardedPosts.forEach((message) => {\n const { fromChatId, fromMessageId } = message.forwardInfo!;\n const originalPost = selectChatMessage(global, fromChatId!, fromMessageId!);\n\n if (canDeleteCurrentThread && currentThreadId === fromMessageId) {\n global = updateCurrentMessageList(global, chatId);\n }\n if (originalPost) {\n global = updateChatMessage(global, fromChatId!, fromMessageId!, { threadInfo: undefined });\n }\n });\n }\n\n global = replaceChatMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function deleteChatScheduledMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n\n let scheduledIds = selectScheduledIds(global, chatId);\n if (scheduledIds) {\n messageIds.forEach((messageId) => {\n if (scheduledIds!.includes(messageId)) {\n scheduledIds = scheduledIds!.filter((id) => id !== messageId);\n }\n });\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', scheduledIds);\n }\n\n global = replaceScheduledMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function updateListedIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const listedIds = selectListedIds(global, chatId, threadId);\n const newIds = listedIds?.length\n ? idsUpdate.filter((id) => !listedIds.includes(id))\n : idsUpdate;\n\n if (listedIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'listedIds', orderHistoryIds([\n ...(listedIds || []),\n ...newIds,\n ]));\n}\n\nexport function updateOutlyingIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const newIds = outlyingIds?.length\n ? idsUpdate.filter((id) => !outlyingIds.includes(id))\n : idsUpdate;\n\n if (outlyingIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'outlyingIds', orderHistoryIds([\n ...(outlyingIds || []),\n ...newIds,\n ]));\n}\n\nfunction orderHistoryIds(listedIds: number[]) {\n return listedIds.sort((a, b) => a - b);\n}\n\nexport function addViewportId(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newId: number,\n): GlobalState {\n const viewportIds = selectViewportIds(global, chatId, threadId) || [];\n if (viewportIds.includes(newId)) {\n return global;\n }\n\n const newIds = orderHistoryIds([\n ...(\n viewportIds.length < MESSAGE_LIST_VIEWPORT_LIMIT\n ? viewportIds\n : viewportIds.slice(-(MESSAGE_LIST_SLICE / 2))\n ),\n newId,\n ]);\n\n return replaceThreadParam(global, chatId, threadId, 'viewportIds', newIds);\n}\n\nexport function safeReplaceViewportIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newViewportIds: number[],\n): GlobalState {\n const currentIds = selectViewportIds(global, chatId, threadId) || [];\n const newIds = orderHistoryIds(newViewportIds);\n\n return replaceThreadParam(\n global,\n chatId,\n threadId,\n 'viewportIds',\n areSortedArraysEqual(currentIds, newIds) ? currentIds : newIds,\n );\n}\n\nexport function updateThreadInfo(\n global: GlobalState, chatId: string, threadId: number, update: Partial | undefined,\n): GlobalState {\n const newThreadInfo = {\n ...(selectThreadInfo(global, chatId, threadId) as ApiThreadInfo),\n ...update,\n };\n\n if (!newThreadInfo.threadId) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'threadInfo', newThreadInfo);\n}\n\nexport function updateThreadInfos(\n global: GlobalState, chatId: string, updates: Partial[],\n): GlobalState {\n updates.forEach((update) => {\n global = updateThreadInfo(global, update.chatId!, update.threadId!, update);\n });\n\n return global;\n}\n\nexport function replaceScheduledMessages(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n return updateScheduledMessages(global, chatId, {\n byId: newById,\n });\n}\n\nfunction updateScheduledMessages(\n global: GlobalState, chatId: string, update: Partial<{ byId: Record }>,\n): GlobalState {\n const current = global.scheduledMessages.byChatId[chatId] || { byId: {}, hash: 0 };\n\n return {\n ...global,\n scheduledMessages: {\n byChatId: {\n ...global.scheduledMessages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateFocusedMessage(\n global: GlobalState, chatId?: string, messageId?: number, noHighlight = false, isResizingContainer = false,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n chatId,\n messageId,\n noHighlight,\n isResizingContainer,\n },\n };\n}\n\nexport function updateSponsoredMessage(\n global: GlobalState, chatId: string, message: ApiSponsoredMessage,\n): GlobalState {\n return {\n ...global,\n messages: {\n ...global.messages,\n sponsoredByChatId: {\n ...global.messages.sponsoredByChatId,\n [chatId]: message,\n },\n },\n };\n}\n\nexport function updateFocusDirection(\n global: GlobalState, direction?: FocusDirection,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n direction,\n },\n };\n}\n\nexport function enterMessageSelectMode(\n global: GlobalState,\n chatId: string,\n messageId?: number | number[],\n): GlobalState {\n const messageIds = messageId ? Array.prototype.concat([], messageId) : [];\n return {\n ...global,\n selectedMessages: {\n chatId,\n messageIds,\n },\n };\n}\n\nexport function toggleMessageSelection(\n global: GlobalState,\n chatId: string,\n threadId: number,\n messageListType: MessageListType,\n messageId: number,\n groupedId?: string,\n childMessageIds?: number[],\n withShift = false,\n): GlobalState {\n const { selectedMessages: oldSelectedMessages } = global;\n if (groupedId) {\n childMessageIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n }\n const selectedMessageIds = childMessageIds || [messageId];\n if (!oldSelectedMessages) {\n return enterMessageSelectMode(global, chatId, selectedMessageIds);\n }\n\n const { messageIds } = oldSelectedMessages;\n\n let newMessageIds;\n const newSelectedMessageIds = selectedMessageIds.filter((id) => !messageIds.includes(id));\n if (newSelectedMessageIds && !newSelectedMessageIds.length) {\n newMessageIds = messageIds.filter((id) => !selectedMessageIds.includes(id));\n } else if (withShift && messageIds.length) {\n const viewportIds = selectCurrentMessageIds(global, chatId, threadId, messageListType)!;\n const prevIndex = viewportIds.indexOf(messageIds[messageIds.length - 1]);\n const currentIndex = viewportIds.indexOf(messageId);\n const from = Math.min(prevIndex, currentIndex);\n const to = Math.max(prevIndex, currentIndex);\n const slice = viewportIds.slice(from, to + 1);\n newMessageIds = unique([...messageIds, ...slice]);\n } else {\n newMessageIds = [...messageIds, ...newSelectedMessageIds];\n }\n\n if (!newMessageIds.length) {\n return exitMessageSelectMode(global);\n }\n\n return {\n ...global,\n selectedMessages: {\n ...oldSelectedMessages,\n messageIds: newMessageIds,\n },\n };\n}\n\nexport function exitMessageSelectMode(global: GlobalState): GlobalState {\n return {\n ...global,\n selectedMessages: undefined,\n };\n}\n\nexport function updateThreadUnreadFromForwardedMessage(\n global: GlobalState,\n originMessage: ApiMessage,\n chatId: string,\n lastMessageId: number,\n isDeleting?: boolean,\n) {\n const { channelPostId, fromChatId } = originMessage.forwardInfo || {};\n if (channelPostId && fromChatId) {\n const threadInfoOld = selectThreadInfo(global, chatId, channelPostId);\n if (threadInfoOld) {\n global = replaceThreadParam(global, chatId, channelPostId, 'threadInfo', {\n ...threadInfoOld,\n lastMessageId,\n messagesCount: threadInfoOld.messagesCount + (isDeleting ? -1 : 1),\n });\n }\n }\n return global;\n}\n","import { ApiChat, MAIN_THREAD_ID } from '../../api/types';\nimport { GlobalState } from '../../global/types';\n\nimport {\n getPrivateChatUserId, isChatChannel, isUserId, isHistoryClearMessage, isUserBot, isUserOnline,\n} from '../helpers';\nimport { selectUser } from './users';\nimport {\n ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, MEMBERS_LOAD_SLICE, SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\n\nexport function selectChat(global: GlobalState, chatId: string): ApiChat | undefined {\n return global.chats.byId[chatId];\n}\n\nexport function selectChatUser(global: GlobalState, chat: ApiChat) {\n const userId = getPrivateChatUserId(chat);\n if (!userId) {\n return false;\n }\n\n return selectUser(global, userId);\n}\n\nexport function selectIsChatWithSelf(global: GlobalState, chatId: string) {\n return chatId === global.currentUserId;\n}\n\nexport function selectIsChatWithBot(global: GlobalState, chat: ApiChat) {\n const user = selectChatUser(global, chat);\n return user && isUserBot(user);\n}\n\nexport function selectSupportChat(global: GlobalState) {\n return Object.values(global.chats.byId).find(({ isSupport }: ApiChat) => isSupport);\n}\n\nexport function selectChatOnlineCount(global: GlobalState, chat: ApiChat) {\n if (isUserId(chat.id) || isChatChannel(chat) || !chat.fullInfo) {\n return undefined;\n }\n\n if (!chat.fullInfo.members || chat.fullInfo.members.length === MEMBERS_LOAD_SLICE) {\n return chat.fullInfo.onlineCount;\n }\n\n return chat.fullInfo.members.reduce((onlineCount, { userId }) => {\n if (\n userId !== global.currentUserId\n && global.users.byId[userId]\n && isUserOnline(global.users.byId[userId], global.users.statusesById[userId])\n ) {\n return onlineCount + 1;\n }\n\n return onlineCount;\n }, 0);\n}\n\nexport function selectChatBot(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const userId = chat && getPrivateChatUserId(chat);\n const user = userId && selectUser(global, userId);\n if (!user || !isUserBot(user)) {\n return undefined;\n }\n\n return user;\n}\n\nexport function selectIsChatBotNotStarted(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const bot = selectChatBot(global, chatId);\n if (!chat || !bot) {\n return false;\n }\n\n if (chat.lastMessage && isHistoryClearMessage(chat.lastMessage)) {\n return true;\n }\n\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return false;\n }\n\n const { listedIds } = messageInfo.threadsById[MAIN_THREAD_ID] || {};\n return listedIds && !listedIds.length;\n}\n\nexport function selectAreActiveChatsLoaded(global: GlobalState): boolean {\n return Boolean(global.chats.listIds.active);\n}\n\nexport function selectIsChatListed(global: GlobalState, chatId: string, type?: 'active' | 'archived'): boolean {\n const { listIds } = global.chats;\n if (type) {\n const targetList = listIds[type];\n return Boolean(targetList && targetList.includes(chatId));\n }\n\n return Object.values(listIds).some((list) => list && list.includes(chatId));\n}\n\nexport function selectChatListType(global: GlobalState, chatId: string): 'active' | 'archived' | undefined {\n const chat = selectChat(global, chatId);\n if (!chat || !selectIsChatListed(global, chatId)) {\n return undefined;\n }\n\n return chat.folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n}\n\nexport function selectChatFolder(global: GlobalState, folderId: number) {\n return global.chatFolders.byId[folderId];\n}\n\nexport function selectTotalChatCount(global: GlobalState, listType: 'active' | 'archived'): number {\n const { totalCount } = global.chats;\n const allChatsCount = totalCount.all;\n const archivedChatsCount = totalCount.archived || 0;\n\n if (listType === 'archived') {\n return archivedChatsCount;\n }\n\n return allChatsCount ? allChatsCount - archivedChatsCount : 0;\n}\n\nexport function selectIsChatPinned(global: GlobalState, chatId: string, folderId = ALL_FOLDER_ID): boolean {\n const { active, archived } = global.chats.orderedPinnedIds;\n\n if (folderId === ALL_FOLDER_ID) {\n return Boolean(active?.includes(chatId));\n }\n\n if (folderId === ARCHIVED_FOLDER_ID) {\n return Boolean(archived?.includes(chatId));\n }\n\n const { byId: chatFoldersById } = global.chatFolders;\n\n const { pinnedChatIds } = chatFoldersById[folderId] || {};\n return Boolean(pinnedChatIds?.includes(chatId));\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectChatByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.chats.byId).find(\n (chat) => chat.username && chat.username.toLowerCase() === usernameLowered,\n );\n}\n\nexport function selectIsServiceChatReady(global: GlobalState) {\n return Boolean(selectChat(global, SERVICE_NOTIFICATIONS_USER_ID));\n}\n\nexport function selectSendAs(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n if (!chat) return undefined;\n\n const id = chat?.fullInfo?.sendAsId;\n if (!id) return undefined;\n\n return selectUser(global, id) || selectChat(global, id);\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiSticker } from '../../api/types';\n\nexport function selectIsStickerFavorite(global: GlobalState, sticker: ApiSticker) {\n const { stickers } = global.stickers.favorite;\n return stickers && stickers.some(({ id }) => id === sticker.id);\n}\n\nexport function selectCurrentStickerSearch(global: GlobalState) {\n return global.stickers.search;\n}\n\nexport function selectCurrentGifSearch(global: GlobalState) {\n return global.gifs.search;\n}\n\nexport function selectStickerSet(global: GlobalState, id: string) {\n return global.stickers.setsById[id];\n}\n\nexport function selectStickerSetByShortName(global: GlobalState, shortName: string) {\n return Object.values(global.stickers.setsById).find((l) => l.shortName.toLowerCase() === shortName.toLowerCase());\n}\n\nexport function selectStickersForEmoji(global: GlobalState, emoji: string) {\n const stickerSets = Object.values(global.stickers.setsById);\n let stickersForEmoji: ApiSticker[] = [];\n // Favorites\n global.stickers.favorite.stickers.forEach((sticker) => {\n if (sticker.emoji === emoji) stickersForEmoji.push(sticker);\n });\n\n // Added sets\n stickerSets.forEach(({ packs }) => {\n if (!packs) {\n return;\n }\n\n stickersForEmoji = stickersForEmoji.concat(packs[emoji] || [], packs[cleanEmoji(emoji)] || []);\n });\n return stickersForEmoji;\n}\n\nfunction cleanEmoji(emoji: string) {\n // Some emojis (❤️ for example) with a service symbol 'VARIATION SELECTOR-16' are not recognized as animated\n return emoji.replace('\\ufe0f', '');\n}\n\nexport function selectAnimatedEmoji(global: GlobalState, emoji: string) {\n const { animatedEmojis } = global;\n if (!animatedEmojis || !animatedEmojis.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojis.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiEffect(global: GlobalState, emoji: string) {\n const { animatedEmojiEffects } = global;\n if (!animatedEmojiEffects || !animatedEmojiEffects.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojiEffects.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiSound(global: GlobalState, emoji: string) {\n return global?.appConfig?.emojiSounds[cleanEmoji(emoji)];\n}\n\nexport function selectLocalAnimatedEmoji(global: GlobalState, emoji: string) {\n const cleanedEmoji = cleanEmoji(emoji);\n\n return cleanedEmoji === '🍑' ? 'Peach' : (cleanedEmoji === '🍆' ? 'Eggplant' : undefined);\n}\n\nexport function selectLocalAnimatedEmojiEffect(emoji: string) {\n return emoji === 'Eggplant' ? 'Cumshot' : undefined;\n}\n\nexport function selectLocalAnimatedEmojiEffectByName(name: string) {\n return name === 'Cumshot' ? '🍆' : undefined;\n}\n","import { GlobalState, MessageListType, Thread } from '../../global/types';\nimport {\n ApiChat,\n ApiMessage,\n ApiMessageOutgoingStatus,\n ApiUser,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { LOCAL_MESSAGE_ID_BASE, SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport {\n selectChat, selectIsChatWithBot, selectIsChatWithSelf,\n} from './chats';\nimport { selectIsUserOrChatContact, selectUser } from './users';\nimport {\n getSendingState,\n isChatChannel,\n isMessageLocal,\n isUserId,\n isForwardedMessage,\n getCanPostInChat,\n isUserRightBanned,\n getHasAdminRight,\n isChatBasicGroup,\n isCommonBoxChat,\n isServiceNotificationMessage,\n isOwnMessage,\n isActionMessage,\n isChatGroup,\n isChatSuperGroup,\n getMessageVideo,\n getMessageWebPageVideo,\n getMessagePhoto,\n getMessageAudio,\n getMessageVoice,\n getMessageDocument,\n getMessageWebPagePhoto,\n} from '../helpers';\nimport { findLast } from '../../util/iteratees';\nimport { selectIsStickerFavorite } from './symbols';\nimport { getServerTime } from '../../util/serverTime';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\n\nconst MESSAGE_EDIT_ALLOWED_TIME = 172800; // 48 hours\n\nexport function selectCurrentMessageList(global: GlobalState) {\n const { messageLists } = global.messages;\n\n if (messageLists.length) {\n return messageLists[messageLists.length - 1];\n }\n\n return undefined;\n}\n\nexport function selectCurrentChat(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n\n return chatId ? selectChat(global, chatId) : undefined;\n}\n\nexport function selectChatMessages(global: GlobalState, chatId: string) {\n return global.messages.byChatId[chatId]?.byId;\n}\n\nexport function selectScheduledMessages(global: GlobalState, chatId: string) {\n return global.scheduledMessages.byChatId[chatId]?.byId;\n}\n\nexport function selectThreadParam(\n global: GlobalState,\n chatId: string,\n threadId: number,\n key: K,\n) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const thread = messageInfo.threadsById[threadId];\n if (!thread) {\n return undefined;\n }\n\n return thread[key];\n}\n\nexport function selectListedIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'listedIds');\n}\n\nexport function selectOutlyingIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'outlyingIds');\n}\n\nexport function selectCurrentMessageIds(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n switch (messageListType) {\n case 'thread':\n return selectViewportIds(global, chatId, threadId);\n case 'pinned':\n return selectPinnedIds(global, chatId);\n case 'scheduled':\n return selectScheduledIds(global, chatId);\n }\n\n return undefined;\n}\n\nexport function selectViewportIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'viewportIds');\n}\n\nexport function selectPinnedIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'pinnedIds');\n}\n\nexport function selectScheduledIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds');\n}\n\nexport function selectScrollOffset(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'scrollOffset');\n}\n\nexport function selectReplyingToId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyingToId');\n}\n\nexport function selectEditingId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'editingId');\n}\n\nexport function selectEditingScheduledId(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'editingScheduledId');\n}\n\nexport function selectDraft(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'draft');\n}\n\nexport function selectNoWebPage(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'noWebPage');\n}\n\nexport function selectThreadInfo(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'threadInfo');\n}\n\nexport function selectFirstMessageId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'firstMessageId');\n}\n\nexport function selectReplyStack(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyStack');\n}\n\nexport function selectThreadOriginChat(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return selectChat(global, chatId);\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return selectChat(global, threadInfo.originChannelId || chatId);\n}\n\nexport function selectThreadTopMessageId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return undefined;\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return threadInfo.topMessageId;\n}\n\nexport function selectThreadByMessage(global: GlobalState, chatId: string, message: ApiMessage) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const { replyToMessageId, replyToTopMessageId } = message;\n if (!replyToMessageId && !replyToTopMessageId) {\n return undefined;\n }\n\n return Object.values(messageInfo.threadsById).find((thread) => {\n return thread.threadInfo && (\n (replyToMessageId && replyToMessageId === thread.threadInfo.topMessageId)\n || (replyToTopMessageId && replyToTopMessageId === thread.threadInfo.topMessageId)\n );\n });\n}\n\nexport function isMessageInCurrentMessageList(global: GlobalState, chatId: string, message: ApiMessage) {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return false;\n }\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message) || {};\n return (\n chatId === currentMessageList.chatId\n && (\n (currentMessageList.threadId === MAIN_THREAD_ID)\n || (threadInfo && currentMessageList.threadId === threadInfo.threadId)\n )\n );\n}\n\nexport function selectIsViewportNewest(global: GlobalState, chatId: string, threadId: number) {\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (!viewportIds || !viewportIds.length) {\n return true;\n }\n\n let lastMessageId: number;\n\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.lastMessage) {\n return true;\n }\n\n lastMessageId = chat.lastMessage.id;\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo || !threadInfo.lastMessageId) {\n return undefined;\n }\n\n lastMessageId = threadInfo.lastMessageId;\n }\n\n // Edge case: outgoing `lastMessage` is updated with a delay to optimize animation\n if (lastMessageId >= LOCAL_MESSAGE_ID_BASE && !selectChatMessage(global, chatId, lastMessageId)) {\n return true;\n }\n\n return viewportIds[viewportIds.length - 1] >= lastMessageId;\n}\n\nexport function selectChatMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectChatMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectScheduledMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectScheduledMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectEditingMessage(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n if (messageListType === 'scheduled') {\n const messageId = selectEditingScheduledId(global, chatId);\n return messageId ? selectScheduledMessage(global, chatId, messageId) : undefined;\n } else {\n const messageId = selectEditingId(global, chatId, threadId);\n return messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n }\n}\n\nexport function selectChatMessageByPollId(global: GlobalState, pollId: string) {\n let messageWithPoll: ApiMessage | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const chatMessages of Object.values(global.messages.byChatId)) {\n const { byId } = chatMessages;\n messageWithPoll = Object.values(byId).find((message) => {\n return message.content.poll && message.content.poll.id === pollId;\n });\n if (messageWithPoll) {\n break;\n }\n }\n\n return messageWithPoll;\n}\n\nexport function selectFocusedMessageId(global: GlobalState, chatId: string) {\n const { chatId: focusedChatId, messageId } = global.focusedMessage || {};\n\n return focusedChatId === chatId ? messageId : undefined;\n}\n\nexport function selectIsMessageFocused(global: GlobalState, message: ApiMessage) {\n const focusedId = selectFocusedMessageId(global, message.chatId);\n\n return focusedId ? focusedId === message.id || focusedId === message.previousLocalId : false;\n}\n\nexport function selectIsMessageUnread(global: GlobalState, message: ApiMessage) {\n const { lastReadOutboxMessageId } = selectChat(global, message.chatId) || {};\n return isMessageLocal(message) || !lastReadOutboxMessageId || lastReadOutboxMessageId < message.id;\n}\n\nexport function selectOutgoingStatus(\n global: GlobalState, message: ApiMessage, isScheduledList = false,\n): ApiMessageOutgoingStatus {\n if (!selectIsMessageUnread(global, message) && !isScheduledList) {\n return 'read';\n }\n\n return getSendingState(message);\n}\n\nexport function selectSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { senderId } = message;\n if (!senderId) {\n return undefined;\n }\n\n return isUserId(senderId) ? selectUser(global, senderId) : selectChat(global, senderId);\n}\n\nexport function selectForwardedSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { forwardInfo } = message;\n if (!forwardInfo) {\n return undefined;\n }\n\n if (forwardInfo.isChannelPost && forwardInfo.fromChatId) {\n return selectChat(global, forwardInfo.fromChatId);\n } else if (forwardInfo.senderUserId) {\n return selectUser(global, forwardInfo.senderUserId) || selectChat(global, forwardInfo.senderUserId);\n }\n\n return undefined;\n}\n\nexport function selectAllowedMessageActions(global: GlobalState, message: ApiMessage, threadId: number) {\n const chat = selectChat(global, message.chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n\n const isPrivate = isUserId(chat.id);\n const isChatWithSelf = selectIsChatWithSelf(global, message.chatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const isSuperGroup = isChatSuperGroup(chat);\n const isChannel = isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const isServiceNotification = isServiceNotificationMessage(message);\n const isOwn = isOwnMessage(message);\n const isAction = isActionMessage(message);\n const { content } = message;\n\n const canEditMessagesIndefinitely = isChatWithSelf\n || (isSuperGroup && getHasAdminRight(chat, 'pinMessages'))\n || (isChannel && getHasAdminRight(chat, 'editMessages'));\n const isMessageEditable = (\n (\n canEditMessagesIndefinitely\n || getServerTime(global.serverTimeOffset) - message.date < MESSAGE_EDIT_ALLOWED_TIME\n ) && !(\n content.sticker || content.contact || content.poll || content.action || content.audio\n || (content.video?.isRound)\n )\n && !isForwardedMessage(message)\n && !message.viaBotId\n );\n\n const canReply = !isLocal && !isServiceNotification && getCanPostInChat(chat, threadId);\n\n const hasPinPermission = isPrivate || (\n chat.isCreator\n || (!isChannel && !isUserRightBanned(chat, 'pinMessages'))\n || getHasAdminRight(chat, 'pinMessages')\n );\n\n let canPin = !isLocal && !isServiceNotification && !isAction && hasPinPermission;\n let canUnpin = false;\n\n const pinnedMessageIds = selectPinnedIds(global, chat.id);\n\n if (canPin) {\n canUnpin = Boolean(pinnedMessageIds && pinnedMessageIds.includes(message.id));\n canPin = !canUnpin;\n }\n\n const canDelete = !isLocal && !isServiceNotification && (\n isPrivate\n || isOwn\n || isBasicGroup\n || chat.isCreator\n || getHasAdminRight(chat, 'deleteMessages')\n );\n\n const canReport = !isPrivate && !isOwn;\n\n const canDeleteForAll = canDelete && (\n (isPrivate && !isChatWithSelf)\n || (isBasicGroup && (\n isOwn || getHasAdminRight(chat, 'deleteMessages') || chat.isCreator\n ))\n );\n\n const canEdit = !isLocal && !isAction && isMessageEditable && (\n isOwn\n || (isChannel && (chat.isCreator || getHasAdminRight(chat, 'editMessages')))\n );\n\n const canForward = !isLocal && !isAction;\n\n const hasSticker = Boolean(message.content.sticker);\n const hasFavoriteSticker = hasSticker && selectIsStickerFavorite(global, message.content.sticker!);\n const canFaveSticker = !isAction && hasSticker && !hasFavoriteSticker;\n const canUnfaveSticker = !isAction && hasFavoriteSticker;\n const canCopy = !isAction;\n const canCopyLink = !isAction && (isChannel || isSuperGroup);\n const canSelect = !isAction;\n\n const canDownload = Boolean(content.webPage?.document || content.webPage?.video || content.webPage?.photo\n || content.audio || content.voice || content.photo || content.video || content.document || content.sticker);\n\n const noOptions = [\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n ].every((ability) => !ability);\n\n return {\n noOptions,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n };\n}\n\n// This selector always returns a new object which can not be safely used in shallow-equal checks\nexport function selectCanDeleteSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return {};\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return {\n canDelete: messageActions.every((actions) => actions.canDelete),\n canDeleteForAll: messageActions.every((actions) => actions.canDeleteForAll),\n };\n}\n\nexport function selectCanReportSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.every((actions) => actions.canReport);\n}\n\nexport function selectCanDownloadSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.some((actions) => actions.canDownload);\n}\n\nexport function selectIsDownloading(global: GlobalState, message: ApiMessage) {\n const activeInChat = global.activeDownloads.byChatId[message.chatId];\n return activeInChat ? activeInChat.includes(message.id) : false;\n}\n\nexport function selectActiveDownloadIds(global: GlobalState, chatId: string) {\n return global.activeDownloads.byChatId[chatId] || MEMO_EMPTY_ARRAY;\n}\n\nexport function selectUploadProgress(global: GlobalState, message: ApiMessage) {\n return global.fileUploads.byMessageLocalId[message.previousLocalId || message.id]?.progress;\n}\n\nexport function selectRealLastReadId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n // `lastReadInboxMessageId` is empty for new chats\n if (!chat.lastReadInboxMessageId) {\n return undefined;\n }\n\n if (!chat.lastMessage) {\n return chat.lastReadInboxMessageId;\n }\n\n if (isMessageLocal(chat.lastMessage)) {\n return chat.lastMessage.id;\n }\n\n // Some previously read messages may be deleted\n return Math.min(chat.lastMessage.id, chat.lastReadInboxMessageId);\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n if (!threadInfo.lastReadInboxMessageId) {\n return threadInfo.topMessageId;\n }\n\n // Some previously read messages may be deleted\n return Math.min(threadInfo.lastReadInboxMessageId, threadInfo.lastMessageId || Infinity);\n }\n}\n\nexport function selectFirstUnreadId(global: GlobalState, chatId: string, threadId: number) {\n const chat = selectChat(global, chatId);\n\n if (threadId === MAIN_THREAD_ID) {\n if (!chat) {\n return undefined;\n }\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo\n || (threadInfo.lastMessageId !== undefined && threadInfo.lastMessageId === threadInfo.lastReadInboxMessageId)) {\n return undefined;\n }\n }\n\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const listedIds = selectListedIds(global, chatId, threadId);\n const byId = selectChatMessages(global, chatId);\n if (!byId || !(outlyingIds || listedIds)) {\n return undefined;\n }\n\n const lastReadId = selectRealLastReadId(global, chatId, threadId);\n if (!lastReadId && chat && chat.isNotJoined) {\n return undefined;\n }\n\n const lastReadServiceNotificationId = chatId === SERVICE_NOTIFICATIONS_USER_ID\n ? global.serviceNotifications.reduce((max, notification) => {\n return !notification.isUnread && notification.id > max ? notification.id : max;\n }, -1)\n : -1;\n\n function findAfterLastReadId(listIds: number[]) {\n return listIds.find((id) => {\n return (\n (!lastReadId || id > lastReadId)\n && byId[id]\n && (!byId[id].isOutgoing || byId[id].isFromScheduled)\n && id > lastReadServiceNotificationId\n );\n });\n }\n\n if (outlyingIds) {\n const found = findAfterLastReadId(outlyingIds);\n if (found) {\n return found;\n }\n }\n\n if (listedIds) {\n const found = findAfterLastReadId(listedIds);\n if (found) {\n return found;\n }\n }\n\n return undefined;\n}\n\nexport function selectIsPollResultsOpen(global: GlobalState) {\n const { pollResults } = global;\n return Boolean(pollResults.messageId);\n}\n\nexport function selectIsForwardModalOpen(global: GlobalState) {\n const { forwardMessages } = global;\n return Boolean(forwardMessages.isModalShown);\n}\n\nexport function selectCommonBoxChatId(global: GlobalState, messageId: number) {\n const fromLastMessage = Object.values(global.chats.byId).find((chat) => (\n isCommonBoxChat(chat) && chat.lastMessage && chat.lastMessage.id === messageId\n ));\n if (fromLastMessage) {\n return fromLastMessage.id;\n }\n\n const { byChatId } = global.messages;\n return Object.keys(byChatId).find((chatId) => {\n const chat = selectChat(global, chatId);\n return chat && isCommonBoxChat(chat) && byChatId[chat.id].byId[messageId];\n });\n}\n\nexport function selectIsInSelectMode(global: GlobalState) {\n const { selectedMessages } = global;\n\n return Boolean(selectedMessages);\n}\n\nexport function selectIsMessageSelected(global: GlobalState, messageId: number) {\n const { messageIds } = global.selectedMessages || {};\n if (!messageIds) {\n return false;\n }\n\n return messageIds.includes(messageId);\n}\n\nexport function selectForwardedMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.values(chatMessages)\n .filter((message) => message.groupedId === groupedId && message.forwardInfo)\n .map(({ forwardInfo }) => forwardInfo!.fromMessageId);\n}\n\nexport function selectMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.keys(chatMessages)\n .map(Number)\n .filter((id) => chatMessages[id].groupedId === groupedId);\n}\n\nexport function selectIsDocumentGroupSelected(global: GlobalState, chatId: string, groupedId: string) {\n const { messageIds: selectedIds } = global.selectedMessages || {};\n if (!selectedIds) {\n return false;\n }\n\n const groupIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n return groupIds && groupIds.every((id) => selectedIds.includes(id));\n}\n\nexport function selectSelectedMessagesCount(global: GlobalState) {\n const { messageIds } = global.selectedMessages || {};\n\n return messageIds ? messageIds.length : 0;\n}\n\nexport function selectNewestMessageWithBotKeyboardButtons(\n global: GlobalState, chatId: string,\n): ApiMessage | undefined {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (!selectIsChatWithBot(global, chat)) {\n return undefined;\n }\n\n const chatMessages = selectChatMessages(global, chatId);\n const viewportIds = selectViewportIds(global, chatId, MAIN_THREAD_ID);\n if (!chatMessages || !viewportIds) {\n return undefined;\n }\n\n const messageId = findLast(viewportIds, (id) => {\n return !chatMessages[id].isOutgoing && Boolean(chatMessages[id].keyboardButtons);\n });\n\n const replyHideMessageId = findLast(viewportIds, (id) => {\n return Boolean(chatMessages[id].shouldHideKeyboardButtons);\n });\n\n if (messageId && replyHideMessageId && replyHideMessageId > messageId) {\n return undefined;\n }\n\n return messageId ? chatMessages[messageId] : undefined;\n}\n\nexport function selectCanAutoLoadMedia(global: GlobalState, message: ApiMessage) {\n const chat = selectChat(global, message.chatId);\n if (!chat) {\n return undefined;\n }\n\n const sender = selectSender(global, message);\n\n const isPhoto = Boolean(getMessagePhoto(message) || getMessageWebPagePhoto(message));\n const isVideo = Boolean(getMessageVideo(message) || getMessageWebPageVideo(message));\n const isFile = Boolean(getMessageAudio(message) || getMessageVoice(message) || getMessageDocument(message));\n\n const {\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n } = global.settings.byKey;\n\n if (isPhoto) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadPhotoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadPhotoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadPhotoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadPhotoInChannels,\n });\n }\n\n if (isVideo) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadVideoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadVideoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadVideoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadVideoInChannels,\n });\n }\n\n if (isFile) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadFileFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadFileInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadFileInGroups,\n canAutoLoadMediaInChannels: canAutoLoadFileInChannels,\n });\n }\n\n return true;\n}\n\nfunction canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts,\n canAutoLoadMediaInPrivateChats,\n canAutoLoadMediaInGroups,\n canAutoLoadMediaInChannels,\n}: {\n global: GlobalState;\n chat: ApiChat;\n canAutoLoadMediaFromContacts: boolean;\n canAutoLoadMediaInPrivateChats: boolean;\n canAutoLoadMediaInGroups: boolean;\n canAutoLoadMediaInChannels: boolean;\n sender?: ApiChat | ApiUser;\n}) {\n const isMediaFromContact = Boolean(sender && (\n sender.id === global.currentUserId || selectIsUserOrChatContact(global, sender)\n ));\n\n return Boolean(\n (isMediaFromContact && canAutoLoadMediaFromContacts)\n || (!isMediaFromContact && canAutoLoadMediaInPrivateChats && isUserId(chat.id))\n || (canAutoLoadMediaInGroups && isChatGroup(chat))\n || (canAutoLoadMediaInChannels && isChatChannel(chat)),\n );\n}\n\nexport function selectCanAutoPlayMedia(global: GlobalState, message: ApiMessage) {\n const video = getMessageVideo(message) || getMessageWebPageVideo(message);\n if (!video) {\n return undefined;\n }\n\n const {\n canAutoPlayVideos,\n canAutoPlayGifs,\n } = global.settings.byKey;\n\n const asGif = video.isGif || video.isRound;\n\n return (canAutoPlayVideos && !asGif) || (canAutoPlayGifs && asGif);\n}\n\nexport function selectShouldLoopStickers(global: GlobalState) {\n return global.settings.byKey.shouldLoopStickers;\n}\n\nexport function selectLastServiceNotification(global: GlobalState) {\n const { serviceNotifications } = global;\n const maxId = Math.max(...serviceNotifications.map(({ id }) => id));\n\n return serviceNotifications.find(({ id }) => id === maxId);\n}\n\nexport function selectIsMessageProtected(global: GlobalState, message?: ApiMessage) {\n return message ? message.isProtected || selectChat(global, message.chatId)?.isProtected : false;\n}\n\nexport function selectHasProtectedMessage(global: GlobalState, chatId: string, messageIds?: number[]) {\n if (selectChat(global, chatId)?.isProtected) {\n return true;\n }\n\n if (!messageIds) {\n return false;\n }\n\n const messages = selectChatMessages(global, chatId);\n\n return messageIds.some((messageId) => messages[messageId]?.isProtected);\n}\n\nexport function selectSponsoredMessage(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const message = chat && isChatChannel(chat) ? global.messages.sponsoredByChatId[chatId] : undefined;\n\n return message && message.expiresAt >= Math.round(Date.now() / 1000) ? message : undefined;\n}\n\nexport function selectDefaultReaction(global: GlobalState, chatId: string) {\n if (chatId === SERVICE_NOTIFICATIONS_USER_ID) return undefined;\n\n const isPrivate = isUserId(chatId);\n const defaultReaction = global.appConfig?.defaultReaction;\n const { availableReactions } = global;\n if (!defaultReaction || !availableReactions?.some(\n (l) => l.reaction === defaultReaction && !l.isInactive,\n )) {\n return undefined;\n }\n\n if (isPrivate) {\n return defaultReaction;\n }\n\n const enabledReactions = selectChat(global, chatId)?.fullInfo?.enabledReactions;\n if (!enabledReactions?.includes(defaultReaction)) {\n return undefined;\n }\n\n return defaultReaction;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectVisibleUsers(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const messageIds = selectThreadParam(global, chatId, threadId, 'viewportIds');\n if (!messageIds) {\n return undefined;\n }\n\n return messageIds.map((messageId) => {\n const { senderId } = selectChatMessage(global, chatId, messageId) || {};\n return senderId ? selectUser(global, senderId) : undefined;\n }).filter(Boolean);\n}\n","import { GlobalState } from '../../global/types';\nimport { selectCurrentMessageList } from './messages';\nimport { buildChatThreadKey } from '../helpers';\n\nexport function selectCurrentTextSearch(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const currentSearch = global.localTextSearch.byChatThreadKey[chatThreadKey];\n if (!currentSearch || !currentSearch.isActive) {\n return undefined;\n }\n\n return currentSearch;\n}\n\nexport function selectCurrentMediaSearch(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return undefined;\n }\n\n return global.localMediaSearch.byChatId[chatId];\n}\n","import { GlobalState } from '../../global/types';\n\nimport { selectCurrentMessageList } from './messages';\nimport { selectChat } from './chats';\nimport { isChatGroup, isUserId } from '../helpers';\n\nexport function selectManagement(global: GlobalState, chatId: string) {\n return global.management.byChatId[chatId];\n}\n\nexport function selectCurrentManagement(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const currentManagement = global.management.byChatId[chatId];\n if (!currentManagement || !currentManagement.isActive) {\n return undefined;\n }\n\n return currentManagement;\n}\n\nexport function selectCurrentManagementType(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n if (isUserId(chatId)) {\n return 'user';\n }\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (isChatGroup(chat)) {\n return 'group';\n }\n\n return 'channel';\n}\n","import { GlobalState } from '../../global/types';\nimport { NewChatMembersProgress, RightColumnContent } from '../../types';\n\nimport { getSystemTheme, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { selectCurrentMessageList, selectIsPollResultsOpen } from './messages';\nimport { selectCurrentTextSearch } from './localSearch';\nimport { selectCurrentGifSearch, selectCurrentStickerSearch } from './symbols';\nimport { selectCurrentManagement } from './management';\n\nexport function selectIsMediaViewerOpen(global: GlobalState) {\n const { mediaViewer } = global;\n return Boolean(mediaViewer.messageId || mediaViewer.avatarOwnerId);\n}\n\nexport function selectRightColumnContentKey(global: GlobalState) {\n return selectIsPollResultsOpen(global) ? (\n RightColumnContent.PollResults\n ) : !IS_SINGLE_COLUMN_LAYOUT && selectCurrentTextSearch(global) ? (\n RightColumnContent.Search\n ) : selectCurrentManagement(global) ? (\n RightColumnContent.Management\n ) : selectCurrentStickerSearch(global).query !== undefined ? (\n RightColumnContent.StickerSearch\n ) : selectCurrentGifSearch(global).query !== undefined ? (\n RightColumnContent.GifSearch\n ) : global.newChatMembersProgress !== NewChatMembersProgress.Closed ? (\n RightColumnContent.AddingMembers\n ) : global.isChatInfoShown && selectCurrentMessageList(global) ? (\n RightColumnContent.ChatInfo\n ) : undefined;\n}\n\nexport function selectIsRightColumnShown(global: GlobalState) {\n return selectRightColumnContentKey(global) !== undefined;\n}\n\nexport function selectTheme(global: GlobalState) {\n const { theme, shouldUseSystemTheme } = global.settings.byKey;\n\n return shouldUseSystemTheme ? getSystemTheme() : theme;\n}\n","import { GlobalState } from '../../global/types';\n\nexport function selectCurrentGlobalSearchQuery(global: GlobalState) {\n return global.globalSearch.query;\n}\n","import { GlobalState } from '../../global/types';\n\nexport function selectPaymentChatId(global: GlobalState) {\n return global.payment.chatId;\n}\n\nexport function selectPaymentMessageId(global: GlobalState) {\n return global.payment.messageId;\n}\n\nexport function selectPaymentFormId(global: GlobalState) {\n return global.payment.formId;\n}\n\nexport function selectPaymentRequestId(global: GlobalState) {\n return global.payment.requestId;\n}\n\nexport function selectProviderPublishableKey(global: GlobalState) {\n return global.payment.nativeParams ? global.payment.nativeParams.publishableKey : undefined;\n}\n\nexport function selectStripeCredentials(global: GlobalState) {\n return global.payment.stripeCredentials;\n}\n","import { GlobalState } from '../../global/types';\n\nexport function selectNotifySettings(global: GlobalState) {\n return global.settings.byKey;\n}\n\nexport function selectNotifyExceptions(global: GlobalState) {\n return global.settings.notifyExceptions;\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nexport function selectUser(global: GlobalState, userId: string): ApiUser | undefined {\n return global.users.byId[userId];\n}\n\nexport function selectUserStatus(global: GlobalState, userId: string): ApiUserStatus | undefined {\n return global.users.statusesById[userId];\n}\n\nexport function selectIsUserBlocked(global: GlobalState, userId: string) {\n const user = selectUser(global, userId);\n\n return user?.fullInfo?.isBlocked;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectUserByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.users.byId).find(\n (user) => user.username.toLowerCase() === usernameLowered,\n );\n}\n\nexport function selectIsUserOrChatContact(global: GlobalState, userOrChat: ApiUser | ApiChat) {\n return global.contactList && global.contactList.userIds.includes(userOrChat.id);\n}\n","import {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm,\n ApiChatInviteImporter,\n ApiExportedInvite,\n ApiLanguage, ApiMessage, ApiShippingAddress, ApiStickerSet,\n} from '../api/types';\n\nexport enum LoadMoreDirection {\n Backwards,\n Forwards,\n Around,\n}\n\nexport enum FocusDirection {\n Up,\n Down,\n Static,\n}\n\nexport interface IAlbum {\n albumId: string;\n messages: ApiMessage[];\n mainMessage: ApiMessage;\n}\n\nexport type ThemeKey = 'light' | 'dark';\n\nexport interface IThemeSettings {\n background?: string;\n backgroundColor?: string;\n patternColor?: string;\n isBlurred?: boolean;\n}\n\nexport type NotifySettings = {\n hasPrivateChatsNotifications?: boolean;\n hasPrivateChatsMessagePreview?: boolean;\n hasGroupNotifications?: boolean;\n hasGroupMessagePreview?: boolean;\n hasBroadcastNotifications?: boolean;\n hasBroadcastMessagePreview?: boolean;\n hasContactJoinedNotifications?: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nexport type LangCode = (\n 'en' | 'ar' | 'be' | 'ca' | 'nl' | 'fr' | 'de' | 'id' | 'it' | 'ko' | 'ms' | 'fa' | 'pl' | 'pt-br' | 'ru' | 'es'\n | 'tr' | 'uk' | 'uz'\n);\n\nexport type TimeFormat = '24h' | '12h';\n\nexport interface ISettings extends NotifySettings, Record {\n theme: ThemeKey;\n shouldUseSystemTheme: boolean;\n messageTextSize: number;\n animationLevel: 0 | 1 | 2;\n messageSendKeyCombo: 'enter' | 'ctrl-enter';\n canAutoLoadPhotoFromContacts: boolean;\n canAutoLoadPhotoInPrivateChats: boolean;\n canAutoLoadPhotoInGroups: boolean;\n canAutoLoadPhotoInChannels: boolean;\n canAutoLoadVideoFromContacts: boolean;\n canAutoLoadVideoInPrivateChats: boolean;\n canAutoLoadVideoInGroups: boolean;\n canAutoLoadVideoInChannels: boolean;\n canAutoLoadFileFromContacts: boolean;\n canAutoLoadFileInPrivateChats: boolean;\n canAutoLoadFileInGroups: boolean;\n canAutoLoadFileInChannels: boolean;\n autoLoadFileMaxSizeMb: number;\n canAutoPlayGifs: boolean;\n canAutoPlayVideos: boolean;\n shouldSuggestStickers: boolean;\n shouldLoopStickers: boolean;\n hasPassword?: boolean;\n languages?: ApiLanguage[];\n language: LangCode;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n timeFormat: TimeFormat;\n wasTimeFormatSetManually: boolean;\n isConnectionStatusMinimized: boolean;\n}\n\nexport interface ApiPrivacySettings {\n visibility: PrivacyVisibility;\n allowUserIds: string[];\n allowChatIds: string[];\n blockUserIds: string[];\n blockChatIds: string[];\n}\n\nexport interface InputPrivacyContact {\n id: string;\n accessHash?: string;\n}\n\nexport interface InputPrivacyRules {\n visibility: PrivacyVisibility;\n allowedUsers?: InputPrivacyContact[];\n allowedChats?: InputPrivacyContact[];\n blockedUsers?: InputPrivacyContact[];\n blockedChats?: InputPrivacyContact[];\n}\n\nexport type IAnchorPosition = {\n x: number;\n y: number;\n};\n\nexport interface ShippingOption {\n id: string;\n title: string;\n amount: number;\n prices: Price[];\n}\n\nexport interface Price {\n label: string;\n amount: number;\n}\n\nexport interface Invoice {\n currency?: string;\n emailRequested?: boolean;\n emailToProvider?: boolean;\n flexible?: boolean;\n nameRequested?: boolean;\n phoneRequested?: boolean;\n phoneToProvider?: boolean;\n prices?: Price[];\n shippingAddressRequested?: boolean;\n test?: boolean;\n}\n\nexport interface Receipt {\n currency: string;\n prices: Price[];\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n totalAmount: number;\n credentialsTitle: string;\n shippingPrices?: Price[];\n shippingMethod?: string;\n photoUrl?: string;\n text?: string;\n title?: string;\n}\n\nexport enum SettingsScreens {\n Main,\n EditProfile,\n Notifications,\n DataStorage,\n Language,\n General,\n GeneralChatBackground,\n GeneralChatBackgroundColor,\n Privacy,\n PrivacyPhoneNumber,\n PrivacyLastSeen,\n PrivacyProfilePhoto,\n PrivacyForwarding,\n PrivacyGroupChats,\n PrivacyPhoneNumberAllowedContacts,\n PrivacyPhoneNumberDeniedContacts,\n PrivacyLastSeenAllowedContacts,\n PrivacyLastSeenDeniedContacts,\n PrivacyProfilePhotoAllowedContacts,\n PrivacyProfilePhotoDeniedContacts,\n PrivacyForwardingAllowedContacts,\n PrivacyForwardingDeniedContacts,\n PrivacyGroupChatsAllowedContacts,\n PrivacyGroupChatsDeniedContacts,\n PrivacyActiveSessions,\n PrivacyBlockedUsers,\n Folders,\n FoldersCreateFolder,\n FoldersEditFolder,\n FoldersEditFolderFromChatList,\n FoldersIncludedChats,\n FoldersIncludedChatsFromChatList,\n FoldersExcludedChats,\n FoldersExcludedChatsFromChatList,\n TwoFaDisabled,\n TwoFaNewPassword,\n TwoFaNewPasswordConfirm,\n TwoFaNewPasswordHint,\n TwoFaNewPasswordEmail,\n TwoFaNewPasswordEmailCode,\n TwoFaEnabled,\n TwoFaChangePasswordCurrent,\n TwoFaChangePasswordNew,\n TwoFaChangePasswordConfirm,\n TwoFaChangePasswordHint,\n TwoFaTurnOff,\n TwoFaRecoveryEmailCurrentPassword,\n TwoFaRecoveryEmail,\n TwoFaRecoveryEmailCode,\n TwoFaCongratulations,\n QuickReaction,\n}\n\nexport type StickerSetOrRecent = Pick;\n\nexport enum LeftColumnContent {\n ChatList,\n GlobalSearch,\n Settings,\n Contacts,\n Archived,\n NewChannelStep1,\n NewChannelStep2,\n NewGroupStep1,\n NewGroupStep2,\n}\n\nexport enum GlobalSearchContent {\n ChatList,\n Media,\n Links,\n Files,\n Music,\n Voice,\n}\n\nexport enum RightColumnContent {\n ChatInfo,\n Search,\n Management,\n StickerSearch,\n GifSearch,\n PollResults,\n AddingMembers,\n}\n\nexport enum MediaViewerOrigin {\n Inline,\n ScheduledInline,\n SharedMedia,\n ProfileAvatar,\n SettingsAvatar,\n MiddleHeaderAvatar,\n Album,\n ScheduledAlbum,\n SearchResult,\n}\n\nexport enum AudioOrigin {\n Inline,\n SharedMedia,\n Search,\n}\n\nexport enum ChatCreationProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ProfileEditProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ManagementProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport interface ManagementState {\n isActive: boolean;\n nextScreen?: ManagementScreens;\n isUsernameAvailable?: boolean;\n error?: string;\n invites?: ApiExportedInvite[];\n revokedInvites?: ApiExportedInvite[];\n editingInvite?: ApiExportedInvite;\n inviteInfo?: {\n invite: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n };\n}\n\nexport enum NewChatMembersProgress {\n Closed,\n InProgress,\n Loading,\n}\n\nexport type ProfileTabType = 'members' | 'commonChats' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type SharedMediaType = 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type ApiPrivacyKey = 'phoneNumber' | 'lastSeen' | 'profilePhoto' | 'forwards' | 'chatInvite';\nexport type PrivacyVisibility = 'everybody' | 'contacts' | 'nonContacts' | 'nobody';\n\nexport enum ProfileState {\n Profile,\n SharedMedia,\n MemberList,\n}\n\nexport enum PaymentStep {\n ShippingInfo,\n Shipping,\n PaymentInfo,\n Checkout,\n}\n\nexport const UPLOADING_WALLPAPER_SLUG = 'UPLOADING_WALLPAPER_SLUG';\n\nexport enum ManagementScreens {\n Initial,\n ChatPrivacyType,\n Discussion,\n ChannelSubscribers,\n GroupType,\n GroupPermissions,\n GroupRemovedUsers,\n GroupUserPermissionsCreate,\n GroupUserPermissions,\n ChatAdministrators,\n GroupRecentActions,\n ChatAdminRights,\n ChatNewAdminRights,\n GroupMembers,\n GroupAddAdmins,\n Invites,\n EditInvite,\n Reactions,\n InviteInfo,\n JoinRequests,\n}\n\nexport type ManagementType = 'user' | 'group' | 'channel';\n\nexport type NotifyException = {\n isMuted: boolean;\n isSilent?: boolean;\n shouldShowPreviews?: boolean;\n};\n\nexport type EmojiKeywords = {\n isLoading?: boolean;\n version: number;\n keywords: Record;\n};\n\nexport type InlineBotSettings = {\n id: string;\n help?: string;\n query?: string;\n offset?: string;\n canLoadMore?: boolean;\n results?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n isGallery?: boolean;\n switchPm?: ApiBotInlineSwitchPm;\n};\n","import { fastRaf } from './schedulers';\n\ninterface AnimationInstance {\n isCancelled: boolean;\n}\n\nlet currentInstance: AnimationInstance | undefined;\n\nexport function animateSingle(tick: Function, instance?: AnimationInstance) {\n if (!instance) {\n if (currentInstance && !currentInstance.isCancelled) {\n currentInstance.isCancelled = true;\n }\n\n instance = { isCancelled: false };\n currentInstance = instance;\n }\n\n if (!instance!.isCancelled && tick()) {\n fastRaf(() => {\n animateSingle(tick, instance);\n });\n }\n}\n\nexport function animate(tick: Function) {\n if (tick()) {\n fastRaf(() => {\n animate(tick);\n });\n }\n}\n\nexport type TimingFn = (t: number) => number;\n\nexport type AnimateNumberProps = {\n to: number | number[];\n from: number | number[];\n duration: number;\n onUpdate: (value: any) => void;\n timing?: TimingFn;\n onEnd?: () => void;\n};\n\nexport const timingFunctions = {\n linear: (t: number) => t,\n easeIn: (t: number) => t ** 1.675,\n easeOut: (t: number) => 1 - (1 - t ** 1.675),\n easeInOut: (t: number) => 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1),\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => (--t) * t * t + 1,\n easeInOutCubic: (t: number) => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - (--t) * t * t * t,\n easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t),\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + (--t) * t * t * t * t,\n easeInOutQuint: (t: number) => (t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t),\n};\n\nexport function animateNumber({\n timing = timingFunctions.linear,\n onUpdate,\n duration,\n onEnd,\n from,\n to,\n}: AnimateNumberProps) {\n const t0 = Date.now();\n let canceled = false;\n\n animate(() => {\n if (canceled) return false;\n const t1 = Date.now();\n let t = (t1 - t0) / duration;\n if (t > 1) t = 1;\n const progress = timing(t);\n if (typeof from === 'number' && typeof to === 'number') {\n onUpdate(from + ((to - from) * progress));\n } else if (Array.isArray(from) && Array.isArray(to)) {\n const result = from.map((f, i) => f + ((to[i] - f) * progress));\n onUpdate(result);\n }\n if (t === 1 && onEnd) onEnd();\n return t < 1;\n });\n\n return () => {\n canceled = true;\n if (onEnd) onEnd();\n };\n}\n","import { DEBUG } from '../config';\n\nexport function updateAppBadge(unreadCount: number) {\n if (typeof window.navigator.setAppBadge !== 'function') {\n return;\n }\n\n window.navigator.setAppBadge(unreadCount).catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n });\n}\n","export default function arePropsShallowEqual(currentProps: AnyLiteral, newProps: AnyLiteral) {\n if (currentProps === newProps) {\n return true;\n }\n\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return false;\n }\n\n if (currentKeysLength === 0) {\n return true;\n }\n\n for (let i = 0; i < currentKeysLength; i++) {\n const prop = currentKeys[i];\n if (currentProps[prop] !== newProps[prop]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getUnequalProps(currentProps: AnyLiteral, newProps: AnyLiteral) {\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return ['%LENGTH%'];\n }\n\n return currentKeys.reduce((res, prop) => {\n if (currentProps[prop] !== newProps[prop]) {\n res.push(`${prop}: ${currentProps[prop]} => ${newProps[prop]}`);\n }\n\n return res;\n }, [] as string[]);\n}\n","type Parts = (string | false | undefined)[];\ntype PartsWithGlobals = (string | false | undefined | string[])[];\n\nexport default function buildClassName(...parts: Parts) {\n return parts.filter(Boolean).join(' ');\n}\n\nexport function createClassNameBuilder(componentName: string) {\n return (elementName: string, ...modifiers: PartsWithGlobals) => {\n const baseName = elementName === '&' ? componentName : `${componentName}__${elementName}`;\n\n return modifiers.reduce((acc, modifier) => {\n if (modifier) {\n // A bit hacky way to pass global class names\n if (Array.isArray(modifier)) {\n acc.push(...modifier);\n } else {\n acc.push(`${baseName}--${modifier}`);\n }\n }\n\n return acc;\n }, [baseName]).join(' ');\n };\n}\n","// eslint-disable-next-line no-restricted-globals\nconst cacheApi = self.caches;\n\nexport enum Type {\n Text,\n Blob,\n Json,\n}\n\nexport async function fetch(\n cacheName: string, key: string, type: Type, isHtmlAllowed = false,\n) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const cache = await cacheApi.open(cacheName);\n const response = await cache.match(request);\n if (!response) {\n return undefined;\n }\n\n const contentType = response.headers.get('Content-Type');\n\n switch (type) {\n case Type.Text:\n return await response.text();\n case Type.Blob: {\n // Ignore deprecated data-uri avatars\n if (key.startsWith('avatar') && contentType && contentType.startsWith('text')) {\n return undefined;\n }\n\n const blob = await response.blob();\n const shouldRecreate = !blob.type || (!isHtmlAllowed && blob.type.includes('html'));\n // iOS Safari fails to preserve `type` in cache\n let resolvedType = blob.type || contentType;\n\n if (!(shouldRecreate && resolvedType)) {\n return blob;\n }\n\n // Prevent HTML-in-video attacks (for files that were cached before fix)\n if (!isHtmlAllowed) {\n resolvedType = resolvedType.replace(/html/gi, '');\n }\n\n return new Blob([blob], { type: resolvedType });\n }\n case Type.Json:\n return await response.json();\n default:\n return undefined;\n }\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function save(cacheName: string, key: string, data: AnyLiteral | Blob | string) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n const cacheData = typeof data === 'string' || data instanceof Blob ? data : JSON.stringify(data);\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const response = new Response(cacheData);\n const cache = await cacheApi.open(cacheName);\n return await cache.put(request, response);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function clear(cacheName: string) {\n try {\n if (!cacheApi) {\n return undefined;\n }\n\n return await cacheApi.delete(cacheName);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n","export function createCallbackManager() {\n const callbacks: AnyToVoidFunction[] = [];\n\n function addCallback(cb: AnyToVoidFunction) {\n callbacks.push(cb);\n\n return () => {\n removeCallback(cb);\n };\n }\n\n function removeCallback(cb: AnyToVoidFunction) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n function runCallbacks(...args: any[]) {\n callbacks.forEach((callback) => {\n callback(...args);\n });\n }\n\n function hasCallbacks() {\n return Boolean(callbacks.length);\n }\n\n return {\n runCallbacks,\n addCallback,\n removeCallback,\n hasCallbacks,\n };\n}\n\nexport type CallbackManager = ReturnType;\n","import captureKeyboardListener from './captureKeyboardListeners';\n\ntype IHandlerFunction = () => void;\n\nexport default function captureEscKeyListener(handler: IHandlerFunction) {\n return captureKeyboardListener({ onEsc: handler });\n}\n","type HandlerName = 'onEnter' | 'onBackspace' | 'onDelete' | 'onEsc' | 'onUp' | 'onDown' | 'onLeft' | 'onRight'\n| 'onTab';\ntype Handler = (e: KeyboardEvent) => void;\ntype CaptureOptions = Partial>;\n\nconst keyToHandlerName: Record = {\n Enter: 'onEnter',\n Backspace: 'onBackspace',\n Delete: 'onDelete',\n Esc: 'onEsc',\n Escape: 'onEsc',\n ArrowUp: 'onUp',\n ArrowDown: 'onDown',\n ArrowLeft: 'onLeft',\n ArrowRight: 'onRight',\n Tab: 'onTab',\n};\n\nconst handlers: Record = {\n onEnter: [],\n onDelete: [],\n onBackspace: [],\n onEsc: [],\n onUp: [],\n onDown: [],\n onLeft: [],\n onRight: [],\n onTab: [],\n};\n\nexport default function captureKeyboardListeners(options: CaptureOptions) {\n if (!hasActiveHandlers()) {\n document.addEventListener('keydown', handleKeyDown, true);\n }\n\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n if (!handler) {\n return;\n }\n\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n currentEventHandlers.push(handler);\n }\n });\n\n return () => {\n releaseKeyboardListener(options);\n };\n}\n\nfunction hasActiveHandlers() {\n return Object.values(handlers).some((keyHandlers) => Boolean(keyHandlers.length));\n}\n\nfunction handleKeyDown(e: KeyboardEvent) {\n const handlerName = keyToHandlerName[e.key];\n if (!handlerName) {\n return;\n }\n\n const { length } = handlers[handlerName];\n if (!length) {\n return;\n }\n e.stopPropagation();\n\n const handler = handlers[handlerName][length - 1];\n handler!(e);\n}\n\nfunction releaseKeyboardListener(options: CaptureOptions) {\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n const index = currentEventHandlers.findIndex((cb) => cb === handler);\n if (index !== -1) {\n currentEventHandlers.splice(index, 1);\n }\n }\n });\n\n if (!hasActiveHandlers()) {\n document.removeEventListener('keydown', handleKeyDown, false);\n }\n}\n","import { LangFn } from '../hooks/useLang';\n\nconst WEEKDAYS_FULL = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MONTHS_FULL = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nconst MONTHS_FULL_LOWERCASE = MONTHS_FULL.map((month) => month.toLowerCase());\nconst MIN_SEARCH_YEAR = 2015;\nconst MAX_DAY_IN_MONTH = 31;\nconst MAX_MONTH_IN_YEAR = 12;\nexport const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;\n\nexport function isToday(date: Date) {\n return getDayStart(new Date()) === getDayStart(date);\n}\n\nexport function getDayStart(datetime: number | Date) {\n const date = new Date(datetime);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\nexport function getDayStartAt(datetime: number | Date) {\n return getDayStart(datetime).getTime();\n}\n\nexport function toYearMonth(timestamp: number) {\n const date = new Date(timestamp * 1000);\n return `${date.getFullYear()}-${date.getMonth()}`;\n}\n\nfunction toIsoString(date: Date) {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n}\n\n// @optimization `toLocaleTimeString` is avoided because of bad performance\nexport function formatTime(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const timeFormat = lang.timeFormat || '24h';\n\n let hours = date.getHours();\n let marker = '';\n if (timeFormat === '12h') {\n marker = hours >= 12 ? ' PM' : ' AM';\n hours = hours > 12 ? hours % 12 : hours;\n }\n\n return `${String(hours).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}${marker}`;\n}\n\nexport function formatPastTimeShort(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n if (date >= today) {\n return formatTime(lang, date);\n }\n\n const weekAgo = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n if (date >= weekAgo) {\n return lang(`Weekday.Short${WEEKDAYS_FULL[date.getDay()]}`);\n }\n\n const withYear = date.getFullYear() !== today.getFullYear();\n const format = (\n lang(withYear ? 'formatDateScheduleYear' : 'formatDateSchedule')\n || (withYear ? 'd MMM yyyy' : 'd MMM')\n );\n\n return formatDate(lang, date, format);\n}\n\nexport function formatFullDate(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const format = lang('formatterYearMax') || 'dd.MM.yyyy';\n\n return formatDate(lang, date, format);\n}\n\nexport function formatMonthAndYear(lang: LangFn, date: Date, isShort = false) {\n const format = lang(isShort ? 'formatterMonthYear2' : 'formatterMonthYear') || 'MMM yyyy';\n\n return formatDate(lang, date, format);\n}\n\nexport function formatCountdown(\n lang: LangFn,\n msLeft: number,\n) {\n const days = Math.floor(msLeft / MILLISECONDS_IN_DAY);\n if (msLeft < 0) {\n return 0;\n } else if (days < 1) {\n return formatMediaDuration(msLeft / 1000);\n } else if (days < 7) {\n return lang('Days', days);\n } else if (days < 30) {\n return lang('Weeks', Math.floor(days / 7));\n } else if (days < 365) {\n return lang('Months', Math.floor(days / 30));\n } else {\n return lang('Years', Math.floor(days / 365));\n }\n}\n\nexport function formatHumanDate(\n lang: LangFn,\n datetime: number | Date,\n isShort = false,\n noWeekdays = false,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n\n if (!noWeekdays) {\n if (toIsoString(date) === toIsoString(today)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Today'));\n }\n\n const yesterday = new Date(today);\n yesterday.setDate(today.getDate() - 1);\n if (toIsoString(date) === toIsoString(yesterday)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Yesterday'));\n }\n\n const weekAgo = new Date(today);\n const weekAhead = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n weekAhead.setDate(today.getDate() + 7);\n if (date >= weekAgo && date <= weekAhead) {\n const weekDay = WEEKDAYS_FULL[date.getDay()];\n const weekDayString = isShort ? lang(`Weekday.Short${weekDay}`) : lang(`Weekday.${weekDay}`);\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(weekDayString);\n }\n }\n\n const withYear = date.getFullYear() !== today.getFullYear();\n const formatKey = isShort\n ? (withYear ? 'formatDateScheduleYear' : 'formatDateSchedule')\n : (withYear ? 'chatFullDate' : 'chatDate');\n const format = lang(formatKey) || 'd MMMM yyyy';\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(formatDate(lang, date, format));\n}\n\nfunction formatDate(lang: LangFn, date: Date, format: string) {\n const day = date.getDate();\n const monthIndex = date.getMonth();\n\n return format\n .replace('LLLL', lang(MONTHS_FULL[monthIndex]))\n .replace('MMMM', lang(`Month.Gen${MONTHS_FULL[monthIndex]}`))\n .replace('MMM', lang(`Month.Short${MONTHS_FULL[monthIndex]}`))\n .replace('MM', String(monthIndex + 1).padStart(2, '0'))\n .replace('dd', String(day).padStart(2, '0'))\n .replace('d', String(day))\n .replace('yyyy', String(date.getFullYear()))\n // Workaround for https://bugs.telegram.org/c/5777\n .replace(/'de'/g, 'de');\n}\n\nexport function formatMediaDateTime(\n lang: LangFn,\n datetime: number | Date,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n return `${formatHumanDate(lang, date, true, undefined, isUpperFirst)}, ${formatTime(lang, date)}`;\n}\n\nexport function formatMediaDuration(duration: number, maxValue?: number) {\n const hours = Math.floor(duration / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 3600 % 60);\n\n const maxHours = maxValue ? Math.floor(maxValue / 3600) : 0;\n const maxMinutes = maxValue ? Math.floor((maxValue % 3600) / 60) : 0;\n let string = '';\n if (hours > 0 || maxHours > 0) {\n string += `${String(hours).padStart(2, '0')}:`;\n string += `${String(minutes).padStart(2, '0')}:`;\n } else if (maxMinutes >= 10) {\n string += `${String(minutes).padStart(2, '0')}:`;\n } else {\n string += `${String(minutes)}:`;\n }\n string += String(seconds).padStart(2, '0');\n\n return string;\n}\n\nexport function formatVoiceRecordDuration(durationInMs: number) {\n const parts = [];\n\n let milliseconds = durationInMs % 1000;\n durationInMs -= milliseconds;\n milliseconds = Math.floor(milliseconds / 10);\n\n durationInMs = Math.floor(durationInMs / 1000);\n const seconds = durationInMs % 60;\n durationInMs -= seconds;\n\n durationInMs = Math.floor(durationInMs / 60);\n const minutes = durationInMs % 60;\n durationInMs -= minutes;\n\n durationInMs = Math.floor(durationInMs / 60);\n const hours = durationInMs % 60;\n\n if (hours > 0) {\n parts.push(String(hours).padStart(2, '0'));\n }\n parts.push(String(minutes).padStart(hours > 0 ? 2 : 1, '0'));\n parts.push(String(seconds).padStart(2, '0'));\n\n return `${parts.join(':')},${String(milliseconds).padStart(2, '0')}`;\n}\n\nexport function formatDateToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n return date.toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n },\n );\n}\n\nexport function formatDateTimeToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n return date.toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n );\n}\n\nfunction isValidDate(day: number, month: number, year = 2021): boolean {\n if (month > (MAX_MONTH_IN_YEAR - 1) || day > MAX_DAY_IN_MONTH) {\n return false;\n }\n const date = new Date(year, month, day);\n return !Number.isNaN(date.getTime()) && date.getDate() === day;\n}\n\nexport function parseDateString(query = ''): string | undefined {\n const matchStringDate = query.match(/\\d{1,2}\\s[a-zA-Z]{3,}/);\n const matchEuropeStringDate = query.match(/[a-zA-Z]{3,}\\s\\d{1,2}/);\n const matchNumberDate = query.match(/\\d{1,2}[./-]\\d{1,2}([./-]\\d{2,4})?/);\n if (!matchStringDate && !matchNumberDate && !matchEuropeStringDate) {\n return undefined;\n }\n\n if (matchNumberDate) {\n const [date, month, year] = query.split(/[./-]/).map(Number);\n return !(year && year < MIN_SEARCH_YEAR) && isValidDate(date, month - 1, year || undefined)\n ? `${year ? `${year}-` : ''}${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n }\n\n const dateParts = query.split(' ');\n const date = matchStringDate ? dateParts[0] : dateParts[1];\n const month = (matchStringDate ? dateParts[1] : dateParts[0]).toLowerCase();\n const monthIndex = MONTHS_FULL_LOWERCASE.findIndex((item) => item.startsWith(month));\n\n return monthIndex !== -1 && isValidDate(Number(date), monthIndex)\n ? `${String(monthIndex + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n}\n\nexport function timestampPlusDay(timestamp: number) {\n return timestamp + MILLISECONDS_IN_DAY / 1000;\n}\n\nfunction lowerFirst(str: string) {\n return `${str[0].toLowerCase()}${str.slice(1)}`;\n}\n\nfunction upperFirst(str: string) {\n return `${str[0].toUpperCase()}${str.slice(1)}`;\n}\n","import EMOJI_REGEX from '../lib/twemojiRegex';\n\n// Due to the fact that emoji from Apple do not contain some characters, it is necessary to remove them from emoji-data\n// https://github.com/iamcal/emoji-data/issues/136\nconst EXCLUDE_EMOJIS = ['female_sign', 'male_sign', 'medical_symbol'];\n\nconst ISO_FLAGS_OFFSET = 127397;\n\nexport type EmojiRawData = typeof import('emoji-data-ios/emoji-data.json');\nexport type EmojiModule = { default: EmojiRawData };\n\nexport type EmojiData = {\n categories: Array;\n emojis: Record;\n};\n\n// Non-standard variations of emojis, used on some devices\nconst EMOJI_EXCEPTIONS: [string | RegExp, string][] = [\n [/\\u{1f3f3}\\u200d\\u{1f308}/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u{1f308}'], // 🏳‍🌈\n [/\\u{1f3f3}\\u200d\\u26a7\\ufe0f/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u26a7\\ufe0f'], // 🏳️‍⚧️\n [/\\u{1f937}\\u200d\\u2642[^\\ufe0f]/gu, '\\u{1f937}\\u200d\\u2642\\ufe0f'], // 🤷‍♂️\n];\n\nfunction unifiedToNative(unified: string) {\n const unicodes = unified.split('-');\n const codePoints = unicodes.map((i) => parseInt(i, 16));\n\n return String.fromCodePoint(...codePoints);\n}\n\nexport function fixNonStandardEmoji(text: string) {\n // Non-standard sequences typically parsed as separate emojis, so no need to fix text without any\n if (!text.match(EMOJI_REGEX)) return text;\n // eslint-disable-next-line no-restricted-syntax\n for (const [regex, replacement] of EMOJI_EXCEPTIONS) {\n text = text.replace(regex, replacement);\n }\n\n return text;\n}\n\nexport function nativeToUnified(emoji: string) {\n let code;\n\n if (emoji.length === 1) {\n code = emoji.charCodeAt(0).toString(16).padStart(4, '0');\n } else {\n const pairs = [];\n for (let i = 0; i < emoji.length; i++) {\n if (emoji.charCodeAt(i) >= 0xd800 && emoji.charCodeAt(i) <= 0xdbff) {\n if (emoji.charCodeAt(i + 1) >= 0xdc00 && emoji.charCodeAt(i + 1) <= 0xdfff) {\n pairs.push(\n (emoji.charCodeAt(i) - 0xd800) * 0x400\n + (emoji.charCodeAt(i + 1) - 0xdc00) + 0x10000,\n );\n }\n } else if (emoji.charCodeAt(i) < 0xd800 || emoji.charCodeAt(i) > 0xdfff) {\n pairs.push(emoji.charCodeAt(i));\n }\n }\n\n code = pairs.map((x) => x.toString(16).padStart(4, '0')).join('-');\n }\n\n return code;\n}\n\nexport function uncompressEmoji(data: EmojiRawData): EmojiData {\n const emojiData: EmojiData = { categories: [], emojis: {} };\n\n for (let i = 0; i < data.length; i += 2) {\n const category = {\n id: data[i][0],\n name: data[i][1],\n emojis: [],\n } as EmojiCategory;\n\n for (let j = 0; j < data[i + 1].length; j++) {\n const emojiRaw = data[i + 1][j];\n if (!EXCLUDE_EMOJIS.includes(emojiRaw[1][0])) {\n category.emojis.push(emojiRaw[1][0]);\n emojiData.emojis[emojiRaw[1][0]] = {\n id: emojiRaw[1][0],\n names: emojiRaw[1] as string[],\n native: unifiedToNative(emojiRaw[0] as string),\n image: (emojiRaw[0] as string).toLowerCase(),\n };\n }\n }\n\n emojiData.categories.push(category);\n }\n\n return emojiData;\n}\n\nexport function isoToEmoji(iso: string) {\n const code = iso.toUpperCase();\n\n if (!/^[A-Z]{2}$/.test(code)) return iso;\n const codePoints = [...code].map((c) => c.codePointAt(0)! + ISO_FLAGS_OFFSET);\n return String.fromCodePoint(...codePoints);\n}\n","export function ensureProtocol(url?: string) {\n if (!url) {\n return undefined;\n }\n\n // HTTP was chosen by default as a fix for https://bugs.telegram.org/c/10712.\n // It is also the default protocol in the official TDesktop client.\n return url.includes('://') ? url : `http://${url}`;\n}\n","let isWebpSupportedCache: boolean | undefined;\n\nexport function isWebpSupported() {\n return Boolean(isWebpSupportedCache);\n}\n\nfunction testWebp(): Promise {\n return new Promise((resolve) => {\n const webp = new Image();\n // eslint-disable-next-line max-len\n webp.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n const handleLoadOrError = () => {\n resolve(webp.height === 2);\n };\n webp.onload = handleLoadOrError;\n webp.onerror = handleLoadOrError;\n });\n}\n\ntestWebp().then((hasWebp) => {\n isWebpSupportedCache = hasWebp;\n});\n","import { ThemeKey } from '../types';\n\nlet systemThemeCache: ThemeKey = (\n window.matchMedia?.('(prefers-color-scheme: dark)').matches\n) ? 'dark' : 'light';\n\nexport function getSystemTheme() {\n return systemThemeCache;\n}\n\nfunction handleSystemThemeChange(e: MediaQueryListEventMap['change']) {\n systemThemeCache = e.matches ? 'dark' : 'light';\n}\n\nconst mql = window.matchMedia('(prefers-color-scheme: dark)');\nif (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n} else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n}\n","import {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n IS_TEST,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n VIDEO_MOV_TYPE,\n} from '../config';\n\nexport * from './environmentWebp';\n\nexport * from './environmentSystemTheme';\n\nexport function getPlatform() {\n const { userAgent, platform } = window.navigator;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os: 'macOS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | undefined;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'macOS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (/Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n}\n\nexport const PLATFORM_ENV = getPlatform();\nexport const IS_MAC_OS = PLATFORM_ENV === 'macOS';\nexport const IS_IOS = PLATFORM_ENV === 'iOS';\nexport const IS_ANDROID = PLATFORM_ENV === 'Android';\nexport const IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nexport const IS_PWA = (\n window.matchMedia('(display-mode: standalone)').matches\n || (window.navigator as any).standalone\n || document.referrer.includes('android-app://')\n);\n\nexport const IS_TOUCH_ENV = window.matchMedia('(pointer: coarse)').matches;\n// Keep in mind the landscape orientation\nexport const IS_SINGLE_COLUMN_LAYOUT = window.innerWidth <= MOBILE_SCREEN_MAX_WIDTH || (\n window.innerWidth <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH && window.innerHeight <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n);\n// Special layout, 1 column while chat opened, 2 columns while collapsed\nexport const IS_TABLET_COLUMN_LAYOUT = !IS_SINGLE_COLUMN_LAYOUT && (\n window.innerWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n);\nexport const IS_VOICE_RECORDING_SUPPORTED = Boolean(\n navigator.mediaDevices && 'getUserMedia' in navigator.mediaDevices && (\n window.AudioContext || (window as any).webkitAudioContext\n ),\n);\nexport const IS_SMOOTH_SCROLL_SUPPORTED = 'scrollBehavior' in document.documentElement.style;\nexport const IS_EMOJI_SUPPORTED = PLATFORM_ENV && (IS_MAC_OS || IS_IOS);\nexport const IS_SERVICE_WORKER_SUPPORTED = 'serviceWorker' in navigator;\n// TODO Consider failed service worker\nexport const IS_PROGRESSIVE_SUPPORTED = IS_SERVICE_WORKER_SUPPORTED;\nexport const IS_STREAMING_SUPPORTED = 'MediaSource' in window;\nexport const IS_OPUS_SUPPORTED = Boolean((new Audio()).canPlayType('audio/ogg; codecs=opus'));\nexport const IS_CANVAS_FILTER_SUPPORTED = (\n !IS_TEST && 'filter' in (document.createElement('canvas').getContext('2d') || {})\n);\nexport const IS_REQUEST_FULLSCREEN_SUPPORTED = 'requestFullscreen' in document.createElement('div');\nexport const ARE_CALLS_SUPPORTED = !navigator.userAgent.includes('Firefox');\nexport const LAYERS_ANIMATION_NAME = IS_ANDROID ? 'slide-fade' : IS_IOS ? 'slide-layers' : 'push-slide';\n\nconst TEST_VIDEO = document.createElement('video');\n// `canPlayType(VIDEO_MOV_TYPE)` returns false negative at least for macOS Chrome and iOS Safari\nexport const IS_MOV_SUPPORTED = true;\n\nif (IS_MOV_SUPPORTED) SUPPORTED_VIDEO_CONTENT_TYPES.add(VIDEO_MOV_TYPE);\n\nexport const IS_WEBM_SUPPORTED = Boolean(TEST_VIDEO.canPlayType('video/webm; codecs=\"vp9\"').replace('no', ''))\n && !(IS_MAC_OS && IS_SAFARI); // Safari on MacOS has some issues with WebM\n\nexport const DPR = window.devicePixelRatio || 1;\n\nexport const MASK_IMAGE_DISABLED = true;\n\nexport const IS_SCROLL_PATCH_NEEDED = !IS_MAC_OS && !IS_IOS && !IS_ANDROID;\n\n// Smaller area reduces scroll jumps caused by `patchChromiumScroll`\nexport const MESSAGE_LIST_SENSITIVE_AREA = IS_SCROLL_PATCH_NEEDED ? 300 : 750;\n","import { pause } from './schedulers';\n\n// Polyfill for Safari: `File` is not available in web worker\nif (typeof File === 'undefined') {\n // eslint-disable-next-line no-global-assign, no-restricted-globals, func-names\n self.File = class extends Blob {\n name: string;\n\n constructor(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag) {\n if (options) {\n const { type, ...rest } = options;\n super(fileBits, { type });\n Object.assign(this, rest);\n } else {\n super(fileBits);\n }\n\n this.name = fileName;\n }\n } as typeof File;\n}\n\nexport function dataUriToBlob(dataUri: string) {\n const arr = dataUri.split(',');\n const mime = arr[0].match(/:(.*?);/)![1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n}\n\nexport function blobToDataUri(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent) => {\n const { result } = e.target || {};\n if (typeof result === 'string') {\n resolve(result);\n }\n\n reject(new Error('Failed to read blob'));\n };\n\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport function blobToFile(blob: Blob, fileName: string) {\n return new File([blob], fileName, {\n lastModified: Date.now(),\n type: blob.type,\n });\n}\n\nexport function preloadImage(url: string): Promise {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n}\n\nexport function preloadVideo(url: string): Promise {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.volume = 0;\n video.onloadedmetadata = () => resolve(video);\n video.onerror = reject;\n video.src = url;\n });\n}\n\nexport async function createPosterForVideo(url: string): Promise {\n const video = await preloadVideo(url);\n\n return Promise.race([\n pause(2000) as Promise,\n new Promise((resolve, reject) => {\n video.onseeked = () => {\n if (!video.videoWidth || !video.videoHeight) {\n resolve(undefined);\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(video, 0, 0);\n resolve(canvas.toDataURL('image/jpeg'));\n };\n video.onerror = reject;\n video.currentTime = Math.min(video.duration, 1);\n }),\n ]);\n}\n\nexport async function fetchBlob(blobUrl: string) {\n const response = await fetch(blobUrl);\n return response.blob();\n}\n\nexport async function fetchFile(blobUrl: string, fileName: string) {\n const blob = await fetchBlob(blobUrl);\n return blobToFile(blob, fileName);\n}\n\nexport function imgToCanvas(img: HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0);\n\n return canvas;\n}\n","import { addCallback, addReducer, getGlobal } from '../lib/teact/teactn';\n\nimport { GlobalState } from '../global/types';\nimport { NotifyException, NotifySettings } from '../types';\nimport { ApiChat, ApiChatFolder, ApiUser } from '../api/types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, DEBUG } from '../config';\nimport { selectNotifySettings, selectNotifyExceptions } from '../modules/selectors';\nimport { selectIsChatMuted } from '../modules/helpers';\nimport { onIdle, throttle } from './schedulers';\nimport { areSortedArraysEqual, unique } from './iteratees';\nimport arePropsShallowEqual from './arePropsShallowEqual';\nimport { CallbackManager, createCallbackManager } from './callbacks';\n\ninterface FolderSummary {\n id: number;\n listIds?: Set;\n orderedPinnedIds?: string[];\n contacts?: true;\n nonContacts?: true;\n groups?: true;\n channels?: true;\n bots?: true;\n excludeMuted?: true;\n excludeRead?: true;\n excludeArchived?: true;\n excludedChatIds?: Set;\n includedChatIds?: Set;\n pinnedChatIds?: Set;\n}\n\ninterface ChatSummary {\n id: string;\n type: ApiChat['type'];\n isListed: boolean;\n isArchived: boolean;\n isMuted: boolean;\n isUnread: boolean;\n unreadCount?: number;\n unreadMentionsCount?: number;\n order: number;\n isUserBot?: boolean;\n isUserContact?: boolean;\n}\n\nconst UPDATE_THROTTLE = 500;\nconst DEBUG_DURATION_LIMIT = 6;\n\nconst initials = buildInitials();\n\nlet prevGlobal: {\n allFolderListIds?: GlobalState['chats']['listIds']['active'];\n allFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['active'];\n archivedFolderListIds?: GlobalState['chats']['listIds']['archived'];\n archivedFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['archived'];\n isAllFolderFullyLoaded?: boolean;\n isArchivedFolderFullyLoaded?: boolean;\n chatsById: Record;\n foldersById: Record;\n usersById: Record;\n notifySettings: NotifySettings;\n notifyExceptions?: Record;\n} = initials.prevGlobal;\n\nlet prepared: {\n folderSummariesById: Record;\n chatSummariesById: Map;\n folderIdsByChatId: Record;\n chatIdsByFolderId: Record | undefined>;\n isOrderedListJustPatched: Record;\n} = initials.prepared;\n\nlet results: {\n orderedIdsByFolderId: Record;\n pinnedCountByFolderId: Record; // Also watched by `callbacks.orderedIdsByFolderId`\n chatsCountByFolderId: Record;\n unreadCountersByFolderId: Record;\n} = initials.results;\n\nlet callbacks: {\n orderedIdsByFolderId: Record;\n chatsCountByFolderId: CallbackManager;\n unreadCountersByFolderId: CallbackManager;\n} = initials.callbacks;\n\nconst updateFolderManagerThrottled = throttle(() => {\n onIdle(() => {\n updateFolderManager(getGlobal());\n });\n}, UPDATE_THROTTLE);\n\nlet inited = false;\n\n/* Getters */\n\nexport function init() {\n inited = true;\n\n addCallback(updateFolderManagerThrottled);\n addReducer('reset', reset);\n\n updateFolderManager(getGlobal());\n}\n\nexport function getOrderedIds(folderId: number) {\n if (!inited) init();\n\n return results.orderedIdsByFolderId[folderId];\n}\n\nexport function getPinnedChatsCount(folderId: number) {\n if (!inited) init();\n\n return results.pinnedCountByFolderId[folderId] || 0;\n}\n\nexport function getChatsCount() {\n if (!inited) init();\n\n return results.chatsCountByFolderId;\n}\n\nexport function getUnreadCounters() {\n if (!inited) init();\n\n return results.unreadCountersByFolderId;\n}\n\nexport function getAllNotificationsCount() {\n return getUnreadCounters()[ALL_FOLDER_ID]?.notificationsCount || 0;\n}\n\n/* Callback managers */\n\nexport function addOrderedIdsCallback(folderId: number, callback: (orderedIds: string[]) => void) {\n if (!callbacks.orderedIdsByFolderId[folderId]) {\n callbacks.orderedIdsByFolderId[folderId] = createCallbackManager();\n }\n\n return callbacks.orderedIdsByFolderId[folderId].addCallback(callback);\n}\n\nexport function addChatsCountCallback(callback: (chatsCount: typeof results.chatsCountByFolderId) => void) {\n return callbacks.chatsCountByFolderId.addCallback(callback);\n}\n\nexport function addUnreadCountersCallback(callback: (unreadCounters: typeof results.unreadCountersByFolderId) => void) {\n return callbacks.unreadCountersByFolderId.addCallback(callback);\n}\n\n/* Global update handlers */\n\nfunction updateFolderManager(global: GlobalState) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startedAt: number;\n if (DEBUG) {\n DEBUG_startedAt = performance.now();\n }\n\n const isAllFolderChanged = Boolean(\n global.chats.listIds.active\n && isMainFolderChanged(ALL_FOLDER_ID, global.chats.listIds.active, global.chats.orderedPinnedIds.active),\n );\n const isArchivedFolderChanged = Boolean(\n global.chats.listIds.archived\n && isMainFolderChanged(ARCHIVED_FOLDER_ID, global.chats.listIds.archived, global.chats.orderedPinnedIds.archived),\n );\n const isAllFullyLoadedChanged = global.chats.isFullyLoaded.active !== prevGlobal.isAllFolderFullyLoaded;\n const isArchivedFullyLoadedChanged = global.chats.isFullyLoaded.archived !== prevGlobal.isArchivedFolderFullyLoaded;\n\n const areFoldersChanged = global.chatFolders.byId !== prevGlobal.foldersById;\n const areChatsChanged = global.chats.byId !== prevGlobal.chatsById;\n const areUsersChanged = global.users.byId !== prevGlobal.usersById;\n const areNotifySettingsChanged = selectNotifySettings(global) !== prevGlobal.notifySettings;\n const areNotifyExceptionsChanged = selectNotifyExceptions(global) !== prevGlobal.notifyExceptions;\n\n let affectedFolderIds: number[] = [];\n\n if (isAllFullyLoadedChanged || isArchivedFullyLoadedChanged) {\n affectedFolderIds = affectedFolderIds.concat(\n updateFullyLoaded(global, isArchivedFullyLoadedChanged),\n );\n }\n\n if (!(\n isAllFolderChanged || isArchivedFolderChanged || areFoldersChanged\n || areChatsChanged || areUsersChanged || areNotifySettingsChanged || areNotifyExceptionsChanged\n )\n ) {\n if (affectedFolderIds.length) {\n updateResults(affectedFolderIds);\n }\n\n return;\n }\n\n const prevAllFolderListIds = prevGlobal.allFolderListIds;\n const prevArchivedFolderListIds = prevGlobal.archivedFolderListIds;\n\n updateFolders(global, isAllFolderChanged, isArchivedFolderChanged, areFoldersChanged);\n\n affectedFolderIds = affectedFolderIds.concat(updateChats(\n global, areFoldersChanged || isAllFolderChanged || isArchivedFolderChanged,\n areNotifySettingsChanged, areNotifyExceptionsChanged,\n prevAllFolderListIds, prevArchivedFolderListIds,\n ));\n\n updateResults(unique(affectedFolderIds));\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startedAt!;\n if (duration > DEBUG_DURATION_LIMIT) {\n // eslint-disable-next-line no-console\n console.warn(`Slow \\`updateFolderManager\\`: ${Math.round(duration)} ms`);\n }\n }\n}\n\nfunction isMainFolderChanged(folderId: number, newListIds?: string[], newPinnedIds?: string[]) {\n const currentListIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderListIds\n : prevGlobal.archivedFolderListIds;\n const currentPinnedIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderPinnedIds\n : prevGlobal.archivedFolderPinnedIds;\n\n return currentListIds !== newListIds || currentPinnedIds !== newPinnedIds;\n}\n\nfunction updateFullyLoaded(\n global: GlobalState,\n isArchivedFullyLoadedChanged = false,\n) {\n let affectedFolderIds = [];\n\n if (isArchivedFullyLoadedChanged) {\n affectedFolderIds.push(ARCHIVED_FOLDER_ID);\n }\n\n const isAllFolderFullyLoaded = global.chats.isFullyLoaded.active;\n const isArchivedFolderFullyLoaded = global.chats.isFullyLoaded.archived;\n\n if (isAllFolderFullyLoaded && isArchivedFolderFullyLoaded) {\n const emptyFolderIds = Object.keys(prepared.folderSummariesById)\n .filter((folderId) => !results.orderedIdsByFolderId[folderId])\n .map(Number);\n\n affectedFolderIds = affectedFolderIds.concat(emptyFolderIds);\n }\n\n prevGlobal.isAllFolderFullyLoaded = isAllFolderFullyLoaded;\n prevGlobal.isArchivedFolderFullyLoaded = isArchivedFolderFullyLoaded;\n\n return affectedFolderIds;\n}\n\nfunction updateFolders(\n global: GlobalState, isAllFolderChanged: boolean, isArchivedFolderChanged: boolean, areFoldersChanged: boolean,\n) {\n const changedFolders = [];\n\n if (isAllFolderChanged) {\n const newListIds = global.chats.listIds.active!;\n const newPinnedIds = global.chats.orderedPinnedIds.active;\n\n prepared.folderSummariesById[ALL_FOLDER_ID] = buildFolderSummaryFromMainList(\n ALL_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.allFolderListIds = newListIds;\n prevGlobal.allFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ALL_FOLDER_ID);\n }\n\n if (isArchivedFolderChanged) {\n const newListIds = global.chats.listIds.archived!;\n const newPinnedIds = global.chats.orderedPinnedIds.archived;\n\n prepared.folderSummariesById[ARCHIVED_FOLDER_ID] = buildFolderSummaryFromMainList(\n ARCHIVED_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.archivedFolderListIds = newListIds;\n prevGlobal.archivedFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ARCHIVED_FOLDER_ID);\n }\n\n if (areFoldersChanged) {\n const newFoldersById = global.chatFolders.byId;\n\n Object.values(newFoldersById).forEach((folder) => {\n if (folder === prevGlobal.foldersById[folder.id]) {\n return;\n }\n\n prepared.folderSummariesById[folder.id] = buildFolderSummary(folder);\n\n changedFolders.push(folder.id);\n });\n\n prevGlobal.foldersById = newFoldersById;\n }\n\n return changedFolders;\n}\n\nfunction buildFolderSummaryFromMainList(\n folderId: number, listIds: string[], orderedPinnedIds?: string[],\n): FolderSummary {\n return {\n id: folderId,\n listIds: new Set(listIds),\n orderedPinnedIds: orderedPinnedIds,\n pinnedChatIds: new Set(orderedPinnedIds),\n };\n}\n\nfunction buildFolderSummary(folder: ApiChatFolder): FolderSummary {\n return {\n ...folder,\n orderedPinnedIds: folder.pinnedChatIds,\n excludedChatIds: folder.excludedChatIds ? new Set(folder.excludedChatIds) : undefined,\n includedChatIds: folder.excludedChatIds ? new Set(folder.includedChatIds) : undefined,\n pinnedChatIds: folder.excludedChatIds ? new Set(folder.pinnedChatIds) : undefined,\n };\n}\n\nfunction updateChats(\n global: GlobalState,\n areFoldersChanged: boolean,\n areNotifySettingsChanged: boolean,\n areNotifyExceptionsChanged: boolean,\n prevAllFolderListIds?: string[],\n prevArchivedFolderListIds?: string[],\n) {\n const newChatsById = global.chats.byId;\n const newUsersById = global.users.byId;\n const newNotifySettings = selectNotifySettings(global);\n const newNotifyExceptions = selectNotifyExceptions(global);\n const folderSummaries = Object.values(prepared.folderSummariesById);\n const affectedFolderIds = new Set();\n\n const newAllFolderListIds = global.chats.listIds.active;\n const newArchivedFolderListIds = global.chats.listIds.archived;\n let allIds = [...newAllFolderListIds || [], ...newArchivedFolderListIds || []];\n if (newAllFolderListIds !== prevAllFolderListIds || newArchivedFolderListIds !== prevArchivedFolderListIds) {\n allIds = unique(allIds.concat(prevAllFolderListIds || [], prevArchivedFolderListIds || []));\n }\n\n allIds.forEach((chatId) => {\n const chat = newChatsById[chatId];\n\n if (\n !areFoldersChanged\n && !areNotifySettingsChanged\n && !areNotifyExceptionsChanged\n && chat === prevGlobal.chatsById[chatId]\n && newUsersById[chatId] === prevGlobal.usersById[chatId]\n ) {\n return;\n }\n\n let newFolderIds: number[];\n if (chat) {\n const currentSummary = prepared.chatSummariesById.get(chatId);\n const newSummary = buildChatSummary(chat, newNotifySettings, newNotifyExceptions, newUsersById[chatId]);\n if (!areFoldersChanged && currentSummary && arePropsShallowEqual(newSummary, currentSummary)) {\n return;\n }\n\n prepared.chatSummariesById.set(chatId, newSummary);\n\n newFolderIds = buildChatFolderIds(newSummary, folderSummaries);\n newFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n } else {\n prepared.chatSummariesById.delete(chatId);\n newFolderIds = [];\n }\n\n const currentFolderIds = prepared.folderIdsByChatId[chatId] || [];\n if (areSortedArraysEqual(newFolderIds, currentFolderIds)) {\n return;\n }\n\n const deletedFolderIds = updateListsForChat(chatId, currentFolderIds, newFolderIds);\n deletedFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n });\n\n prevGlobal.chatsById = newChatsById;\n prevGlobal.usersById = newUsersById;\n prevGlobal.notifySettings = newNotifySettings;\n prevGlobal.notifyExceptions = newNotifyExceptions;\n\n return Array.from(affectedFolderIds);\n}\n\nfunction buildChatSummary(\n chat: ApiChat,\n notifySettings: NotifySettings,\n notifyExceptions?: Record,\n user?: ApiUser,\n): ChatSummary {\n const {\n id, type, lastMessage, isRestricted, isNotJoined, folderId,\n unreadCount, unreadMentionsCount, hasUnreadMark,\n joinDate, draftDate,\n } = chat;\n\n const userInfo = type === 'chatTypePrivate' && user;\n\n return {\n id,\n type,\n isListed: Boolean(lastMessage && !isRestricted && !isNotJoined),\n isArchived: folderId === ARCHIVED_FOLDER_ID,\n isMuted: selectIsChatMuted(chat, notifySettings, notifyExceptions),\n isUnread: Boolean(unreadCount || unreadMentionsCount || hasUnreadMark),\n unreadCount,\n unreadMentionsCount,\n order: Math.max(joinDate || 0, draftDate || 0, lastMessage?.date || 0),\n isUserBot: userInfo ? userInfo.type === 'userTypeBot' : undefined,\n isUserContact: userInfo ? userInfo.isContact : undefined,\n };\n}\n\nfunction buildChatFolderIds(chatSummary: ChatSummary, folderSummaries: FolderSummary[]) {\n return folderSummaries.reduce((acc, folderSummary) => {\n if (isChatInFolder(chatSummary, folderSummary)) {\n acc.push(folderSummary.id);\n }\n\n return acc;\n }, []).sort();\n}\n\nfunction isChatInFolder(\n chatSummary: ChatSummary,\n folderSummary: FolderSummary,\n) {\n if (!chatSummary.isListed) {\n return false;\n }\n\n const { id: chatId, type } = chatSummary;\n\n if (folderSummary.listIds) {\n if (\n (chatSummary.isArchived && folderSummary.id === ALL_FOLDER_ID)\n || (!chatSummary.isArchived && folderSummary.id === ARCHIVED_FOLDER_ID)\n ) {\n return false;\n }\n\n return folderSummary.listIds.has(chatId);\n }\n\n if (folderSummary.excludedChatIds?.has(chatId)) {\n return false;\n }\n\n if (folderSummary.includedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.pinnedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.excludeArchived && chatSummary.isArchived) {\n return false;\n }\n\n if (folderSummary.excludeRead && !chatSummary.isUnread) {\n return false;\n }\n\n if (folderSummary.excludeMuted && chatSummary.isMuted && !chatSummary.unreadMentionsCount) {\n return false;\n }\n\n if (type === 'chatTypePrivate') {\n if (chatSummary.isUserBot) {\n if (folderSummary.bots) {\n return true;\n }\n } else {\n if (folderSummary.contacts && chatSummary.isUserContact) {\n return true;\n }\n\n if (folderSummary.nonContacts && !chatSummary.isUserContact) {\n return true;\n }\n }\n } else if (type === 'chatTypeChannel') {\n return Boolean(folderSummary.channels);\n } else if (type === 'chatTypeBasicGroup' || type === 'chatTypeSuperGroup') {\n return Boolean(folderSummary.groups);\n }\n\n return false;\n}\n\nfunction updateListsForChat(chatId: string, currentFolderIds: number[], newFolderIds: number[]) {\n const currentFolderIdsSet = new Set(currentFolderIds);\n const newFolderIdsSet = new Set(newFolderIds);\n const deletedFolderIds: number[] = [];\n\n unique([...currentFolderIds, ...newFolderIds]).forEach((folderId) => {\n let currentFolderOrderedIds = results.orderedIdsByFolderId[folderId];\n\n if (currentFolderIdsSet.has(folderId) && !newFolderIdsSet.has(folderId)) {\n prepared.chatIdsByFolderId[folderId]!.delete(chatId);\n\n deletedFolderIds.push(folderId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds = currentFolderOrderedIds.filter((id) => id !== chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n } else if (!currentFolderIdsSet.has(folderId) && newFolderIdsSet.has(folderId)) {\n if (!prepared.chatIdsByFolderId[folderId]) {\n prepared.chatIdsByFolderId[folderId] = new Set();\n }\n\n prepared.chatIdsByFolderId[folderId]!.add(chatId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds.push(chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n }\n\n results.orderedIdsByFolderId[folderId] = currentFolderOrderedIds;\n });\n\n prepared.folderIdsByChatId[chatId] = newFolderIds;\n\n return deletedFolderIds;\n}\n\nfunction updateResults(affectedFolderIds: number[]) {\n let wasUnreadCountersChanged = false;\n let wasChatsCountChanged = false;\n\n Array.from(affectedFolderIds).forEach((folderId) => {\n const { pinnedCount: newPinnedCount, orderedIds: newOrderedIds } = buildFolderOrderedIds(folderId);\n // When signed out\n if (!newOrderedIds) {\n return;\n }\n\n const currentOrderedIds = results.orderedIdsByFolderId[folderId];\n const currentPinnedCount = results.pinnedCountByFolderId[folderId];\n const areOrderedIdsChanged = (\n !currentOrderedIds\n || currentPinnedCount === undefined || currentPinnedCount !== newPinnedCount\n || prepared.isOrderedListJustPatched[folderId]\n || !areSortedArraysEqual(newOrderedIds, currentOrderedIds)\n );\n if (areOrderedIdsChanged) {\n prepared.isOrderedListJustPatched[folderId] = false;\n results.orderedIdsByFolderId[folderId] = newOrderedIds;\n results.pinnedCountByFolderId[folderId] = newPinnedCount;\n callbacks.orderedIdsByFolderId[folderId]?.runCallbacks(newOrderedIds);\n }\n\n const currentChatsCount = results.chatsCountByFolderId[folderId];\n const newChatsCount = newOrderedIds.length;\n if (!wasChatsCountChanged) {\n wasChatsCountChanged = currentChatsCount !== newChatsCount;\n }\n results.chatsCountByFolderId[folderId] = newChatsCount;\n\n const currentUnreadCounters = results.unreadCountersByFolderId[folderId];\n const newUnreadCounters = buildFolderUnreadCounters(folderId);\n if (!wasUnreadCountersChanged) {\n wasUnreadCountersChanged = (\n !currentUnreadCounters || !arePropsShallowEqual(newUnreadCounters, currentUnreadCounters)\n );\n }\n results.unreadCountersByFolderId[folderId] = newUnreadCounters;\n });\n\n if (wasChatsCountChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.chatsCountByFolderId };\n results.chatsCountByFolderId = newValue;\n callbacks.chatsCountByFolderId.runCallbacks(newValue);\n }\n\n if (wasUnreadCountersChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.unreadCountersByFolderId };\n results.unreadCountersByFolderId = newValue;\n callbacks.unreadCountersByFolderId.runCallbacks(newValue);\n }\n}\n\nfunction buildFolderOrderedIds(folderId: number) {\n const folderSummary = prepared.folderSummariesById[folderId];\n if (!folderSummary) {\n return {};\n }\n\n const { orderedPinnedIds, pinnedChatIds } = folderSummary;\n const {\n chatSummariesById,\n chatIdsByFolderId: { [folderId]: chatIds },\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: prevOrderedIds },\n } = results;\n\n const sortedPinnedIds = chatIds ? orderedPinnedIds?.filter((id) => chatIds.has(id)) : orderedPinnedIds;\n const allListIds = prevOrderedIds || (chatIds && Array.from(chatIds)) || [];\n const notPinnedIds = pinnedChatIds ? allListIds.filter((id) => !pinnedChatIds.has(id)) : allListIds;\n const sortedNotPinnedIds = notPinnedIds.sort((chatId1: string, chatId2: string) => {\n return chatSummariesById.get(chatId2)!.order - chatSummariesById.get(chatId1)!.order;\n });\n\n return {\n pinnedCount: sortedPinnedIds?.length || 0,\n orderedIds: [\n ...(sortedPinnedIds || []),\n ...sortedNotPinnedIds,\n ],\n };\n}\n\nfunction buildFolderUnreadCounters(folderId: number) {\n const {\n chatSummariesById,\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: orderedIds },\n } = results;\n\n return orderedIds!.reduce((newUnreadCounters, chatId) => {\n const chatSummary = chatSummariesById.get(chatId);\n if (!chatSummary) {\n return newUnreadCounters;\n }\n\n if (chatSummary.isUnread) {\n newUnreadCounters.chatsCount++;\n\n if (chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadMentionsCount;\n }\n\n if (!chatSummary.isMuted) {\n if (chatSummary.unreadCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadCount;\n } else if (!chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += 1; // Manually marked unread\n }\n }\n }\n\n return newUnreadCounters;\n }, {\n chatsCount: 0,\n notificationsCount: 0,\n });\n}\n\nfunction buildInitials() {\n return {\n prevGlobal: {\n foldersById: {},\n chatsById: {},\n usersById: {},\n notifySettings: {} as NotifySettings,\n notifyExceptions: {},\n },\n\n prepared: {\n folderSummariesById: {},\n chatSummariesById: new Map(),\n folderIdsByChatId: {},\n chatIdsByFolderId: {},\n isOrderedListJustPatched: {},\n },\n\n results: {\n orderedIdsByFolderId: {},\n pinnedCountByFolderId: {},\n chatsCountByFolderId: {},\n unreadCountersByFolderId: {},\n },\n\n callbacks: {\n orderedIdsByFolderId: {},\n chatsCountByFolderId: createCallbackManager(),\n unreadCountersByFolderId: createCallbackManager(),\n },\n };\n}\n\nfunction reset() {\n const newInitials = buildInitials();\n\n prevGlobal = newInitials.prevGlobal;\n prepared = newInitials.prepared;\n results = newInitials.results;\n callbacks = newInitials.callbacks;\n}\n","import { LangCode } from '../types';\n\nexport function formatCurrency(totalPrice: number, currency?: string, locale: LangCode = 'en') {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(currency === 'JPY' ? totalPrice : totalPrice / 100);\n}\n","const generateIdFor = (store: AnyLiteral) => {\n let id;\n\n do {\n id = String(Math.random()).replace('0.', 'id');\n } while (store.hasOwnProperty(id));\n\n return id;\n};\n\nexport default generateIdFor;\n","import { ApiError, ApiFieldError } from '../api/types';\n\nconst READABLE_ERROR_MESSAGES: Record = {\n CHAT_RESTRICTED: 'You can\\'t send messages in this chat, you were restricted',\n CHAT_WRITE_FORBIDDEN: 'You can\\'t write in this chat',\n CHAT_SEND_POLL_FORBIDDEN: 'You can\\'t create polls in this chat',\n CHAT_SEND_STICKERS_FORBIDDEN: 'You can\\'t send stickers in this chat',\n CHAT_SEND_GIFS_FORBIDDEN: 'You can\\'t send gifs in this chat',\n CHAT_SEND_MEDIA_FORBIDDEN: 'You can\\'t send media in this chat',\n CHAT_LINK_EXISTS: 'The chat is public, you can\\'t hide the history to new users',\n // eslint-disable-next-line max-len\n SLOWMODE_WAIT_X: 'Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.',\n USER_BANNED_IN_CHANNEL: 'You\\'re banned from sending messages in supergroups / channels',\n USER_IS_BLOCKED: 'You were blocked by this user',\n YOU_BLOCKED_USER: 'You blocked this user',\n IMAGE_PROCESS_FAILED: 'Failure while processing image',\n MEDIA_EMPTY: 'The provided media object is invalid',\n MEDIA_INVALID: 'Media invalid',\n PHOTO_EXT_INVALID: 'The extension of the photo is invalid',\n PHOTO_INVALID_DIMENSIONS: 'The photo dimensions are invalid',\n PHOTO_SAVE_FILE_INVALID: 'Internal issues, try again later',\n // eslint-disable-next-line max-len\n MESSAGE_DELETE_FORBIDDEN: 'You can\\'t delete one of the messages you tried to delete, most likely because it is a service message.',\n MESSAGE_POLL_CLOSED: 'Poll closed',\n MESSAGE_EDIT_TIME_EXPIRED: 'You can\\'t edit this message anymore.',\n CHAT_ADMIN_REQUIRED: 'You must be an admin in this chat to do this',\n PINNED_DIALOGS_TOO_MUCH: 'Sorry, you can only pin 5 chats to the top',\n DIALOG_FILTERS_TOO_MUCH: 'Sorry, you can\\'t have more than 10 folders',\n CHANNEL_PRIVATE: 'This channel is private',\n MEDIA_CAPTION_TOO_LONG: 'The provided caption is too long',\n ADDRESS_STREET_LINE1_INVALID: 'The address you provided is not valid',\n ADDRESS_STREET_LINE2_INVALID: 'The address you provided is not valid',\n ADDRESS_CITY_INVALID: 'The city you provided is not valid',\n ADDRESS_COUNTRY_INVALID: 'The country you provided is not valid',\n ADDRESS_POSTCODE_INVALID: 'The postcode you provided is not valid',\n ADDRESS_STATE_INVALID: 'The state you provided is not valid',\n REQ_INFO_NAME_INVALID: 'The name you provided is not valid',\n REQ_INFO_PHONE_INVALID: 'The phone you provided is not valid',\n REQ_INFO_EMAIL_INVALID: 'The email you provided is not valid',\n // TODO Bring back after fixing the weird bug\n // CHANNEL_INVALID: 'An error occurred. Please try again later',\n LINK_NOT_MODIFIED: 'This discussion is already linked to the channel',\n MESSAGE_TOO_LONG: 'Message is too long',\n\n // Non-API errors\n // eslint-disable-next-line max-len\n SERVICE_WORKER_DISABLED: 'Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key',\n // eslint-disable-next-line max-len\n MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS: 'The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.',\n // eslint-disable-next-line max-len\n FRESH_RESET_AUTHORISATION_FORBIDDEN: 'You can’t logout other sessions if less than 24 hours have passed since you logged on the current session',\n\n BOTS_TOO_MUCH: 'There are too many bots in this chat/channel',\n BOT_GROUPS_BLOCKED: 'This bot can\\'t be added to groups',\n USERS_TOO_MUCH: 'The maximum number of users has been exceeded',\n USER_CHANNELS_TOO_MUCH: 'One of the users you tried to add is already in too many channels/supergroups',\n USER_KICKED: 'This user was kicked from this supergroup/channel',\n USER_NOT_MUTUAL_CONTACT: 'The provided user is not a mutual contact',\n USER_PRIVACY_RESTRICTED: 'The user\\'s privacy settings do not allow you to do this',\n INVITE_HASH_EMPTY: 'The invite hash is empty',\n INVITE_HASH_EXPIRED: 'The invite link has expired',\n INVITE_HASH_INVALID: 'The invite hash is invalid',\n CHANNELS_TOO_MUCH: 'You have joined too many channels/supergroups',\n USER_ALREADY_PARTICIPANT: 'You already in the group',\n SCHEDULE_DATE_INVALID: 'Invalid schedule date provided',\n WALLPAPER_DIMENSIONS_INVALID: 'The wallpaper dimensions are invalid, please select another file',\n ADMINS_TOO_MUCH: 'There are too many admins',\n ADMIN_RANK_EMOJI_NOT_ALLOWED: 'An admin rank cannot contain emojis',\n ADMIN_RANK_INVALID: 'The specified admin rank is invalid',\n FRESH_CHANGE_ADMINS_FORBIDDEN: 'You were just elected admin, you can\\'t add or modify other admins yet',\n INPUT_USER_DEACTIVATED: 'The specified user was deleted',\n};\n\nexport const SHIPPING_ERRORS: Record = {\n ADDRESS_STREET_LINE1_INVALID: {\n field: 'streetLine1',\n message: 'Incorrect street address',\n },\n ADDRESS_STREET_LINE2_INVALID: {\n field: 'streetLine2',\n message: 'Incorrect street address',\n },\n ADDRESS_CITY_INVALID: {\n field: 'city',\n message: 'Incorrect city',\n },\n ADDRESS_COUNTRY_INVALID: {\n field: 'countryIso2',\n message: 'Incorrect country',\n },\n ADDRESS_POSTCODE_INVALID: {\n field: 'postCode',\n message: 'Incorrect post code',\n },\n ADDRESS_STATE_INVALID: {\n field: 'state',\n message: 'Incorrect state',\n },\n REQ_INFO_NAME_INVALID: {\n field: 'fullName',\n message: 'Incorrect name',\n },\n REQ_INFO_PHONE_INVALID: {\n field: 'phone',\n message: 'Incorrect phone',\n },\n REQ_INFO_EMAIL_INVALID: {\n field: 'email',\n message: 'Incorrect email',\n },\n};\n\nexport default function getReadableErrorText(error: ApiError) {\n const { message, isSlowMode, textParams } = error;\n // Currently, Telegram API doesn't return `SLOWMODE_WAIT_X` error as described in the docs\n if (isSlowMode) {\n const extraPartIndex = message.indexOf(' (caused by');\n return extraPartIndex > 0 ? message.substring(0, extraPartIndex) : message;\n }\n let errorMessage = READABLE_ERROR_MESSAGES[message];\n if (errorMessage && textParams) {\n errorMessage = Object.keys(textParams).reduce((acc, current) => {\n return acc.replace(current, textParams[current]);\n }, errorMessage as string);\n }\n return errorMessage;\n}\n\nexport function getShippingError(error: ApiError): ApiFieldError | undefined {\n return SHIPPING_ERRORS[error.message];\n}\n","import { DEBUG_ALERT_MSG } from '../config';\nimport { throttle } from './schedulers';\n\nwindow.addEventListener('error', handleErrorEvent);\nwindow.addEventListener('unhandledrejection', handleErrorEvent);\n\n// eslint-disable-next-line prefer-destructuring\nconst APP_ENV = process.env.APP_ENV;\n\nfunction handleErrorEvent(e: ErrorEvent | PromiseRejectionEvent) {\n e.preventDefault();\n\n handleError(e instanceof ErrorEvent ? e.error : e.reason);\n}\n\nconst throttledAlert = throttle(window.alert, 1000);\n\nexport function handleError(err: Error) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (APP_ENV === 'development' || APP_ENV === 'staging') {\n throttledAlert(`${DEBUG_ALERT_MSG}\\n\\n${(err?.message) || err}\\n${err?.stack}`);\n }\n}\n","type CollectionByKey = Record;\n\ntype OrderDirection =\n 'asc'\n | 'desc';\n\ninterface OrderCallback {\n (member: T): any;\n}\n\nexport function buildCollectionByKey(collection: T[], key: keyof T) {\n return collection.reduce((byKey: CollectionByKey, member: T) => {\n byKey[member[key]] = member;\n\n return byKey;\n }, {});\n}\n\nexport function mapValues(\n byKey: CollectionByKey,\n callback: (member: M, key: string, index: number, originalByKey: CollectionByKey) => R,\n): CollectionByKey {\n return Object.keys(byKey).reduce((newByKey: CollectionByKey, key, index) => {\n newByKey[key] = callback(byKey[key], key, index, byKey);\n return newByKey;\n }, {});\n}\n\nexport function pick(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n result[key] = object[key];\n return result;\n }, {} as Pick);\n}\n\nexport function pickTruthy(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n if (object[key]) {\n result[key] = object[key];\n }\n\n return result;\n }, {} as Pick);\n}\n\nexport function omit(object: T, keys: K[]) {\n const stringKeys = new Set(keys.map(String));\n const savedKeys = Object.keys(object)\n .filter((key) => !stringKeys.has(key)) as Array>;\n\n return pick(object, savedKeys);\n}\n\nexport function orderBy(\n collection: T[],\n orderRule: (keyof T) | OrderCallback | ((keyof T) | OrderCallback)[],\n mode: OrderDirection | [OrderDirection, OrderDirection] = 'asc',\n): T[] {\n function compareValues(a: T, b: T, currentOrderRule: (keyof T) | OrderCallback, isAsc: boolean) {\n const aValue = (typeof currentOrderRule === 'function' ? currentOrderRule(a) : a[currentOrderRule]) || 0;\n const bValue = (typeof currentOrderRule === 'function' ? currentOrderRule(b) : b[currentOrderRule]) || 0;\n\n return isAsc ? aValue - bValue : bValue - aValue;\n }\n\n if (Array.isArray(orderRule)) {\n const [mode1, mode2] = Array.isArray(mode) ? mode : [mode, mode];\n const [orderRule1, orderRule2] = orderRule;\n const isAsc1 = mode1 === 'asc';\n const isAsc2 = mode2 === 'asc';\n\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule1, isAsc1) || compareValues(a, b, orderRule2, isAsc2);\n });\n }\n\n const isAsc = mode === 'asc';\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule, isAsc);\n });\n}\n\nexport function flatten(array: any[]) {\n return array.reduce((result, member) => {\n if (Array.isArray(member)) {\n return result.concat(member);\n } else {\n result.push(member);\n return result;\n }\n }, []);\n}\n\nexport function unique(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function compact(array: T[]) {\n return array.filter(Boolean);\n}\n\nexport function areSortedArraysEqual(array1: any[], array2: any[]) {\n if (array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((item, i) => item === array2[i]);\n}\n\nexport function areSortedArraysIntersecting(array1: any[], array2: any[]) {\n return array1[0] <= array2[array2.length - 1] && array1[array1.length - 1] >= array2[0];\n}\n\nexport function findIntersectionWithSet(array: T[], set: Set): T[] {\n return array.filter((a) => set.has(a));\n}\n\nexport function split(array: any[], chunkSize: number) {\n const result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nexport function cloneDeep(value: T): T {\n if (typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(cloneDeep) as typeof value;\n }\n\n return Object.keys(value).reduce((acc, key) => {\n acc[key as keyof T] = cloneDeep(value[key as keyof T]);\n return acc;\n }, {} as T);\n}\n\nexport function findLast(array: Array, predicate: (value: T, index: number, obj: T[]) => boolean): T | undefined {\n let cursor = array.length;\n\n while (cursor--) {\n if (predicate(array[cursor], cursor, array)) {\n return array[cursor];\n }\n }\n\n return undefined;\n}\n","import { getGlobal } from '../lib/teact/teactn';\n\nimport { ApiLangPack, ApiLangString } from '../api/types';\nimport { LangCode, TimeFormat } from '../types';\n\nimport {\n DEFAULT_LANG_CODE, DEFAULT_LANG_PACK, LANG_CACHE_NAME, LANG_PACKS,\n} from '../config';\nimport * as cacheApi from './cacheApi';\nimport { callApi } from '../api/gramjs';\nimport { createCallbackManager } from './callbacks';\nimport { formatInteger } from './textFormat';\n\ninterface LangFn {\n (key: string, value?: any, format?: 'i'): any;\n\n isRtl?: boolean;\n code?: LangCode;\n timeFormat?: TimeFormat;\n}\n\nconst SUBSTITUTION_REGEX = /%\\d?\\$?[sdf@]/g;\nconst PLURAL_OPTIONS = ['value', 'zeroValue', 'oneValue', 'twoValue', 'fewValue', 'manyValue', 'otherValue'] as const;\nconst PLURAL_RULES = {\n /* eslint-disable max-len */\n en: (n: number) => (n !== 1 ? 6 : 2),\n ar: (n: number) => (n === 0 ? 1 : n === 1 ? 2 : n === 2 ? 3 : n % 100 >= 3 && n % 100 <= 10 ? 4 : n % 100 >= 11 ? 5 : 6),\n ca: (n: number) => (n !== 1 ? 6 : 2),\n de: (n: number) => (n !== 1 ? 6 : 2),\n es: (n: number) => (n !== 1 ? 6 : 2),\n fa: (n: number) => (n > 1 ? 6 : 2),\n fr: (n: number) => (n > 1 ? 6 : 2),\n id: () => 0,\n it: (n: number) => (n !== 1 ? 6 : 2),\n ko: () => 0,\n ms: () => 0,\n nl: (n: number) => (n !== 1 ? 6 : 2),\n pl: (n: number) => (n === 1 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n pt_BR: (n: number) => (n > 1 ? 6 : 2),\n ru: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n tr: (n: number) => (n > 1 ? 6 : 2),\n uk: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n uz: (n: number) => (n > 1 ? 6 : 2),\n /* eslint-enable max-len */\n};\n\nconst cache = new Map();\n\nlet langPack: ApiLangPack | undefined;\nlet fallbackLangPack: ApiLangPack | undefined;\n\nconst {\n addCallback,\n removeCallback,\n runCallbacks,\n} = createCallbackManager();\n\nexport { addCallback, removeCallback };\n\nlet currentLangCode: string | undefined;\nlet currentTimeFormat: TimeFormat | undefined;\n\nexport const getTranslation: LangFn = (key: string, value?: any, format?: 'i') => {\n if (value !== undefined) {\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n const cached = cache.get(`${key}_${cacheValue}_${format}`);\n if (cached) {\n return cached;\n }\n }\n\n if (!langPack && !fallbackLangPack) {\n return key;\n }\n\n const langString = (langPack?.[key]) || (fallbackLangPack?.[key]);\n if (!langString) {\n if (!fallbackLangPack) {\n void importFallbackLangPack();\n }\n\n return key;\n }\n\n return processTranslation(langString, key, value, format);\n};\n\nexport async function getTranslationForLangString(langCode: string, key: string) {\n let translateString: ApiLangString | undefined = await cacheApi.fetch(\n LANG_CACHE_NAME,\n `${DEFAULT_LANG_PACK}_${langCode}_${key}`,\n cacheApi.Type.Json,\n );\n\n if (!translateString) {\n translateString = await fetchRemoteString(DEFAULT_LANG_PACK, langCode, key);\n }\n\n return processTranslation(translateString, key);\n}\n\nexport async function setLanguage(langCode: LangCode, callback?: NoneToVoidFunction, withFallback = false) {\n if (langPack && langCode === currentLangCode) {\n if (callback) {\n callback();\n }\n\n return;\n }\n\n let newLangPack = await cacheApi.fetch(LANG_CACHE_NAME, langCode, cacheApi.Type.Json);\n if (!newLangPack) {\n if (withFallback) {\n await importFallbackLangPack();\n }\n\n newLangPack = await fetchRemote(langCode);\n if (!newLangPack) {\n return;\n }\n }\n\n cache.clear();\n\n currentLangCode = langCode;\n langPack = newLangPack;\n document.documentElement.lang = langCode;\n\n const { languages, timeFormat } = getGlobal().settings.byKey;\n const langInfo = languages?.find((l) => l.langCode === langCode);\n getTranslation.isRtl = Boolean(langInfo?.rtl);\n getTranslation.code = langCode;\n getTranslation.timeFormat = timeFormat;\n\n if (callback) {\n callback();\n }\n\n runCallbacks();\n}\n\nexport function setTimeFormat(timeFormat: TimeFormat) {\n if (timeFormat && timeFormat === currentTimeFormat) {\n return;\n }\n\n currentTimeFormat = timeFormat;\n getTranslation.timeFormat = timeFormat;\n\n runCallbacks();\n}\n\nasync function importFallbackLangPack() {\n if (fallbackLangPack) {\n return;\n }\n\n fallbackLangPack = (await import('./fallbackLangPack')).default;\n runCallbacks();\n}\n\nasync function fetchRemote(langCode: string): Promise {\n const remote = await callApi('fetchLangPack', { sourceLangPacks: LANG_PACKS, langCode });\n if (remote) {\n await cacheApi.save(LANG_CACHE_NAME, langCode, remote.langPack);\n return remote.langPack;\n }\n\n return undefined;\n}\n\nasync function fetchRemoteString(\n remoteLangPack: typeof LANG_PACKS[number], langCode: string, key: string,\n): Promise {\n const remote = await callApi('fetchLangStrings', {\n langPack: remoteLangPack,\n langCode,\n keys: [key],\n });\n\n if (remote?.length) {\n await cacheApi.save(LANG_CACHE_NAME, `${remoteLangPack}_${langCode}_${key}`, remote[0]);\n\n return remote[0];\n }\n\n return undefined;\n}\n\nfunction getPluralOption(amount: number) {\n const langCode = currentLangCode || DEFAULT_LANG_CODE;\n const optionIndex = PLURAL_RULES[langCode as keyof typeof PLURAL_RULES]\n ? PLURAL_RULES[langCode as keyof typeof PLURAL_RULES](amount)\n : 0;\n\n return PLURAL_OPTIONS[optionIndex];\n}\n\nfunction processTemplate(template: string, value: any) {\n value = Array.isArray(value) ? value : [value];\n const translationSlices = template.split(SUBSTITUTION_REGEX);\n const initialValue = translationSlices.shift();\n\n return translationSlices.reduce((result, str, index) => {\n return `${result}${String(value[index] || '')}${str}`;\n }, initialValue || '');\n}\n\nfunction processTranslation(langString: ApiLangString | undefined, key: string, value?: any, format?: 'i') {\n const template = langString ? langString[typeof value === 'number' ? getPluralOption(value) : 'value'] : undefined;\n if (!template || !template.trim()) {\n const parts = key.split('.');\n\n return parts[parts.length - 1];\n }\n\n if (value !== undefined) {\n const formattedValue = format === 'i' ? formatInteger(value) : value;\n const result = processTemplate(template, formattedValue);\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n cache.set(`${key}_${cacheValue}_${format}`, result);\n return result;\n }\n\n return template;\n}\n","const SAMPLE_RATE = 48000;\nconst BIT_DEPTH = 16;\n\nexport async function oggToWav(opusData: Blob): Promise {\n const arrayBuffer = await new Response(opusData).arrayBuffer();\n\n return new Promise((resolve) => {\n const typedArray = new Uint8Array(arrayBuffer);\n\n let decoderWorker: Worker | undefined = new Worker(\n new URL('opus-recorder/dist/decoderWorker.min.js', import.meta.url),\n );\n let wavWorker: Worker | undefined = new Worker(new URL('opus-recorder/dist/waveWorker.min.js', import.meta.url));\n\n decoderWorker.onmessage = (e) => {\n // eslint-disable-next-line no-null/no-null\n if (e.data === null) {\n // `null` means decoder is finished\n wavWorker!.postMessage({ command: 'done' });\n } else {\n // `e.data` contains decoded buffers as float32 values\n wavWorker!.postMessage(\n {\n command: 'encode',\n buffers: e.data,\n },\n e.data.map(({ buffer }: Float32Array) => buffer),\n );\n }\n };\n\n wavWorker.onmessage = (e) => {\n if (e.data.message === 'page') {\n resolve(new Blob([e.data.page], { type: 'audio/wav' }));\n\n decoderWorker!.terminate();\n decoderWorker = undefined;\n wavWorker!.terminate();\n wavWorker = undefined;\n }\n };\n\n wavWorker.postMessage({\n command: 'init',\n wavBitDepth: BIT_DEPTH,\n wavSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'init',\n decoderSampleRate: SAMPLE_RATE,\n outputBufferSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'decode',\n pages: typedArray,\n }, [typedArray.buffer]);\n });\n}\n","import {\n ApiMediaFormat,\n ApiOnProgress,\n ApiParsedMedia,\n ApiPreparedMedia,\n} from '../api/types';\n\nimport {\n DEBUG, MEDIA_CACHE_DISABLED, MEDIA_CACHE_NAME, MEDIA_CACHE_NAME_AVATARS,\n} from '../config';\nimport { callApi, cancelApiProgress } from '../api/gramjs';\nimport * as cacheApi from './cacheApi';\nimport { fetchBlob } from './files';\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, isWebpSupported } from './environment';\nimport { oggToWav } from './oggToWav';\nimport { webpToPng } from './webpToPng';\n\nconst asCacheApiType = {\n [ApiMediaFormat.BlobUrl]: cacheApi.Type.Blob,\n [ApiMediaFormat.Lottie]: cacheApi.Type.Blob,\n [ApiMediaFormat.Progressive]: undefined,\n [ApiMediaFormat.Stream]: undefined,\n};\n\nconst PROGRESSIVE_URL_PREFIX = './progressive/';\n\nconst memoryCache = new Map();\nconst fetchPromises = new Map>();\nconst progressCallbacks = new Map>();\nconst cancellableCallbacks = new Map();\n\nexport function fetch(\n url: string,\n mediaFormat: T,\n isHtmlAllowed = false,\n onProgress?: ApiOnProgress,\n callbackUniqueId?: string,\n): Promise {\n if (mediaFormat === ApiMediaFormat.Progressive) {\n return (\n IS_PROGRESSIVE_SUPPORTED\n ? getProgressive(url)\n : fetch(url, ApiMediaFormat.BlobUrl, isHtmlAllowed, onProgress, callbackUniqueId)\n ) as Promise;\n }\n\n if (!fetchPromises.has(url)) {\n const promise = fetchFromCacheOrRemote(url, mediaFormat, isHtmlAllowed)\n .catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err);\n }\n\n return undefined;\n })\n .finally(() => {\n fetchPromises.delete(url);\n progressCallbacks.delete(url);\n cancellableCallbacks.delete(url);\n });\n\n fetchPromises.set(url, promise);\n }\n\n if (onProgress && callbackUniqueId) {\n let activeCallbacks = progressCallbacks.get(url);\n if (!activeCallbacks) {\n activeCallbacks = new Map();\n progressCallbacks.set(url, activeCallbacks);\n }\n activeCallbacks.set(callbackUniqueId, onProgress);\n }\n\n return fetchPromises.get(url) as Promise;\n}\n\nexport function getFromMemory(url: string) {\n return memoryCache.get(url) as ApiPreparedMedia;\n}\n\nexport function cancelProgress(progressCallback: ApiOnProgress) {\n progressCallbacks.forEach((map, url) => {\n map.forEach((callback) => {\n if (callback === progressCallback) {\n const parentCallback = cancellableCallbacks.get(url);\n if (!parentCallback) return;\n\n cancelApiProgress(parentCallback);\n cancellableCallbacks.delete(url);\n progressCallbacks.delete(url);\n }\n });\n });\n}\n\nexport function removeCallback(url: string, callbackUniqueId: string) {\n const callbacks = progressCallbacks.get(url);\n if (!callbacks) return;\n callbacks.delete(callbackUniqueId);\n}\n\nfunction getProgressive(url: string) {\n const progressiveUrl = `${PROGRESSIVE_URL_PREFIX}${url}`;\n\n memoryCache.set(url, progressiveUrl);\n\n return Promise.resolve(progressiveUrl);\n}\n\nasync function fetchFromCacheOrRemote(\n url: string, mediaFormat: ApiMediaFormat, isHtmlAllowed: boolean,\n) {\n if (!MEDIA_CACHE_DISABLED) {\n const cacheName = url.startsWith('avatar') ? MEDIA_CACHE_NAME_AVATARS : MEDIA_CACHE_NAME;\n const cached = await cacheApi.fetch(cacheName, url, asCacheApiType[mediaFormat]!, isHtmlAllowed);\n\n if (cached) {\n let media = cached;\n\n if (cached.type === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n media = await oggToWav(media);\n }\n\n if (cached.type === 'image/webp' && !isWebpSupported() && media) {\n const mediaPng = await webpToPng(url, media);\n if (mediaPng) {\n media = mediaPng;\n }\n }\n\n const prepared = prepareMedia(media);\n\n memoryCache.set(url, prepared);\n\n return prepared;\n }\n }\n\n if (mediaFormat === ApiMediaFormat.Stream) {\n const mediaSource = new MediaSource();\n const streamUrl = URL.createObjectURL(mediaSource);\n let isOpen = false;\n\n mediaSource.addEventListener('sourceopen', () => {\n if (isOpen) {\n return;\n }\n isOpen = true;\n\n const sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');\n\n const onProgress = makeOnProgress(url, mediaSource, sourceBuffer);\n cancellableCallbacks.set(url, onProgress);\n\n void callApi('downloadMedia', { url, mediaFormat }, onProgress);\n });\n\n memoryCache.set(url, streamUrl);\n return streamUrl;\n }\n\n const onProgress = makeOnProgress(url);\n cancellableCallbacks.set(url, onProgress);\n\n const remote = await callApi('downloadMedia', { url, mediaFormat, isHtmlAllowed }, onProgress);\n if (!remote) {\n throw new Error(`Failed to fetch media ${url}`);\n }\n\n let { prepared, mimeType } = remote;\n\n if (mimeType === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await oggToWav(blob);\n prepared = prepareMedia(media);\n mimeType = media.type;\n }\n\n if (mimeType === 'image/webp' && !isWebpSupported()) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await webpToPng(url, blob);\n if (media) {\n prepared = prepareMedia(media);\n }\n }\n\n memoryCache.set(url, prepared);\n\n return prepared;\n}\n\nfunction makeOnProgress(url: string, mediaSource?: MediaSource, sourceBuffer?: SourceBuffer) {\n const onProgress: ApiOnProgress = (progress: number, arrayBuffer: ArrayBuffer) => {\n progressCallbacks.get(url)?.forEach((callback) => {\n callback(progress);\n if (callback.isCanceled) onProgress.isCanceled = true;\n });\n\n if (progress === 1) {\n mediaSource?.endOfStream();\n }\n\n if (!arrayBuffer) {\n return;\n }\n\n sourceBuffer?.appendBuffer(arrayBuffer);\n };\n\n return onProgress;\n}\n\nfunction prepareMedia(mediaData: Exclude): ApiPreparedMedia {\n if (mediaData instanceof Blob) {\n return URL.createObjectURL(mediaData);\n }\n\n return mediaData;\n}\n\nif (IS_PROGRESSIVE_SUPPORTED) {\n navigator.serviceWorker.addEventListener('message', async (e) => {\n const { type, messageId, params } = e.data as {\n type: string;\n messageId: string;\n params: { url: string; start: number; end: number };\n };\n\n if (type !== 'requestPart') {\n return;\n }\n\n const result = await callApi('downloadMedia', { mediaFormat: ApiMediaFormat.Progressive, ...params });\n if (!result) {\n return;\n }\n\n const { arrayBuffer, mimeType, fullSize } = result;\n\n navigator.serviceWorker.controller!.postMessage({\n type: 'partResponse',\n messageId,\n result: {\n arrayBuffer,\n mimeType,\n fullSize,\n },\n }, [arrayBuffer!]);\n });\n}\n","export const MEMO_EMPTY_ARRAY = [];\n","import { DEBUG } from '../config';\nimport { createCallbackManager } from './callbacks';\n\nexport enum Bundles {\n Auth,\n Main,\n Extra,\n Calls,\n}\n\ninterface ImportedBundles {\n [Bundles.Auth]: typeof import('../bundles/auth');\n [Bundles.Main]: typeof import('../bundles/main');\n [Bundles.Extra]: typeof import('../bundles/extra');\n [Bundles.Calls]: typeof import('../bundles/calls');\n}\n\ntype BundlePromises = {\n [K in keyof ImportedBundles]: Promise\n};\n\nexport type BundleModules = keyof ImportedBundles[B];\n\nconst LOAD_PROMISES: Partial = {};\nconst MEMORY_CACHE: Partial = {};\n\nconst { addCallback, runCallbacks } = createCallbackManager();\n\nexport async function loadModule>(bundleName: B, moduleName: M) {\n if (!LOAD_PROMISES[bundleName]) {\n switch (bundleName) {\n case Bundles.Auth:\n LOAD_PROMISES[Bundles.Auth] = import('../bundles/auth');\n break;\n case Bundles.Main:\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD MAIN BUNDLE');\n }\n\n LOAD_PROMISES[Bundles.Main] = import('../bundles/main');\n break;\n case Bundles.Extra:\n LOAD_PROMISES[Bundles.Extra] = import('../bundles/extra');\n break;\n case Bundles.Calls:\n LOAD_PROMISES[Bundles.Calls] = import('../bundles/calls');\n break;\n }\n\n (LOAD_PROMISES[bundleName] as Promise).then(runCallbacks);\n }\n\n const bundle = (await LOAD_PROMISES[bundleName]) as unknown as ImportedBundles[B];\n\n if (!MEMORY_CACHE[bundleName]) {\n MEMORY_CACHE[bundleName] = bundle;\n }\n\n return getModuleFromMemory(bundleName, moduleName);\n}\n\nexport function getModuleFromMemory>(bundleName: B, moduleName: M) {\n const bundle = MEMORY_CACHE[bundleName] as ImportedBundles[B];\n\n if (!bundle) {\n return undefined;\n }\n\n return bundle[moduleName];\n}\n\nexport const addLoadListener = addCallback;\n","import { callApi } from '../api/gramjs';\nimport {\n ApiChat, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../api/types';\nimport { renderActionMessageText } from '../components/common/helpers/renderActionMessageText';\nimport { DEBUG, IS_TEST } from '../config';\nimport { getDispatch, getGlobal, setGlobal } from '../lib/teact/teactn';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getMessageAction,\n getMessageSenderName,\n getMessageSummaryText,\n getPrivateChatUserId,\n isActionMessage,\n isChatChannel,\n selectIsChatMuted, selectShouldShowMessagePreview,\n} from '../modules/helpers';\nimport { getTranslation } from './langProvider';\nimport { addNotifyExceptions, replaceSettings } from '../modules/reducers';\nimport {\n selectChatMessage, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../modules/selectors';\nimport { IS_SERVICE_WORKER_SUPPORTED } from './environment';\nimport * as mediaLoader from './mediaLoader';\nimport { debounce } from './schedulers';\n\nfunction getDeviceToken(subscription: PushSubscription) {\n const data = subscription.toJSON();\n return JSON.stringify({\n endpoint: data.endpoint,\n keys: data.keys,\n });\n}\n\nfunction checkIfPushSupported() {\n if (!IS_SERVICE_WORKER_SUPPORTED) return false;\n if (!('showNotification' in ServiceWorkerRegistration.prototype)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push notifications aren\\'t supported.');\n }\n return false;\n }\n\n // Check the current Notification permission.\n // If its denied, it's a permanent block until the\n // user changes the permission\n if (Notification.permission === 'denied') {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n\n // Check if push messaging is supported\n if (!('PushManager' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push messaging isn\\'t supported.');\n }\n return false;\n }\n return true;\n}\n\nfunction checkIfNotificationsSupported() {\n // Let's check if the browser supports notifications\n if (!('Notification' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] This browser does not support desktop notification');\n }\n return false;\n }\n\n if (Notification.permission === 'denied' as NotificationPermission) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n return true;\n}\n\nconst expirationTime = 12 * 60 * 60 * 1000; // 12 hours\n// Notification id is removed from soundPlayed cache after 3 seconds\nconst soundPlayedDelay = 3 * 1000;\nconst soundPlayedIds = new Set();\n\nexport async function playNotifySound(id?: string, volume?: number) {\n if (id !== undefined && soundPlayedIds.has(id)) return;\n const { notificationSoundVolume } = selectNotifySettings(getGlobal());\n const currentVolume = volume ? volume / 10 : notificationSoundVolume / 10;\n if (currentVolume === 0) return;\n\n const audio = new Audio('./notification.mp3');\n audio.volume = currentVolume;\n audio.setAttribute('mozaudiochannel', 'notification');\n if (id !== undefined) {\n audio.addEventListener('ended', () => {\n soundPlayedIds.add(id);\n }, { once: true });\n\n setTimeout(() => {\n soundPlayedIds.delete(id);\n }, soundPlayedDelay);\n }\n\n try {\n await audio.play();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Unable to play notification sound');\n }\n }\n}\n\nexport const playNotifySoundDebounced = debounce(playNotifySound, 1000, true, false);\n\nfunction checkIfShouldResubscribe(subscription: PushSubscription | null) {\n const global = getGlobal();\n if (!global.push || !subscription) return true;\n if (getDeviceToken(subscription) !== global.push.deviceToken) return true;\n return Date.now() - global.push.subscribedAt > expirationTime;\n}\n\nasync function requestPermission() {\n if (!('Notification' in window)) return;\n if (!['granted', 'denied'].includes(Notification.permission)) {\n await Notification.requestPermission();\n }\n}\n\nasync function unsubscribeFromPush(subscription: PushSubscription | null) {\n const global = getGlobal();\n const dispatch = getDispatch();\n if (subscription) {\n try {\n const deviceToken = getDeviceToken(subscription);\n await callApi('unregisterDevice', deviceToken);\n await subscription.unsubscribe();\n dispatch.deleteDeviceToken();\n return;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to unsubscribe from push.', error);\n }\n }\n }\n if (global.push) {\n await callApi('unregisterDevice', global.push.deviceToken);\n dispatch.deleteDeviceToken();\n }\n}\n\nexport async function unsubscribe() {\n if (!checkIfPushSupported()) return;\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n const subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n await unsubscribeFromPush(subscription);\n}\n\n// Indicates if notification settings are loaded from the api\nlet areSettingsLoaded = false;\n\n// Load notification settings from the api\nasync function loadNotificationSettings() {\n if (areSettingsLoaded) return selectNotifySettings(getGlobal());\n const [resultSettings, resultExceptions] = await Promise.all([\n callApi('fetchNotificationSettings', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n callApi('fetchNotificationExceptions', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n ]);\n if (!resultSettings) return selectNotifySettings(getGlobal());\n\n let global = replaceSettings(getGlobal(), resultSettings);\n if (resultExceptions) {\n global = addNotifyExceptions(global, resultExceptions);\n }\n setGlobal(global);\n areSettingsLoaded = true;\n return selectNotifySettings(global);\n}\n\nexport async function subscribe() {\n if (!checkIfPushSupported()) {\n // Ask for notification permissions only if service worker notifications are not supported\n // As pushManager.subscribe automatically triggers permission popup\n await requestPermission();\n return;\n }\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n let subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n if (!checkIfShouldResubscribe(subscription)) return;\n await unsubscribeFromPush(subscription);\n try {\n subscription = await serviceWorkerRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n });\n const deviceToken = getDeviceToken(subscription);\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Received push subscription: ', deviceToken);\n }\n await callApi('registerDevice', deviceToken);\n getDispatch()\n .setDeviceToken(deviceToken);\n } catch (error: any) {\n if (Notification.permission === 'denied' as NotificationPermission) {\n // The user denied the notification permission which\n // means we failed to subscribe and the user will need\n // to manually change the notification permission to\n // subscribe to push messages\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n } else if (DEBUG) {\n // A problem occurred with the subscription, this can\n // often be down to an issue or lack of the gcm_sender_id\n // and / or gcm_user_visible_only\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to subscribe to push.', error);\n\n // Request permissions and fall back to local notifications\n // if pushManager.subscribe was aborted due to invalid VAPID key.\n if (error.code === DOMException.ABORT_ERR) {\n await requestPermission();\n }\n }\n }\n}\n\nfunction checkIfShouldNotify(chat: ApiChat) {\n if (!areSettingsLoaded) return false;\n const global = getGlobal();\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n if (isMuted || chat.isNotJoined || !chat.isListed) {\n return false;\n }\n\n return !document.hasFocus();\n}\n\nfunction getNotificationContent(chat: ApiChat, message: ApiMessage) {\n const global = getGlobal();\n const {\n senderId,\n replyToMessageId,\n } = message;\n\n const messageSender = senderId ? selectUser(global, senderId) : undefined;\n const messageAction = getMessageAction(message as ApiMessage);\n const actionTargetMessage = messageAction && replyToMessageId\n ? selectChatMessage(global, chat.id, replyToMessageId)\n : undefined;\n const {\n targetUserIds: actionTargetUserIds,\n targetChatId: actionTargetChatId,\n } = messageAction || {};\n\n const actionTargetUsers = actionTargetUserIds\n ? actionTargetUserIds.map((userId) => selectUser(global, userId))\n .filter(Boolean as any)\n : undefined;\n const privateChatUserId = getPrivateChatUserId(chat);\n const privateChatUser = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n\n let body: string;\n if (selectShouldShowMessagePreview(chat, selectNotifySettings(global), selectNotifyExceptions(global))) {\n if (isActionMessage(message)) {\n const isChat = chat && (isChatChannel(chat) || message.senderId === message.chatId);\n\n body = renderActionMessageText(\n getTranslation,\n message,\n !isChat ? messageSender : undefined,\n isChat ? chat : undefined,\n actionTargetUsers,\n actionTargetMessage,\n actionTargetChatId,\n { asPlainText: true },\n ) as string;\n } else {\n const senderName = getMessageSenderName(getTranslation, chat.id, messageSender);\n const summary = getMessageSummaryText(getTranslation, message);\n\n body = senderName ? `${senderName}: ${summary}` : summary;\n }\n } else {\n body = 'New message';\n }\n\n return {\n title: getChatTitle(getTranslation, chat, privateChatUser),\n body,\n };\n}\n\nasync function getAvatar(chat: ApiChat) {\n const imageHash = getChatAvatarHash(chat);\n if (!imageHash) return undefined;\n let mediaData = mediaLoader.getFromMemory(imageHash);\n if (!mediaData) {\n await mediaLoader.fetch(imageHash, ApiMediaFormat.BlobUrl);\n mediaData = mediaLoader.getFromMemory(imageHash);\n }\n return mediaData;\n}\n\nexport async function notifyAboutNewMessage({\n chat,\n message,\n}: { chat: ApiChat; message: Partial }) {\n const { hasWebNotifications } = await loadNotificationSettings();\n if (!checkIfShouldNotify(chat)) return;\n const areNotificationsSupported = checkIfNotificationsSupported();\n if (!hasWebNotifications || !areNotificationsSupported) {\n // only play sound if web notifications are disabled\n playNotifySoundDebounced(String(message.id) || chat.id);\n return;\n }\n if (!areNotificationsSupported) return;\n if (!message.id) return;\n\n const {\n title,\n body,\n } = getNotificationContent(chat, message as ApiMessage);\n\n const icon = await getAvatar(chat);\n\n if (checkIfPushSupported()) {\n if (navigator.serviceWorker?.controller) {\n // notify service worker about new message notification\n navigator.serviceWorker.controller.postMessage({\n type: 'newMessageNotification',\n payload: {\n title,\n body,\n icon,\n chatId: chat.id,\n messageId: message.id,\n },\n });\n }\n } else {\n const dispatch = getDispatch();\n const options: NotificationOptions = {\n body,\n icon,\n badge: icon,\n tag: String(message.id),\n };\n\n if ('vibrate' in navigator) {\n options.vibrate = [200, 100, 200];\n }\n\n const notification = new Notification(title, options);\n\n notification.onclick = () => {\n notification.close();\n dispatch.focusMessage({\n chatId: chat.id,\n messageId: message.id,\n });\n if (window.focus) {\n window.focus();\n }\n };\n\n // Play sound when notification is displayed\n notification.onshow = () => {\n playNotifySoundDebounced(String(message.id) || chat.id);\n };\n }\n}\n\nexport function closeMessageNotifications(payload: { chatId: string; lastReadInboxMessageId?: number }) {\n if (IS_TEST || !navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'closeMessageNotifications',\n payload,\n });\n}\n\n// Notify service worker that client is fully loaded\nexport function notifyClientReady() {\n if (!navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'clientReady',\n });\n}\n","const PERMANENT_VERSION_KEY = 'kz_version';\nconst AVAILABLE_VERSIONS = ['Z', 'K'] as const;\nconst DEFAULT_VERSION = 'Z';\n\nexport function setPermanentWebVersion(version: typeof AVAILABLE_VERSIONS[number]) {\n localStorage.setItem(PERMANENT_VERSION_KEY, JSON.stringify(version));\n}\n\nexport function ensurePermanentWebVersion() {\n if (!hasPermanentWebVersion()) {\n setPermanentWebVersion(DEFAULT_VERSION);\n }\n}\n\nfunction hasPermanentWebVersion() {\n const json = localStorage.getItem(PERMANENT_VERSION_KEY);\n if (!json) {\n return false;\n }\n\n try {\n const version = JSON.parse(json);\n return AVAILABLE_VERSIONS.includes(version);\n } catch (err) {\n return false;\n }\n}\n","import { ApiCountryCode } from '../api/types';\nimport { flatten } from './iteratees';\n\nconst PATTERN_PLACEHOLDER = 'X';\nconst DEFAULT_PATTERN = 'XXX XXX XXX XXX';\n\nexport function getCountryCodesByIso(phoneCodeList: ApiCountryCode[], iso: string) {\n return phoneCodeList.filter((country) => country.iso2 === iso);\n}\n\nexport function getCountryFromPhoneNumber(phoneCodeList: ApiCountryCode[], input = '') {\n let phoneNumber = input.replace(/[^\\d+]+/g, '');\n if (phoneNumber.startsWith('+')) {\n phoneNumber = phoneNumber.substr(1);\n }\n\n const possibleCountries = phoneCodeList\n .filter((country) => phoneNumber.startsWith(country.countryCode));\n const codesWithPrefix: { code: string; country: ApiCountryCode }[] = flatten(possibleCountries\n .map((country) => (country.prefixes || ['']).map((prefix) => {\n return {\n code: `${country.countryCode}${prefix}`,\n country,\n };\n })));\n\n const bestMatches = codesWithPrefix\n .filter(({ code }) => phoneNumber.startsWith(code))\n .sort((a, b) => a.code.length - b.code.length);\n\n return bestMatches[bestMatches.length - 1]?.country;\n}\n\nexport function formatPhoneNumber(input: string, country?: ApiCountryCode) {\n let phoneNumber = input.replace(/[^\\d]+/g, '');\n if (country) {\n phoneNumber = phoneNumber.substr(country.countryCode.length);\n } else if (input.startsWith('+')) {\n return input;\n }\n const pattern = getBestPattern(phoneNumber, country?.patterns);\n\n const result: string[] = []; // Result character array\n let j = 0; // Position inside pattern\n for (let i = 0; i < phoneNumber.length; i++) {\n while (pattern[j] !== PATTERN_PLACEHOLDER && j < pattern.length) {\n result.push(pattern[j]);\n if (pattern[j] === phoneNumber[i]) { // If pattern contains digits, move input position too\n i++;\n if (i === phoneNumber.length) break; // But don't overdo it, or it will insert full pattern unexpectedly\n }\n j++;\n }\n\n result.push(phoneNumber[i]); // For placeholder characters, setting current input digit\n j++;\n }\n\n return result.join('');\n}\n\nfunction getBestPattern(numberWithoutCode: string, patterns?: string[]) {\n if (!patterns || patterns.length === 0) return DEFAULT_PATTERN;\n if (patterns.length === 1) return patterns[0];\n\n const defaultPattern = patterns.find((pattern) => pattern.startsWith(PATTERN_PLACEHOLDER)) || DEFAULT_PATTERN;\n\n const bestMatches = patterns.filter((pattern) => {\n const stripped = pattern.replace(/[^\\dX]+/g, '');\n if (stripped.startsWith(PATTERN_PLACEHOLDER)) return false; // Don't consider default number format here\n for (let i = 0; i < numberWithoutCode.length; i++) {\n if (i > stripped.length - 1 || (stripped[i] !== PATTERN_PLACEHOLDER && stripped[i] !== numberWithoutCode[i])) {\n return false;\n }\n }\n return true;\n });\n\n // Playing it safe: if not sure, use default for that region\n return bestMatches.length === 1 ? bestMatches[0] : defaultPattern;\n}\n\nexport function formatPhoneNumberWithCode(phoneCodeList: ApiCountryCode[], phoneNumber: string) {\n const numberWithPlus = phoneNumber.startsWith('+') ? phoneNumber : `+${phoneNumber}`;\n const country = getCountryFromPhoneNumber(phoneCodeList, numberWithPlus);\n if (!country) {\n return numberWithPlus;\n }\n return `+${country.countryCode} ${formatPhoneNumber(numberWithPlus, country)}`;\n}\n","import { MessageList, MessageListType } from '../global/types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { LOCATION_HASH } from '../hooks/useHistoryBack';\n\nexport function createMessageHash(messageList: MessageList) {\n const typeOrThreadId = messageList.type !== 'thread' ? (\n `_${messageList.type}`\n ) : messageList.threadId !== -1 ? (\n `_${messageList.threadId}`\n ) : '';\n\n return `${messageList.chatId}${typeOrThreadId}`;\n}\n\nexport function parseLocationHash() {\n if (!LOCATION_HASH) return undefined;\n\n const [chatId, typeOrThreadId] = LOCATION_HASH.replace(/^#/, '').split('_');\n if (!chatId?.match(/^-?\\d+$/)) return undefined;\n\n const isType = ['thread', 'pinned', 'scheduled'].includes(typeOrThreadId);\n\n return {\n chatId,\n type: Boolean(typeOrThreadId) && isType ? (typeOrThreadId as MessageListType) : 'thread',\n threadId: Boolean(typeOrThreadId) && !isType ? Number(typeOrThreadId) : MAIN_THREAD_ID,\n };\n}\n","type Scheduler =\n typeof requestAnimationFrame\n | typeof onTickEnd\n | typeof runNow;\n\nexport function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true,\n) {\n let waitingTimeout: number | undefined;\n\n return (...args: Parameters) => {\n if (waitingTimeout) {\n clearTimeout(waitingTimeout);\n waitingTimeout = undefined;\n } else if (shouldRunFirst) {\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n waitingTimeout = self.setTimeout(() => {\n if (shouldRunLast) {\n fn(...args);\n }\n\n waitingTimeout = undefined;\n }, ms);\n };\n}\n\nexport function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n) {\n let interval: number | undefined;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if (!interval) {\n if (shouldRunFirst) {\n isPending = false;\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n interval = self.setInterval(() => {\n if (!isPending) {\n // eslint-disable-next-line no-restricted-globals\n self.clearInterval(interval!);\n interval = undefined;\n return;\n }\n\n isPending = false;\n fn(...args);\n }, ms);\n }\n };\n}\n\nexport function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n\nexport function throttleWithPrimaryRaf(fn: F) {\n return throttleWith(fastRafPrimary, fn);\n}\n\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function throttleWith(schedulerFn: Scheduler, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n fn(...args);\n });\n }\n };\n}\n\nexport function onIdle(cb: NoneToVoidFunction, timeout?: number) {\n // eslint-disable-next-line no-restricted-globals\n if (self.requestIdleCallback) {\n // eslint-disable-next-line no-restricted-globals\n self.requestIdleCallback(cb, { timeout });\n } else {\n onTickEnd(cb);\n }\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n}\n\nexport const pause = (ms: number) => new Promise((resolve) => {\n setTimeout(() => resolve(), ms);\n});\n\nexport function rafPromise() {\n return new Promise((resolve) => {\n fastRaf(resolve);\n });\n}\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nlet fastRafPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\n// May result in an immediate execution if called from another `requestAnimationFrame` callback\nexport function fastRaf(callback: NoneToVoidFunction, isPrimary = false) {\n if (!fastRafCallbacks) {\n fastRafCallbacks = isPrimary ? [] : [callback];\n fastRafPrimaryCallbacks = isPrimary ? [callback] : [];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n const currentPrimaryCallbacks = fastRafPrimaryCallbacks!;\n fastRafCallbacks = undefined;\n fastRafPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n fastRafPrimaryCallbacks!.push(callback);\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nexport function fastRafPrimary(callback: NoneToVoidFunction) {\n fastRaf(callback, true);\n}\n\nlet onTickEndCallbacks: NoneToVoidFunction[] | undefined;\nlet onTickEndPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onTickEnd(callback: NoneToVoidFunction, isPrimary = false) {\n if (!onTickEndCallbacks) {\n onTickEndCallbacks = isPrimary ? [] : [callback];\n onTickEndPrimaryCallbacks = isPrimary ? [callback] : [];\n\n Promise.resolve().then(() => {\n const currentCallbacks = onTickEndCallbacks!;\n const currentPrimaryCallbacks = onTickEndPrimaryCallbacks!;\n onTickEndCallbacks = undefined;\n onTickEndPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n onTickEndPrimaryCallbacks!.push(callback);\n } else {\n onTickEndCallbacks.push(callback);\n }\n}\n\nexport function onTickEndPrimary(callback: NoneToVoidFunction) {\n onTickEnd(callback, true);\n}\n\nlet beforeUnloadCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onBeforeUnload(callback: NoneToVoidFunction, isLast = false) {\n if (!beforeUnloadCallbacks) {\n beforeUnloadCallbacks = [];\n // eslint-disable-next-line no-restricted-globals\n self.addEventListener('beforeunload', () => {\n beforeUnloadCallbacks!.forEach((cb) => cb());\n });\n }\n\n if (isLast) {\n beforeUnloadCallbacks.push(callback);\n } else {\n beforeUnloadCallbacks.unshift(callback);\n }\n\n return () => {\n beforeUnloadCallbacks = beforeUnloadCallbacks!.filter((cb) => cb !== callback);\n };\n}\n","let RE_NOT_LETTER: RegExp;\n\ntry {\n RE_NOT_LETTER = new RegExp('[^\\\\p{L}\\\\p{M}]+', 'ui');\n} catch (e) {\n // Support for older versions of firefox\n RE_NOT_LETTER = new RegExp('[^\\\\wа-яё]+', 'i');\n}\n\nexport default function searchWords(haystack: string, needle: string | string[]) {\n if (!haystack || !needle) {\n return false;\n }\n\n const needleWords = typeof needle === 'string' ? needle.toLowerCase().split(RE_NOT_LETTER) : needle;\n const haystackLower = haystack.toLowerCase();\n\n // @optimization\n if (needleWords.length === 1 && !haystackLower.includes(needleWords[0])) {\n return false;\n }\n\n let haystackWords: string[];\n\n return needleWords.every((needleWord) => {\n if (!haystackLower.includes(needleWord)) {\n return false;\n }\n\n if (!haystackWords) {\n haystackWords = haystackLower.split(RE_NOT_LETTER);\n }\n\n return haystackWords.some((haystackWord) => haystackWord.startsWith(needleWord));\n });\n}\n\nexport function prepareSearchWordsForNeedle(needle: string) {\n const needleWords = needle.toLowerCase().split(RE_NOT_LETTER);\n\n return (haystack: string) => searchWords(haystack, needleWords);\n}\n","export const getServerTime = (serverTimeOffset: number) => {\n return Math.floor(Date.now() / 1000) + serverTimeOffset;\n};\n","import safariFix from 'safari-14-idb-fix';\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const dbp = safariFix().then(() => {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n return promisifyRequest(request);\n });\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import * as idb from 'idb-keyval';\n\nimport { ApiSessionData } from '../api/types';\n\nimport { DEBUG, LEGACY_SESSION_KEY, SESSION_USER_KEY } from '../config';\nimport * as cacheApi from './cacheApi';\n\nconst DC_IDS = [1, 2, 3, 4, 5];\n\nexport function hasStoredSession(withLegacy = false) {\n if (withLegacy && localStorage.getItem(LEGACY_SESSION_KEY)) {\n return true;\n }\n\n const userAuthJson = localStorage.getItem(SESSION_USER_KEY);\n if (!userAuthJson) return false;\n\n try {\n const userAuth = JSON.parse(userAuthJson);\n return Boolean(userAuth && userAuth.id && userAuth.dcID);\n } catch (err) {\n // Do nothing.\n return false;\n }\n}\n\nexport function storeSession(sessionData: ApiSessionData, currentUserId?: string) {\n const { mainDcId, keys, hashes } = sessionData;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify({ dcID: mainDcId, id: currentUserId }));\n localStorage.setItem('dc', String(mainDcId));\n Object.keys(keys).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_auth_key`, JSON.stringify(keys[dcId]));\n });\n\n if (hashes) {\n Object.keys(hashes).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_hash`, JSON.stringify(hashes[dcId]));\n });\n }\n}\n\nexport function clearStoredSession() {\n [\n SESSION_USER_KEY,\n 'dc',\n ...DC_IDS.map((dcId) => `dc${dcId}_auth_key`),\n ...DC_IDS.map((dcId) => `dc${dcId}_hash`),\n ].forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n\nexport function loadStoredSession(): ApiSessionData | undefined {\n if (!hasStoredSession()) {\n return undefined;\n }\n\n const userAuth = JSON.parse(localStorage.getItem(SESSION_USER_KEY)!);\n const mainDcId = Number(userAuth.dcID);\n const keys: Record = {};\n const hashes: Record = {};\n\n DC_IDS.forEach((dcId) => {\n try {\n const key = localStorage.getItem(`dc${dcId}_auth_key`);\n if (key) {\n keys[dcId] = JSON.parse(key);\n }\n\n const hash = localStorage.getItem(`dc${dcId}_hash`);\n if (hash) {\n hashes[dcId] = JSON.parse(hash);\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load stored session', err);\n }\n // Do nothing.\n }\n });\n\n if (!Object.keys(keys).length) return undefined;\n\n return {\n mainDcId,\n keys,\n hashes,\n };\n}\n\nexport async function importLegacySession() {\n const sessionId = localStorage.getItem(LEGACY_SESSION_KEY);\n if (!sessionId) return;\n\n const sessionJson = await idb.get(`GramJs:${sessionId}`);\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData;\n storeSession(sessionData);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load legacy session', err);\n }\n // Do nothing.\n }\n}\n\n// Remove previously created IndexedDB and cache API sessions\nexport async function clearLegacySessions() {\n localStorage.removeItem(LEGACY_SESSION_KEY);\n\n const idbKeys = await idb.keys();\n\n await Promise.all>([\n cacheApi.clear('GramJs'),\n ...idbKeys\n .filter((k) => typeof k === 'string' && k.startsWith('GramJs:GramJs-session-'))\n .map((k) => idb.del(k)),\n ]);\n}\n\nexport function importTestSession() {\n const sessionJson = process.env.TEST_SESSION!;\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData & { userId: string };\n storeSession(sessionData, sessionData.userId);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load test session', err);\n }\n // Do nothing.\n }\n}\n","import { ISettings } from '../types';\n\nimport { animateSingle } from './animation';\nimport { fastRaf } from './schedulers';\n\nimport themeColors from '../styles/themes.json';\n\ntype RGBAColor = {\n r: number;\n g: number;\n b: number;\n a?: number;\n};\n\nlet isInitialized = false;\n\nconst HEX_COLOR_REGEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nconst DURATION_MS = 200;\nconst ENABLE_ANIMATION_DELAY_MS = 500;\nconst RGB_VARIABLES = new Set([\n '--color-primary-shade',\n '--color-text-secondary',\n]);\n\nconst lerp = (start: number, end: number, interpolationRatio: number) => {\n return (1 - interpolationRatio) * start + interpolationRatio * end;\n};\n\nconst colors = (Object.keys(themeColors) as Array).map((property) => ({\n property,\n colors: [hexToRgb(themeColors[property][0]), hexToRgb(themeColors[property][1])],\n}));\n\nconst switchTheme = (theme: ISettings['theme'], withAnimation: boolean) => {\n const isDarkTheme = theme === 'dark';\n const shouldAnimate = isInitialized && withAnimation;\n const startIndex = isDarkTheme ? 0 : 1;\n const endIndex = isDarkTheme ? 1 : 0;\n const startAt = Date.now();\n const themeColorTag = document.querySelector('meta[name=\"theme-color\"]');\n\n document.documentElement.classList.remove(`theme-${isDarkTheme ? 'light' : 'dark'}`);\n if (isInitialized) {\n document.documentElement.classList.add('no-animations');\n }\n document.documentElement.classList.add(`theme-${theme}`);\n if (themeColorTag) {\n themeColorTag.setAttribute('content', isDarkTheme ? '#212121' : '#fff');\n }\n\n setTimeout(() => {\n document.documentElement.classList.remove('no-animations');\n }, ENABLE_ANIMATION_DELAY_MS);\n\n isInitialized = true;\n\n if (shouldAnimate) {\n fastRaf(() => {\n animateSingle(() => {\n const t = Math.min((Date.now() - startAt) / DURATION_MS, 1);\n\n applyColorAnimationStep(startIndex, endIndex, transition(t));\n\n return t < 1;\n });\n });\n } else {\n applyColorAnimationStep(startIndex, endIndex);\n }\n};\n\nfunction transition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n\nfunction hexToRgb(hex: string): RGBAColor {\n const result = HEX_COLOR_REGEX.exec(hex)!;\n\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] !== undefined ? parseInt(result[4], 16) : undefined,\n };\n}\n\nfunction applyColorAnimationStep(startIndex: number, endIndex: number, interpolationRatio: number = 1) {\n colors.forEach(({ property, colors: propertyColors }) => {\n const r = Math.round(lerp(propertyColors[startIndex].r, propertyColors[endIndex].r, interpolationRatio));\n const g = Math.round(lerp(propertyColors[startIndex].g, propertyColors[endIndex].g, interpolationRatio));\n const b = Math.round(lerp(propertyColors[startIndex].b, propertyColors[endIndex].b, interpolationRatio));\n const a = propertyColors[startIndex].a !== undefined\n ? Math.round(lerp(propertyColors[startIndex].a!, propertyColors[endIndex].a!, interpolationRatio))\n : undefined;\n\n document.documentElement.style.setProperty(property, a !== undefined\n ? `rgba(${r},${g},${b},${a / 255})`\n : `rgb(${r},${g},${b})`);\n\n if (RGB_VARIABLES.has(property)) {\n document.documentElement.style.setProperty(`${property}-rgb`, `${r},${g},${b}`);\n }\n });\n}\n\nexport default switchTheme;\n","import EMOJI_REGEX from '../lib/twemojiRegex';\nimport { fixNonStandardEmoji } from './emoji';\n\nexport function formatInteger(value: number) {\n return String(value).replace(/\\d(?=(\\d{3})+$)/g, '$& ');\n}\n\nfunction formatFixedNumber(number: number) {\n const fixed = String(number.toFixed(1));\n if (fixed.substr(-2) === '.0') {\n return Math.round(number);\n }\n\n return number.toFixed(1).replace('.', ',');\n}\n\nexport function formatIntegerCompact(views: number) {\n if (views < 1e3) {\n return views;\n }\n\n if (views < 1e6) {\n return `${formatFixedNumber(views / 1e3)}K`;\n }\n\n return `${formatFixedNumber(views / 1e6)}M`;\n}\n\nexport function getFirstLetters(phrase: string, count = 2) {\n return phrase\n .replace(/[.,!@#$%^&*()_+=\\-`~[\\]/\\\\{}:\"|<>?]+/gi, '')\n .trim()\n .split(/\\s+/)\n .slice(0, count)\n .map((word: string) => {\n if (!word.length) return '';\n word = fixNonStandardEmoji(word);\n const emojis = word.match(EMOJI_REGEX);\n if (emojis && word.startsWith(emojis[0])) {\n return emojis[0];\n }\n return word.match(/./u)![0].toUpperCase();\n })\n .join('');\n}\n","export default function trimText(text: T, length?: number) {\n if (!text || !length || text.length <= length) {\n return text;\n }\n\n return `${text.substring(0, length)}...`;\n}\n","import { isWebpSupported } from './environment';\nimport { dataUriToBlob, blobToDataUri } from './files';\nimport { pause } from './schedulers';\n\nconst WORKER_INITIALIZATION_TIMEOUT = 2000;\n\nlet canvas: HTMLCanvasElement;\nlet worker: IWebpWorker;\n\nexport const EMPTY_IMAGE_DATA_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk'\n + 'YAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport async function webpToPng(url: string, blob: Blob): Promise {\n initWebpWorker();\n\n while (!worker.wasmReady) {\n await pause(WORKER_INITIALIZATION_TIMEOUT);\n }\n\n const { result, width, height } = await getDecodePromise(url, blob);\n if (!width || !height) {\n return undefined;\n }\n\n return createPng({ result, width, height });\n}\n\nexport async function webpToPngBase64(key: string, dataUri: string): Promise {\n if (isWebpSupported() || dataUri.substr(0, 15) !== 'data:image/webp') {\n return dataUri;\n }\n\n initWebpWorker();\n\n const pngBlob = await webpToPng(key, dataUriToBlob(dataUri));\n\n if (!pngBlob) {\n throw new Error(`Can't convert webp to png. Url: ${dataUri}`);\n }\n\n return blobToDataUri(pngBlob);\n}\n\nfunction initWebpWorker() {\n if (!worker) {\n worker = new Worker(new URL('../lib/webp/webp_wasm.worker.js', import.meta.url)) as IWebpWorker;\n worker.wasmReady = false;\n worker.onmessage = handleLibWebpMessage;\n }\n}\n\nfunction createPng({ result, width, height }: TEncodedImage): Promise {\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n\n return new Promise((resolve) => {\n const img = new ImageData(result, width, height);\n\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d')!;\n ctx.putImageData(img, 0, 0);\n\n canvas.toBlob((blob) => {\n resolve(blob ?? undefined);\n }, 'image/png', 1);\n });\n}\n\nfunction handleLibWebpMessage(e: MessageEvent) {\n const { id } = e.data;\n switch (e.data.type) {\n case 'initialized': {\n worker.wasmReady = true;\n break;\n }\n\n case 'result': {\n if (worker.requests.has(id)) {\n const resolve = worker.requests.get(id)!;\n\n worker.requests.delete(id);\n resolve(e.data!);\n }\n break;\n }\n }\n}\n\nfunction getDecodePromise(url: string, blob: Blob): Promise {\n return new Promise((resolve) => {\n if (!worker.requests) {\n worker.requests = new Map();\n }\n\n worker.requests.set(url, resolve);\n worker.postMessage({ id: url, blob });\n });\n}\n","import { APP_VERSION, DEBUG } from '../config';\nimport { getGlobal } from '../lib/teact/teactn';\nimport { hasStoredSession } from './sessions';\n\nconst WEBSYNC_URLS = [\n 't.me',\n 'telegram.me',\n].map((domain) => `//${domain}/_websync_?`);\nconst WEBSYNC_VERSION = `${APP_VERSION} Z`;\nconst WEBSYNC_KEY = 'tgme_sync';\nconst WEBSYNC_TIMEOUT = 86400;\n\nconst getTs = () => {\n return Math.floor(Number(new Date()) / 1000);\n};\n\nconst saveSync = (authed: boolean) => {\n const ts = getTs();\n localStorage.setItem(WEBSYNC_KEY, JSON.stringify({\n canRedirect: authed,\n ts,\n }));\n};\n\nlet lastTimeout: NodeJS.Timeout | undefined;\n\nexport const forceWebsync = (authed: boolean) => {\n const currentTs = getTs();\n\n const { canRedirect, ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n if (canRedirect !== authed || ts + WEBSYNC_TIMEOUT <= currentTs) {\n return Promise.all(WEBSYNC_URLS.map((url) => {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n\n const removeElement = () => Boolean(document.body.removeChild(script));\n\n script.src = url + new URLSearchParams({\n authed: Number(authed).toString(),\n version: WEBSYNC_VERSION,\n });\n\n document.body.appendChild(script);\n\n script.onload = () => {\n saveSync(authed);\n removeElement();\n if (lastTimeout) {\n clearTimeout(lastTimeout);\n lastTimeout = undefined;\n }\n startWebsync();\n resolve();\n };\n\n script.onerror = () => {\n removeElement();\n reject();\n };\n });\n }));\n } else {\n return Promise.resolve();\n }\n};\n\nexport function startWebsync() {\n if (DEBUG) {\n return;\n }\n\n if (lastTimeout !== undefined) return;\n const currentTs = getTs();\n\n const { ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n const timeout = WEBSYNC_TIMEOUT - (currentTs - ts);\n\n lastTimeout = setTimeout(() => {\n const { authState } = getGlobal();\n\n const authed = authState === 'authorizationStateReady' || hasStoredSession(true);\n forceWebsync(authed);\n }, Math.max(0, timeout * 1000));\n}\n\nexport function clearWebsync() {\n localStorage.removeItem(WEBSYNC_KEY);\n}\n","import { throttle } from './schedulers';\nimport {\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n MOBILE_SCREEN_MAX_WIDTH,\n} from '../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT } from './environment';\n\ntype IDimensions = {\n width: number;\n height: number;\n};\n\nconst IS_LANDSCAPE = IS_SINGLE_COLUMN_LAYOUT && isLandscape();\n\nconst initialHeight = window.innerHeight;\nlet currentWindowSize = updateSizes();\nlet isRefreshDisabled = false;\n\nfunction disableRefresh() {\n isRefreshDisabled = true;\n}\n\nfunction enableRefresh() {\n isRefreshDisabled = false;\n}\n\nconst handleResize = throttle(() => {\n currentWindowSize = updateSizes();\n\n if (!isRefreshDisabled && (\n isMobileScreen() !== IS_SINGLE_COLUMN_LAYOUT\n || (IS_SINGLE_COLUMN_LAYOUT && IS_LANDSCAPE !== isLandscape())\n )) {\n window.location.reload();\n }\n}, 250, true);\n\nwindow.addEventListener('orientationchange', handleResize);\nif (IS_IOS) {\n window.visualViewport.addEventListener('resize', handleResize);\n} else {\n window.addEventListener('resize', handleResize);\n}\n\nexport function updateSizes(): IDimensions {\n let height: number;\n if (IS_IOS) {\n height = window.visualViewport.height + window.visualViewport.pageTop;\n } else {\n height = window.innerHeight;\n }\n const vh = height * 0.01;\n\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nfunction isMobileScreen() {\n return currentWindowSize.width <= MOBILE_SCREEN_MAX_WIDTH || (\n currentWindowSize.width <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH\n && currentWindowSize.height <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n );\n}\n\nfunction isLandscape() {\n if (IS_IOS) {\n return window.matchMedia('(orientation: landscape)').matches;\n }\n\n // eslint-disable-next-line max-len\n // Source: https://web.archive.org/web/20160509220835/http://blog.abouthalf.com/development/orientation-media-query-challenges-in-android-browsers/\n // Feature is marked as deprecated now, but it is still supported\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/device-aspect-ratio#browser_compatibility\n return window.matchMedia('screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)').matches;\n}\n\nconst windowSize = {\n get: () => currentWindowSize,\n getIsKeyboardVisible: () => initialHeight > currentWindowSize.height,\n disableRefresh,\n enableRefresh,\n};\n\nexport default windowSize;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"47\":\"6587cf7cd58625267285\",\"99\":\"4acb17d13e1a5b87b131\",\"126\":\"6c11ab2d3cdbd7baf2dd\",\"133\":\"7825bcf69db105db21d4\",\"161\":\"4fade15904bfe66b4f71\",\"302\":\"1d8fb1e8ea7f52fb7236\",\"354\":\"b73ee1ca5b4052509fe6\",\"472\":\"65a66b6c1fb1be8db986\",\"501\":\"3c8f4d2d9fb141fac95f\",\"524\":\"5bc50ddd32084536b8b8\",\"536\":\"ab2a889dae72ec88f68c\",\"538\":\"6bd37e70917b1b6ff08e\",\"626\":\"dd96f6cb20b270561325\",\"640\":\"c329e19eedaf84c239cd\",\"745\":\"cc53f6e29328dbd2c9ff\",\"830\":\"cf4ac714b9e5af5f91a7\",\"915\":\"af01666698d37aea6ce6\",\"941\":\"367e239e47c825643813\",\"993\":\"5065d2f591c9fc4f83b4\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"47\":\"6587cf7cd58625267285\",\"126\":\"6c11ab2d3cdbd7baf2dd\",\"133\":\"7825bcf69db105db21d4\",\"472\":\"65a66b6c1fb1be8db986\",\"538\":\"6bd37e70917b1b6ff08e\",\"640\":\"c329e19eedaf84c239cd\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { DEBUG, DEBUG_MORE } from '../config';\nimport { getDispatch } from '../lib/teact/teactn';\nimport { IS_ANDROID, IS_IOS, IS_SERVICE_WORKER_SUPPORTED } from './environment';\nimport { notifyClientReady, playNotifySoundDebounced } from './notifications';\n\ntype WorkerAction = {\n type: string;\n payload: Record;\n};\n\nfunction handleWorkerMessage(e: MessageEvent) {\n const action: WorkerAction = e.data;\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log('[SW] Message from worker', action);\n }\n if (!action.type) return;\n const dispatch = getDispatch();\n switch (action.type) {\n case 'focusMessage':\n if (dispatch.focusMessage) {\n dispatch.focusMessage(action.payload);\n }\n break;\n case 'playNotificationSound':\n playNotifySoundDebounced(action.payload.id);\n break;\n }\n}\n\nfunction subscribeToWorker() {\n navigator.serviceWorker.removeEventListener('message', handleWorkerMessage);\n navigator.serviceWorker.addEventListener('message', handleWorkerMessage);\n // Notify web worker that client is ready to receive messages\n notifyClientReady();\n}\n\nif (IS_SERVICE_WORKER_SUPPORTED) {\n window.addEventListener('load', async () => {\n try {\n if (!navigator.serviceWorker.controller) {\n const registrations = await navigator.serviceWorker.getRegistrations();\n if (registrations.length) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Hard reload detected, re-enabling Service Worker');\n }\n await Promise.all(registrations.map(r => r.unregister()));\n }\n }\n\n await navigator.serviceWorker.register(new URL('../serviceWorker.ts', import.meta.url));\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker registered');\n }\n\n await navigator.serviceWorker.ready;\n\n if (navigator.serviceWorker.controller) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker ready');\n }\n subscribeToWorker();\n } else {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker not available');\n }\n\n if (!IS_IOS && !IS_ANDROID) {\n getDispatch().showDialog({ data: { message: 'SERVICE_WORKER_DISABLED', hasErrorKey: true } });\n }\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker registration failed: ', err);\n }\n }\n });\n window.addEventListener('focus', async () => {\n await navigator.serviceWorker.ready;\n subscribeToWorker();\n });\n}\n","import { GlobalState } from './types';\nimport { NewChatMembersProgress } from '../types';\n\nimport {\n ANIMATION_LEVEL_DEFAULT, DARK_THEME_PATTERN_COLOR, DEFAULT_MESSAGE_TEXT_SIZE_PX, DEFAULT_PATTERN_COLOR,\n DEFAULT_PLAYBACK_RATE,\n DEFAULT_VOLUME,\n IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX, MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX,\n} from '../config';\nimport { IS_IOS, IS_MAC_OS } from '../util/environment';\n\nexport const INITIAL_STATE: GlobalState = {\n isLeftColumnShown: true,\n isChatInfoShown: false,\n newChatMembersProgress: NewChatMembersProgress.Closed,\n uiReadyState: 0,\n serverTimeOffset: 0,\n\n authRememberMe: true,\n countryList: {\n phoneCodes: [],\n general: [],\n },\n\n blocked: {\n ids: [],\n totalCount: 0,\n },\n\n users: {\n byId: {},\n statusesById: {},\n },\n\n chats: {\n listIds: {},\n isFullyLoaded: {},\n orderedPinnedIds: {},\n totalCount: {},\n byId: {},\n },\n\n messages: {\n byChatId: {},\n messageLists: [],\n sponsoredByChatId: {},\n },\n\n groupCalls: {\n byId: {},\n },\n\n scheduledMessages: {\n byChatId: {},\n },\n\n chatFolders: {\n byId: {},\n activeChatFolder: 0,\n },\n\n fileUploads: {\n byMessageLocalId: {},\n },\n\n recentEmojis: ['grinning', 'kissing_heart', 'christmas_tree', 'brain', 'trophy'],\n\n stickers: {\n setsById: {},\n added: {},\n recent: {\n stickers: [],\n },\n favorite: {\n stickers: [],\n },\n greeting: {\n stickers: [],\n },\n featured: {\n setIds: [],\n },\n search: {},\n forEmoji: {},\n },\n\n emojiKeywords: {},\n\n gifs: {\n saved: {},\n search: {},\n },\n\n inlineBots: {\n isLoading: false,\n byUsername: {},\n },\n\n globalSearch: {},\n\n userSearch: {},\n\n localTextSearch: {\n byChatThreadKey: {},\n },\n\n localMediaSearch: {\n byChatId: {},\n },\n\n management: {\n byChatId: {},\n },\n\n topPeers: {},\n\n topInlineBots: {},\n\n mediaViewer: {},\n\n audioPlayer: {\n volume: DEFAULT_VOLUME,\n playbackRate: DEFAULT_PLAYBACK_RATE,\n isMuted: false,\n },\n\n forwardMessages: {},\n\n pollResults: {},\n\n payment: {},\n\n notifications: [],\n\n dialogs: [],\n\n activeSessions: [],\n\n settings: {\n byKey: {\n theme: 'light',\n shouldUseSystemTheme: true,\n messageTextSize: IS_IOS\n ? IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX\n : (IS_MAC_OS ? MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX : DEFAULT_MESSAGE_TEXT_SIZE_PX),\n animationLevel: ANIMATION_LEVEL_DEFAULT,\n messageSendKeyCombo: 'enter',\n canAutoLoadPhotoFromContacts: true,\n canAutoLoadPhotoInPrivateChats: true,\n canAutoLoadPhotoInGroups: true,\n canAutoLoadPhotoInChannels: true,\n canAutoLoadVideoFromContacts: true,\n canAutoLoadVideoInPrivateChats: true,\n canAutoLoadVideoInGroups: true,\n canAutoLoadVideoInChannels: true,\n canAutoLoadFileFromContacts: false,\n canAutoLoadFileInPrivateChats: false,\n canAutoLoadFileInGroups: false,\n canAutoLoadFileInChannels: false,\n autoLoadFileMaxSizeMb: 10,\n hasWebNotifications: true,\n hasPushNotifications: true,\n notificationSoundVolume: 5,\n canAutoPlayGifs: true,\n canAutoPlayVideos: true,\n shouldSuggestStickers: true,\n shouldLoopStickers: true,\n language: 'en',\n timeFormat: '24h',\n wasTimeFormatSetManually: false,\n isConnectionStatusMinimized: true,\n },\n themes: {\n light: {\n isBlurred: true,\n patternColor: DEFAULT_PATTERN_COLOR,\n },\n dark: {\n isBlurred: true,\n patternColor: DARK_THEME_PATTERN_COLOR,\n },\n },\n privacy: {},\n notifyExceptions: {},\n },\n\n twoFaSettings: {},\n activeReactions: {},\n\n shouldShowContextMenuHint: true,\n\n activeDownloads: {\n byChatId: {},\n },\n\n serviceNotifications: [],\n};\n","import {\n addCallback, addReducer, getGlobal, removeCallback,\n} from '../lib/teact/teactn';\n\nimport { GlobalState } from './types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { onBeforeUnload, onIdle, throttle } from '../util/schedulers';\nimport {\n DEBUG,\n GLOBAL_STATE_CACHE_DISABLED,\n GLOBAL_STATE_CACHE_KEY,\n GLOBAL_STATE_CACHE_USER_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n DEFAULT_VOLUME,\n DEFAULT_PLAYBACK_RATE,\n ALL_FOLDER_ID,\n ARCHIVED_FOLDER_ID,\n} from '../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../util/environment';\nimport { isHeavyAnimating } from '../hooks/useHeavyAnimationCheck';\nimport { pick, unique } from '../util/iteratees';\nimport {\n selectCurrentChat,\n selectCurrentMessageList,\n selectVisibleUsers,\n} from '../modules/selectors';\nimport { hasStoredSession } from '../util/sessions';\nimport { INITIAL_STATE } from './initial';\nimport { parseLocationHash } from '../util/routing';\nimport { isUserId } from '../modules/helpers';\nimport { getOrderedIds } from '../util/folderManager';\n\nconst UPDATE_THROTTLE = 5000;\n\nconst updateCacheThrottled = throttle(() => onIdle(updateCache), UPDATE_THROTTLE, false);\n\nlet isCaching = false;\nlet unsubscribeFromBeforeUnload: NoneToVoidFunction | undefined;\n\nexport function initCache() {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return;\n }\n\n addReducer('saveSession', () => {\n if (isCaching) {\n return;\n }\n\n setupCaching();\n });\n\n addReducer('reset', () => {\n localStorage.removeItem(GLOBAL_STATE_CACHE_KEY);\n\n if (!isCaching) {\n return;\n }\n\n clearCaching();\n });\n}\n\nexport function loadCache(initialState: GlobalState): GlobalState | undefined {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return undefined;\n }\n\n if (hasStoredSession(true)) {\n setupCaching();\n\n return readCache(initialState);\n } else {\n clearCaching();\n\n return undefined;\n }\n}\n\nfunction setupCaching() {\n isCaching = true;\n unsubscribeFromBeforeUnload = onBeforeUnload(updateCache, true);\n window.addEventListener('blur', updateCache);\n addCallback(updateCacheThrottled);\n}\n\nfunction clearCaching() {\n isCaching = false;\n removeCallback(updateCacheThrottled);\n window.removeEventListener('blur', updateCache);\n if (unsubscribeFromBeforeUnload) {\n unsubscribeFromBeforeUnload();\n }\n}\n\nfunction readCache(initialState: GlobalState): GlobalState {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.time('global-state-cache-read');\n }\n\n const json = localStorage.getItem(GLOBAL_STATE_CACHE_KEY);\n const cached = json ? JSON.parse(json) as GlobalState : undefined;\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.timeEnd('global-state-cache-read');\n }\n\n if (cached) {\n migrateCache(cached, initialState);\n }\n\n const newState = {\n ...initialState,\n ...cached,\n };\n\n const parsedMessageList = !IS_SINGLE_COLUMN_LAYOUT ? parseLocationHash() : undefined;\n\n return {\n ...newState,\n messages: {\n ...newState.messages,\n messageLists: parsedMessageList ? [parsedMessageList] : [],\n },\n };\n}\n\nfunction migrateCache(cached: GlobalState, initialState: GlobalState) {\n // Migrate from legacy setting names\n if ('shouldAutoDownloadMediaFromContacts' in cached.settings.byKey) {\n const {\n shouldAutoDownloadMediaFromContacts,\n shouldAutoDownloadMediaInPrivateChats,\n shouldAutoDownloadMediaInGroups,\n shouldAutoDownloadMediaInChannels,\n shouldAutoPlayVideos,\n shouldAutoPlayGifs,\n ...rest\n } = cached.settings.byKey;\n\n cached.settings.byKey = {\n ...rest,\n canAutoLoadPhotoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadVideoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadPhotoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadVideoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadPhotoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadVideoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadPhotoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoLoadVideoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoPlayVideos: shouldAutoPlayVideos,\n canAutoPlayGifs: shouldAutoPlayGifs,\n };\n }\n\n // Pre-fill settings with defaults\n cached.settings.byKey = {\n ...initialState.settings.byKey,\n ...cached.settings.byKey,\n };\n\n cached.settings.themes = {\n ...initialState.settings.themes,\n ...cached.settings.themes,\n };\n\n cached.chatFolders = {\n ...initialState.chatFolders,\n ...cached.chatFolders,\n };\n\n if (!cached.stickers.greeting) {\n cached.stickers.greeting = initialState.stickers.greeting;\n }\n\n if (!cached.activeDownloads) {\n cached.activeDownloads = {\n byChatId: {},\n };\n }\n\n if (!cached.serviceNotifications) {\n cached.serviceNotifications = [];\n }\n\n if (cached.audioPlayer.volume === undefined) {\n cached.audioPlayer.volume = DEFAULT_VOLUME;\n }\n\n if (cached.audioPlayer.playbackRate === undefined) {\n cached.audioPlayer.playbackRate = DEFAULT_PLAYBACK_RATE;\n }\n\n if (!cached.groupCalls) {\n cached.groupCalls = initialState.groupCalls;\n }\n\n if (!cached.users.statusesById) {\n cached.users.statusesById = {};\n }\n\n if (!cached.messages.sponsoredByChatId) {\n cached.messages.sponsoredByChatId = {};\n }\n\n if (!cached.activeReactions) {\n cached.activeReactions = {};\n }\n}\n\nfunction updateCache() {\n if (!isCaching || isHeavyAnimating()) {\n return;\n }\n\n const global = getGlobal();\n\n if (global.isLoggingOut) {\n return;\n }\n\n const reducedGlobal: GlobalState = {\n ...INITIAL_STATE,\n ...pick(global, [\n 'authState',\n 'authPhoneNumber',\n 'authRememberMe',\n 'authNearestCountry',\n 'currentUserId',\n 'contactList',\n 'topPeers',\n 'topInlineBots',\n 'recentEmojis',\n 'push',\n 'shouldShowContextMenuHint',\n 'leftColumnWidth',\n 'serviceNotifications',\n ]),\n audioPlayer: {\n volume: global.audioPlayer.volume,\n playbackRate: global.audioPlayer.playbackRate,\n isMuted: global.audioPlayer.isMuted,\n },\n isChatInfoShown: reduceShowChatInfo(global),\n users: reduceUsers(global),\n chats: reduceChats(global),\n messages: reduceMessages(global),\n globalSearch: {\n recentlyFoundChatIds: global.globalSearch.recentlyFoundChatIds,\n },\n settings: reduceSettings(global),\n chatFolders: reduceChatFolders(global),\n groupCalls: reduceGroupCalls(global),\n availableReactions: reduceAvailableReactions(global),\n };\n\n const json = JSON.stringify(reducedGlobal);\n localStorage.setItem(GLOBAL_STATE_CACHE_KEY, json);\n}\n\nfunction reduceShowChatInfo(global: GlobalState): boolean {\n return window.innerWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n ? global.isChatInfoShown\n : false;\n}\n\nfunction reduceUsers(global: GlobalState): GlobalState['users'] {\n const { users: { byId, statusesById }, currentUserId } = global;\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const visibleUserIds = selectVisibleUsers(global)?.map(({ id }) => id);\n\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChatId && isUserId(currentChatId) ? [currentChatId] : [],\n ...visibleUserIds || [],\n ...global.topPeers.userIds || [],\n ...getOrderedIds(ALL_FOLDER_ID)?.filter(isUserId) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID)?.filter(isUserId) || [],\n ...global.contactList?.userIds || [],\n ...global.globalSearch.recentlyFoundChatIds?.filter(isUserId) || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_USER_LIST_LIMIT);\n\n return {\n byId: pick(byId, idsToSave),\n statusesById: pick(statusesById, idsToSave),\n };\n}\n\nfunction reduceChats(global: GlobalState): GlobalState['chats'] {\n const { chats: { byId }, currentUserId } = global;\n const currentChat = selectCurrentChat(global);\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChat ? [currentChat.id] : [],\n ...getOrderedIds(ALL_FOLDER_ID) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID) || [],\n ...global.globalSearch.recentlyFoundChatIds || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT);\n\n return {\n ...global.chats,\n isFullyLoaded: {},\n byId: pick(global.chats.byId, idsToSave),\n };\n}\n\nfunction reduceMessages(global: GlobalState): GlobalState['messages'] {\n const { currentUserId } = global;\n const byChatId: GlobalState['messages']['byChatId'] = {};\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const chatIdsToSave = [\n ...currentChatId ? [currentChatId] : [],\n ...currentUserId ? [currentUserId] : [],\n ...getOrderedIds(ALL_FOLDER_ID)?.slice(0, GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT) || [],\n ];\n\n chatIdsToSave.forEach((chatId) => {\n const current = global.messages.byChatId[chatId];\n if (!current) {\n return;\n }\n\n const mainThread = current.threadsById[MAIN_THREAD_ID];\n if (!mainThread || !mainThread.viewportIds) {\n return;\n }\n\n byChatId[chatId] = {\n byId: pick(current.byId, mainThread.viewportIds),\n threadsById: {\n [MAIN_THREAD_ID]: mainThread,\n },\n };\n });\n\n return {\n byChatId,\n messageLists: [],\n sponsoredByChatId: {},\n };\n}\n\nfunction reduceSettings(global: GlobalState): GlobalState['settings'] {\n const { byKey, themes } = global.settings;\n\n return {\n byKey,\n themes,\n privacy: {},\n notifyExceptions: {},\n };\n}\n\nfunction reduceChatFolders(global: GlobalState): GlobalState['chatFolders'] {\n return {\n ...global.chatFolders,\n activeChatFolder: 0,\n };\n}\n\nfunction reduceGroupCalls(global: GlobalState): GlobalState['groupCalls'] {\n return {\n ...global.groupCalls,\n byId: {},\n activeGroupCallId: undefined,\n isGroupCallPanelHidden: undefined,\n isFallbackConfirmOpen: undefined,\n };\n}\n\nfunction reduceAvailableReactions(global: GlobalState): GlobalState['availableReactions'] {\n return global.availableReactions\n ?.map((r) => pick(r, ['reaction', 'staticIcon', 'title', 'isInactive']));\n}\n","import { addReducer } from '../lib/teact/teactn';\n\nimport { INITIAL_STATE } from './initial';\nimport { initCache, loadCache } from './cache';\nimport { cloneDeep } from '../util/iteratees';\n\ninitCache();\n\naddReducer('init', () => {\n const initial = cloneDeep(INITIAL_STATE);\n return loadCache(initial) || initial;\n});\n","const STORAGE_KEY = 'tt-active-tab';\nconst INTERVAL = 2000;\n\nconst tabKey = String(Date.now() + Math.random());\n\nlocalStorage.setItem(STORAGE_KEY, tabKey);\n\nlet callback: NoneToVoidFunction;\n\nconst interval = window.setInterval(() => {\n if (callback && localStorage.getItem(STORAGE_KEY) !== tabKey) {\n callback();\n clearInterval(interval);\n }\n}, INTERVAL);\n\nexport function addActiveTabChangeListener(_callback: NoneToVoidFunction) {\n callback = _callback;\n}\n","const SITE_FONTS = ['400 1em Roboto', '500 1em Roboto'];\n\nexport default function preloadFonts() {\n if ('fonts' in document) {\n return Promise.all(SITE_FONTS.map((font) => document.fonts.load(font)));\n }\n\n return undefined;\n}\n","import React, { FC, useEffect } from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMediaFormat } from '../../api/types';\nimport { GlobalState } from '../../global/types';\n\nimport { getChatAvatarHash } from '../../modules/helpers/chats'; // Direct import for better module splitting\nimport useFlag from '../../hooks/useFlag';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport { pause } from '../../util/schedulers';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport * as mediaLoader from '../../util/mediaLoader';\nimport { Bundles, loadModule } from '../../util/moduleLoader';\nimport buildClassName from '../../util/buildClassName';\n\nimport './UiLoader.scss';\n\nimport telegramLogoPath from '../../assets/telegram-logo.svg';\nimport reactionThumbsPath from '../../assets/reaction-thumbs.png';\nimport monkeyPath from '../../assets/monkey.svg';\nimport { selectIsRightColumnShown, selectTheme } from '../../modules/selectors';\n\ntype OwnProps = {\n page: 'main' | 'authCode' | 'authPassword' | 'authPhoneNumber' | 'authQrCode';\n children: any;\n};\n\ntype StateProps =\n Pick\n & {\n hasCustomBackground?: boolean;\n hasCustomBackgroundColor: boolean;\n isRightColumnShown?: boolean;\n leftColumnWidth?: number;\n };\n\nconst MAX_PRELOAD_DELAY = 700;\nconst SECOND_STATE_DELAY = 1000;\nconst AVATARS_TO_PRELOAD = 10;\n\nfunction preloadAvatars() {\n const { listIds, byId } = getGlobal().chats;\n if (!listIds.active) {\n return undefined;\n }\n\n return Promise.all(listIds.active.slice(0, AVATARS_TO_PRELOAD).map((chatId) => {\n const chat = byId[chatId];\n if (!chat) {\n return undefined;\n }\n\n const avatarHash = getChatAvatarHash(chat);\n if (!avatarHash) {\n return undefined;\n }\n\n return mediaLoader.fetch(avatarHash, ApiMediaFormat.BlobUrl);\n }));\n}\n\nconst preloadTasks = {\n main: () => Promise.all([\n loadModule(Bundles.Main, 'Main')\n .then(preloadFonts),\n preloadAvatars(),\n preloadImage(reactionThumbsPath),\n ]),\n authPhoneNumber: () => Promise.all([\n preloadFonts(),\n preloadImage(telegramLogoPath),\n ]),\n authCode: () => preloadImage(monkeyPath),\n authPassword: () => preloadImage(monkeyPath),\n authQrCode: preloadFonts,\n};\n\nconst UiLoader: FC = ({\n page,\n children,\n hasCustomBackground,\n hasCustomBackgroundColor,\n isRightColumnShown,\n shouldSkipHistoryAnimations,\n leftColumnWidth,\n}) => {\n const { setIsUiReady } = getDispatch();\n\n const [isReady, markReady] = useFlag();\n const {\n shouldRender: shouldRenderMask, transitionClassNames,\n } = useShowTransition(!isReady, undefined, true);\n\n useEffect(() => {\n let timeout: number | undefined;\n\n const safePreload = async () => {\n try {\n await preloadTasks[page]();\n } catch (err) {\n // Do nothing\n }\n };\n\n Promise.race([\n pause(MAX_PRELOAD_DELAY),\n safePreload(),\n ]).then(() => {\n markReady();\n setIsUiReady({ uiReadyState: 1 });\n\n timeout = window.setTimeout(() => {\n setIsUiReady({ uiReadyState: 2 });\n }, SECOND_STATE_DELAY);\n });\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n setIsUiReady({ uiReadyState: 0 });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n

\n {children}\n {shouldRenderMask && !shouldSkipHistoryAnimations && (\n
\n {page === 'main' ? (\n <>\n \n \n {isRightColumnShown &&
}\n \n ) : (\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, backgroundColor } = global.settings.themes[theme] || {};\n\n return {\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n uiReadyState: global.uiReadyState,\n hasCustomBackground: Boolean(background),\n hasCustomBackgroundColor: Boolean(backgroundColor),\n isRightColumnShown: selectIsRightColumnShown(global),\n leftColumnWidth: global.leftColumnWidth,\n };\n },\n)(UiLoader);\n","import * as langProvider from '../util/langProvider';\nimport { useState } from '../lib/teact/teact';\n\nconst useLangString = (langCode: string | undefined, key: string): string | undefined => {\n const [translation, setTranslation] = useState();\n\n if (langCode) {\n langProvider\n .getTranslationForLangString(langCode, key)\n .then(setTranslation);\n }\n\n return translation;\n};\n\nexport default useLangString;\n","import { LangCode } from '../../../types';\n\nexport function getSuggestedLanguage() {\n let suggestedLanguage = navigator.language;\n\n if (suggestedLanguage && suggestedLanguage !== 'pt-br') {\n suggestedLanguage = suggestedLanguage.substr(0, 2);\n }\n\n return suggestedLanguage as LangCode;\n}\n","import React, {\n FC, useState, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiCountryCode } from '../../api/types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport { isoToEmoji } from '../../util/emoji';\nimport useOnChange from '../../hooks/useOnChange';\n\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport Spinner from '../ui/Spinner';\n\nimport './CountryCodeInput.scss';\n\ntype StateProps = {\n phoneCodeList: ApiCountryCode[];\n};\n\ntype OwnProps = {\n id: string;\n value?: ApiCountryCode;\n isLoading?: boolean;\n onChange: (value: ApiCountryCode) => void;\n};\n\nconst MENU_HIDING_DURATION = 200 + ANIMATION_END_DELAY;\nconst SELECT_TIMEOUT = 50;\n\nconst CountryCodeInput: FC = ({\n id,\n value,\n isLoading,\n onChange,\n phoneCodeList,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [filter, setFilter] = useState();\n const [filteredList, setFilteredList] = useState([]);\n\n const updateFilter = useCallback((filterValue?: string) => {\n setFilter(filterValue);\n setFilteredList(getFilteredList(phoneCodeList, filterValue));\n }, [phoneCodeList]);\n\n useOnChange(([prevPhoneCodeList]) => {\n if (prevPhoneCodeList?.length === 0 && phoneCodeList.length > 0) {\n updateFilter(filter);\n }\n }, [phoneCodeList, updateFilter]);\n\n const handleChange = useCallback((country: ApiCountryCode) => {\n onChange(country);\n\n setTimeout(() => updateFilter(undefined), MENU_HIDING_DURATION);\n }, [onChange, updateFilter]);\n\n const handleInput = useCallback((e: React.FormEvent) => {\n updateFilter(e.currentTarget.value);\n }, [updateFilter]);\n\n const handleInputKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 8) {\n return;\n }\n\n const target = e.currentTarget;\n if (value && filter === undefined) {\n target.value = '';\n }\n\n updateFilter(target.value);\n }, [filter, updateFilter, value]);\n\n const CodeInput: FC<{ onTrigger: () => void; isOpen?: boolean }> = ({ onTrigger, isOpen }) => {\n const handleTrigger = () => {\n if (isOpen) {\n return;\n }\n\n setTimeout(() => {\n inputRef.current!.select();\n }, SELECT_TIMEOUT);\n\n onTrigger();\n\n const formEl = document.getElementById('auth-phone-number-form')!;\n formEl.scrollTo({ top: formEl.scrollHeight, behavior: 'smooth' });\n };\n\n const handleCodeInput = (e: React.FormEvent) => {\n handleInput(e);\n handleTrigger();\n };\n\n const inputValue = filter ?? (value?.name || value?.defaultName || '');\n\n return (\n
\n \n \n {isLoading ? (\n \n ) : (\n \n )}\n
\n );\n };\n\n return (\n \n {filteredList\n .map((country: ApiCountryCode) => (\n handleChange(country)}\n >\n {renderText(isoToEmoji(country.iso2), ['hq_emoji'])}\n {country.name || country.defaultName}\n {country.countryCode}\n \n ))}\n {!filteredList.length && (\n \n {lang('lng_country_none')}\n \n )}\n \n );\n};\n\nfunction getFilteredList(countryList: ApiCountryCode[], filter = ''): ApiCountryCode[] {\n if (!filter.length) {\n return countryList;\n }\n\n const searchWords = prepareSearchWordsForNeedle(filter);\n\n return countryList.filter((country) => (\n searchWords(country.defaultName) || (country.name && searchWords(country.name))\n ));\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { countryList: { phoneCodes: phoneCodeList } } = global;\n return {\n phoneCodeList,\n };\n },\n)(CountryCodeInput));\n","import { ChangeEvent } from 'react';\n\nimport monkeyPath from '../../assets/monkey.svg';\n\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\nimport { LangCode } from '../../types';\nimport { ApiCountryCode } from '../../api/types';\n\nimport { IS_SAFARI, IS_TOUCH_ENV } from '../../util/environment';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport { pick } from '../../util/iteratees';\nimport { formatPhoneNumber, getCountryCodesByIso, getCountryFromPhoneNumber } from '../../util/phoneNumber';\nimport { setLanguage } from '../../util/langProvider';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport useLangString from '../../hooks/useLangString';\nimport { getSuggestedLanguage } from './helpers/getSuggestedLanguage';\n\nimport Button from '../ui/Button';\nimport Checkbox from '../ui/Checkbox';\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport CountryCodeInput from './CountryCodeInput';\n\ntype StateProps = Pick & {\n language?: LangCode;\n phoneCodeList: ApiCountryCode[];\n};\n\nconst MIN_NUMBER_LENGTH = 7;\n\nlet isPreloadInitiated = false;\n\nconst AuthPhoneNumber: FC = ({\n connectionState,\n authState,\n authPhoneNumber,\n authIsLoading,\n authIsLoadingQrCode,\n authError,\n authRememberMe,\n authNearestCountry,\n phoneCodeList,\n language,\n}) => {\n const {\n setAuthPhoneNumber,\n setAuthRememberMe,\n loadNearestCountry,\n loadCountryList,\n clearAuthError,\n goToAuthQrCode,\n setSettingOption,\n } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const suggestedLanguage = getSuggestedLanguage();\n\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [country, setCountry] = useState();\n const [phoneNumber, setPhoneNumber] = useState();\n const [isTouched, setIsTouched] = useState(false);\n const [lastSelection, setLastSelection] = useState<[number, number] | undefined>();\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n const fullNumber = country ? `+${country.countryCode} ${phoneNumber || ''}` : phoneNumber;\n const canSubmit = fullNumber && fullNumber.replace(/[^\\d]+/g, '').length >= MIN_NUMBER_LENGTH;\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, [country]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && !authNearestCountry) {\n loadNearestCountry();\n }\n }, [connectionState, authNearestCountry, loadNearestCountry]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n loadCountryList({ langCode: language });\n }\n }, [connectionState, language, loadCountryList]);\n\n useEffect(() => {\n if (authNearestCountry && phoneCodeList && !country && !isTouched) {\n setCountry(getCountryCodesByIso(phoneCodeList, authNearestCountry)[0]);\n }\n }, [country, authNearestCountry, isTouched, phoneCodeList]);\n\n const parseFullNumber = useCallback((newFullNumber: string) => {\n if (!newFullNumber.length) {\n setPhoneNumber('');\n }\n\n const suggestedCountry = phoneCodeList && getCountryFromPhoneNumber(phoneCodeList, newFullNumber);\n\n // Any phone numbers should be allowed, in some cases ignoring formatting\n const selectedCountry = !country\n || (suggestedCountry && suggestedCountry.iso2 !== country.iso2)\n || (!suggestedCountry && newFullNumber.length)\n ? suggestedCountry\n : country;\n\n if (!country || !selectedCountry || (selectedCountry && selectedCountry.iso2 !== country.iso2)) {\n setCountry(selectedCountry);\n }\n setPhoneNumber(formatPhoneNumber(newFullNumber, selectedCountry));\n }, [phoneCodeList, country]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n useEffect(() => {\n if (phoneNumber === undefined && authPhoneNumber) {\n parseFullNumber(authPhoneNumber);\n }\n }, [authPhoneNumber, phoneNumber, parseFullNumber]);\n\n useLayoutEffect(() => {\n if (inputRef.current && lastSelection) {\n inputRef.current.setSelectionRange(...lastSelection);\n }\n }, [lastSelection]);\n\n const isJustPastedRef = useRef(false);\n const handlePaste = useCallback(() => {\n isJustPastedRef.current = true;\n requestAnimationFrame(() => {\n isJustPastedRef.current = false;\n });\n }, []);\n\n const handleCountryChange = useCallback((value: ApiCountryCode) => {\n setCountry(value);\n setPhoneNumber('');\n }, []);\n\n const handlePhoneNumberChange = useCallback((e: ChangeEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n // This is for further screens. We delay it until user input to speed up the initial loading.\n if (!isPreloadInitiated) {\n isPreloadInitiated = true;\n preloadFonts();\n void preloadImage(monkeyPath);\n }\n\n const { value, selectionStart, selectionEnd } = e.target;\n setLastSelection(\n selectionStart && selectionEnd && selectionEnd < value.length\n ? [selectionStart, selectionEnd]\n : undefined,\n );\n\n setIsTouched(true);\n\n const shouldFixSafariAutoComplete = (\n IS_SAFARI && country && fullNumber !== undefined\n && value.length - fullNumber.length > 1 && !isJustPastedRef.current\n );\n parseFullNumber(shouldFixSafariAutoComplete ? `${country!.countryCode} ${value}` : value);\n }, [authError, clearAuthError, country, fullNumber, parseFullNumber]);\n\n const handleKeepSessionChange = useCallback((e: ChangeEvent) => {\n setAuthRememberMe(e.target.checked);\n }, [setAuthRememberMe]);\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (authIsLoading) {\n return;\n }\n\n if (canSubmit) {\n setAuthPhoneNumber({ phoneNumber: fullNumber });\n }\n }\n\n const isAuthReady = authState === 'authorizationStateWaitPhoneNumber';\n\n return (\n
\n
\n
\n

Telegram

\n

{lang('StartText')}

\n
\n \n \n \n {canSubmit && (\n isAuthReady ? (\n \n ) : (\n \n )\n )}\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: { byKey: { language } },\n countryList: { phoneCodes: phoneCodeList },\n } = global;\n\n return {\n ...pick(global, [\n 'connectionState',\n 'authState',\n 'authPhoneNumber',\n 'authIsLoading',\n 'authIsLoadingQrCode',\n 'authError',\n 'authRememberMe',\n 'authNearestCountry',\n ]),\n language,\n phoneCodeList,\n };\n },\n)(AuthPhoneNumber));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthCodeAsync: FC = () => {\n const AuthCode = useModuleLoader(Bundles.Auth, 'AuthCode');\n\n return AuthCode ? : ;\n};\n\nexport default memo(AuthCodeAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthPasswordAsync: FC = () => {\n const AuthPassword = useModuleLoader(Bundles.Auth, 'AuthPassword');\n\n return AuthPassword ? : ;\n};\n\nexport default memo(AuthPasswordAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthRegisterAsync: FC = () => {\n const AuthRegister = useModuleLoader(Bundles.Auth, 'AuthRegister');\n\n return AuthRegister ? : ;\n};\n\nexport default memo(AuthRegisterAsync);\n","/*\n jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */\n'use strict';let G=null;class H{}H.render=function(w,B){G(w,B)};self.QrCreator=H;\n(function(w){function B(t,c,a,e){var b={},h=w(a,c);h.u(t);h.J();e=e||0;var r=h.h(),d=h.h()+2*e;b.text=t;b.level=c;b.version=a;b.O=d;b.a=function(b,a){b-=e;a-=e;return 0>b||b>=r||0>a||a>=r?!1:h.a(b,a)};return b}function C(t,c,a,e,b,h,r,d,g,x){function u(b,a,f,c,d,r,g){b?(t.lineTo(a+r,f+g),t.arcTo(a,f,c,d,h)):t.lineTo(a,f)}r?t.moveTo(c+h,a):t.moveTo(c,a);u(d,e,a,e,b,-h,0);u(g,e,b,c,b,0,-h);u(x,c,b,c,a,h,0);u(r,c,a,e,a,0,h)}function z(t,c,a,e,b,h,r,d,g,x){function u(b,a,c,d){t.moveTo(b+c,a);t.lineTo(b,\na);t.lineTo(b,a+d);t.arcTo(b,a,b+c,a,h)}r&&u(c,a,h,h);d&&u(e,a,-h,h);g&&u(e,b,-h,-h);x&&u(c,b,h,-h)}function A(t,c){var a=c.fill;if(\"string\"===typeof a)t.fillStyle=a;else{var e=a.type,b=a.colorStops;a=a.position.map((b)=>Math.round(b*c.size));if(\"linear-gradient\"===e)var h=t.createLinearGradient.apply(t,a);else if(\"radial-gradient\"===e)h=t.createRadialGradient.apply(t,a);else throw Error(\"Unsupported fill\");b.forEach(([b,a])=>{h.addColorStop(b,a)});t.fillStyle=h}}function y(t,c){a:{var a=c.text,e=\nc.v,b=c.N,h=c.K,r=c.P;b=Math.max(1,b||1);for(h=Math.min(40,h||40);b<=h;b+=1)try{var d=B(a,e,b,r);break a}catch(J){}d=void 0}if(!d)return null;a=t.getContext(\"2d\");c.background&&(a.fillStyle=c.background,a.fillRect(c.left,c.top,c.size,c.size));e=d.O;h=c.size/e;a.beginPath();for(r=0;r>>7-b%8&1)},put:function(b,h){for(var a=0;a>>h-a-1&1))},f:function(){return a},m:function(b){var h=Math.floor(a/8);c.length<=h&&c.push(0);b&&(c[h]|=128>>>a%8);a+=1}};return e}function C(c,a){function e(b,h){for(var a=-1;7>=a;a+=1)if(!(-1>=b+a||d<=b+a))for(var c=-1;7>=c;c+=1)-1>=h+c||d<=h+c||(r[b+a][h+c]=0<=a&&6>=a&&(0==c||6==c)||0<=c&&6>=c&&(0==a||6==a)||2<=a&&4>=a&&2<=c&&4>=c?!0:!1)}function b(b,a){for(var f=d=4*c+17,k=Array(f),m=0;m<\nf;m+=1){k[m]=Array(f);for(var p=0;p=n;n+=1)for(var l=-2;2>=l;l+=1)r[p+n][q+l]=-2==n||2==n||-2==l||2==l||0==n&&0==l}for(f=8;fk;k+=1)m=!b&&1==(f>>k&1),r[6>k?k:8>k?k+1:d-15+k][8]=m,r[8][8>k?d-k-1:9>k?15-k:14-k]=m;r[d-8][8]=!b;if(7<=\nc){f=y.A(c);for(k=0;18>k;k+=1)m=!b&&1==(f>>k&1),r[Math.floor(k/3)][k%3+d-8-3]=m;for(k=0;18>k;k+=1)m=!b&&1==(f>>k&1),r[k%3+d-8-3][Math.floor(k/3)]=m}if(null==g){b=t.I(c,h);f=B();for(k=0;k8*m)throw Error(\"code length overflow. (\"+f.f()+\">\"+8*m+\")\");for(f.f()+4<=8*m&&f.put(0,4);0!=f.f()%8;)f.m(!1);for(;!(f.f()>=8*m);){f.put(236,8);if(f.f()>=8*m)break;f.put(17,8)}var u=0;m=k=0;p=Array(b.length);\nq=Array(b.length);for(n=0;nn;n+=1)null==r[k][q-n]&&(l=!1,p>>m&1)),a(k,q-n)&&(l=!l),r[k][q-n]=l,--m,-1==m&&(p+=1,m=7));k+=f;if(0>k||d<=k){k-=f;f=-f;break}}}var h=A[a],r=null,d=0,g=null,x=[],u={u:function(b){b=w(b);x.push(b);g=null},a:function(b,a){if(0>b||d<=b||0>a||d<=a)throw Error(b+\",\"+a);return r[b][a]},h:function(){return d},J:function(){for(var a=0,h=0,c=0;8>c;c+=1){b(!0,c);var d=y.D(u);if(0==c||a>d)a=d,h=c}b(!1,h)}};return u}\nfunction z(c,a){if(\"undefined\"==typeof c.length)throw Error(c.length+\"/\"+a);var e=function(){for(var b=0;bb.b()-a.b())return b;for(var c=v.g(b.c(0))-v.g(a.c(0)),h=Array(b.b()),\ng=0;gb?a.push(b):2048>b?a.push(192|b>>6,128|b&63):55296>b||57344<=b?a.push(224|b>>12,128|b>>6&63,128|b&63):(e++,b=65536+((b&1023)<<10|c.charCodeAt(e)&1023),a.push(240|b>>18,128|b>>12&63,128|b>>6&63,128|b&63))}return a};var A={L:1,M:0,Q:3,H:2},y=function(){function c(b){for(var a=0;0!=b;)a+=1,b>>>=1;return a}var a=[[],[6,18],\n[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],\n[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],e={w:function(b){for(var a=b<<10;0<=c(a)-c(1335);)a^=1335<a||40a?8:16},D:function(b){for(var a=b.h(),c=0,\nd=0;d=p;p+=1)if(!(0>d+p||a<=d+p))for(var q=-1;1>=q;q+=1)0>g+q||a<=g+q||(0!=p||0!=q)&&t==b.a(d+p,g+q)&&(e+=1);5e;e+=1)c[e]=1<e;e+=1)c[e]=c[e-4]^c[e-5]^c[e-6]^c[e-8];for(e=0;255>e;e+=1)a[c[e]]=e;return{g:function(b){if(1>b)throw Error(\"glog(\"+b+\")\");return a[b]},i:function(b){for(;0>b;)b+=255;for(;256<=b;)b-=255;return c[b]}}}(),t=function(){function c(b,c){switch(c){case A.L:return a[4*\n(b-1)];case A.M:return a[4*(b-1)+1];case A.Q:return a[4*(b-1)+2];case A.H:return a[4*(b-1)+3]}}var a=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,\n2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,\n45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,\n151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],\n[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],\n[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],e={I:function(b,a){var e=c(b,a);if(\"undefined\"==\ntypeof e)throw Error(\"bad rs block @ typeNumber:\"+b+\"/errorCorrectLevel:\"+a);b=e.length/3;a=[];for(var d=0;d\n & {\n language?: LangCode;\n };\n\nconst DATA_PREFIX = 'tg://login?token=';\n\nconst AuthCode: FC = ({\n connectionState,\n authState,\n authQrCode,\n language,\n}) => {\n const {\n returnToAuthPhoneNumber,\n setSettingOption,\n } = getDispatch();\n\n const suggestedLanguage = getSuggestedLanguage();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const qrCodeRef = useRef(null);\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n useEffect(() => {\n if (!authQrCode || connectionState !== 'connectionStateReady') {\n return;\n }\n\n const container = qrCodeRef.current!;\n\n container.innerHTML = '';\n container.classList.remove('pre-animate');\n\n QrCreator.render({\n text: `${DATA_PREFIX}${authQrCode.token}`,\n radius: 0.5,\n ecLevel: 'M',\n fill: '#4E96D4',\n size: 280,\n }, container);\n }, [connectionState, authQrCode]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n void setLanguage(DEFAULT_LANG_CODE);\n }\n }, [connectionState]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n const isAuthReady = authState === 'authorizationStateWaitQrCode';\n\n return (\n
\n
\n {authQrCode ? (\n
\n ) : (\n
\n )}\n

{lang('Login.QR.Title')}

\n
    \n
  1. {lang('Login.QR.Help1')}
  2. \n
  3. {renderText(lang('Login.QR.Help2'), ['simple_markdown'])}
  4. \n
  5. {lang('Login.QR.Help3')}
  6. \n
\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n connectionState, authState, authQrCode, settings: { byKey: { language } },\n } = global;\n\n return {\n connectionState,\n authState,\n authQrCode,\n language,\n };\n },\n)(AuthCode));\n","import React, { FC, useEffect, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\n\nimport '../../modules/actions/initial';\nimport { pick } from '../../util/iteratees';\nimport { PLATFORM_ENV } from '../../util/environment';\nimport windowSize from '../../util/windowSize';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport UiLoader from '../common/UiLoader';\nimport AuthPhoneNumber from './AuthPhoneNumber';\nimport AuthCode from './AuthCode.async';\nimport AuthPassword from './AuthPassword.async';\nimport AuthRegister from './AuthRegister.async';\nimport AuthQrCode from './AuthQrCode';\n\nimport './Auth.scss';\n\ntype StateProps = Pick;\n\nconst Auth: FC = ({\n authState,\n}) => {\n const {\n reset, initApi, returnToAuthPhoneNumber, goToAuthQrCode,\n } = getDispatch();\n\n useEffect(() => {\n reset();\n initApi();\n }, [reset, initApi]);\n\n const isMobile = PLATFORM_ENV === 'iOS' || PLATFORM_ENV === 'Android';\n\n const handleChangeAuthorizationMethod = () => {\n if (!isMobile) {\n goToAuthQrCode();\n } else {\n returnToAuthPhoneNumber();\n }\n };\n\n useHistoryBack(\n (!isMobile && authState === 'authorizationStateWaitPhoneNumber')\n || (isMobile && authState === 'authorizationStateWaitQrCode'), handleChangeAuthorizationMethod,\n );\n\n // Prevent refresh when rotating device\n useEffect(() => {\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, []);\n\n switch (authState) {\n case 'authorizationStateWaitCode':\n return ;\n case 'authorizationStateWaitPassword':\n return ;\n case 'authorizationStateWaitRegistration':\n return ;\n case 'authorizationStateWaitPhoneNumber':\n return ;\n case 'authorizationStateWaitQrCode':\n return ;\n default:\n return isMobile\n ? \n : ;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(Auth));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MainAsync: FC = () => {\n const Main = useModuleLoader(Bundles.Main, 'Main');\n\n return Main ?
: undefined;\n};\n\nexport default memo(MainAsync);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport Button from '../ui/Button';\n\nimport appInactivePath from '../../assets/app-inactive.png';\nimport './AppInactive.scss';\n\nconst AppInactive: FC = () => {\n const handleReload = () => {\n window.location.reload();\n };\n\n return (\n
\n
\n \"\"\n

Such error, many tabs

\n
\n Telegram supports only one active tab with the app.\n
\n Please reload this page to continue using this tab or close it.\n
\n
\n \n
\n
\n
\n );\n};\n\nexport default AppInactive;\n","import { FC, useEffect } from './lib/teact/teact';\nimport React, { getDispatch, withGlobal } from './lib/teact/teactn';\n\nimport { GlobalState } from './global/types';\n\nimport { INACTIVE_MARKER, PAGE_TITLE } from './config';\nimport { pick } from './util/iteratees';\nimport { updateSizes } from './util/windowSize';\nimport { addActiveTabChangeListener } from './util/activeTabMonitor';\nimport useFlag from './hooks/useFlag';\n\nimport Auth from './components/auth/Auth';\nimport UiLoader from './components/common/UiLoader';\nimport Main from './components/main/Main.async';\nimport AppInactive from './components/main/AppInactive';\nimport { hasStoredSession } from './util/sessions';\n// import Test from './components/test/TestNoRedundancy';\n\ntype StateProps = Pick;\n\nconst App: FC = ({ authState }) => {\n const { disconnect } = getDispatch();\n\n const [isInactive, markInactive] = useFlag(false);\n\n useEffect(() => {\n updateSizes();\n addActiveTabChangeListener(() => {\n disconnect();\n document.title = `${PAGE_TITLE}${INACTIVE_MARKER}`;\n\n markInactive();\n });\n }, [disconnect, markInactive]);\n\n // return ;\n\n if (isInactive) {\n return ;\n }\n\n if (authState) {\n switch (authState) {\n case 'authorizationStateWaitPhoneNumber':\n case 'authorizationStateWaitCode':\n case 'authorizationStateWaitPassword':\n case 'authorizationStateWaitRegistration':\n case 'authorizationStateWaitQrCode':\n return ;\n case 'authorizationStateClosed':\n case 'authorizationStateClosing':\n case 'authorizationStateLoggingOut':\n case 'authorizationStateReady':\n return renderMain();\n }\n }\n\n return hasStoredSession(true) ? renderMain() : ;\n};\n\nfunction renderMain() {\n return (\n \n
\n \n );\n}\n\nexport default withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(App);\n","import './util/handleError';\nimport './util/setupServiceWorker';\n\nimport React, { getDispatch, getGlobal } from './lib/teact/teactn';\nimport TeactDOM from './lib/teact/teact-dom';\n\nimport './global';\n\nimport { DEBUG } from './config';\n\nimport App from './App';\n\nimport './styles/index.scss';\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> INIT');\n}\n\ngetDispatch().init();\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START INITIAL RENDER');\n}\n\nTeactDOM.render(\n ,\n document.getElementById('root'),\n);\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH INITIAL RENDER');\n}\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('GLOBAL STATE', getGlobal());\n});\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","worker","requestStates","Map","requestStatesByCallback","initApi","onUpdate","initialArgs","DEBUG","console","log","Worker","URL","addEventListener","data","type","update","requestState","get","messageId","error","reject","resolve","response","callback","callbackArgs","Error","message","subscribeToWorker","platform","window","ensureWorkerPing","setTimeout","makeRequest","args","callApi","fnName","warn","promise","name","err","cancelApiProgress","progressCallback","isCanceled","postMessage","generateIdFor","payload","Promise","Object","assign","pop","set","catch","finally","delete","startedAt","Date","now","async","race","pause","then","location","reload","ApiMediaFormat","ApiMessageEntityTypes","MAIN_THREAD_ID","MESSAGE_DELETED","base","maxint","adapt","delta","numpoints","firsttime","k","Math","floor","decode","input","preserveCase","output","case_flags","input_length","length","n","out","i","bias","basic","j","ic","oldi","w","digit","t","len","lastIndexOf","charCodeAt","RangeError","push","cp","splice","String","fromCharCode","toUpperCase","value","join","utf16","getDomain","url","href","ensureProtocol","decodedHref","decodeURI","match","domain","replace","domain_array","split","s","slice","convertPunycode","memo","text","className","children","isRtl","toggleSafeLinkModal","openTelegramLink","getDispatch","content","isNotSafe","handleClick","useCallback","e","ctrlKey","altKey","shiftKey","metaKey","RE_TME_LINK","RE_TG_LINK","preventDefault","classNames","buildClassName","title","target","rel","onClick","dir","getFileSizeString","bytes","ONE_GIGABYTE","toFixed","ONE_MEGABYTE","getDocumentExtension","document","fileName","mimeType","getFileExtension","indexOf","getColorFromExtension","extension","getDocumentHasPreview","Boolean","previewBlobUrl","thumbnail","RE_EMOJI_ONLY","RegExp","twemojiRegex","DETECT_UP_TO","emojiCount","sender","openChat","id","Link","focusMessage","handleMessageClick","chatId","groupCall","joinGroupCall","accessHash","MAX_LENGTH","NBSP","renderActionMessageText","lang","actionOriginUser","actionOriginChat","targetUsers","targetMessage","targetChatId","options","action","translationValues","amount","currency","call","noLinks","asPlainText","asTextWithSpoilers","translationKey","processed","unprocessed","undefined","includes","processPlaceholder","formatCurrency","code","renderUserContent","renderChatContent","map","user","filter","renderMessageContent","renderProductContent","renderMigratedContent","trim","renderGroupCallContent","invoice","getMessageSummaryText","messageSummary","renderMessageSummary","trimText","getUserFullName","renderText","chat","getChatTitle","placeholder","replaceValue","placeholderPosition","substring","Array","isArray","forEach","index","renderMessageText","highlight","shouldRenderHqEmoji","isSimple","truncateLength","entities","contentNotSupportedText","getMessageText","renderTextWithEntities","noEmoji","TRUNCATED_SUMMARY_LENGTH","hasSpoilers","some","emoji","getMessageSummaryEmoji","emojiWithSpace","description","getMessageSummaryDescription","RE_LETTER_OR_DIGIT","SIMPLE_MARKDOWN_REGEX","part","filters","params","compact","reduce","escapeHtml","EMOJI_REGEX","replaceEmojis","addLineBreaks","addHighlight","addLinks","replaceSimpleMarkdown","textParts","divEl","createElement","result","innerText","innerHTML","size","IS_EMOJI_SUPPORTED","parts","fixNonStandardEmoji","emojis","emojiResult","nativeToUnified","removeVS16s","src","alt","splittenParts","line","source","trimmedLine","trimLeft","indentLength","repeat","lowerCaseText","toLowerCase","queryPosition","nextSymbol","newParts","RE_LINK","RE_LINK_TEMPLATE","RE_MENTION_TEMPLATE","links","nextLink","shift","lastIndex","startsWith","username","endsWith","entityResult","entity","actionsByMessageId","createClassNameBuilder","contentRef","useRef","isRevealed","reveal","conceal","useFlag","stopPropagation","actions","contentLength","current","readingMs","round","timeoutMs","max","min","useEffect","has","ref","shouldRenderAsHtml","renderMessagePart","deleteLineBreakAfterPre","organizedEntities","organizedEntityIndexes","Set","organizedEntity","organizeEntity","organizedIndexes","organizedIndex","add","organizeEntities","renderEntity","textPartStart","textPartEnd","isLastEntity","renderResult","nestedEntities","offset","textBefore","textBeforeLength","substr","entityStartIndex","entityEndIndex","entityContent","nestedEntityContent","nestedIndex","nestedEntity","nestedEntityIndex","nestedResult","nestedEntityEndIndex","newEntity","rawEntityText","renderedContent","userId","getLinkUrl","processEntityAsHtml","entityText","renderNestedMessagePart","handleBotCommandClick","handleHashtagClick","MentionLink","SafeLink","processEntity","textAfter","arrayIndex","getTextWithEntitiesAsHtml","formattedText","c","concat","parsedEntity","isChanged","sendBotCommand","command","currentTarget","setLocalTextSearchQuery","query","searchTextMessagesLocal","preventMessageInputBlur","withBubbling","IS_IOS","activeElement","EDITABLE_INPUT_ID","preventMessageInputBlurWithBubbling","withGlobal","global","userOrChat","selectUser","openChatByUsername","onContextMenu","onMouseDown","onMouseEnter","onMouseLeave","onFocus","color","backgroundImage","pill","fluid","isText","isLoading","ariaLabel","download","disabled","ripple","faded","tabIndex","withClickPropagation","elementRef","isClicked","setIsClicked","useState","fullClassName","handleMouseDown","style","label","subLabel","checked","blocking","onChange","onCheck","useLang","handleChange","event","trigger","positionX","positionY","footer","forceOpen","onOpen","onClose","menuRef","dropdownRef","isOpen","setIsOpen","onKeyDown","menu","keyCode","focusedElement","elementChildren","from","focus","onTrigger","containerRef","autoClose","shouldSkipTransition","success","readOnly","autoComplete","inputMode","maxLength","onInput","onKeyPress","onBlur","onPaste","labelText","htmlFor","backgroundColor","bubbleStyle","transformOriginX","transformOriginY","noCloseOnBackdrop","onCloseAnimationEnd","backdropContainerRef","transitionClassNames","useShowTransition","captureEscKeyListener","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","dispatchHeavyAnimationEvent","handleKeyDown","useKeyboardListNavigation","useVirtualBackdrop","bubbleClassName","transformOriginYStyle","transformOriginXStyle","props","icon","destructive","origin","role","ripples","setRipples","cleanUpDebounced","useMemo","debounce","button","container","position","getBoundingClientRect","rippleSize","offsetWidth","x","clientX","y","clientY","requestAnimationFrame","PAGE_TITLE","INACTIVE_MARKER","APP_NAME","process","APP_VERSION","DEBUG_MORE","IS_TEST","DEBUG_ALERT_MSG","SESSION_USER_KEY","LEGACY_SESSION_KEY","GLOBAL_STATE_CACHE_DISABLED","GLOBAL_STATE_CACHE_KEY","GLOBAL_STATE_CACHE_USER_LIST_LIMIT","GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT","GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT","MEDIA_CACHE_DISABLED","MEDIA_CACHE_NAME","MEDIA_CACHE_NAME_AVATARS","MEDIA_PROGRESSIVE_CACHE_NAME","CUSTOM_BG_CACHE_NAME","LANG_CACHE_NAME","AUTODOWNLOAD_FILESIZE_MB_LIMITS","isBigScreen","innerHeight","MIN_PASSWORD_LENGTH","MESSAGE_LIST_SLICE","MESSAGE_LIST_VIEWPORT_LIMIT","CHAT_HEIGHT_PX","CHAT_LIST_SLICE","CHAT_LIST_LOAD_SLICE","SHARED_MEDIA_SLICE","MESSAGE_SEARCH_SLICE","GLOBAL_SEARCH_SLICE","MEMBERS_SLICE","MEMBERS_LOAD_SLICE","PROFILE_SENSITIVE_AREA","TOP_CHAT_MESSAGES_PRELOAD_LIMIT","DEFAULT_VOLUME","DEFAULT_PLAYBACK_RATE","ANIMATION_LEVEL_MIN","ANIMATION_LEVEL_MAX","ANIMATION_LEVEL_DEFAULT","DEFAULT_MESSAGE_TEXT_SIZE_PX","IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","DRAFT_DEBOUNCE","SEND_MESSAGE_ACTION_INTERVAL","EDITABLE_INPUT_MODAL_ID","SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","SAFE_SCREEN_WIDTH_FOR_CHAT_INFO","MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN","MOBILE_SCREEN_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT","LOCAL_MESSAGE_ID_BASE","TMP_CHAT_ID","ANIMATION_END_DELAY","FAST_SMOOTH_MAX_DISTANCE","FAST_SMOOTH_MIN_DURATION","FAST_SMOOTH_MAX_DURATION","FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE","STICKER_SIZE_INLINE_DESKTOP_FACTOR","STICKER_SIZE_INLINE_MOBILE_FACTOR","STICKER_SIZE_AUTH","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_PICKER","STICKER_SIZE_GENERAL_SETTINGS","STICKER_SIZE_PICKER_HEADER","STICKER_SIZE_SEARCH","STICKER_SIZE_MODAL","STICKER_SIZE_TWO_FA","STICKER_SIZE_DISCUSSION_GROUPS","STICKER_SIZE_FOLDER_SETTINGS","STICKER_SIZE_INLINE_BOT_RESULT","STICKER_SIZE_JOIN_REQUESTS","STICKER_SIZE_INVITES","NO_STICKER_SET_ID","BASE_EMOJI_KEYWORD_LANG","MENU_TRANSITION_DURATION","SLIDE_TRANSITION_DURATION","VIDEO_MOV_TYPE","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","CONTENT_TYPES_WITH_PREVIEW","CONTENT_NOT_SUPPORTED","COUNTRIES_WITH_12H_TIME_FORMAT","SERVICE_NOTIFICATIONS_USER_ID","REPLIES_USER_ID","ALL_FOLDER_ID","ARCHIVED_FOLDER_ID","MAX_MEDIA_FILES_FOR_ALBUM","MAX_ACTIVE_PINNED_CHATS","SCHEDULED_WHEN_ONLINE","DEFAULT_LANG_CODE","DEFAULT_LANG_PACK","LANG_PACKS","TIPS_USERNAME","LOCALIZED_TIPS","FEEDBACK_URL","LIGHT_THEME_BG_COLOR","DARK_THEME_BG_COLOR","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","GROUP_CALL_VOLUME_MULTIPLIER","GROUP_CALL_DEFAULT_VOLUME","ENABLE_THUMBNAIL_VIDEO","cb","dependencies","debugKey","prevDeps","usePrevious","initial","setValue","setTrue","setFalse","setTrigger","ANIMATION_START_EVENT","ANIMATION_END_EVENT","timeout","isAnimating","isHeavyAnimating","duration","onEnd","clearTimeout","dispatchEvent","Event","handleAnimationStart","handleAnimationEnd","isDisabled","removeEventListener","LOCATION_HASH","hash","PATH_BASE","pathname","search","historyState","currentIndex","nextStateIndexToReplace","isHistoryAltered","isEdge","currentIndexes","disableHistoryBack","handleTouchEnd","isActive","onBack","onForward","currentState","shouldReplaceNext","hashes","indexRef","isForward","prevIsActive","isClosed","indexHashRef","prevHashes","isHashChangedFromEvent","isForceClose","prev","history","pushState","state","last","realDelta","indexLast","findIndex","l","go","replaceState","back","handlePopState","currIndex","disableHistoryAnimations","hasChanged","areSortedArraysEqual","forceClose","touches","pageX","innerWidth","onSelectWithEnter","itemSelector","noCaptureFocus","focusedIndex","setFocusedIndex","element","querySelectorAll","newIndex","item","forceUpdate","useForceUpdate","useOnChange","langProvider","bundleName","moduleName","noLoad","autoUpdate","module","getModuleFromMemory","addLoadListener","loadModule","d","next","shouldSkipUndefined","onCloseTransitionEnd","noOpenTransition","noCloseTransition","setIsClosed","closeTimeoutRef","hasOpenClassName","setHasOpenClassName","exec","shouldHaveOpenClassName","isClosing","shouldRender","handleEvent","contains","classList","NON_BUBBLEABLE_EVENTS","documentEventCounters","delegationRegistryByEventType","delegatedEventTypesByElement","propName","handler","asCapture","eventType","resolveEventType","canUseEventDelegation","addDelegatedListener","removeDelegatedListener","tagName","realEventType","resolveDelegationRegistry","existing","newSet","resolveDelegatedEventTypes","removeAllDelegatedListeners","eventTypes","realEvent","events","furtherCallsPrevented","Proxy","p","Reflect","body","parentNode","documentListenersCount","keys","delegatedHandlersCount1","values","acc","counter","delegationRegistriesCount","delegatedHandlersCount2","delegationRegistry","delegationElementsCount","delegatedEventTypesCount","FILTERED_ATTRIBUTES","HTML_ATTRIBUTES","MAPPED_ATTRIBUTES","autoPlay","headsByElement","renderWithVirtual","parentEl","$current","$new","$parent","skipComponentUpdate","forceIndex","fragment","moveDirection","isCurrentComponent","isComponentElement","isNewComponent","hasElementChanged","updateComponent","componentInstance","isMounted","setupComponentUpdateListener","initComponent","node","createNode","setTarget","childNodes","insertBefore","appendChild","removeChild","getTarget","unmountTree","replaceChild","areComponents","isRealElement","nextSibling","updateAttributes","renderChildren","$element","mountComponent","$firstChild","renderComponent","isEmptyElement","createTextNode","isTextElement","tag","entries","key","setAttribute","$child","currentEl","teactFastList","newKeys","$newChild","currentRemainingIndex","remainingByKey","$currentChild","isKeyPresent","newChildKey","order","teactOrderKey","fragmentQueue","fragmentIndex","newChildren","currentPreservedIndex","currentChildInfo","flushFragmentQueue","shouldMoveNode","isMovingDown","renderFastListChildren","currentChildrenLength","newChildrenLength","createDocumentFragment","$fragmentChild","currentEntries","newEntries","currentValue","newValue","cssText","removeAttribute","__html","render","headId","getAttribute","$head","VirtualElementTypesEnum","Fragment","Symbol","DEBUG_SILENT_RENDERS_FOR","renderingInstance","Empty","Text","isTagElement","Tag","Component","flatten","createComponentInstance","buildTagElement","parsedChildren","hooks","cursor","byCursor","effects","memos","buildComponentElement","dropEmptyTail","buildChildElement","isEmptyPlaceholder","child","DEBUG_components","newRenderedValue","DEBUG_startAt","componentName","renderCount","renderTimes","performance","handleError","renderedValue","newChild","$old","memoContainer","cleanup","hook","effect","nextValue","setter","helpGc","prepareComponentForFrame","prepareForFrame","throttleWithPrimaryRaf","throttleWithRaf","forceUpdateComponent","currentElement","DEBUG_contentComponentName","useLayoutEffectBase","schedulerFn","primarySchedulerFn","execCleanup","dependency","causedBy","res","prevValue","fastRaf","fastRafPrimary","useLayoutEffect","onTickEnd","onTickEndPrimary","resolver","getUnequalProps","newCallback","areEqual","arePropsShallowEqual","propsRef","renderedRef","orderBy","React","currentGlobal","reducers","callbacks","containers","mapStateToProps","ownProps","mappedProps","newMappedProps","Number","isNaN","DEBUG_componentName","areMappedPropsChanged","DEBUG_updates","updateTime","runCallbacksThrottled","throttleWithTickEnd","runCallbacks","forceOnHeavyAnimation","setGlobal","newGlobal","forceSyncOnIOs","getGlobal","addReducer","reducer","onDispatch","addCallback","removeCallback","TeactNContainer","vs16RegExp","zeroWidthJoiner","rawEmoji","importLegacySession","clearLegacySessions","apiUpdate","userAgent","navigator","PLATFORM_ENV","sessionData","loadStoredSession","isTest","isMovSupported","IS_MOV_SUPPORTED","isWebmSupported","IS_WEBM_SUPPORTED","phoneNumber","authIsLoading","authError","password","file","firstName","lastName","authIsLoadingQrCode","storeSession","currentUserId","clearStoredSession","unsubscribe","forceWebsync","reset","cacheApi","langCachePrefix","langCacheVersion","updateAppBadge","init","connectionState","authNearestCountry","deviceToken","subscribedAt","buildInputPrivacyRules","visibility","allowedIds","deniedIds","users","byId","usersById","chats","chatsById","rules","collectUsers","isUserId","collectChats","allowedUsers","allowedChats","blockedUsers","blockedChats","photo","bio","about","profileEdit","progress","ProfileEditProgress","currentUser","updateUser","fullInfo","isUsernameAvailable","settings","loadedWallpapers","wallpapers","createObjectURL","slug","UPLOADING_WALLPAPER_SLUG","wallpaper","firstWallpaper","withLocalMedia","addUsers","buildCollectionByKey","updateChats","blocked","ids","blockedIds","totalCount","contactId","addBlockedContact","removeBlockedContact","activeSessions","session","isCurrent","serverTimeOffset","addNotifyExceptions","replaceSettings","peerType","isSilent","shouldShowPreviews","updateNotifySettings","hasPushNotifications","hasWebNotifications","byKey","subscribe","hasContactJoinedNotifications","languages","phoneNumberSettings","lastSeenSettings","profilePhotoSettings","forwardsSettings","chatInviteSettings","all","privacy","lastSeen","profilePhoto","forwards","chatInvite","privacyKey","allowUserIds","allowChatIds","blockUserIds","blockChatIds","isAllowList","contactsIds","isSensitiveEnabled","langCode","language","countryList","timeFormat","setSettingOption","setTimeFormat","wasTimeFormatSetManually","nearestCountryCode","appConfig","selectNotifySettings","setLanguage","onUpdateApiReady","wasAuthReady","authState","authorizationState","isLoggingOut","authIsCodeViaApp","isCodeViaApp","authHint","hint","authQrCode","qrCode","onUpdateAuthorizationState","onUpdateAuthorizationError","signOut","onUpdateConnectionState","authRememberMe","isEmpty","mainDcId","saveSession","onUpdateSession","onUpdateServerTimeOffset","sessionUserAuth","localStorage","getItem","userAuth","JSON","parse","setItem","stringify","updateSessionUserId","onUpdateCurrentUser","paymentShippingError","getShippingError","addPaymentError","showDialog","handleSystemThemeChange","currentThemeMatch","documentElement","currentTheme","nextTheme","selectTheme","animationLevel","switchTheme","mql","matchMedia","addListener","subscribeToSystemThemeChange","messageTextSize","theme","setProperty","toString","IS_TOUCH_ENV","ensurePermanentWebVersion","startWebsync","IS_ANDROID","IS_MAC_OS","IS_SAFARI","uiReadyState","remove","authPhoneNumber","shouldSkipHistoryAnimations","replaceThemeSettings","FOREVER_BANNED_DATE","VERIFIED_PRIORITY_BASE","PINNED_PRIORITY_BASE","entityId","isChatGroup","isChatBasicGroup","isChatSuperGroup","isChatChannel","isCommonBoxChat","isChatWithRepliesBot","getChatTypeString","getPrivateChatUserId","isSelf","getChatDescription","getChatLink","inviteLink","getChatAvatarHash","owner","avatarHash","isChatSummaryOnly","lastMessage","isChatAdmin","adminRights","getHasAdminRight","isUserRightBanned","currentUserBannedRights","defaultBannedRights","getCanPostInChat","threadId","isRestricted","migratedTo","isNotJoined","isCreator","getAllowedAttachmentOptions","isChatWithBot","canAttachMedia","canAttachPolls","canSendStickers","canSendGifs","canAttachEmbedLinks","isAdmin","getMessageSendingRestrictionReason","sendMessages","untilDate","formatDateToString","formatTime","getChatSlowModeOptions","slowMode","isChatArchived","folderId","selectIsChatMuted","notifySettings","notifyExceptions","isMuted","hasPrivateChatsNotifications","hasBroadcastNotifications","hasGroupNotifications","selectShouldShowMessagePreview","hasPrivateChatsMessagePreview","hasBroadcastMessagePreview","hasGroupMessagePreview","getCanDeleteChat","getFolderDescriptionText","folder","chatsCount","emoticon","pinnedChatIds","excludedChatIds","includedChatIds","excludeArchived","excludeMuted","excludeRead","bots","groups","channels","contacts","nonContacts","getMessageSenderName","getUserFirstOrLastName","sortChatIds","chatIds","shouldPrioritizeVerified","priorityIds","priority","date","isVerified","filterChatsByName","searchWords","prepareSearchWordsForNeedle","getMessageKey","msgId","buildMessageKey","parseMessageKey","getMessageOriginalId","previousLocalId","sticker","video","audio","voice","poll","webPage","contact","getMessageCustomShape","isRound","parseEmojiOnlyString","getMessageSingleEmoji","getFirstLinkInMessage","link","find","isOwnMessage","isOutgoing","isReplyMessage","replyToMessageId","isForwardedMessage","forwardInfo","isActionMessage","isServiceNotificationMessage","isAnonymousOwnMessage","senderId","getSenderTitle","getSendingState","sendingState","isMessageLocal","isHistoryClearMessage","getMessageContentFilename","isLottie","isGif","isWebpSupported","baseFilename","IS_OPUS_SUPPORTED","areReactionsEmpty","reactions","results","count","SPOILER_CHARS","getMessageTextWithSpoilers","accText","spoiler","fill","random","generateBrailleSpoiler","groupedId","truncatedText","performer","getMessageAudioCaption","summary","question","getMessageContent","hasMessageMedia","getMessagePhoto","getMessageVideo","getMessageDocument","getMessageSticker","getMessageContact","getMessagePoll","getMessageAction","getMessageAudio","getMessageVoice","getMessageRoundVideo","isMessageDocumentPhoto","mediaType","isMessageDocumentVideo","getMessageInvoice","getMessageWebPage","getMessageWebPagePhoto","getMessageWebPageVideo","getMessageMediaThumbDataUri","media","getMessageMediaThumbnail","dataUri","getMessageMediaHash","webPagePhoto","webPageVideo","messageVideo","messagePhoto","mediaId","hasMessageLocalBlobUrl","getVideoOrAudioBaseHash","getAudioHasCover","IS_PROGRESSIVE_SUPPORTED","thumbnailSizes","getMessageMediaFormat","fullVideo","getMessageFileName","getMessageFileSize","blobUrl","getChatMediaMessageIds","messages","listedIds","isFromSharedMedia","getMessageContentIds","getPhotoFullDimensions","sizes","getPhotoInlineDimensions","getVideoDimensions","width","height","getMediaTransferState","isLoadNeeded","isUploading","isTransferring","transferProgress","messageIds","contentType","validator","matchLinkInMessageText","getMediaDuration","buildChatThreadKey","STRIPE_ERRORS","missing_payment_information","field","invalid_number","number","exp_year","exp_month","invalid_expiry_year","invalid_expiry_month","cvc","invalid_cvc","getStripeError","param","USER_COLOR_KEYS","isDeletedUser","getUserStatus","userStatus","wasOnline","getTime","wasOnlineDate","diff","today","setHours","yesterday","setDate","getDate","formatFullDate","isUserOnline","noStatus","isUserBot","getCanAddContact","isContact","sortUserIds","userIds","userStatusesById","getServerTime","expires","filterUsersByName","savedMessagesLang","getUserIdDividend","abs","getUserColorKey","peer","replaceChatListIds","newIds","listIds","updateChatListIds","idsUpdate","replaceChats","newById","updateChat","chatUpdate","updatedChat","getUpdatedChat","updatedById","addChats","isUpdated","addedById","isMin","shouldOmitMinInfo","omit","photos","updateChatListType","listType","currentListIds","listTypeKey","currentFolderList","updateChatListSecondaryInfo","info","totalCountKey","orderedPinnedIds","totalChatCount","isFullyLoaded","leaveChat","leftChatId","selectChatListType","listId","updateStickerSets","category","sets","resultIds","updatedSets","stickerSet","stickers","setsById","setIds","updateStickerSet","stickerSetId","currentStickerSet","addedSets","added","installedDate","updateGifSearch","isNew","nextOffset","currentResults","gifs","newResults","currentIds","gif","replaceAnimatedEmojis","animatedEmojis","updateStickersForEmoji","remoteStickers","allStickers","selectStickersForEmoji","uniqueIds","unique","forEmoji","rebuildStickersForEmoji","replaceUsers","updateContactList","updatedUsers","contactUserIds","contactList","newContactUserIds","userUpdate","updatedUser","getUpdatedUser","updateUsers","deleteContact","MEMO_EMPTY_ARRAY","updateUserSearch","searchStatePartial","userSearch","updateUserSearchFetchingStatus","newState","fetchingStatus","updateUserBlockedState","isBlocked","replaceUserStatuses","statusesById","addUserStatuses","pick","getComplexKey","updateGlobalSearch","globalSearch","updateGlobalSearchContent","currentContent","updateGlobalSearchResults","newFoundMessages","nextRate","resultsByType","newFoundMessagesById","foundIdsForType","foundIds","every","newId","updateGlobalSearchFetchingStatus","prevFoundIds","newFoundIds","prototype","foundOrPrevFoundIds","nextOffsetId","replaceLocalTextSearch","chatThreadKey","searchParams","localTextSearch","byChatThreadKey","updateLocalTextSearch","replaceLocalTextSearchResults","updateLocalTextSearchResults","orderFoundIds","replaceLocalMediaSearch","localMediaSearch","byChatId","updateLocalMediaSearchType","currentType","updateLocalMediaSearchResults","replaceLocalMediaSearchResults","sort","a","b","updateManagementProgress","management","updateManagement","newSettings","themes","notifyException","exceptionData","addNotifyException","updateTwoFaSettings","twoFaSettings","updateShippingOptions","shippingOptions","payment","setRequestInfoId","requestId","setPaymentStep","step","setInvoiceMessageInfo","photoUrl","invoiceContent","setStripeCardInfo","cardInfo","stripeCredentials","setPaymentForm","form","setReceipt","receipt","messageInvoice","clearPayment","closeInvoice","isPaymentModalOpen","updateCurrentMessageList","shouldReplaceHistory","messageLists","newMessageLists","replaceChatMessages","updateMessageStore","threadsById","replaceThreadParam","paramName","threadUpdate","updateThread","addMessages","addedByChatId","messagesByChatId","addChatMessagesById","selectChatMessages","updateChatMessage","messageUpdate","updatedMessage","updateScheduledMessage","selectScheduledMessages","replaceScheduledMessages","deleteChatMessages","deletedForwardedPosts","pickTruthy","isLinkedChannelPost","threadInfo","selectThreadInfo","selectListedIds","outlyingIds","selectOutlyingIds","viewportIds","selectViewportIds","pinnedIds","selectPinnedIds","newMessageCount","messagesCount","currentMessageList","selectCurrentMessageList","canDeleteCurrentThread","currentThreadId","fromChatId","fromMessageId","originalPost","selectChatMessage","deleteChatScheduledMessages","scheduledIds","selectScheduledIds","updateListedIds","orderHistoryIds","updateOutlyingIds","addViewportId","safeReplaceViewportIds","newViewportIds","updateThreadInfo","newThreadInfo","updateThreadInfos","updates","scheduledMessages","updateScheduledMessages","updateFocusedMessage","noHighlight","isResizingContainer","focusedMessage","updateSponsoredMessage","sponsoredByChatId","updateFocusDirection","direction","enterMessageSelectMode","selectedMessages","toggleMessageSelection","messageListType","childMessageIds","withShift","oldSelectedMessages","selectMessageIdsByGroupId","selectedMessageIds","newMessageIds","newSelectedMessageIds","selectCurrentMessageIds","prevIndex","to","exitMessageSelectMode","updateThreadUnreadFromForwardedMessage","originMessage","lastMessageId","isDeleting","channelPostId","threadInfoOld","selectChat","selectChatUser","selectIsChatWithSelf","selectIsChatWithBot","selectSupportChat","isSupport","selectChatOnlineCount","members","onlineCount","selectChatBot","selectIsChatBotNotStarted","bot","messageInfo","selectAreActiveChatsLoaded","active","selectIsChatListed","targetList","list","selectChatFolder","chatFolders","selectIsChatPinned","archived","chatFoldersById","selectChatByUsername","usernameLowered","selectIsServiceChatReady","selectSendAs","sendAsId","selectCurrentStickerSearch","selectCurrentGifSearch","selectStickerSet","selectStickerSetByShortName","shortName","stickerSets","stickersForEmoji","favorite","packs","cleanEmoji","selectAnimatedEmoji","cleanedEmoji","selectAnimatedEmojiEffect","animatedEmojiEffects","selectAnimatedEmojiSound","emojiSounds","selectLocalAnimatedEmoji","selectLocalAnimatedEmojiEffect","selectLocalAnimatedEmojiEffectByName","selectCurrentChat","selectThreadParam","thread","selectScrollOffset","selectReplyingToId","selectEditingId","selectEditingScheduledId","selectDraft","selectNoWebPage","selectFirstMessageId","selectReplyStack","selectThreadOriginChat","originChannelId","selectThreadTopMessageId","topMessageId","selectThreadByMessage","replyToTopMessageId","isMessageInCurrentMessageList","selectIsViewportNewest","chatMessages","selectScheduledMessage","selectEditingMessage","selectChatMessageByPollId","pollId","messageWithPoll","selectFocusedMessageId","focusedChatId","selectIsMessageFocused","focusedId","selectIsMessageUnread","lastReadOutboxMessageId","selectOutgoingStatus","isScheduledList","selectSender","selectForwardedSender","isChannelPost","senderUserId","selectAllowedMessageActions","isPrivate","isChatWithSelf","isBasicGroup","isSuperGroup","isChannel","isLocal","isServiceNotification","isOwn","isAction","isMessageEditable","viaBotId","canReply","hasPinPermission","canPin","canUnpin","pinnedMessageIds","canDelete","canReport","canDeleteForAll","canEdit","canForward","hasSticker","hasFavoriteSticker","selectIsStickerFavorite","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canDownload","noOptions","ability","selectCanDeleteSelectedMessages","messageActions","selectCanReportSelectedMessages","selectCanDownloadSelectedMessages","selectIsDownloading","activeInChat","activeDownloads","selectActiveDownloadIds","selectUploadProgress","fileUploads","byMessageLocalId","selectRealLastReadId","lastReadInboxMessageId","Infinity","selectFirstUnreadId","lastReadId","lastReadServiceNotificationId","serviceNotifications","notification","isUnread","findAfterLastReadId","isFromScheduled","found","selectIsForwardModalOpen","forwardMessages","isModalShown","selectCommonBoxChatId","fromLastMessage","selectIsInSelectMode","selectIsMessageSelected","selectForwardedMessageIdsByGroupId","selectIsDocumentGroupSelected","selectedIds","groupIds","selectSelectedMessagesCount","selectNewestMessageWithBotKeyboardButtons","findLast","keyboardButtons","replyHideMessageId","shouldHideKeyboardButtons","selectCanAutoLoadMedia","isPhoto","isVideo","isFile","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoLoadMedia","canAutoLoadMediaFromContacts","canAutoLoadMediaInPrivateChats","canAutoLoadMediaInGroups","canAutoLoadMediaInChannels","isMediaFromContact","selectIsUserOrChatContact","selectCanAutoPlayMedia","canAutoPlayVideos","canAutoPlayGifs","asGif","selectShouldLoopStickers","shouldLoopStickers","selectLastServiceNotification","maxId","selectIsMessageProtected","isProtected","selectHasProtectedMessage","selectSponsoredMessage","expiresAt","selectDefaultReaction","defaultReaction","availableReactions","reaction","isInactive","enabledReactions","selectVisibleUsers","selectCurrentTextSearch","currentSearch","selectCurrentMediaSearch","selectManagement","selectCurrentManagementType","selectIsMediaViewerOpen","mediaViewer","avatarOwnerId","selectRightColumnContentKey","pollResults","selectIsPollResultsOpen","RightColumnContent","IS_SINGLE_COLUMN_LAYOUT","currentManagement","selectCurrentManagement","newChatMembersProgress","NewChatMembersProgress","isChatInfoShown","selectIsRightColumnShown","shouldUseSystemTheme","getSystemTheme","selectCurrentGlobalSearchQuery","selectPaymentChatId","selectPaymentMessageId","selectPaymentFormId","formId","selectPaymentRequestId","selectProviderPublishableKey","nativeParams","publishableKey","selectStripeCredentials","selectNotifyExceptions","selectUserStatus","selectIsUserBlocked","LoadMoreDirection","FocusDirection","SettingsScreens","LeftColumnContent","GlobalSearchContent","MediaViewerOrigin","AudioOrigin","ChatCreationProgress","ManagementProgress","ProfileState","PaymentStep","ManagementScreens","currentInstance","animateSingle","tick","instance","isCancelled","animate","timingFunctions","linear","easeIn","easeOut","easeInOut","sin","PI","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","animateNumber","timing","t0","canceled","f","unreadCount","setAppBadge","currentProps","newProps","currentKeys","currentKeysLength","prop","elementName","baseName","modifiers","modifier","self","caches","Type","fetch","cacheName","isHtmlAllowed","request","Request","cache","open","headers","Blob","blob","shouldRecreate","resolvedType","Json","json","save","cacheData","Response","put","clear","createCallbackManager","hasCallbacks","captureKeyboardListener","onEsc","keyToHandlerName","Enter","Backspace","Delete","Esc","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","handlers","onEnter","onDelete","onBackspace","onUp","onDown","onLeft","onRight","onTab","captureKeyboardListeners","hasActiveHandlers","handlerName","currentEventHandlers","releaseKeyboardListener","keyHandlers","WEEKDAYS_FULL","MONTHS_FULL","MONTHS_FULL_LOWERCASE","month","MILLISECONDS_IN_DAY","isToday","getDayStart","datetime","getDayStartAt","toYearMonth","timestamp","getFullYear","getMonth","toIsoString","hours","getHours","marker","padStart","getMinutes","formatPastTimeShort","weekAgo","getDay","withYear","format","formatDate","formatMonthAndYear","isShort","formatCountdown","msLeft","days","formatMediaDuration","formatHumanDate","noWeekdays","isUpperFirst","upperFirst","lowerFirst","weekAhead","weekDay","formatKey","day","monthIndex","formatMediaDateTime","maxValue","minutes","seconds","maxHours","maxMinutes","string","formatVoiceRecordDuration","durationInMs","milliseconds","locale","toLocaleString","year","formatDateTimeToString","hour","minute","second","isValidDate","MAX_MONTH_IN_YEAR","parseDateString","matchStringDate","matchEuropeStringDate","matchNumberDate","dateParts","timestampPlusDay","str","EXCLUDE_EMOJIS","EMOJI_EXCEPTIONS","unifiedToNative","unified","codePoints","parseInt","fromCodePoint","regex","replacement","pairs","uncompressEmoji","emojiData","categories","emojiRaw","names","native","image","isoToEmoji","iso","test","codePointAt","isWebpSupportedCache","webp","Image","handleLoadOrError","onload","onerror","hasWebp","systemThemeCache","matches","os","getPlatform","IS_PWA","standalone","referrer","IS_TABLET_COLUMN_LAYOUT","IS_VOICE_RECORDING_SUPPORTED","mediaDevices","AudioContext","webkitAudioContext","IS_SERVICE_WORKER_SUPPORTED","Audio","canPlayType","IS_CANVAS_FILTER_SUPPORTED","getContext","IS_REQUEST_FULLSCREEN_SUPPORTED","ARE_CALLS_SUPPORTED","LAYERS_ANIMATION_NAME","TEST_VIDEO","DPR","devicePixelRatio","MASK_IMAGE_DISABLED","IS_SCROLL_PATCH_NEEDED","MESSAGE_LIST_SENSITIVE_AREA","dataUriToBlob","arr","mime","bstr","atob","u8arr","Uint8Array","blobToDataUri","reader","FileReader","readAsDataURL","blobToFile","File","lastModified","preloadImage","img","preloadVideo","volume","onloadedmetadata","createPosterForVideo","onseeked","videoWidth","videoHeight","canvas","drawImage","toDataURL","currentTime","fetchBlob","fetchFile","imgToCanvas","constructor","fileBits","rest","super","this","initials","buildInitials","prevGlobal","prepared","updateFolderManagerThrottled","throttle","onIdle","updateFolderManager","inited","getOrderedIds","orderedIdsByFolderId","getPinnedChatsCount","pinnedCountByFolderId","getChatsCount","chatsCountByFolderId","getUnreadCounters","unreadCountersByFolderId","getAllNotificationsCount","notificationsCount","addOrderedIdsCallback","addChatsCountCallback","addUnreadCountersCallback","DEBUG_startedAt","isAllFolderChanged","isMainFolderChanged","isArchivedFolderChanged","isAllFullyLoadedChanged","isAllFolderFullyLoaded","isArchivedFullyLoadedChanged","isArchivedFolderFullyLoaded","areFoldersChanged","foldersById","areChatsChanged","areUsersChanged","areNotifySettingsChanged","areNotifyExceptionsChanged","affectedFolderIds","emptyFolderIds","folderSummariesById","updateFullyLoaded","updateResults","prevAllFolderListIds","allFolderListIds","prevArchivedFolderListIds","archivedFolderListIds","changedFolders","newListIds","newPinnedIds","buildFolderSummaryFromMainList","allFolderPinnedIds","archivedFolderPinnedIds","newFoldersById","buildFolderSummary","updateFolders","newChatsById","newUsersById","newNotifySettings","newNotifyExceptions","folderSummaries","newAllFolderListIds","newArchivedFolderListIds","allIds","newFolderIds","currentSummary","chatSummariesById","newSummary","unreadMentionsCount","hasUnreadMark","joinDate","draftDate","userInfo","isListed","isArchived","isUserContact","buildChatSummary","chatSummary","folderSummary","isChatInFolder","buildChatFolderIds","currentFolderIds","folderIdsByChatId","deletedFolderIds","currentFolderIdsSet","newFolderIdsSet","currentFolderOrderedIds","chatIdsByFolderId","isOrderedListJustPatched","updateListsForChat","currentPinnedIds","wasUnreadCountersChanged","wasChatsCountChanged","pinnedCount","newPinnedCount","orderedIds","newOrderedIds","prevOrderedIds","sortedPinnedIds","allListIds","sortedNotPinnedIds","chatId1","chatId2","buildFolderOrderedIds","currentOrderedIds","currentPinnedCount","currentChatsCount","newChatsCount","currentUnreadCounters","newUnreadCounters","buildFolderUnreadCounters","newInitials","totalPrice","Intl","NumberFormat","store","hasOwnProperty","READABLE_ERROR_MESSAGES","CHAT_RESTRICTED","CHAT_WRITE_FORBIDDEN","CHAT_SEND_POLL_FORBIDDEN","CHAT_SEND_STICKERS_FORBIDDEN","CHAT_SEND_GIFS_FORBIDDEN","CHAT_SEND_MEDIA_FORBIDDEN","CHAT_LINK_EXISTS","SLOWMODE_WAIT_X","USER_BANNED_IN_CHANNEL","USER_IS_BLOCKED","YOU_BLOCKED_USER","IMAGE_PROCESS_FAILED","MEDIA_EMPTY","MEDIA_INVALID","PHOTO_EXT_INVALID","PHOTO_INVALID_DIMENSIONS","PHOTO_SAVE_FILE_INVALID","MESSAGE_DELETE_FORBIDDEN","MESSAGE_POLL_CLOSED","MESSAGE_EDIT_TIME_EXPIRED","CHAT_ADMIN_REQUIRED","PINNED_DIALOGS_TOO_MUCH","DIALOG_FILTERS_TOO_MUCH","CHANNEL_PRIVATE","MEDIA_CAPTION_TOO_LONG","ADDRESS_STREET_LINE1_INVALID","ADDRESS_STREET_LINE2_INVALID","ADDRESS_CITY_INVALID","ADDRESS_COUNTRY_INVALID","ADDRESS_POSTCODE_INVALID","ADDRESS_STATE_INVALID","REQ_INFO_NAME_INVALID","REQ_INFO_PHONE_INVALID","REQ_INFO_EMAIL_INVALID","LINK_NOT_MODIFIED","MESSAGE_TOO_LONG","SERVICE_WORKER_DISABLED","MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS","FRESH_RESET_AUTHORISATION_FORBIDDEN","BOTS_TOO_MUCH","BOT_GROUPS_BLOCKED","USERS_TOO_MUCH","USER_CHANNELS_TOO_MUCH","USER_KICKED","USER_NOT_MUTUAL_CONTACT","USER_PRIVACY_RESTRICTED","INVITE_HASH_EMPTY","INVITE_HASH_EXPIRED","INVITE_HASH_INVALID","CHANNELS_TOO_MUCH","USER_ALREADY_PARTICIPANT","SCHEDULE_DATE_INVALID","WALLPAPER_DIMENSIONS_INVALID","ADMINS_TOO_MUCH","ADMIN_RANK_EMOJI_NOT_ALLOWED","ADMIN_RANK_INVALID","FRESH_CHANGE_ADMINS_FORBIDDEN","INPUT_USER_DEACTIVATED","SHIPPING_ERRORS","getReadableErrorText","isSlowMode","textParams","extraPartIndex","errorMessage","handleErrorEvent","ErrorEvent","reason","alert","collection","member","mapValues","newByKey","object","stringKeys","orderRule","mode","compareValues","currentOrderRule","isAsc","aValue","bValue","mode1","mode2","orderRule1","orderRule2","isAsc1","isAsc2","array","array1","array2","areSortedArraysIntersecting","findIntersectionWithSet","chunkSize","cloneDeep","predicate","SUBSTITUTION_REGEX","PLURAL_OPTIONS","PLURAL_RULES","en","ar","ca","de","es","fa","fr","it","ko","ms","nl","pl","pt_BR","ru","tr","uk","uz","langPack","fallbackLangPack","currentLangCode","currentTimeFormat","getTranslation","cacheValue","cached","langString","processTranslation","importFallbackLangPack","getTranslationForLangString","translateString","remoteLangPack","remote","fetchRemoteString","withFallback","newLangPack","fetchRemote","langInfo","rtl","default","sourceLangPacks","template","optionIndex","getPluralOption","translationSlices","initialValue","processTemplate","formatInteger","SAMPLE_RATE","oggToWav","opusData","arrayBuffer","typedArray","decoderWorker","wavWorker","onmessage","buffers","buffer","page","terminate","wavBitDepth","wavSampleRate","decoderSampleRate","outputBufferSampleRate","pages","asCacheApiType","memoryCache","fetchPromises","progressCallbacks","cancellableCallbacks","mediaFormat","onProgress","callbackUniqueId","getProgressive","fetchFromCacheOrRemote","activeCallbacks","getFromMemory","cancelProgress","parentCallback","progressiveUrl","mediaPng","webpToPng","prepareMedia","mediaSource","MediaSource","streamUrl","sourceBuffer","addSourceBuffer","makeOnProgress","revokeObjectURL","endOfStream","appendBuffer","mediaData","serviceWorker","fullSize","controller","Bundles","LOAD_PROMISES","MEMORY_CACHE","Auth","Main","Extra","Calls","bundle","getDeviceToken","subscription","toJSON","endpoint","checkIfPushSupported","ServiceWorkerRegistration","Notification","permission","soundPlayedIds","playNotifySound","notificationSoundVolume","currentVolume","once","play","playNotifySoundDebounced","requestPermission","unsubscribeFromPush","dispatch","deleteDeviceToken","serviceWorkerRegistration","ready","pushManager","getSubscription","areSettingsLoaded","checkIfShouldResubscribe","userVisibleOnly","setDeviceToken","DOMException","ABORT_ERR","notifyAboutNewMessage","resultSettings","resultExceptions","loadNotificationSettings","hasFocus","checkIfShouldNotify","areNotificationsSupported","messageSender","messageAction","actionTargetMessage","targetUserIds","actionTargetUserIds","actionTargetChatId","actionTargetUsers","privateChatUserId","privateChatUser","isChat","senderName","getNotificationContent","imageHash","mediaLoader","getAvatar","badge","vibrate","onclick","close","onshow","closeMessageNotifications","notifyClientReady","PERMANENT_VERSION_KEY","AVAILABLE_VERSIONS","setPermanentWebVersion","version","hasPermanentWebVersion","PATTERN_PLACEHOLDER","DEFAULT_PATTERN","getCountryCodesByIso","phoneCodeList","country","iso2","getCountryFromPhoneNumber","possibleCountries","countryCode","codesWithPrefix","prefixes","prefix","bestMatches","formatPhoneNumber","pattern","numberWithoutCode","patterns","defaultPattern","stripped","getBestPattern","formatPhoneNumberWithCode","numberWithPlus","createMessageHash","messageList","typeOrThreadId","parseLocationHash","isType","fn","waitingTimeout","shouldRunFirst","shouldRunLast","interval","isPending","_args","setInterval","clearInterval","throttleWith","waiting","requestIdleCallback","rafPromise","fastRafCallbacks","fastRafPrimaryCallbacks","onTickEndCallbacks","onTickEndPrimaryCallbacks","beforeUnloadCallbacks","isPrimary","currentCallbacks","currentPrimaryCallbacks","onBeforeUnload","isLast","unshift","RE_NOT_LETTER","haystack","needle","needleWords","haystackLower","haystackWords","needleWord","haystackWord","promisifyRequest","oncomplete","onsuccess","onabort","defaultGetStoreFunc","defaultGetStore","dbName","storeName","dbp","userAgentData","indexedDB","databases","tryIdb","intervalId","onupgradeneeded","createObjectStore","txMode","db","transaction","objectStore","createStore","DC_IDS","hasStoredSession","withLegacy","userAuthJson","dcID","dcId","removeItem","sessionId","sessionJson","customStore","idb","idbKeys","getAllKeys","items","openCursor","continue","eachCursor","isInitialized","HEX_COLOR_REGEX","RGB_VARIABLES","lerp","start","end","interpolationRatio","colors","themeColors","property","hexToRgb","hex","r","g","applyColorAnimationStep","startIndex","endIndex","propertyColors","withAnimation","isDarkTheme","shouldAnimate","startAt","themeColorTag","querySelector","transition","formatFixedNumber","formatIntegerCompact","views","getFirstLetters","phrase","word","EMPTY_IMAGE_DATA_URI","initWebpWorker","wasmReady","requests","getDecodePromise","ImageData","putImageData","toBlob","createPng","webpToPngBase64","pngBlob","handleLibWebpMessage","WEBSYNC_URLS","WEBSYNC_VERSION","WEBSYNC_KEY","getTs","lastTimeout","authed","currentTs","canRedirect","ts","script","removeElement","URLSearchParams","saveSync","clearWebsync","IS_LANDSCAPE","isLandscape","initialHeight","currentWindowSize","updateSizes","isRefreshDisabled","handleResize","visualViewport","pageTop","vh","getIsKeyboardVisible","disableRefresh","enableRefresh","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","m","getter","__esModule","getPrototypeOf","obj","ns","create","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","chunkId","promises","u","miniCssF","globalThis","Function","done","needAttach","scripts","getElementsByTagName","charset","nc","onScriptComplete","doneFns","bind","head","toStringTag","scriptUrl","importScripts","currentScript","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","linkTag","errorType","realHref","createStylesheet","miniCss","baseURI","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","handleWorkerMessage","registrations","getRegistrations","unregister","register","hasErrorKey","INITIAL_STATE","isLeftColumnShown","phoneCodes","general","groupCalls","activeChatFolder","recentEmojis","recent","greeting","featured","emojiKeywords","saved","inlineBots","byUsername","topPeers","topInlineBots","audioPlayer","playbackRate","notifications","dialogs","messageSendKeyCombo","autoLoadFileMaxSizeMb","shouldSuggestStickers","isConnectionStatusMinimized","light","isBlurred","patternColor","dark","activeReactions","shouldShowContextMenuHint","updateCacheThrottled","updateCache","unsubscribeFromBeforeUnload","isCaching","setupCaching","clearCaching","reducedGlobal","reduceShowChatInfo","reduceUsers","reduceChats","reduceMessages","recentlyFoundChatIds","reduceSettings","reduceChatFolders","reduceGroupCalls","reduceAvailableReactions","currentChatId","visibleUserIds","idsToSave","currentChat","mainThread","activeGroupCallId","isGroupCallPanelHidden","isFallbackConfirmOpen","initialState","time","timeEnd","shouldAutoDownloadMediaFromContacts","shouldAutoDownloadMediaInPrivateChats","shouldAutoDownloadMediaInGroups","shouldAutoDownloadMediaInChannels","shouldAutoPlayVideos","shouldAutoPlayGifs","migrateCache","parsedMessageList","readCache","loadCache","STORAGE_KEY","tabKey","SITE_FONTS","preloadFonts","font","fonts","load","preloadAvatars","preloadTasks","main","reactionThumbsPath","telegramLogoPath","authCode","monkeyPath","authPassword","background","hasCustomBackground","hasCustomBackgroundColor","isRightColumnShown","leftColumnWidth","setIsUiReady","isReady","markReady","shouldRenderMask","safePreload","translation","setTranslation","getSuggestedLanguage","suggestedLanguage","MENU_HIDING_DURATION","inputRef","setFilter","filteredList","setFilteredList","updateFilter","filterValue","defaultName","getFilteredList","prevPhoneCodeList","handleInput","handleInputKeyDown","DropdownMenu","handleTrigger","select","formEl","getElementById","scrollTo","top","scrollHeight","behavior","inputValue","Spinner","MenuItem","isPreloadInitiated","setAuthPhoneNumber","setAuthRememberMe","loadNearestCountry","loadCountryList","clearAuthError","goToAuthQrCode","continueText","useLangString","setCountry","setPhoneNumber","isTouched","setIsTouched","lastSelection","setLastSelection","markIsLoading","unmarkIsLoading","fullNumber","canSubmit","parseFullNumber","newFullNumber","suggestedCountry","selectedCountry","handleLangChange","setSelectionRange","isJustPastedRef","handlePaste","handleCountryChange","handlePhoneNumberChange","selectionStart","selectionEnd","shouldFixSafariAutoComplete","handleKeepSessionChange","isAuthReady","onSubmit","InputText","Checkbox","Button","Loading","AuthCode","useModuleLoader","AuthPassword","AuthRegister","G","H","B","QrCreator","h","J","level","O","C","lineTo","arcTo","moveTo","z","v","N","K","P","fillStyle","fillRect","left","beginPath","q","D","E","R","I","F","colorStops","createLinearGradient","apply","createRadialGradient","addColorStop","A","minVersion","maxVersion","ecLevel","radius","quiet","HTMLCanvasElement","clearRect","write","S","multiply","L","M","Q","returnToAuthPhoneNumber","qrCodeRef","token","isMobile","windowSize","AuthQrCode","appInactivePath","renderMain","disconnect","markInactive","TeactDOM"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.4fd1870c45fc2448fc6a.css b/dist/main.4fd1870c45fc2448fc6a.css new file mode 100644 index 000000000..c7659025e --- /dev/null +++ b/dist/main.4fd1870c45fc2448fc6a.css @@ -0,0 +1,164 @@ +.Spoiler--concealed{cursor:pointer;background-image:url(spoiler-dots-black.b2dd6e4f4a5a520c4ccd..png);background-size:auto min(100%,1.125rem);border-radius:.5rem}html.theme-dark .Spoiler--concealed,html.theme-light .ListItem.selected .Spoiler--concealed,.ActionMessage .Spoiler--concealed,.MediaViewerFooter .Spoiler--concealed{background-image:url(spoiler-dots-white.ab45f83c6ba729884808..png)}.emoji-only .Spoiler--concealed{background-size:auto 1.125rem}.Spoiler--animated{animation:pulse-opacity-light 1.75s linear infinite}.Spoiler__content{opacity:1;transition:opacity 250ms ease}.Spoiler--concealed .Spoiler__content{-webkit-user-select:none;user-select:none;opacity:0}@keyframes pulse-opacity-light{25%{opacity:1}50%{opacity:.25}75%{opacity:1}} +.Link{color:inherit}.Link:hover{color:inherit}.Link:hover.GroupCallLink{text-decoration:none} +#UiLoader{height:100%}@media(max-width: 600px){#UiLoader{height:calc(var(--vh, 1vh)*100)}}#UiLoader .mask{position:fixed;top:0;left:0;right:0;margin:0 auto;width:100%;height:100%;z-index:var(--z-ui-loader-mask);display:flex}@media(min-width: 600px){#UiLoader .mask{display:grid;grid-template-columns:auto 1fr;grid-template-rows:100%}}#UiLoader .mask .left{flex:1;background:var(--color-background);min-width:12rem;width:33vw;max-width:26.5rem}@media(min-width: 926px){#UiLoader .mask .left{max-width:40vw}}@media(min-width: 1276px){#UiLoader .mask .left{width:25vw;max-width:33vw}}@media(max-width: 1275px){#UiLoader .mask .left{flex:2}}@media(max-width: 925px){#UiLoader .mask .left{width:26.5rem !important}}@media(max-width: 600px){#UiLoader .mask .left{max-width:none;width:100vw !important}}#UiLoader .mask .middle{flex:3;border-left:1px solid var(--color-borders);border-right:1px solid var(--color-borders);position:relative;z-index:1;overflow:hidden}#UiLoader .mask .middle::before{content:"";display:block;position:absolute;top:0;left:0;bottom:0;right:0;background:no-repeat center;background-size:cover;z-index:-1;transform-origin:left center}.theme-dark body.initial #UiLoader .mask .middle::before{background-color:#0f0f0f}.theme-light body.initial #UiLoader .mask .middle::before,body:not(.initial) #UiLoader .mask .middle::before{background-image:url(chat-bg.f607e788298d8a7de37a..jpg)}#UiLoader .mask .middle.with-right-column::before{transform:scale(0.67)}@media screen and (min-width: 1276px){#UiLoader .mask .middle::before{margin:-16rem -5rem -20rem 0}}#UiLoader .mask .middle.custom-bg-image::before{margin:-1rem;background-image:none !important}@media(max-width: 1275px){#UiLoader .mask .middle{flex:3;border-right:none}}@media(max-width: 600px){#UiLoader .mask .middle{display:none}}#UiLoader .mask .right{position:absolute;top:0;right:0;z-index:1;height:100%;width:var(--right-column-width);border-left:1px solid var(--color-borders);background:var(--color-background)}#UiLoader .blank{flex:1;background:var(--color-background)} +.Spinner{--spinner-size: 2rem;position:relative;display:flex;align-items:center;justify-content:center;width:var(--spinner-size);height:var(--spinner-size)}.Spinner>div{position:absolute;top:0;left:0;right:0;bottom:0;background-repeat:no-repeat;background-size:100%;animation-name:spin;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear}.Spinner.with-background::before{content:"";position:absolute;left:-0.125rem;top:-0.125rem;bottom:-0.125rem;right:-0.125rem;border-radius:50%}.Spinner.with-background.bg-dark::before{background:rgba(0,0,0,.25)}.Spinner.with-background.bg-light::before{background:rgba(255,255,255,.4)}.Spinner.white>div{background-image:var(--spinner-white-data)}.Spinner.white.with-background>div{background-image:var(--spinner-white-thin-data)}.Spinner.blue>div{background-image:var(--spinner-blue-data)}.theme-dark .Spinner.blue>div{background-image:var(--spinner-dark-blue-data)}.Spinner.black>div{background-image:var(--spinner-black-data)}.Spinner.green>div{background-image:var(--spinner-green-data)}.Spinner.gray>div{background-image:var(--spinner-gray-data)}.Spinner.yellow>div{background-image:var(--spinner-yellow-data)}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} +@keyframes ripple-animation{from{transform:scale(0);opacity:1}50%{opacity:1}to{opacity:0;transform:scale(2)}}.ripple-container{position:absolute;top:0;left:0;bottom:0;right:0}body.animation-level-0 .ripple-container{display:none}.ripple-container span{position:absolute;display:block;background-color:var(--ripple-color, rgba(0, 0, 0, 0.08));border-radius:50%;transform:scale(0);animation:ripple-animation 700ms} +.Button{outline:none !important;display:flex;align-items:center;justify-content:center;width:100%;height:3.5rem;border:0;border-radius:var(--border-radius-default);background-color:transparent;background-size:cover;padding:.625rem;color:#fff;line-height:1.2;cursor:pointer;text-transform:uppercase;flex-shrink:0;position:relative;overflow:hidden;transition:background-color .15s,color .15s;text-decoration:none !important}.Button:active,.Button.clicked,body.animation-level-0 .Button{transition:none !important}.Button.disabled{opacity:.5 !important;cursor:default;pointer-events:none}.Button.round{width:3.5rem;border-radius:50%}.Button.round i{font-size:1.5rem}.Button.primary{background-color:var(--color-primary);color:var(--color-white);--ripple-color: rgba(0, 0, 0, 0.08)}.Button.primary:not(.disabled):not(:disabled):active,.Button.primary:not(.disabled):not(:disabled).active,.Button.primary:not(.disabled):not(:disabled):focus{background-color:var(--color-primary-shade)}@media(hover: hover){.Button.primary:not(.disabled):not(:disabled):hover{background-color:var(--color-primary-shade)}}body.animation-level-0 .Button.primary:not(.disabled):not(:disabled):active{background-color:var(--color-primary-shade-darker)}.Button.secondary{background-color:var(--color-background);color:rgba(var(--color-text-secondary-rgb), 0.75);--ripple-color: rgba(0, 0, 0, 0.08)}.Button.secondary:not(.disabled):not(:disabled):active,.Button.secondary:not(.disabled):not(:disabled).active,.Button.secondary:not(.disabled):not(:disabled):focus{background-color:var(--color-primary);color:#fff}@media(hover: hover){.Button.secondary:not(.disabled):not(:disabled):hover{background-color:var(--color-primary);color:#fff}}body.animation-level-0 .Button.secondary:not(.disabled):not(:disabled):active{background-color:var(--color-primary-shade)}.Button.gray{background-color:var(--color-background);color:var(--color-text-secondary);--ripple-color: rgba(0, 0, 0, 0.08)}.Button.gray:not(.disabled):not(:disabled):active,.Button.gray:not(.disabled):not(:disabled).active,.Button.gray:not(.disabled):not(:disabled):focus{color:var(--color-primary)}@media(hover: hover){.Button.gray:not(.disabled):not(:disabled):hover{color:var(--color-primary)}}body.animation-level-0 .Button.gray:not(.disabled):not(:disabled):active{background-color:var(--color-chat-hover)}.Button.danger{background-color:var(--color-background);color:var(--color-error);--ripple-color: rgba(var(--color-error-rgb), 0.16)}.Button.danger:not(.disabled):not(:disabled):active,.Button.danger:not(.disabled):not(:disabled).active,.Button.danger:not(.disabled):not(:disabled):focus{background-color:var(--color-error);color:var(--color-white)}@media(hover: hover){.Button.danger:not(.disabled):not(:disabled):hover{background-color:var(--color-error);color:var(--color-white)}}body.animation-level-0 .Button.danger:not(.disabled):not(:disabled):active{background-color:var(--color-error-shade)}.Button.text{background-color:transparent}.Button.text.primary{color:var(--color-primary);background-color:transparent}.Button.text.primary:not(.disabled):not(:disabled):active,.Button.text.primary:not(.disabled):not(:disabled).active,.Button.text.primary:not(.disabled):not(:disabled):focus{background-color:rgba(var(--color-primary-shade-rgb), 0.08)}@media(hover: hover){.Button.text.primary:not(.disabled):not(:disabled):hover{background-color:rgba(var(--color-primary-shade-rgb), 0.08)}}body.animation-level-0 .Button.text.primary:not(.disabled):not(:disabled):active{background-color:rgba(var(--color-primary-shade-rgb), 0.16)}.Button.text.secondary{background-color:transparent;color:var(--color-text-secondary)}.Button.text.danger:not(.disabled):not(:disabled):active,.Button.text.danger:not(.disabled):not(:disabled).active,.Button.text.danger:not(.disabled):not(:disabled):focus{background-color:rgba(var(--color-error-rgb), 0.08);color:var(--color-error)}@media(hover: hover){.Button.text.danger:not(.disabled):not(:disabled):hover{background-color:rgba(var(--color-error-rgb), 0.08);color:var(--color-error)}}body.animation-level-0 .Button.text.danger:not(.disabled):not(:disabled):active{background-color:rgba(var(--color-error-rgb), 0.16)}.Button.faded{opacity:.8}.Button.faded:not(.disabled):not(:disabled):active,.Button.faded:not(.disabled):not(:disabled).active,.Button.faded:not(.disabled):not(:disabled):focus{opacity:1}@media(hover: hover){.Button.faded:not(.disabled):not(:disabled):hover{opacity:1}}.Button.faded.activated{opacity:1}.Button.translucent{background-color:transparent;color:var(--color-text-secondary);--ripple-color: var(--color-interactive-element-hover)}.Button.translucent:not(.disabled):not(:disabled):active,.Button.translucent:not(.disabled):not(:disabled).active,.Button.translucent:not(.disabled):not(:disabled):focus{background-color:var(--color-interactive-element-hover)}@media(hover: hover){.Button.translucent:not(.disabled):not(:disabled):hover{background-color:var(--color-interactive-element-hover)}}body.animation-level-0 .Button.translucent:not(.disabled):not(:disabled):active{background-color:rgba(var(--color-text-secondary-rgb), 0.16)}.Button.translucent.activated{color:var(--color-primary)}.Button.translucent-white{background-color:transparent;color:rgba(255,255,255,.5);--ripple-color: rgba(255, 255, 255, 0.08)}.Button.translucent-white:not(.disabled):not(:disabled):active,.Button.translucent-white:not(.disabled):not(:disabled).active,.Button.translucent-white:not(.disabled):not(:disabled):focus{background-color:rgba(255,255,255,.08);color:#fff}@media(hover: hover){.Button.translucent-white:not(.disabled):not(:disabled):hover{background-color:rgba(255,255,255,.08);color:#fff}}body.animation-level-0 .Button.translucent-white:not(.disabled):not(:disabled):active{background-color:rgba(255,255,255,.16)}.Button.translucent-black{background-color:transparent;color:rgba(0,0,0,.8);--ripple-color: rgba(0, 0, 0, 0.08)}.Button.translucent-black:not(.disabled):not(:disabled):active,.Button.translucent-black:not(.disabled):not(:disabled).active,.Button.translucent-black:not(.disabled):not(:disabled):focus{background-color:rgba(0,0,0,.08)}@media(hover: hover){.Button.translucent-black:not(.disabled):not(:disabled):hover{background-color:rgba(0,0,0,.08)}}body.animation-level-0 .Button.translucent-black:not(.disabled):not(:disabled):active{background-color:rgba(0,0,0,.16)}.Button.dark{background-color:rgba(0,0,0,.75);color:#fff;--ripple-color: rgba(255, 255, 255, 0.08)}.Button.dark:not(.disabled):not(:disabled):active,.Button.dark:not(.disabled):not(:disabled).active,.Button.dark:not(.disabled):not(:disabled):focus{background-color:rgba(0,0,0,.85);color:#fff}@media(hover: hover){.Button.dark:not(.disabled):not(:disabled):hover{background-color:rgba(0,0,0,.85);color:#fff}}body.animation-level-0 .Button.dark:not(.disabled):not(:disabled):active{background-color:rgba(0,0,0,.95)}.Button.smaller{height:2.75rem;padding:.3125rem}.Button.smaller.round{width:2.75rem}.Button.smaller.pill{height:2.5rem;border-radius:1.25rem;padding:.3125rem 1rem}.Button.smaller.with-icon{padding-left:.75rem;padding-right:1.25rem}.Button.smaller.with-icon i{font-size:1.5rem;margin-right:.5rem}.Button.smaller.with-icon[dir=rtl]{padding-left:1.25rem;padding-right:.75rem}.Button.smaller.with-icon[dir=rtl] i{margin-left:.5rem;margin-right:0}@media(max-width: 600px){.Button.smaller{height:2.5rem}.Button.smaller.round{width:2.5rem}}.Button.tiny{height:2.25rem;padding:.4375rem;border-radius:var(--border-radius-default-small);font-size:.875rem;font-weight:500}.Button.tiny.round{width:2.25rem;height:2.25rem;border-radius:50%}.Button.tiny i{font-size:1.25rem}.Button.tiny.pill{height:2rem;border-radius:1rem;padding:.3125rem 1rem;font-size:1rem}.Button.fluid{padding-left:1.75rem;padding-right:1.75rem;width:auto}.Button.fluid.tiny{padding-left:1.375rem;padding-right:1.375rem}.Button.pill{border-radius:1.75rem;padding-left:1.75rem;padding-right:1.75rem;text-transform:none}.Button.loading{position:relative;pointer-events:none}.Button.loading .Spinner{position:absolute;right:.875rem;top:.875rem;--spinner-size: 1.8125rem}.Button .emoji{vertical-align:-3px} +.Checkbox{display:block;position:relative;padding-left:4.5rem;text-align:left;margin-bottom:1.5rem;line-height:1.5rem;cursor:pointer}.Checkbox.disabled{pointer-events:none;opacity:.5}.Checkbox.round .Checkbox-main::before{border-radius:50%}.Checkbox.round .Checkbox-main::after{background:var(--color-primary) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiLz48L3N2Zz4=) no-repeat 50% 50%;background-size:12px;border-radius:50%}.Checkbox.loading .Checkbox-main::before,.Checkbox.loading .Checkbox-main::after{opacity:0 !important}.Checkbox.loading .Spinner{position:absolute;left:.375rem;top:.125rem;opacity:0;animation:fade-in .2s ease forwards;--spinner-size: 1.25rem}.Checkbox.blocking input:not(:checked)~.Checkbox-main::before{border-color:var(--color-error)}.Checkbox.blocking input:not(:checked)~.Checkbox-main::after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMjQgMCAyNCAyNCAwIDI0Ii8+CiAgICA8cGF0aCBmaWxsPSIjZTUzOTM1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOCwzIEMxOS42NTY4NTQyLDMgMjEsNC4zNDMxNDU3NSAyMSw2IEwyMSwxOCBDMjEsMTkuNjU2ODU0MiAxOS42NTY4NTQyLDIxIDE4LDIxIEw2LDIxIEM0LjM0MzE0NTc1LDIxIDMsMTkuNjU2ODU0MiAzLDE4IEwzLDYgQzMsNC4zNDMxNDU3NSA0LjM0MzE0NTc1LDMgNiwzIEwxOCwzIFogTTE2LDExIEw4LDExIEM3LjQ0NzcxNTI1LDExIDcsMTEuNDQ3NzE1MyA3LDEyIEM3LDEyLjU1MjI4NDcgNy40NDc3MTUyNSwxMyA4LDEzIEwxNiwxMyBDMTYuNTUyMjg0NywxMyAxNywxMi41NTIyODQ3IDE3LDEyIEMxNywxMS40NDc3MTUzIDE2LjU1MjI4NDcsMTEgMTYsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==);opacity:1;background-size:1.375rem;background-position:-0.125rem -0.125rem}.Checkbox input{position:absolute;z-index:var(--z-below);opacity:0}.Checkbox .Checkbox-main::before,.Checkbox .Checkbox-main::after{content:"";display:block;position:absolute;left:1.1875rem;top:.1875rem;width:1.125rem;height:1.125rem}.Checkbox .Checkbox-main::before{border:2px solid var(--color-borders-input);border-radius:.25rem;background-color:var(--color-background);transition:border-color .1s ease,background-color .1s ease}.Checkbox .Checkbox-main::after{background:center no-repeat url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==);background-size:.875rem;opacity:0;transition:opacity .1s ease}.Checkbox .Checkbox-main .label{display:block;text-align:initial}.Checkbox .Checkbox-main .subLabel{display:block;font-size:.875rem;line-height:1rem;color:var(--color-text-secondary)}.Checkbox input:checked~.Checkbox-main::before{border-color:var(--color-primary);background-color:var(--color-primary)}.Checkbox input:checked~.Checkbox-main::after{opacity:1}.Checkbox[dir=rtl]{padding-left:0;padding-right:4.5rem}.Checkbox[dir=rtl].loading .Spinner{left:auto;right:.375rem}.Checkbox[dir=rtl] .label,.Checkbox[dir=rtl] .subLabel{text-align:right}.Checkbox[dir=rtl] .Checkbox-main::before,.Checkbox[dir=rtl] .Checkbox-main::after{left:auto;right:1.1875rem} +.Loading{display:flex;height:100%;align-items:center;justify-content:center}.Loading.interactive{cursor:pointer}.Loading .Spinner{--spinner-size: 2.75rem} +.Menu.fluid .bubble{min-width:13.5rem;width:auto}.Menu .backdrop{position:fixed;left:-100vw;right:-100vw;top:-100vh;bottom:-100vh;z-index:var(--z-menu-backdrop)}.Menu .bubble{overflow:hidden;display:block;list-style:none;padding:.5rem 0;margin:0;position:absolute;background-color:var(--color-background);box-shadow:0 .25rem .5rem .125rem var(--color-default-shadow);border-radius:var(--border-radius-default);min-width:13.5rem;z-index:var(--z-menu-bubble);overscroll-behavior:contain;transform:scale(0.5);transition:opacity .2s cubic-bezier(0.2, 0, 0.2, 1),transform .2s cubic-bezier(0.2, 0, 0.2, 1) !important;--offset-y: calc(100% + 0.5rem);--offset-x: 0}.Menu .bubble.open{transform:scale(1)}.Menu .bubble.closing{transition:opacity .2s ease-in,transform .2s ease-in !important}body.animation-level-0 .Menu .bubble{transform:none !important;transition:opacity .15s !important}body.has-open-dialog .Menu .bubble{transition:none !important}.Menu .bubble.top{top:var(--offset-y)}.Menu .bubble.bottom{bottom:var(--offset-y)}.Menu .bubble.left{left:var(--offset-x)}.Menu .bubble.right{right:var(--offset-x)}.Menu .bubble.with-footer{padding-bottom:0}.Menu .footer{padding:.5rem 0;background:var(--color-chat-hover);color:var(--color-text-secondary);font-size:.8125rem;text-align:center} +.DropdownMenu{position:relative} +.MenuItem{width:100%;background:none;border:none !important;box-shadow:none !important;outline:none !important;display:flex;padding:.75rem 1rem;position:relative;overflow:hidden;line-height:1.5rem;white-space:nowrap;color:var(--color-text);--ripple-color: rgba(0, 0, 0, 0.08);cursor:pointer;unicode-bidi:plaintext}@media(hover: hover){.MenuItem:hover,.MenuItem:focus{background-color:var(--color-chat-hover);text-decoration:none;color:inherit}}@media(max-width: 600px){.MenuItem:focus,.MenuItem:hover,.MenuItem:active{text-decoration:none;color:inherit}.MenuItem:active{background-color:var(--color-chat-hover)}}.MenuItem i{font-size:1.5rem;margin-right:2rem;color:var(--color-text-secondary)}.MenuItem .menu-item-name{margin-right:2rem}.MenuItem .menu-item-name.capitalize{text-transform:capitalize}.MenuItem.disabled{opacity:.5 !important;cursor:default !important}.MenuItem.destructive{color:var(--color-error)}.MenuItem.destructive i{color:inherit}.MenuItem:not(.has-ripple):not(.disabled):active{background-color:var(--color-item-active);transition:none !important}.MenuItem>.Switcher{margin-left:auto}.MenuItem[dir=rtl] i{margin-left:2rem;margin-right:0}.MenuItem[dir=rtl] .menu-item-name{margin-left:2rem;margin-right:0}.MenuItem[dir=rtl]>.Switcher{margin-left:0;margin-right:auto} +.CountryCodeInput .input-group{cursor:pointer;z-index:var(--z-country-code-input-group)}.CountryCodeInput .input-group .Spinner{position:absolute;top:1rem;right:.75rem;opacity:.5;--spinner-size: 1.5rem}.CountryCodeInput .input-group .css-icon-down{position:absolute;top:1.125rem;right:1rem;width:.75rem;height:.75rem;border:2px solid var(--color-text-secondary);border-top:0;border-left:0;transform:scaleY(1) rotate(45deg);transition:color .2s ease,transform .2s ease,top .2s ease}.CountryCodeInput .input-group .css-icon-down.open{border-color:var(--color-primary);transform:scaleY(-1) rotate(45deg);top:1.5rem}.CountryCodeInput .bubble{width:100%;max-height:23.5rem;overflow-y:auto;transform-origin:top center !important;transform:scale(0.95)}.CountryCodeInput .bubble.open{transform:scaleY(1)}.CountryCodeInput .MenuItem button{display:flex;align-items:center}.CountryCodeInput .MenuItem.no-results button{justify-content:center;padding:.5rem 1rem}.CountryCodeInput .MenuItem.no-results button span{font-size:.875rem}.CountryCodeInput .country-flag{font-size:2rem;margin-right:2rem}.CountryCodeInput .country-flag .emoji{width:2rem;height:2rem;display:inline-block;vertical-align:4px;margin:-0.5rem .125rem}.CountryCodeInput .country-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:1rem;text-align:left}.CountryCodeInput .country-code{margin-left:auto;opacity:.5} +.auth-form{width:100%;max-width:25.5rem;margin:0 auto;padding:6rem 1rem 1rem;text-align:center}@media(min-width: 600px)and (min-height: 450px){.auth-form{padding:6.8125rem 1.5rem 1.5rem}.auth-form.qr{padding-top:4rem}}.auth-form #logo,.auth-form .AvatarEditable label{display:block;margin-left:auto;margin-right:auto;width:7.5rem;height:7.5rem;margin-bottom:1.75rem}@media(min-width: 600px)and (min-height: 450px){.auth-form #logo,.auth-form .AvatarEditable label{width:10rem;height:10rem;margin-bottom:2.5rem}}.auth-form #logo{background:url(telegram-logo.1b2bb5b107f046ea9325..svg) center no-repeat;background-size:100%}.auth-form h2{font-size:1.25rem;line-height:1}@media(min-width: 600px){.auth-form h2{font-size:2rem;line-height:1.5}}.auth-form .note{font-size:.875rem;line-height:1.35;margin-bottom:2.5rem;color:var(--color-text-secondary)}@media(min-width: 600px){.auth-form .note{font-size:1rem;margin-bottom:3rem}}#auth-registration-form,#auth-phone-number-form,#auth-code-form,#auth-password-form,#auth-qr-form{height:100%;overflow-y:auto}#auth-phone-number-form form{min-height:26.25rem}#auth-phone-number-form .Button{margin-top:2.75rem}#auth-phone-number-form .Button+.Button{margin-top:1rem}#auth-code-form h2,#auth-password-form h2{display:flex;align-items:center;justify-content:center}.auth-number-edit{width:2.5rem;height:2.5rem;padding:.5rem;font-size:1.5rem;color:var(--color-text-secondary);opacity:.75;display:flex;align-items:center;justify-content:center;cursor:pointer}.auth-number-edit:hover,.auth-number-edit:focus{opacity:1}#auth-qr-form .qr-container,#auth-qr-form .qr-loading{height:280px}#auth-qr-form .qr-container{opacity:1;transform:scale(1);transition:transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1),opacity 300ms}#auth-qr-form .qr-container.pre-animate{opacity:.5;transform:scale(0.8)}#auth-qr-form .qr-container canvas{padding:.625rem;border-radius:var(--border-radius-default);background:var(--color-white);margin-top:-0.625rem}#auth-qr-form h3{margin:1.5rem 0 1rem 0}#auth-qr-form ol{list-style:none;counter-reset:item;padding:0 1.75rem}#auth-qr-form ol li{counter-increment:item;text-align:left;margin:.75rem 0;display:flex}#auth-qr-form ol li::before{content:counter(item);display:flex;justify-content:center;align-items:center;min-width:1.375rem;height:1.375rem;padding:0;margin:0 .75rem 0 0;background:var(--color-primary);border-radius:50%;font-size:smaller;color:#fff}#sign-in-password{word-break:normal !important} +#AppInactive{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}#AppInactive .content{max-width:28rem;margin:auto;padding:1.5rem;text-align:center}#AppInactive .title{margin-top:1rem}#AppInactive .description{color:var(--color-text-secondary);font-size:.875rem}#AppInactive img{width:100%;max-width:20rem}#AppInactive .Button{margin-top:1rem} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.499af208fa04aa805317..woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.6b69287db14836e8ccee..woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.350ec982325895563ada..woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.af30acd9d70ade5b828d..woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.62afd8a72052ca925aaf..woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.009379f5feecd3ef689a..woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxKKTU1Kg.465390c6e54c60f4a15f..woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.66efaee062df58309edc..woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.3e1bb90afe5eb4a94c5f..woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.acd64c8bf32762464b8f..woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.cab892ae9aa422233ea4..woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.01bafbfbc1e4ebe0139d..woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.d3c211af53a789d2f9fd..woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.324b1e6d0f5ae7c6ab42..woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */ +@font-face { + font-family: Vazir; + src: url(Vazir-Regular-WOL.c7b24ace258717d9a320..woff2) format('woff2'), + url(Vazir-Regular-WOL.ed6379fdf8108ff3bc5b..woff) format('woff'); + font-weight: normal; + font-display:swap; + unicode-range:U+0627-06FF; +} + +/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */ +@font-face { + font-family: Vazir; + src: url(Vazir-Medium-WOL.2f98e6f8ba81b54a0f96..woff2) format('woff2'), + url(Vazir-Medium-WOL.f4d87915577d64b321c6..woff) format('woff'); + font-weight: 500; + font-display:swap; + unicode-range: U+0600-06FF; +} + +*,*::before,*::after{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)}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0}[tabindex="-1"]:focus{outline:none !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}p,ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}dfn{font-style:italic}dt,b,strong{font-weight:500}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:var(--color-links);text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font:.9375rem/1.25 "Courier","Courier New","Nimbus Mono L","Courier 10 Pitch","FreeMono",sans-serif-monospace,monospace;font-size-adjust:.43}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color: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}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none !important}:root{--color-background: #ffffff;--color-background-selected: #f4f4f5;--color-background-secondary: #f4f4f5;--color-background-secondary-accent: #e4e4e5;--color-background-own: #eeffde;--color-background-own-selected: color.adjust($color-light-green, -10%);--color-text: #000000;--color-text-lighter: #2e3939;--color-text-secondary: #707579;--color-text-secondary-rgb: 112, 117, 121;--color-text-secondary-apple: #8a8a90;--color-text-meta: #686c72;--color-text-meta-rgb: 104, 108, 114;--color-text-meta-colored: #4fae4e;--color-text-meta-apple: #8c8c91;--color-text-green: #4fae4e;--color-text-green-rgb: 79, 174, 78;--color-borders: #dadce0;--color-borders-input: #dadce0;--color-dividers: #c8c6cc;--color-webpage-initial-background: #2e3939;--color-interactive-active: var(--color-primary);--color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);--color-composer-button: #707579CC;--color-primary: #3390ec;--color-primary-shade: #2f84d9;--color-primary-shade-darker: #2b79c6;--color-primary-shade-rgb: 47, 132, 217;--color-primary-opacity: rgba(var(--color-primary), 0.5);--color-green: #00c73e;--color-green-darker: #00a734;--color-error: #e53935;--color-error-shade: #d33431;--color-error-rgb: 229, 57, 53;--color-warning: #fb8c00;--color-yellow: #fdd764;--color-links: #3390ec;--color-own-links: #ffffff;--color-placeholders: #a2acb4;--color-pinned: #ffffff;--color-code: #4a729a;--color-code-bg: rgba(112, 117, 121, 0.08);--color-code-own: #3c7940;--color-code-own-bg: rgba(112, 117, 121, 0.08);--color-accent-own: #4fae4e;--color-message-meta-own: #4fae4e;--color-message-reaction: $color-message-reaction;--color-message-reaction-hover: $color-message-reaction-hover;--color-message-reaction-own: $color-message-reaction-own;--color-message-reaction-hover-own: $color-message-reaction-own-hover;--color-reply-hover: #f4f4f4;--color-reply-active: #e8e9ea;--color-reply-own-hover: #dbf5cd;--color-reply-own-active: #c8ecbb;--color-background-own-apple: #dcf8c5;--color-reply-own-hover-apple: #cbefb7;--color-reply-own-active-apple: #bae6a8;--color-white: #ffffff;--color-gray: #c4c9cc;--color-chat-hover: #f4f4f5;--color-chat-active: #3390ec;--color-item-active: #ededed;--color-selection-highlight: #3993fb;--color-selection-highlight-emoji: rgba(57, 147, 251, 0.7);--color-user-1: #e17076;--color-user-2: #7bc862;--color-user-4: #65aadd;--color-user-5: #a695e7;--color-user-6: #ee7aae;--color-user-7: #6ec9cb;--color-user-8: #faa774;--color-default-shadow: #72727240;--color-light-shadow: #7272722b;--vh: 1vh;--border-radius-default: 0.75rem;--border-radius-default-small: 0.625rem;--border-radius-default-tiny: 0.375rem;--border-radius-messages: 0.75rem;--border-radius-messages-small: 0.375rem;--messages-container-width: 45.5rem;--right-column-width: 26.5rem;--header-height: 3.5rem;--symbol-menu-width: 26.25rem;--symbol-menu-height: 23.25rem;--symbol-menu-footer-height: 3rem;--z-ui-loader-mask: 2000;--z-notification: 1000;--z-right-column: 900;--z-header-menu: 990;--z-header-menu-backdrop: 980;--z-modal: 1000;--z-media-viewer: 1500;--z-drop-area: 55;--z-animation-fade: 50;--z-menu-bubble: 21;--z-menu-backdrop: 20;--z-message-highlighted: 14;--z-message-context-menu: 13;--z-scroll-down-button: 12;--z-mobile-search: 12;--z-middle-header: 11;--z-middle-footer: 11;--z-country-code-input-group: 10;--z-message-select-control: 9;--z-message-select-area: 8;--z-sticky-date: 9;--z-register-add-avatar: 5;--z-media-viewer-head: 3;--z-resize-handle: 2;--z-below: -1;--spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);--spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);--spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);--spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);--spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);--spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);--spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);--spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);--drag-target-border: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%23DDDFE0%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--drag-target-border-hovered: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%2363A2E3%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--layer-blackout-opacity: 0.3;--layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);--select-transition: 200ms ease-out}@media(min-width: 1276px)and (max-width: 1920px){:root{--right-column-width: 25vw}}@media(min-width: 1921px){:root{--messages-container-width: 50vw}}@media(max-width: 600px){:root{--right-column-width: 100vw;--symbol-menu-width: 100vw;--symbol-menu-height: 14.6875rem}}:root body.is-ios{--layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1)}:root body.is-android{--layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);--slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:2rem !important}.mt-5,.my-5{margin-top:2rem !important}.mr-5,.mx-5{margin-right:2rem !important}.mb-5,.my-5{margin-bottom:2rem !important}.ml-5,.mx-5{margin-left:2rem !important}.m-6{margin:3rem !important}.mt-6,.my-6{margin-top:3rem !important}.mr-6,.mx-6{margin-right:3rem !important}.mb-6,.my-6{margin-bottom:3rem !important}.ml-6,.mx-6{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:2rem !important}.pt-5,.py-5{padding-top:2rem !important}.pr-5,.px-5{padding-right:2rem !important}.pb-5,.py-5{padding-bottom:2rem !important}.pl-5,.px-5{padding-left:2rem !important}.p-6{padding:3rem !important}.pt-6,.py-6{padding-top:3rem !important}.pr-6,.px-6{padding-right:3rem !important}.pb-6,.py-6{padding-bottom:3rem !important}.pl-6,.px-6{padding-left:3rem !important}.input-group{position:relative;margin-bottom:1.5rem}.input-group label{display:block;padding:0 .25rem;position:absolute;left:.75rem;top:.9375rem;background-color:var(--color-background);font-size:1rem;font-weight:400;color:var(--color-placeholders);transition:transform .15s ease-out,color .15s ease-out;cursor:text;pointer-events:none;transform-origin:left center;white-space:nowrap}.input-group.with-arrow::after{content:"";position:absolute;height:.75rem;width:.75rem;border-left:1px var(--color-text-secondary) solid;border-bottom:1px var(--color-text-secondary) solid;transform:rotate(-45deg);right:2rem;top:1rem}.input-group.touched label,.input-group.error label,.input-group.success label,.input-group .form-control:focus+label,.input-group .form-control.focus+label{transform:scale(0.75) translate(-0.5rem, -2.25rem)}.input-group input::placeholder,.input-group .form-control::placeholder{color:var(--color-placeholders)}.input-group.touched label{color:var(--color-text-secondary)}.input-group.error label{color:var(--color-error) !important}.input-group.success label{color:var(--color-text-green) !important}.input-group.disabled{opacity:.5;pointer-events:none}.input-group[dir=rtl] input{text-align:right}.input-group[dir=rtl] label{left:auto;right:.75rem}.input-group[dir=rtl].with-arrow::after{border-left:none;border-right:1px var(--color-text-secondary) solid;right:auto;left:2rem}.input-group[dir=rtl].touched label,.input-group[dir=rtl].error label,.input-group[dir=rtl].success label,.input-group[dir=rtl] .form-control:focus+label,.input-group[dir=rtl] .form-control.focus+label{transform:scale(0.75) translate(1.5rem, -2.25rem)}.form-control{--border-width: 1px;display:block;width:100%;height:3.375rem;padding:calc(.75rem - var(--border-width)) calc(.9rem - var(--border-width));border:var(--border-width) solid var(--color-borders-input);border-radius:var(--border-radius-default);color:var(--color-text);background-color:var(--color-background);outline:none;transition:border-color .15s ease;word-break:break-word;-webkit-appearance:none;font-size:1rem;line-height:1.25rem}.form-control[dir]{text-align:initial}.form-control:hover{border-color:var(--color-primary)}.form-control:hover+label{color:var(--color-primary)}.form-control:focus,.form-control.focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);caret-color:var(--color-primary)}.form-control:focus+label,.form-control.focus+label{color:var(--color-primary)}.form-control:disabled{background:none !important}.error .form-control{border-color:var(--color-error);box-shadow:inset 0 0 0 1px var(--color-error);caret-color:var(--color-error)}.success .form-control{border-color:var(--color-text-green);box-shadow:inset 0 0 0 1px var(--color-text-green);caret-color:var(--color-text-green)}select.form-control option{line-height:2rem}textarea.form-control{resize:none;overflow:hidden;line-height:1.3125rem;padding-top:calc(1rem - var(--border-width));padding-bottom:calc(1rem - var(--border-width))}.input-group.password-input{position:relative}.input-group.password-input .form-control{padding-right:3.375rem}.input-group.password-input .toggle-password{position:absolute;top:0;right:0;width:3.375rem;height:3.375rem;display:flex;align-items:center;justify-content:center;cursor:pointer;outline:none !important;color:var(--color-text-secondary);opacity:.7;font-size:1.5rem}.input-group.password-input .toggle-password:hover,.input-group.password-input .toggle-password:focus{opacity:1}.input-group.password-input[dir=rtl] .form-control{padding-left:3.375rem;padding-right:calc(.9rem - var(--border-width))}.input-group.password-input[dir=rtl] .toggle-password{left:0;right:auto}@font-face{font-family:"icomoon";src:url(icomoon.57726174156380af4e68..woff2) format("woff2"),url(icomoon.9b265b61a1efa088d5c6..woff) format("woff");font-weight:normal;font-style:normal;font-display:block}[class^=icon-],[class*=" icon-"]{font-family:"icomoon" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=icon-char-]::before,[class*=" icon-char-"]::before{font-family:Roboto,"Helvetica Neue",sans-serif;content:attr(data-char);width:1.5rem;text-align:center;display:block}.icon-loop:before{content:""}.icon-skip-next:before{content:""}.icon-skip-previous:before{content:""}.icon-volume-1:before{content:""}.icon-volume-2:before{content:""}.icon-volume-3:before{content:""}.icon-reaction-filled:before{content:""}.icon-reactions:before{content:""}.icon-sidebar:before{content:""}.icon-video-stop:before{content:""}.icon-speaker:before{content:""}.icon-speaker-outline:before{content:""}.icon-phone-discard-outline:before{content:""}.icon-allow-speak:before{content:""}.icon-stop-raising-hand:before{content:""}.icon-share-screen:before{content:""}.icon-voice-chat:before{content:""}.icon-video:before{content:""}.icon-noise-suppression:before{content:""}.icon-phone-discard:before{content:""}.icon-bot-commands-filled:before{content:""}.icon-reply-filled:before{content:""}.icon-bug:before{content:""}.icon-data:before{content:""}.icon-darkmode:before{content:""}.icon-animations:before{content:""}.icon-enter:before{content:""}.icon-fontsize:before{content:""}.icon-permissions:before{content:""}.icon-card:before{content:""}.icon-truck:before{content:""}.icon-share-filled:before{content:""}.icon-bold:before{content:""}.icon-bot-command:before{content:""}.icon-calendar-filter:before{content:""}.icon-comments:before{content:""}.icon-comments-sticker:before{content:""}.icon-arrow-down:before{content:""}.icon-email:before{content:""}.icon-italic:before{content:""}.icon-link:before{content:""}.icon-mention:before{content:""}.icon-monospace:before{content:""}.icon-next:before{content:""}.icon-password-off:before{content:""}.icon-pin-list:before{content:""}.icon-previous:before{content:""}.icon-replace:before{content:""}.icon-schedule:before{content:""}.icon-strikethrough:before{content:""}.icon-underlined:before{content:""}.icon-zoom-in:before{content:""}.icon-zoom-out:before{content:""}.icon-select:before{content:""}.icon-folder:before{content:""}.icon-bots:before{content:""}.icon-calendar:before{content:""}.icon-cloud-download:before{content:""}.icon-colorize:before{content:""}.icon-forward:before{content:""}.icon-reply:before{content:""}.icon-help:before{content:""}.icon-info:before{content:""}.icon-info-filled:before{content:""}.icon-delete-filled:before{content:""}.icon-delete:before{content:""}.icon-edit:before{content:""}.icon-new-chat-filled:before{content:""}.icon-send:before{content:""}.icon-send-outline:before{content:""}.icon-add-user-filled:before{content:""}.icon-add-user:before{content:""}.icon-delete-user:before{content:""}.icon-microphone:before{content:""}.icon-microphone-alt:before{content:""}.icon-poll:before{content:""}.icon-revote:before{content:""}.icon-photo:before{content:""}.icon-document:before{content:""}.icon-camera:before{content:""}.icon-camera-add:before{content:""}.icon-logout:before{content:""}.icon-saved-messages:before{content:""}.icon-settings:before{content:""}.icon-phone:before{content:""}.icon-attach:before{content:""}.icon-copy:before{content:""}.icon-channel:before{content:""}.icon-group:before{content:""}.icon-user:before{content:""}.icon-non-contacts:before{content:""}.icon-active-sessions:before{content:""}.icon-admin:before{content:""}.icon-download:before{content:""}.icon-location:before{content:""}.icon-stop:before{content:""}.icon-archive:before{content:""}.icon-unarchive:before{content:""}.icon-readchats:before{content:""}.icon-unread:before{content:""}.icon-message:before{content:""}.icon-lock:before{content:""}.icon-unlock:before{content:""}.icon-mute:before{content:""}.icon-unmute:before{content:""}.icon-pin:before{content:""}.icon-unpin:before{content:""}.icon-smallscreen:before{content:""}.icon-fullscreen:before{content:""}.icon-large-pause:before{content:""}.icon-large-play:before{content:""}.icon-pause:before{content:""}.icon-play:before{content:""}.icon-channelviews:before{content:""}.icon-message-succeeded:before{content:""}.icon-message-read:before{content:""}.icon-message-pending:before{content:""}.icon-message-failed:before{content:""}.icon-favorite:before{content:""}.icon-keyboard:before{content:""}.icon-delete-left:before{content:""}.icon-recent:before{content:""}.icon-gifs:before{content:""}.icon-stickers:before{content:""}.icon-smile:before{content:""}.icon-animals:before{content:""}.icon-eats:before{content:""}.icon-sport:before{content:""}.icon-car:before{content:""}.icon-lamp:before{content:""}.icon-language:before{content:""}.icon-flag:before{content:""}.icon-more:before{content:""}.icon-search:before{content:""}.icon-remove:before{content:""}.icon-add:before{content:""}.icon-check:before{content:""}.icon-close:before{content:""}.icon-arrow-left:before{content:""}.icon-arrow-right:before{content:""}.icon-down:before{content:""}.icon-up:before{content:""}.icon-eye-closed:before{content:""}.icon-eye:before{content:""}.icon-muted:before{content:""}.icon-avatar-archived-chats:before{content:""}.icon-avatar-deleted-account:before{content:""}.icon-avatar-saved-messages:before{content:""}.icon-pinned-chat:before{content:""}.media-inner{position:relative}.media-inner video,.media-inner img{display:block;object-fit:cover}.media-inner video{background:no-repeat 50% 50%;background-size:contain}.media-inner .thumbnail~.thumbnail,.media-inner .thumbnail~.full-media,.media-inner .media-loading{position:absolute}.animated-close-icon{position:absolute;transform:rotate(-45deg)}.animated-close-icon,.animated-close-icon::before,.animated-close-icon::after{width:1.125rem;height:.125rem;border-radius:.125rem;background-color:var(--color-text-secondary);transition:transform var(--slide-transition)}.animated-close-icon::before,.animated-close-icon::after{position:absolute;left:0;top:0;content:""}.animated-close-icon::before{transform:rotate(90deg)}.animated-close-icon.no-transition,.animated-close-icon.no-transition::before,.animated-close-icon.no-transition::after{transition:none}.animated-close-icon.state-back{transform:rotate(180deg)}.animated-close-icon.state-back::before{transform:rotate(45deg) scaleX(0.75) translate(0, -0.375rem)}.animated-close-icon.state-back::after{transform:rotate(-45deg) scaleX(0.75) translate(0, 0.375rem)}.chat-list{background:var(--color-background);height:100%;padding:.5rem .125rem .5rem .4375rem;overflow-y:auto}@supports(overflow-y: overlay){body.is-android .chat-list{overflow-y:overlay;overflow-x:hidden}}.chat-list .scroll-container{position:relative}.chat-list .ListItem.chat-item-clickable{margin:0}@media(max-width: 600px){.chat-list{padding-left:0;padding-right:0}}.chat-list .no-results{color:var(--color-text-meta);margin-top:2rem;text-align:center}div.color-bg-1{--color-user: var(--color-user-1)}div.color-bg-2{--color-user: var(--color-user-2)}div.color-bg-4{--color-user: var(--color-user-4)}div.color-bg-5{--color-user: var(--color-user-5)}div.color-bg-6{--color-user: var(--color-user-6)}div.color-bg-7{--color-user: var(--color-user-7)}div.color-bg-8{--color-user: var(--color-user-8)}div.replies-bot-account,div.saved-messages{--color-user: var(--color-primary)}div.deleted-account{--color-user: var(--color-gray)}html,body{width:100%;height:100%;background:var(--color-background);margin:0;padding:0;font-size:16px;font-family:"Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;color:var(--color-text);font-weight:400;line-height:1.5;text-align:left;overflow:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(max-width: 600px){html,body{height:calc(var(--vh, 1vh)*100)}}body.is-ios,body.is-macos{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Helvetica Neue",sans-serif}html[lang=fa],html[lang=fa] body{font-family:"Vazir","Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}html[lang=fa].is-ios,html[lang=fa].is-macos,html[lang=fa] body.is-ios,html[lang=fa] body.is-macos{font-family:"Vazir",-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}body.is-ios{--border-radius-messages: 1rem;--border-radius-messages-small: 0.5rem}body.cursor-grabbing,body.cursor-grabbing *{cursor:grabbing !important}body.cursor-ew-resize{cursor:ew-resize !important}#root{height:100%}@media(max-width: 600px){#root{height:calc(var(--vh, 1vh)*100)}}#middle-column-portals,#portals{position:absolute;top:0;left:0;right:0}.hidden{visibility:hidden}.no-selection{user-select:none;-webkit-user-select:none !important}.resize-handle{display:none;position:absolute;top:0;right:-0.25rem;bottom:0;width:.25rem;z-index:var(--z-resize-handle);cursor:ew-resize}@media(min-width: 926px){.resize-handle{display:block}}.visually-hidden{position:absolute !important;width:0;height:0;overflow:hidden;clip:rect(0, 0, 0, 0);z-index:-1}.not-implemented{opacity:.5}.not-implemented,.not-implemented *{cursor:not-allowed !important}*{box-sizing:border-box}.no-animations #root *,.no-animations #root *::before,.no-animations #root *::after{transition:none !important}.custom-scroll,.custom-scroll-x{scrollbar-width:thin;scrollbar-color:rgba(90,90,90,0) transparent;transition:scrollbar-color .3s ease;-webkit-overflow-scrolling:touch;pointer-events:auto}.custom-scroll::-webkit-scrollbar-thumb,.custom-scroll-x::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,0);border-radius:.375rem;box-shadow:0 0 1px rgba(255,255,255,.01)}.custom-scroll:hover,.custom-scroll:focus,.custom-scroll:focus-within,.custom-scroll-x:hover,.custom-scroll-x:focus,.custom-scroll-x:focus-within{scrollbar-color:rgba(90,90,90,.3) transparent}.custom-scroll:hover::-webkit-scrollbar-thumb,.custom-scroll:focus::-webkit-scrollbar-thumb,.custom-scroll:focus-within::-webkit-scrollbar-thumb,.custom-scroll-x:hover::-webkit-scrollbar-thumb,.custom-scroll-x:focus::-webkit-scrollbar-thumb,.custom-scroll-x:focus-within::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,.3)}body:not(.is-ios) .custom-scroll::-webkit-scrollbar{width:.375rem}body:not(.is-ios) .custom-scroll-x::-webkit-scrollbar{height:.375rem}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.emoji-small{background:no-repeat;background-size:1.25rem;color:transparent;display:inline-block;width:1.25rem;height:1.25rem;margin-inline-end:1px;overflow:hidden;flex-shrink:0}.emoji-small::selection{background-color:var(--color-selection-highlight-emoji);color:transparent}div[role=button]{outline:none !important;cursor:pointer}.opacity-transition{opacity:1;transition:opacity .15s ease}.opacity-transition:not(.open){opacity:0}.opacity-transition:not(.shown){display:none}.opacity-transition.slow{transition-duration:.3s}.color-primary{color:var(--color-primary) !important}.color-danger{color:var(--color-error) !important}.text-muted{color:var(--color-text-secondary) !important}.protector{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2}.for-ios-autocapitalization-fix{position:fixed;font-size:16px;opacity:0;bottom:1rem;z-index:-1}@keyframes grow-icon{0%{transform:scale(0.5);opacity:.8}50%{transform:scale(1.1);opacity:1}100%{transform:scale(1)}}@keyframes hide-icon{from{transform:scale(1);opacity:.4}to{transform:scale(0.5);opacity:0}} + +/*# sourceMappingURL=main.4fd1870c45fc2448fc6a.css.map*/ \ No newline at end of file diff --git a/dist/main.4fd1870c45fc2448fc6a.css.map b/dist/main.4fd1870c45fc2448fc6a.css.map new file mode 100644 index 000000000..1b72c0bb8 --- /dev/null +++ b/dist/main.4fd1870c45fc2448fc6a.css.map @@ -0,0 +1 @@ +{"version":3,"file":"main.4fd1870c45fc2448fc6a.css","mappings":"AACE,oBACE,eACA,yDACA,wCACA,oBAEA,sKAIE,yDAGF,gCACE,8BAIJ,mBACE,oDAGF,kBACE,UACA,8BAGF,sCACE,0CACA,UAIJ,+BACE,IACE,UAEF,IACE,YAEF,IACE,+B;AC1CJ,MACE,cAEA,YACE,cAEA,0BACE,qB;ACPN,UACE,YACA,yBAFF,UAGI,iCAGF,gBACE,eACA,MACA,OACA,QACA,cACA,WACA,YACA,gCACA,aAGA,yBAZF,gBAaI,aACA,+BACA,yBAGF,sBACE,OACA,mCACA,gBACA,WACA,kBAEA,yBAPF,sBAQI,gBAGF,0BAXF,sBAYI,WACA,gBAGF,0BAhBF,sBAiBI,QAGF,yBApBF,sBAqBI,0BAGF,yBAxBF,sBAyBI,eACA,wBAIJ,wBACE,OACA,2CACA,4CACA,kBACA,UACA,gBAEA,gCACE,WACA,cACA,kBACA,MACA,OACA,SACA,QACA,4BACA,sBACA,WACA,6BAEA,yDACE,yBAGF,6GAEE,yDAIJ,kDACE,sBAGF,sCACE,gCACE,8BAIJ,gDACE,aACA,iCAGF,0BA9CF,wBA+CI,OACA,mBAGF,yBAnDF,wBAoDI,cAIJ,uBACE,kBACA,MACA,QACA,UACA,YACA,gCACA,2CACA,mCAIJ,iBACE,OACA,kC;AC5HJ,SACE,qBAEA,kBACA,aACA,mBACA,uBAEA,0BACA,2BAEA,aACE,kBACA,MACA,OACA,QACA,SAEA,4BACA,qBAEA,oBACA,sBACA,mCACA,iCAIA,iCACE,WACA,kBACA,eACA,cACA,iBACA,gBACA,kBAGF,yCACE,2BAGF,0CACE,gCAKF,mBACE,2CAIA,mCACE,gDAMJ,kBACE,0CAEA,8BACE,+CAMJ,mBACE,2CAKF,mBACE,2CAKF,kBACE,0CAKF,oBACE,4CAKN,gBACE,KACE,uBAGF,GACE,0B;ACtFJ,4BACE,KACE,mBACA,UAEF,IACE,UAEF,GACE,UACA,oBAIJ,kBACE,kBACA,MACA,OACA,SACA,QAEA,yCACE,aAGF,uBACE,kBACA,cACA,0DACA,kBACA,mBACA,iC;ACpBJ,QACE,wBACA,aACA,mBACA,uBACA,WACA,cACA,SACA,2CACA,6BACA,sBACA,gBACA,WACA,gBACA,eACA,yBACA,cACA,kBACA,gBACA,4CACA,gCAGA,8DAGE,2BAGF,iBACE,sBACA,eACA,oBAGF,cACE,aACA,kBAEA,gBACE,iBAIJ,gBACE,sCACA,yBACA,oCAtEA,8JAyEE,4CApEF,qBACE,oDAmEA,6CAzDA,4EA6DA,mDAIJ,kBACE,yCACA,kDACA,oCApFA,oKAuFE,sCACA,WAnFF,qBACE,sDAiFA,sCACA,YAxEA,8EA4EA,4CAIJ,aACE,yCACA,kCACA,oCAnGA,qJAsGE,2BAjGF,qBACE,iDAgGA,4BAtFA,yEA0FA,yCAIJ,eACE,yCACA,yBACA,mDAjHA,2JAoHE,oCACA,yBAhHF,qBACE,mDA8GA,oCACA,0BArGA,2EAyGA,0CAIJ,aACE,6BAEA,qBACE,2BACA,6BAlIF,6KAqII,4DAhIJ,qBACE,yDA+HE,6DArHF,iFAyHE,4DAIJ,uBACE,6BACA,kCA/IF,0KAoJI,oDACA,yBAhJJ,qBACE,wDA8IE,oDACA,0BArIF,gFAyIE,oDAKN,cACE,WA/JA,wJAkKE,UA7JF,qBACE,kDA4JA,WAGF,wBACE,UAIJ,oBACE,6BACA,kCAEA,uDA9KA,0KAiLE,wDA5KF,qBACE,wDA2KA,yDAjKA,gFAqKA,6DAGF,8BACE,2BAIJ,0BACE,6BACA,2BACA,0CAhMA,4LAmME,uCACA,WA/LF,qBACE,8DA6LA,uCACA,YApLA,sFAwLA,uCAIJ,0BACE,6BACA,qBACA,oCA/MA,4LAkNE,iCA7MF,qBACE,8DA4MA,kCAlMA,sFAsMA,iCAIJ,aACE,iCACA,WACA,0CA7NA,qJAgOE,iCACA,WA5NF,qBACE,iDA0NA,iCACA,YAjNA,yEAqNA,iCAIJ,gBACE,eACA,iBAEA,sBACE,cAGF,qBACE,cACA,sBACA,sBAGF,0BACE,oBACA,sBAEA,4BACE,iBACA,mBAGF,mCACE,qBACA,qBAEA,qCACE,kBACA,eAKN,yBAlCF,gBAmCI,cAEA,sBACE,cAKN,aACE,eACA,iBACA,iDACA,kBACA,gBAEA,mBACE,cACA,eACA,kBAGF,eACE,kBAGF,kBACE,YACA,mBACA,sBACA,eAIJ,cACE,qBACA,sBACA,WAEA,mBACE,sBACA,uBAIJ,aACE,sBACA,qBACA,sBACA,oBAGF,gBACE,kBACA,oBAEA,yBACE,kBACA,cACA,YAEA,0BAIJ,eACE,oB;AC/UJ,UACE,cACA,kBACA,oBACA,gBACA,qBACA,mBACA,eAEA,mBACE,oBACA,WAKE,uCACE,kBAGF,sCACE,0FAGA,qBACA,kBAMJ,iFAEE,qBAGF,2BACE,kBACA,aACA,YACA,UACA,oCACA,wBAMA,8DACE,gCAGF,6DACE,yDACA,UAGA,yBACA,wCAKN,gBACE,kBACA,uBACA,UAIA,iEAEE,WACA,cACA,kBACA,eACA,aACA,eACA,gBAGF,iCACE,4CACA,qBACA,yCACA,2DAGF,gCAEE,oEAEA,wBACA,UACA,4BAGF,gCACE,cACA,mBAGF,mCACE,cACA,kBACA,iBACA,kCAKF,+CACE,kCACA,sCAGF,8CACE,UAIJ,mBACE,eACA,qBAGE,oCACE,UACA,cAIJ,uDAEE,iBAIA,mFAEE,UACA,g1C;AC7IR,SACE,aACA,YACA,mBACA,uBAEA,qBACE,eAGF,kBACE,wB;ACVF,oBACE,kBACA,WAGF,gBACE,eACA,YACA,aACA,WACA,cACA,+BAGF,cACE,gBACA,cACA,gBACA,gBACA,SACA,kBACA,yCACA,8DACA,2CACA,kBACA,6BACA,4BAEA,qBACA,0GAmBA,gCACA,cAlBA,mBACE,mBAGF,sBACE,gEAGF,qCACE,0BACA,mCAGF,mCACE,2BAMF,kBACE,oBAGF,qBACE,uBAGF,mBACE,qBAGF,oBACE,sBAGF,0BACE,iBAIJ,cACE,gBACA,mCACA,kCACA,mBACA,kB;AC9EJ,cACE,kB;ACDF,UACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,oBACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,qBACE,gCAEE,yCACA,qBACA,eAIJ,yBACE,iDAGE,qBACA,cAGF,iBACE,0CAIJ,YACE,iBACA,kBACA,kCAGF,0BACE,kBAEA,qCACE,0BAIJ,mBACE,sBACA,0BAGF,sBACE,yBAEA,wBACE,cAIJ,iDACE,0CACA,2BAGF,oBACE,iBAIA,qBACE,iBACA,eAGF,mCACE,iBACA,eAGF,6BACE,cACA,kB;ACvFJ,+BACE,eAEA,0CAEA,wCACE,kBACA,SACA,aACA,WACA,uBAIF,8CACE,kBACA,aACA,WACA,aACA,cACA,6CACA,aACA,cACA,kCACA,0DAEA,mDACE,kCACA,mCACA,WAKN,0BACE,WACA,mBACA,gBACA,uCACA,sBAEA,+BACE,oBAKF,mCACE,aACA,mBAGF,8CACE,uBACA,mBAEA,mDACE,kBAKN,gCACE,eACA,kBAEA,uCACE,WACA,YACA,qBACA,mBACA,uBAIJ,gCACE,mBACA,gBACA,uBACA,kBACA,gBAGF,gCACE,iBACA,W;ACtFJ,WACE,WACA,kBACA,cACA,uBACA,kBAEA,gDAPF,WAQI,gCAEA,cACE,kBAIJ,kDAEE,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,kDAUI,YACA,aACA,sBAIJ,iBACE,oEACA,qBAGF,cACE,kBACA,cAEA,yBAJF,cAKI,eACA,iBAIJ,iBACE,kBACA,iBACA,qBACA,kCAEA,yBANF,iBAOI,eACA,oBAKN,kGAKE,YACA,gBAIA,6BACE,oBAGF,gCACE,mBAGF,wCACE,gBAMF,0CACE,aACA,mBACA,uBAIJ,kBACE,aACA,cACA,cACA,iBACA,kCACA,YACA,aACA,mBACA,uBACA,eAEA,gDAEE,UAKF,sDAEE,aAGF,4BACE,UACA,mBACA,2EAEA,wCACE,WACA,qBAGF,mCACE,gBACA,2CACA,8BACA,qBAIJ,iBACE,uBAGF,iBACE,gBACA,mBACA,kBAEA,oBACE,uBACA,gBACA,gBACA,aAEA,4BACE,sBACA,aACA,uBACA,mBACA,mBACA,gBACA,UACA,oBACA,gCACA,kBACA,kBACA,WAMR,kBACE,kC;ACvKF,aACE,YACA,aACA,sBACA,mBACA,uBAEA,sBACE,gBACA,YACA,eACA,kBAGF,oBACE,gBAGF,0BACE,kCACA,kBAGF,iBACE,WACA,gBAGF,qBACE,gB;AC7BJ,iBAAiB;AACjB;EACE,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,QAGF,oBACE,SAGF,iBACE,UAGF,YACE,UAGF,uBACE,OCnQF,2BACE,qCACA,sCACA,6CACA,gCACA,wEACA,sBACA,8BACA,gCACA,0CACA,sCACA,2BACA,qCACA,mCACA,iCACA,4BACA,oCACA,yBACA,+BACA,0BACA,4CACA,iDACA,0EACA,0EACA,+EACA,mCACA,yBAEA,+BACA,sCACA,wCACA,yDACA,uBACA,8BACA,uBAEA,6BACA,+BACA,yBAEA,wBAEA,uBAEA,2BAEA,8BAEA,wBAEA,sBAEA,2CACA,0BACA,+CACA,4BAEA,kCACA,kDAEA,8DACA,0DACA,sEACA,6BAEA,8BACA,iCACA,kCACA,sCAEA,uCACA,wCACA,uBAEA,sBACA,4BAEA,6BACA,6BACA,qCAEA,2DACA,wBAEA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,kCAEA,gCACA,UAEA,iCAEA,wCACA,uCACA,kCACA,yCACA,oCACA,8BACA,wBACA,8BAEA,+BACA,kCACA,yBAgBA,uBACA,sBACA,qBACA,8BACA,gBACA,uBACA,kBACA,uBACA,oBACA,sBACA,4BACA,6BACA,2BACA,sBACA,sBACA,sBACA,iCACA,8BACA,2BACA,mBACA,2BACA,yBACA,qBACA,cACA,8DAEA,mEACA,6DACA,kEACA,8DACA,8DACA,6DACA,+DACA,8DAEA,sEACA,8BAEA,yDAEA,wDACA,oCACA,kDAxDA,MA9GF,0BA+GI,4BAGF,MAlHF,gCAmHI,2BAGF,MAtHF,2BAuHI,2BACA,iCACA,oBA+CF,wDACE,wDACA,uBAGF,uDACE,wDACA,MCjNA,mBACE,aAEF,uBAEE,aAEF,yBAEE,aAEF,0BAEE,aAEF,wBAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,oBACE,aAEF,wBAEE,aAEF,0BAEE,aAEF,2BAEE,aAEF,yBAEE,MAjBF,yBACE,aAEF,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,yBACE,aAEF,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,cChDN,iBACE,qBACA,oBAEA,aACE,iBACA,kBACA,YACA,aACA,yCACA,eACA,gBACA,gCACA,uDACA,YACA,oBACA,6BACA,mBACA,gCAIA,UACE,kBACA,cACA,aACA,kDACA,oDACA,yBACA,WACA,SACA,8JAIJ,kDAKE,yEAGF,+BAEE,4BAGF,iCACE,0BAGF,mCACE,4BAGF,wCACE,uBAGF,UACE,oBACA,6BAIA,gBACE,6BAGF,SACE,aACA,yCAIA,gBACE,mDACA,WACA,UACA,2MAIJ,iDAKE,eAKN,mBACE,cACA,WACA,gBACA,6EACA,4DACA,2CACA,wBACA,yCACA,aACA,kCACA,sBACA,wBACA,eAEA,oBACA,oBAEA,kBACE,qBAGF,iCACE,2BAEA,0BACE,yCAIJ,iCAEE,gDACA,iCACA,qDAEA,0BACE,wBAIJ,0BACE,sBAGF,+BACE,8CACA,+BACA,wBAGF,oCACE,mDACA,oCACA,4BAKF,gBACE,uBAIJ,WACE,gBACA,sBACA,6CACA,gDACA,6BAGF,iBACE,2CAEA,sBACE,8CAGF,iBACE,MACA,QACA,eACA,gBACA,aACA,mBACA,uBACA,eACA,wBACA,kCAEA,WACA,iBACA,uGAEA,SAEE,oDAKF,qBACE,gDACA,uDAGF,MACE,WACA,YC3MN,qBACE,qHACA,mBAEA,kBACA,mBACA,kCAGF,gCAGE,WACA,kBACA,mBACA,oBACA,oBACA,cACA,mCAGA,kCACA,4DAIA,8CACE,wBACA,aACA,kBACA,cACA,mBAIJ,WACE,wBAEF,WACE,4BAEF,WACE,uBAEF,WACE,uBAEF,WACE,uBAEF,WACE,8BAEF,WACE,wBAEF,WACE,sBAEF,WACE,yBAEF,WACE,sBAEF,WACE,8BAEF,WACE,oCAEF,WACE,0BAEF,WACE,gCAEF,WACE,2BAEF,WACE,yBAEF,WACE,oBAEF,WACE,gCAEF,WACE,4BAEF,WACE,kCAEF,WACE,2BAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,yBAEF,WACE,oBAEF,WACE,uBAEF,WACE,0BAEF,WACE,mBAEF,WACE,oBAEF,WACE,2BAEF,WACE,mBAEF,WACE,0BAEF,WACE,8BAEF,WACE,uBAEF,WACE,+BAEF,WACE,yBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,mBAEF,WACE,2BAEF,WACE,uBAEF,WACE,uBAEF,WACE,sBAEF,WACE,uBAEF,WACE,4BAEF,WACE,yBAEF,WACE,sBAEF,WACE,uBAEF,WACE,qBAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,6BAEF,WACE,uBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,mBAEF,WACE,0BAEF,WACE,4BAEF,WACE,qBAEF,WACE,mBAEF,WACE,8BAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,uBAEF,WACE,0BAEF,WACE,yBAEF,WACE,6BAEF,WACE,mBAEF,WACE,qBAEF,WACE,oBAEF,WACE,uBAEF,WACE,qBAEF,WACE,yBAEF,WACE,qBAEF,WACE,6BAEF,WACE,uBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,oBAEF,WACE,uBAEF,WACE,uBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,wBAEF,WACE,qBAEF,WACE,sBAEF,WACE,mBAEF,WACE,qBAEF,WACE,mBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,0BAEF,WACE,yBAEF,WACE,0BAEF,WACE,yBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,gCAEF,WACE,2BAEF,WACE,8BAEF,WACE,6BAEF,WACE,uBAEF,WACE,uBAEF,WACE,0BAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,oBAEF,WACE,sBAEF,WACE,mBAEF,WACE,oBAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,mBAEF,WACE,mBAEF,WACE,qBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oBAEF,WACE,yBAEF,WACE,0BAEF,WACE,mBAEF,WACE,iBAEF,WACE,yBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oCAEF,WACE,qCAEF,WACE,oCAEF,WACE,0BAEF,WACE,cC7dF,iBACE,qCAEA,aAEE,iBACA,oBAGF,4BACE,wBACA,oGAGF,iBAGE,sBAIJ,iBACE,yBACA,+EAEA,cAGE,eACA,sBACA,6CACA,6CACA,0DAGF,iBAEE,OACA,MACA,WACA,8BAGF,uBACE,yHAIA,eAGE,iCAIJ,wBACE,yCAEA,4DACE,wCAGF,4DACE,YAMN,kCACE,YACA,qCACA,gBAEA,gCCrEA,2BDsEA,kBCrEE,kBAGA,+BDsEF,iBACE,0CAGF,QACE,0BAGF,WAlBF,cAmBI,gBACA,yBAGF,4BACE,gBACA,kBACA,gBAMF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,4CAGF,kCAEE,qBAGF,+BACE,WNjIJ,UAEE,YACA,mCACA,SACA,UACA,eACA,kKACA,wBAEA,gBACA,gBACA,gBACA,gBACA,mCACA,kCACA,0BAEA,UAlBF,+BAmBI,4BAIJ,+GAEE,kCAGF,yKAEE,mGAGA,yKAEE,aAKJ,8BACE,uCACA,6CAGF,0BAEE,uBAGF,2BACE,OAGF,WACE,0BACA,MAFF,+BAGI,kCAIJ,iBAEE,MACA,OACA,QACA,SAGF,iBACE,eAGF,gBACE,oCACA,gBAGF,YACE,kBACA,MACA,eACA,SACA,aACA,+BACA,iBACA,0BAEA,eAVF,aAWI,mBAQJ,4BACE,QACA,SACA,gBACA,sBACA,WACA,kBAGF,UACE,qCAEA,6BAEE,GAIJ,qBACE,qFAGF,0BAGE,iCAGF,oBAEE,6CACA,oCACA,iCAEA,oBAEA,mFAEA,iCACE,sBACA,yCAEA,mJAGF,6CAGE,ySAEA,kCACE,qDAOF,aACE,uDAKF,cACE,eAKN,oBACE,kCAEA,YACE,cAIJ,oBACE,wBACA,kBACA,qBACA,cACA,eACA,sBACA,gBACA,cACA,yBAEA,uDACE,kBACA,kBAIJ,uBACE,eACA,qBAGF,SACE,6BACA,gCAEA,SACE,iCAGF,YACE,0BAGF,uBACE,gBAIJ,qCACE,eAGF,mCACE,aAGF,4CACE,YAGF,iBACE,OACA,MACA,QACA,SACA,UACA,iCAGF,cACE,eACA,UACA,YACA,WACA,sBAGF,GACE,oBACE,WACA,KAEF,oBACE,UACA,MAEF,kBACE,uBAIJ,KACE,kBACE,WACA,IAEF,oBACE,UACA,6mH","sources":["webpack://telegram-t/./src/components/common/spoiler/Spoiler.scss","webpack://telegram-t/./src/components/ui/Link.scss","webpack://telegram-t/./src/components/common/UiLoader.scss","webpack://telegram-t/./src/components/ui/Spinner.scss","webpack://telegram-t/./src/components/ui/RippleEffect.scss","webpack://telegram-t/./src/components/ui/Button.scss","webpack://telegram-t/./src/components/ui/Checkbox.scss","webpack://telegram-t/./src/components/ui/Loading.scss","webpack://telegram-t/./src/components/ui/Menu.scss","webpack://telegram-t/./src/components/ui/DropdownMenu.scss","webpack://telegram-t/./src/components/ui/MenuItem.scss","webpack://telegram-t/./src/components/auth/CountryCodeInput.scss","webpack://telegram-t/./src/components/auth/Auth.scss","webpack://telegram-t/./src/components/main/AppInactive.scss","webpack://telegram-t/./src/assets/fonts/roboto.css","webpack://telegram-t/./src/styles/index.scss","webpack://telegram-t/./src/styles/reboot.css","webpack://telegram-t/./src/styles/_variables.scss","webpack://telegram-t/./src/styles/_spacing.scss","webpack://telegram-t/./src/styles/_forms.scss","webpack://telegram-t/./src/styles/icons.scss","webpack://telegram-t/./src/styles/_common.scss","webpack://telegram-t/./src/styles/_mixins.scss"],"sourcesContent":[".Spoiler {\n &--concealed {\n cursor: pointer;\n background-image: url('../../../assets/spoiler-dots-black.png');\n background-size: auto min(100%, 1.125rem);\n border-radius: 0.5rem;\n\n html.theme-dark &,\n html.theme-light .ListItem.selected &,\n .ActionMessage &,\n .MediaViewerFooter & {\n background-image: url('../../../assets/spoiler-dots-white.png');\n }\n\n .emoji-only & {\n background-size: auto 1.125rem;\n }\n }\n\n &--animated {\n animation: pulse-opacity-light 1.75s linear infinite;\n }\n\n &__content {\n opacity: 1;\n transition: opacity 250ms ease;\n }\n\n &--concealed &__content {\n user-select: none;\n opacity: 0;\n }\n}\n\n@keyframes pulse-opacity-light {\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 75% {\n opacity: 1;\n }\n}\n",".Link {\n color: inherit;\n\n &:hover {\n color: inherit;\n\n &.GroupCallLink {\n text-decoration: none;\n }\n }\n}\n","#UiLoader {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n\n .mask {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n width: 100%;\n height: 100%;\n z-index: var(--z-ui-loader-mask);\n display: flex;\n\n\n @media (min-width: 600px) {\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: 100%;\n }\n\n .left {\n flex: 1;\n background: var(--color-background);\n min-width: 12rem;\n width: 33vw;\n max-width: 26.5rem;\n\n @media (min-width: 926px) {\n max-width: 40vw;\n }\n\n @media (min-width: 1276px) {\n width: 25vw;\n max-width: 33vw;\n }\n\n @media (max-width: 1275px) {\n flex: 2;\n }\n\n @media (max-width: 925px) {\n width: 26.5rem !important;\n }\n\n @media (max-width: 600px) {\n max-width: none;\n width: 100vw !important;\n }\n }\n\n .middle {\n flex: 3;\n border-left: 1px solid var(--color-borders);\n border-right: 1px solid var(--color-borders);\n position: relative;\n z-index: 1;\n overflow: hidden;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: no-repeat center;\n background-size: cover;\n z-index: -1;\n transform-origin: left center;\n\n .theme-dark body.initial & {\n background-color: #0f0f0f;\n }\n\n .theme-light body.initial &,\n body:not(.initial) & {\n background-image: url('../../assets/chat-bg.jpg');\n }\n }\n\n &.with-right-column::before {\n transform: scale(0.67);\n }\n\n @media screen and (min-width: 1276px) {\n &::before {\n margin: -16rem -5rem -20rem 0;\n }\n }\n\n &.custom-bg-image::before {\n margin: -1rem;\n background-image: none !important;\n }\n\n @media (max-width: 1275px) {\n flex: 3;\n border-right: none;\n }\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .right {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n width: var(--right-column-width);\n border-left: 1px solid var(--color-borders);\n background: var(--color-background);\n }\n }\n\n .blank {\n flex: 1;\n background: var(--color-background);\n }\n}\n",".Spinner {\n --spinner-size: 2rem;\n\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: var(--spinner-size);\n height: var(--spinner-size);\n\n > div {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-repeat: no-repeat;\n background-size: 100%;\n\n animation-name: spin;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n &.with-background {\n &::before {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.125rem;\n bottom: -0.125rem;\n right: -0.125rem;\n border-radius: 50%;\n }\n\n &.bg-dark::before {\n background: rgba(0, 0, 0, 0.25);\n }\n\n &.bg-light::before {\n background: rgba(255, 255, 255, 0.4);\n }\n }\n\n &.white {\n > div {\n background-image: var(--spinner-white-data);\n }\n\n &.with-background {\n > div {\n background-image: var(--spinner-white-thin-data);\n }\n }\n }\n\n &.blue {\n > div {\n background-image: var(--spinner-blue-data);\n\n .theme-dark & {\n background-image: var(--spinner-dark-blue-data);\n }\n }\n }\n\n &.black {\n > div {\n background-image: var(--spinner-black-data);\n }\n }\n\n &.green {\n > div {\n background-image: var(--spinner-green-data);\n }\n }\n\n &.gray {\n > div {\n background-image: var(--spinner-gray-data);\n }\n }\n\n &.yellow {\n > div {\n background-image: var(--spinner-yellow-data);\n }\n }\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n","@-webkit-keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n@keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n.ripple-container {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n\n body.animation-level-0 & {\n display: none;\n }\n\n span {\n position: absolute;\n display: block;\n background-color: var(--ripple-color, rgba(0, 0, 0, 0.08));\n border-radius: 50%;\n transform: scale(0);\n animation: ripple-animation 700ms;\n }\n}\n","@mixin active-styles() {\n &:not(.disabled):not(:disabled) {\n &:active,\n &.active,\n &:focus {\n @content;\n }\n @media (hover: hover) {\n &:hover {\n @content;\n }\n }\n }\n}\n\n@mixin no-ripple-styles() {\n body.animation-level-0 & {\n &:not(.disabled):not(:disabled) {\n &:active {\n @content;\n }\n }\n }\n}\n\n.Button {\n outline: none !important;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 3.5rem;\n border: 0;\n border-radius: var(--border-radius-default);\n background-color: transparent;\n background-size: cover;\n padding: 0.625rem;\n color: white;\n line-height: 1.2;\n cursor: pointer;\n text-transform: uppercase;\n flex-shrink: 0;\n position: relative;\n overflow: hidden;\n transition: background-color 0.15s, color 0.15s;\n text-decoration: none !important;\n\n // @optimization\n &:active,\n &.clicked,\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default;\n pointer-events: none;\n }\n\n &.round {\n width: 3.5rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n &.primary {\n background-color: var(--color-primary);\n color: var(--color-white);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: var(--color-primary-shade);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade-darker);\n }\n }\n\n &.secondary {\n background-color: var(--color-background);\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: var(--color-primary);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade);\n }\n }\n\n &.gray {\n background-color: var(--color-background);\n color: var(--color-text-secondary);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n color: var(--color-primary);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-chat-hover);\n }\n }\n\n &.danger {\n background-color: var(--color-background);\n color: var(--color-error);\n --ripple-color: rgba(var(--color-error-rgb), 0.16);\n\n @include active-styles() {\n background-color: var(--color-error);\n color: var(--color-white);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-error-shade);\n }\n }\n\n &.text {\n background-color: transparent;\n\n &.primary {\n color: var(--color-primary);\n background-color: transparent;\n\n @include active-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), 0.16);\n }\n }\n\n &.secondary {\n background-color: transparent;\n color: var(--color-text-secondary);\n }\n\n &.danger {\n @include active-styles() {\n background-color: rgba(var(--color-error-rgb), 0.08);\n color: var(--color-error);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-error-rgb), 0.16);\n }\n }\n }\n\n &.faded {\n opacity: 0.8;\n\n @include active-styles() {\n opacity: 1;\n }\n\n &.activated {\n opacity: 1;\n }\n }\n\n &.translucent {\n background-color: transparent;\n color: var(--color-text-secondary);\n\n --ripple-color: var(--color-interactive-element-hover);\n\n @include active-styles() {\n background-color: var(--color-interactive-element-hover);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-text-secondary-rgb), 0.16);\n }\n\n &.activated {\n color: var(--color-primary);\n }\n }\n\n &.translucent-white {\n background-color: transparent;\n color: rgba(255, 255, 255, 0.5);\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(255, 255, 255, 0.08);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(255, 255, 255, 0.16);\n }\n }\n\n &.translucent-black {\n background-color: transparent;\n color: rgba(0, 0, 0, 0.8);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.16);\n }\n }\n\n &.dark {\n background-color: rgba(0, 0, 0, 0.75);\n color: white;\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.85);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.95);\n }\n }\n\n &.smaller {\n height: 2.75rem;\n padding: 0.3125rem;\n\n &.round {\n width: 2.75rem;\n }\n\n &.pill {\n height: 2.5rem;\n border-radius: 1.25rem;\n padding: 0.3125rem 1rem;\n }\n\n &.with-icon {\n padding-left: 0.75rem;\n padding-right: 1.25rem;\n\n i {\n font-size: 1.5rem;\n margin-right: 0.5rem;\n }\n\n &[dir=\"rtl\"] {\n padding-left: 1.25rem;\n padding-right: 0.75rem;\n\n i {\n margin-left: 0.5rem;\n margin-right: 0;\n }\n }\n }\n\n @media (max-width: 600px) {\n height: 2.5rem;\n\n &.round {\n width: 2.5rem;\n }\n }\n }\n\n &.tiny {\n height: 2.25rem;\n padding: 0.4375rem;\n border-radius: var(--border-radius-default-small);\n font-size: 0.875rem;\n font-weight: 500;\n\n &.round {\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 50%;\n }\n\n i {\n font-size: 1.25rem;\n }\n\n &.pill {\n height: 2rem;\n border-radius: 1rem;\n padding: 0.3125rem 1rem;\n font-size: 1rem;\n }\n }\n\n &.fluid {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n width: auto;\n\n &.tiny {\n padding-left: 1.375rem;\n padding-right: 1.375rem;\n }\n }\n\n &.pill {\n border-radius: 1.75rem;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n text-transform: none;\n }\n\n &.loading {\n position: relative;\n pointer-events: none;\n\n .Spinner {\n position: absolute;\n right: 0.875rem;\n top: 0.875rem;\n\n --spinner-size: 1.8125rem;\n }\n }\n\n .emoji {\n vertical-align: -3px;\n }\n}\n",".Checkbox {\n display: block;\n position: relative;\n padding-left: 4.5rem;\n text-align: left;\n margin-bottom: 1.5rem;\n line-height: 1.5rem;\n cursor: pointer;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.round {\n .Checkbox-main {\n &::before {\n border-radius: 50%;\n }\n\n &::after {\n background: var(--color-primary)\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiLz48L3N2Zz4=)\n no-repeat 50% 50%;\n background-size: 12px;\n border-radius: 50%;\n }\n }\n }\n\n &.loading {\n .Checkbox-main::before,\n .Checkbox-main::after {\n opacity: 0 !important;\n }\n\n .Spinner {\n position: absolute;\n left: 0.375rem;\n top: 0.125rem;\n opacity: 0;\n animation: fade-in 0.2s ease forwards;\n --spinner-size: 1.25rem;\n }\n }\n\n &.blocking {\n input:not(:checked) ~ .Checkbox-main {\n &::before {\n border-color: var(--color-error);\n }\n\n &::after {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMjQgMCAyNCAyNCAwIDI0Ii8+CiAgICA8cGF0aCBmaWxsPSIjZTUzOTM1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOCwzIEMxOS42NTY4NTQyLDMgMjEsNC4zNDMxNDU3NSAyMSw2IEwyMSwxOCBDMjEsMTkuNjU2ODU0MiAxOS42NTY4NTQyLDIxIDE4LDIxIEw2LDIxIEM0LjM0MzE0NTc1LDIxIDMsMTkuNjU2ODU0MiAzLDE4IEwzLDYgQzMsNC4zNDMxNDU3NSA0LjM0MzE0NTc1LDMgNiwzIEwxOCwzIFogTTE2LDExIEw4LDExIEM3LjQ0NzcxNTI1LDExIDcsMTEuNDQ3NzE1MyA3LDEyIEM3LDEyLjU1MjI4NDcgNy40NDc3MTUyNSwxMyA4LDEzIEwxNiwxMyBDMTYuNTUyMjg0NywxMyAxNywxMi41NTIyODQ3IDE3LDEyIEMxNywxMS40NDc3MTUzIDE2LjU1MjI4NDcsMTEgMTYsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==);\n opacity: 1;\n\n // Compensate for svg having incorrect size\n background-size: 1.375rem;\n background-position: -0.125rem -0.125rem;\n }\n }\n }\n\n input {\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .Checkbox-main {\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 1.1875rem;\n top: 0.1875rem;\n width: 1.125rem;\n height: 1.125rem;\n }\n\n &::before {\n border: 2px solid var(--color-borders-input);\n border-radius: 0.25rem;\n background-color: var(--color-background);\n transition: border-color 0.1s ease, background-color 0.1s ease;\n }\n\n &::after {\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: center no-repeat\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==);\n background-size: 0.875rem;\n opacity: 0;\n transition: opacity 0.1s ease;\n }\n\n .label {\n display: block;\n text-align: initial;\n }\n\n .subLabel {\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n input:checked ~ .Checkbox-main {\n &::before {\n border-color: var(--color-primary);\n background-color: var(--color-primary);\n }\n\n &::after {\n opacity: 1;\n }\n }\n\n &[dir=\"rtl\"] {\n padding-left: 0;\n padding-right: 4.5rem;\n\n &.loading {\n .Spinner {\n left: auto;\n right: 0.375rem;\n }\n }\n\n .label,\n .subLabel {\n text-align: right;\n }\n\n .Checkbox-main {\n &::before,\n &::after {\n left: auto;\n right: 1.1875rem;\n }\n }\n }\n}\n",".Loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n\n &.interactive {\n cursor: pointer;\n }\n\n .Spinner {\n --spinner-size: 2.75rem;\n }\n}\n",".Menu {\n &.fluid .bubble {\n min-width: 13.5rem;\n width: auto;\n }\n\n .backdrop {\n position: fixed;\n left: -100vw;\n right: -100vw;\n top: -100vh;\n bottom: -100vh;\n z-index: var(--z-menu-backdrop);\n }\n\n .bubble {\n overflow: hidden;\n display: block;\n list-style: none;\n padding: 0.5rem 0;\n margin: 0;\n position: absolute;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n min-width: 13.5rem;\n z-index: var(--z-menu-bubble);\n overscroll-behavior: contain;\n\n transform: scale(0.5);\n transition: opacity 0.2s cubic-bezier(0.2, 0, 0.2, 1), transform 0.2s cubic-bezier(0.2, 0, 0.2, 1) !important;\n\n &.open {\n transform: scale(1);\n }\n\n &.closing {\n transition: opacity 0.2s ease-in, transform 0.2s ease-in !important;\n }\n\n body.animation-level-0 & {\n transform: none !important;\n transition: opacity 0.15s !important;\n }\n\n body.has-open-dialog & {\n transition: none !important;\n }\n\n --offset-y: calc(100% + 0.5rem);\n --offset-x: 0;\n\n &.top {\n top: var(--offset-y);\n }\n\n &.bottom {\n bottom: var(--offset-y);\n }\n\n &.left {\n left: var(--offset-x);\n }\n\n &.right {\n right: var(--offset-x);\n }\n\n &.with-footer {\n padding-bottom: 0;\n }\n }\n\n .footer {\n padding: 0.5rem 0;\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n font-size: 0.8125rem;\n text-align: center;\n }\n}\n",".DropdownMenu {\n position: relative;\n}\n",".MenuItem {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n padding: 0.75rem 1rem;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n color: inherit;\n }\n }\n\n @media (max-width: 600px) {\n &:focus,\n &:hover,\n &:active {\n text-decoration: none;\n color: inherit;\n }\n\n &:active {\n background-color: var(--color-chat-hover);\n }\n }\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n\n .menu-item-name {\n margin-right: 2rem;\n\n &.capitalize {\n text-transform: capitalize;\n }\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n }\n\n &.destructive {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n\n &:not(.has-ripple):not(.disabled):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n & > .Switcher {\n margin-left: auto;\n }\n\n &[dir=\"rtl\"] {\n i {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n .menu-item-name {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n > .Switcher {\n margin-left: 0;\n margin-right: auto;\n }\n }\n}\n",".CountryCodeInput {\n .input-group {\n cursor: pointer;\n\n z-index: var(--z-country-code-input-group);\n\n .Spinner {\n position: absolute;\n top: 1rem;\n right: 0.75rem;\n opacity: 0.5;\n --spinner-size: 1.5rem;\n }\n\n // Prevent loading additional 10 kB of icomoon font on initial load.\n .css-icon-down {\n position: absolute;\n top: 1.125rem;\n right: 1rem;\n width: 0.75rem;\n height: 0.75rem;\n border: 2px solid var(--color-text-secondary);\n border-top: 0;\n border-left: 0;\n transform: scaleY(1) rotate(45deg);\n transition: color 0.2s ease, transform 0.2s ease, top 0.2s ease;\n\n &.open {\n border-color: var(--color-primary);\n transform: scaleY(-1) rotate(45deg);\n top: 1.5rem;\n }\n }\n }\n\n .bubble {\n width: 100%;\n max-height: 23.5rem;\n overflow-y: auto;\n transform-origin: top center !important;\n transform: scale(0.95);\n\n &.open {\n transform: scaleY(1);\n }\n }\n\n .MenuItem {\n button {\n display: flex;\n align-items: center;\n }\n\n &.no-results button {\n justify-content: center;\n padding: 0.5rem 1rem;\n\n span {\n font-size: 0.875rem;\n }\n }\n }\n\n .country-flag {\n font-size: 2rem;\n margin-right: 2rem;\n\n .emoji {\n width: 2rem;\n height: 2rem;\n display: inline-block;\n vertical-align: 4px;\n margin: -0.5rem 0.125rem;\n }\n }\n\n .country-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 1rem;\n text-align: left;\n }\n\n .country-code {\n margin-left: auto;\n opacity: 0.5;\n }\n}\n",".auth-form {\n width: 100%;\n max-width: 25.5rem;\n margin: 0 auto;\n padding: 6rem 1rem 1rem;\n text-align: center;\n\n @media (min-width: 600px) and (min-height: 450px) {\n padding: 6.8125rem 1.5rem 1.5rem;\n\n &.qr {\n padding-top: 4rem;\n }\n }\n\n #logo,\n .AvatarEditable label {\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n }\n\n #logo {\n background: url(\"../../assets/telegram-logo.svg\") center no-repeat;\n background-size: 100%;\n }\n\n h2 {\n font-size: 1.25rem;\n line-height: 1;\n\n @media (min-width: 600px) {\n font-size: 2rem;\n line-height: 1.5;\n }\n }\n\n .note {\n font-size: 0.875rem;\n line-height: 1.35;\n margin-bottom: 2.5rem;\n color: var(--color-text-secondary);\n\n @media (min-width: 600px) {\n font-size: 1rem;\n margin-bottom: 3rem;\n }\n }\n}\n\n#auth-registration-form,\n#auth-phone-number-form,\n#auth-code-form,\n#auth-password-form,\n#auth-qr-form {\n height: 100%;\n overflow-y: auto;\n}\n\n#auth-phone-number-form {\n form {\n min-height: 26.25rem;\n }\n\n .Button {\n margin-top: 2.75rem;\n }\n\n .Button + .Button {\n margin-top: 1rem;\n }\n}\n\n#auth-code-form,\n#auth-password-form {\n h2 {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n\n.auth-number-edit {\n width: 2.5rem;\n height: 2.5rem;\n padding: 0.5rem;\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n opacity: 0.75;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n}\n\n#auth-qr-form {\n .qr-container,\n .qr-loading {\n height: 280px;\n }\n\n .qr-container {\n opacity: 1;\n transform: scale(1);\n transition: transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 300ms;\n\n &.pre-animate {\n opacity: 0.5;\n transform: scale(0.8);\n }\n\n canvas {\n padding: 0.625rem;\n border-radius: var(--border-radius-default);\n background: var(--color-white);\n margin-top: -0.625rem;\n }\n }\n\n h3 {\n margin: 1.5rem 0 1rem 0;\n }\n\n ol {\n list-style: none;\n counter-reset: item;\n padding: 0 1.75rem;\n\n li {\n counter-increment: item;\n text-align: left;\n margin: 0.75rem 0;\n display: flex;\n\n &::before {\n content: counter(item);\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 1.375rem;\n height: 1.375rem;\n padding: 0;\n margin: 0 0.75rem 0 0;\n background: var(--color-primary);\n border-radius: 50%;\n font-size: smaller;\n color: white;\n }\n }\n }\n}\n\n#sign-in-password {\n word-break: normal !important;\n}\n","#AppInactive {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .content {\n max-width: 28rem;\n margin: auto;\n padding: 1.5rem;\n text-align: center;\n }\n\n .title {\n margin-top: 1rem;\n }\n\n .description {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n img {\n width: 100%;\n max-width: 20rem;\n }\n\n .Button {\n margin-top: 1rem;\n }\n}\n","/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */\n@font-face {\n font-family: Vazir;\n src: url('Vazir-Regular-WOL.woff2') format('woff2'),\n url('Vazir-Regular-WOL.woff') format('woff');\n font-weight: normal;\n font-display:swap;\n unicode-range:U+0627-06FF;\n}\n\n/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */\n@font-face {\n font-family: Vazir;\n src: url('Vazir-Medium-WOL.woff2') format('woff2'),\n url('Vazir-Medium-WOL.woff') format('woff');\n font-weight: 500;\n font-display:swap;\n unicode-range: U+0600-06FF;\n}\n","@import \"reboot\";\n@import \"variables\";\n@import \"mixins\";\n@import \"spacing\";\n@import \"forms\";\n@import \"icons\";\n@import \"common\";\n@import \"../assets/fonts/roboto.css\";\n\nhtml,\nbody {\n width: 100%;\n height: 100%;\n background: var(--color-background);\n margin: 0;\n padding: 0;\n font-size: 16px;\n font-family: \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu, Cantarell,\n \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n color: var(--color-text);\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n overflow: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\nbody.is-ios,\nbody.is-macos {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif;\n}\n\nhtml[lang=\"fa\"],\nhtml[lang=\"fa\"] body {\n font-family: \"Vazir\", \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu,\n Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n\n &.is-ios,\n &.is-macos {\n font-family: \"Vazir\", -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu,\n Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n }\n}\n\nbody.is-ios {\n --border-radius-messages: 1rem;\n --border-radius-messages-small: 0.5rem;\n}\n\nbody.cursor-grabbing,\nbody.cursor-grabbing * {\n cursor: grabbing !important;\n}\n\nbody.cursor-ew-resize {\n cursor: ew-resize !important;\n}\n\n#root {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\n#middle-column-portals,\n#portals {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.hidden {\n visibility: hidden;\n}\n\n.no-selection {\n user-select: none;\n -webkit-user-select: none !important;\n}\n\n.resize-handle {\n display: none;\n position: absolute;\n top: 0;\n right: -0.25rem;\n bottom: 0;\n width: 0.25rem;\n z-index: var(--z-resize-handle);\n cursor: ew-resize;\n\n @media (min-width: 926px) {\n display: block;\n }\n}\n\n/*\n See the article for more information on this visually-hidden pattern.\n https://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n*/\n.visually-hidden {\n position: absolute !important;\n width: 0;\n height: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n z-index: -1;\n}\n\n.not-implemented {\n opacity: 0.5;\n\n &,\n & * {\n cursor: not-allowed !important;\n }\n}\n\n* {\n box-sizing: border-box;\n}\n\n.no-animations #root *,\n.no-animations #root *::before,\n.no-animations #root *::after {\n transition: none !important;\n}\n\n.custom-scroll,\n.custom-scroll-x {\n scrollbar-width: thin;\n scrollbar-color: rgba(90, 90, 90, 0) transparent;\n transition: scrollbar-color 0.3s ease;\n\n -webkit-overflow-scrolling: touch;\n // Fix scroll lock on iOS\n pointer-events: auto;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0);\n border-radius: 0.375rem;\n // `box-shadow` prevents repaint on macOS when hovering out of scrollable container\n box-shadow: 0 0 1px rgba(255, 255, 255, 0.01);\n }\n\n &:hover,\n &:focus,\n &:focus-within {\n scrollbar-color: rgba(90, 90, 90, 0.3) transparent;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0.3);\n }\n }\n}\n\nbody:not(.is-ios) {\n .custom-scroll {\n &::-webkit-scrollbar {\n width: 0.375rem;\n }\n }\n\n .custom-scroll-x {\n &::-webkit-scrollbar {\n height: 0.375rem;\n }\n }\n}\n\n.no-scrollbar {\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.emoji-small {\n background: no-repeat;\n background-size: 1.25rem;\n color: transparent;\n display: inline-block;\n width: 1.25rem;\n height: 1.25rem;\n margin-inline-end: 1px;\n overflow: hidden;\n flex-shrink: 0;\n\n &::selection {\n background-color: var(--color-selection-highlight-emoji);\n color: transparent;\n }\n}\n\ndiv[role=\"button\"] {\n outline: none !important;\n cursor: pointer;\n}\n\n.opacity-transition {\n opacity: 1;\n transition: opacity 0.15s ease;\n\n &:not(.open) {\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n\n &.slow {\n transition-duration: 0.3s;\n }\n}\n\n.color-primary {\n color: var(--color-primary) !important;\n}\n\n.color-danger {\n color: var(--color-error) !important;\n}\n\n.text-muted {\n color: var(--color-text-secondary) !important;\n}\n\n.protector {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 2;\n}\n\n.for-ios-autocapitalization-fix {\n position: fixed;\n font-size: 16px;\n opacity: 0;\n bottom: 1rem;\n z-index: -1;\n}\n\n@keyframes grow-icon {\n 0% {\n transform: scale(0.5);\n opacity: 0.8;\n }\n 50% {\n transform: scale(1.1);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes hide-icon {\n from {\n transform: scale(1);\n opacity: 0.4;\n }\n to {\n transform: scale(0.5);\n opacity: 0;\n }\n}\n","*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\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\n@-ms-viewport {\n width: device-width;\n}\narticle,\naside,\ndialog,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\nbody {\n margin: 0;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\np,\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote,\nfigure {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\ndt,\nb,\nstrong {\n font-weight: 500;\n}\n\nsmall {\n font-size: 80%;\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}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--color-links);\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]),\na:not([href]):not([tabindex]):hover,\na:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font: 0.9375rem/1.25 \"Courier\", \"Courier New\", \"Nimbus Mono L\", \"Courier 10 Pitch\", \"FreeMono\", sans-serif-monospace,\n monospace;\n font-size-adjust: 0.43;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\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}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n","@use \"sass:color\";\n\n@function toRGB($color) {\n @return red($color) + \", \" + green($color) + \", \" + blue($color);\n}\n\n@function blend-normal($foreground, $background) {\n $opacity: opacity($foreground);\n $background-opacity: opacity($background);\n\n // calculate opacity\n $bm-red: color.red($foreground) * $opacity + color.red($background) * $background-opacity * (1 - $opacity);\n $bm-green: color.green($foreground) * $opacity + color.green($background) * $background-opacity * (1 - $opacity);\n $bm-blue: color.blue($foreground) * $opacity + color.blue($background) * $background-opacity * (1 - $opacity);\n @return rgb($bm-red, $bm-green, $bm-blue);\n}\n\n$color-primary: #3390ec;\n\n$color-links: #3390ec;\n\n$color-placeholders: #a2acb4;\n\n$color-text-green: #4fae4e;\n$color-green: #00c73e;\n$color-light-green: #eeffde;\n\n$color-error: #e53935;\n\n$color-warning: #fb8c00;\n\n$color-yellow: #fdd764;\n\n$color-white: #ffffff;\n$color-black: #000000;\n$color-dark-gray: #2e3939;\n$color-gray: #c4c9cc;\n$color-text-secondary: #707579;\n$color-text-secondary-apple: #8a8a90;\n$color-text-meta: #686c72;\n$color-text-meta-apple: #8c8c91;\n$color-borders: #dadce0;\n$color-dividers: #c8c6cc;\n$color-item-active: #ededed;\n$color-chat-hover: #f4f4f5;\n$color-chat-active: #3390ec;\n$color-selection: #3993fb;\n\n// https://github.com/telegramdesktop/tdesktop/wiki/Theme-Reference#user-content-standard-color-constants\n// Colors borrowed from https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/Resources/day-blue.tdesktop-theme\n// historyPeer[1-8]UserpicBg\n$color-user-1: #e17076;\n$color-user-2: #7bc862;\n//$color-user-3: #E5CA77;\n$color-user-4: #65aadd;\n$color-user-5: #a695e7;\n$color-user-6: #ee7aae;\n$color-user-7: #6ec9cb;\n$color-user-8: #faa774;\n\n$color-message-reaction: #ebf3fd;\n$color-message-reaction-hover: #c5def9;\n$color-message-reaction-own: #cef0ba;\n$color-message-reaction-own-hover: #b5e0a4;\n\n:root {\n --color-background: #{$color-white};\n --color-background-selected: #f4f4f5;\n --color-background-secondary: #f4f4f5;\n --color-background-secondary-accent: #e4e4e5;\n --color-background-own: #{$color-light-green};\n --color-background-own-selected: color.adjust($color-light-green, -10%);\n --color-text: #{$color-black};\n --color-text-lighter: #{$color-dark-gray};\n --color-text-secondary: #{$color-text-secondary};\n --color-text-secondary-rgb: #{toRGB($color-text-secondary)};\n --color-text-secondary-apple: #{$color-text-secondary-apple};\n --color-text-meta: #{$color-text-meta};\n --color-text-meta-rgb: #{toRGB($color-text-meta)};\n --color-text-meta-colored: #{$color-text-green};\n --color-text-meta-apple: #{$color-text-meta-apple};\n --color-text-green: #{$color-text-green};\n --color-text-green-rgb: #{toRGB($color-text-green)};\n --color-borders: #{$color-borders};\n --color-borders-input: #{$color-borders};\n --color-dividers: #{$color-dividers};\n --color-webpage-initial-background: #{$color-dark-gray};\n --color-interactive-active: var(--color-primary);\n --color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);\n --color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25); // Overlays underlying inactive element\n --color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);\n --color-composer-button: #{$color-text-secondary}CC;\n\n --color-primary: #{$color-primary};\n --color-primary-shade: #{color.mix($color-primary, $color-black, 92%)};\n --color-primary-shade-darker: #{color.mix($color-primary, $color-black, 84%)};\n --color-primary-shade-rgb: #{toRGB(color.mix($color-primary, $color-black, 92%))};\n --color-primary-opacity: rgba(var(--color-primary), 0.5);\n --color-green: #{$color-green};\n --color-green-darker: #{color.mix($color-green, $color-black, 84%)};\n\n --color-error: #{$color-error};\n --color-error-shade: #{color.mix($color-error, $color-black, 92%)};\n --color-error-rgb: #{toRGB($color-error)};\n\n --color-warning: #{$color-warning};\n\n --color-yellow: #{$color-yellow};\n\n --color-links: #{$color-links};\n\n --color-own-links: #{$color-white};\n\n --color-placeholders: #{$color-placeholders};\n\n --color-pinned: #{$color-white};\n\n --color-code: #4a729a;\n --color-code-bg: #{rgba($color-text-secondary, 0.08)};\n --color-code-own: #3c7940;\n --color-code-own-bg: #{rgba($color-text-secondary, 0.08)};\n\n --color-accent-own: #{$color-text-green};\n --color-message-meta-own: #{$color-text-green};\n\n --color-message-reaction: $color-message-reaction;\n --color-message-reaction-hover: $color-message-reaction-hover;\n --color-message-reaction-own: $color-message-reaction-own;\n --color-message-reaction-hover-own: $color-message-reaction-own-hover;\n\n --color-reply-hover: #{blend-normal(rgba($color-text-secondary, 0.08), $color-white)};\n --color-reply-active: #{blend-normal(rgba($color-text-secondary, 0.16), $color-white)};\n --color-reply-own-hover: #{blend-normal(rgba($color-text-green, 0.12), $color-light-green)};\n --color-reply-own-active: #{blend-normal(rgba($color-text-green, 0.24), $color-light-green)};\n\n --color-background-own-apple: #dcf8c5;\n --color-reply-own-hover-apple: #cbefb7;\n --color-reply-own-active-apple: #bae6a8;\n\n --color-white: #{$color-white};\n --color-gray: #{$color-gray};\n\n --color-chat-hover: #{$color-chat-hover};\n --color-chat-active: #{$color-chat-active};\n --color-item-active: #{$color-item-active};\n\n --color-selection-highlight: #{$color-selection};\n --color-selection-highlight-emoji: rgba(#{toRGB($color-selection)}, 0.7);\n\n --color-user-1: #{$color-user-1};\n --color-user-2: #{$color-user-2};\n --color-user-4: #{$color-user-4};\n --color-user-5: #{$color-user-5};\n --color-user-6: #{$color-user-6};\n --color-user-7: #{$color-user-7};\n --color-user-8: #{$color-user-8};\n\n --color-default-shadow: #72727240;\n --color-light-shadow: #7272722b;\n\n --vh: 1vh;\n\n --border-radius-default: 0.75rem;\n --border-radius-default-small: 0.625rem;\n --border-radius-default-tiny: 0.375rem;\n --border-radius-messages: 0.75rem;\n --border-radius-messages-small: 0.375rem;\n --messages-container-width: 45.5rem;\n --right-column-width: 26.5rem;\n --header-height: 3.5rem;\n\n --symbol-menu-width: 26.25rem;\n --symbol-menu-height: 23.25rem;\n --symbol-menu-footer-height: 3rem;\n\n @media (min-width: 1276px) and (max-width: 1920px) {\n --right-column-width: 25vw;\n }\n\n @media (min-width: 1921px) {\n --messages-container-width: 50vw;\n }\n\n @media (max-width: 600px) {\n --right-column-width: 100vw;\n --symbol-menu-width: 100vw;\n --symbol-menu-height: 14.6875rem;\n }\n\n --z-ui-loader-mask: 2000;\n --z-notification: 1000;\n --z-right-column: 900;\n --z-header-menu: 990;\n --z-header-menu-backdrop: 980;\n --z-modal: 1000;\n --z-media-viewer: 1500;\n --z-drop-area: 55;\n --z-animation-fade: 50;\n --z-menu-bubble: 21;\n --z-menu-backdrop: 20;\n --z-message-highlighted: 14;\n --z-message-context-menu: 13;\n --z-scroll-down-button: 12;\n --z-mobile-search: 12;\n --z-middle-header: 11;\n --z-middle-footer: 11;\n --z-country-code-input-group: 10;\n --z-message-select-control: 9;\n --z-message-select-area: 8;\n --z-sticky-date: 9;\n --z-register-add-avatar: 5;\n --z-media-viewer-head: 3;\n --z-resize-handle: 2;\n --z-below: -1;\n\n --spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);\n --spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);\n --spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);\n --spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);\n --spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);\n --spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);\n --spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);\n --spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);\n\n --drag-target-border: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%23DDDFE0' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n --drag-target-border-hovered: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%2363A2E3' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n\n --layer-blackout-opacity: 0.3;\n\n --layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);\n --select-transition: 200ms ease-out;\n\n body.is-ios {\n --layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n\n body.is-android {\n --layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n --slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n}\n","@use \"sass:map\";\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map.merge(\n (\n 0: 0,\n 1: (\n $spacer * 0.25,\n ),\n 2: (\n $spacer * 0.5,\n ),\n 3: $spacer,\n 4: (\n $spacer * 1.5,\n ),\n 5: (\n $spacer * 2,\n ),\n 6: (\n $spacer * 3,\n ),\n ),\n $spacers\n);\n\n// Margin and Padding\n\n@each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}-#{$size} {\n #{$prop}: $length !important;\n }\n .#{$abbrev}t-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n}\n",".input-group {\n position: relative;\n margin-bottom: 1.5rem;\n\n label {\n display: block;\n padding: 0 0.25rem;\n position: absolute;\n left: 0.75rem;\n top: 0.9375rem;\n background-color: var(--color-background);\n font-size: 1rem;\n font-weight: 400;\n color: var(--color-placeholders);\n transition: transform 0.15s ease-out, color 0.15s ease-out;\n cursor: text;\n pointer-events: none;\n transform-origin: left center;\n white-space: nowrap;\n }\n\n &.with-arrow {\n &::after {\n content: \"\";\n position: absolute;\n height: 0.75rem;\n width: 0.75rem;\n border-left: 1px var(--color-text-secondary) solid;\n border-bottom: 1px var(--color-text-secondary) solid;\n transform: rotate(-45deg);\n right: 2rem;\n top: 1rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(0.75) translate(-0.5rem, -2.25rem);\n }\n\n input::placeholder,\n .form-control::placeholder {\n color: var(--color-placeholders);\n }\n\n &.touched label {\n color: var(--color-text-secondary);\n }\n\n &.error label {\n color: var(--color-error) !important;\n }\n\n &.success label {\n color: var(--color-text-green) !important;\n }\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n &[dir=\"rtl\"] {\n input {\n text-align: right;\n }\n\n label {\n left: auto;\n right: 0.75rem;\n }\n\n &.with-arrow {\n &::after {\n border-left: none;\n border-right: 1px var(--color-text-secondary) solid;\n right: auto;\n left: 2rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(0.75) translate(1.5rem, -2.25rem);\n }\n }\n}\n\n.form-control {\n --border-width: 1px;\n display: block;\n width: 100%;\n height: 3.375rem;\n padding: calc(0.75rem - var(--border-width)) calc(0.9rem - var(--border-width));\n border: var(--border-width) solid var(--color-borders-input);\n border-radius: var(--border-radius-default);\n color: var(--color-text);\n background-color: var(--color-background);\n outline: none;\n transition: border-color 0.15s ease;\n word-break: break-word;\n -webkit-appearance: none;\n\n font-size: 1rem;\n line-height: 1.25rem;\n\n &[dir] {\n text-align: initial;\n }\n\n &:hover {\n border-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:focus,\n &.focus {\n border-color: var(--color-primary);\n box-shadow: inset 0 0 0 1px var(--color-primary);\n caret-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:disabled {\n background: none !important;\n }\n\n .error & {\n border-color: var(--color-error);\n box-shadow: inset 0 0 0 1px var(--color-error);\n caret-color: var(--color-error);\n }\n\n .success & {\n border-color: var(--color-text-green);\n box-shadow: inset 0 0 0 1px var(--color-text-green);\n caret-color: var(--color-text-green);\n }\n}\n\nselect.form-control {\n option {\n line-height: 2rem;\n }\n}\n\ntextarea.form-control {\n resize: none;\n overflow: hidden;\n line-height: 1.3125rem;\n padding-top: calc(1rem - var(--border-width));\n padding-bottom: calc(1rem - var(--border-width));\n}\n\n.input-group.password-input {\n position: relative;\n\n .form-control {\n padding-right: 3.375rem;\n }\n\n .toggle-password {\n position: absolute;\n top: 0;\n right: 0;\n width: 3.375rem;\n height: 3.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none !important;\n\n color: var(--color-text-secondary);\n opacity: 0.7;\n font-size: 1.5rem;\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n }\n\n &[dir=\"rtl\"] {\n .form-control {\n padding-left: 3.375rem;\n padding-right: calc(0.9rem - var(--border-width));\n }\n\n .toggle-password {\n left: 0;\n right: auto;\n }\n }\n}\n","@font-face {\n font-family: 'icomoon';\n src: url('../assets/fonts/icomoon.woff2?n9djnk') format('woff2'),\n url('../assets/fonts/icomoon.woff?n9djnk') format('woff');\n font-weight: normal;\n font-style: normal;\n font-display: block;\n}\n\n[class^=\"icon-\"], [class*=\" icon-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */\n font-family: 'icomoon' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n[class^=\"icon-char-\"], [class*=\" icon-char-\"] {\n &::before {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n content: attr(data-char);\n width: 1.5rem;\n text-align: center;\n display: block;\n }\n}\n\n.icon-loop:before {\n content: \"\\e98c\";\n}\n.icon-skip-next:before {\n content: \"\\e98d\";\n}\n.icon-skip-previous:before {\n content: \"\\e98e\";\n}\n.icon-volume-1:before {\n content: \"\\e98f\";\n}\n.icon-volume-2:before {\n content: \"\\e990\";\n}\n.icon-volume-3:before {\n content: \"\\e991\";\n}\n.icon-reaction-filled:before {\n content: \"\\e994\";\n}\n.icon-reactions:before {\n content: \"\\e993\";\n}\n.icon-sidebar:before {\n content: \"\\e992\";\n}\n.icon-video-stop:before {\n content: \"\\e98b\";\n}\n.icon-speaker:before {\n content: \"\\e981\";\n}\n.icon-speaker-outline:before {\n content: \"\\e982\";\n}\n.icon-phone-discard-outline:before {\n content: \"\\e983\";\n}\n.icon-allow-speak:before {\n content: \"\\e984\";\n}\n.icon-stop-raising-hand:before {\n content: \"\\e985\";\n}\n.icon-share-screen:before {\n content: \"\\e986\";\n}\n.icon-voice-chat:before {\n content: \"\\e987\";\n}\n.icon-video:before {\n content: \"\\e988\";\n}\n.icon-noise-suppression:before {\n content: \"\\e989\";\n}\n.icon-phone-discard:before {\n content: \"\\e98a\";\n}\n.icon-bot-commands-filled:before {\n content: \"\\e97f\";\n}\n.icon-reply-filled:before {\n content: \"\\e980\";\n}\n.icon-bug:before {\n content: \"\\e97e\";\n}\n.icon-data:before {\n content: \"\\e97d\";\n}\n.icon-darkmode:before {\n content: \"\\e979\";\n}\n.icon-animations:before {\n content: \"\\e97a\";\n}\n.icon-enter:before {\n content: \"\\e97b\";\n}\n.icon-fontsize:before {\n content: \"\\e97c\";\n}\n.icon-permissions:before {\n content: \"\\e976\";\n}\n.icon-card:before {\n content: \"\\e977\";\n}\n.icon-truck:before {\n content: \"\\e978\";\n}\n.icon-share-filled:before {\n content: \"\\e95a\";\n}\n.icon-bold:before {\n content: \"\\e961\";\n}\n.icon-bot-command:before {\n content: \"\\e962\";\n}\n.icon-calendar-filter:before {\n content: \"\\e963\";\n}\n.icon-comments:before {\n content: \"\\e964\";\n}\n.icon-comments-sticker:before {\n content: \"\\e965\";\n}\n.icon-arrow-down:before {\n content: \"\\e966\";\n}\n.icon-email:before {\n content: \"\\e967\";\n}\n.icon-italic:before {\n content: \"\\e968\";\n}\n.icon-link:before {\n content: \"\\e969\";\n}\n.icon-mention:before {\n content: \"\\e96a\";\n}\n.icon-monospace:before {\n content: \"\\e96b\";\n}\n.icon-next:before {\n content: \"\\e96c\";\n}\n.icon-password-off:before {\n content: \"\\e96d\";\n}\n.icon-pin-list:before {\n content: \"\\e96e\";\n}\n.icon-previous:before {\n content: \"\\e96f\";\n}\n.icon-replace:before {\n content: \"\\e970\";\n}\n.icon-schedule:before {\n content: \"\\e971\";\n}\n.icon-strikethrough:before {\n content: \"\\e972\";\n}\n.icon-underlined:before {\n content: \"\\e973\";\n}\n.icon-zoom-in:before {\n content: \"\\e974\";\n}\n.icon-zoom-out:before {\n content: \"\\e975\";\n}\n.icon-select:before {\n content: \"\\e960\";\n}\n.icon-folder:before {\n content: \"\\e913\";\n}\n.icon-bots:before {\n content: \"\\e915\";\n}\n.icon-calendar:before {\n content: \"\\e916\";\n}\n.icon-cloud-download:before {\n content: \"\\e917\";\n}\n.icon-colorize:before {\n content: \"\\e918\";\n}\n.icon-forward:before {\n content: \"\\e927\";\n}\n.icon-reply:before {\n content: \"\\e947\";\n}\n.icon-help:before {\n content: \"\\e92a\";\n}\n.icon-info:before {\n content: \"\\e92b\";\n}\n.icon-info-filled:before {\n content: \"\\e91b\";\n}\n.icon-delete-filled:before {\n content: \"\\e91c\";\n}\n.icon-delete:before {\n content: \"\\e91d\";\n}\n.icon-edit:before {\n content: \"\\e923\";\n}\n.icon-new-chat-filled:before {\n content: \"\\e939\";\n}\n.icon-send:before {\n content: \"\\e94a\";\n}\n.icon-send-outline:before {\n content: \"\\e94b\";\n}\n.icon-add-user-filled:before {\n content: \"\\e904\";\n}\n.icon-add-user:before {\n content: \"\\e905\";\n}\n.icon-delete-user:before {\n content: \"\\e91e\";\n}\n.icon-microphone:before {\n content: \"\\e935\";\n}\n.icon-microphone-alt:before {\n content: \"\\e93b\";\n}\n.icon-poll:before {\n content: \"\\e938\";\n}\n.icon-revote:before {\n content: \"\\e93a\";\n}\n.icon-photo:before {\n content: \"\\e940\";\n}\n.icon-document:before {\n content: \"\\e91f\";\n}\n.icon-camera:before {\n content: \"\\e90e\";\n}\n.icon-camera-add:before {\n content: \"\\e90f\";\n}\n.icon-logout:before {\n content: \"\\e932\";\n}\n.icon-saved-messages:before {\n content: \"\\e948\";\n}\n.icon-settings:before {\n content: \"\\e94e\";\n}\n.icon-phone:before {\n content: \"\\e93f\";\n}\n.icon-attach:before {\n content: \"\\e909\";\n}\n.icon-copy:before {\n content: \"\\e91a\";\n}\n.icon-channel:before {\n content: \"\\e911\";\n}\n.icon-group:before {\n content: \"\\e929\";\n}\n.icon-user:before {\n content: \"\\e959\";\n}\n.icon-non-contacts:before {\n content: \"\\e928\";\n}\n.icon-active-sessions:before {\n content: \"\\e902\";\n}\n.icon-admin:before {\n content: \"\\e906\";\n}\n.icon-download:before {\n content: \"\\e921\";\n}\n.icon-location:before {\n content: \"\\e930\";\n}\n.icon-stop:before {\n content: \"\\e952\";\n}\n.icon-archive:before {\n content: \"\\e908\";\n}\n.icon-unarchive:before {\n content: \"\\e953\";\n}\n.icon-readchats:before {\n content: \"\\e933\";\n}\n.icon-unread:before {\n content: \"\\e957\";\n}\n.icon-message:before {\n content: \"\\e934\";\n}\n.icon-lock:before {\n content: \"\\e931\";\n}\n.icon-unlock:before {\n content: \"\\e954\";\n}\n.icon-mute:before {\n content: \"\\e937\";\n}\n.icon-unmute:before {\n content: \"\\e955\";\n}\n.icon-pin:before {\n content: \"\\e941\";\n}\n.icon-unpin:before {\n content: \"\\e956\";\n}\n.icon-smallscreen:before {\n content: \"\\e95e\";\n}\n.icon-fullscreen:before {\n content: \"\\e95f\";\n}\n.icon-large-pause:before {\n content: \"\\e92e\";\n}\n.icon-large-play:before {\n content: \"\\e92f\";\n}\n.icon-pause:before {\n content: \"\\e93d\";\n}\n.icon-play:before {\n content: \"\\e943\";\n}\n.icon-channelviews:before {\n content: \"\\e912\";\n}\n.icon-message-succeeded:before {\n content: \"\\e900\";\n}\n.icon-message-read:before {\n content: \"\\e901\";\n}\n.icon-message-pending:before {\n content: \"\\e94c\";\n}\n.icon-message-failed:before {\n content: \"\\e94d\";\n}\n.icon-favorite:before {\n content: \"\\e93e\";\n}\n.icon-keyboard:before {\n content: \"\\e944\";\n}\n.icon-delete-left:before {\n content: \"\\e945\";\n}\n.icon-recent:before {\n content: \"\\e946\";\n}\n.icon-gifs:before {\n content: \"\\e94f\";\n}\n.icon-stickers:before {\n content: \"\\e95b\";\n}\n.icon-smile:before {\n content: \"\\e950\";\n}\n.icon-animals:before {\n content: \"\\e907\";\n}\n.icon-eats:before {\n content: \"\\e922\";\n}\n.icon-sport:before {\n content: \"\\e951\";\n}\n.icon-car:before {\n content: \"\\e910\";\n}\n.icon-lamp:before {\n content: \"\\e92c\";\n}\n.icon-language:before {\n content: \"\\e92d\";\n}\n.icon-flag:before {\n content: \"\\e926\";\n}\n.icon-more:before {\n content: \"\\e936\";\n}\n.icon-search:before {\n content: \"\\e949\";\n}\n.icon-remove:before {\n content: \"\\e95c\";\n}\n.icon-add:before {\n content: \"\\e903\";\n}\n.icon-check:before {\n content: \"\\e914\";\n}\n.icon-close:before {\n content: \"\\e919\";\n}\n.icon-arrow-left:before {\n content: \"\\e90d\";\n}\n.icon-arrow-right:before {\n content: \"\\e93c\";\n}\n.icon-down:before {\n content: \"\\e920\";\n}\n.icon-up:before {\n content: \"\\e958\";\n}\n.icon-eye-closed:before {\n content: \"\\e925\";\n}\n.icon-eye:before {\n content: \"\\e924\";\n}\n.icon-muted:before {\n content: \"\\e95d\";\n}\n.icon-avatar-archived-chats:before {\n content: \"\\e90a\";\n}\n.icon-avatar-deleted-account:before {\n content: \"\\e90b\";\n}\n.icon-avatar-saved-messages:before {\n content: \"\\e90c\";\n}\n.icon-pinned-chat:before {\n content: \"\\e942\";\n}\n","@import \"./mixins\";\n\n// Common styles for all media-type components across the app.\n.media-inner {\n position: relative;\n\n video,\n img {\n display: block;\n object-fit: cover;\n }\n\n video {\n background: no-repeat 50% 50%;\n background-size: contain;\n }\n\n .thumbnail ~ .thumbnail,\n .thumbnail ~ .full-media,\n .media-loading {\n position: absolute;\n }\n}\n\n.animated-close-icon {\n position: absolute;\n transform: rotate(-45deg);\n\n &,\n &::before,\n &::after {\n width: 1.125rem;\n height: 0.125rem;\n border-radius: 0.125rem;\n background-color: var(--color-text-secondary);\n transition: transform var(--slide-transition);\n }\n\n &::before,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n content: \"\";\n }\n\n &::before {\n transform: rotate(90deg);\n }\n\n &.no-transition {\n &,\n &::before,\n &::after {\n transition: none;\n }\n }\n\n &.state-back {\n transform: rotate(180deg);\n\n &::before {\n transform: rotate(45deg) scaleX(0.75) translate(0, -0.375rem);\n }\n\n &::after {\n transform: rotate(-45deg) scaleX(0.75) translate(0, 0.375rem);\n }\n }\n}\n\n// Used by ChatList and ContactList components\n.chat-list {\n background: var(--color-background);\n height: 100%;\n padding: 0.5rem 0.125rem 0.5rem 0.4375rem;\n\n overflow-y: auto;\n body.is-android & {\n @include overflow-y-overlay();\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n }\n\n @media (max-width: 600px) {\n padding-left: 0;\n padding-right: 0;\n }\n\n .no-results {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n\n// Used by Avatar and ProfilePhoto components\ndiv {\n &.color-bg-1 {\n --color-user: var(--color-user-1);\n }\n\n &.color-bg-2 {\n --color-user: var(--color-user-2);\n }\n\n &.color-bg-4 {\n --color-user: var(--color-user-4);\n }\n\n &.color-bg-5 {\n --color-user: var(--color-user-5);\n }\n\n &.color-bg-6 {\n --color-user: var(--color-user-6);\n }\n\n &.color-bg-7 {\n --color-user: var(--color-user-7);\n }\n\n &.color-bg-8 {\n --color-user: var(--color-user-8);\n }\n\n &.replies-bot-account,\n &.saved-messages {\n --color-user: var(--color-primary);\n }\n\n &.deleted-account {\n --color-user: var(--color-gray);\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.6f6178fe09cee789a987.js b/dist/main.6f6178fe09cee789a987.js new file mode 100644 index 000000000..fe3687ff6 --- /dev/null +++ b/dist/main.6f6178fe09cee789a987.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var e,t,n,r,o,d,a={1226:(e,t,n)=>{n.d(t,{t9:()=>c,u3:()=>l,g8:()=>i});var r=n(3716),o=n(6926),d=n(9118);let a;const u=new Map,s=new Map;function i(e,t){return a||(r.eM&&console.log(">>> START LOAD WORKER"),a=new Worker(new URL(n.p+n.u(626),n.b)),function(e){a.addEventListener("message",(t=>{let{data:n}=t;if("update"===n.type)e(n.update);else if("methodResponse"===n.type){const e=u.get(n.messageId);e&&(n.error?e.reject(n.error):e.resolve(n.response))}else if("methodCallback"===n.type){var r,o;null===(r=u.get(n.messageId))||void 0===r||null===(o=r.callback)||void 0===o||o.call(r,...n.callbackArgs)}else if("unhandledError"===n.type){var d;throw new Error(null===(d=n.error)||void 0===d?void 0:d.message)}}))}(e),"iOS"===t.platform&&window.addEventListener("focus",(()=>{m(),setTimeout((()=>m()),1e3)}))),f({type:"initApi",args:[t]})}function c(e){if(!a)return void(r.eM&&console.warn("API is not initialized"));for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o{try{await d}catch(e){}})(),d}function l(e){e.isCanceled=!0;const{messageId:t}=s.get(e)||{};t&&a.postMessage({type:"cancelProgress",messageId:t})}function f(e){const t=(0,o.Z)(u),n={messageId:t,...e},r={messageId:t},d=new Promise(((e,t)=>{Object.assign(r,{resolve:e,reject:t})}));if("args"in n&&"function"==typeof n.args[1]){const e=n.args.pop();r.callback=e,s.set(e,r)}return u.set(t,r),d.catch((()=>{})).finally((()=>{u.delete(t),r.callback&&s.delete(r.callback)})),a.postMessage(n),d}const h=Date.now();async function m(){try{await Promise.race([f({type:"ping"}),(0,d.wO)(150).then((()=>Promise.reject(new Error("HEALTH_CHECK_TIMEOUT"))))])}catch(e){console.error(e),Date.now()-h>=5e3&&window.location.reload()}}},6137:(e,t,n)=>{n.d(t,{Vv:()=>r.Vv,_f:()=>r._f,_Q:()=>r._Q,IU:()=>o.I});var r=n(4746),o=n(9077)},9077:(e,t,n)=>{let r;n.d(t,{I:()=>r}),function(e){e[e.BlobUrl=0]="BlobUrl",e[e.Lottie=1]="Lottie",e[e.Progressive=2]="Progressive",e[e.Stream=3]="Stream"}(r||(r={}))},4746:(e,t,n)=>{let r;n.d(t,{Vv:()=>r,_f:()=>o,_Q:()=>d}),function(e){e.Bold="MessageEntityBold",e.Blockquote="MessageEntityBlockquote",e.BotCommand="MessageEntityBotCommand",e.Cashtag="MessageEntityCashtag",e.Code="MessageEntityCode",e.Email="MessageEntityEmail",e.Hashtag="MessageEntityHashtag",e.Italic="MessageEntityItalic",e.MentionName="MessageEntityMentionName",e.Mention="MessageEntityMention",e.Phone="MessageEntityPhone",e.Pre="MessageEntityPre",e.Strike="MessageEntityStrike",e.TextUrl="MessageEntityTextUrl",e.Url="MessageEntityUrl",e.Underline="MessageEntityUnderline",e.Spoiler="MessageEntitySpoiler",e.Unknown="MessageEntityUnknown"}(r||(r={}));const o=-1,d="MESSAGE_DELETED"},88:(e,t,n)=>{n.d(t,{Z:()=>h});var r=n(4050),o=n(5116);const d=36,a=2147483647;function u(e,t,n){let r;for(e=n?Math.floor(e/700):e>>1,e+=Math.floor(e/t),r=0;e>455;r+=d)e=Math.floor(e/35);return Math.floor(r+36*e/(e+38))}function s(e,t){const n=[],r=[],o=e.length;let s,i,c,l,f,h,m,p,g,v,y,b,I;for(s=128,c=0,l=72,f=e.lastIndexOf("-"),f<0&&(f=0),h=0;h=128)throw new RangeError("Illegal input >= 0x80");n.push(e.charCodeAt(h))}for(m=f>0?f+1:0;m=o)throw RangeError("punycode_bad_input(1)");if(y=(w=e.charCodeAt(m++))-48<10?w-22:w-65<26?w-65:w-97<26?w-97:d,y>=d)throw RangeError("punycode_bad_input(2)");if(y>Math.floor((a-c)/g))throw RangeError("punycode_overflow(1)");if(c+=y*g,b=v<=l?1:v>=l+26?26:v-l,yMath.floor(a/(d-b)))throw RangeError("punycode_overflow(2)");g*=d-b}if(i=n.length+1,l=u(c-p,i,0===p),Math.floor(c/i)>a-s)throw RangeError("punycode_overflow(3)");s+=Math.floor(c/i),c%=i,t&&r.splice(c,0,e.charCodeAt(m-1)-65<26),n.splice(c,0,s),c++}var w;if(t)for(c=0,I=n.length;c{const t=[];let n=0;const r=e.length;let o;for(;n65535&&(o-=65536,t.push(String.fromCharCode(o>>>10&1023|55296)),o=56320|1023&o),t.push(String.fromCharCode(o))}return t.join("")})(n)}var i=n(3716),c=n(6752),l=n(1396);function f(e){if(!e)return;const t=(0,l.X)(e);if(t)try{let e=decodeURI(t);const n=e.match(/^https?:\/\/([^/:?#]+)(?:[/:?#]|$)/i);if(!n)return;const r=n[1];return e=e.replace(r,function(e){const t=e.split("."),n=[];for(let e=0;e{let{url:t,text:n,className:d,children:a,isRtl:u}=e;const{toggleSafeLinkModal:s,openTelegramLink:h}=(0,o.uC)(),m=a||n,p=t!==m,g=(0,r.I4)((e=>e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||!t||!t.match(i.FS)&&!t.match(i.g$)?!p||(s({url:t}),e.preventDefault(),!1):(e.preventDefault(),h({url:t}),!1)),[p,h,s,t]);if(!t)return;const v=(0,c.Z)(d||"text-entity-link",n.length>50&&"long-word-break-all");return r.ZP.createElement("a",{href:(0,l.X)(t),title:f(t),target:"_blank",rel:"noopener noreferrer",className:v,onClick:g,dir:u?"rtl":"auto"},m)}))},5376:(e,t,n)=>{n.d(t,{yW:()=>r,K2:()=>o,mD:()=>d,Oh:()=>a,v6:()=>u});function r(e){return e>536870912?`${(e/1073741824).toFixed(1)} GB`:e>524288?`${(e/1048576).toFixed(1)} MB`:`${(e/1024).toFixed(1)} KB`}function o(e){const{fileName:t,mimeType:n}=e;return d(t,n)}function d(e,t){return e&&-1!==e.indexOf(".")?e.split(".").pop():t.split("/").pop()}function a(e){switch(e){case"apk":case"xls":case"xlsx":return"green";case"zip":case"rar":case"7z":case"tar":case"gz":case"ppt":case"pptx":return"orange";case"pdf":case"xps":return"red";default:return"default"}}function u(e){return Boolean(e.previewBlobUrl||e.thumbnail)}},4784:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(3681);const o=new RegExp(`^(?:${r.Z.source})+$`,""),d=e=>{if(e.length>24)return!1;if(!Boolean(e.match(o)))return!1;let t=0;for(;r.Z.exec(e);)if(t++,t>3)return r.Z.lastIndex=0,!1;return t}},8005:(e,t,n)=>{n.d(t,{D:()=>y});var r=n(4050),o=n(8415),d=n(8035),a=n(9937),u=n(996),s=n(2340),i=n(6752),c=n(8033),l=n(5116);const f=e=>{let{className:t,sender:n,children:o}=e;const{openChat:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({id:n.id})}),[n,d]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("UserLink",t),onClick:a},o):o},h=e=>{let{className:t,message:n,children:o}=e;const{focusMessage:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({chatId:n.chatId,messageId:n.id})}),[d,n]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("MessageLink",t),onClick:a},o):o},m=e=>{let{className:t,chatId:n,children:o}=e;const{openChat:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({id:n})}),[n,d]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("ChatLink",t),onClick:a},o):o},p=e=>{let{className:t,groupCall:n,children:o}=e;const{joinGroupCall:d}=(0,l.uC)(),a=(0,r.I4)((()=>{n&&d({id:n.id,accessHash:n.accessHash})}),[n,d]);return n?r.ZP.createElement(c.Z,{className:(0,i.Z)("GroupCallLink",t),onClick:a},o):o},g=32,v=" ";function y(e,t,n,r,o,d,u){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};if(!t.content.action)return[];const{text:i,translationValues:c,amount:l,currency:f,call:h}=t.content.action,m=[],p=s.asPlainText||s.asTextWithSpoilers,g="Chat.Service.Group.UpdatedPinnedMessage1"!==i||d?i:"Message.PinnedGenericMessage";let y,M=e(g,null!=c&&c.length?c:void 0);return M.includes("%payment_amount%")&&(y=P(M,"%payment_amount%",(0,a.x)(l,f,e.code)),M=y.pop(),m.push(...y)),y=P(M,"%action_origin%",n?C(n,p)||v:r?S(e,r,p)||v:"User"),M=y.pop(),m.push(...y),y=P(M,"%target_user%",o?o.map((e=>C(e,p))).filter(Boolean):"User"),M=y.pop(),m.push(...y),y=P(M,"%message%",d?I(e,d,s):"a message"),M=y.pop(),m.push(...y),y=P(M,"%product%",d?b(d):"a product"),M=y.pop(),m.push(...y),y=P(M,"%target_chat%",u?E(u,p):"another chat"),m.push(...y),s.asPlainText?m.join("").trim():h?w(h,m):m}function b(e){return e.content&&e.content.invoice?e.content.invoice.title:"a product"}function I(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{asPlainText:d,asTextWithSpoilers:a}=n;if(d)return(0,o.MK)(e,t,void 0,g);const s=(0,u.e)(e,t,void 0,void 0,g);return a?r.ZP.createElement("span",null,s):r.ZP.createElement(h,{className:"action-link",message:t},s)}function w(e,t){return r.ZP.createElement(p,{groupCall:e},t)}function C(e,t){const n=(0,d.Z)((0,o.Js)(e),g);return t?n:r.ZP.createElement(f,{className:"action-link",sender:e},e&&(0,s.Z)(n))}function S(e,t,n){const a=(0,d.Z)((0,o.U)(e,t),g);return n?a:r.ZP.createElement(m,{className:"action-link",chatId:t.id},t&&(0,s.Z)(a))}function E(e,t){const n="another chat";return t?n:r.ZP.createElement(m,{className:"action-link",chatId:e},n)}function P(e,t,n){const r=e.indexOf(t);if(r<0||!n)return[e];const o=[];return o.push(e.substring(0,r)),Array.isArray(n)?n.forEach(((e,t)=>{o.push(e),t+1{n.d(t,{X:()=>s,e:()=>i});var r=n(6137),o=n(8415),d=n(2340),a=n(8974),u=n(8035);function s(e,t,n,r,d){const{text:s,entities:i}=e.content.text||{};if(!s){const t=(0,o.UD)(e);return t?[(0,u.Z)(t,d)]:void 0}return(0,a.H)((0,u.Z)(s,d),i,t,n,void 0,e.id,r)}function i(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3?arguments[3]:void 0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:o.lN,{entities:c}=t.content.text||{};const l=null==c?void 0:c.some((e=>e.type===r.Vv.Spoiler));if(!l){const r=(0,u.Z)((0,o.MK)(e,t,n),i);return a?(0,d.Z)(r,["emoji","highlight"],{highlight:a}):(0,d.Z)(r)}const f=!n&&(0,o.Eb)(t),h=f?`${f} `:"",m=s(t,a,void 0,!0,i),p=(0,o.Kk)(e,t,m);return[h,...Array.isArray(p)?p:[p]].filter(Boolean)}},2340:(e,t,n)=>{n.d(t,{Z:()=>m});var r=n(4050),o=n(3681),d=n(3716),a=n(7361),u=n(4284),s=n(6752),i=n(782),c=n(7373),l=n(88);const f=/^[\d\wа-яё]$/i,h=/(\*\*|__).+?\1/g;function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["emoji"],n=arguments.length>2?arguments[2]:void 0;return"string"!=typeof e?[e]:(0,i.oA)(t.reduce(((e,t)=>{switch(t){case"escape_html":return p(e);case"hq_emoji":return o.Z.lastIndex=0,g(e,"big","jsx");case"emoji":return o.Z.lastIndex=0,g(e,"small","jsx");case"emoji_html":return o.Z.lastIndex=0,g(e,"small","html");case"br":return v(e,"jsx");case"br_html":return v(e,"html");case"highlight":return y(e,n.highlight);case"links":return I(e);case"simple_markdown":return w(e,"jsx");case"simple_markdown_html":return w(e,"html")}return e}),[e]))}function p(e){const t=document.createElement("div");return e.reduce(((e,n)=>"string"!=typeof n?(e.push(n),e):(t.innerText=n,e.push(t.innerHTML),e)),[])}function g(e,t,n){return a.op?e:e.reduce(((e,d)=>{if("string"!=typeof d)return e.push(d),e;const a=(d=(0,u.g6)(d)).split(o.Z),i=d.match(o.Z)||[];return e.push(a[0]),i.reduce(((e,d,i)=>{const c=(0,u.U_)((0,o.l)(d));if(!c)return e;const l=(0,s.Z)("emoji","small"===t&&"emoji-small");"jsx"===n&&e.push(r.ZP.createElement("img",{className:l,src:`./img-apple-${"big"===t?"160":"64"}/${c}.png`,alt:d})),"html"===n&&e.push(`${d}`);const f=2*i+2;return a[f]&&e.push(a[f]),e}),e)}),[])}function v(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n)return e.push(n),e;const o=n.split(/\r\n|\r|\n/g).reduce(((e,n,o,d)=>{const a=n.trimLeft(),u=n.length-a.length;return e.push(String.fromCharCode(160).repeat(u)+a),o!==d.length-1&&e.push("jsx"===t?r.ZP.createElement("br",null):"
"),e}),[]);return[...e,...o]}),[])}function y(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n||!t)return e.push(n),e;const o=n.toLowerCase(),d=o.indexOf(t.toLowerCase()),a=o[d+t.length];if(d<0||a&&a.match(f))return e.push(n),e;const u=[];return u.push(n.substring(0,d)),u.push(r.ZP.createElement("span",{className:"matching-text-highlight"},n.substring(d,d+t.length))),u.push(n.substring(d+t.length)),[...e,...u]}),[])}const b=new RegExp(`${d.FM}|${d.uW}`,"ig");function I(e){return e.reduce(((e,t)=>{if("string"!=typeof t)return e.push(t),e;const n=t.match(b);if(!n||!n.length)return e.push(t),e;const o=[];let d=n.shift(),a=0;for(;d;){const e=t.indexOf(d,a);o.push(t.substring(a,e)),d.startsWith("@")?o.push(r.ZP.createElement(c.Z,{username:d},d)):(d.endsWith("?")&&(d=d.slice(0,d.length-1)),o.push(r.ZP.createElement(l.Z,{text:d,url:d}))),a=e+d.length,d=n.shift()}return o.push(t.substring(a)),[...e,...o]}),[])}function w(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n)return e.push(n),e;const o=n.split(h),d=n.match(h)||[];return e.push(o[0]),d.reduce(((e,n,d)=>{"jsx"===t?e.push(n.startsWith("**")?r.ZP.createElement("b",null,n.replace(/\*\*/g,"")):r.ZP.createElement("i",null,n.replace(/__/g,""))):e.push(n.startsWith("**")?`${n.replace(/\*\*/g,"")}`:`${n.replace(/__/g,"")}`);const a=2*d+2;return o[a]&&e.push(o[a]),e}),e)}),[])}},8974:(e,t,n)=>{n.d(t,{z:()=>p,H:()=>m});var r=n(4050),o=n(5116),d=n(6137),a=n(2340),u=n(7373),s=n(88),i=n(6752),c=n(706);const l=new Map,f=(0,i.y)("Spoiler"),h=(0,r.X$)((e=>{let{children:t,messageId:n}=e;const o=(0,r.sO)(null),[d,a,u]=(0,c.Z)(),s=(0,r.I4)((e=>{var t;e.preventDefault(),e.stopPropagation(),null===(t=l.get(n))||void 0===t||t.forEach((e=>e.reveal()));const r=o.current.innerText.length,d=1e3*Math.round(r/23),a=Math.max(5e3,Math.min(d,6e4));setTimeout((()=>{var e;null===(e=l.get(n))||void 0===e||e.forEach((e=>e.conceal())),u()}),a)}),[u,n]);return(0,r.d4)((()=>{if(n)return l.has(n)?l.get(n).push({reveal:a,conceal:u}):l.set(n,[{reveal:a,conceal:u}]),()=>{l.delete(n)}}),[u,s,d,n,a]),r.ZP.createElement("span",{className:f("&",!d&&"concealed",!d&&Boolean(n)&&"animated"),onClick:n&&!d?s:void 0},r.ZP.createElement("span",{className:f("content"),ref:o},t))}));function m(e,t,n,o,i,c,l){if(!t||!t.length)return g(e,n,o,i,l);const f=[];let m=!1;const p=function(e){const t=new Set,n=[];return e.forEach(((r,o)=>{if(t.has(o))return;const d=v(r,o,e,t);d&&(d.organizedIndexes.forEach((e=>{t.add(e)})),n.push(d))})),n}(t);function w(t,f,p,v){const C=[],{entity:S,nestedEntities:E}=p,{offset:P,length:M,type:A}=S;let k=e.substring(t,P);const T=k.length;k&&(m&&k.length>0&&"\n"===k[0]&&(k=k.substr(1),m=!1),k&&C.push(...g(k,n,o,i,l)));const N=t+T,L=N+M;let R=e.substring(P,P+M);const x=[];if(m&&R.length>0&&"\n"===R[0]&&(R=R.substr(1),m=!1),A===d.Vv.Pre&&(m=!0),E.length){let e=N;E.forEach(((t,n)=>{const{renderResult:r,entityEndIndex:o}=w(e,L,t,n===E.length-1);x.push(...r),e=o}))}const B=i?function(e,t,n){const r="string"==typeof t&&t,o=n.length?n.join(""):(0,a.Z)(t,["escape_html","emoji_html","br_html"]).join("");if(!r)return o;switch(e.type){case d.Vv.Bold:return`${o}`;case d.Vv.Italic:return`${o}`;case d.Vv.Underline:return`${o}`;case d.Vv.Code:return`${o}`;case d.Vv.Pre:return`\`\`\`
${o}
\`\`\``;case d.Vv.Strike:return`${o}`;case d.Vv.MentionName:return`${o}`;case d.Vv.Url:case d.Vv.TextUrl:return`${o}`;case d.Vv.Spoiler:return`${o}`;default:return o}}(S,R,x):function(e,t,n,o,a,i){const c="string"==typeof t&&t,l=n.length?n:t;function f(){return g(l,o,void 0,void 0,i)}if(!c)return f();if(i){const t=f();return e.type===d.Vv.Spoiler?r.ZP.createElement(h,null,t):t}switch(e.type){case d.Vv.Bold:return r.ZP.createElement("strong",null,f());case d.Vv.Blockquote:return r.ZP.createElement("blockquote",null,f());case d.Vv.BotCommand:return r.ZP.createElement("a",{onClick:b,className:"text-entity-link",dir:"auto"},f());case d.Vv.Hashtag:case d.Vv.Cashtag:return r.ZP.createElement("a",{onClick:I,className:"text-entity-link",dir:"auto"},f());case d.Vv.Code:return r.ZP.createElement("code",{className:"text-entity-code"},f());case d.Vv.Email:return r.ZP.createElement("a",{href:`mailto:${c}`,target:"_blank",rel:"noopener noreferrer",className:"text-entity-link",dir:"auto"},f());case d.Vv.Italic:return r.ZP.createElement("em",null,f());case d.Vv.MentionName:return r.ZP.createElement(u.Z,{userId:e.userId},f());case d.Vv.Mention:return r.ZP.createElement(u.Z,{username:c},f());case d.Vv.Phone:return r.ZP.createElement("a",{href:`tel:${c}`,className:"text-entity-link",dir:"auto"},f());case d.Vv.Pre:return r.ZP.createElement("pre",{className:"text-entity-pre"},f());case d.Vv.Strike:return r.ZP.createElement("del",null,f());case d.Vv.TextUrl:case d.Vv.Url:return r.ZP.createElement(s.Z,{url:y(c,e),text:c},f());case d.Vv.Underline:return r.ZP.createElement("ins",null,f());case d.Vv.Spoiler:return r.ZP.createElement(h,{messageId:a},f());default:return f()}}(S,R,x,n,c,l);if(Array.isArray(B)?C.push(...B):C.push(B),v&&L0&&"\n"===t[0]&&(t=t.substring(1)),t&&C.push(...g(t,n,o,i,l))}return{renderResult:C,entityEndIndex:L}}let C=0;return p.forEach(((t,n)=>{const{renderResult:r,entityEndIndex:o}=w(C,e.length,t,n===p.length-1);f.push(...r),C=o})),f}function p(e){const{text:t,entities:n}=e||{};if(!t)return"";const r=m(t,n,void 0,void 0,!0);return Array.isArray(r)?r.join(""):r}function g(e,t,n,r,o){if(Array.isArray(e)){const d=[];return e.forEach((e=>{d.push(...g(e,t,n,r,o))})),d}if(r)return(0,a.Z)(e,["escape_html","emoji_html","br_html"]);const d=[n?"hq_emoji":"emoji"];return o||d.push("br"),t?(0,a.Z)(e,d.concat("highlight"),{highlight:t}):(0,a.Z)(e,d)}function v(e,t,n,r){const{offset:o,length:d}=e,a=new Set([t]);if(r.has(t))return;const u=[];return n.filter(((e,n)=>n>t&&e.offset>=o&&e.offsetv(e,n.indexOf(e),n,r))).filter(Boolean).forEach((e=>{let t=!1;e.organizedIndexes.forEach((e=>{t||a.has(e)||(t=!0),a.add(e)})),t&&u.push(e)})),{entity:e,organizedIndexes:a,nestedEntities:u}}function y(e,t){const{type:n,url:r}=t;return n===d.Vv.TextUrl&&r?r:e}function b(e){(0,o.uC)().sendBotCommand({command:e.currentTarget.innerText})}function I(e){(0,o.uC)().setLocalTextSearchQuery({query:e.currentTarget.innerText}),(0,o.uC)().searchTextMessagesLocal()}},386:(e,t,n)=>{n.d(t,{q:()=>d,b:()=>a});var r=n(3716),o=n(7361);function d(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o.cj||!document.activeElement||document.activeElement.id!==r.R2||!t&&e.target!==e.currentTarget||e.preventDefault()}function a(e){d(e,!0)}},7373:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(5116),d=n(9066);const a=(0,o.c$)(((e,t)=>{let{userId:n}=t;return{userOrChat:n?(0,d.dy)(e,n):void 0}}))((e=>{let{username:t,userOrChat:n,children:d}=e;const{openChat:a,openChatByUsername:u}=(0,o.uC)();return r.ZP.createElement("a",{onClick:()=>{n?a({id:n.id}):t&&u({username:t.substring(1)})},className:"text-entity-link",dir:"auto"},d)}))},231:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(4050),o=n(6752),d=n(9204),a=n(8512);const u=e=>{let{ref:t,type:n="button",onClick:u,onContextMenu:s,onMouseDown:i,onMouseEnter:c,onMouseLeave:l,onFocus:f,children:h,size:m="default",color:p="primary",backgroundImage:g,className:v,round:y,pill:b,fluid:I,isText:w,isLoading:C,ariaLabel:S,href:E,download:P,disabled:M,ripple:A,faded:k,tabIndex:T,isRtl:N,withClickPropagation:L}=e,R=(0,r.sO)(null);t&&(R=t);const[x,B]=(0,r.eJ)(!1),O=(0,o.Z)("Button",v,m,p,y&&"round",b&&"pill",I&&"fluid",M&&"disabled",w&&"text",C&&"loading",A&&"has-ripple",k&&"faded",x&&"clicked",g&&"with-image"),Z=(0,r.I4)((e=>{!M&&u&&u(e),B(!0),setTimeout((()=>{B(!1)}),400)}),[M,u]),F=(0,r.I4)((e=>{L||e.preventDefault(),!M&&i&&i(e)}),[i,M,L]);return E?r.ZP.createElement("a",{ref:R,className:O,href:E,title:S,download:P,tabIndex:T,dir:N?"rtl":void 0},h,!M&&A&&r.ZP.createElement(a.Z,null)):r.ZP.createElement("button",{ref:R,type:n,className:O,onClick:Z,onContextMenu:s,onMouseDown:F,onMouseEnter:c&&!M?c:void 0,onMouseLeave:l&&!M?l:void 0,onFocus:f&&!M?f:void 0,"aria-label":S,title:S,tabIndex:T,dir:N?"rtl":void 0,style:g?`background-image: url(${g})`:void 0},C?r.ZP.createElement("div",null,r.ZP.createElement("span",{dir:N?"auto":void 0},"Please wait..."),r.ZP.createElement(d.Z,{color:w?"blue":"white"})):h,!M&&A&&r.ZP.createElement(a.Z,null))}},4605:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(4050),o=n(6752),d=n(9107),a=n(2340),u=n(9204);const s=(0,r.X$)((e=>{let{id:t,name:n,value:s,label:i,subLabel:c,checked:l,disabled:f,round:h,blocking:m,isLoading:p,onChange:g,onCheck:v}=e;const y=(0,d.Z)(),b=(0,r.I4)((e=>{g&&g(e),v&&v(e.currentTarget.checked)}),[g,v]),I=(0,o.Z)("Checkbox",f&&"disabled",h&&"round",p&&"loading",m&&"blocking");return r.ZP.createElement("label",{className:I,dir:y.isRtl?"rtl":void 0},r.ZP.createElement("input",{type:"checkbox",id:t,name:n,value:s,checked:l,disabled:f,onChange:b}),r.ZP.createElement("div",{className:"Checkbox-main"},r.ZP.createElement("span",{className:"label",dir:"auto"},(0,a.Z)(i)),c&&r.ZP.createElement("span",{className:"subLabel",dir:"auto"},(0,a.Z)(c))),p&&r.ZP.createElement(u.Z,null))}))},3106:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(2328);const d=e=>{let{trigger:t,className:n,children:d,positionX:a="left",positionY:u="top",footer:s,forceOpen:i,onOpen:c,onClose:l}=e;const f=(0,r.sO)(null),h=(0,r.sO)(null),[m,p]=(0,r.eJ)(!1);return r.ZP.createElement("div",{ref:h,className:`DropdownMenu ${n||""}`,onKeyDown:e=>{const t=f.current;if(!m||40!==e.keyCode||!t)return;const n=document.activeElement,r=Array.from(t.children);n&&-1!==r.indexOf(n)||r[0].focus()}},t({onTrigger:()=>{p(!m),m?l&&l():c&&c()},isOpen:m}),r.ZP.createElement(o.Z,{ref:f,containerRef:h,isOpen:m||Boolean(i),className:n||"",positionX:a,positionY:u,footer:s,autoClose:!0,onClose:()=>{p(!1),l&&l()},shouldSkipTransition:i},d))}},7687:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(6752),d=n(9107);const a=(0,r.X$)((e=>{let{ref:t,id:n,className:a,value:u,label:s,error:i,success:c,disabled:l,readOnly:f,placeholder:h,autoComplete:m,inputMode:p,maxLength:g,onChange:v,onInput:y,onKeyPress:b,onKeyDown:I,onBlur:w,onPaste:C}=e;const S=(0,d.Z)(),E=i||c||s,P=(0,o.Z)("input-group",u&&"touched",i?"error":c&&"success",l&&"disabled",f&&"disabled",E&&"with-label",a);return r.ZP.createElement("div",{className:P,dir:S.isRtl?"rtl":void 0},r.ZP.createElement("input",{ref:t,className:"form-control",type:"text",id:n,dir:"auto",value:u||"",placeholder:h,maxLength:g,autoComplete:m,inputMode:p,disabled:l,readOnly:f,onChange:v,onInput:y,onKeyPress:b,onKeyDown:I,onBlur:w,onPaste:C}),E&&r.ZP.createElement("label",{htmlFor:n},E))}))},8033:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(6752);const d=e=>{let{children:t,className:n,isRtl:d,onClick:a}=e;const u=(0,r.I4)((e=>{e.preventDefault(),a(e)}),[a]);return r.ZP.createElement("a",{href:"#",className:(0,o.Z)("Link",n),dir:d?"rtl":"auto",onClick:a?u:void 0},t)}},4288:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(9204),d=n(6752);const a=(0,r.X$)((e=>{let{color:t="blue",backgroundColor:n,onClick:a}=e;return r.ZP.createElement("div",{className:(0,d.Z)("Loading",a&&"interactive"),onClick:a},r.ZP.createElement(o.Z,{color:t,backgroundColor:n}))}))},2328:(e,t,n)=>{n.d(t,{Z:()=>h});var r=n(4050),o=n(1212),d=n(2313),a=n(8758),u=n(274),s=n(3989),i=n(6752),c=n(8674),l=n(6590),f=n(386);const h=e=>{let{ref:t,containerRef:n,isOpen:h,className:m,style:p,bubbleStyle:g,children:v,transformOriginX:y,transformOriginY:b,positionX:I="left",positionY:w="top",autoClose:C=!1,footer:S,noCloseOnBackdrop:E=!1,onCloseAnimationEnd:P,onClose:M,onMouseEnter:A,onMouseLeave:k,shouldSkipTransition:T}=e,N=(0,r.sO)(null);t&&(N=t);const L=n||N,{transitionClassNames:R}=(0,o.Z)(h,P,T,void 0,T);(0,r.d4)((()=>h&&M?(0,s.Z)(M):void 0),[h,M]),(0,l.ZP)(h,M,void 0,void 0,C),(0,u.Z)((e=>{let[t]=e;(h||!h&&!0===t)&&(0,c.YW)(200)}),[h]);const x=(0,d.Z)(N,h,C?M:void 0,void 0,!0);(0,a.Z)(h,L,E?void 0:M);const B=(0,i.Z)("bubble menu-container custom-scroll",w,I,S&&"with-footer",R),O=void 0!==b?`${b}px`:void 0,Z=void 0!==y?`${y}px`:void 0;return r.ZP.createElement("div",{className:(0,i.Z)("Menu no-selection",m),onKeyDown:h?x:void 0,onMouseEnter:A,onMouseLeave:h?k:void 0,style:p},h&&r.ZP.createElement("div",{className:"backdrop",onMouseDown:f.b}),r.ZP.createElement("div",{ref:N,className:B,style:`transform-origin: ${Z||I} ${O||w};${g||""}`,onClick:C?M:void 0},v,S&&r.ZP.createElement("div",{className:"footer"},S)))}},8964:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(6752),d=n(9107);const a=e=>{const{icon:t,className:n,children:a,onClick:u,href:s,download:i,disabled:c,destructive:l,ariaLabel:f}=e,h=(0,d.Z)(),m=(0,r.I4)((e=>{if(c||!u)return e.stopPropagation(),void e.preventDefault();u(e)}),[c,u]),p=(0,r.I4)((e=>{if(13===e.keyCode||32===e.keyCode)return c||!u?(e.stopPropagation(),void e.preventDefault()):void u(e)}),[c,u]),g=(0,o.Z)("MenuItem",n,c&&"disabled",l&&"destructive"),v=r.ZP.createElement(r.ZP.Fragment,null,t&&r.ZP.createElement("i",{className:`icon-${t}`,"data-char":t.startsWith("char-")?t.replace("char-",""):void 0}),a);return s?r.ZP.createElement("a",{tabIndex:0,className:g,href:s,download:i,"aria-label":f,title:f,target:s.startsWith(window.location.origin)?"_self":"_blank",rel:"noopener noreferrer",dir:h.isRtl?"rtl":void 0,onClick:u},v):r.ZP.createElement("div",{role:"button",tabIndex:0,className:g,onClick:m,onKeyDown:p,"aria-label":f,title:f,dir:h.isRtl?"rtl":void 0},v)}},8512:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(9118);const d=(0,r.X$)((()=>{const[e,t]=(0,r.eJ)([]),n=(0,r.Ye)((()=>(0,o.Ds)((()=>{t([])}),700,!1)),[]),d=(0,r.I4)((r=>{if(0!==r.button)return;const o=r.currentTarget,d=o.getBoundingClientRect(),a=o.offsetWidth/2;t([...e,{x:r.clientX-d.x-a/2,y:r.clientY-d.y-a/2,size:a}]),requestAnimationFrame((()=>{n()}))}),[e,n]);return r.ZP.createElement("div",{className:"ripple-container",onMouseDown:d},e.map((e=>{let{x:t,y:n,size:o}=e;return r.ZP.createElement("span",{style:`left: ${t}px; top: ${n}px; width: ${o}px; height: ${o}px;`})})))}))},9204:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(6752);const d=e=>{let{color:t="blue",backgroundColor:n}=e;return r.ZP.createElement("div",{className:(0,o.Z)("Spinner",t,n&&"with-background",`bg-${n}`)},r.ZP.createElement("div",null))}},3716:(e,t,n)=>{n.d(t,{iC:()=>r,Ji:()=>o,BI:()=>d,eM:()=>a,ZT:()=>u,Cg:()=>s,S:()=>i,Ti:()=>c,ou:()=>l,b_:()=>f,Vx:()=>h,sd:()=>m,Uh:()=>p,lO:()=>g,gJ:()=>v,Rk:()=>y,Cy:()=>b,lW:()=>I,SG:()=>w,lF:()=>C,fo:()=>S,ee:()=>E,by:()=>P,lo:()=>A,hT:()=>k,YQ:()=>T,rS:()=>N,t_:()=>L,Ov:()=>R,EN:()=>x,pn:()=>B,Hk:()=>O,Vk:()=>Z,mo:()=>F,qU:()=>D,ul:()=>_,Qx:()=>$,mw:()=>U,oB:()=>j,zy:()=>V,CX:()=>W,xS:()=>G,b6:()=>H,AR:()=>z,r_:()=>Q,o_:()=>K,R2:()=>J,nY:()=>q,QU:()=>Y,jT:()=>X,_m:()=>ee,ks:()=>te,l3:()=>ne,u_:()=>re,rO:()=>oe,AE:()=>de,AJ:()=>ae,fK:()=>ue,V$:()=>se,bK:()=>ie,ck:()=>ce,xn:()=>le,K7:()=>fe,w7:()=>he,z7:()=>me,qp:()=>pe,Q:()=>ge,Mw:()=>ve,DC:()=>ye,Y7:()=>be,yK:()=>Ie,K2:()=>we,bM:()=>Ce,ku:()=>Se,zq:()=>Ee,PM:()=>Pe,jV:()=>Me,$E:()=>Ae,pR:()=>ke,kU:()=>Te,Y:()=>Ne,Ng:()=>Le,oG:()=>Re,wG:()=>xe,dI:()=>Be,VC:()=>Oe,FM:()=>Ze,uW:()=>Fe,g$:()=>De,FS:()=>_e,FD:()=>$e,aw:()=>Ue,FV:()=>je,Nf:()=>Ve,WS:()=>We,DU:()=>Ge,EG:()=>He,t4:()=>ze,sR:()=>Qe,$O:()=>Ke,Bg:()=>Je,vi:()=>qe,Db:()=>Ye,mU:()=>Xe,p3:()=>et,It:()=>tt,Vv:()=>nt,g:()=>rt,Ro:()=>ot,aC:()=>dt,LH:()=>at});const r="Telegram WebZ",o="1.34.1",d="master",a=!1,u=!1,s=!1,i="Shoot!\nSomething went wrong, please see the error details in Dev Tools Console.",c="Telegram",l=" [Inactive]",f="user_auth",h="GramJs:sessionId",m=!1,p="tt-global-state",g=500,v=200,y=30,b=!1,I="tt-media",w="tt-media-avatars",C="tt-media-progressive",S="tt-custom-bg",E="tt-lang-packs-v7",P=[1,5,10,50,100,500],M="undefined"!=typeof window&&window.innerHeight>=900,A=1,k=M?60:40,T=2*k,N=72,L=M?30:25,R=100,x=42,B=42,O=20,Z=30,F=200,D=500,_=20,$=1,U=1,j=0,V=2,W=V,G=16,H=17,z=15,Q=1e4,K=3e3,J="editable-message-text",q="editable-message-text-modal",Y=1440,X=1150,ee=1275,te=925,ne=600,re=950,oe=450,de=1e9,ae="0",ue=100,se=1500,ie=250,ce=600,le=500,fe=(Math.round((ie+ce)/2),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]),13),he=11,me=160,pe=120,ge=64,ve=48,ye=32,be=64,Ie=64,we=160,Ce=140,Se=100,Ee=100,Pe=140,Me=140,Ae="NO_STICKER_SET",ke="en",Te=200,Ne=450,Le="video/quicktime",Re=new Set(["image/png","image/gif","image/jpeg"]),xe=new Set(["video/mp4"]),Be=new Set([...Re,...xe]),Oe="The message is not supported on this version of Telegram.",Ze="((ftp|https?):\\/\\/)?((www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,63})\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)",Fe="(@[\\w\\d_-]+)",De=/^tg:(\/\/)?([?=&\d\w_-]+)?/gm,_e=/^(?:https?:\/\/)?(?:t\.me\/)/gm,$e=new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]),Ue="777000",je="1271266957",Ve=0,We=1,Ge=10,He=5,ze=2147483646,Qe="en",Ke="android",Je=["android","ios","tdesktop","macos"],qe="TelegramTips",Ye=["ar","pt-br","id","it","ko","ms","pl","es","tr"],Xe="https://bugs.telegram.org/?tag_ids=41&sort=time",et="#A2AF8E",tt="#0F0F0F",nt="#0a0a0a8c",rt="rgba(90, 110, 70, 0.6)",ot=100,dt=100*ot,at=!1},274:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(7204);const d=(e,t,n)=>{const d=(0,o.Z)(t);return(0,r.d4)((()=>e(d||[])),t,n)}},706:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[t,n]=(0,r.eJ)(e),o=(0,r.I4)((()=>{n(!0)}),[]),d=(0,r.I4)((()=>{n(!1)}),[]);return[t,o,d]}},5326:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=()=>{const[,e]=(0,r.eJ)(!1);return(0,r.I4)((()=>{e((e=>!e))}),[])}},8674:(e,t,n)=>{n.d(t,{zG:()=>s,YW:()=>i,ZP:()=>c});var r=n(4050);const o="tt-event-heavy-animation-start",d="tt-event-heavy-animation-end";let a,u=!1;function s(){return u}function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;function t(){a&&(clearTimeout(a),a=void 0),u=!1,document.dispatchEvent(new Event(d))}return u||(u=!0,document.dispatchEvent(new Event(o))),a&&(clearTimeout(a),a=void 0),a=window.setTimeout(t,e),t}const c=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,r.d4)((()=>{if(!n)return u&&e(),document.addEventListener(o,e),document.addEventListener(d,t),()=>{document.removeEventListener(d,t),document.removeEventListener(o,e)}}),[n,t,e])}},6590:(e,t,n)=>{n.d(t,{Oy:()=>s,Wv:()=>l,ZP:()=>h});var r=n(4050),o=n(7361),d=n(7204),a=n(5116),u=n(782);const s=window.location.hash,i=`${window.location.pathname}${window.location.search}`,c={currentIndex:0,nextStateIndexToReplace:-1,isHistoryAltered:!1,isDisabled:!1,isEdge:!1,currentIndexes:[]},l=()=>{c.isDisabled=!0},f=()=>{c.isEdge&&setTimeout((()=>{c.isEdge=!1}),350)};function h(e,t,n,o){let s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=arguments.length>5?arguments[5]:void 0;const f=(0,r.sO)(-1),h=(0,r.sO)(!1),m=(0,d.Z)(e),p=(0,r.sO)(!0),g=(0,r.sO)([]),v=(0,d.Z)(l),y=(0,r.sO)(!1),b=(0,r.I4)((function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(l){const e=v||[];if(e.length{const e=++c.currentIndex;c.currentIndexes.push(e),window.history.pushState({index:e,state:o},"",`#${l[l.length-1]}`),g.current.push({index:e,hash:l[l.length-1]})}),0);else{const t=e.length-l.length;if(y.current)y.current=!1;else{if(l.length!==g.current.length&&t>0){const e=g.current[g.current.length-t-1];let n=t;if(e){const t=c.currentIndexes.findIndex((t=>t===e.index));n=c.currentIndexes.length-t-1}c.isHistoryAltered=!0,window.history.go(-n),g.current.splice(g.current.length-t-1,t).forEach((e=>{let{index:t}=e;c.currentIndexes.splice(c.currentIndexes.indexOf(t),1)}))}l.length>0&&setTimeout((()=>{const e=++c.currentIndex;c.currentIndexes[c.currentIndexes.length-1]=e,window.history.replaceState({index:e,state:o},"",`${i}#${l[l.length-1]}`),g.current[g.current.length-1]={index:e,hash:l[l.length-1]}}),0)}}}else e&&!t&&(p.current=!1,h.current?(h.current=!1,c.currentIndexes.push(f.current)):setTimeout((()=>{const e=++c.currentIndex;c.currentIndexes.push(e),window.history[c.currentIndexes.includes(c.nextStateIndexToReplace-1)&&0!==window.history.state.index&&c.nextStateIndexToReplace===e&&!s?"replaceState":"pushState"]({index:e,state:o},""),f.current=e,s&&(c.nextStateIndexToReplace=c.currentIndex+1)}),0)),!t&&e||p.current||(f.current!==c.currentIndex&&s||(c.isHistoryAltered=!0,window.history.back(),setTimeout((()=>{c.nextStateIndexToReplace=-1}),400)),c.currentIndexes.splice(c.currentIndexes.indexOf(f.current),1),p.current=!0)}),[o,l,e,v,s]);return(0,r.d4)((()=>{const r=e=>{if(c.isHistoryAltered)return void setTimeout((()=>{c.isHistoryAltered=!1}),0);const{index:r}=e.state,o=r||0;try{const r=l?g.current[g.current.length-1].index:f.current,d=c.currentIndexes[c.currentIndexes.indexOf(r)-1];if(c.isDisabled)return;!p.current&&(0===o||o===d)||l&&(0===o||o===d)?(l&&(y.current=!0,g.current.pop()),c.currentIndexes.splice(c.currentIndexes.indexOf(r),1),t&&(c.isEdge&&(0,a.uC)().disableHistoryAnimations(),t(!c.isEdge),p.current=!0)):o===r&&p.current&&n&&!l&&(h.current=!0,c.isEdge&&(0,a.uC)().disableHistoryAnimations(),n(e.state.state))}catch(e){}},o=l?!v||!(0,u.et)(v,l):m!==e;return!c.isDisabled&&o&&b(),window.addEventListener("popstate",r),()=>window.removeEventListener("popstate",r)}),[o,b,l,e,t,n,v,m,s]),{forceClose:()=>b(!0)}}o.cj&&(window.addEventListener("touchstart",(e=>{const t=e.touches[0].pageX;(t<=300||t>=window.innerWidth-300)&&(c.isEdge=!0)})),window.addEventListener("touchend",f),window.addEventListener("popstate",f)),window.history.replaceState({index:c.currentIndex},"",i)},2313:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=(e,t,n,o,d)=>{const[a,u]=(0,r.eJ)(-1);return(0,r.d4)((()=>{u(-1);const n=e.current;t&&n&&!d&&(n.tabIndex=-1,n.focus())}),[e,t,d]),(0,r.I4)((t=>{const r=e.current;if(!r)return;if(13===t.keyCode&&n)return void n(a);if(38!==t.keyCode&&40!==t.keyCode)return;const d=document.activeElement,s=Array.from(o?r.querySelectorAll(o):r.children);let i=d&&s.indexOf(d)||a;if(38===t.keyCode&&i>0)i--;else if(40===t.keyCode&&i{n.d(t,{Z:()=>a});var r=n(711),o=n(5326),d=n(9290);const a=()=>{const e=(0,o.Z)();return(0,d.Z)((()=>r.ll(e)),[e]),r.i0}},8778:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(4050),o=n(9203),d=n(5326);const a=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const u=(0,o.o5)(e,t),s=(0,d.Z)();return(0,r.d4)((()=>{if(a)return(0,o.Qt)(s)}),[a,s]),(0,r.d4)((()=>{n||u||(0,o.$y)(e,t).then(s)}),[e,s,u,t,n]),u}},9290:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(7204);const o=(e,t)=>{const n=(0,r.Z)(t);n&&!t.some(((e,t)=>e!==n[t]))||e(n||[])}},7204:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);const o=function(e,t){const n=(0,r.sO)(),{current:o}=n;return t&&void 0===e||(n.current=e),o}},1212:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(4050),o=n(6752);const d=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"fast",a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const[u,s]=(0,r.eJ)(!e),i=(0,r.sO)(),[c,l]=(0,r.eJ)(e&&n);if(e)s(!1),l(!0),i.current&&(window.clearTimeout(i.current),i.current=void 0);else if(l(!1),!u&&!i.current){const e=()=>{s(!0),t&&t(),i.current=void 0};a?e():i.current=window.setTimeout(e,350)}const f=c&&!(a&&!e),h=Boolean(i.current),m=e||h,p=(0,o.Z)(d&&"opacity-transition",d,f&&"open",m&&"shown",h&&"closing");return{shouldRender:m,transitionClassNames:p}}},8758:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(4050);function o(e,t,n){(0,r.d4)((()=>{const r=e=>{const r=t.current,o=e.target;r&&o&&(r.contains(e.target)&&!o.classList.contains("backdrop")||(e.preventDefault(),e.stopPropagation(),n&&n()))};return e&&n&&document.addEventListener("mousedown",r),()=>{document.removeEventListener("mousedown",r)}}),[e,t,n])}},5247:(e,t,n)=>{n.d(t,{Oo:()=>s,xg:()=>i,lQ:()=>m});var r=n(3716);const o=new Set(["scroll","mouseenter","mouseleave"]),d={},a={},u=new Map;function s(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=c(t,e);l(o,e,r)?f(o,e,n):e.addEventListener(o,n,r)}function i(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=c(t,e);l(o,e,r)?h(o,e):e.removeEventListener(o,n,r)}function c(e,t){const n=e.replace(/^on/,"").replace(/Capture$/,"").toLowerCase();return"change"===n&&"SELECT"!==t.tagName?"input":"doubleclick"===n?"dblclick":"focus"===n?"focusin":"blur"===n?"focusout":n}function l(e,t,n){return!n&&!o.has(e)&&"VIDEO"!==t.tagName&&"IFRAME"!==t.tagName}function f(e,t,n){d[e]||(d[e]=0,document.addEventListener(e,p)),function(e){return a[e]||(a[e]=new Map),a[e]}(e).set(t,n),function(e){const t=u.get(e);if(t)return t;const n=new Set;return u.set(e,n),n}(t).add(e),d[e]++}function h(e,t){d[e]--,d[e]||document.removeEventListener(e,p),a[e].delete(t),u.get(t).delete(e)}function m(e){const t=u.get(e);t&&(t.forEach((t=>h(t,e))),u.delete(e))}function p(e){const t=a[e.type];if(t){let n=!1,r=e.target;const o=()=>{n=!0},d=()=>{e.preventDefault()},a=new Proxy(e,{get:(e,t)=>"currentTarget"===t?r:"stopPropagation"===t||"stopImmediatePropagation"===t?o:"preventDefault"===t?d:Reflect.get(e,t)});for(;r&&r!==document.body;){const e=t.get(r);if(e&&(e(a),n))return;r=r.parentNode}}}r.eM&&document.addEventListener("dblclick",(()=>{const e=Object.keys(d).length,t=Object.values(d).reduce(((e,t)=>e+t),0),n=Object.keys(a).length,r=Object.values(a).reduce(((e,t)=>e+t.size),0),o=u.size,s=Array.from(u.values()).reduce(((e,t)=>e+t.size),0);console.warn("DELEGATED EVENTS STATS",{delegatedHandlersCount1:t,delegatedHandlersCount2:r,delegatedEventTypesCount:s,delegationRegistriesCount:n,delegationElementsCount:o,documentListenersCount:e})}))},2916:(e,t,n)=>{n.d(t,{Z:()=>I});var r=n(4050),o=n(6926),d=n(3716),a=n(5247);const u=new Set(["key","ref","teactFastList","teactOrderKey"]),s=new Set(["dir","role"]),i={autoPlay:"autoplay",autoComplete:"autocomplete"},c={};function l(e,t,n,o,d){let{skipComponentUpdate:a=!1,forceIndex:u=!1,fragment:s,moveDirection:i}=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const c=t&&(0,r.op)(t),l=n&&(0,r.op)(n);if(!a&&c&&l&&!(0,r.k)(t,n)&&(n=h(t,n)),!a&&l&&n.componentInstance.isMounted&&m(n,o,d,e),t===n)return n;if(!t&&n){l&&(n=f(n,o,d,e));const t=p(n);(0,r.CD)(n,t),u&&e.childNodes[d]?e.insertBefore(t,e.childNodes[d]):(s||e).appendChild(t)}else if(t&&!n)e.removeChild((0,r.U9)(t)),(0,r.Zb)(t);else if(t&&n)if((0,r.k)(t,n)){l&&(n=f(n,o,d,e));const a=p(n);(0,r.CD)(n,a),e.replaceChild(a,(0,r.U9)(t)),(0,r.Zb)(t)}else{const o=c&&l,a=(0,r.U9)(t);if(o||((0,r.CD)(n,a),(0,r.CD)(t,void 0),"props"in t&&"props"in n&&(n.props.ref=t.props.ref)),(0,r.O_)(n)){if(i){const t=a,n=e.childNodes["up"===i?d:d+1];n?e.insertBefore(t,n):(s||e).appendChild(t)}o||y(t,n,a),n.children=g(t,n,o?e:a)}}return n}function f(e,t,n,o){if(!(0,r.op)(e))return e;const{componentInstance:d}=e;if(!d.isMounted){m(e=(0,r.Hb)(d),t,n,o);const a=e.children[0];(0,r.op)(a)&&(e.children=[f(a,e,0,o)]),d.isMounted=!0}return e}function h(e,t){return e.componentInstance.props=t.componentInstance.props,(0,r.SO)(e.componentInstance)}function m(e,t,n,r){const{componentInstance:o}=e;o.onUpdate=()=>{t.children[n]=l(r,t.children[n],o.$element,t,n,{skipComponentUpdate:!0})}}function p(e){if((0,r.V2)(e))return document.createTextNode("");if((0,r.iB)(e))return document.createTextNode(e.value);if((0,r.op)(e))return p(e.children[0]);const{tag:t,props:n,children:o=[]}=e,d=document.createElement(t);return"object"==typeof n.ref&&(n.ref.current=d),Object.entries(n).forEach((e=>{let[t,r]=e;void 0!==n[t]&&b(d,t,r)})),e.children=o.map(((t,n)=>l(d,void 0,t,e,n))),d}function g(e,t,n){if(t.props.teactFastList)return function(e,t,n){const o=new Set(t.children.map((e=>{const t="props"in e&&e.props.key;return d.eM&&(0,r.O_)(e)&&null==t&&console.warn("Missing `key` in `teactFastList`"),t})));let a=0;const u=e.children.reduce(((e,r,d)=>{let u="props"in r?r.props.key:void 0;const s=null!=u;if(s&&!o.has(u))return l(n,r,void 0,t,-1),e;if(!s){const o=t.children[d],a=o&&"props"in o?o.props.key:void 0;if(!o||a)return l(n,r,void 0,t,-1),e;u=`__indexKey#${d}`}return e[u]={$element:r,index:a++,order:"props"in r?r.props.teactOrderKey:void 0},e}),{});let s,i,c=[],f=0;return t.children.forEach(((e,r)=>{const o="props"in e?e.props.key:`__indexKey#${r}`,d=u[o];if(!d)return s||(s=[],i=r),void s.push(e);s&&(c=c.concat(v(s,i,n,t)),i=void 0,s=void 0);const a="props"in e?e.props.teactOrderKey:void 0,h=d.index!==f&&d.order!==a,m=h&&f>d.index;h&&!m||f++,c.push(l(n,d.$element,e,t,r,{forceIndex:!0,moveDirection:h?m?"down":"up":void 0}))})),s&&(c=c.concat(v(s,i,n,t))),c}(e,t,n);const o=e.children.length,a=t.children.length,u=Math.max(o,a),s=[],i=a>o+1?document.createDocumentFragment():void 0;for(let r=0;r=o?{fragment:i}:void 0);d&&s.push(d)}return i&&n.appendChild(i),s}function v(e,t,n,r){if(1===e.length)return[l(n,void 0,e[0],r,t,{forceIndex:!0})];if(e.length>1){const o=document.createDocumentFragment(),d=e.map((e=>l(n,void 0,e,r,t,{fragment:o})));return n.childNodes[t]?n.insertBefore(o,n.childNodes[t]):n.appendChild(o),d}throw new Error("Unexpected input")}function y(e,t,n){const r=Object.entries(e.props),o=Object.entries(t.props);r.forEach((e=>{let[r,o]=e;const d=t.props[r];void 0!==o&&(void 0===d||o!==d&&r.startsWith("on"))&&function(e,t,n){"className"===t?e.className="":"value"===t?e.value="":"style"===t?e.style.cssText="":"dangerouslySetInnerHTML"===t?e.innerHTML="":t.startsWith("on")?(0,a.xg)(e,t,n,t.endsWith("Capture")):t.startsWith("data-")||t.startsWith("aria-")||s.has(t)?e.removeAttribute(t):u.has(t)||delete e[i[t]||t]}(n,r,o)})),o.forEach((t=>{let[r,o]=t;const d=e.props[r];void 0!==o&&o!==d&&b(n,r,o)}))}function b(e,t,n){"className"===t?e.className=n:"value"===t?e.value!==n&&(e.value=n):"style"===t?e.style.cssText=n:"dangerouslySetInnerHTML"===t?e.innerHTML=n.__html:t.startsWith("on")?(0,a.Oo)(e,t,n,t.endsWith("Capture")):t.startsWith("data-")||t.startsWith("aria-")||s.has(t)?e.setAttribute(t,n):u.has(t)||(e[i[t]||t]=n)}const I={render:function(e,t){if(!t)return;let n=t.getAttribute("data-teact-head-id");n||(n=(0,o.Z)(c),c[n]={children:[]},t.setAttribute("data-teact-head-id",n));const r=c[n];r.children=[l(t,r.children[0],e,r,0)]}}},4050:(e,t,n)=>{n.d(t,{V2:()=>h,iB:()=>m,op:()=>g,O_:()=>v,SO:()=>M,k:()=>A,Zb:()=>k,Hb:()=>T,U9:()=>R,CD:()=>x,eJ:()=>B,d4:()=>Z,bt:()=>F,Ye:()=>D,I4:()=>_,sO:()=>$,X$:()=>U,ZP:()=>j});var r=n(3716),o=n(9118),d=n(782),a=n(275),u=n(3592),s=n(5247);let i;!function(e){e[e.Empty=0]="Empty",e[e.Text=1]="Text",e[e.Tag=2]="Tag",e[e.Component=3]="Component"}(i||(i={}));const c=Symbol("Fragment"),l=new Set(["TeactMemoWrapper","TeactNContainer","Button","ListItem","MenuItem"]);let f;function h(e){return e.type===i.Empty}function m(e){return e.type===i.Text}function p(e){return e.type===i.Tag}function g(e){return e.type===i.Component}function v(e){return p(e)||g(e)}function y(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o1&&void 0!==arguments[1]?arguments[1]:[];const{props:n}=e;return{componentInstance:e,type:i.Component,props:n,children:t}}function w(e,t,n){return{type:i.Tag,tag:e,props:t,children:C(n).map(E)}}function C(e){let t=e.length-1;for(;t>=0&&S(e[t]);t--);return t+17&&console.warn(`[Teact] Slow component render: ${n}, ${Math.round(t)} ms`),P[n].renderTimes.push(t),P[n].renderCount++}}catch(t){(0,u.S)(t),o=e.renderedValue}if(e.isMounted&&o===e.renderedValue)return e.$element;e.renderedValue=o;const d=E(o);return e.$element=I(e,[d]),e.$element}function A(e,t){return typeof e!=typeof t||e.type!==t.type||(m(e)&&m(t)?e.value!==t.value:p(e)&&p(t)?e.tag!==t.tag||e.props.key!==t.props.key:!(!g(e)||!g(t)||e.componentInstance.Component===t.componentInstance.Component&&e.props.key===t.props.key))}function k(e){if(g(e))(t=e.componentInstance).isMounted&&(t.hooks.memos.byCursor.forEach((e=>{e.current=void 0})),t.hooks.effects.byCursor.forEach((e=>{let{cleanup:t}=e;if("function"==typeof t)try{t()}catch(e){(0,u.S)(e)}})),t.isMounted=!1,function(e){e.hooks.effects.byCursor.forEach((e=>{e.cleanup=void 0,e.effect=void 0,e.dependencies=void 0})),e.hooks.state.byCursor.forEach((e=>{e.value=void 0,e.nextValue=void 0,e.setter=void 0})),e.hooks.memos.byCursor.forEach((e=>{e.dependencies=void 0})),e.hooks=void 0,e.$element=void 0,e.renderedValue=void 0,e.Component=void 0,e.props=void 0,e.forceUpdate=void 0,e.onUpdate=void 0}(t));else if(p(e)&&(e.target&&(0,s.lQ)(e.target),e.props.ref&&(e.props.ref.current=void 0)),e.target&&(e.target=void 0),!v(e))return;var t;e.children.forEach(k)}function T(e){return M(e),e.isMounted=!0,e.$element}function N(e){e.isMounted&&(e.hooks.state.byCursor.forEach((e=>{e.value=e.nextValue})),e.prepareForFrame=(0,o.wT)((()=>N(e))),e.forceUpdate=(0,o.mS)((()=>L(e))))}function L(e){if(!e.isMounted||!e.onUpdate)return;const t=e.$element;M(e),e.$element!==t&&e.onUpdate()}function R(e){return g(e)?R(e.children[0]):e.target}function x(e,t){g(e)?x(e.children[0],t):e.target=t}function B(e){const{cursor:t,byCursor:n}=f.hooks.state;var d;return void 0===n[t]&&(n[t]={value:e,nextValue:e,setter:(d=f,e=>{n[t].nextValue!==e&&(n[t].nextValue="function"==typeof e?e(n[t].value):e,d.prepareForFrame&&d.forceUpdate||(d.prepareForFrame=(0,o.wT)((()=>N(d))),d.forceUpdate=(0,o.mS)((()=>L(d)))),d.prepareForFrame(),d.forceUpdate(),r.ZT&&"TeactNContainer"!==d.name&&console.log("[Teact.useState]",d.name,d.Component&&d.Component.DEBUG_contentComponentName?`> ${d.Component.DEBUG_contentComponentName}`:"",`Forced update at cursor #${t}, next value: `,n[t].nextValue))})}),f.hooks.state.cursor++,[n[t].value,n[t].setter]}function O(e,t,n,o,d){const{cursor:a,byCursor:s}=f.hooks.effects,i=f;function c(){if(!i.isMounted)return;const{cleanup:e}=s[a];if("function"==typeof e)try{let t;if(r.eM&&(t=performance.now()),e(),r.eM){const e=performance.now()-t,n=i.name;e>7&&console.warn(`[Teact] Slow cleanup at effect cursor #${a}: ${n}, ${Math.round(e)} ms`)}}catch(e){(0,u.S)(e)}}function l(){if(!i.isMounted)return;let e;if(r.eM&&(e=performance.now()),s[a].cleanup=n(),r.eM){const t=performance.now()-e,n=i.name;t>7&&console.warn(`[Teact] Slow effect at cursor #${a}: ${n}, ${Math.round(t)} ms`)}}if(void 0!==s[a]&&o&&s[a].dependencies){if(o.some(((e,t)=>e!==s[a].dependencies[t]))){if(d){const e=o.reduce(((e,t,n)=>{const r=s[a].dependencies[n];return t!==r&&e.push(`${n}: ${r} => ${t}`),e}),[]);console.log(`[Teact] Effect "${d}" caused by dependencies.`,e.join(", "))}t(c),e(l)}}else d&&console.log(`[Teact] Effect "${d}" caused by missing dependencies.`),t(c),e(l);s[a]={effect:n,dependencies:o,cleanup:s[a]?s[a].cleanup:void 0},f.hooks.effects.cursor++}function Z(e,t,n){return O(o.T2,o.D0,e,t,n)}function F(e,t,n){return O(o.R3,o.zD,e,t,n)}function D(e,t,n){const{cursor:o,byCursor:d}=f.hooks.memos;let{current:u}=d[o]||{};return(void 0===d[o]||t.some(((e,t)=>e!==d[o].dependencies[t])))&&(r.eM&&n&&console.log(`[Teact.useMemo] ${f.name} (${n}): Update is caused by:`,d[o]?(0,a.c)(t,d[o].dependencies).join(", "):"[first render]"),u=e()),d[o]={current:u,dependencies:t},f.hooks.memos.cursor++,u}function _(e,t,n){return D((()=>e),t,n)}function $(e){return D((()=>({current:e})),[])}function U(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.Z,n=arguments.length>2?arguments[2]:void 0;return function(o){const d=$(o),u=$();return(!u.current||d.current&&!t(d.current,o))&&(r.eM&&n&&console.log(`[Teact.memo] ${e.name} (${n}): Update is caused by:`,(0,a.c)(d.current,o).join(", ")),d.current=o,u.current=y(e,o)),u.current}}document.addEventListener("dblclick",(()=>{console.warn("COMPONENTS",(0,d.Xo)(Object.values(P),"renderCount","desc"))}));const j={createElement:y,Fragment:c}},5116:(e,t,n)=>{n.d(t,{ZP:()=>h,R3:()=>w,Rd:()=>C,uC:()=>S,Q6:()=>E,ll:()=>P,Iq:()=>M,c$:()=>A});var r=n(4050),o=n(3716),d=n(5326),a=n(6926),u=n(9118),s=n(275),i=n(782),c=n(3592),l=n(8674);function f(){return f=Object.assign||function(e){for(var t=1;t7&&console.warn(`[TeactN] Slow containers update: ${Math.round(t)} ms`)}}],v={},y=new Map,b=(0,u.$6)(I);function I(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e||!(0,l.zG)()?g.forEach((e=>e(m))):(0,u.T2)(b)}function w(e,t){"object"==typeof e&&e!==m&&(m=e,null!=t&&t.forceSyncOnIOs?I(!0):b(null==t?void 0:t.forceOnHeavyAnimation))}function C(){return m}function S(){return v}function E(e,t){p[e]||(p[e]=[],v[e]=(t,n)=>{!function(e,t,n){p[e]&&p[e].forEach((e=>{const r=e(m,v,t);r&&w(r,n)}))}(e,t,n)}),p[e].push(t)}function P(e){g.push(e)}function M(e){const t=g.indexOf(e);-1!==t&&g.splice(t,1)}function A(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>({});return t=>function n(o){n.DEBUG_contentComponentName=t.name;const[u]=(0,r.eJ)((0,a.Z)(y)),i=(0,d.Z)();(0,r.d4)((()=>()=>{y.delete(u)}),[u]);let l=y.get(u);if(l||(l={mapStateToProps:e,ownProps:o,areMappedPropsChanged:!1,forceUpdate:i,DEBUG_updates:0,DEBUG_componentName:t.name},y.set(u,l)),l.areMappedPropsChanged&&(l.areMappedPropsChanged=!1),!l.mappedProps||!(0,s.Z)(l.ownProps,o)){l.ownProps=o;try{l.mappedProps=e(m,o)}catch(e){(0,c.S)(e)}}return r.ZP.createElement(t,f({},l.mappedProps,o))}}o.eM&&(window.getGlobal=C,document.addEventListener("dblclick",(()=>{console.warn("GLOBAL CONTAINERS",(0,i.Xo)(Array.from(y.values()).map((e=>{let{DEBUG_componentName:t,DEBUG_updates:n}=e;return{DEBUG_componentName:t,DEBUG_updates:n}})),"DEBUG_updates","desc"))})))},3681:(e,t,n)=>{n.d(t,{l:()=>d,Z:()=>a});const r=/\uFE0F/g,o=String.fromCharCode(8205);function d(e){return e.indexOf(o)<0?e.replace(r,""):e}const a=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g},1363:(e,t,n)=>{var r=n(5116),o=n(1226),d=n(3716),a=n(7361),u=n(8406),s=n(9524),i=n(7358),c=n(3100),l=n(1622);(0,r.Q6)("initApi",((e,t)=>{(async()=>{d.Cg||(await(0,c.Qw)(),(0,c.f3)()),(0,o.g8)(t.apiUpdate,{userAgent:navigator.userAgent,platform:a.Lt,sessionData:(0,c.K8)(),isTest:window.location.search.includes("test"),isMovSupported:a.pA,isWebmSupported:a.Hh})})()})),(0,r.Q6)("setAuthPhoneNumber",((e,t,n)=>{const{phoneNumber:r}=n;return(0,o.t9)("provideAuthPhoneNumber",r.replace(/[^\d]/g,"")),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("setAuthCode",((e,t,n)=>{const{code:r}=n;return(0,o.t9)("provideAuthCode",r),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("setAuthPassword",((e,t,n)=>{const{password:r}=n;return(0,o.t9)("provideAuthPassword",r),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("uploadProfilePhoto",((e,t,n)=>{const{file:r}=n;(0,o.t9)("uploadProfilePhoto",r)})),(0,r.Q6)("signUp",((e,t,n)=>{const{firstName:r,lastName:d}=n;return(0,o.t9)("provideAuthRegistration",{firstName:r,lastName:d}),{...e,authIsLoading:!0,authError:void 0}})),(0,r.Q6)("returnToAuthPhoneNumber",(e=>((0,o.t9)("restartAuth"),{...e,authError:void 0}))),(0,r.Q6)("goToAuthQrCode",(e=>((0,o.t9)("restartAuthWithQr"),{...e,authIsLoadingQrCode:!0,authError:void 0}))),(0,r.Q6)("saveSession",((e,t,n)=>{const{sessionData:r}=n;r?(0,c.wX)(n.sessionData,e.currentUserId):(0,c.jv)()})),(0,r.Q6)("signOut",(()=>{(async()=>{try{await(0,u.r1)(),await(0,o.t9)("destroy"),await(0,l.IT)(!1)}catch(e){}(0,r.uC)().reset()})()})),(0,r.Q6)("reset",(()=>{(0,c.jv)(),s.clear(d.lW),s.clear(d.SG),s.clear(d.lF),s.clear(d.fo);const e=d.ee.replace(/\d+$/,""),t=(d.ee.match(/\d+$/)||[0])[0];for(let n=0;n{(async()=>{await(0,o.t9)("disconnect")})()})),(0,r.Q6)("loadNearestCountry",(e=>{"connectionStateReady"===e.connectionState&&(async()=>{const e=await(0,o.t9)("fetchNearestCountry");(0,r.R3)({...(0,r.Rd)(),authNearestCountry:e})})()})),(0,r.Q6)("setDeviceToken",((e,t,n)=>{(0,r.R3)({...e,push:{deviceToken:n,subscribedAt:Date.now()}})})),(0,r.Q6)("deleteDeviceToken",(e=>{const t={...e};delete t.push,(0,r.R3)(t)}))},9667:(e,t,n)=>{var r=n(5116),o=n(1713),d=n(3716),a=n(1226),u=n(782),s=n(8406),i=n(711),c=n(9066),l=n(9959),f=n(8415);function h(e,t){let{visibility:n,allowedIds:r,deniedIds:o}=t;const{users:{byId:d},chats:{byId:a}}=e,u={visibility:n};let s,i;const c=e=>{if(!(0,f.YC)(e))return;const{id:t,accessHash:n}=d[e]||{};return t?{id:t,accessHash:n}:void 0},l=e=>{if((0,f.YC)(e))return;const t=a[e];return t?{id:t.id}:void 0};return"contacts"!==n&&"nobody"!==n||(s=r.map(c).filter(Boolean),i=r.map(l).filter(Boolean),s.length>0&&(u.allowedUsers=s),i.length>0&&(u.allowedChats=i)),"everybody"!==n&&"contacts"!==n||(s=o.map(c).filter(Boolean),i=o.map(l).filter(Boolean),s.length>0&&(u.blockedUsers=s),i.length>0&&(u.blockedChats=i)),u}(0,r.Q6)("updateProfile",((e,t,n)=>{const{photo:d,firstName:u,lastName:s,bio:i,username:f}=n;(async()=>{const{currentUserId:t}=e;if(t){if((0,r.R3)({...(0,r.Rd)(),profileEdit:{progress:o.rN.InProgress}}),d&&await(0,a.t9)("updateProfilePhoto",d),(u||s||i)&&await(0,a.t9)("updateProfile",{firstName:u,lastName:s,about:i})){e=(0,r.Rd)();const n=t&&(0,c.dy)(e,t);n&&(0,r.R3)((0,l.Nq)(e,n.id,{firstName:u,lastName:s,fullInfo:{...n.fullInfo,bio:i}}))}f&&await(0,a.t9)("updateUsername",f)&&t&&(0,r.R3)((0,l.Nq)((0,r.Rd)(),t,{username:f})),(0,r.R3)({...(0,r.Rd)(),profileEdit:{progress:o.rN.Complete}})}})()})),(0,r.Q6)("checkUsername",((e,t,n)=>{const{username:d}=n;(async()=>{if(e.profileEdit&&e.profileEdit.progress===o.rN.InProgress)return;(0,r.R3)({...e,profileEdit:{progress:e.profileEdit?e.profileEdit.progress:o.rN.Idle,isUsernameAvailable:void 0}});const t=await(0,a.t9)("checkUsername",d);e=(0,r.Rd)(),(0,r.R3)({...e,profileEdit:{...e.profileEdit,isUsernameAvailable:t}})})()})),(0,r.Q6)("loadWallpapers",(()=>{(async()=>{const e=await(0,a.t9)("fetchWallpapers");if(!e)return;const t=(0,r.Rd)();(0,r.R3)({...t,settings:{...t.settings,loadedWallpapers:e.wallpapers}})})()})),(0,r.Q6)("uploadWallpaper",((e,t,n)=>{const d=n,u=URL.createObjectURL(d);(0,r.R3)({...e,settings:{...e.settings,loadedWallpapers:[{slug:o.mp,document:{fileName:"",size:d.size,mimeType:d.type,previewBlobUrl:u}},...e.settings.loadedWallpapers||[]]}}),(async()=>{const t=await(0,a.t9)("uploadWallpaper",d);if(!t)return;const{wallpaper:n}=t;if(!(e=(0,r.Rd)()).settings.loadedWallpapers)return;const s=e.settings.loadedWallpapers[0];if(!s||s.slug!==o.mp)return;const i={...n,document:{...n.document,previewBlobUrl:u}};(0,r.R3)({...e,settings:{...e.settings,loadedWallpapers:[i,...e.settings.loadedWallpapers.slice(1)]}})})()})),(0,r.Q6)("loadBlockedContacts",(()=>{(async()=>{var e,t;const n=await(0,a.t9)("fetchBlockedContacts");if(!n)return;let o=(0,r.Rd)();null!==(e=n.users)&&void 0!==e&&e.length&&(o=(0,l.Sh)(o,(0,u.ee)(n.users,"id"))),null!==(t=n.chats)&&void 0!==t&&t.length&&(o=(0,l.GL)(o,(0,u.ee)(n.chats,"id"))),o={...o,blocked:{...o.blocked,ids:[...o.blocked.ids||[],...n.blockedIds],totalCount:n.totalCount}},(0,r.R3)(o)})()})),(0,r.Q6)("blockContact",((e,t,n)=>{const{contactId:o,accessHash:d}=n;(async()=>{if(!await(0,a.t9)("blockContact",o,d))return;const e=(0,r.Rd)();(0,r.R3)((0,l.O4)(e,o))})()})),(0,r.Q6)("unblockContact",((e,t,n)=>{const{contactId:o}=n;let d;if((0,f.YC)(o)){const t=(0,c.dy)(e,o);if(!t)return;d=t.accessHash}(async()=>{if(!await(0,a.t9)("unblockContact",o,d))return;const e=(0,r.Rd)();(0,r.R3)((0,l.rB)(e,o))})()})),(0,r.Q6)("loadAuthorizations",(()=>{(async()=>{const e=await(0,a.t9)("fetchAuthorizations");e&&(0,r.R3)({...(0,r.Rd)(),activeSessions:e})})()})),(0,r.Q6)("terminateAuthorization",((e,t,n)=>{const{hash:o}=n;(async()=>{if(!await(0,a.t9)("terminateAuthorization",o))return;const e=(0,r.Rd)();(0,r.R3)({...e,activeSessions:e.activeSessions.filter((e=>e.hash!==o))})})()})),(0,r.Q6)("terminateAllAuthorizations",(()=>{(async()=>{if(!await(0,a.t9)("terminateAllAuthorizations"))return;const e=(0,r.Rd)();(0,r.R3)({...e,activeSessions:e.activeSessions.filter((e=>e.isCurrent))})})()})),(0,r.Q6)("loadNotificationExceptions",(e=>{const{serverTimeOffset:t}=e;(async()=>{const e=await(0,a.t9)("fetchNotificationExceptions",{serverTimeOffset:t});e&&(0,r.R3)((0,l.aJ)((0,r.Rd)(),e))})()})),(0,r.Q6)("loadNotificationSettings",(e=>{const{serverTimeOffset:t}=e;(async()=>{const e=await(0,a.t9)("fetchNotificationSettings",{serverTimeOffset:t});e&&(0,r.R3)((0,l.BI)((0,r.Rd)(),e))})()})),(0,r.Q6)("updateNotificationSettings",((e,t,n)=>{const{peerType:o,isSilent:d,shouldShowPreviews:u}=n;(async()=>{await(0,a.t9)("updateNotificationSettings",o,{isSilent:d,shouldShowPreviews:u})&&(0,r.R3)((0,l.HN)((0,r.Rd)(),o,d,u))})()})),(0,r.Q6)("updateWebNotificationSettings",((e,t,n)=>{(async()=>{(0,r.R3)((0,l.BI)((0,r.Rd)(),n));const e=(0,r.Rd)(),{hasPushNotifications:t,hasWebNotifications:o}=e.settings.byKey;o&&t?await(0,s.Ld)():await(0,s.r1)()})()})),(0,r.Q6)("updateContactSignUpNotification",((e,t,n)=>{const{isSilent:o}=n;(async()=>{await(0,a.t9)("updateContactSignUpNotification",o)&&(0,r.R3)((0,l.BI)((0,r.Rd)(),{hasContactJoinedNotifications:!o}))})()})),(0,r.Q6)("loadLanguages",(()=>{(async()=>{const e=await(0,a.t9)("fetchLanguages");e&&(0,r.R3)((0,l.BI)((0,r.Rd)(),{languages:e}))})()})),(0,r.Q6)("loadPrivacySettings",(()=>{(async()=>{const[e,t,n,o,d]=await Promise.all([(0,a.t9)("fetchPrivacySettings","phoneNumber"),(0,a.t9)("fetchPrivacySettings","lastSeen"),(0,a.t9)("fetchPrivacySettings","profilePhoto"),(0,a.t9)("fetchPrivacySettings","forwards"),(0,a.t9)("fetchPrivacySettings","chatInvite")]);if(!(e&&t&&n&&o&&d))return;const u=(0,r.Rd)();u.settings.privacy.phoneNumber=e,u.settings.privacy.lastSeen=t,u.settings.privacy.profilePhoto=n,u.settings.privacy.forwards=o,u.settings.privacy.chatInvite=d,(0,r.R3)(u)})()})),(0,r.Q6)("setPrivacyVisibility",((e,t,n)=>{const{privacyKey:o,visibility:d}=n,{privacy:{[o]:u}}=e.settings;if(!u)return;const s=h(e,{visibility:d,allowedIds:[...u.allowUserIds,...u.allowChatIds],deniedIds:[...u.blockUserIds,...u.blockChatIds]});(async()=>{const e=await(0,a.t9)("setPrivacySettings",o,s);if(e){const t=(0,r.Rd)();t.settings.privacy[o]=e,(0,r.R3)(t)}})()})),(0,r.Q6)("setPrivacySettings",((e,t,n)=>{const{privacyKey:o,isAllowList:d,contactsIds:u}=n,{privacy:{[o]:s}}=e.settings;if(!s)return;const i=h(e,{visibility:s.visibility,allowedIds:d?u:[...s.allowUserIds,...s.allowChatIds],deniedIds:d?[...s.blockUserIds,...s.blockChatIds]:u});(async()=>{const e=await(0,a.t9)("setPrivacySettings",o,i);if(e){const t=(0,r.Rd)();t.settings.privacy[o]=e,(0,r.R3)(t)}})()})),(0,r.Q6)("updateIsOnline",((e,t,n)=>{(0,a.t9)("updateIsOnline",n)})),(0,r.Q6)("loadContentSettings",(()=>{(async()=>{const e=await(0,a.t9)("fetchContentSettings");e&&(0,r.R3)((0,l.BI)((0,r.Rd)(),e))})()})),(0,r.Q6)("updateContentSettings",((e,t,n)=>{(async()=>{(0,r.R3)((0,l.BI)((0,r.Rd)(),{isSensitiveEnabled:n})),await(0,a.t9)("updateContentSettings",n)||(0,r.R3)((0,l.BI)((0,r.Rd)(),{isSensitiveEnabled:!n}))})()})),(0,r.Q6)("loadCountryList",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{langCode:o}=n;o||(o=e.settings.byKey.language),(async()=>{const e=await(0,a.t9)("fetchCountryList",{langCode:o});e&&(0,r.R3)({...(0,r.Rd)(),countryList:e})})()})),(0,r.Q6)("ensureTimeFormat",((e,t)=>{if(e.authNearestCountry){const n=d.FD.has(e.authNearestCountry.toUpperCase())?"12h":"24h";t.setSettingOption({timeFormat:n}),(0,i.qf)(n)}(async()=>{if((0,r.Rd)().settings.byKey.wasTimeFormatSetManually)return;const e=await(0,a.t9)("fetchNearestCountry");if(e){const n=d.FD.has(e.toUpperCase())?"12h":"24h";t.setSettingOption({timeFormat:n}),(0,i.qf)(n)}})()})),(0,r.Q6)("loadAppConfig",(()=>{(async()=>{const e=await(0,a.t9)("fetchAppConfig");e&&(0,r.R3)({...(0,r.Rd)(),appConfig:e})})()}))},4907:(e,t,n)=>{var r=n(5116),o=n(3716),d=n(8406),a=n(9959),u=n(711),s=n(9066),i=n(1622),c=n(1947);(0,r.Q6)("apiUpdate",((e,t,n)=>{switch(o.eM&&"updateUserStatus"!==n["@type"]&&"updateServerTimeOffset"!==n["@type"]&&console.log("[GramJs] UPDATE",n["@type"],{update:n}),n["@type"]){case"updateApiReady":!function(e){const{hasWebNotifications:t,hasPushNotifications:n}=(0,s.dZ)(e);t&&n&&(0,d.Ld)(),(0,u.m0)(e.settings.byKey.language)}(e);break;case"updateAuthorizationState":!function(e){let t=(0,r.Rd)();const n="authorizationStateReady"===t.authState,o=e.authorizationState;switch((0,r.R3)({...t,authState:o,authIsLoading:!1}),t=(0,r.Rd)(),o){case"authorizationStateLoggingOut":(0,i.IT)(!1),(0,r.R3)({...t,isLoggingOut:!0});break;case"authorizationStateWaitCode":(0,r.R3)({...t,authIsCodeViaApp:e.isCodeViaApp});break;case"authorizationStateWaitPassword":(0,r.R3)({...t,authHint:e.hint});break;case"authorizationStateWaitQrCode":(0,r.R3)({...t,authIsLoadingQrCode:!1,authQrCode:e.qrCode});break;case"authorizationStateReady":if(n)break;(0,i.IT)(!0),(0,r.R3)({...t,isLoggingOut:!1})}}(n);break;case"updateAuthorizationError":!function(e){(0,r.R3)({...(0,r.Rd)(),authError:e.message})}(n);break;case"updateConnectionState":!function(e){const{connectionState:t}=e,n=(0,r.Rd)();t!==n.connectionState&&((0,r.R3)({...n,connectionState:t}),"connectionStateBroken"===t&&(0,r.uC)().signOut())}(n);break;case"updateSession":!function(e){const{sessionData:t}=e,{authRememberMe:n,authState:o}=(0,r.Rd)(),d=!t||!t.mainDcId;n&&"authorizationStateReady"===o&&!d&&(0,r.uC)().saveSession({sessionData:t})}(n);break;case"updateServerTimeOffset":!function(e){const t=(0,r.Rd)();t.serverTimeOffset!==e.serverTimeOffset&&(0,r.R3)({...t,serverTimeOffset:e.serverTimeOffset})}(n);break;case"updateCurrentUser":!function(e){const{currentUser:t}=e;(0,r.R3)({...(0,a.Nq)((0,r.Rd)(),t.id,t),currentUserId:t.id}),function(e){const t=localStorage.getItem(o.b_);if(!t)return;const n=JSON.parse(t);n.id=e,localStorage.setItem(o.b_,JSON.stringify(n))}(t.id)}(n);break;case"error":{"SESSION_REVOKED"===n.error.message&&t.signOut();const e=(0,c.J_)(n.error);e?t.addPaymentError({error:e}):t.showDialog&&t.showDialog({data:n.error});break}}}))},7895:(e,t,n)=>{var r=n(5116),o=n(3716),d=n(7361),a=n(711),u=n(7370),s=n(9066),i=n(1622),c=n(7926);!function(){function e(){const e=document.documentElement.className.match(/theme-(\w+)/),t=e?e[1]:"light",n=(0,r.Rd)(),d=(0,s.Pu)(n),{animationLevel:a}=n.settings.byKey;d!==t&&((0,u.Z)(d,a===o.zy),(0,r.R3)({...n}))}const t=window.matchMedia("(prefers-color-scheme: dark)");"function"==typeof t.addEventListener?t.addEventListener("change",e):"function"==typeof t.addListener&&t.addListener(e)}(),(0,r.Q6)("init",(e=>{const{animationLevel:t,messageTextSize:n,language:r}=e.settings.byKey,l=(0,s.Pu)(e);(0,a.m0)(r,void 0,!0),document.documentElement.style.setProperty("--composer-text-size",`${Math.max(n,d.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*n)}px`),document.documentElement.style.setProperty("--message-text-size",`${n}px`),document.documentElement.setAttribute("data-message-text-size",n.toString()),document.body.classList.add("initial"),document.body.classList.add(`animation-level-${t}`),document.body.classList.add(d.$b?"is-touch-env":"is-pointer-env"),(0,u.Z)(l,t===o.zy),(0,c.$)(),(0,i.px)(),d.cj?document.body.classList.add("is-ios"):d.wZ?document.body.classList.add("is-android"):d.jm&&document.body.classList.add("is-macos"),d.s$&&document.body.classList.add("is-safari")})),(0,r.Q6)("setIsUiReady",((e,t,n)=>{const{uiReadyState:r}=n;return 2===r&&document.body.classList.remove("initial"),{...e,uiReadyState:r}})),(0,r.Q6)("setAuthPhoneNumber",((e,t,n)=>{const{phoneNumber:r}=n;return{...e,authPhoneNumber:r}})),(0,r.Q6)("setAuthRememberMe",((e,t,n)=>({...e,authRememberMe:Boolean(n)}))),(0,r.Q6)("clearAuthError",(e=>({...e,authError:void 0}))),(0,r.Q6)("disableHistoryAnimations",(()=>{setTimeout((()=>{(0,r.R3)({...(0,r.Rd)(),shouldSkipHistoryAnimations:!1}),document.body.classList.remove("no-animate")}),450),(0,r.R3)({...(0,r.Rd)(),shouldSkipHistoryAnimations:!0},{forceSyncOnIOs:!0})}))},3781:(e,t,n)=>{var r=n(5116),o=n(9959);(0,r.Q6)("setSettingOption",((e,t,n)=>(0,o.BI)(e,n))),(0,r.Q6)("setThemeSettings",((e,t,n)=>{const{theme:r,...d}=n;return(0,o.lr)(e,r,d)}))},8332:(e,t,n)=>{n.d(t,{YC:()=>f,Bf:()=>h,G9:()=>m,ZV:()=>p,eA:()=>g,Ru:()=>v,pK:()=>y,l6:()=>b,zX:()=>I,U:()=>w,GM:()=>C,hu:()=>S,RT:()=>E,Hp:()=>P,Nl:()=>M,VE:()=>A,Mg:()=>k,Qm:()=>T,H5:()=>N,q8:()=>L,Hd:()=>R,pE:()=>x,i4:()=>B,Sm:()=>O,cc:()=>Z,SB:()=>F,zF:()=>D,ih:()=>_,$l:()=>$});var r=n(6137),o=n(3716),d=n(782),a=n(5527),u=n(790),s=n(5765);const i=Date.now()/1e3+31622400,c=3e9,l=3e8;function f(e){return"number"==typeof e?e>0:!e.startsWith("-")}function h(e){return m(e)||p(e)}function m(e){return"chatTypeBasicGroup"===e.type}function p(e){return"chatTypeSuperGroup"===e.type}function g(e){return"chatTypeChannel"===e.type}function v(e){return"chatTypePrivate"===e.type||"chatTypeBasicGroup"===e.type}function y(e){return e===o.FV}function b(e){switch(e.type){case"chatTypePrivate":return"PrivateChat";case"chatTypeBasicGroup":case"chatTypeSuperGroup":return"AccDescrGroup";case"chatTypeChannel":return"AccDescrChannel";default:return"Chat"}}function I(e){if("chatTypePrivate"===e.type||"chatTypeSecret"===e.type)return e.id}function w(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return r||n&&t.id===n.id&&n.isSelf?e("SavedMessages"):t.title||e("HiddenName")}function C(e){if(e.fullInfo)return e.fullInfo.about}function S(e){const{username:t}=e;if(t)return`https://t.me/${t}`;const{inviteLink:n}=e.fullInfo||{};return n}function E(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";if(e.avatarHash)return"big"===t?`profile${e.id}?${e.avatarHash}`:`avatar${e.id}?${e.avatarHash}`}function P(e){return!e.lastMessage}function M(e){return Boolean(e.adminRights)}function A(e,t){return!!e.adminRights&&e.adminRights[t]}function k(e,t){var n,r;return Boolean((null===(n=e.currentUserBannedRights)||void 0===n?void 0:n[t])||(null===(r=e.defaultBannedRights)||void 0===r?void 0:r[t]))}function T(e,t){return t!==r._f||!(e.isRestricted||e.migratedTo||e.isNotJoined||y(e.id))&&(!!e.isCreator||!!f(e.id)||(g(e)?A(e,"postMessages"):M(e)||!k(e,"sendMessages")))}function N(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return{canAttachMedia:!1,canAttachPolls:!1,canSendStickers:!1,canSendGifs:!1,canAttachEmbedLinks:!1};const n=M(e);return{canAttachMedia:n||!k(e,"sendMedia"),canAttachPolls:(n||!k(e,"sendPolls"))&&(!f(e.id)||t),canSendStickers:n||!k(e,"sendStickers"),canSendGifs:n||!k(e,"sendGifs"),canAttachEmbedLinks:n||!k(e,"embedLinks")}}function L(e,t,n){if(null!=t&&t.sendMessages){const{untilDate:n}=t;return n&&n2&&void 0!==arguments[2]?arguments[2]:{};return n[e.id]&&void 0!==n[e.id].isMuted?n[e.id].isMuted:e.isMuted||f(e.id)&&!t.hasPrivateChatsNotifications||g(e)&&!t.hasBroadcastNotifications||h(e)&&!t.hasGroupNotifications}function O(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{hasPrivateChatsMessagePreview:r=!0,hasBroadcastMessagePreview:o=!0,hasGroupMessagePreview:d=!0}=t;return n[e.id]&&void 0!==n[e.id].shouldShowPreviews?n[e.id].shouldShowPreviews:f(e.id)&&r||g(e)&&o||h(e)&&d}function Z(e){return m(e)||(p(e)||g(e))&&e.isCreator}function F(e,t,n){const{id:r,title:o,emoticon:d,description:a,pinnedChatIds:u,excludedChatIds:s,includedChatIds:i,excludeArchived:c,excludeMuted:l,excludeRead:f,...h}=t;return void 0!==n&&(Object.values(h).filter(Boolean).length>1||null!=s&&s.length||null!=i&&i.length)?e("Chats",n):h.bots?e("FilterBots"):h.groups?e("FilterGroups"):h.channels?e("FilterChannels"):h.contacts?e("FilterContacts"):h.nonContacts?e("FilterNonContacts"):void 0}function D(e,t,n){if(n&&!f(t))return n.isSelf?e("FromYou"):(0,a.Vl)(n)}function _(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3?arguments[3]:void 0;return(0,d.Xo)(e,(e=>{const o=t[e];if(!o)return 0;let d=0;return o.lastMessage&&(d+=o.lastMessage.date),n&&o.isVerified&&(d+=c),r&&r.includes(e)&&(d=Date.now()+l+(r.length-r.indexOf(e))),d}),"desc")}function $(e,t,n,r,o){if(!r)return t;const d=(0,s.W)(r);return t.filter((t=>{const r=n[t];return!!r&&d(w(e,r,void 0,t===o))}))}},8415:(e,t,n)=>{n.d(t,{lN:()=>R,JE:()=>k,uw:()=>ve,$l:()=>o.$l,kK:()=>r.kK,H5:()=>o.H5,MR:()=>de,kw:()=>r.kw,cc:()=>o.cc,Qm:()=>o.Qm,RT:()=>o.RT,GM:()=>o.GM,hu:()=>o.hu,N0:()=>ce,Hd:()=>o.Hd,U:()=>o.U,l6:()=>o.l6,T7:()=>g,SB:()=>o.SB,VE:()=>o.VE,XV:()=>ge,Sc:()=>me,N5:()=>W,oP:()=>G,qp:()=>_,w6:()=>A,R5:()=>pe,$D:()=>m,aE:()=>Q,ep:()=>ue,c0:()=>se,eO:()=>Y,Tp:()=>c,kG:()=>ae,Ti:()=>re,DH:()=>ne,KK:()=>f,O$:()=>U,t9:()=>q,dT:()=>N.d,Y5:()=>V,zF:()=>o.zF,q8:()=>o.q8,_O:()=>p,bf:()=>z,Kk:()=>Z,Eb:()=>O,MK:()=>x,UD:()=>h,EU:()=>B,b7:()=>j,kd:()=>H,s1:()=>X,F$:()=>ee,Cg:()=>te,bV:()=>le,HV:()=>fe,zX:()=>o.zX,OU:()=>S,RI:()=>E,Ow:()=>be,Rs:()=>r.Rs,Vl:()=>r.Vl,Js:()=>r.Js,db:()=>r.db,Tq:()=>r.Tq,jC:()=>he,BM:()=>ie,u8:()=>$,Lo:()=>I,Ul:()=>C,Nl:()=>o.Nl,pE:()=>o.pE,G9:()=>o.G9,eA:()=>o.eA,Bf:()=>o.Bf,Hp:()=>o.Hp,ZV:()=>o.ZV,pK:()=>o.pK,Ru:()=>o.Ru,NB:()=>r.NB,MF:()=>b,CD:()=>M,rl:()=>K,hC:()=>J,CI:()=>P,B4:()=>v,ss:()=>y,jM:()=>w,cS:()=>r.cS,YC:()=>o.YC,kM:()=>r.kM,Mg:()=>o.Mg,Ak:()=>l,i4:()=>o.i4,Sm:()=>o.Sm,ih:()=>o.ih,Z0:()=>r.Z0});var r=n(5527),o=n(8332),d=n(6137),a=n(3716),u=n(7361),s=n(4784);const i=new RegExp(a.FM,"i");function c(e){const{chatId:t,id:n}=e;return function(e,t){return`msg${e}-${t}`}(t,n)}function l(e){const t=e.match(/^msg(-?\d+)-(\d+)/);return{chatId:t[1],messageId:Number(t[2])}}function f(e){return e.previousLocalId||e.id}function h(e){const{text:t,sticker:n,photo:r,video:o,audio:d,voice:u,document:s,poll:i,webPage:c,contact:l,invoice:f}=e.content;return t?t.text:n||r||o||d||u||s||l||i||c||f?void 0:a.VC}function m(e){const{text:t,sticker:n,photo:r,video:o,audio:d,voice:a,document:u,poll:i,webPage:c,contact:l}=e.content;return!!(n||null!=o&&o.isRound)||!(!t||r||o||d||a||u||i||c||l)&&((0,s.Z)(t.text)||!1)}function p(e){const{text:t}=e.content;if(t&&t.text.length<=6&&1===m(e))return t.text}function g(e){const{text:t}=e.content;let n;if(null!=t&&t.entities){let e=t.entities.find((e=>e.type===d.Vv.TextUrl));if(e&&(n=e.url.match(i)),!n&&(e=t.entities.find((e=>e.type===d.Vv.Url)),e)){const{offset:r,length:o}=e;n=t.text.substring(r,r+o).match(i)}}if(!n&&t&&(n=t.text.match(i)),n)return{url:n[0],domain:n[3]}}function v(e){return e.isOutgoing}function y(e){return Boolean(e.replyToMessageId)}function b(e){return Boolean(e.forwardInfo)}function I(e){return Boolean(e.content.action)}function w(e){return e.chatId===a.aw&&Math.round(e.id)!==e.id}function C(e){return Boolean(e.senderId)&&!(0,o.YC)(e.senderId)&&v(e)}function S(e,t){return(0,o.YC)(t.id)?(0,r.Js)(t):(0,o.U)(e,t)}function E(e){return e.sendingState?"messageSendingStateFailed"===e.sendingState?"failed":"pending":"succeeded"}function P(e){return e.id>=a.AE}function M(e){return e.content.action&&"historyClear"===e.content.action.type}function A(e){const{content:t}=e,n=t.webPage?t.webPage.video:t.video,r=t.webPage?t.webPage.photo:t.photo,o=t.webPage?t.webPage.document:t.document;if(o)return o.fileName;if(n)return n.fileName;if(t.sticker){const e=t.sticker.isLottie?"tgs":t.sticker.isGif?"webm":(0,u.on)()?"webp":"png";return`${t.sticker.id}.${e}`}if(t.audio)return t.audio.fileName;const d=c(e);return r?`${d}.jpg`:t.voice?u.m5?`${d}.ogg`:`${d}.wav`:d}function k(e){return!e.results.some((e=>e.count>0))}var T=n(8035),N=n(3995);const L=["⠺","⠵","⠞","⠟"],R=80;function x(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:R,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];const d=!n&&O(t,o),a=d?`${d} `:"",u=(0,T.Z)(B(t),r),s=Z(e,t,u,o);return`${a}${s}`}function B(e){const t=h(e);if(!t)return;const{entities:n}=e.content.text||{};return null!=n&&n.length?n.reduce(((e,t)=>{let{type:n,offset:r,length:o}=t;if(n!==d.Vv.Spoiler)return e;const a=function(e){return new Array(e).fill(void 0).map((()=>L[Math.floor(Math.random()*L.length)])).join("")}(o);return`${e.substr(0,r)}${a}${e.substr(r+o,e.length)}`}),t):t}function O(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const{photo:n,video:r,audio:o,voice:d,document:a,sticker:u,poll:s}=e.content;if(e.groupedId||n)return"🖼";if(r)return"📹";if(u)return u.emoji;if(o)return"🎧";if(d)return"🎤";if(a)return"📎";if(s)return"📊";const i=!t&&(0,N.d)(e);return i?i.reaction:void 0}function Z(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const{text:o,photo:d,video:u,audio:s,voice:i,document:c,sticker:l,contact:f,poll:h,invoice:m}=t.content;let p;t.groupedId&&(p=n||e("lng_in_dlg_album")),d&&(p=n||e("AttachPhoto")),u&&(p=n||e(u.isGif?"AttachGif":"AttachVideo")),l&&(p=e("AttachSticker").trim()),s&&(p=F(t)||e("AttachMusic")),i&&(p=n||e("AttachAudio")),c&&(p=n||c.fileName),f&&(p=e("AttachContact")),h&&(p=h.summary.question),m&&(p="Invoice"),o&&(p=n);const g=!r&&(0,N.d)(t);return p&&g&&(p=`to your "${p}"`),p||a.VC}function F(e){const{audio:t,text:n}=e.content;return t&&[t.title,t.performer].filter(Boolean).join(" — ")||(null==n?void 0:n.text)}var D=n(5376);function _(e){return e.content}function $(e){return Boolean(U(e)||j(e)||Q(e)||z(e)||function(e){return e.content.contact}(e)||q(e)||W(e)||G(e)||H(e))}function U(e){return e.content.photo}function j(e){return e.content.video}function V(e){const{video:t}=e.content;return null!=t&&t.isRound?t:void 0}function W(e){return e.content.action}function G(e){return e.content.audio}function H(e){return e.content.voice}function z(e){return e.content.sticker}function Q(e){return e.content.document}function K(e){const t=Q(e);return t?"photo"===t.mediaType:void 0}function J(e){const t=Q(e);return t?"video"===t.mediaType:void 0}function q(e){return e.content.poll}function Y(e){return e.content.invoice}function X(e){return e.content.webPage}function ee(e){var t;return null===(t=X(e))||void 0===t?void 0:t.photo}function te(e){var t;return null===(t=X(e))||void 0===t?void 0:t.video}function ne(e){var t;return null===(t=function(e){const t=U(e)||j(e)||Q(e)||z(e)||ee(e)||te(e);if(t)return t.thumbnail}(e))||void 0===t?void 0:t.dataUri}function re(e,t){const{photo:n,video:r,sticker:o,audio:d,voice:a,document:u}=e.content,s=ee(e),i=te(e),l=r||i,f=n||s;if(!(f||l||o||d||a||u))return;const h=(f||l||o||d||a||u).id,m=`${c(e)}${h?`:${h}`:""}`;if(l)switch(t){case"micro":case"pictogram":case"viewerPreview":return`${m}?size=m`;case"inline":return ie(e)?void 0:oe(l,m);case"viewerFull":return oe(l,m);case"download":return`${m}?download`}if(f)switch(t){case"micro":case"pictogram":return`${m}?size=m`;case"inline":return ie(e)?void 0:`${m}?size=x`;case"viewerPreview":return`${m}?size=x`;case"viewerFull":case"download":return`${m}?size=z`}if(u)switch(t){case"micro":case"pictogram":case"inline":case"viewerPreview":if(!(0,D.v6)(u)||ie(e))return;return`${m}?size=m`;case"viewerFull":case"download":return m}if(o)switch(t){case"micro":return;case"pictogram":return`${m}?size=m`;case"inline":return m;case"download":return`${m}?download`}if(d)switch(t){case"micro":case"pictogram":return de(d)?`${m}?size=m`:void 0;case"inline":return oe(d,m);case"download":return`${m}?download`}if(a)switch(t){case"micro":case"pictogram":return;case"inline":return m;case"download":return`${m}?download`}}function oe(e,t){return u.I_&&u.s$?`${t}?fileSize=${e.size}&mimeType=${e.mimeType}`:t}function de(e){return e.thumbnailSizes&&e.thumbnailSizes.length>0}function ae(e,t){const{sticker:n,video:r,audio:o,voice:a}=e.content,s=r||te(e);return n&&"inline"===t&&n.isLottie?d.IU.Lottie:s&&u.I_&&("viewerFull"===t||"inline"===t)?d.IU.Progressive:o||a?a&&!u.m5?d.IU.BlobUrl:d.IU.Progressive:d.IU.BlobUrl}function ue(e){const{photo:t,video:n,document:r}=e.content,o=ee(e),d=te(e);if(t||o)return`photo${e.date}.jpeg`;const{fileName:a}=n||d||r||{};return a}function se(e){const{video:t,document:n}=e.content,r=te(e),{size:o}=t||r||n||{};return o}function ie(e){const{photo:t,video:n,document:r}=e.content;return(null==t?void 0:t.blobUrl)||(null==n?void 0:n.blobUrl)||(null==r?void 0:r.previewBlobUrl)}function ce(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return pe(e,t,n?"media":"inlineMedia")}function le(e){return e.sizes.find((e=>"z"===e.type))||e.sizes.find((e=>"y"===e.type))||fe(e)}function fe(e){return e.sizes.find((e=>"x"===e.type))||e.sizes.find((e=>"m"===e.type))||e.sizes.find((e=>"s"===e.type))||e.thumbnail}function he(e){if(e.width&&e.height)return e}function me(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=P(e),o=r||n,d=Number(t);return{isUploading:r,isTransferring:o,transferProgress:d}}function pe(e,t,n){let r;switch(n){case"media":r=e=>{const t=j(e);return U(e)||t&&!t.isRound&&!t.isGif};break;case"documents":r=Q;break;case"links":r=e=>X(e)||function(e){const{text:t}=e.content,n=t&&t.text.match(i);if(n)return{url:n[0],domain:n[3]}}(e);break;case"audio":r=G;break;case"voice":r=e=>{const t=j(e);return H(e)||t&&t.isRound};break;case"inlineMedia":r=e=>{const t=j(e);return U(e)||t&&!t.isRound&&!t.isGif||K(e)||J(e)};break;default:return[]}return t.reduce(((t,n)=>(e[n]&&r(e[n])&&t.push(n),t)),[])}function ge(e){const{audio:t,voice:n,video:r}=_(e),o=t||n||r||te(e);if(o)return o.duration}function ve(e,t){return`${e}_${t}`}const ye={missing_payment_information:{field:"cardNumber",message:"Incorrect card number"},invalid_number:{field:"cardNumber",message:"Incorrect card number"},number:{field:"cardNumber",message:"Incorrect card number"},exp_year:{field:"expiry",message:"Incorrect year"},exp_month:{field:"expiry",message:"Incorrect month"},invalid_expiry_year:{field:"expiry",message:"Incorrect year"},invalid_expiry_month:{field:"expiry",message:"Incorrect month"},cvc:{field:"cvv",message:"Incorrect CVV"},invalid_cvc:{field:"cvv",message:"Incorrect CVV"}};function be(e){const{message:t,code:n,param:r}=e,{field:o,message:d}=r?ye[r]:ye[n];return{field:o,message:d,description:t}}},3995:(e,t,n)=>{function r(e){var t,n;return e.isOutgoing?null===(t=e.reactions)||void 0===t||null===(n=t.recentReactions)||void 0===n?void 0:n[0]:void 0}function o(e,t){if(!e||!e.recentReactions)return!0;if(!t||!t.recentReactions)return!1;const n=e.results.reduce(((e,t)=>(e[t.reaction]=t.count,e)),{});return t.results.some((e=>!n[e.reaction]||n[e.reaction]r,l:()=>o})},5527:(e,t,n)=>{n.d(t,{Vl:()=>i,Js:()=>c,Tq:()=>l,kM:()=>f,NB:()=>h,cS:()=>m,kw:()=>p,Z0:()=>g,kK:()=>v,db:()=>y,Rs:()=>b});var r=n(3716),o=n(790),d=n(782),a=n(2267),u=n(5765);const s=[1,8,5,2,7,4,6];function i(e){if(e)switch(e.type){case"userTypeBot":case"userTypeRegular":return e.firstName||e.lastName;case"userTypeDeleted":case"userTypeUnknown":return"Deleted";default:return}}function c(e){if(e){if(h(e))return"Deleted account";switch(e.type){case"userTypeBot":case"userTypeRegular":if(e.firstName&&e.lastName)return`${e.firstName} ${e.lastName}`;if(e.firstName)return e.firstName;if(e.lastName)return e.lastName;break;case"userTypeDeleted":case"userTypeUnknown":return"Deleted account"}}}function l(e,t,n,d){if(t.id===r.aw)return e("ServiceNotifications").toLowerCase();if(t.type&&"userTypeBot"===t.type)return e("Bot");if(!n)return"";switch(n.type){case"userStatusEmpty":return e("ALongTimeAgo");case"userStatusLastMonth":return e("WithinAMonth");case"userStatusLastWeek":return e("WithinAWeek");case"userStatusOffline":{const{wasOnline:t}=n;if(!t)return e("LastSeen.Offline");const r=new Date((new Date).getTime()+1e3*d),a=new Date(1e3*t);if(a>=r)return e("LastSeen.JustNow");const u=new Date(r.getTime()-a.getTime());if(u.getTime()/1e3<60)return e("LastSeen.JustNow");if(u.getTime()/1e3<3600)return e("LastSeen.MinutesAgo",Math.floor(u.getTime()/1e3/60));const s=new Date;if(s.setHours(0,0,0,0),a>new Date(s.getTime()+1e3*d))return u.getTime()/1e3<21600?e("LastSeen.HoursAgo",Math.floor(u.getTime()/1e3/60/60)):e("LastSeen.TodayAt",(0,o.mr)(e,a));const i=new Date;return i.setDate(r.getDate()-1),i.setHours(0,0,0,0),a>new Date(i.getTime()+1e3*d)?e("LastSeen.YesterdayAt",(0,o.mr)(e,a)):e("LastSeen.AtDate",(0,o.Tu)(e,a))}case"userStatusOnline":return e("Online");case"userStatusRecently":return e("Lately");default:return}}function f(e,t){const{id:n,type:o}=e;return!!t&&n!==r.aw&&"userStatusOnline"===t.type&&"userTypeBot"!==o}function h(e){return!e.noStatus&&"userTypeBot"!==e.type&&e.id!==r.aw&&("userTypeDeleted"===e.type||"userTypeUnknown"===e.type)}function m(e){return"userTypeBot"===e.type}function p(e){return!e.isContact&&!m(e)}function g(e,t,n,r){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return(0,d.Xo)(e,(e=>{const d=(0,a.b)(o);if(r&&r.includes(e))return d+172800-(r.length-r.indexOf(e));const u=t[e],s=n[e];if(!u||!s)return 0;if("userStatusOnline"===s.type)return s.expires;if("userStatusOffline"===s.type&&s.wasOnline)return s.wasOnline;switch(s.type){case"userStatusRecently":return d-86400;case"userStatusLastWeek":return d-604800;case"userStatusLastMonth":return d-18144e3;default:return 0}}),"desc")}function v(e,t,n,r,o){if(!n)return e;const d=(0,u.W)(n);return e.filter((e=>{const n=t[e];if(!n)return!1;const a=e===r?o:c(n);return a&&d(a)||d(n.username)}))}function y(e){return"number"==typeof e?Math.abs(e):Math.abs(Number(e))}function b(e){const t=e?y(e.id)%7:0;return s[t]}},6788:(e,t,n)=>{n.d(t,{Mg:()=>a,B1:()=>u,SL:()=>s,a4:()=>i,GL:()=>c,fZ:()=>l,Pi:()=>h,vv:()=>m,Dd:()=>p});var r=n(3716),o=n(782),d=n(9066);function a(e,t,n){return{...e,chats:{...e.chats,listIds:{...e.chats.listIds,[t]:n}}}}function u(e,t,n){const{[t]:r}=e.chats.listIds,o=null!=r&&r.length?n.filter((e=>!r.includes(e))):n;return r&&!o.length?e:a(e,t,[...r||[],...o])}function s(e,t){return{...e,chats:{...e.chats,byId:t}}}function i(e,t,n,r){const{byId:o}=e.chats,d=f(e,t,n,r);return d?s(e,{...o,[t]:d}):e}function c(e,t){const n=Object.keys(t).reduce(((n,r)=>{const o=f(e,r,t[r]);return o&&(n[r]=o),n}),{});return e=s(e,{...e.chats.byId,...n})}function l(e,t){const{byId:n}=e.chats;let r=!1;const o=Object.keys(t).reduce(((o,d)=>{if(!n[d]||n[d].isMin&&!t[d].isMin){const n=f(e,d,t[d]);n&&(o[d]=n,r||(r=!0))}return o}),{});return r?e=s(e,{...n,...o}):e}function f(e,t,n,r){const{byId:d}=e.chats,a=d[t],u=n.isMin&&a&&!a.isMin,s={...a,...u?(0,o.CE)(n,["isMin","accessHash"]):n,...r&&{photos:[r,...a.photos||[]]}};if(s.id&&s.type)return s}function h(e,t,n){const o=n===r.WS?"archived":"active";let d=e.chats.listIds;return Object.keys(d).forEach((e=>{const n=d[e]||[];e!==o||n.includes(t)?e!==o&&n.includes(t)&&(d={...d,[e]:n.filter((e=>e!==t))}):d={...d,[e]:[...n,t]}})),i(e={...e,chats:{...e.chats,listIds:d}},t,{folderId:n||void 0})}function m(e,t,n){const r="active"===t?"all":"archived";return{...e,chats:{...e.chats,...n.orderedPinnedIds&&{orderedPinnedIds:{...e.chats.orderedPinnedIds,[t]:n.orderedPinnedIds}},totalCount:{...e.chats.totalCount,[r]:n.totalChatCount},isFullyLoaded:{...e.chats.isFullyLoaded,[t]:!1}}}}function p(e,t){const n=(0,d.Ek)(e,t);if(!n)return e;const{[n]:r}=e.chats.listIds;return r&&(e=a(e,n,r.filter((e=>e!==t)))),i(e,t,{isNotJoined:!0})}},9959:(e,t,n)=>{n.d(t,{O4:()=>z,c_:()=>o.c_,fZ:()=>r.fZ,m6:()=>o.m6,aK:()=>G,aJ:()=>W,zn:()=>P,Sh:()=>y,$S:()=>o.$S,bp:()=>re,WY:()=>oe,K4:()=>o.K4,bV:()=>o.bV,GK:()=>I,M6:()=>o.M6,i9:()=>o.i9,Dd:()=>r.Dd,vy:()=>f,rB:()=>Q,g_:()=>c,Mg:()=>r.Mg,SL:()=>r.SL,Pb:()=>B,w3:()=>o.w3,BI:()=>j,lr:()=>V,pf:()=>o.pf,ps:()=>E,s5:()=>m,y9:()=>o.y9,nA:()=>X,_7:()=>te,Q$:()=>Y,Dq:()=>ne,vT:()=>q,QH:()=>ee,Ob:()=>o.Ob,a4:()=>r.a4,B1:()=>r.B1,vv:()=>r.vv,Pi:()=>r.Pi,cY:()=>o.cY,GL:()=>r.GL,Wy:()=>o.Wy,wV:()=>o.wV,cq:()=>o.cq,rq:()=>i,No:()=>A,Og:()=>k,xv:()=>N,px:()=>T,xj:()=>o.xj,c1:()=>D,z5:()=>F,qr:()=>x,dx:()=>O,fw:()=>U,H9:()=>$,HN:()=>H,ff:()=>o.ff,P4:()=>o.P4,TM:()=>J,Fn:()=>o.Fn,Rg:()=>s,z3:()=>u,IM:()=>l,Xg:()=>o.Xg,j6:()=>o.j6,lG:()=>o.lG,IE:()=>K,Nq:()=>g,Lm:()=>w,Q3:()=>C,eD:()=>v});var r=n(6788),o=n(3495),d=n(782),a=n(9066);function u(e,t,n,r,o){const a=r.map((t=>{const n=e.stickers.setsById[t.id];return n?{...n,...t}:t}));return{...e,stickers:{...e.stickers,setsById:{...e.stickers.setsById,...(0,d.ee)(a,"id")},[t]:{...e.stickers[t],hash:n,..."search"===t?{resultIds:o}:{setIds:r.map((e=>{let{id:t}=e;return t}))}}}}}function s(e,t,n){const r=e.stickers.setsById[t]||{},o=e.stickers.added.setIds||[];let d=o;return n.installedDate&&o&&!o.includes(t)&&(d=[t,...d]),!n.installedDate&&null!=o&&o.includes(t)&&(d=d.filter((e=>e!==t))),{...e,stickers:{...e.stickers,added:{...e.stickers.added,setIds:d},setsById:{...e.stickers.setsById,[t]:{...r,...n}}}}}function i(e,t,n,r){const{results:o}=e.gifs.search;let d;if(t||!o)d=n;else{const e=new Set(o.map((e=>e.id)));d=[...o,...n.filter((t=>!e.has(t.id)))]}return{...e,gifs:{...e.gifs,search:{...e.gifs.search,offset:r,results:d}}}}function c(e,t){return{...e,animatedEmojis:t}}function l(e,t,n,r){const o=[...(0,a.Pk)(e,t),...n||[]],u=(0,d.Tw)(o.map((e=>{let{id:t}=e;return t}))),s=(0,d.ee)(o,"id"),i=u.map((e=>s[e]));return{...e,stickers:{...e.stickers,forEmoji:{emoji:t,stickers:i,hash:r}}}}function f(e){const{emoji:t,stickers:n,hash:r}=e.stickers.forEmoji||{};return t?l(e,t,n,r):e}var h=n(735);function m(e,t){return{...e,users:{...e.users,byId:t}}}function p(e,t){const{userIds:n}=e.contactList||{};if(!n)return e;const r=t.filter((e=>(null==e?void 0:e.isContact)&&!n.includes(e.id))).map((e=>e.id));return 0===r.length?e:{...e,contactList:{userIds:[...r,...n]}}}function g(e,t,n){const{byId:r}=e.users,o=b(e,t,n);return o?m(e=p(e,[o]),{...r,[t]:o}):e}function v(e,t){const n=Object.keys(t).reduce(((n,r)=>{const o=b(e,r,t[r]);return o&&(n[r]=o),n}),{});return e=p(e=m(e,{...e.users.byId,...n}),Object.values(n))}function y(e,t){const{byId:n}=e.users;let r=!1;const o=Object.keys(t).reduce(((o,d)=>{if(!n[d]||n[d].isMin&&!t[d].isMin){const n=b(e,d,t[d]);n&&(o[d]=n,r||(r=!0))}return o}),{});return r?e=p(e=m(e,{...n,...o}),Object.values(o)):e}function b(e,t,n){const{byId:r}=e.users,o=r[t],a=n.isMin&&o&&!o.isMin,u={...o,...a?(0,d.CE)(n,["isMin","accessHash"]):n};if(u.id&&u.type)return u}function I(e,t){const{byId:n}=e.users,{userIds:r}=e.contactList||{};return m(e={...e,contactList:{userIds:r?r.filter((e=>e!==t)):h.D}},{...n,[t]:{...n[t],isContact:void 0}})}function w(e,t){return{...e,userSearch:{...e.userSearch,...t}}}function C(e,t){return w(e,{fetchingStatus:t})}function S(e,t,n){const{byId:r}=e.users,o=r[t];return o&&o.fullInfo?g(e,t,{...o,fullInfo:{...o.fullInfo,isBlocked:n}}):e}function E(e,t){return{...e,users:{...e.users,statusesById:t}}}function P(e,t){const{statusesById:n}=e.users,r=Object.keys(t).filter((e=>!n[e]));return r.length?e=E(e,{...n,...(0,d.ei)(t,r)}):e}const M=e=>`${e.chatId}_${e.id}`;function A(e,t){return{...e,globalSearch:{...e.globalSearch,...t}}}function k(e,t){return A(e,{currentContent:t})}function T(e,t,n,r,o){var a;const{resultsByType:u}=e.globalSearch||{},s=t.reduce(((e,t)=>(e[M(t)]=t,e)),{}),i=null==u||null===(a=u[r])||void 0===a?void 0:a.foundIds;if(void 0!==i&&Object.keys(s).every((e=>i.includes(M(s[e])))))return N(e,{messages:!1});const c=i||[],l=t.map((e=>M(e))),f=Array.prototype.concat(c,l),h=(0,d.et)(c,f)?c:f;return A(e=N(e,{messages:!1}),{resultsByType:{...(e.globalSearch||{}).resultsByType,[r]:{totalCount:n,nextOffsetId:o,foundIds:h}}})}function N(e,t){return A(e,{fetchingStatus:{...e.globalSearch.fetchingStatus,...t}})}var L=n(8415);function R(e,t,n){return{...e,localTextSearch:{byChatThreadKey:{...e.localTextSearch.byChatThreadKey,[t]:n}}}}function x(e,t,n,r,o){const d=(0,L.uw)(t,n);return R(e,d,{...e.localTextSearch.byChatThreadKey[d],isActive:r,query:o})}function B(e,t,n,r,o,d){const a=(0,L.uw)(t,n);return R(e,a,{...e.localTextSearch.byChatThreadKey[a],results:{foundIds:r,totalCount:o,nextOffsetId:d}})}function O(e,t,n,r,o,a){const u=(0,L.uw)(t,n),{results:s}=e.localTextSearch.byChatThreadKey[u]||{},i=(null==s?void 0:s.foundIds)||[],c=_((0,d.Tw)(Array.prototype.concat(i,r)));return B(e,t,n,(0,d.et)(i,c)?i:c,o,a)}function Z(e,t,n){return{...e,localMediaSearch:{byChatId:{...e.localMediaSearch.byChatId,[t]:n}}}}function F(e,t,n){return Z(e,t,{...e.localMediaSearch.byChatId[t],currentType:n})}function D(e,t,n,r,o,a){const{resultsByType:u}=e.localMediaSearch.byChatId[t]||{},s=null!=u&&u[n]?u[n].foundIds:[],i=_((0,d.Tw)(Array.prototype.concat(s,r)));return function(e,t,n,r,o,d){return Z(e,t,{...e.localMediaSearch.byChatId[t],resultsByType:{...(e.localMediaSearch.byChatId[t]||{}).resultsByType,[n]:{foundIds:r,totalCount:o,nextOffsetId:d}}})}(e,t,n,(0,d.et)(s,i)?s:i,o,a)}function _(e){return e.sort(((e,t)=>t-e))}function $(e,t){return{...e,management:{...e.management,progress:t}}}function U(e,t,n){return{...e,management:{...e.management,byChatId:{...e.management.byChatId,[t]:{...e.management.byChatId[t]||{},...n}}}}}function j(e,t){return{...e,settings:{...e.settings,byKey:{...e.settings.byKey,...t}}}}function V(e,t,n){return{...e,settings:{...e.settings,themes:{...e.settings.themes,[t]:{...e.settings.themes[t]||{},...n}}}}}function W(e,t){return t.forEach((t=>{const{chatId:n,...r}=t;e=G(e,n,r)})),e}function G(e,t,n){return{...e,settings:{...e.settings,notifyExceptions:{...e.settings.notifyExceptions,[t]:n}}}}function H(e,t,n,r){switch(t){case"contact":return j(e,{...void 0!==n&&{hasPrivateChatsNotifications:!n},...void 0!==r&&{hasPrivateChatsMessagePreview:r}});case"group":return j(e,{...void 0!==n&&{hasGroupNotifications:!n},...void 0!==r&&{hasGroupMessagePreview:r}});case"broadcast":return j(e,{...void 0!==n&&{hasBroadcastNotifications:!n},...void 0!==r&&{hasBroadcastMessagePreview:r}});default:return}}function z(e,t){return e=S(e,t,!0),{...e,blocked:{...e.blocked,ids:[t,...e.blocked.ids],totalCount:e.blocked.totalCount+1}}}function Q(e,t){return e=S(e,t,!1),{...e,blocked:{...e.blocked,ids:e.blocked.ids.filter((e=>e!==t)),totalCount:e.blocked.totalCount-1}}}function K(e,t){return{...e,twoFaSettings:{...e.twoFaSettings,...t}}}function J(e,t){return{...e,payment:{...e.payment,shippingOptions:t}}}function q(e,t){return{...e,payment:{...e.payment,requestId:t}}}function Y(e,t){return{...e,payment:{...e.payment,step:t}}}function X(e,t){if(!t.content||!t.content.invoice)return e;const{title:n,text:r,amount:o,currency:d,isTest:a,photoUrl:u}=t.content.invoice;return{...e,payment:{...e.payment,invoiceContent:{title:n,text:r,photoUrl:u,amount:o,currency:d,isTest:a}}}}function ee(e,t){return{...e,payment:{...e.payment,stripeCredentials:{...t}}}}function te(e,t){return{...e,payment:{...e.payment,...t}}}function ne(e,t,n){if(!t||!n)return{...e,payment:{...e.payment,receipt:void 0}};const{invoice:r}=n.content,{photoUrl:o,text:d,title:a}=r||{};return{...e,payment:{...e.payment,receipt:{...t,photoUrl:o,text:d,title:a}}}}function re(e){return{...e,payment:{}}}function oe(e){return{...e,payment:{...e.payment,isPaymentModalOpen:!1}}}},3495:(e,t,n)=>{n.d(t,{Wy:()=>u,pf:()=>c,m6:()=>l,c_:()=>f,cY:()=>h,P4:()=>m,K4:()=>p,bV:()=>g,xj:()=>v,ff:()=>y,$S:()=>I,y9:()=>w,Xg:()=>C,j6:()=>S,w3:()=>E,cq:()=>P,Fn:()=>M,wV:()=>A,M6:()=>k,Ob:()=>T,i9:()=>N,lG:()=>L});var r=n(6137),o=n(3716),d=n(9066),a=n(782);function u(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r._f,d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"thread",a=arguments.length>4?arguments[4]:void 0;const{messageLists:u}=e.messages;let s=u;if(a||o.Cg)s=t?[{chatId:t,threadId:n,type:d}]:[];else if(t){const e=u[u.length-1];e&&e.chatId===t&&e.threadId===n&&e.type===d||(s=e&&e.chatId===o.AJ?[...u.slice(0,-1),{chatId:t,threadId:n,type:d}]:[...u,{chatId:t,threadId:n,type:d}])}else s=u.slice(0,-1);return{...e,messages:{...e.messages,messageLists:s}}}function s(e,t,n){return i(e,t,{byId:n})}function i(e,t,n){const r=e.messages.byChatId[t]||{byId:{},threadsById:{}};return{...e,messages:{...e.messages,byChatId:{...e.messages.byChatId,[t]:{...r,...n}}}}}function c(e,t,n,r,o){return function(e,t,n,r){const o=e.messages.byChatId[t];return i(e,t,{threadsById:{...null==o?void 0:o.threadsById,[n]:{...null==o?void 0:o.threadsById[n],...r}}})}(e,t,n,{[r]:o})}function l(e,t){const n=t.reduce(((e,t)=>(e[t.chatId]||(e[t.chatId]={}),e[t.chatId][t.id]=t,e)),{});return Object.keys(n).forEach((t=>{e=f(e,t,n[t])})),e}function f(e,t,n){const r=(0,d.Zw)(e,t);return r&&Object.keys(n).every((e=>Boolean(r[Number(e)])))?e:s(e,t,{...n,...r})}function h(e,t,n,r){const o=(0,d.Zw)(e,t)||{},a={...o[n],...r};return a.id?s(e,t,{...o,[n]:a}):e}function m(e,t,n,r){const o=(0,d.Fn)(e,t)||{},a={...o[n],...r};return a.id?E(e,t,{...o,[n]:a}):e}function p(e,t,n){const r=(0,d.Zw)(e,t);if(!r)return e;const o=(0,a.CE)(r,n),i=Object.values((0,a.q0)(r,n)).filter((e=>{let{forwardInfo:t}=e;return null==t?void 0:t.isLinkedChannelPost}));if(Object.keys(e.messages.byChatId[t].threadsById).map(Number).forEach((r=>{const o=(0,d.tZ)(e,t,r);let a=(0,d.gb)(e,t,r),u=(0,d.qC)(e,t,r),s=(0,d.Cb)(e,t,r),i=(0,d.KB)(e,t),l=null==o?void 0:o.messagesCount;n.forEach((e=>{a&&a.includes(e)&&(a=a.filter((t=>t!==e)),void 0!==l&&(l-=1)),u&&u.includes(e)&&(u=u.filter((t=>t!==e))),s&&s.includes(e)&&(s=s.filter((t=>t!==e))),i&&i.includes(e)&&(i=i.filter((t=>t!==e)))})),e=c(e,t,r,"listedIds",a),e=c(e,t,r,"outlyingIds",u),e=c(e,t,r,"viewportIds",s),e=c(e,t,r,"pinnedIds",i),o&&void 0!==l&&(e=c(e,t,r,"threadInfo",{...o,messagesCount:l}))})),i.length){const n=(0,d.Bt)(e),r=n&&n.chatId===t&&"thread"===n.type,o=null==n?void 0:n.threadId;i.forEach((n=>{const{fromChatId:a,fromMessageId:s}=n.forwardInfo,i=(0,d.hj)(e,a,s);r&&o===s&&(e=u(e,t)),i&&(e=h(e,a,s,{threadInfo:void 0}))}))}return e=s(e,t,o)}function g(e,t,n){const o=(0,d.Fn)(e,t);if(!o)return e;const u=(0,a.CE)(o,n);let s=(0,d.qy)(e,t);return s&&(n.forEach((e=>{s.includes(e)&&(s=s.filter((t=>t!==e)))})),e=c(e,t,r._f,"scheduledIds",s)),E(e,t,u)}function v(e,t,n,r){const o=(0,d.gb)(e,t,n),a=null!=o&&o.length?r.filter((e=>!o.includes(e))):r;return o&&!a.length?e:c(e,t,n,"listedIds",b([...o||[],...a]))}function y(e,t,n,r){const o=(0,d.qC)(e,t,n),a=null!=o&&o.length?r.filter((e=>!o.includes(e))):r;return o&&!a.length?e:c(e,t,n,"outlyingIds",b([...o||[],...a]))}function b(e){return e.sort(((e,t)=>e-t))}function I(e,t,n,r){const a=(0,d.Cb)(e,t,n)||[];return a.includes(r)?e:c(e,t,n,"viewportIds",b([...a.length{e=C(e,t.chatId,t.threadId,t)})),e}function E(e,t,n){return function(e,t,n){const r=e.scheduledMessages.byChatId[t]||{byId:{},hash:0};return{...e,scheduledMessages:{byChatId:{...e.scheduledMessages.byChatId,[t]:{...r,...n}}}}}(e,t,{byId:n})}function P(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return{...e,focusedMessage:{...e.focusedMessage,chatId:t,messageId:n,noHighlight:r,isResizingContainer:o}}}function M(e,t,n){return{...e,messages:{...e.messages,sponsoredByChatId:{...e.messages.sponsoredByChatId,[t]:n}}}}function A(e,t){return{...e,focusedMessage:{...e.focusedMessage,direction:t}}}function k(e,t,n){return{...e,selectedMessages:{chatId:t,messageIds:n?Array.prototype.concat([],n):[]}}}function T(e,t,n,r,o,u,s){let i=arguments.length>7&&void 0!==arguments[7]&&arguments[7];const{selectedMessages:c}=e;u&&(s=(0,d.xH)(e,t,u));const l=s||[o];if(!c)return k(e,t,l);const{messageIds:f}=c;let h;const m=l.filter((e=>!f.includes(e)));if(m&&!m.length)h=f.filter((e=>!l.includes(e)));else if(i&&f.length){const u=(0,d.$W)(e,t,n,r),s=u.indexOf(f[f.length-1]),i=u.indexOf(o),c=Math.min(s,i),l=Math.max(s,i),m=u.slice(c,l+1);h=(0,a.Tw)([...f,...m])}else h=[...f,...m];return h.length?{...e,selectedMessages:{...c,messageIds:h}}:N(e)}function N(e){return{...e,selectedMessages:void 0}}function L(e,t,n,r,o){const{channelPostId:a,fromChatId:u}=t.forwardInfo||{};if(a&&u){const t=(0,d.tZ)(e,n,a);t&&(e=c(e,n,a,"threadInfo",{...t,lastMessageId:r,messagesCount:t.messagesCount+(o?-1:1)}))}return e}},8857:(e,t,n)=>{n.d(t,{Z1:()=>u,Dg:()=>s,FM:()=>i,xo:()=>c,P_:()=>l,YK:()=>f,IK:()=>h,pk:()=>m,g4:()=>p,N:()=>g,Ek:()=>v,Mw:()=>y,ep:()=>b,DI:()=>I,UW:()=>w,_5:()=>C});var r=n(6137),o=n(8415),d=n(6376),a=n(3716);function u(e,t){return e.chats.byId[t]}function s(e,t){const n=(0,o.zX)(t);return!!n&&(0,d.dy)(e,n)}function i(e,t){return t===e.currentUserId}function c(e,t){const n=s(e,t);return n&&(0,o.cS)(n)}function l(e){return Object.values(e.chats.byId).find((e=>{let{isSupport:t}=e;return t}))}function f(e,t){if(!(0,o.YC)(t.id)&&!(0,o.eA)(t)&&t.fullInfo)return t.fullInfo.members&&t.fullInfo.members.length!==a.mo?t.fullInfo.members.reduce(((t,n)=>{let{userId:r}=n;return r!==e.currentUserId&&e.users.byId[r]&&(0,o.kM)(e.users.byId[r],e.users.statusesById[r])?t+1:t}),0):t.fullInfo.onlineCount}function h(e,t){const n=u(e,t),r=n&&(0,o.zX)(n),a=r&&(0,d.dy)(e,r);if(a&&(0,o.cS)(a))return a}function m(e,t){const n=u(e,t),d=h(e,t);if(!n||!d)return!1;if(n.lastMessage&&(0,o.CD)(n.lastMessage))return!0;const a=e.messages.byChatId[t];if(!a)return!1;const{listedIds:s}=a.threadsById[r._f]||{};return s&&!s.length}function p(e){return Boolean(e.chats.listIds.active)}function g(e,t,n){const{listIds:r}=e.chats;if(n){const e=r[n];return Boolean(e&&e.includes(t))}return Object.values(r).some((e=>e&&e.includes(t)))}function v(e,t){const n=u(e,t);if(n&&g(e,t))return n.folderId===a.WS?"archived":"active"}function y(e,t){return e.chatFolders.byId[t]}function b(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.Nf;const{active:r,archived:o}=e.chats.orderedPinnedIds;if(n===a.Nf)return Boolean(null==r?void 0:r.includes(t));if(n===a.WS)return Boolean(null==o?void 0:o.includes(t));const{byId:d}=e.chatFolders,{pinnedChatIds:u}=d[n]||{};return Boolean(null==u?void 0:u.includes(t))}function I(e,t){const n=t.toLowerCase();return Object.values(e.chats.byId).find((e=>e.username&&e.username.toLowerCase()===n))}function w(e){return Boolean(u(e,a.aw))}function C(e,t){var n;const r=u(e,t);if(!r)return;const o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.sendAsId;return o?(0,d.dy)(e,o)||u(e,o):void 0}},9066:(e,t,n)=>{n.d(t,{hg:()=>Q,xs:()=>le,_k:()=>ae,zB:()=>v,tH:()=>y,Oh:()=>b,g4:()=>u.g4,bH:()=>Ee,__:()=>Me,xl:()=>ue,Nu:()=>ie,nB:()=>se,Z1:()=>u.Z1,IK:()=>u.IK,DI:()=>u.DI,Mw:()=>u.Mw,Ek:()=>u.Ek,hj:()=>J,ZB:()=>X,Zw:()=>A,YK:()=>u.YK,Dg:()=>u.Dg,X5:()=>ge,jr:()=>M,yN:()=>f,JX:()=>je,pP:()=>Fe,we:()=>Oe,$W:()=>R,Bt:()=>P,y5:()=>l,n5:()=>Be,q6:()=>Re,Ms:()=>$,_$:()=>D,kK:()=>Y,wU:()=>_,yZ:()=>V,It:()=>me,G$:()=>ee,y8:()=>be,cv:()=>de,ku:()=>Ne,pk:()=>u.pk,N:()=>u.N,ep:()=>u.ep,xo:()=>u.xo,FM:()=>u.FM,a6:()=>we,te:()=>ce,Ev:()=>pe,CA:()=>ve,zQ:()=>De,_X:()=>te,EV:()=>Te,vk:()=>ye,Jf:()=>$e,UW:()=>u.UW,s4:()=>s.s4,b9:()=>K,VF:()=>ke,gb:()=>N,CP:()=>I,cu:()=>w,ji:()=>C,aW:()=>Ze,xH:()=>Ie,FT:()=>Se,tV:()=>U,NJ:()=>Je,dZ:()=>Ke,dT:()=>re,qC:()=>L,gx:()=>Ve,eh:()=>Ge,Mz:()=>We,sp:()=>He,KB:()=>B,$$:()=>ze,rd:()=>he,p9:()=>W,Yy:()=>F,Wq:()=>_e,qy:()=>O,Tm:()=>q,Fn:()=>k,Vt:()=>Z,D7:()=>Ce,_5:()=>u._5,Ur:()=>oe,yB:()=>Ae,fS:()=>Le,Ny:()=>h,E_:()=>m,Pk:()=>p,i3:()=>Qe,P_:()=>u.P_,Pu:()=>Ue,Db:()=>z,tZ:()=>j,Cm:()=>G,qS:()=>H,uZ:()=>fe,dy:()=>s.dy,ss:()=>s.ss,Cb:()=>x,P2:()=>xe});var r=n(1713),o=n(7361),d=n(6137),a=n(3716),u=n(8857),s=n(6376),i=n(8415),c=n(782);function l(e){return e.stickers.search}function f(e){return e.gifs.search}function h(e,t){return e.stickers.setsById[t]}function m(e,t){return Object.values(e.stickers.setsById).find((e=>e.shortName.toLowerCase()===t.toLowerCase()))}function p(e,t){const n=Object.values(e.stickers.setsById);let r=[];return e.stickers.favorite.stickers.forEach((e=>{e.emoji===t&&r.push(e)})),n.forEach((e=>{let{packs:n}=e;n&&(r=r.concat(n[t]||[],n[g(t)]||[]))})),r}function g(e){return e.replace("️","")}function v(e,t){const{animatedEmojis:n}=e;if(!n||!n.stickers)return;const r=g(t);return n.stickers.find((e=>e.emoji===t||e.emoji===r))}function y(e,t){const{animatedEmojiEffects:n}=e;if(!n||!n.stickers)return;const r=g(t);return n.stickers.find((e=>e.emoji===t||e.emoji===r))}function b(e,t){var n;return null==e||null===(n=e.appConfig)||void 0===n?void 0:n.emojiSounds[g(t)]}function I(e,t){const n=g(t);return"🍑"===n?"Peach":"🍆"===n?"Eggplant":void 0}function w(e){return"Eggplant"===e?"Cumshot":void 0}function C(e){return"Cumshot"===e?"🍆":void 0}var S=n(2267),E=n(735);function P(e){const{messageLists:t}=e.messages;if(t.length)return t[t.length-1]}function M(e){const{chatId:t}=P(e)||{};return t?(0,u.Z1)(e,t):void 0}function A(e,t){var n;return null===(n=e.messages.byChatId[t])||void 0===n?void 0:n.byId}function k(e,t){var n;return null===(n=e.scheduledMessages.byChatId[t])||void 0===n?void 0:n.byId}function T(e,t,n,r){const o=e.messages.byChatId[t];if(!o)return;const d=o.threadsById[n];return d?d[r]:void 0}function N(e,t,n){return T(e,t,n,"listedIds")}function L(e,t,n){return T(e,t,n,"outlyingIds")}function R(e,t,n,r){switch(r){case"thread":return x(e,t,n);case"pinned":return B(e,t);case"scheduled":return O(e,t)}}function x(e,t,n){return T(e,t,n,"viewportIds")}function B(e,t){return T(e,t,d._f,"pinnedIds")}function O(e,t){return T(e,t,d._f,"scheduledIds")}function Z(e,t,n){return T(e,t,n,"scrollOffset")}function F(e,t,n){return T(e,t,n,"replyingToId")}function D(e,t,n){return T(e,t,n,"editingId")}function _(e,t){return T(e,t,d._f,"editingScheduledId")}function $(e,t,n){return T(e,t,n,"draft")}function U(e,t,n){return T(e,t,n,"noWebPage")}function j(e,t,n){return T(e,t,n,"threadInfo")}function V(e,t,n){return T(e,t,n,"firstMessageId")}function W(e,t,n){return T(e,t,n,"replyStack")}function G(e,t,n){if(n===d._f)return(0,u.Z1)(e,t);const r=j(e,t,n);return r?(0,u.Z1)(e,r.originChannelId||t):void 0}function H(e,t,n){if(n===d._f)return;const r=j(e,t,n);return r?r.topMessageId:void 0}function z(e,t,n){const r=e.messages.byChatId[t];if(!r)return;const{replyToMessageId:o,replyToTopMessageId:d}=n;return o||d?Object.values(r.threadsById).find((e=>e.threadInfo&&(o&&o===e.threadInfo.topMessageId||d&&d===e.threadInfo.topMessageId))):void 0}function Q(e,t,n){const r=P(e);if(!r)return!1;const{threadInfo:o}=z(e,t,n)||{};return t===r.chatId&&(r.threadId===d._f||o&&r.threadId===o.threadId)}function K(e,t,n){const r=x(e,t,n);if(!r||!r.length)return!0;let o;if(n===d._f){const n=(0,u.Z1)(e,t);if(!n||!n.lastMessage)return!0;o=n.lastMessage.id}else{const r=j(e,t,n);if(!r||!r.lastMessageId)return;o=r.lastMessageId}return o>=a.AE&&!J(e,t,o)||r[r.length-1]>=o}function J(e,t,n){const r=A(e,t);return r?r[n]:void 0}function q(e,t,n){const r=k(e,t);return r?r[n]:void 0}function Y(e,t,n,r){if("scheduled"===r){const n=_(e,t);return n?q(e,t,n):void 0}{const r=D(e,t,n);return r?J(e,t,r):void 0}}function X(e,t){let n;for(const r of Object.values(e.messages.byChatId)){const{byId:e}=r;if(n=Object.values(e).find((e=>e.content.poll&&e.content.poll.id===t)),n)break}return n}function ee(e,t){const{chatId:n,messageId:r}=e.focusedMessage||{};return n===t?r:void 0}function te(e,t){const n=ee(e,t.chatId);return!!n&&(n===t.id||n===t.previousLocalId)}function ne(e,t){const{lastReadOutboxMessageId:n}=(0,u.Z1)(e,t.chatId)||{};return(0,i.CI)(t)||!n||n2&&void 0!==arguments[2]&&arguments[2];return ne(e,t)||n?(0,i.RI)(t):"read"}function oe(e,t){const{senderId:n}=t;if(n)return(0,i.YC)(n)?(0,s.dy)(e,n):(0,u.Z1)(e,n)}function de(e,t){const{forwardInfo:n}=t;if(n)return n.isChannelPost&&n.fromChatId?(0,u.Z1)(e,n.fromChatId):n.senderUserId?(0,s.dy)(e,n.senderUserId)||(0,u.Z1)(e,n.senderUserId):void 0}function ae(e,t,n){var r,o,d,a;const s=(0,u.Z1)(e,t.chatId);if(!s||s.isRestricted)return{};const c=(0,i.YC)(s.id),l=(0,u.FM)(e,t.chatId),f=(0,i.G9)(s),h=(0,i.ZV)(s),m=(0,i.eA)(s),p=(0,i.CI)(t),g=(0,i.jM)(t),v=(0,i.B4)(t),y=(0,i.Lo)(t),{content:b}=t,I=(l||h&&(0,i.VE)(s,"pinMessages")||m&&(0,i.VE)(s,"editMessages")||(0,S.b)(e.serverTimeOffset)-t.date<172800)&&!(b.sticker||b.contact||b.poll||b.action||b.audio||null!==(r=b.video)&&void 0!==r&&r.isRound)&&!(0,i.MF)(t)&&!t.viaBotId,w=!p&&!g&&(0,i.Qm)(s,n),C=c||s.isCreator||!m&&!(0,i.Mg)(s,"pinMessages")||(0,i.VE)(s,"pinMessages");let E=!p&&!g&&!y&&C,P=!1;const M=B(e,s.id);E&&(P=Boolean(M&&M.includes(t.id)),E=!P);const A=!p&&!g&&(c||v||f||s.isCreator||(0,i.VE)(s,"deleteMessages")),k=!c&&!v,T=A&&(c&&!l||f&&(v||(0,i.VE)(s,"deleteMessages")||s.isCreator)),N=!p&&!y&&I&&(v||m&&(s.isCreator||(0,i.VE)(s,"editMessages"))),L=!p&&!y,R=Boolean(t.content.sticker),x=R&&function(e,t){const{stickers:n}=e.stickers.favorite;return n&&n.some((e=>{let{id:n}=e;return n===t.id}))}(e,t.content.sticker),O=!y&&R&&!x,Z=!y&&x,F=!y,D=!y&&(m||h),_=!y,$=Boolean((null===(o=b.webPage)||void 0===o?void 0:o.document)||(null===(d=b.webPage)||void 0===d?void 0:d.video)||(null===(a=b.webPage)||void 0===a?void 0:a.photo)||b.audio||b.voice||b.photo||b.video||b.document||b.sticker);return{noOptions:[w,N,E,P,k,A,T,L,O,Z,F,D,_,$].every((e=>!e)),canReply:w,canEdit:N,canPin:E,canUnpin:P,canReport:k,canDelete:A,canDeleteForAll:T,canForward:L,canFaveSticker:O,canUnfaveSticker:Z,canCopy:F,canCopyLink:D,canSelect:_,canDownload:$}}function ue(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=P(e)||{},o=n&&A(e,n);if(!o||!t||!r)return{};const d=t.map((t=>o[t]&&ae(e,o[t],r))).filter(Boolean);return{canDelete:d.every((e=>e.canDelete)),canDeleteForAll:d.every((e=>e.canDeleteForAll))}}function se(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=P(e)||{},o=n&&A(e,n);return!!(o&&t&&r)&&t.map((t=>o[t]&&ae(e,o[t],r))).filter(Boolean).every((e=>e.canReport))}function ie(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=P(e)||{},o=n&&A(e,n);return!!(o&&t&&r)&&t.map((t=>o[t]&&ae(e,o[t],r))).filter(Boolean).some((e=>e.canDownload))}function ce(e,t){const n=e.activeDownloads.byChatId[t.chatId];return!!n&&n.includes(t.id)}function le(e,t){return e.activeDownloads.byChatId[t]||E.D}function fe(e,t){var n;return null===(n=e.fileUploads.byMessageLocalId[t.previousLocalId||t.id])||void 0===n?void 0:n.progress}function he(e,t,n){if(n===d._f){const n=(0,u.Z1)(e,t);if(!n)return;if(!n.lastReadInboxMessageId)return;return n.lastMessage?(0,i.CI)(n.lastMessage)?n.lastMessage.id:Math.min(n.lastMessage.id,n.lastReadInboxMessageId):n.lastReadInboxMessageId}{const r=j(e,t,n);if(!r)return;return r.lastReadInboxMessageId?Math.min(r.lastReadInboxMessageId,r.lastMessageId||1/0):r.topMessageId}}function me(e,t,n){const r=(0,u.Z1)(e,t);if(n===d._f){if(!r)return}else{const r=j(e,t,n);if(!r||void 0!==r.lastMessageId&&r.lastMessageId===r.lastReadInboxMessageId)return}const o=L(e,t,n),s=N(e,t,n),i=A(e,t);if(!i||!o&&!s)return;const c=he(e,t,n);if(!c&&r&&r.isNotJoined)return;const l=t===a.aw?e.serviceNotifications.reduce(((e,t)=>!t.isUnread&&t.id>e?t.id:e),-1):-1;function f(e){return e.find((e=>(!c||e>c)&&i[e]&&(!i[e].isOutgoing||i[e].isFromScheduled)&&e>l))}if(o){const e=f(o);if(e)return e}if(s){const e=f(s);if(e)return e}}function pe(e){const{forwardMessages:t}=e;return Boolean(t.isModalShown)}function ge(e,t){const n=Object.values(e.chats.byId).find((e=>(0,i.Ru)(e)&&e.lastMessage&&e.lastMessage.id===t));if(n)return n.id;const{byChatId:r}=e.messages;return Object.keys(r).find((n=>{const o=(0,u.Z1)(e,n);return o&&(0,i.Ru)(o)&&r[o.id].byId[t]}))}function ve(e){const{selectedMessages:t}=e;return Boolean(t)}function ye(e,t){const{messageIds:n}=e.selectedMessages||{};return!!n&&n.includes(t)}function be(e,t,n){const r=A(e,t);if(r)return Object.values(r).filter((e=>e.groupedId===n&&e.forwardInfo)).map((e=>{let{forwardInfo:t}=e;return t.fromMessageId}))}function Ie(e,t,n){const r=A(e,t);if(r)return Object.keys(r).map(Number).filter((e=>r[e].groupedId===n))}function we(e,t,n){const{messageIds:r}=e.selectedMessages||{};if(!r)return!1;const o=Ie(e,t,n);return o&&o.every((e=>r.includes(e)))}function Ce(e){const{messageIds:t}=e.selectedMessages||{};return t?t.length:0}function Se(e,t){const n=(0,u.Z1)(e,t);if(!n)return;if(!(0,u.xo)(e,n))return;const r=A(e,t),o=x(e,t,d._f);if(!r||!o)return;const a=(0,c.dF)(o,(e=>!r[e].isOutgoing&&Boolean(r[e].keyboardButtons))),s=(0,c.dF)(o,(e=>Boolean(r[e].shouldHideKeyboardButtons)));return a&&s&&s>a?void 0:a?r[a]:void 0}function Ee(e,t){const n=(0,u.Z1)(e,t.chatId);if(!n)return;const r=oe(e,t),o=Boolean((0,i.O$)(t)||(0,i.F$)(t)),d=Boolean((0,i.b7)(t)||(0,i.Cg)(t)),a=Boolean((0,i.oP)(t)||(0,i.kd)(t)||(0,i.aE)(t)),{canAutoLoadPhotoFromContacts:s,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:l,canAutoLoadPhotoInChannels:f,canAutoLoadVideoFromContacts:h,canAutoLoadVideoInPrivateChats:m,canAutoLoadVideoInGroups:p,canAutoLoadVideoInChannels:g,canAutoLoadFileFromContacts:v,canAutoLoadFileInPrivateChats:y,canAutoLoadFileInGroups:b,canAutoLoadFileInChannels:I}=e.settings.byKey;return o?Pe({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:s,canAutoLoadMediaInPrivateChats:c,canAutoLoadMediaInGroups:l,canAutoLoadMediaInChannels:f}):d?Pe({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:h,canAutoLoadMediaInPrivateChats:m,canAutoLoadMediaInGroups:p,canAutoLoadMediaInChannels:g}):!a||Pe({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:v,canAutoLoadMediaInPrivateChats:y,canAutoLoadMediaInGroups:b,canAutoLoadMediaInChannels:I})}function Pe(e){let{global:t,chat:n,sender:r,canAutoLoadMediaFromContacts:o,canAutoLoadMediaInPrivateChats:d,canAutoLoadMediaInGroups:a,canAutoLoadMediaInChannels:u}=e;const c=Boolean(r&&(r.id===t.currentUserId||(0,s.nM)(t,r)));return Boolean(c&&o||!c&&d&&(0,i.YC)(n.id)||a&&(0,i.Bf)(n)||u&&(0,i.eA)(n))}function Me(e,t){const n=(0,i.b7)(t)||(0,i.Cg)(t);if(!n)return;const{canAutoPlayVideos:r,canAutoPlayGifs:o}=e.settings.byKey,d=n.isGif||n.isRound;return r&&!d||o&&d}function Ae(e){return e.settings.byKey.shouldLoopStickers}function ke(e){const{serviceNotifications:t}=e,n=Math.max(...t.map((e=>{let{id:t}=e;return t})));return t.find((e=>{let{id:t}=e;return t===n}))}function Te(e,t){var n;return!!t&&(t.isProtected||(null===(n=(0,u.Z1)(e,t.chatId))||void 0===n?void 0:n.isProtected))}function Ne(e,t,n){var r;if(null!==(r=(0,u.Z1)(e,t))&&void 0!==r&&r.isProtected)return!0;if(!n)return!1;const o=A(e,t);return n.some((e=>{var t;return null===(t=o[e])||void 0===t?void 0:t.isProtected}))}function Le(e,t){const n=(0,u.Z1)(e,t),r=n&&(0,i.eA)(n)?e.messages.sponsoredByChatId[t]:void 0;return r&&r.expiresAt>=Math.round(Date.now()/1e3)?r:void 0}function Re(e,t){var n,r,o;if(t===a.aw)return;const d=(0,i.YC)(t),s=null===(n=e.appConfig)||void 0===n?void 0:n.defaultReaction,{availableReactions:c}=e;if(!s||null==c||!c.some((e=>e.reaction===s&&!e.isInactive)))return;if(d)return s;const l=null===(r=(0,u.Z1)(e,t))||void 0===r||null===(o=r.fullInfo)||void 0===o?void 0:o.enabledReactions;return null!=l&&l.includes(s)?s:void 0}function xe(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;const r=T(e,t,n,"viewportIds");return r?r.map((n=>{const{senderId:r}=J(e,t,n)||{};return r?(0,s.dy)(e,r):void 0})).filter(Boolean):void 0}function Be(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;const r=(0,i.uw)(t,n),o=e.localTextSearch.byChatThreadKey[r];return o&&o.isActive?o:void 0}function Oe(e){const{chatId:t}=P(e)||{};if(t)return e.localMediaSearch.byChatId[t]}function Ze(e,t){return e.management.byChatId[t]}function Fe(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;if((0,i.YC)(t))return"user";const r=(0,u.Z1)(e,t);return r?(0,i.Bf)(r)?"group":"channel":void 0}function De(e){const{mediaViewer:t}=e;return Boolean(t.messageId||t.avatarOwnerId)}function _e(e){return function(e){const{pollResults:t}=e;return Boolean(t.messageId)}(e)?r.qt.PollResults:!o.wB&&Be(e)?r.qt.Search:function(e){const{chatId:t,threadId:n}=P(e)||{};if(!t||!n)return;const r=e.management.byChatId[t];return r&&r.isActive?r:void 0}(e)?r.qt.Management:void 0!==l(e).query?r.qt.StickerSearch:void 0!==f(e).query?r.qt.GifSearch:e.newChatMembersProgress!==r.WB.Closed?r.qt.AddingMembers:e.isChatInfoShown&&P(e)?r.qt.ChatInfo:void 0}function $e(e){return void 0!==_e(e)}function Ue(e){const{theme:t,shouldUseSystemTheme:n}=e.settings.byKey;return n?(0,o.vn)():t}function je(e){return e.globalSearch.query}function Ve(e){return e.payment.chatId}function We(e){return e.payment.messageId}function Ge(e){return e.payment.formId}function He(e){return e.payment.requestId}function ze(e){return e.payment.nativeParams?e.payment.nativeParams.publishableKey:void 0}function Qe(e){return e.payment.stripeCredentials}function Ke(e){return e.settings.byKey}function Je(e){return e.settings.notifyExceptions}},6376:(e,t,n)=>{function r(e,t){return e.users.byId[t]}function o(e,t){return e.users.statusesById[t]}function d(e,t){var n;const o=r(e,t);return null==o||null===(n=o.fullInfo)||void 0===n?void 0:n.isBlocked}function a(e,t){return e.contactList&&e.contactList.userIds.includes(t.id)}n.d(t,{dy:()=>r,ss:()=>o,s4:()=>d,nM:()=>a})},1713:(e,t,n)=>{let r,o,d,a,u,s,i,c,l,f,h,m,p,g;n.d(t,{Uq:()=>r,fo:()=>o,MT:()=>d,du:()=>a,nJ:()=>u,qt:()=>s,bZ:()=>i,Cr:()=>c,Nh:()=>l,rN:()=>f,wv:()=>h,WB:()=>m,vi:()=>p,KB:()=>g,mp:()=>v,u1:()=>y}),function(e){e[e.Backwards=0]="Backwards",e[e.Forwards=1]="Forwards",e[e.Around=2]="Around"}(r||(r={})),function(e){e[e.Up=0]="Up",e[e.Down=1]="Down",e[e.Static=2]="Static"}(o||(o={})),function(e){e[e.Main=0]="Main",e[e.EditProfile=1]="EditProfile",e[e.Notifications=2]="Notifications",e[e.DataStorage=3]="DataStorage",e[e.Language=4]="Language",e[e.General=5]="General",e[e.GeneralChatBackground=6]="GeneralChatBackground",e[e.GeneralChatBackgroundColor=7]="GeneralChatBackgroundColor",e[e.Privacy=8]="Privacy",e[e.PrivacyPhoneNumber=9]="PrivacyPhoneNumber",e[e.PrivacyLastSeen=10]="PrivacyLastSeen",e[e.PrivacyProfilePhoto=11]="PrivacyProfilePhoto",e[e.PrivacyForwarding=12]="PrivacyForwarding",e[e.PrivacyGroupChats=13]="PrivacyGroupChats",e[e.PrivacyPhoneNumberAllowedContacts=14]="PrivacyPhoneNumberAllowedContacts",e[e.PrivacyPhoneNumberDeniedContacts=15]="PrivacyPhoneNumberDeniedContacts",e[e.PrivacyLastSeenAllowedContacts=16]="PrivacyLastSeenAllowedContacts",e[e.PrivacyLastSeenDeniedContacts=17]="PrivacyLastSeenDeniedContacts",e[e.PrivacyProfilePhotoAllowedContacts=18]="PrivacyProfilePhotoAllowedContacts",e[e.PrivacyProfilePhotoDeniedContacts=19]="PrivacyProfilePhotoDeniedContacts",e[e.PrivacyForwardingAllowedContacts=20]="PrivacyForwardingAllowedContacts",e[e.PrivacyForwardingDeniedContacts=21]="PrivacyForwardingDeniedContacts",e[e.PrivacyGroupChatsAllowedContacts=22]="PrivacyGroupChatsAllowedContacts",e[e.PrivacyGroupChatsDeniedContacts=23]="PrivacyGroupChatsDeniedContacts",e[e.PrivacyActiveSessions=24]="PrivacyActiveSessions",e[e.PrivacyBlockedUsers=25]="PrivacyBlockedUsers",e[e.Folders=26]="Folders",e[e.FoldersCreateFolder=27]="FoldersCreateFolder",e[e.FoldersEditFolder=28]="FoldersEditFolder",e[e.FoldersEditFolderFromChatList=29]="FoldersEditFolderFromChatList",e[e.FoldersIncludedChats=30]="FoldersIncludedChats",e[e.FoldersIncludedChatsFromChatList=31]="FoldersIncludedChatsFromChatList",e[e.FoldersExcludedChats=32]="FoldersExcludedChats",e[e.FoldersExcludedChatsFromChatList=33]="FoldersExcludedChatsFromChatList",e[e.TwoFaDisabled=34]="TwoFaDisabled",e[e.TwoFaNewPassword=35]="TwoFaNewPassword",e[e.TwoFaNewPasswordConfirm=36]="TwoFaNewPasswordConfirm",e[e.TwoFaNewPasswordHint=37]="TwoFaNewPasswordHint",e[e.TwoFaNewPasswordEmail=38]="TwoFaNewPasswordEmail",e[e.TwoFaNewPasswordEmailCode=39]="TwoFaNewPasswordEmailCode",e[e.TwoFaEnabled=40]="TwoFaEnabled",e[e.TwoFaChangePasswordCurrent=41]="TwoFaChangePasswordCurrent",e[e.TwoFaChangePasswordNew=42]="TwoFaChangePasswordNew",e[e.TwoFaChangePasswordConfirm=43]="TwoFaChangePasswordConfirm",e[e.TwoFaChangePasswordHint=44]="TwoFaChangePasswordHint",e[e.TwoFaTurnOff=45]="TwoFaTurnOff",e[e.TwoFaRecoveryEmailCurrentPassword=46]="TwoFaRecoveryEmailCurrentPassword",e[e.TwoFaRecoveryEmail=47]="TwoFaRecoveryEmail",e[e.TwoFaRecoveryEmailCode=48]="TwoFaRecoveryEmailCode",e[e.TwoFaCongratulations=49]="TwoFaCongratulations",e[e.QuickReaction=50]="QuickReaction"}(d||(d={})),function(e){e[e.ChatList=0]="ChatList",e[e.GlobalSearch=1]="GlobalSearch",e[e.Settings=2]="Settings",e[e.Contacts=3]="Contacts",e[e.Archived=4]="Archived",e[e.NewChannelStep1=5]="NewChannelStep1",e[e.NewChannelStep2=6]="NewChannelStep2",e[e.NewGroupStep1=7]="NewGroupStep1",e[e.NewGroupStep2=8]="NewGroupStep2"}(a||(a={})),function(e){e[e.ChatList=0]="ChatList",e[e.Media=1]="Media",e[e.Links=2]="Links",e[e.Files=3]="Files",e[e.Music=4]="Music",e[e.Voice=5]="Voice"}(u||(u={})),function(e){e[e.ChatInfo=0]="ChatInfo",e[e.Search=1]="Search",e[e.Management=2]="Management",e[e.StickerSearch=3]="StickerSearch",e[e.GifSearch=4]="GifSearch",e[e.PollResults=5]="PollResults",e[e.AddingMembers=6]="AddingMembers"}(s||(s={})),function(e){e[e.Inline=0]="Inline",e[e.ScheduledInline=1]="ScheduledInline",e[e.SharedMedia=2]="SharedMedia",e[e.ProfileAvatar=3]="ProfileAvatar",e[e.SettingsAvatar=4]="SettingsAvatar",e[e.MiddleHeaderAvatar=5]="MiddleHeaderAvatar",e[e.Album=6]="Album",e[e.ScheduledAlbum=7]="ScheduledAlbum",e[e.SearchResult=8]="SearchResult"}(i||(i={})),function(e){e[e.Inline=0]="Inline",e[e.SharedMedia=1]="SharedMedia",e[e.Search=2]="Search"}(c||(c={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(l||(l={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(f||(f={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(h||(h={})),function(e){e[e.Closed=0]="Closed",e[e.InProgress=1]="InProgress",e[e.Loading=2]="Loading"}(m||(m={})),function(e){e[e.Profile=0]="Profile",e[e.SharedMedia=1]="SharedMedia",e[e.MemberList=2]="MemberList"}(p||(p={})),function(e){e[e.ShippingInfo=0]="ShippingInfo",e[e.Shipping=1]="Shipping",e[e.PaymentInfo=2]="PaymentInfo",e[e.Checkout=3]="Checkout"}(g||(g={}));const v="UPLOADING_WALLPAPER_SLUG";let y;!function(e){e[e.Initial=0]="Initial",e[e.ChatPrivacyType=1]="ChatPrivacyType",e[e.Discussion=2]="Discussion",e[e.ChannelSubscribers=3]="ChannelSubscribers",e[e.GroupType=4]="GroupType",e[e.GroupPermissions=5]="GroupPermissions",e[e.GroupRemovedUsers=6]="GroupRemovedUsers",e[e.GroupUserPermissionsCreate=7]="GroupUserPermissionsCreate",e[e.GroupUserPermissions=8]="GroupUserPermissions",e[e.ChatAdministrators=9]="ChatAdministrators",e[e.GroupRecentActions=10]="GroupRecentActions",e[e.ChatAdminRights=11]="ChatAdminRights",e[e.ChatNewAdminRights=12]="ChatNewAdminRights",e[e.GroupMembers=13]="GroupMembers",e[e.GroupAddAdmins=14]="GroupAddAdmins",e[e.Invites=15]="Invites",e[e.EditInvite=16]="EditInvite",e[e.Reactions=17]="Reactions",e[e.InviteInfo=18]="InviteInfo",e[e.JoinRequests=19]="JoinRequests"}(y||(y={}))},9933:(e,t,n)=>{n.d(t,{cK:()=>d,jt:()=>a,M8:()=>u,vr:()=>s});var r=n(9118);let o;function d(e,t){t||(o&&!o.isCancelled&&(o.isCancelled=!0),o=t={isCancelled:!1}),!t.isCancelled&&e()&&(0,r.T2)((()=>{d(e,t)}))}function a(e){e()&&(0,r.T2)((()=>{a(e)}))}const u={linear:e=>e,easeIn:e=>e**1.675,easeOut:e=>1-(1-e**1.675),easeInOut:e=>.5*(Math.sin((e-.5)*Math.PI)+1),easeInQuad:e=>e*e,easeOutQuad:e=>e*(2-e),easeInOutQuad:e=>e<.5?2*e*e:(4-2*e)*e-1,easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1- --e*e*e*e,easeInOutQuart:e=>e<.5?8*e*e*e*e:1-8*--e*e*e*e,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1+--e*e*e*e*e,easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e};function s(e){let{timing:t=u.linear,onUpdate:n,duration:r,onEnd:o,from:d,to:s}=e;const i=Date.now();let c=!1;return a((()=>{if(c)return!1;let e=(Date.now()-i)/r;e>1&&(e=1);const a=t(e);if("number"==typeof d&&"number"==typeof s)n(d+(s-d)*a);else if(Array.isArray(d)&&Array.isArray(s)){const e=d.map(((e,t)=>e+(s[t]-e)*a));n(e)}return 1===e&&o&&o(),e<1})),()=>{c=!0,o&&o()}}},7358:(e,t,n)=>{n.d(t,{w:()=>o});var r=n(3716);function o(e){"function"==typeof window.navigator.setAppBadge&&window.navigator.setAppBadge(e).catch((e=>{r.eM&&console.error(e)}))}},275:(e,t,n)=>{function r(e,t){if(e===t)return!0;const n=Object.keys(e),r=n.length;if(r!==Object.keys(t).length)return!1;if(0===r)return!0;for(let o=0;o(e[r]!==t[r]&&n.push(`${r}: ${e[r]} => ${t[r]}`),n)),[])}n.d(t,{Z:()=>r,c:()=>o})},6752:(e,t,n)=>{function r(){for(var e=arguments.length,t=new Array(e),n=0;n1?r-1:0),d=1;d(t&&(Array.isArray(t)?e.push(...t):e.push(`${n}--${t}`)),e)),[n]).join(" ")}}n.d(t,{Z:()=>r,y:()=>o})},9524:(e,t,n)=>{n.d(t,{Type:()=>o,fetch:()=>d,save:()=>a,clear:()=>u});const r=self.caches;let o;async function d(e,t,n){let d=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(r)try{const a=new Request(t.replace(/:/g,"_")),u=await r.open(e),s=await u.match(a);if(!s)return;const i=s.headers.get("Content-Type");switch(n){case o.Text:return await s.text();case o.Blob:{if(t.startsWith("avatar")&&i&&i.startsWith("text"))return;const e=await s.blob(),n=!e.type||!d&&e.type.includes("html");let r=e.type||i;return n&&r?(d||(r=r.replace(/html/gi,"")),new Blob([e],{type:r})):e}case o.Json:return await s.json();default:return}}catch(e){return void console.warn(e)}}async function a(e,t,n){if(r)try{const o="string"==typeof n||n instanceof Blob?n:JSON.stringify(n),d=new Request(t.replace(/:/g,"_")),a=new Response(o),u=await r.open(e);return await u.put(d,a)}catch(e){return void console.warn(e)}}async function u(e){try{if(!r)return;return await r.delete(e)}catch(e){return void console.warn(e)}}!function(e){e[e.Text=0]="Text",e[e.Blob=1]="Blob",e[e.Json=2]="Json"}(o||(o={}))},6063:(e,t,n)=>{function r(){const e=[];function t(t){const n=e.indexOf(t);-1!==n&&e.splice(n,1)}return{runCallbacks:function(){for(var t=arguments.length,n=new Array(t),r=0;r{e(...n)}))},addCallback:function(n){return e.push(n),()=>{t(n)}},removeCallback:t,hasCallbacks:function(){return Boolean(e.length)}}}n.d(t,{_:()=>r})},3989:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(517);function o(e){return(0,r.Z)({onEsc:e})}},517:(e,t,n)=>{n.d(t,{Z:()=>d});const r={Enter:"onEnter",Backspace:"onBackspace",Delete:"onDelete",Esc:"onEsc",Escape:"onEsc",ArrowUp:"onUp",ArrowDown:"onDown",ArrowLeft:"onLeft",ArrowRight:"onRight",Tab:"onTab"},o={onEnter:[],onDelete:[],onBackspace:[],onEsc:[],onUp:[],onDown:[],onLeft:[],onRight:[],onTab:[]};function d(e){return a()||document.addEventListener("keydown",u,!0),Object.keys(e).forEach((t=>{const n=e[t];if(!n)return;const r=o[t];r&&r.push(n)})),()=>{!function(e){Object.keys(e).forEach((t=>{const n=e[t],r=o[t];if(r){const e=r.findIndex((e=>e===n));-1!==e&&r.splice(e,1)}})),a()||document.removeEventListener("keydown",u,!1)}(e)}}function a(){return Object.values(o).some((e=>Boolean(e.length)))}function u(e){const t=r[e.key];if(!t)return;const{length:n}=o[t];n&&(e.stopPropagation(),(0,o[t][n-1])(e))}},790:(e,t,n)=>{n.d(t,{xR:()=>a,zk:()=>u,$Y:()=>s,_F:()=>i,kj:()=>c,mr:()=>f,VX:()=>h,Tu:()=>m,np:()=>p,D:()=>g,j1:()=>v,ZK:()=>b,k9:()=>I,rM:()=>w,xH:()=>C,SA:()=>S,xk:()=>P,IS:()=>M});const r=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o=["January","February","March","April","May","June","July","August","September","October","November","December"],d=o.map((e=>e.toLowerCase())),a=864e5;function u(e){return s(new Date)===s(e)}function s(e){const t=new Date(e);return t.setHours(0,0,0,0),t}function i(e){return s(e).getTime()}function c(e){const t=new Date(1e3*e);return`${t.getFullYear()}-${t.getMonth()}`}function l(e){return`${e.getFullYear()}-${e.getMonth()+1}-${e.getDate()}`}function f(e,t){const n="number"==typeof t?new Date(t):t,r=e.timeFormat||"24h";let o=n.getHours(),d="";return"12h"===r&&(d=o>=12?" PM":" AM",o=o>12?o%12:o),`${String(o).padStart(2,"0")}:${String(n.getMinutes()).padStart(2,"0")}${d}`}function h(e,t){const n="number"==typeof t?new Date(t):t,o=s(new Date);if(n>=o)return f(e,n);const d=new Date(o);if(d.setDate(o.getDate()-7),n>=d)return e(`Weekday.Short${r[n.getDay()]}`);const a=n.getFullYear()!==o.getFullYear(),u=e(a?"formatDateScheduleYear":"formatDateSchedule")||(a?"d MMM yyyy":"d MMM");return y(e,n,u)}function m(e,t){const n="number"==typeof t?new Date(t):t,r=e("formatterYearMax")||"dd.MM.yyyy";return y(e,n,r)}function p(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=e(n?"formatterMonthYear2":"formatterMonthYear")||"MMM yyyy";return y(e,t,r)}function g(e,t){const n=Math.floor(t/a);return t<0?0:n<1?I(t/1e3):n<7?e("Days",n):n<30?e("Weeks",Math.floor(n/7)):n<365?e("Months",Math.floor(n/30)):e("Years",Math.floor(n/365))}function v(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],d=arguments.length>4?arguments[4]:void 0;const a="number"==typeof t?new Date(t):t,u=s(new Date);if(!o){if(l(a)===l(u))return(d||!n?k:A)(e("Weekday.Today"));const t=new Date(u);if(t.setDate(u.getDate()-1),l(a)===l(t))return(d||!n?k:A)(e("Weekday.Yesterday"));const o=new Date(u),s=new Date(u);if(o.setDate(u.getDate()-7),s.setDate(u.getDate()+7),a>=o&&a<=s){const t=r[a.getDay()];return(d||!n?k:A)(e(n?`Weekday.Short${t}`:`Weekday.${t}`))}}const i=a.getFullYear()!==u.getFullYear(),c=n?i?"formatDateScheduleYear":"formatDateSchedule":i?"chatFullDate":"chatDate",f=e(c)||"d MMMM yyyy";return(d||!n?k:A)(y(e,a,f))}function y(e,t,n){const r=t.getDate(),d=t.getMonth();return n.replace("LLLL",e(o[d])).replace("MMMM",e(`Month.Gen${o[d]}`)).replace("MMM",e(`Month.Short${o[d]}`)).replace("MM",String(d+1).padStart(2,"0")).replace("dd",String(r).padStart(2,"0")).replace("d",String(r)).replace("yyyy",String(t.getFullYear())).replace(/'de'/g,"de")}function b(e,t,n){const r="number"==typeof t?new Date(t):t;return`${v(e,r,!0,void 0,n)}, ${f(e,r)}`}function I(e,t){const n=Math.floor(e/3600),r=Math.floor(e%3600/60),o=Math.floor(e%3600%60),d=t?Math.floor(t/3600):0,a=t?Math.floor(t%3600/60):0;let u="";return n>0||d>0?(u+=`${String(n).padStart(2,"0")}:`,u+=`${String(r).padStart(2,"0")}:`):u+=a>=10?`${String(r).padStart(2,"0")}:`:`${String(r)}:`,u+=String(o).padStart(2,"0"),u}function w(e){const t=[];let n=e%1e3;e-=n,n=Math.floor(n/10);const r=(e=Math.floor(e/1e3))%60;e-=r;const o=(e=Math.floor(e/60))%60;e-=o;const d=(e=Math.floor(e/60))%60;return d>0&&t.push(String(d).padStart(2,"0")),t.push(String(o).padStart(d>0?2:1,"0")),t.push(String(r).padStart(2,"0")),`${t.join(":")},${String(n).padStart(2,"0")}`}function C(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";const n="number"==typeof e?new Date(e):e;return n.toLocaleString(t,{year:"numeric",month:"short",day:"numeric"})}function S(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";const n="number"==typeof e?new Date(e):e;return n.toLocaleString(t,{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}function E(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2021;if(t>11||e>31)return!1;const r=new Date(n,t,e);return!Number.isNaN(r.getTime())&&r.getDate()===e}function P(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=e.match(/\d{1,2}\s[a-zA-Z]{3,}/),n=e.match(/[a-zA-Z]{3,}\s\d{1,2}/),r=e.match(/\d{1,2}[./-]\d{1,2}([./-]\d{2,4})?/);if(!t&&!r&&!n)return;if(r){const[t,n,r]=e.split(/[./-]/).map(Number);return r&&r<2015||!E(t,n-1,r||void 0)?void 0:`${r?`${r}-`:""}${String(n).padStart(2,"0")}-${String(t).padStart(2,"0")}`}const o=e.split(" "),a=t?o[0]:o[1],u=(t?o[1]:o[0]).toLowerCase(),s=d.findIndex((e=>e.startsWith(u)));return-1!==s&&E(Number(a),s)?`${String(s+1).padStart(2,"0")}-${String(a).padStart(2,"0")}`:void 0}function M(e){return e+a/1e3}function A(e){return`${e[0].toLowerCase()}${e.slice(1)}`}function k(e){return`${e[0].toUpperCase()}${e.slice(1)}`}},4284:(e,t,n)=>{n.d(t,{g6:()=>u,U_:()=>s,NM:()=>i,Wg:()=>c});var r=n(3681);const o=["female_sign","male_sign","medical_symbol"],d=[[/\u{1f3f3}\u200d\u{1f308}/gu,"🏳️‍🌈"],[/\u{1f3f3}\u200d\u26a7\ufe0f/gu,"🏳️‍⚧️"],[/\u{1f937}\u200d\u2642[^\ufe0f]/gu,"🤷‍♂️"]];function a(e){const t=e.split("-").map((e=>parseInt(e,16)));return String.fromCodePoint(...t)}function u(e){if(!e.match(r.Z))return e;for(const[t,n]of d)e=e.replace(t,n);return e}function s(e){let t;if(1===e.length)t=e.charCodeAt(0).toString(16).padStart(4,"0");else{const n=[];for(let t=0;t=55296&&e.charCodeAt(t)<=56319?e.charCodeAt(t+1)>=56320&&e.charCodeAt(t+1)<=57343&&n.push(1024*(e.charCodeAt(t)-55296)+(e.charCodeAt(t+1)-56320)+65536):(e.charCodeAt(t)<55296||e.charCodeAt(t)>57343)&&n.push(e.charCodeAt(t));t=n.map((e=>e.toString(16).padStart(4,"0"))).join("-")}return t}function i(e){const t={categories:[],emojis:{}};for(let n=0;ne.codePointAt(0)+127397));return String.fromCodePoint(...n)}},1396:(e,t,n)=>{function r(e){if(e)return e.includes("://")?e:`http://${e}`}n.d(t,{X:()=>r})},7361:(e,t,n)=>{n.d(t,{Bi:()=>k,cL:()=>x,wZ:()=>p,vX:()=>M,op:()=>C,cj:()=>m,jm:()=>h,pA:()=>L,m5:()=>P,I_:()=>E,fl:()=>v,t0:()=>A,s$:()=>g,i4:()=>O,Mc:()=>S,wB:()=>b,p7:()=>I,$b:()=>y,mh:()=>w,Hh:()=>R,s0:()=>T,aZ:()=>B,gZ:()=>Z,Lt:()=>f,vn:()=>i,on:()=>d});var r=n(3716);let o;function d(){return Boolean(o)}var a,u;new Promise((e=>{const t=new Image;t.src="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA";const n=()=>{e(2===t.height)};t.onload=n,t.onerror=n})).then((e=>{o=e}));let s=null!==(a=(u=window).matchMedia)&&void 0!==a&&a.call(u,"(prefers-color-scheme: dark)").matches?"dark":"light";function i(){return s}function c(e){s=e.matches?"dark":"light"}const l=window.matchMedia("(prefers-color-scheme: dark)");"function"==typeof l.addEventListener?l.addEventListener("change",c):"function"==typeof l.addListener&&l.addListener(c);const f=function(){const{userAgent:e,platform:t}=window.navigator;let n;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?n="macOS":-1!==["iPhone","iPad","iPod"].indexOf(t)?n="iOS":-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?n="Windows":/Android/.test(e)?n="Android":/Linux/.test(t)&&(n="Linux"),n}(),h="macOS"===f,m="iOS"===f,p="Android"===f,g=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),v=window.matchMedia("(display-mode: standalone)").matches||window.navigator.standalone||document.referrer.includes("android-app://"),y=window.matchMedia("(pointer: coarse)").matches,b=window.innerWidth<=r.l3||window.innerWidth<=r.u_&&window.innerHeight<=r.rO,I=!b&&window.innerWidth<=r.ks,w=Boolean(navigator.mediaDevices&&"getUserMedia"in navigator.mediaDevices&&(window.AudioContext||window.webkitAudioContext)),C=(document.documentElement.style,f&&(h||m)),S="serviceWorker"in navigator,E=S,P=(window,Boolean((new Audio).canPlayType("audio/ogg; codecs=opus"))),M=!r.Cg&&"filter"in(document.createElement("canvas").getContext("2d")||{}),A="requestFullscreen"in document.createElement("div"),k=!navigator.userAgent.includes("Firefox"),T=p?"slide-fade":m?"slide-layers":"push-slide",N=document.createElement("video"),L=!0;L&&r.wG.add(r.Ng);const R=Boolean(N.canPlayType('video/webm; codecs="vp9"').replace("no",""))&&!(h&&g),x=window.devicePixelRatio||1,B=!0,O=!h&&!m&&!p,Z=O?300:750},1394:(e,t,n)=>{n.d(t,{A9:()=>d,YJ:()=>a,hl:()=>u,pt:()=>s,jj:()=>i,ud:()=>c,gm:()=>l,dc:()=>f,ao:()=>h});var r=n(9118);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e){const t=e.split(","),n=t[0].match(/:(.*?);/)[1],r=atob(t[1]);let o=r.length;const d=new Uint8Array(o);for(;o--;)d[o]=r.charCodeAt(o);return new Blob([d],{type:n})}function a(e){return new Promise(((t,n)=>{const r=new FileReader;r.onload=e=>{const{result:r}=e.target||{};"string"==typeof r&&t(r),n(new Error("Failed to read blob"))},r.onerror=n,r.readAsDataURL(e)}))}function u(e,t){return new File([e],t,{lastModified:Date.now(),type:e.type})}function s(e){return new Promise(((t,n)=>{const r=new Image;r.onload=()=>t(r),r.onerror=n,r.src=e}))}function i(e){return new Promise(((t,n)=>{const r=document.createElement("video");r.volume=0,r.onloadedmetadata=()=>t(r),r.onerror=n,r.src=e}))}async function c(e){const t=await i(e);return Promise.race([(0,r.wO)(2e3),new Promise(((e,n)=>{t.onseeked=()=>{t.videoWidth&&t.videoHeight||e(void 0);const n=document.createElement("canvas");n.width=t.videoWidth,n.height=t.videoHeight,n.getContext("2d").drawImage(t,0,0),e(n.toDataURL("image/jpeg"))},t.onerror=n,t.currentTime=Math.min(t.duration,1)}))])}async function l(e){return(await fetch(e)).blob()}async function f(e,t){return u(await l(e),t)}function h(e){const t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t}"undefined"==typeof File&&(self.File=class extends Blob{constructor(e,t,n){if(n){const{type:t,...r}=n;super(e,{type:t}),o(this,"name",void 0),Object.assign(this,r)}else super(e),o(this,"name",void 0);this.name=t}})},6974:(e,t,n)=>{n.d(t,{S1:()=>y,gO:()=>b,aE:()=>I,Yz:()=>w,wC:()=>C,xW:()=>S,M2:()=>E,r_:()=>P,O6:()=>M});var r=n(5116),o=n(3716),d=n(9066),a=n(8415),u=n(9118),s=n(782),i=n(275),c=n(6063);const l=L();let f=l.prevGlobal,h=l.prepared,m=l.results,p=l.callbacks;const g=(0,u.P2)((()=>{(0,u.Q8)((()=>{A((0,r.Rd)())}))}),500);let v=!1;function y(){v=!0,(0,r.ll)(g),(0,r.Q6)("reset",R),A((0,r.Rd)())}function b(e){return v||y(),m.orderedIdsByFolderId[e]}function I(e){return v||y(),m.pinnedCountByFolderId[e]||0}function w(){return v||y(),m.chatsCountByFolderId}function C(){return v||y(),m.unreadCountersByFolderId}function S(){var e;return(null===(e=C()[o.Nf])||void 0===e?void 0:e.notificationsCount)||0}function E(e,t){return p.orderedIdsByFolderId[e]||(p.orderedIdsByFolderId[e]=(0,c._)()),p.orderedIdsByFolderId[e].addCallback(t)}function P(e){return p.chatsCountByFolderId.addCallback(e)}function M(e){return p.unreadCountersByFolderId.addCallback(e)}function A(e){let t;o.eM&&(t=performance.now());const n=Boolean(e.chats.listIds.active&&k(o.Nf,e.chats.listIds.active,e.chats.orderedPinnedIds.active)),r=Boolean(e.chats.listIds.archived&&k(o.WS,e.chats.listIds.archived,e.chats.orderedPinnedIds.archived)),u=e.chats.isFullyLoaded.active!==f.isAllFolderFullyLoaded,c=e.chats.isFullyLoaded.archived!==f.isArchivedFolderFullyLoaded,l=e.chatFolders.byId!==f.foldersById,p=e.chats.byId!==f.chatsById,g=e.users.byId!==f.usersById,v=(0,d.dZ)(e)!==f.notifySettings,y=(0,d.NJ)(e)!==f.notifyExceptions;let b=[];if((u||c)&&(b=b.concat(function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[];t&&n.push(o.WS);const r=e.chats.isFullyLoaded.active,d=e.chats.isFullyLoaded.archived;if(r&&d){const e=Object.keys(h.folderSummariesById).filter((e=>!m.orderedIdsByFolderId[e])).map(Number);n=n.concat(e)}return f.isAllFolderFullyLoaded=r,f.isArchivedFolderFullyLoaded=d,n}(e,c))),!(n||r||l||p||g||v||y))return void(b.length&&N(b));const I=f.allFolderListIds,w=f.archivedFolderListIds;if(function(e,t,n,r){const d=[];if(t){const t=e.chats.listIds.active,n=e.chats.orderedPinnedIds.active;h.folderSummariesById[o.Nf]=T(o.Nf,t,n),f.allFolderListIds=t,f.allFolderPinnedIds=n,d.push(o.Nf)}if(n){const t=e.chats.listIds.archived,n=e.chats.orderedPinnedIds.archived;h.folderSummariesById[o.WS]=T(o.WS,t,n),f.archivedFolderListIds=t,f.archivedFolderPinnedIds=n,d.push(o.WS)}if(r){const t=e.chatFolders.byId;Object.values(t).forEach((e=>{e!==f.foldersById[e.id]&&(h.folderSummariesById[e.id]=function(e){return{...e,orderedPinnedIds:e.pinnedChatIds,excludedChatIds:e.excludedChatIds?new Set(e.excludedChatIds):void 0,includedChatIds:e.excludedChatIds?new Set(e.includedChatIds):void 0,pinnedChatIds:e.excludedChatIds?new Set(e.pinnedChatIds):void 0}}(e),d.push(e.id))})),f.foldersById=t}}(e,n,r,l),b=b.concat(function(e,t,n,r,u,c){const l=e.chats.byId,p=e.users.byId,g=(0,d.dZ)(e),v=(0,d.NJ)(e),y=Object.values(h.folderSummariesById),b=new Set,I=e.chats.listIds.active,w=e.chats.listIds.archived;let C=[...I||[],...w||[]];return I===u&&w===c||(C=(0,s.Tw)(C.concat(u||[],c||[]))),C.forEach((e=>{const d=l[e];if(!t&&!n&&!r&&d===f.chatsById[e]&&p[e]===f.usersById[e])return;let u;if(d){const n=h.chatSummariesById.get(e),r=function(e,t,n,r){const{id:d,type:u,lastMessage:s,isRestricted:i,isNotJoined:c,folderId:l,unreadCount:f,unreadMentionsCount:h,hasUnreadMark:m,joinDate:p,draftDate:g}=e,v="chatTypePrivate"===u&&r;return{id:d,type:u,isListed:Boolean(s&&!i&&!c),isArchived:l===o.WS,isMuted:(0,a.i4)(e,t,n),isUnread:Boolean(f||h||m),unreadCount:f,unreadMentionsCount:h,order:Math.max(p||0,g||0,(null==s?void 0:s.date)||0),isUserBot:v?"userTypeBot"===v.type:void 0,isUserContact:v?v.isContact:void 0}}(d,g,v,p[e]);if(!t&&n&&(0,i.Z)(r,n))return;h.chatSummariesById.set(e,r),u=function(e,t){return t.reduce(((t,n)=>(function(e,t){var n,r,d;if(!e.isListed)return!1;const{id:a,type:u}=e;if(t.listIds)return!(e.isArchived&&t.id===o.Nf||!e.isArchived&&t.id===o.WS)&&t.listIds.has(a);if(null!==(n=t.excludedChatIds)&&void 0!==n&&n.has(a))return!1;if(null!==(r=t.includedChatIds)&&void 0!==r&&r.has(a))return!0;if(null!==(d=t.pinnedChatIds)&&void 0!==d&&d.has(a))return!0;if(t.excludeArchived&&e.isArchived)return!1;if(t.excludeRead&&!e.isUnread)return!1;if(t.excludeMuted&&e.isMuted&&!e.unreadMentionsCount)return!1;if("chatTypePrivate"===u)if(e.isUserBot){if(t.bots)return!0}else{if(t.contacts&&e.isUserContact)return!0;if(t.nonContacts&&!e.isUserContact)return!0}else{if("chatTypeChannel"===u)return Boolean(t.channels);if("chatTypeBasicGroup"===u||"chatTypeSuperGroup"===u)return Boolean(t.groups)}return!1}(e,n)&&t.push(n.id),t)),[]).sort()}(r,y),u.forEach((e=>{b.add(e)}))}else h.chatSummariesById.delete(e),u=[];const c=h.folderIdsByChatId[e]||[];if((0,s.et)(u,c))return;const I=function(e,t,n){const r=new Set(t),o=new Set(n),d=[];return(0,s.Tw)([...t,...n]).forEach((t=>{let n=m.orderedIdsByFolderId[t];r.has(t)&&!o.has(t)?(h.chatIdsByFolderId[t].delete(e),d.push(t),n&&(n=n.filter((t=>t!==e)),h.isOrderedListJustPatched[t]=!0)):!r.has(t)&&o.has(t)&&(h.chatIdsByFolderId[t]||(h.chatIdsByFolderId[t]=new Set),h.chatIdsByFolderId[t].add(e),n&&(n.push(e),h.isOrderedListJustPatched[t]=!0)),m.orderedIdsByFolderId[t]=n})),h.folderIdsByChatId[e]=n,d}(e,c,u);I.forEach((e=>{b.add(e)}))})),f.chatsById=l,f.usersById=p,f.notifySettings=g,f.notifyExceptions=v,Array.from(b)}(e,l||n||r,v,y,I,w)),N((0,s.Tw)(b)),o.eM){const e=performance.now()-t;e>6&&console.warn(`Slow \`updateFolderManager\`: ${Math.round(e)} ms`)}}function k(e,t,n){const r=e===o.Nf?f.allFolderListIds:f.archivedFolderListIds,d=e===o.Nf?f.allFolderPinnedIds:f.archivedFolderPinnedIds;return r!==t||d!==n}function T(e,t,n){return{id:e,listIds:new Set(t),orderedPinnedIds:n,pinnedChatIds:new Set(n)}}function N(e){let t=!1,n=!1;if(Array.from(e).forEach((e=>{const{pinnedCount:r,orderedIds:o}=function(e){const t=h.folderSummariesById[e];if(!t)return{};const{orderedPinnedIds:n,pinnedChatIds:r}=t,{chatSummariesById:o,chatIdsByFolderId:{[e]:d}}=h,{orderedIdsByFolderId:{[e]:a}}=m,u=d?null==n?void 0:n.filter((e=>d.has(e))):n,s=a||d&&Array.from(d)||[],i=(r?s.filter((e=>!r.has(e))):s).sort(((e,t)=>o.get(t).order-o.get(e).order));return{pinnedCount:(null==u?void 0:u.length)||0,orderedIds:[...u||[],...i]}}(e);if(!o)return;const d=m.orderedIdsByFolderId[e],a=m.pinnedCountByFolderId[e];var u;d&&void 0!==a&&a===r&&!h.isOrderedListJustPatched[e]&&(0,s.et)(o,d)||(h.isOrderedListJustPatched[e]=!1,m.orderedIdsByFolderId[e]=o,m.pinnedCountByFolderId[e]=r,null===(u=p.orderedIdsByFolderId[e])||void 0===u||u.runCallbacks(o));const c=m.chatsCountByFolderId[e],l=o.length;n||(n=c!==l),m.chatsCountByFolderId[e]=l;const f=m.unreadCountersByFolderId[e],g=function(e){const{chatSummariesById:t}=h,{orderedIdsByFolderId:{[e]:n}}=m;return n.reduce(((e,n)=>{const r=t.get(n);return r?(r.isUnread&&(e.chatsCount++,r.unreadMentionsCount&&(e.notificationsCount+=r.unreadMentionsCount),r.isMuted||(r.unreadCount?e.notificationsCount+=r.unreadCount:r.unreadMentionsCount||(e.notificationsCount+=1))),e):e}),{chatsCount:0,notificationsCount:0})}(e);t||(t=!f||!(0,i.Z)(g,f)),m.unreadCountersByFolderId[e]=g})),n){const e={...m.chatsCountByFolderId};m.chatsCountByFolderId=e,p.chatsCountByFolderId.runCallbacks(e)}if(t){const e={...m.unreadCountersByFolderId};m.unreadCountersByFolderId=e,p.unreadCountersByFolderId.runCallbacks(e)}}function L(){return{prevGlobal:{foldersById:{},chatsById:{},usersById:{},notifySettings:{},notifyExceptions:{}},prepared:{folderSummariesById:{},chatSummariesById:new Map,folderIdsByChatId:{},chatIdsByFolderId:{},isOrderedListJustPatched:{}},results:{orderedIdsByFolderId:{},pinnedCountByFolderId:{},chatsCountByFolderId:{},unreadCountersByFolderId:{}},callbacks:{orderedIdsByFolderId:{},chatsCountByFolderId:(0,c._)(),unreadCountersByFolderId:(0,c._)()}}}function R(){const e=L();f=e.prevGlobal,h=e.prepared,m=e.results,p=e.callbacks}},9937:(e,t,n)=>{function r(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en";return new Intl.NumberFormat(n,{style:"currency",currency:t}).format("JPY"===t?e:e/100)}n.d(t,{x:()=>r})},6926:(e,t,n)=>{n.d(t,{Z:()=>r});const r=e=>{let t;do{t=String(Math.random()).replace("0.","id")}while(e.hasOwnProperty(t));return t}},1947:(e,t,n)=>{n.d(t,{ZP:()=>d,J_:()=>a});const r={CHAT_RESTRICTED:"You can't send messages in this chat, you were restricted",CHAT_WRITE_FORBIDDEN:"You can't write in this chat",CHAT_SEND_POLL_FORBIDDEN:"You can't create polls in this chat",CHAT_SEND_STICKERS_FORBIDDEN:"You can't send stickers in this chat",CHAT_SEND_GIFS_FORBIDDEN:"You can't send gifs in this chat",CHAT_SEND_MEDIA_FORBIDDEN:"You can't send media in this chat",CHAT_LINK_EXISTS:"The chat is public, you can't hide the history to new users",SLOWMODE_WAIT_X:"Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.",USER_BANNED_IN_CHANNEL:"You're banned from sending messages in supergroups / channels",USER_IS_BLOCKED:"You were blocked by this user",YOU_BLOCKED_USER:"You blocked this user",IMAGE_PROCESS_FAILED:"Failure while processing image",MEDIA_EMPTY:"The provided media object is invalid",MEDIA_INVALID:"Media invalid",PHOTO_EXT_INVALID:"The extension of the photo is invalid",PHOTO_INVALID_DIMENSIONS:"The photo dimensions are invalid",PHOTO_SAVE_FILE_INVALID:"Internal issues, try again later",MESSAGE_DELETE_FORBIDDEN:"You can't delete one of the messages you tried to delete, most likely because it is a service message.",MESSAGE_POLL_CLOSED:"Poll closed",MESSAGE_EDIT_TIME_EXPIRED:"You can't edit this message anymore.",CHAT_ADMIN_REQUIRED:"You must be an admin in this chat to do this",PINNED_DIALOGS_TOO_MUCH:"Sorry, you can only pin 5 chats to the top",DIALOG_FILTERS_TOO_MUCH:"Sorry, you can't have more than 10 folders",CHANNEL_PRIVATE:"This channel is private",MEDIA_CAPTION_TOO_LONG:"The provided caption is too long",ADDRESS_STREET_LINE1_INVALID:"The address you provided is not valid",ADDRESS_STREET_LINE2_INVALID:"The address you provided is not valid",ADDRESS_CITY_INVALID:"The city you provided is not valid",ADDRESS_COUNTRY_INVALID:"The country you provided is not valid",ADDRESS_POSTCODE_INVALID:"The postcode you provided is not valid",ADDRESS_STATE_INVALID:"The state you provided is not valid",REQ_INFO_NAME_INVALID:"The name you provided is not valid",REQ_INFO_PHONE_INVALID:"The phone you provided is not valid",REQ_INFO_EMAIL_INVALID:"The email you provided is not valid",LINK_NOT_MODIFIED:"This discussion is already linked to the channel",MESSAGE_TOO_LONG:"Message is too long",SERVICE_WORKER_DISABLED:"Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key",MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS:"The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.",FRESH_RESET_AUTHORISATION_FORBIDDEN:"You can’t logout other sessions if less than 24 hours have passed since you logged on the current session",BOTS_TOO_MUCH:"There are too many bots in this chat/channel",BOT_GROUPS_BLOCKED:"This bot can't be added to groups",USERS_TOO_MUCH:"The maximum number of users has been exceeded",USER_CHANNELS_TOO_MUCH:"One of the users you tried to add is already in too many channels/supergroups",USER_KICKED:"This user was kicked from this supergroup/channel",USER_NOT_MUTUAL_CONTACT:"The provided user is not a mutual contact",USER_PRIVACY_RESTRICTED:"The user's privacy settings do not allow you to do this",INVITE_HASH_EMPTY:"The invite hash is empty",INVITE_HASH_EXPIRED:"The invite link has expired",INVITE_HASH_INVALID:"The invite hash is invalid",CHANNELS_TOO_MUCH:"You have joined too many channels/supergroups",USER_ALREADY_PARTICIPANT:"You already in the group",SCHEDULE_DATE_INVALID:"Invalid schedule date provided",WALLPAPER_DIMENSIONS_INVALID:"The wallpaper dimensions are invalid, please select another file",ADMINS_TOO_MUCH:"There are too many admins",ADMIN_RANK_EMOJI_NOT_ALLOWED:"An admin rank cannot contain emojis",ADMIN_RANK_INVALID:"The specified admin rank is invalid",FRESH_CHANGE_ADMINS_FORBIDDEN:"You were just elected admin, you can't add or modify other admins yet",INPUT_USER_DEACTIVATED:"The specified user was deleted"},o={ADDRESS_STREET_LINE1_INVALID:{field:"streetLine1",message:"Incorrect street address"},ADDRESS_STREET_LINE2_INVALID:{field:"streetLine2",message:"Incorrect street address"},ADDRESS_CITY_INVALID:{field:"city",message:"Incorrect city"},ADDRESS_COUNTRY_INVALID:{field:"countryIso2",message:"Incorrect country"},ADDRESS_POSTCODE_INVALID:{field:"postCode",message:"Incorrect post code"},ADDRESS_STATE_INVALID:{field:"state",message:"Incorrect state"},REQ_INFO_NAME_INVALID:{field:"fullName",message:"Incorrect name"},REQ_INFO_PHONE_INVALID:{field:"phone",message:"Incorrect phone"},REQ_INFO_EMAIL_INVALID:{field:"email",message:"Incorrect email"}};function d(e){const{message:t,isSlowMode:n,textParams:o}=e;if(n){const e=t.indexOf(" (caused by");return e>0?t.substring(0,e):t}let d=r[t];return d&&o&&(d=Object.keys(o).reduce(((e,t)=>e.replace(t,o[t])),d)),d}function a(e){return o[e.message]}},3592:(e,t,n)=>{n.d(t,{S:()=>d}),n(3716);var r=n(9118);function o(e){e instanceof ErrorEvent&&"ResizeObserver loop limit exceeded"===e.message||(e.preventDefault(),d(e instanceof ErrorEvent?e.error||e.message:e.reason))}function d(e){console.error(e)}window.addEventListener("error",o),window.addEventListener("unhandledrejection",o),(0,r.P2)(window.alert,1e3)},782:(e,t,n)=>{function r(e,t){return e.reduce(((e,n)=>(e[n[t]]=n,e)),{})}function o(e,t){return Object.keys(e).reduce(((n,r,o)=>(n[r]=t(e[r],r,o,e),n)),{})}function d(e,t){return t.reduce(((t,n)=>(t[n]=e[n],t)),{})}function a(e,t){return t.reduce(((t,n)=>(e[n]&&(t[n]=e[n]),t)),{})}function u(e,t){const n=new Set(t.map(String));return d(e,Object.keys(e).filter((e=>!n.has(e))))}function s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"asc";function r(e,t,n,r){const o=("function"==typeof n?n(e):e[n])||0,d=("function"==typeof n?n(t):t[n])||0;return r?o-d:d-o}if(Array.isArray(t)){const[o,d]=Array.isArray(n)?n:[n,n],[a,u]=t,s="asc"===o,i="asc"===d;return e.sort(((e,t)=>r(e,t,a,s)||r(e,t,u,i)))}const o="asc"===n;return e.sort(((e,n)=>r(e,n,t,o)))}function i(e){return e.reduce(((e,t)=>Array.isArray(t)?e.concat(t):(e.push(t),e)),[])}function c(e){return Array.from(new Set(e))}function l(e){return e.filter(Boolean)}function f(e,t){return e.length===t.length&&e.every(((e,n)=>e===t[n]))}function h(e,t){return e[0]<=t[t.length-1]&&e[e.length-1]>=t[0]}function m(e,t){return e.filter((e=>t.has(e)))}function p(e,t){const n=[];for(let r=0;r(t[n]=g(e[n]),t)),{})}function v(e,t){let n=e.length;for(;n--;)if(t(e[n],n,e))return e[n]}n.d(t,{ee:()=>r,Q8:()=>o,ei:()=>d,q0:()=>a,CE:()=>u,Xo:()=>s,xH:()=>i,Tw:()=>c,oA:()=>l,et:()=>f,YE:()=>h,eL:()=>m,Vl:()=>p,Xh:()=>g,dF:()=>v})},711:(e,t,n)=>{n.d(t,{ll:()=>p,i0:()=>I,Pn:()=>w,m0:()=>C,qf:()=>S});var r=n(5116),o=n(3716),d=n(9524),a=n(1226),u=n(6063),s=n(2155);const i=/%\d?\$?[sdf@]/g,c=["value","zeroValue","oneValue","twoValue","fewValue","manyValue","otherValue"],l={en:e=>1!==e?6:2,ar:e=>0===e?1:1===e?2:2===e?3:e%100>=3&&e%100<=10?4:e%100>=11?5:6,ca:e=>1!==e?6:2,de:e=>1!==e?6:2,es:e=>1!==e?6:2,fa:e=>e>1?6:2,fr:e=>e>1?6:2,id:()=>0,it:e=>1!==e?6:2,ko:()=>0,ms:()=>0,nl:e=>1!==e?6:2,pl:e=>1===e?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,pt_BR:e=>e>1?6:2,ru:e=>e%10==1&&e%100!=11?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,tr:e=>e>1?6:2,uk:e=>e%10==1&&e%100!=11?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,uz:e=>e>1?6:2},f=new Map;let h,m;const{addCallback:p,removeCallback:g,runCallbacks:v}=(0,u._)();let y,b;const I=(e,t,n)=>{var r,o;if(void 0!==t){const r=Array.isArray(t)?JSON.stringify(t):t,o=f.get(`${e}_${r}_${n}`);if(o)return o}if(!h&&!m)return e;const d=(null===(r=h)||void 0===r?void 0:r[e])||(null===(o=m)||void 0===o?void 0:o[e]);return d?M(d,e,t,n):(m||E(),e)};async function w(e,t){let n=await d.fetch(o.ee,`${o.$O}_${e}_${t}`,d.Type.Json);return n||(n=await async function(e,t,n){const r=await(0,a.t9)("fetchLangStrings",{langPack:e,langCode:t,keys:[n]});if(null!=r&&r.length)return await d.save(o.ee,`${e}_${t}_${n}`,r[0]),r[0]}(o.$O,e,t)),M(n,t)}async function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(h&&e===y)return void(t&&t());let a=await d.fetch(o.ee,e,d.Type.Json);if(!a&&(n&&await E(),a=await P(e),!a))return;f.clear(),y=e,h=a,document.documentElement.lang=e;const{languages:u,timeFormat:s}=(0,r.Rd)().settings.byKey,i=null==u?void 0:u.find((t=>t.langCode===e));I.isRtl=Boolean(null==i?void 0:i.rtl),I.code=e,I.timeFormat=s,t&&t(),v()}function S(e){e&&e===b||(b=e,I.timeFormat=e,v())}async function E(){m||(m=(await n.e(915).then(n.bind(n,1915))).default,v())}async function P(e){const t=await(0,a.t9)("fetchLangPack",{sourceLangPacks:o.Bg,langCode:e});if(t)return await d.save(o.ee,e,t.langPack),t.langPack}function M(e,t,n,r){const d=e?e["number"==typeof n?function(e){const t=y||o.sR,n=l[t]?l[t](e):0;return c[n]}(n):"value"]:void 0;if(!d||!d.trim()){const e=t.split(".");return e[e.length-1]}if(void 0!==n){const e=function(e,t){t=Array.isArray(t)?t:[t];const n=e.split(i),r=n.shift();return n.reduce(((e,n,r)=>`${e}${String(t[r]||"")}${n}`),r||"")}(d,"i"===r?(0,s.kh)(n):n),o=Array.isArray(n)?JSON.stringify(n):n;return f.set(`${t}_${o}_${r}`,e),e}return d}},647:(e,t,n)=>{n.d(t,{cC:()=>b,he:()=>v,UV:()=>y,Iq:()=>I});var r=n(6137),o=n(3716),d=n(1226),a=n(9524),u=n(1394),s=n(7361);const i=48e3;async function c(e){const t=await new Response(e).arrayBuffer();return new Promise((e=>{const r=new Uint8Array(t);let o=new Worker(new URL(n.p+n.u(745),n.b)),d=new Worker(new URL(n.p+n.u(993),n.b));o.onmessage=e=>{null===e.data?d.postMessage({command:"done"}):d.postMessage({command:"encode",buffers:e.data},e.data.map((e=>{let{buffer:t}=e;return t})))},d.onmessage=t=>{"page"===t.data.message&&(e(new Blob([t.data.page],{type:"audio/wav"})),o.terminate(),o=void 0,d.terminate(),d=void 0)},d.postMessage({command:"init",wavBitDepth:16,wavSampleRate:i}),o.postMessage({command:"init",decoderSampleRate:i,outputBufferSampleRate:i}),o.postMessage({command:"decode",pages:r},[r.buffer])}))}var l=n(862);const f={[r.IU.BlobUrl]:a.Type.Blob,[r.IU.Lottie]:a.Type.Blob,[r.IU.Progressive]:void 0,[r.IU.Stream]:void 0},h=new Map,m=new Map,p=new Map,g=new Map;function v(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],d=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;if(t===r.IU.Progressive)return s.I_?w(e):v(e,r.IU.BlobUrl,n,d,a);if(!m.has(e)){const r=C(e,t,n).catch((e=>{o.eM&&console.warn(e)})).finally((()=>{m.delete(e),p.delete(e),g.delete(e)}));m.set(e,r)}if(d&&a){let t=p.get(e);t||(t=new Map,p.set(e,t)),t.set(a,d)}return m.get(e)}function y(e){return h.get(e)}function b(e){p.forEach(((t,n)=>{t.forEach((t=>{if(t===e){const e=g.get(n);if(!e)return;(0,d.u3)(e),g.delete(n),p.delete(n)}}))}))}function I(e,t){const n=p.get(e);n&&n.delete(t)}function w(e){const t=`./progressive/${e}`;return h.set(e,t),Promise.resolve(t)}async function C(e,t,n){if(!o.Cy){const r=e.startsWith("avatar")?o.SG:o.lW,d=await a.fetch(r,e,f[t],n);if(d){let t=d;if("audio/ogg"!==d.type||s.m5||(t=await c(t)),"image/webp"===d.type&&!(0,s.on)()&&t){const n=await(0,l._y)(e,t);n&&(t=n)}const n=E(t);return h.set(e,n),n}}if(t===r.IU.Stream){const n=new MediaSource,r=URL.createObjectURL(n);let o=!1;return n.addEventListener("sourceopen",(()=>{if(o)return;o=!0;const r=n.addSourceBuffer("audio/mpeg"),a=S(e,n,r);g.set(e,a),(0,d.t9)("downloadMedia",{url:e,mediaFormat:t},a)})),h.set(e,r),r}const i=S(e);g.set(e,i);const m=await(0,d.t9)("downloadMedia",{url:e,mediaFormat:t,isHtmlAllowed:n},i);if(!m)throw new Error(`Failed to fetch media ${e}`);let{prepared:p,mimeType:v}=m;if("audio/ogg"===v&&!s.m5){const e=await(0,u.gm)(p);URL.revokeObjectURL(p);const t=await c(e);p=E(t),v=t.type}if("image/webp"===v&&!(0,s.on)()){const t=await(0,u.gm)(p);URL.revokeObjectURL(p);const n=await(0,l._y)(e,t);n&&(p=E(n))}return h.set(e,p),p}function S(e,t,n){const r=(o,d)=>{var a;null===(a=p.get(e))||void 0===a||a.forEach((e=>{e(o),e.isCanceled&&(r.isCanceled=!0)})),1===o&&(null==t||t.endOfStream()),d&&(null==n||n.appendBuffer(d))};return r}function E(e){return e instanceof Blob?URL.createObjectURL(e):e}s.I_&&navigator.serviceWorker.addEventListener("message",(async e=>{const{type:t,messageId:n,params:o}=e.data;if("requestPart"!==t)return;const a=await(0,d.t9)("downloadMedia",{mediaFormat:r.IU.Progressive,...o});if(!a)return;const{arrayBuffer:u,mimeType:s,fullSize:i}=a;navigator.serviceWorker.controller.postMessage({type:"partResponse",messageId:n,result:{arrayBuffer:u,mimeType:s,fullSize:i}},[u])}))},735:(e,t,n)=>{n.d(t,{D:()=>r});const r=[]},9203:(e,t,n)=>{n.d(t,{gl:()=>d,$y:()=>c,o5:()=>l,Qt:()=>f});var r=n(3716),o=n(6063);let d;!function(e){e[e.Auth=0]="Auth",e[e.Main=1]="Main",e[e.Extra=2]="Extra",e[e.Calls=3]="Calls"}(d||(d={}));const a={},u={},{addCallback:s,runCallbacks:i}=(0,o._)();async function c(e,t){if(!a[e]){switch(e){case d.Auth:a[d.Auth]=n.e(133).then(n.bind(n,1133));break;case d.Main:r.eM&&console.log(">>> START LOAD MAIN BUNDLE"),a[d.Main]=Promise.all([n.e(830),n.e(538),n.e(302),n.e(640)]).then(n.bind(n,5640));break;case d.Extra:a[d.Extra]=Promise.all([n.e(830),n.e(538),n.e(126)]).then(n.bind(n,9126));break;case d.Calls:a[d.Calls]=Promise.all([n.e(830),n.e(302),n.e(47)]).then(n.bind(n,6628))}a[e].then(i)}const o=await a[e];return u[e]||(u[e]=o),l(e,t)}function l(e,t){const n=u[e];if(n)return n[t]}const f=s},8406:(e,t,n)=>{n.d(t,{q3:()=>y,Nz:()=>b,r1:()=>C,Ld:()=>E,rh:()=>P,Vr:()=>M,KC:()=>A});var r=n(1226),o=n(6137),d=n(8005),a=n(3716),u=n(5116),s=n(8415),i=n(9959),c=n(9066),l=n(7361),f=n(711),h=n(647),m=n(9118);function p(e){const t=e.toJSON();return JSON.stringify({endpoint:t.endpoint,keys:t.keys})}function g(){return!!l.Mc&&("showNotification"in ServiceWorkerRegistration.prototype?"denied"===Notification.permission?(a.eM&&console.warn("[PUSH] The user has blocked push notifications."),!1):"PushManager"in window||(a.eM&&console.warn("[PUSH] Push messaging isn't supported."),!1):(a.eM&&console.warn("[PUSH] Push notifications aren't supported."),!1))}const v=new Set;async function y(e,t){if(void 0!==e&&v.has(e))return;const{notificationSoundVolume:n}=(0,c.dZ)((0,u.Rd)()),r=t?t/10:n/10;if(0===r)return;const o=new Audio("./notification.mp3");o.volume=r,o.setAttribute("mozaudiochannel","notification"),void 0!==e&&(o.addEventListener("ended",(()=>{v.add(e)}),{once:!0}),setTimeout((()=>{v.delete(e)}),3e3));try{await o.play()}catch(e){a.eM&&console.warn("[PUSH] Unable to play notification sound")}}const b=(0,m.Ds)(y,1e3,!0,!1);async function I(){"Notification"in window&&(["granted","denied"].includes(Notification.permission)||await Notification.requestPermission())}async function w(e){const t=(0,u.Rd)(),n=(0,u.uC)();if(e)try{const t=p(e);return await(0,r.t9)("unregisterDevice",t),await e.unsubscribe(),void n.deleteDeviceToken()}catch(e){a.eM&&console.log("[PUSH] Unable to unsubscribe from push.",e)}t.push&&(await(0,r.t9)("unregisterDevice",t.push.deviceToken),n.deleteDeviceToken())}async function C(){if(!g())return;const e=await navigator.serviceWorker.ready,t=await e.pushManager.getSubscription();await w(t)}let S=!1;async function E(){if(!g())return void await I();const e=await navigator.serviceWorker.ready;let t=await e.pushManager.getSubscription();if(function(e){const t=(0,u.Rd)();return!t.push||!e||p(e)!==t.push.deviceToken||Date.now()-t.push.subscribedAt>432e5}(t)){await w(t);try{t=await e.pushManager.subscribe({userVisibleOnly:!0});const n=p(t);a.eM&&console.log("[PUSH] Received push subscription: ",n),await(0,r.t9)("registerDevice",n),(0,u.uC)().setDeviceToken(n)}catch(e){"denied"===Notification.permission?a.eM&&console.warn("[PUSH] The user has blocked push notifications."):a.eM&&(console.log("[PUSH] Unable to subscribe to push.",e),e.code===DOMException.ABORT_ERR&&await I())}}}async function P(e){let{chat:t,message:n}=e;const{hasWebNotifications:m}=await async function(){if(S)return(0,c.dZ)((0,u.Rd)());const[e,t]=await Promise.all([(0,r.t9)("fetchNotificationSettings",{serverTimeOffset:(0,u.Rd)().serverTimeOffset}),(0,r.t9)("fetchNotificationExceptions",{serverTimeOffset:(0,u.Rd)().serverTimeOffset})]);if(!e)return(0,c.dZ)((0,u.Rd)());let n=(0,i.BI)((0,u.Rd)(),e);return t&&(n=(0,i.aJ)(n,t)),(0,u.R3)(n),S=!0,(0,c.dZ)(n)}();if(!function(e){if(!S)return!1;const t=(0,u.Rd)();if((0,s.i4)(e,(0,c.dZ)(t),(0,c.NJ)(t))||e.isNotJoined||!e.isListed)return!1;if(l.$b){const{chatId:n,type:r}=(0,c.Bt)(t)||{};return!(n===e.id&&"thread"===r)}return!document.hasFocus()}(t))return;const p="Notification"in window?"denied"!==Notification.permission||(a.eM&&console.warn("[PUSH] The user has blocked push notifications."),!1):(a.eM&&console.warn("[PUSH] This browser does not support desktop notification"),!1);if(!m||!p)return void b(String(n.id)||t.id);if(!p)return;if(!n.id)return;const v=(0,s.dT)(n),y=await async function(e){const t=(0,s.RT)(e);if(!t)return;let n=h.UV(t);return n||(await h.he(t,o.IU.BlobUrl),n=h.UV(t)),n}(t),{title:I,body:w}=function(e,t,n){const r=(0,u.Rd)();let{senderId:o,replyToMessageId:a}=t;n&&(o=n.userId);const i=o?(0,c.dy)(r,o):void 0,l=(0,s.N5)(t),h=l&&a?(0,c.hj)(r,e.id,a):void 0,{targetUserIds:m,targetChatId:p}=l||{},g=m?m.map((e=>(0,c.dy)(r,e))).filter(Boolean):void 0,v=(0,s.zX)(e),y=v?(0,c.dy)(r,v):void 0;let b;if((0,s.Sm)(e,(0,c.dZ)(r),(0,c.NJ)(r)))if((0,s.Lo)(t)){const n=e&&((0,s.eA)(e)||t.senderId===t.chatId);b=(0,d.D)(f.i0,t,n?void 0:i,n?e:void 0,g,h,p,{asPlainText:!0})}else{const n=(0,s.zF)(f.i0,e.id,i),r=(0,s.MK)(f.i0,t,!1,60,!1);b=n?`${n}: ${r}`:r}else b="New message";return{title:(0,s.U)(f.i0,e,y),body:b}}(t,n,v);if(g()){var C;null!==(C=navigator.serviceWorker)&&void 0!==C&&C.controller&&navigator.serviceWorker.controller.postMessage({type:"showMessageNotification",payload:{title:I,body:w,icon:y,chatId:t.id,messageId:n.id,reaction:v?v.reaction:void 0}})}else{const e=(0,u.uC)(),r={body:w,icon:y,badge:y,tag:String(n.id)};"vibrate"in navigator&&(r.vibrate=[200,100,200]);const o=new Notification(I,r);o.onclick=()=>{o.close(),e.focusMessage({chatId:t.id,messageId:n.id}),v&&e.startActiveReaction({messageId:n.id,reaction:v.reaction}),window.focus&&window.focus()},o.onshow=()=>{b(String(n.id)||t.id)}}}function M(e){var t;!a.Cg&&null!==(t=navigator.serviceWorker)&&void 0!==t&&t.controller&&navigator.serviceWorker.controller.postMessage({type:"closeMessageNotifications",payload:e})}function A(){var e;null!==(e=navigator.serviceWorker)&&void 0!==e&&e.controller&&navigator.serviceWorker.controller.postMessage({type:"clientReady"})}},7926:(e,t,n)=>{n.d(t,{L:()=>d,$:()=>a});const r="kz_version",o=["Z","K"];function d(e){localStorage.setItem(r,JSON.stringify(e))}function a(){(function(){const e=localStorage.getItem(r);if(!e)return!1;try{const t=JSON.parse(e);return o.includes(t)}catch(e){return!1}})()||d("Z")}},6272:(e,t,n)=>{n.d(t,{U9:()=>a,g3:()=>u,un:()=>s,WZ:()=>i});var r=n(782);const o="X",d="XXX XXX XXX XXX";function a(e,t){return e.filter((e=>e.iso2===t))}function u(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=n.replace(/[^\d+]+/g,"");o.startsWith("+")&&(o=o.substr(1));const d=e.filter((e=>o.startsWith(e.countryCode))),a=(0,r.xH)(d.map((e=>(e.prefixes||[""]).map((t=>({code:`${e.countryCode}${t}`,country:e})))))),u=a.filter((e=>{let{code:t}=e;return o.startsWith(t)})).sort(((e,t)=>e.code.length-t.code.length));return null===(t=u[u.length-1])||void 0===t?void 0:t.country}function s(e,t){let n=e.replace(/[^\d]+/g,"");if(t)n=n.substr(t.countryCode.length);else if(e.startsWith("+"))return e;const r=function(e,t){if(!t||0===t.length)return d;if(1===t.length)return t[0];const n=t.find((e=>e.startsWith(o)))||d,r=t.filter((t=>{const n=t.replace(/[^\dX]+/g,"");if(n.startsWith(o))return!1;for(let t=0;tn.length-1||n[t]!==o&&n[t]!==e[t])return!1;return!0}));return 1===r.length?r[0]:n}(n,null==t?void 0:t.patterns),a=[];let u=0;for(let e=0;e{n.d(t,{q:()=>d,V:()=>a});var r=n(6137),o=n(6590);function d(e){const t="thread"!==e.type?`_${e.type}`:-1!==e.threadId?`_${e.threadId}`:"";return`${e.chatId}${t}`}function a(){if(!o.Oy)return;const[e,t]=o.Oy.replace(/^#/,"").split("_");if(null==e||!e.match(/^-?\d+$/))return;const n=["thread","pinned","scheduled"].includes(t);return{chatId:e,type:Boolean(t)&&n?t:"thread",threadId:Boolean(t)&&!n?Number(t):r._f}}},9118:(e,t,n)=>{function r(e,t){let n,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return function(){for(var d=arguments.length,a=new Array(d),u=0;u{o&&e(...a),n=void 0}),t)}}function o(e,t){let n,r,o,d=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return function(){r=!0;for(var a=arguments.length,u=new Array(a),s=0;s{if(!r)return self.clearInterval(n),void(n=void 0);r=!1,e(...o)}),t))}}function d(e){return s(v,e)}function a(e){return s(y,e)}function u(e){return s(b,e)}function s(e,t){let n,r=!1;return function(){for(var o=arguments.length,d=new Array(o),a=0;a{r=!1,t(...n)})))}}function i(e,t){self.requestIdleCallback?self.requestIdleCallback(e,{timeout:t}):b(e)}n.d(t,{Ds:()=>r,P2:()=>o,mS:()=>d,wT:()=>a,$6:()=>u,Q8:()=>i,wO:()=>c,Pn:()=>l,T2:()=>v,D0:()=>y,R3:()=>b,zD:()=>I,Gq:()=>w});const c=e=>new Promise((t=>{setTimeout((()=>t()),e)}));function l(){return new Promise((e=>{v(e)}))}let f,h,m,p,g;function v(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f?t?h.push(e):f.push(e):(f=t?[]:[e],h=t?[e]:[],requestAnimationFrame((()=>{const e=f,t=h;f=void 0,h=void 0,t.forEach((e=>e())),e.forEach((e=>e()))})))}function y(e){v(e,!0)}function b(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];m?t?p.push(e):m.push(e):(m=t?[]:[e],p=t?[e]:[],Promise.resolve().then((()=>{const e=m,t=p;m=void 0,p=void 0,t.forEach((e=>e())),e.forEach((e=>e()))})))}function I(e){b(e,!0)}function w(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return g||(g=[],self.addEventListener("beforeunload",(()=>{g.forEach((e=>e()))}))),t?g.push(e):g.unshift(e),()=>{g=g.filter((t=>t!==e))}}},5765:(e,t,n)=>{let r;n.d(t,{Z:()=>o,W:()=>d});try{r=new RegExp("[^\\p{L}\\p{M}]+","ui")}catch(e){r=new RegExp("[^\\wа-яё]+","i")}function o(e,t){if(!e||!t)return!1;const n="string"==typeof t?t.toLowerCase().split(r):t,o=e.toLowerCase();if(1===n.length&&!o.includes(n[0]))return!1;let d;return n.every((e=>!!o.includes(e)&&(d||(d=o.split(r)),d.some((t=>t.startsWith(e))))))}function d(e){const t=e.toLowerCase().split(r);return e=>o(e,t)}},2267:(e,t,n)=>{n.d(t,{b:()=>r});const r=e=>Math.floor(Date.now()/1e3)+e},3100:(e,t,n)=>{n.d(t,{f3:()=>m,jv:()=>l,ti:()=>i,Qw:()=>h,K8:()=>f,wX:()=>c});function r(e){return new Promise(((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)}))}let o;function d(){return o||(o=function(e,t){const n=(!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(e){var t=function(){return indexedDB.databases().finally(e)};o=setInterval(t,100),t()})).finally((function(){return clearInterval(o)})):Promise.resolve()).then((()=>{const e=indexedDB.open("keyval-store");return e.onupgradeneeded=()=>e.result.createObjectStore(t),r(e)}));var o;return(e,r)=>n.then((n=>r(n.transaction(t,e).objectStore(t))))}(0,"keyval")),o}var a=n(3716),u=n(9524);const s=[1,2,3,4,5];function i(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&localStorage.getItem(a.Vx))return!0;const t=localStorage.getItem(a.b_);if(!t)return!1;try{const e=JSON.parse(t);return Boolean(e&&e.id&&e.dcID)}catch(e){return!1}}function c(e,t){const{mainDcId:n,keys:r,hashes:o}=e;localStorage.setItem(a.b_,JSON.stringify({dcID:n,id:t})),localStorage.setItem("dc",String(n)),Object.keys(r).map(Number).forEach((e=>{localStorage.setItem(`dc${e}_auth_key`,JSON.stringify(r[e]))})),o&&Object.keys(o).map(Number).forEach((e=>{localStorage.setItem(`dc${e}_hash`,JSON.stringify(o[e]))}))}function l(){[a.b_,"dc",...s.map((e=>`dc${e}_auth_key`)),...s.map((e=>`dc${e}_hash`))].forEach((e=>{localStorage.removeItem(e)}))}function f(){if(!i())return;const e=JSON.parse(localStorage.getItem(a.b_)),t=Number(e.dcID),n={},r={};return s.forEach((e=>{try{const t=localStorage.getItem(`dc${e}_auth_key`);t&&(n[e]=JSON.parse(t));const o=localStorage.getItem(`dc${e}_hash`);o&&(r[e]=JSON.parse(o))}catch(e){a.eM&&console.warn("Failed to load stored session",e)}})),Object.keys(n).length?{mainDcId:t,keys:n,hashes:r}:void 0}async function h(){const e=localStorage.getItem(a.Vx);if(!e)return;const t=await function(e,t=d()){return t("readonly",(t=>r(t.get(e))))}(`GramJs:${e}`);try{c(JSON.parse(t))}catch(e){a.eM&&console.warn("Failed to load legacy session",e)}}async function m(){localStorage.removeItem(a.Vx);const e=await function(e=d()){return e("readonly",(e=>{if(e.getAllKeys)return r(e.getAllKeys());const t=[];return function(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},r(e.transaction)}(e,(e=>t.push(e.key))).then((()=>t))}))}();await Promise.all([u.clear("GramJs"),...e.filter((e=>"string"==typeof e&&e.startsWith("GramJs:GramJs-session-"))).map((e=>function(e,t=d()){return t("readwrite",(t=>(t.delete(e),r(t.transaction))))}(e)))])}},7370:(e,t,n)=>{n.d(t,{Z:()=>h});var r=n(9933),o=n(9118);const d=JSON.parse('{"--color-primary":["#3390EC","#8774E1"],"--color-primary-opacity":["#50A2E980","#8378DB80"],"--color-primary-shade":["#4a95d6","#7b71c6"],"--color-background":["#FFFFFF","#212121"],"--color-background-secondary":["#f4f4f5","#0F0F0F"],"--color-background-secondary-accent":["#E4E4E5","#100f10"],"--color-background-own":["#EEFFDE","#8774E1"],"--color-background-own-apple":["#DCF8C5","#8774E1"],"--color-background-selected":["#F4F4F5","#2C2C2C"],"--color-background-own-selected":["#d0ffac","#6549d4"],"--color-chat-hover":["#F4F4F5","#2C2C2C"],"--color-chat-active":["#3390EC","#8774E1"],"--color-item-active":["#ededed","#292929"],"--color-text":["#000000","#FFFFFF"],"--color-text-secondary":["#707579","#AAAAAA"],"--color-text-secondary-apple":["#8E8E92","#AAAAAA"],"--color-borders":["#DADCE0","#303030"],"--color-borders-input":["#DADCE0","#5B5B5A"],"--color-dividers":["#C8C6CC","#404040"],"--color-links":["#3390EC","#8774E1"],"--color-gray":["#C4C9CC","#717579"],"--color-pinned":["#C4C9CC","#707579"],"--color-default-shadow":["#72727240","#1010109c"],"--color-light-shadow":["#7272722B","#00000040"],"--color-green":["#00C73E","#8774E1"],"--color-text-meta-colored":["#4DCD5E","#8378DB"],"--color-reply-hover":["#F4F4F4","#272727"],"--color-reply-active":["#E8E9E9","#2E2F2F"],"--color-reply-own-hover":["#D9F5CE","#7d6bca"],"--color-reply-own-hover-apple":["#cbefb7","#7d6bca"],"--color-reply-own-active":["#C5ECBE","#7264b6"],"--color-reply-own-active-apple":["#bae6a8","#7264b6"],"--color-accent-own":["#45AF54","#FFFFFF"],"--color-message-meta-own":["#4FAE4EFF","#FFFFFF88"],"--color-own-links":["#3390EC","#FFFFFF"],"--color-code":["#4a729a","#8774E1"],"--color-code-own":["#3c7940","#FFFFFF"],"--color-code-bg":["#70757914","#ffffff26"],"--color-code-own-bg":["#70757914","#ffffff26"],"--color-composer-button":["#707579CC","#AAAAAACC"],"--color-message-reaction":["#ebf3fd","#2b2a35"],"--color-message-reaction-hover":["#c5def9","#343147"],"--color-message-reaction-own":["#cef0ba","#7a68ca"],"--color-message-reaction-hover-own":["#b5e0a4","#7567bc"]}');let a=!1;const u=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i,s=new Set(["--color-primary-shade","--color-text-secondary"]),i=(e,t,n)=>(1-n)*e+n*t,c=Object.keys(d).map((e=>({property:e,colors:[l(d[e][0]),l(d[e][1])]})));function l(e){const t=u.exec(e);return{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16),a:void 0!==t[4]?parseInt(t[4],16):void 0}}function f(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;c.forEach((r=>{let{property:o,colors:d}=r;const a=Math.round(i(d[e].r,d[t].r,n)),u=Math.round(i(d[e].g,d[t].g,n)),c=Math.round(i(d[e].b,d[t].b,n)),l=void 0!==d[e].a?Math.round(i(d[e].a,d[t].a,n)):void 0;document.documentElement.style.setProperty(o,void 0!==l?`rgba(${a},${u},${c},${l/255})`:`rgb(${a},${u},${c})`),s.has(o)&&document.documentElement.style.setProperty(`${o}-rgb`,`${a},${u},${c}`)}))}const h=(e,t)=>{const n="dark"===e,d=a&&t,u=n?0:1,s=n?1:0,i=Date.now(),c=document.querySelector('meta[name="theme-color"]');document.documentElement.classList.remove("theme-"+(n?"light":"dark")),a&&document.documentElement.classList.add("no-animations"),document.documentElement.classList.add(`theme-${e}`),c&&c.setAttribute("content",n?"#212121":"#fff"),setTimeout((()=>{document.documentElement.classList.remove("no-animations")}),500),a=!0,d?(0,o.T2)((()=>{(0,r.cK)((()=>{const e=Math.min((Date.now()-i)/200,1);return f(u,s,function(e){return 1-(1-e)**3.5}(e)),e<1}))})):f(u,s)}},2155:(e,t,n)=>{n.d(t,{kh:()=>d,bi:()=>u,Xv:()=>s});var r=n(3681),o=n(4284);function d(e){return String(e).replace(/\d(?=(\d{3})+$)/g,"$& ")}function a(e){return".0"===String(e.toFixed(1)).substr(-2)?Math.round(e):e.toFixed(1).replace(".",",")}function u(e){return e<1e3?e:e<1e6?`${a(e/1e3)}K`:`${a(e/1e6)}M`}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return e.replace(/[.,!@#$%^&*()_+=\-`~[\]/\\{}:"|<>?]+/gi,"").trim().split(/\s+/).slice(0,t).map((e=>{if(!e.length)return"";const t=(e=(0,o.g6)(e)).match(r.Z);return t&&e.startsWith(t[0])?t[0]:e.match(/./u)[0].toUpperCase()})).join("")}},8035:(e,t,n)=>{function r(e,t){return!e||!t||e.length<=t?e:`${e.substring(0,t)}...`}n.d(t,{Z:()=>r})},862:(e,t,n)=>{n.d(t,{Hu:()=>s,_y:()=>i,p6:()=>c});var r=n(7361),o=n(1394),d=n(9118);let a,u;const s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";async function i(e,t){for(l();!u.wasmReady;)await(0,d.wO)(2e3);const{result:n,width:r,height:o}=await function(e,t){return new Promise((n=>{u.requests||(u.requests=new Map),u.requests.set(e,n),u.postMessage({id:e,blob:t})}))}(e,t);if(r&&o)return function(e){let{result:t,width:n,height:r}=e;return a||(a=document.createElement("canvas")),new Promise((e=>{const o=new ImageData(t,n,r);a.width=n,a.height=r,a.getContext("2d").putImageData(o,0,0),a.toBlob((t=>{e(null!=t?t:void 0)}),"image/png",1)}))}({result:n,width:r,height:o})}async function c(e,t){if((0,r.on)()||"data:image/webp"!==t.substr(0,15))return t;l();const n=await i(e,(0,o.A9)(t));if(!n)throw new Error(`Can't convert webp to png. Url: ${t}`);return(0,o.YJ)(n)}function l(){u||(u=new Worker(new URL(n.p+n.u(536),n.b)),u.wasmReady=!1,u.onmessage=f)}function f(e){const{id:t}=e.data;switch(e.data.type){case"initialized":u.wasmReady=!0;break;case"result":if(u.requests.has(t)){const n=u.requests.get(t);u.requests.delete(t),n(e.data)}}}},1622:(e,t,n)=>{n.d(t,{IT:()=>l,px:()=>f,W8:()=>h});var r=n(3716),o=n(5116),d=n(3100);const a=["t.me","telegram.me"].map((e=>`//${e}/_websync_?`)),u=`${r.Ji} Z`,s="tgme_sync",i=()=>Math.floor(Number(new Date)/1e3);let c;const l=e=>{const t=i(),{canRedirect:n,ts:r}=JSON.parse(localStorage.getItem(s)||"{}");return n!==e||r+86400<=t?Promise.all(a.map((t=>new Promise(((n,r)=>{const o=document.createElement("script"),d=()=>Boolean(document.body.removeChild(o));o.src=t+new URLSearchParams({authed:Number(e).toString(),version:u}),document.body.appendChild(o),o.onload=()=>{(e=>{const t=i();localStorage.setItem(s,JSON.stringify({canRedirect:e,ts:t}))})(e),d(),c&&(clearTimeout(c),c=void 0),f(),n()},o.onerror=()=>{d(),r()}}))))):Promise.resolve()};function f(){if(r.eM)return;if(void 0!==c)return;const e=i(),{ts:t}=JSON.parse(localStorage.getItem(s)||"{}"),n=86400-(e-t);c=setTimeout((()=>{const{authState:e}=(0,o.Rd)(),t="authorizationStateReady"===e||(0,d.ti)(!0);l(t)}),Math.max(0,1e3*n))}function h(){localStorage.removeItem(s)}},3858:(e,t,n)=>{n.d(t,{z:()=>l,Z:()=>h});var r=n(9118),o=n(3716),d=n(7361);const a=d.wB&&f(),u=window.innerHeight;let s=l(),i=!1;const c=(0,r.P2)((()=>{s=l(),!i&&((s.width<=o.l3||s.width<=o.u_&&s.height<=o.rO)!==d.wB||d.wB&&a!==f())&&window.location.reload()}),250,!0);function l(){let e;e=d.cj?window.visualViewport.height+window.visualViewport.pageTop:window.innerHeight;const t=.01*e;return document.documentElement.style.setProperty("--vh",`${t}px`),{width:window.innerWidth,height:window.innerHeight}}function f(){return d.cj?window.matchMedia("(orientation: landscape)").matches:window.matchMedia("screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)").matches}window.addEventListener("orientationchange",c),d.cj?window.visualViewport.addEventListener("resize",c):window.addEventListener("resize",c);const h={get:()=>s,getIsKeyboardVisible:()=>u>s.height,disableRefresh:function(){i=!0},enableRefresh:function(){i=!1}}},5359:(e,t,n)=>{e.exports=n.p+"app-inactive.bc7953c2dfebcabce2c4..png"},2162:(e,t,n)=>{e.exports=n.p+"monkey.a3d5fcdc50b18dc55695..svg"},5523:(e,t,n)=>{e.exports=n.p+"reaction-thumbs.4007ef2a82a070efb3ce..png"},4128:(e,t,n)=>{e.exports=n.p+"telegram-logo.1b2bb5b107f046ea9325..svg"}},u={};function s(e){var t=u[e];if(void 0!==t)return t.exports;var n=u[e]={exports:{}};return a[e].call(n.exports,n,n.exports,s),n.exports}s.m=a,s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,s.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);s.r(o);var d={};e=e||[null,t({}),t([]),t(t)];for(var a=2&r&&n;"object"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((e=>d[e]=()=>n[e]));return d.default=()=>n,s.d(o,d),o},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce(((t,n)=>(s.f[n](e,t),t)),[])),s.u=e=>e+"."+{47:"636da8b3a0051a88c67f",99:"4acb17d13e1a5b87b131",126:"56949b6fb714b8786c3b",133:"f664a3ff1ab968ba12a0",161:"4fade15904bfe66b4f71",302:"fde2dcaf1124227a1d9e",354:"7bc3c5c13bc07dd188c8",472:"65a66b6c1fb1be8db986",501:"3c8f4d2d9fb141fac95f",524:"5ba4654722f6398c85d7",536:"ab2a889dae72ec88f68c",538:"784f6f20a24129e3caaf",626:"0852f35873300d889e6f",640:"b191f48c5df91e546441",745:"cc53f6e29328dbd2c9ff",830:"75c3f8b65582d31f48aa",915:"af01666698d37aea6ce6",941:"367e239e47c825643813",993:"5065d2f591c9fc4f83b4"}[e]+".js",s.miniCssF=e=>e+"."+{47:"636da8b3a0051a88c67f",126:"56949b6fb714b8786c3b",133:"f664a3ff1ab968ba12a0",472:"65a66b6c1fb1be8db986",538:"784f6f20a24129e3caaf",640:"b191f48c5df91e546441"}[e]+".css",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},r="telegram-t:",s.l=(e,t,o,d)=>{if(n[e])n[e].push(t);else{var a,u;if(void 0!==o)for(var i=document.getElementsByTagName("script"),c=0;c{a.onerror=a.onload=null,clearTimeout(h);var o=n[e];if(delete n[e],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(r))),t)return t(r)},h=setTimeout(f.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=f.bind(null,a.onerror),a.onload=f.bind(null,a.onload),u&&document.head.appendChild(a)}},s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;s.g.importScripts&&(e=s.g.location+"");var t=s.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=e})(),o=e=>new Promise(((t,n)=>{var r=s.miniCssF(e),o=s.p+r;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),r=0;r{var o=document.createElement("link");o.rel="stylesheet",o.type="text/css",o.onerror=o.onload=d=>{if(o.onerror=o.onload=null,"load"===d.type)n();else{var a=d&&("load"===d.type?"missing":d.type),u=d&&d.target&&d.target.href||t,s=new Error("Loading CSS chunk "+e+" failed.\n("+u+")");s.code="CSS_CHUNK_LOAD_FAILED",s.type=a,s.request=u,o.parentNode.removeChild(o),r(s)}},o.href=t,document.head.appendChild(o)})(e,o,t,n)})),d={179:0},s.f.miniCss=(e,t)=>{d[e]?t.push(d[e]):0!==d[e]&&{47:1,126:1,133:1,472:1,538:1,640:1}[e]&&t.push(d[e]=o(e).then((()=>{d[e]=0}),(t=>{throw delete d[e],t})))},(()=>{s.b=document.baseURI||self.location.href;var e={179:0};s.f.j=(t,n)=>{var r=s.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var d=s.p+s.u(t),a=new Error;s.l(d,(n=>{if(s.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),d=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+o+": "+d+")",a.name="ChunkLoadError",a.type=o,a.request=d,r[1](a)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,o,[d,a,u]=n,i=0;if(d.some((t=>0!==e[t]))){for(r in a)s.o(a,r)&&(s.m[r]=a[r]);u&&u(s)}for(t&&t(n);i{s(3592);var e=s(3716),t=s(5116),n=s(7361),r=s(8406);function o(n){const o=n.data;if(e.ZT&&console.log("[SW] Message from worker",o),!o.type)return;const d=(0,t.uC)(),a=o.payload;switch(o.type){case"focusMessage":d.focusMessage&&d.focusMessage(a),d.startActiveReaction&&a.reaction&&d.startActiveReaction({messageId:a.messageId,reaction:a.reaction});break;case"playNotificationSound":(0,r.Nz)(o.payload.id)}}function d(){navigator.serviceWorker.removeEventListener("message",o),navigator.serviceWorker.addEventListener("message",o),(0,r.KC)()}n.Mc&&(window.addEventListener("load",(async()=>{try{if(!navigator.serviceWorker.controller){const t=await navigator.serviceWorker.getRegistrations();t.length&&(e.eM&&console.log("[SW] Hard reload detected, re-enabling Service Worker"),await Promise.all(t.map((e=>e.unregister()))))}await navigator.serviceWorker.register(new URL(s.p+s.u(524),s.b)),e.eM&&console.log("[SW] ServiceWorker registered"),await navigator.serviceWorker.ready,navigator.serviceWorker.controller?(e.eM&&console.log("[SW] ServiceWorker ready"),d()):(e.eM&&console.error("[SW] ServiceWorker not available"),n.cj||n.wZ||(0,t.uC)().showDialog({data:{message:"SERVICE_WORKER_DISABLED",hasErrorKey:!0}}))}catch(t){e.eM&&console.error("[SW] ServiceWorker registration failed: ",t)}})),window.addEventListener("focus",(async()=>{await navigator.serviceWorker.ready,d()})));var a=s(2916);const u={isLeftColumnShown:!0,isChatInfoShown:!1,newChatMembersProgress:s(1713).WB.Closed,uiReadyState:0,serverTimeOffset:0,authRememberMe:!0,countryList:{phoneCodes:[],general:[]},blocked:{ids:[],totalCount:0},users:{byId:{},statusesById:{}},chats:{listIds:{},isFullyLoaded:{},orderedPinnedIds:{},totalCount:{},byId:{}},messages:{byChatId:{},messageLists:[],sponsoredByChatId:{}},groupCalls:{byId:{}},scheduledMessages:{byChatId:{}},chatFolders:{byId:{},activeChatFolder:0},fileUploads:{byMessageLocalId:{}},recentEmojis:["grinning","kissing_heart","christmas_tree","brain","trophy"],stickers:{setsById:{},added:{},recent:{stickers:[]},favorite:{stickers:[]},greeting:{stickers:[]},featured:{setIds:[]},search:{},forEmoji:{}},emojiKeywords:{},gifs:{saved:{},search:{}},inlineBots:{isLoading:!1,byUsername:{}},globalSearch:{},userSearch:{},localTextSearch:{byChatThreadKey:{}},localMediaSearch:{byChatId:{}},management:{byChatId:{}},topPeers:{},topInlineBots:{},mediaViewer:{},audioPlayer:{volume:e.Qx,playbackRate:e.mw,isMuted:!1},forwardMessages:{},pollResults:{},payment:{},notifications:[],dialogs:[],activeSessions:[],settings:{byKey:{theme:"light",shouldUseSystemTheme:!0,messageTextSize:n.cj?e.b6:n.jm?e.AR:e.xS,animationLevel:e.CX,messageSendKeyCombo:"enter",canAutoLoadPhotoFromContacts:!0,canAutoLoadPhotoInPrivateChats:!0,canAutoLoadPhotoInGroups:!0,canAutoLoadPhotoInChannels:!0,canAutoLoadVideoFromContacts:!0,canAutoLoadVideoInPrivateChats:!0,canAutoLoadVideoInGroups:!0,canAutoLoadVideoInChannels:!0,canAutoLoadFileFromContacts:!1,canAutoLoadFileInPrivateChats:!1,canAutoLoadFileInGroups:!1,canAutoLoadFileInChannels:!1,autoLoadFileMaxSizeMb:10,hasWebNotifications:!0,hasPushNotifications:!0,notificationSoundVolume:5,canAutoPlayGifs:!0,canAutoPlayVideos:!0,shouldSuggestStickers:!0,shouldLoopStickers:!0,language:"en",timeFormat:"24h",wasTimeFormatSetManually:!1,isConnectionStatusMinimized:!0},themes:{light:{isBlurred:!0,patternColor:e.g},dark:{isBlurred:!0,patternColor:e.Vv}},privacy:{},notifyExceptions:{}},twoFaSettings:{},activeReactions:{},shouldShowContextMenuHint:!0,activeDownloads:{byChatId:{}},serviceNotifications:[]};var i=s(6137),c=s(9118),l=s(8674),f=s(782),h=s(9066),m=s(3100),p=s(5780),g=s(8415),v=s(6974);const y=(0,c.P2)((()=>(0,c.Q8)(S)),5e3,!1);let b,I=!1;function w(){I=!0,b=(0,c.Gq)(S,!0),window.addEventListener("blur",S),(0,t.ll)(y)}function C(){I=!1,(0,t.Iq)(y),window.removeEventListener("blur",S),b&&b()}function S(){if(!I||(0,l.zG)())return;const n=(0,t.Rd)();if(n.isLoggingOut)return;const r={...u,...(0,f.ei)(n,["authState","authPhoneNumber","authRememberMe","authNearestCountry","currentUserId","contactList","topPeers","topInlineBots","recentEmojis","push","shouldShowContextMenuHint","leftColumnWidth","serviceNotifications"]),audioPlayer:{volume:n.audioPlayer.volume,playbackRate:n.audioPlayer.playbackRate,isMuted:n.audioPlayer.isMuted},isChatInfoShown:E(n),users:P(n),chats:M(n),messages:A(n),globalSearch:{recentlyFoundChatIds:n.globalSearch.recentlyFoundChatIds},settings:k(n),chatFolders:T(n),groupCalls:N(n),availableReactions:L(n)},o=JSON.stringify(r);localStorage.setItem(e.Uh,o)}function E(t){return window.innerWidth>e._m&&t.isChatInfoShown}function P(t){var n,r,o,d,a;const{users:{byId:u,statusesById:s},currentUserId:i}=t,{chatId:c}=(0,h.Bt)(t)||{},l=null===(n=(0,h.P2)(t))||void 0===n?void 0:n.map((e=>{let{id:t}=e;return t})),m=(0,f.Tw)([...i?[i]:[],...c&&(0,g.YC)(c)?[c]:[],...l||[],...t.topPeers.userIds||[],...(null===(r=(0,v.gO)(e.Nf))||void 0===r?void 0:r.filter(g.YC))||[],...(null===(o=(0,v.gO)(e.WS))||void 0===o?void 0:o.filter(g.YC))||[],...(null===(d=t.contactList)||void 0===d?void 0:d.userIds)||[],...(null===(a=t.globalSearch.recentlyFoundChatIds)||void 0===a?void 0:a.filter(g.YC))||[],...Object.keys(u)]).slice(0,e.lO);return{byId:(0,f.ei)(u,m),statusesById:(0,f.ei)(s,m)}}function M(t){const{chats:{byId:n},currentUserId:r}=t,o=(0,h.jr)(t),d=(0,f.Tw)([...r?[r]:[],...o?[o.id]:[],...(0,v.gO)(e.Nf)||[],...(0,v.gO)(e.WS)||[],...t.globalSearch.recentlyFoundChatIds||[],...Object.keys(n)]).slice(0,e.gJ);return{...t.chats,isFullyLoaded:{},byId:(0,f.ei)(t.chats.byId,d)}}function A(t){var n;const{currentUserId:r}=t,o={},{chatId:d}=(0,h.Bt)(t)||{};return[...d?[d]:[],...r?[r]:[],...(null===(n=(0,v.gO)(e.Nf))||void 0===n?void 0:n.slice(0,e.Rk))||[]].forEach((e=>{const n=t.messages.byChatId[e];if(!n)return;const r=n.threadsById[i._f];r&&r.viewportIds&&(o[e]={byId:(0,f.ei)(n.byId,r.viewportIds),threadsById:{[i._f]:r}})})),{byChatId:o,messageLists:[],sponsoredByChatId:{}}}function k(e){const{byKey:t,themes:n}=e.settings;return{byKey:t,themes:n,privacy:{},notifyExceptions:{}}}function T(e){return{...e.chatFolders,activeChatFolder:0}}function N(e){return{...e.groupCalls,byId:{},activeGroupCallId:void 0,isGroupCallPanelHidden:void 0,isFallbackConfirmOpen:void 0}}function L(e){var t;return null===(t=e.availableReactions)||void 0===t?void 0:t.map((e=>(0,f.ei)(e,["reaction","staticIcon","title","isInactive"])))}e.sd||((0,t.Q6)("saveSession",(()=>{I||w()})),(0,t.Q6)("reset",(()=>{localStorage.removeItem(e.Uh),I&&C()}))),(0,t.Q6)("init",(()=>{const t=(0,f.Xh)(u);return function(t){if(!e.sd)return(0,m.ti)(!0)?(w(),function(t){e.eM&&console.time("global-state-cache-read");const r=localStorage.getItem(e.Uh),o=r?JSON.parse(r):void 0;e.eM&&console.timeEnd("global-state-cache-read"),o&&function(t,n){if("shouldAutoDownloadMediaFromContacts"in t.settings.byKey){const{shouldAutoDownloadMediaFromContacts:e,shouldAutoDownloadMediaInPrivateChats:n,shouldAutoDownloadMediaInGroups:r,shouldAutoDownloadMediaInChannels:o,shouldAutoPlayVideos:d,shouldAutoPlayGifs:a,...u}=t.settings.byKey;t.settings.byKey={...u,canAutoLoadPhotoFromContacts:e,canAutoLoadVideoFromContacts:e,canAutoLoadPhotoInPrivateChats:n,canAutoLoadVideoInPrivateChats:n,canAutoLoadPhotoInGroups:r,canAutoLoadVideoInGroups:r,canAutoLoadPhotoInChannels:o,canAutoLoadVideoInChannels:o,canAutoPlayVideos:d,canAutoPlayGifs:a}}t.settings.byKey={...n.settings.byKey,...t.settings.byKey},t.settings.themes={...n.settings.themes,...t.settings.themes},t.chatFolders={...n.chatFolders,...t.chatFolders},t.stickers.greeting||(t.stickers.greeting=n.stickers.greeting),t.activeDownloads||(t.activeDownloads={byChatId:{}}),t.serviceNotifications||(t.serviceNotifications=[]),void 0===t.audioPlayer.volume&&(t.audioPlayer.volume=e.Qx),void 0===t.audioPlayer.playbackRate&&(t.audioPlayer.playbackRate=e.mw),t.groupCalls||(t.groupCalls=n.groupCalls),t.users.statusesById||(t.users.statusesById={}),t.messages.sponsoredByChatId||(t.messages.sponsoredByChatId={}),t.activeReactions||(t.activeReactions={})}(o,t);const d={...t,...o},a=n.wB?void 0:(0,p.V)();return{...d,messages:{...d.messages,messageLists:a?[a]:[]}}}(t)):void C()}(t)||t}));var R=s(4050),x=s(3858);const B="tt-active-tab",O=String(Date.now()+Math.random());let Z;localStorage.setItem(B,O);const F=window.setInterval((()=>{Z&&localStorage.getItem(B)!==O&&(Z(),clearInterval(F))}),2e3);var D=s(706),_=(s(7895),s(3781),s(1363),s(9667),s(4907),s(6590)),$=s(8332),U=s(1212),j=s(1394);const V=["400 1em Roboto","500 1em Roboto"];function W(){if("fonts"in document)return Promise.all(V.map((e=>document.fonts.load(e))))}var G=s(647),H=s(9203),z=s(6752),Q=s(4128),K=s(5523),J=s(2162);function q(){const{listIds:e,byId:n}=(0,t.Rd)().chats;if(e.active)return Promise.all(e.active.slice(0,10).map((e=>{const t=n[e];if(!t)return;const r=(0,$.RT)(t);return r?G.he(r,i.IU.BlobUrl):void 0})))}const Y={main:()=>Promise.all([(0,H.$y)(H.gl.Main,"Main").then(W),q(),(0,j.pt)(K)]),authPhoneNumber:()=>Promise.all([W(),(0,j.pt)(Q)]),authCode:()=>(0,j.pt)(J),authPassword:()=>(0,j.pt)(J),authQrCode:W},X=(0,t.c$)((e=>{const t=(0,h.Pu)(e),{background:n,backgroundColor:r}=e.settings.themes[t]||{};return{shouldSkipHistoryAnimations:e.shouldSkipHistoryAnimations,uiReadyState:e.uiReadyState,hasCustomBackground:Boolean(n),hasCustomBackgroundColor:Boolean(r),isRightColumnShown:(0,h.Jf)(e),leftColumnWidth:e.leftColumnWidth}}))((e=>{let{page:n,children:r,hasCustomBackground:o,hasCustomBackgroundColor:d,isRightColumnShown:a,shouldSkipHistoryAnimations:u,leftColumnWidth:s}=e;const{setIsUiReady:i}=(0,t.uC)(),[l,f]=(0,D.Z)(),{shouldRender:h,transitionClassNames:m}=(0,U.Z)(!l,void 0,!0);return(0,R.d4)((()=>{let e;return Promise.race([(0,c.wO)(700),(async()=>{try{await Y[n]()}catch(e){}})()]).then((()=>{f(),i({uiReadyState:1}),e=window.setTimeout((()=>{i({uiReadyState:2})}),1e3)})),()=>{e&&(clearTimeout(e),e=void 0),i({uiReadyState:0})}}),[]),R.ZP.createElement("div",{id:"UiLoader"},r,h&&!u&&R.ZP.createElement("div",{className:(0,z.Z)("mask",m)},"main"===n?R.ZP.createElement(R.ZP.Fragment,null,R.ZP.createElement("div",{className:"left",style:s?`width: ${s}px`:void 0}),R.ZP.createElement("div",{className:(0,z.Z)("middle",o&&"custom-bg-image",d&&"custom-bg-color",a&&"with-right-column")}),a&&R.ZP.createElement("div",{className:"right"})):R.ZP.createElement("div",{className:"blank"})))}));var ee=s(6272),te=s(711),ne=s(9107);const re=(e,t)=>{const[n,r]=(0,R.eJ)();return e&&te.Pn(e,t).then(r),n};function oe(){let e=navigator.language;return e&&"pt-br"!==e&&(e=e.substr(0,2)),e}var de=s(231),ae=s(4605),ue=s(7687),se=s(4288),ie=s(5765),ce=s(2340),le=s(4284),fe=s(9290),he=s(3106),me=s(8964),pe=s(9204);const ge=200+e.fK,ve=(0,R.X$)((0,t.c$)((e=>{const{countryList:{phoneCodes:t}}=e;return{phoneCodeList:t}}))((e=>{let{id:t,value:n,isLoading:r,onChange:o,phoneCodeList:d}=e;const a=(0,ne.Z)(),u=(0,R.sO)(null),[s,i]=(0,R.eJ)(),[c,l]=(0,R.eJ)([]),f=(0,R.I4)((e=>{i(e),l(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!t.length)return e;const n=(0,ie.W)(t);return e.filter((e=>n(e.defaultName)||e.name&&n(e.name)))}(d,e))}),[d]);(0,fe.Z)((e=>{let[t]=e;0===(null==t?void 0:t.length)&&d.length>0&&f(s)}),[d,f]);const h=(0,R.I4)((e=>{o(e),setTimeout((()=>f(void 0)),ge)}),[o,f]),m=(0,R.I4)((e=>{f(e.currentTarget.value)}),[f]),p=(0,R.I4)((e=>{if(8!==e.keyCode)return;const t=e.currentTarget;n&&void 0===s&&(t.value=""),f(t.value)}),[s,f,n]);return R.ZP.createElement(he.Z,{className:"CountryCodeInput",trigger:e=>{let{onTrigger:o,isOpen:d}=e;const i=()=>{if(d)return;setTimeout((()=>{u.current.select()}),50),o();const e=document.getElementById("auth-phone-number-form");e.scrollTo({top:e.scrollHeight,behavior:"smooth"})},c=null!=s?s:(null==n?void 0:n.name)||(null==n?void 0:n.defaultName)||"";return R.ZP.createElement("div",{className:(0,z.Z)("input-group",n&&"touched")},R.ZP.createElement("input",{ref:u,className:(0,z.Z)("form-control",d&&"focus"),type:"text",id:t,value:c,autoComplete:"off",onClick:i,onFocus:i,onInput:e=>{m(e),i()},onKeyDown:p}),R.ZP.createElement("label",null,a("Login.SelectCountry.Title")),r?R.ZP.createElement(pe.Z,{color:"black"}):R.ZP.createElement("i",{onClick:i,className:(0,z.Z)("css-icon-down",d&&"open")}))}},c.map((e=>R.ZP.createElement(me.Z,{key:e.iso2,className:n&&e.iso2===n.iso2?"selected":"",onClick:()=>h(e)},R.ZP.createElement("span",{className:"country-flag"},(0,ce.Z)((0,le.Wg)(e.iso2),["hq_emoji"])),R.ZP.createElement("span",{className:"country-name"},e.name||e.defaultName),R.ZP.createElement("span",{className:"country-code"},e.countryCode)))),!c.length&&R.ZP.createElement(me.Z,{key:"no-results",className:"no-results",disabled:!0},R.ZP.createElement("span",null,a("lng_country_none"))))})));let ye=!1;const be=(0,R.X$)((0,t.c$)((e=>{const{settings:{byKey:{language:t}},countryList:{phoneCodes:n}}=e;return{...(0,f.ei)(e,["connectionState","authState","authPhoneNumber","authIsLoading","authIsLoadingQrCode","authError","authRememberMe","authNearestCountry"]),language:t,phoneCodeList:n}}))((e=>{let{connectionState:r,authState:o,authPhoneNumber:d,authIsLoading:a,authIsLoadingQrCode:u,authError:s,authRememberMe:i,authNearestCountry:c,phoneCodeList:l,language:f}=e;const{setAuthPhoneNumber:h,setAuthRememberMe:m,loadNearestCountry:p,loadCountryList:g,clearAuthError:v,goToAuthQrCode:y,setSettingOption:b}=(0,t.uC)(),I=(0,ne.Z)(),w=(0,R.sO)(null),C=oe(),S=re(C,"ContinueOnThisLanguage"),[E,P]=(0,R.eJ)(),[M,A]=(0,R.eJ)(),[k,T]=(0,R.eJ)(!1),[N,L]=(0,R.eJ)(),[x,B,O]=(0,D.Z)(),Z=E?`+${E.countryCode} ${M||""}`:M,F=Z&&Z.replace(/[^\d]+/g,"").length>=7;(0,R.d4)((()=>{n.$b||w.current.focus()}),[E]),(0,R.d4)((()=>{"connectionStateReady"!==r||c||p()}),[r,c,p]),(0,R.d4)((()=>{"connectionStateReady"===r&&g({langCode:f})}),[r,f,g]),(0,R.d4)((()=>{c&&l&&!E&&!k&&P((0,ee.U9)(l,c)[0])}),[E,c,k,l]);const _=(0,R.I4)((e=>{e.length||A("");const t=l&&(0,ee.g3)(l,e),n=!E||t&&t.iso2!==E.iso2||!t&&e.length?t:E;(!E||!n||n&&n.iso2!==E.iso2)&&P(n),A((0,ee.un)(e,n))}),[l,E]),$=(0,R.I4)((()=>{B(),(0,te.m0)(C,(()=>{O(),b({language:C})}))}),[B,b,C,O]);(0,R.d4)((()=>{void 0===M&&d&&_(d)}),[d,M,_]),(0,R.bt)((()=>{w.current&&N&&w.current.setSelectionRange(...N)}),[N]);const U=(0,R.sO)(!1),V=(0,R.I4)((()=>{U.current=!0,requestAnimationFrame((()=>{U.current=!1}))}),[]),G=(0,R.I4)((e=>{P(e),A("")}),[]),H=(0,R.I4)((e=>{s&&v(),ye||(ye=!0,W(),(0,j.pt)(J));const{value:t,selectionStart:r,selectionEnd:o}=e.target;L(r&&o&&o1&&!U.current;_(d?`${E.countryCode} ${t}`:t)}),[s,v,E,Z,_]),z=(0,R.I4)((e=>{m(e.target.checked)}),[m]),Q="authorizationStateWaitPhoneNumber"===o;return R.ZP.createElement("div",{id:"auth-phone-number-form",className:"custom-scroll"},R.ZP.createElement("div",{className:"auth-form"},R.ZP.createElement("div",{id:"logo"}),R.ZP.createElement("h2",null,"Telegram"),R.ZP.createElement("p",{className:"note"},I("StartText")),R.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),a||F&&h({phoneNumber:Z})}},R.ZP.createElement(ve,{id:"sign-in-phone-code",value:E,isLoading:!c&&!E,onChange:G}),R.ZP.createElement(ue.Z,{ref:w,id:"sign-in-phone-number",label:I("Login.PhonePlaceholder"),value:Z,error:s&&I(s),inputMode:"tel",onChange:H,onPaste:n.s$?V:void 0}),R.ZP.createElement(ae.Z,{id:"sign-in-keep-session",label:"Keep me signed in",checked:Boolean(i),onChange:z}),F&&(Q?R.ZP.createElement(de.Z,{type:"submit",ripple:!0,isLoading:a},I("Login.Next")):R.ZP.createElement(se.Z,null)),Q&&R.ZP.createElement(de.Z,{isText:!0,ripple:!0,isLoading:u,onClick:y},I("Login.QR.Login")),C&&C!==f&&S&&R.ZP.createElement(de.Z,{isText:!0,isLoading:x,onClick:$},S))))})));var Ie=s(8778);const we=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Auth,"AuthCode");return e?R.ZP.createElement(e,null):R.ZP.createElement(se.Z,null)})),Ce=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Auth,"AuthPassword");return e?R.ZP.createElement(e,null):R.ZP.createElement(se.Z,null)})),Se=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Auth,"AuthRegister");return e?R.ZP.createElement(e,null):R.ZP.createElement(se.Z,null)}));let Ee=null;class Pe{}Pe.render=function(e,t){Ee(e,t)},self.QrCreator=Pe,function(e){function t(t,n,r,o){var d={},a=e(r,n);a.u(t),a.J(),o=o||0;var u=a.h(),s=a.h()+2*o;return d.text=t,d.level=n,d.version=r,d.O=s,d.a=function(e,t){return t-=o,!(0>(e-=o)||e>=u||0>t||t>=u)&&a.a(e,t)},d}function n(e,t,n,r,o,d,a,u,s,i){function c(t,n,r,o,a,u,s){t?(e.lineTo(n+u,r+s),e.arcTo(n,r,o,a,d)):e.lineTo(n,r)}a?e.moveTo(t+d,n):e.moveTo(t,n),c(u,r,n,r,o,-d,0),c(s,r,o,t,o,0,-d),c(i,t,o,t,n,d,0),c(a,t,n,r,n,0,d)}function r(e,t,n,r,o,d,a,u,s,i){function c(t,n,r,o){e.moveTo(t+r,n),e.lineTo(t,n),e.lineTo(t,n+o),e.arcTo(t,n,t+r,n,d)}a&&c(t,n,d,d),u&&c(r,n,-d,d),s&&c(r,o,-d,-d),i&&c(t,o,d,-d)}function o(e,o){e:{var d=o.text,a=o.v,u=o.N,s=o.K,i=o.P;for(u=Math.max(1,u||1),s=Math.min(40,s||40);u<=s;u+=1)try{var c=t(d,a,u,i);break e}catch(e){}c=void 0}if(!c)return null;for(d=e.getContext("2d"),o.background&&(d.fillStyle=o.background,d.fillRect(o.left,o.top,o.size,o.size)),a=c.O,s=o.size/a,d.beginPath(),i=0;iMath.round(e*t.size))),"linear-gradient"===r)var d=e.createLinearGradient.apply(e,n);else{if("radial-gradient"!==r)throw Error("Unsupported fill");d=e.createRadialGradient.apply(e,n)}o.forEach((([e,t])=>{d.addColorStop(e,t)})),e.fillStyle=d}}(d,o),d.fill(),e}var d={minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:.5,quiet:0};Ee=function(e,t){var n={};Object.assign(n,d,e),n.N=n.minVersion,n.K=n.maxVersion,n.v=n.ecLevel,n.left=n.left,n.top=n.top,n.size=n.size,n.fill=n.fill,n.background=n.background,n.text=n.text,n.R=n.radius,n.P=n.quiet,t instanceof HTMLCanvasElement?(t.width===n.size&&t.height===n.size||(t.width=n.size,t.height=n.size),t.getContext("2d").clearRect(0,0,t.width,t.height),o(t,n)):((e=document.createElement("canvas")).width=n.size,e.height=n.size,n=o(e,n),t.appendChild(n))}}(function(){function e(o,a){function u(e,t){for(var n=-1;7>=n;n+=1)if(!(-1>=e+n||l<=e+n))for(var r=-1;7>=r;r+=1)-1>=t+r||l<=t+r||(c[e+n][t+r]=0<=n&&6>=n&&(0==r||6==r)||0<=r&&6>=r&&(0==n||6==n)||2<=n&&4>=n&&2<=r&&4>=r)}function s(e,n){for(var a=l=4*o+17,s=Array(a),m=0;m=v;v+=1)for(var y=-2;2>=y;y+=1)c[p+v][g+y]=-2==v||2==v||-2==y||2==y||0==v&&0==y}for(a=8;as;s+=1)m=!e&&1==(a>>s&1),c[6>s?s:8>s?s+1:l-15+s][8]=m,c[8][8>s?l-s-1:9>s?15-s:14-s]=m;if(c[l-8][8]=!e,7<=o){for(a=r.A(o),s=0;18>s;s+=1)m=!e&&1==(a>>s&1),c[Math.floor(s/3)][s%3+l-8-3]=m;for(s=0;18>s;s+=1)m=!e&&1==(a>>s&1),c[s%3+l-8-3][Math.floor(s/3)]=m}if(null==f){for(e=d.I(o,i),a=function(){var e=[],t=0,n={B:function(){return e},c:function(t){return 1==(e[Math.floor(t/8)]>>>7-t%8&1)},put:function(e,t){for(var r=0;r>>t-r-1&1))},f:function(){return t},m:function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1}};return n}(),s=0;s8*m)throw Error("code length overflow. ("+a.f()+">"+8*m+")");for(a.f()+4<=8*m&&a.put(0,4);0!=a.f()%8;)a.m(!1);for(;!(a.f()>=8*m||(a.put(236,8),a.f()>=8*m));)a.put(17,8);var b=0;for(m=s=0,p=Array(e.length),g=Array(e.length),v=0;vv;v+=1)null==c[s][g-v]&&(y=!1,p>>m&1)),n(s,g-v)&&(y=!y),c[s][g-v]=y,-1==--m&&(p+=1,m=7));if(0>(s+=a)||l<=s){s-=a,a=-a;break}}}var i=n[a],c=null,l=0,f=null,h=[],m={u:function(t){t=function(t){var n=e.s(t);return{S:function(){return 4},b:function(){return n.length},write:function(e){for(var t=0;te||l<=e||0>t||l<=t)throw Error(e+","+t);return c[e][t]},h:function(){return l},J:function(){for(var e=0,t=0,n=0;8>n;n+=1){s(!0,n);var o=r.D(m);(0==n||e>o)&&(e=o,t=n)}s(!1,t)}};return m}function t(e,n){if(void 0===e.length)throw Error(e.length+"/"+n);var r=function(){for(var t=0;td.b()-e.b())return d;for(var n=o.g(d.c(0))-o.g(e.c(0)),r=Array(d.b()),a=0;ar?t.push(r):2048>r?t.push(192|r>>6,128|63&r):55296>r||57344<=r?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t};var n={L:1,M:0,Q:3,H:2},r=function(){function e(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t}var n=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r={w:function(t){for(var n=t<<10;0<=e(n)-e(1335);)n^=1335<t||40t?8:16},D:function(e){for(var t=e.h(),n=0,r=0;r=u;u+=1)if(!(0>r+u||t<=r+u))for(var s=-1;1>=s;s+=1)0>o+s||t<=o+s||(0!=u||0!=s)&&a==e.a(r+u,o+s)&&(d+=1);5n;n+=1)e[n]=1<n;n+=1)e[n]=e[n-4]^e[n-5]^e[n-6]^e[n-8];for(n=0;255>n;n+=1)t[e[n]]=n;return{g:function(e){if(1>e)throw Error("glog("+e+")");return t[e]},i:function(t){for(;0>t;)t+=255;for(;256<=t;)t-=255;return e[t]}}}(),d=function(){function e(e,r){switch(r){case n.L:return t[4*(e-1)];case n.M:return t[4*(e-1)+1];case n.Q:return t[4*(e-1)+2];case n.H:return t[4*(e-1)+3]}}var t=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],r={I:function(t,n){var r=e(t,n);if(void 0===r)throw Error("bad rs block @ typeNumber:"+t+"/errorCorrectLevel:"+n);t=r.length/3,n=[];for(var o=0;o{const{connectionState:t,authState:n,authQrCode:r,settings:{byKey:{language:o}}}=e;return{connectionState:t,authState:n,authQrCode:r,language:o}}))((n=>{let{connectionState:r,authState:o,authQrCode:d,language:a}=n;const{returnToAuthPhoneNumber:u,setSettingOption:s}=(0,t.uC)(),i=oe(),c=(0,ne.Z)(),l=(0,R.sO)(null),f=re(i,"ContinueOnThisLanguage"),[h,m,p]=(0,D.Z)();(0,R.d4)((()=>{if(!d||"connectionStateReady"!==r)return;const e=l.current;e.innerHTML="",e.classList.remove("pre-animate"),Me.render({text:`tg://login?token=${d.token}`,radius:.5,ecLevel:"M",fill:"#4E96D4",size:280},e)}),[r,d]),(0,R.d4)((()=>{"connectionStateReady"===r&&(0,te.m0)(e.sR)}),[r]);const g=(0,R.I4)((()=>{m(),(0,te.m0)(i,(()=>{p(),s({language:i})}))}),[m,s,i,p]),v="authorizationStateWaitQrCode"===o;return R.ZP.createElement("div",{id:"auth-qr-form",className:"custom-scroll"},R.ZP.createElement("div",{className:"auth-form qr"},d?R.ZP.createElement("div",{key:"qr-container",className:"qr-container pre-animate",ref:l}):R.ZP.createElement("div",{key:"qr-loading",className:"qr-loading"},R.ZP.createElement(se.Z,null)),R.ZP.createElement("h3",null,c("Login.QR.Title")),R.ZP.createElement("ol",null,R.ZP.createElement("li",null,R.ZP.createElement("span",null,c("Login.QR.Help1"))),R.ZP.createElement("li",null,R.ZP.createElement("span",null,(0,ce.Z)(c("Login.QR.Help2"),["simple_markdown"]))),R.ZP.createElement("li",null,R.ZP.createElement("span",null,c("Login.QR.Help3")))),v&&R.ZP.createElement(de.Z,{isText:!0,onClick:u},c("Login.QR.Cancel")),i&&i!==a&&f&&R.ZP.createElement(de.Z,{isText:!0,isLoading:h,onClick:g},f)))}))),ke=(0,R.X$)((0,t.c$)((e=>(0,f.ei)(e,["authState"])))((e=>{let{authState:r}=e;const{reset:o,initApi:d,returnToAuthPhoneNumber:a,goToAuthQrCode:u}=(0,t.uC)();(0,R.d4)((()=>{o(),d()}),[o,d]);const s="iOS"===n.Lt||"Android"===n.Lt;switch((0,_.ZP)(!s&&"authorizationStateWaitPhoneNumber"===r||s&&"authorizationStateWaitQrCode"===r,(()=>{s?a():u()})),(0,R.d4)((()=>(x.Z.disableRefresh(),()=>{x.Z.enableRefresh()})),[]),r){case"authorizationStateWaitCode":return R.ZP.createElement(X,{page:"authCode",key:"authCode"},R.ZP.createElement(we,null));case"authorizationStateWaitPassword":return R.ZP.createElement(X,{page:"authPassword",key:"authPassword"},R.ZP.createElement(Ce,null));case"authorizationStateWaitRegistration":return R.ZP.createElement(Se,null);case"authorizationStateWaitPhoneNumber":return R.ZP.createElement(X,{page:"authPhoneNumber",key:"authPhoneNumber"},R.ZP.createElement(be,null));case"authorizationStateWaitQrCode":return R.ZP.createElement(X,{page:"authQrCode",key:"authQrCode"},R.ZP.createElement(Ae,null));default:return s?R.ZP.createElement(X,{page:"authPhoneNumber",key:"authPhoneNumber"},R.ZP.createElement(be,null)):R.ZP.createElement(X,{page:"authQrCode",key:"authQrCode"},R.ZP.createElement(Ae,null))}}))),Te=(0,R.X$)((()=>{const e=(0,Ie.Z)(H.gl.Main,"Main");return e?R.ZP.createElement(e,null):void 0}));var Ne=s(5359);const Le=()=>R.ZP.createElement("div",{id:"AppInactive"},R.ZP.createElement("div",{className:"content"},R.ZP.createElement("img",{src:Ne,alt:""}),R.ZP.createElement("h3",{className:"title"},"Such error, many tabs"),R.ZP.createElement("div",{className:"description"},"Telegram supports only one active tab with the app.",R.ZP.createElement("br",null),"Please reload this page to continue using this tab or close it."),R.ZP.createElement("div",{className:"actions"},R.ZP.createElement(de.Z,{isText:!0,ripple:!0,onClick:()=>{window.location.reload()}},"Reload app"))));function Re(){return t.ZP.createElement(X,{page:"main",key:"main"},t.ZP.createElement(Te,null))}const xe=(0,t.c$)((e=>(0,f.ei)(e,["authState"])))((n=>{let{authState:r}=n;const{disconnect:o}=(0,t.uC)(),[d,a]=(0,D.Z)(!1);if((0,R.d4)((()=>{(0,x.z)(),Z=()=>{o(),document.title=`${e.Ti}${e.ou}`,a()}}),[o,a]),d)return t.ZP.createElement(Le,null);if(r)switch(r){case"authorizationStateWaitPhoneNumber":case"authorizationStateWaitCode":case"authorizationStateWaitPassword":case"authorizationStateWaitRegistration":case"authorizationStateWaitQrCode":return t.ZP.createElement(ke,null);case"authorizationStateClosed":case"authorizationStateClosing":case"authorizationStateLoggingOut":case"authorizationStateReady":return Re()}return(0,m.ti)(!0)?Re():t.ZP.createElement(ke,null)}));e.eM&&console.log(">>> INIT"),(0,t.uC)().init(),e.eM&&console.log(">>> START INITIAL RENDER"),a.Z.render(t.ZP.createElement(xe,null),document.getElementById("root")),e.eM&&console.log(">>> FINISH INITIAL RENDER"),document.addEventListener("dblclick",(()=>{console.warn("GLOBAL STATE",(0,t.Rd)())}))})()})(); +//# sourceMappingURL=main.6f6178fe09cee789a987.js.map \ No newline at end of file diff --git a/dist/main.6f6178fe09cee789a987.js.map b/dist/main.6f6178fe09cee789a987.js.map new file mode 100644 index 000000000..2c9fd21d0 --- /dev/null +++ b/dist/main.6f6178fe09cee789a987.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.6f6178fe09cee789a987.js","mappings":"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AAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GACnf,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EACrf,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAChf,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAClf,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GA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","sources":["webpack://telegram-t/webpack/runtime/create fake namespace object","webpack://telegram-t/webpack/runtime/load script","webpack://telegram-t/webpack/runtime/css loading","webpack://telegram-t/./src/api/gramjs/worker/provider.ts","webpack://telegram-t/./src/api/types/media.ts","webpack://telegram-t/./src/api/types/messages.ts","webpack://telegram-t/./src/lib/punycode.js","webpack://telegram-t/./src/components/common/SafeLink.tsx","webpack://telegram-t/./src/components/common/helpers/documentInfo.ts","webpack://telegram-t/./src/components/common/helpers/parseEmojiOnlyString.ts","webpack://telegram-t/./src/components/common/UserLink.tsx","webpack://telegram-t/./src/components/common/MessageLink.tsx","webpack://telegram-t/./src/components/common/ChatLink.tsx","webpack://telegram-t/./src/components/common/GroupCallLink.tsx","webpack://telegram-t/./src/components/common/helpers/renderActionMessageText.tsx","webpack://telegram-t/./src/components/common/helpers/renderMessageText.ts","webpack://telegram-t/./src/components/common/helpers/renderText.tsx","webpack://telegram-t/./src/components/common/spoiler/Spoiler.tsx","webpack://telegram-t/./src/components/common/helpers/renderTextWithEntities.tsx","webpack://telegram-t/./src/components/middle/helpers/preventMessageInputBlur.ts","webpack://telegram-t/./src/components/middle/message/MentionLink.tsx","webpack://telegram-t/./src/components/ui/Button.tsx","webpack://telegram-t/./src/components/ui/Checkbox.tsx","webpack://telegram-t/./src/components/ui/DropdownMenu.tsx","webpack://telegram-t/./src/components/ui/InputText.tsx","webpack://telegram-t/./src/components/ui/Link.tsx","webpack://telegram-t/./src/components/ui/Loading.tsx","webpack://telegram-t/./src/components/ui/Menu.tsx","webpack://telegram-t/./src/components/ui/MenuItem.tsx","webpack://telegram-t/./src/components/ui/RippleEffect.tsx","webpack://telegram-t/./src/components/ui/Spinner.tsx","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/hooks/useEffectWithPrevDeps.ts","webpack://telegram-t/./src/hooks/useFlag.ts","webpack://telegram-t/./src/hooks/useForceUpdate.ts","webpack://telegram-t/./src/hooks/useHeavyAnimationCheck.ts","webpack://telegram-t/./src/hooks/useHistoryBack.ts","webpack://telegram-t/./src/hooks/useKeyboardListNavigation.ts","webpack://telegram-t/./src/hooks/useLang.ts","webpack://telegram-t/./src/hooks/useModuleLoader.ts","webpack://telegram-t/./src/hooks/useOnChange.ts","webpack://telegram-t/./src/hooks/usePrevious.ts","webpack://telegram-t/./src/hooks/useShowTransition.ts","webpack://telegram-t/./src/hooks/useVirtualBackdrop.ts","webpack://telegram-t/./src/lib/teact/dom-events.ts","webpack://telegram-t/./src/lib/teact/teact-dom.ts","webpack://telegram-t/./src/lib/teact/teact.ts","webpack://telegram-t/./src/lib/teact/teactn.tsx","webpack://telegram-t/./src/lib/twemojiRegex.js","webpack://telegram-t/./src/modules/actions/api/initial.ts","webpack://telegram-t/./src/modules/actions/api/settings.ts","webpack://telegram-t/./src/modules/actions/apiUpdaters/initial.ts","webpack://telegram-t/./src/modules/actions/ui/initial.ts","webpack://telegram-t/./src/modules/actions/ui/settings.ts","webpack://telegram-t/./src/modules/helpers/chats.ts","webpack://telegram-t/./src/modules/helpers/messages.ts","webpack://telegram-t/./src/modules/helpers/messageSummary.ts","webpack://telegram-t/./src/modules/helpers/messageMedia.ts","webpack://telegram-t/./src/modules/helpers/localSearch.ts","webpack://telegram-t/./src/modules/helpers/payments.ts","webpack://telegram-t/./src/modules/helpers/reactions.ts","webpack://telegram-t/./src/modules/helpers/users.ts","webpack://telegram-t/./src/modules/reducers/chats.ts","webpack://telegram-t/./src/modules/reducers/symbols.ts","webpack://telegram-t/./src/modules/reducers/users.ts","webpack://telegram-t/./src/modules/reducers/globalSearch.ts","webpack://telegram-t/./src/modules/reducers/localSearch.ts","webpack://telegram-t/./src/modules/reducers/management.ts","webpack://telegram-t/./src/modules/reducers/settings.ts","webpack://telegram-t/./src/modules/reducers/twoFaSettings.ts","webpack://telegram-t/./src/modules/reducers/payments.ts","webpack://telegram-t/./src/modules/reducers/messages.ts","webpack://telegram-t/./src/modules/selectors/chats.ts","webpack://telegram-t/./src/modules/selectors/symbols.ts","webpack://telegram-t/./src/modules/selectors/messages.ts","webpack://telegram-t/./src/modules/selectors/localSearch.ts","webpack://telegram-t/./src/modules/selectors/management.ts","webpack://telegram-t/./src/modules/selectors/ui.ts","webpack://telegram-t/./src/modules/selectors/globalSearch.ts","webpack://telegram-t/./src/modules/selectors/payments.ts","webpack://telegram-t/./src/modules/selectors/settings.ts","webpack://telegram-t/./src/modules/selectors/users.ts","webpack://telegram-t/./src/types/index.ts","webpack://telegram-t/./src/util/animation.ts","webpack://telegram-t/./src/util/appBadge.ts","webpack://telegram-t/./src/util/arePropsShallowEqual.ts","webpack://telegram-t/./src/util/buildClassName.ts","webpack://telegram-t/./src/util/cacheApi.ts","webpack://telegram-t/./src/util/callbacks.ts","webpack://telegram-t/./src/util/captureEscKeyListener.ts","webpack://telegram-t/./src/util/captureKeyboardListeners.ts","webpack://telegram-t/./src/util/dateFormat.ts","webpack://telegram-t/./src/util/emoji.ts","webpack://telegram-t/./src/util/ensureProtocol.ts","webpack://telegram-t/./src/util/environmentWebp.ts","webpack://telegram-t/./src/util/environmentSystemTheme.ts","webpack://telegram-t/./src/util/environment.ts","webpack://telegram-t/./src/util/files.ts","webpack://telegram-t/./src/util/folderManager.ts","webpack://telegram-t/./src/util/formatCurrency.ts","webpack://telegram-t/./src/util/generateIdFor.ts","webpack://telegram-t/./src/util/getReadableErrorText.ts","webpack://telegram-t/./src/util/handleError.ts","webpack://telegram-t/./src/util/iteratees.ts","webpack://telegram-t/./src/util/langProvider.ts","webpack://telegram-t/./src/util/oggToWav.ts","webpack://telegram-t/./src/util/mediaLoader.ts","webpack://telegram-t/./src/util/memo.ts","webpack://telegram-t/./src/util/moduleLoader.ts","webpack://telegram-t/./src/util/notifications.ts","webpack://telegram-t/./src/util/permanentWebVersion.ts","webpack://telegram-t/./src/util/phoneNumber.ts","webpack://telegram-t/./src/util/routing.ts","webpack://telegram-t/./src/util/schedulers.ts","webpack://telegram-t/./src/util/searchWords.ts","webpack://telegram-t/./src/util/serverTime.ts","webpack://telegram-t/./node_modules/idb-keyval/dist/index.js","webpack://telegram-t/./node_modules/safari-14-idb-fix/dist/index.js","webpack://telegram-t/./src/util/sessions.ts","webpack://telegram-t/./src/util/switchTheme.ts","webpack://telegram-t/./src/util/textFormat.ts","webpack://telegram-t/./src/util/trimText.ts","webpack://telegram-t/./src/util/webpToPng.ts","webpack://telegram-t/./src/util/websync.ts","webpack://telegram-t/./src/util/windowSize.ts","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/compat get default export","webpack://telegram-t/webpack/runtime/define property getters","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/make namespace object","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/jsonp chunk loading","webpack://telegram-t/./src/util/setupServiceWorker.ts","webpack://telegram-t/./src/global/initial.ts","webpack://telegram-t/./src/global/cache.ts","webpack://telegram-t/./src/global/index.ts","webpack://telegram-t/./src/util/activeTabMonitor.ts","webpack://telegram-t/./src/util/fonts.ts","webpack://telegram-t/./src/components/common/UiLoader.tsx","webpack://telegram-t/./src/hooks/useLangString.ts","webpack://telegram-t/./src/components/auth/helpers/getSuggestedLanguage.ts","webpack://telegram-t/./src/components/auth/CountryCodeInput.tsx","webpack://telegram-t/./src/components/auth/AuthPhoneNumber.tsx","webpack://telegram-t/./src/components/auth/AuthCode.async.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.async.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.async.tsx","webpack://telegram-t/./node_modules/qr-creator/dist/qr-creator.es6.min.js","webpack://telegram-t/./src/components/auth/AuthQrCode.tsx","webpack://telegram-t/./src/components/auth/Auth.tsx","webpack://telegram-t/./src/components/main/Main.async.tsx","webpack://telegram-t/./src/components/main/AppInactive.tsx","webpack://telegram-t/./src/App.tsx","webpack://telegram-t/./src/index.tsx"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"telegram-t:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = (chunkId, fullhref, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"47\":1,\"126\":1,\"133\":1,\"472\":1,\"538\":1,\"640\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","import { Api } from '../../../lib/gramjs';\nimport { ApiInitialArgs, ApiOnProgress, OnApiUpdate } from '../../types';\nimport { Methods, MethodArgs, MethodResponse } from '../methods/types';\nimport { WorkerMessageEvent, OriginRequest } from './types';\n\nimport { DEBUG } from '../../../config';\nimport generateIdFor from '../../../util/generateIdFor';\nimport { pause } from '../../../util/schedulers';\n\ntype RequestStates = {\n messageId: string;\n resolve: Function;\n reject: Function;\n callback?: AnyToVoidFunction;\n};\n\nconst HEALTH_CHECK_TIMEOUT = 150;\nconst HEALTH_CHECK_MIN_DELAY = 5 * 1000; // 5 sec\n\nlet worker: Worker;\nconst requestStates = new Map();\nconst requestStatesByCallback = new Map();\n\n// TODO Re-use `util/WorkerConnector.ts`\n\nexport function initApi(onUpdate: OnApiUpdate, initialArgs: ApiInitialArgs) {\n if (!worker) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD WORKER');\n }\n\n worker = new Worker(new URL('./worker.ts', import.meta.url));\n subscribeToWorker(onUpdate);\n\n if (initialArgs.platform === 'iOS') {\n setupIosHealthCheck();\n }\n }\n\n return makeRequest({\n type: 'initApi',\n args: [initialArgs],\n });\n}\n\nexport function callApi(fnName: T, ...args: MethodArgs) {\n if (!worker) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('API is not initialized');\n }\n\n return undefined;\n }\n\n const promise = makeRequest({\n type: 'callMethod',\n name: fnName,\n args,\n });\n\n // Some TypeScript magic to make sure `VirtualClass` is never returned from any method\n if (DEBUG) {\n (async () => {\n try {\n type ForbiddenTypes =\n Api.VirtualClass\n | (Api.VirtualClass | undefined)[];\n type ForbiddenResponses =\n ForbiddenTypes\n | (AnyLiteral & { [k: string]: ForbiddenTypes });\n\n // Unwrap all chained promises\n const response = await promise;\n // Make sure responses do not include `VirtualClass` instances\n const allowedResponse: Exclude = response;\n // Suppress \"unused variable\" constraint\n void allowedResponse;\n } catch (err) {\n // Do noting\n }\n })();\n }\n\n return promise as MethodResponse;\n}\n\nexport function cancelApiProgress(progressCallback: ApiOnProgress) {\n progressCallback.isCanceled = true;\n\n const { messageId } = requestStatesByCallback.get(progressCallback) || {};\n if (!messageId) {\n return;\n }\n\n worker.postMessage({\n type: 'cancelProgress',\n messageId,\n });\n}\n\nfunction subscribeToWorker(onUpdate: OnApiUpdate) {\n worker.addEventListener('message', ({ data }: WorkerMessageEvent) => {\n if (data.type === 'update') {\n onUpdate(data.update);\n } else if (data.type === 'methodResponse') {\n const requestState = requestStates.get(data.messageId);\n if (requestState) {\n if (data.error) {\n requestState.reject(data.error);\n } else {\n requestState.resolve(data.response);\n }\n }\n } else if (data.type === 'methodCallback') {\n requestStates.get(data.messageId)?.callback?.(...data.callbackArgs);\n } else if (data.type === 'unhandledError') {\n throw new Error(data.error?.message);\n }\n });\n}\n\nfunction makeRequest(message: OriginRequest) {\n const messageId = generateIdFor(requestStates);\n const payload: OriginRequest = {\n messageId,\n ...message,\n };\n\n const requestState = { messageId } as RequestStates;\n\n // Re-wrap type because of `postMessage`\n const promise: Promise> = new Promise((resolve, reject) => {\n Object.assign(requestState, { resolve, reject });\n });\n\n if (('args' in payload) && typeof payload.args[1] === 'function') {\n const callback = payload.args.pop() as AnyToVoidFunction;\n requestState.callback = callback;\n requestStatesByCallback.set(callback, requestState);\n }\n\n requestStates.set(messageId, requestState);\n\n promise\n .catch(() => undefined)\n .finally(() => {\n requestStates.delete(messageId);\n\n if (requestState.callback) {\n requestStatesByCallback.delete(requestState.callback);\n }\n });\n\n worker.postMessage(payload);\n\n return promise;\n}\n\nconst startedAt = Date.now();\n\n// Workaround for iOS sometimes stops interacting with worker\nfunction setupIosHealthCheck() {\n window.addEventListener('focus', () => {\n void ensureWorkerPing();\n // Sometimes a single check is not enough\n setTimeout(() => ensureWorkerPing(), 1000);\n });\n}\n\nasync function ensureWorkerPing() {\n try {\n await Promise.race([\n makeRequest({ type: 'ping' }),\n pause(HEALTH_CHECK_TIMEOUT).then(() => Promise.reject(new Error('HEALTH_CHECK_TIMEOUT'))),\n ]);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (Date.now() - startedAt >= HEALTH_CHECK_MIN_DELAY) {\n window.location.reload();\n }\n }\n}\n","// We cache avatars as Data URI for faster initial load\n// and messages media as Blob for smaller size.\n\nexport enum ApiMediaFormat {\n BlobUrl,\n Lottie,\n Progressive,\n Stream,\n}\n\nexport type ApiParsedMedia = string | Blob | ArrayBuffer;\nexport type ApiPreparedMedia = string;\n","import { ApiGroupCall } from './calls';\n\nexport interface ApiDimensions {\n width: number;\n height: number;\n}\n\nexport interface ApiPhotoSize extends ApiDimensions {\n type: 's' | 'm' | 'x' | 'y' | 'z';\n}\n\nexport interface ApiThumbnail extends ApiDimensions {\n dataUri: string;\n}\n\nexport interface ApiPhoto {\n id: string;\n thumbnail?: ApiThumbnail;\n sizes: ApiPhotoSize[];\n blobUrl?: string;\n}\n\nexport interface ApiSticker {\n id: string;\n stickerSetId: string;\n stickerSetAccessHash?: string;\n emoji?: string;\n isLottie: boolean;\n isGif: boolean;\n width?: number;\n height?: number;\n thumbnail?: ApiThumbnail;\n isPreloadedGlobally?: boolean;\n}\n\nexport interface ApiStickerSet {\n archived?: true;\n isLottie?: true;\n isGifs?: true;\n installedDate?: number;\n id: string;\n accessHash: string;\n title: string;\n hasThumbnail?: boolean;\n count: number;\n stickers?: ApiSticker[];\n packs?: Record;\n covers?: ApiSticker[];\n shortName: string;\n}\n\nexport interface ApiVideo {\n id: string;\n mimeType: string;\n duration: number;\n fileName: string;\n width?: number;\n height?: number;\n supportsStreaming?: boolean;\n isRound?: boolean;\n isGif?: boolean;\n thumbnail?: ApiThumbnail;\n blobUrl?: string;\n size: number;\n}\n\nexport interface ApiAudio {\n id: string;\n size: number;\n mimeType: string;\n fileName: string;\n duration: number;\n performer?: string;\n title?: string;\n thumbnailSizes?: ApiPhotoSize[];\n}\n\nexport interface ApiVoice {\n id: string;\n duration: number;\n waveform?: number[];\n}\n\nexport interface ApiDocument {\n id?: string;\n fileName: string;\n size: number;\n timestamp?: number;\n mimeType: string;\n thumbnail?: ApiThumbnail;\n previewBlobUrl?: string;\n mediaType?: 'photo' | 'video';\n mediaSize?: ApiDimensions;\n}\n\nexport interface ApiContact {\n firstName: string;\n lastName: string;\n phoneNumber: string;\n userId: string;\n}\n\nexport interface ApiPollAnswer {\n text: string;\n option: string;\n}\n\nexport interface ApiPollResult {\n isChosen?: true;\n isCorrect?: true;\n option: string;\n votersCount: number;\n}\n\nexport interface ApiPoll {\n id: string;\n summary: {\n closed?: true;\n isPublic?: true;\n multipleChoice?: true;\n quiz?: true;\n question: string;\n answers: ApiPollAnswer[];\n closePeriod?: number;\n closeDate?: number;\n };\n results: {\n results?: ApiPollResult[];\n totalVoters?: number;\n recentVoterIds?: string[];\n solution?: string;\n solutionEntities?: ApiMessageEntity[];\n };\n}\n\nexport interface ApiInvoice {\n text: string;\n title: string;\n photoUrl?: string;\n amount: number;\n currency: string;\n receiptMsgId?: number;\n isTest?: boolean;\n}\n\nexport type ApiNewPoll = {\n summary: ApiPoll['summary'];\n quiz?: {\n correctAnswers: string[];\n solution?: string;\n solutionEntities?: ApiMessageEntity[];\n };\n};\n\nexport interface ApiAction {\n text: string;\n targetUserIds?: string[];\n targetChatId?: string;\n type: 'historyClear' | 'contactSignUp' | 'chatCreate' | 'other';\n photo?: ApiPhoto;\n amount?: number;\n currency?: string;\n translationValues: string[];\n call?: Partial;\n}\n\nexport interface ApiWebPage {\n id: number;\n url: string;\n displayUrl: string;\n type?: string;\n siteName?: string;\n title?: string;\n description?: string;\n photo?: ApiPhoto;\n duration?: number;\n document?: ApiDocument;\n video?: ApiVideo;\n}\n\nexport interface ApiMessageForwardInfo {\n date: number;\n isChannelPost: boolean;\n channelPostId?: number;\n isLinkedChannelPost?: boolean;\n fromChatId?: string;\n senderUserId?: string;\n fromMessageId?: number;\n hiddenUserName?: string;\n adminTitle?: string;\n}\n\nexport interface ApiMessageEntity {\n type: string;\n offset: number;\n length: number;\n userId?: string;\n url?: string;\n}\n\nexport enum ApiMessageEntityTypes {\n Bold = 'MessageEntityBold',\n Blockquote = 'MessageEntityBlockquote',\n BotCommand = 'MessageEntityBotCommand',\n Cashtag = 'MessageEntityCashtag',\n Code = 'MessageEntityCode',\n Email = 'MessageEntityEmail',\n Hashtag = 'MessageEntityHashtag',\n Italic = 'MessageEntityItalic',\n MentionName = 'MessageEntityMentionName',\n Mention = 'MessageEntityMention',\n Phone = 'MessageEntityPhone',\n Pre = 'MessageEntityPre',\n Strike = 'MessageEntityStrike',\n TextUrl = 'MessageEntityTextUrl',\n Url = 'MessageEntityUrl',\n Underline = 'MessageEntityUnderline',\n Spoiler = 'MessageEntitySpoiler',\n Unknown = 'MessageEntityUnknown',\n}\n\nexport interface ApiFormattedText {\n text: string;\n entities?: ApiMessageEntity[];\n}\n\nexport interface ApiMessage {\n id: number;\n chatId: string;\n content: {\n text?: ApiFormattedText;\n photo?: ApiPhoto;\n video?: ApiVideo;\n document?: ApiDocument;\n sticker?: ApiSticker;\n contact?: ApiContact;\n poll?: ApiPoll;\n action?: ApiAction;\n webPage?: ApiWebPage;\n audio?: ApiAudio;\n voice?: ApiVoice;\n invoice?: ApiInvoice;\n };\n date: number;\n isOutgoing: boolean;\n senderId?: string;\n replyToChatId?: string;\n replyToMessageId?: number;\n replyToTopMessageId?: number;\n sendingState?: 'messageSendingStatePending' | 'messageSendingStateFailed';\n forwardInfo?: ApiMessageForwardInfo;\n isDeleting?: boolean;\n previousLocalId?: number;\n views?: number;\n isEdited?: boolean;\n editDate?: number;\n isMentioned?: boolean;\n isMediaUnread?: boolean;\n groupedId?: string;\n isInAlbum?: boolean;\n hasUnreadMention?: boolean;\n inlineButtons?: ApiKeyboardButtons;\n keyboardButtons?: ApiKeyboardButtons;\n keyboardPlaceholder?: string;\n isKeyboardSingleUse?: boolean;\n viaBotId?: string;\n threadInfo?: ApiThreadInfo;\n adminTitle?: string;\n isScheduled?: boolean;\n shouldHideKeyboardButtons?: boolean;\n isFromScheduled?: boolean;\n seenByUserIds?: string[];\n isProtected?: boolean;\n reactors?: {\n nextOffset?: string;\n count: number;\n reactions: ApiUserReaction[];\n };\n reactions?: ApiReactions;\n}\n\nexport interface ApiReactions {\n canSeeList?: boolean;\n results: ApiReactionCount[];\n recentReactions?: ApiUserReaction[];\n}\n\nexport interface ApiUserReaction {\n userId: string;\n reaction: string;\n}\n\nexport interface ApiReactionCount {\n isChosen?: boolean;\n count: number;\n reaction: string;\n}\n\nexport interface ApiAvailableReaction {\n selectAnimation?: ApiDocument;\n staticIcon?: ApiDocument;\n centerIcon?: ApiDocument;\n aroundAnimation?: ApiDocument;\n reaction: string;\n title: string;\n isInactive?: boolean;\n}\n\nexport interface ApiThreadInfo {\n threadId: number;\n chatId: string;\n topMessageId?: number;\n originChannelId?: string;\n messagesCount: number;\n lastMessageId?: number;\n lastReadInboxMessageId?: number;\n recentReplierIds?: string[];\n}\n\nexport type ApiMessageOutgoingStatus = 'read' | 'succeeded' | 'pending' | 'failed';\n\nexport type ApiSponsoredMessage = {\n chatId?: string;\n randomId: string;\n isBot?: boolean;\n channelPostId?: number;\n startParam?: string;\n chatInviteHash?: string;\n chatInviteTitle?: string;\n text: ApiFormattedText;\n expiresAt: number;\n};\n\nexport interface ApiKeyboardButton {\n type: 'command' | 'url' | 'callback' | 'requestPoll' | 'requestSelfContact' | 'buy' | 'NOT_SUPPORTED';\n text: string;\n messageId: number;\n value?: string;\n}\n\nexport type ApiKeyboardButtons = ApiKeyboardButton[][];\nexport type ApiReplyKeyboard = {\n keyboardPlaceholder?: string;\n isKeyboardSingleUse?: boolean;\n} & {\n [K in 'inlineButtons' | 'keyboardButtons']?: ApiKeyboardButtons;\n};\n\nexport type ApiMessageSearchType = 'text' | 'media' | 'documents' | 'links' | 'audio' | 'voice' | 'profilePhoto';\nexport type ApiGlobalMessageSearchType = 'text' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\n\nexport type ApiReportReason = 'spam' | 'violence' | 'pornography' | 'childAbuse'\n| 'copyright' | 'geoIrrelevant' | 'fake' | 'other';\n\nexport type ApiSendMessageAction = {\n type: 'cancel' | 'typing' | 'recordAudio' | 'chooseSticker';\n};\n\nexport const MAIN_THREAD_ID = -1;\n\n// `Symbol` can not be transferred from worker\nexport const MESSAGE_DELETED = 'MESSAGE_DELETED';\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-bitwise */\n\nconst utf16 = {\n // The utf16-class is necessary to convert from javascripts internal character representation to unicode and back.\n decode: (input) => {\n const output = [];\n let i = 0;\n const len = input.length;\n let value;\n let extra;\n\n while (i < len) {\n value = input.charCodeAt(i++);\n if ((value & 0xf800) === 0xd800) {\n extra = input.charCodeAt(i++);\n if ((value & 0xfc00) !== 0xd800 || (extra & 0xfc00) !== 0xdc00) {\n throw new RangeError('UTF-16(decode): Illegal UTF-16 sequence');\n }\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n output.push(value);\n }\n return output;\n },\n encode: (input) => {\n const output = [];\n let i = 0;\n const len = input.length;\n let value;\n\n while (i < len) {\n value = input[i++];\n if ((value & 0xf800) === 0xd800) {\n throw new RangeError('UTF-16(encode): Illegal UTF-16 value');\n }\n if (value > 0xffff) {\n value -= 0x10000;\n output.push(String.fromCharCode(((value >>> 10) & 0x3ff) | 0xd800));\n value = 0xdc00 | (value & 0x3ff);\n }\n output.push(String.fromCharCode(value));\n }\n return output.join('');\n },\n};\n\n// Default parameters\nconst initial_n = 0x80;\nconst initial_bias = 72;\nconst delimiter = '\\x2D';\nconst base = 36;\nconst damp = 700;\nconst tmin = 1;\nconst tmax = 26;\nconst skew = 38;\nconst maxint = 0x7fffffff;\n\n// decode_digit(cp) returns the numeric value of a basic code\n// point (for use in representing integers) in the range 0 to\n// base-1, or base if cp is does not represent a value.\n\nfunction decode_digit(cp) {\n return cp - 48 < 10 ? cp - 22 : cp - 65 < 26 ? cp - 65 : cp - 97 < 26 ? cp - 97 : base;\n}\n\n// ** Bias adaptation function **\nfunction adapt(delta, numpoints, firsttime) {\n let k;\n delta = firsttime ? Math.floor(delta / damp) : delta >> 1;\n delta += Math.floor(delta / numpoints);\n\n for (k = 0; delta > ((base - tmin) * tmax) >> 1; k += base) {\n delta = Math.floor(delta / (base - tmin));\n }\n return Math.floor(k + ((base - tmin + 1) * delta) / (delta + skew));\n}\n\n// Main decode\nfunction decode(input, preserveCase) {\n // Dont use utf16\n const output = [];\n const case_flags = [];\n const input_length = input.length;\n\n let n; let out; let i; let bias; let basic; let j; let ic; let oldi; let w; let k; let digit; let t; let len;\n\n // Initialize the state:\n\n n = initial_n;\n i = 0;\n bias = initial_bias;\n\n // Handle the basic code points: Let basic be the number of input code\n // points before the last delimiter, or 0 if there is none, then\n // copy the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n if (basic < 0) basic = 0;\n\n for (j = 0; j < basic; ++j) {\n if (preserveCase) case_flags[output.length] = input.charCodeAt(j) - 65 < 26;\n if (input.charCodeAt(j) >= 0x80) {\n throw new RangeError('Illegal input >= 0x80');\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: Start just after the last delimiter if any\n // basic code points were copied; start at the beginning otherwise.\n\n for (ic = basic > 0 ? basic + 1 : 0; ic < input_length;) {\n // ic is the index of the next character to be consumed,\n\n // Decode a generalized variable-length integer into delta,\n // which gets added to i. The overflow checking is easier\n // if we increase i as we go, then subtract off its starting\n // value at the end to obtain delta.\n for (oldi = i, w = 1, k = base; ; k += base) {\n if (ic >= input_length) {\n throw RangeError('punycode_bad_input(1)');\n }\n digit = decode_digit(input.charCodeAt(ic++));\n\n if (digit >= base) {\n throw RangeError('punycode_bad_input(2)');\n }\n if (digit > Math.floor((maxint - i) / w)) {\n throw RangeError('punycode_overflow(1)');\n }\n i += digit * w;\n t = k <= bias ? tmin : k >= bias + tmax ? tmax : k - bias;\n if (digit < t) {\n break;\n }\n if (w > Math.floor(maxint / (base - t))) {\n throw RangeError('punycode_overflow(2)');\n }\n w *= base - t;\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi === 0);\n\n // i was supposed to wrap around from out to 0,\n // incrementing n each time, so we'll fix that now:\n if (Math.floor(i / out) > maxint - n) {\n throw RangeError('punycode_overflow(3)');\n }\n n += Math.floor(i / out);\n i %= out;\n\n // Insert n at position i of the output:\n // Case of last character determines uppercase flag:\n if (preserveCase) {\n case_flags.splice(i, 0, input.charCodeAt(ic - 1) - 65 < 26);\n }\n\n output.splice(i, 0, n);\n i++;\n }\n if (preserveCase) {\n for (i = 0, len = output.length; i < len; i++) {\n if (case_flags[i]) {\n output[i] = String.fromCharCode(output[i])\n .toUpperCase()\n .charCodeAt(0);\n }\n }\n }\n return utf16.encode(output);\n}\n\nfunction toUnicode(domain) {\n const domain_array = domain.split('.');\n const out = [];\n for (let i = 0; i < domain_array.length; ++i) {\n const s = domain_array[i];\n out.push(s.match(/^xn--/) ? decode(s.slice(4)) : s);\n }\n return out.join('.');\n}\n\nexport default toUnicode;\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\nimport convertPunycode from '../../lib/punycode';\n\nimport {\n DEBUG, RE_TG_LINK, RE_TME_LINK,\n} from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport { ensureProtocol } from '../../util/ensureProtocol';\n\ntype OwnProps = {\n url?: string;\n text: string;\n className?: string;\n children?: any;\n isRtl?: boolean;\n};\n\nconst SafeLink: FC = ({\n url,\n text,\n className,\n children,\n isRtl,\n}) => {\n const { toggleSafeLinkModal, openTelegramLink } = getDispatch();\n\n const content = children || text;\n const isNotSafe = url !== content;\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (\n e.ctrlKey || e.altKey || e.shiftKey || e.metaKey\n || !url || (!url.match(RE_TME_LINK) && !url.match(RE_TG_LINK))\n ) {\n if (isNotSafe) {\n toggleSafeLinkModal({ url });\n\n e.preventDefault();\n return false;\n }\n\n return true;\n }\n\n e.preventDefault();\n openTelegramLink({ url });\n\n return false;\n }, [isNotSafe, openTelegramLink, toggleSafeLinkModal, url]);\n\n if (!url) {\n return undefined;\n }\n\n const classNames = buildClassName(\n className || 'text-entity-link',\n text.length > 50 && 'long-word-break-all',\n );\n\n return (\n \n {content}\n \n );\n};\n\nfunction getDomain(url?: string) {\n if (!url) {\n return undefined;\n }\n\n const href = ensureProtocol(url);\n if (!href) {\n return undefined;\n }\n\n try {\n let decodedHref = decodeURI(href);\n\n const match = decodedHref.match(/^https?:\\/\\/([^/:?#]+)(?:[/:?#]|$)/i);\n if (!match) {\n return undefined;\n }\n const domain = match[1];\n decodedHref = decodedHref.replace(domain, convertPunycode(domain));\n\n return decodedHref;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('SafeLink.getDecodedUrl error ', url, error);\n }\n }\n\n return undefined;\n}\n\nexport default memo(SafeLink);\n","import { ApiDocument } from '../../../api/types';\n\nconst ONE_GIGABYTE = 1024 * 1024 * 1024;\nconst ONE_MEGABYTE = 1024 * 1024;\n\nexport function getFileSizeString(bytes: number) {\n if (bytes > (ONE_GIGABYTE / 2)) {\n return `${(bytes / ONE_GIGABYTE).toFixed(1)} GB`;\n }\n if (bytes > (ONE_MEGABYTE / 2)) {\n return `${(bytes / ONE_MEGABYTE).toFixed(1)} MB`;\n }\n return `${(bytes / (1024)).toFixed(1)} KB`;\n}\n\nexport function getDocumentExtension(document: ApiDocument) {\n const { fileName, mimeType } = document;\n\n return getFileExtension(fileName, mimeType);\n}\n\nexport function getFileExtension(fileName: string, mimeType: string) {\n if (fileName && fileName.indexOf('.') !== -1) {\n return fileName.split('.').pop();\n } else {\n return mimeType.split('/').pop();\n }\n}\n\nexport function getColorFromExtension(extension: string) {\n switch (extension) {\n case 'apk':\n case 'xls':\n case 'xlsx':\n return 'green';\n case 'zip':\n case 'rar':\n case '7z':\n case 'tar':\n case 'gz':\n case 'ppt':\n case 'pptx':\n return 'orange';\n case 'pdf':\n case 'xps':\n return 'red';\n default:\n return 'default';\n }\n}\n\nexport function getDocumentHasPreview(document: ApiDocument) {\n return Boolean(document.previewBlobUrl || document.thumbnail);\n}\n","import twemojiRegex from '../../../lib/twemojiRegex';\n\nconst DETECT_UP_TO = 3;\nconst MAX_LENGTH = DETECT_UP_TO * 8; // Maximum 8 per one emoji.\nconst RE_EMOJI_ONLY = new RegExp(`^(?:${twemojiRegex.source})+$`, '');\n\nconst parseEmojiOnlyString = (text: string): number | false => {\n if (text.length > MAX_LENGTH) {\n return false;\n }\n\n const isEmojiOnly = Boolean(text.match(RE_EMOJI_ONLY));\n if (!isEmojiOnly) {\n return false;\n }\n\n let emojiCount = 0;\n while (twemojiRegex.exec(text)) {\n emojiCount++;\n\n if (emojiCount > DETECT_UP_TO) {\n twemojiRegex.lastIndex = 0;\n return false;\n }\n }\n\n return emojiCount;\n};\n\nexport default parseEmojiOnlyString;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport { ApiChat, ApiUser } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\nimport { getDispatch } from '../../lib/teact/teactn';\n\ntype OwnProps = {\n className?: string;\n sender?: ApiUser | ApiChat;\n children: any;\n};\n\nconst UserLink: FC = ({\n className, sender, children,\n}) => {\n const { openChat } = getDispatch();\n\n const handleClick = useCallback(() => {\n if (sender) {\n openChat({ id: sender.id });\n }\n }, [sender, openChat]);\n\n if (!sender) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default UserLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport { ApiMessage } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\n\ntype OwnProps = {\n className?: string;\n message?: ApiMessage;\n children: any;\n};\n\nconst MessageLink: FC = ({\n className, message, children,\n}) => {\n const { focusMessage } = getDispatch();\n\n const handleMessageClick = useCallback((): void => {\n if (message) {\n focusMessage({ chatId: message.chatId, messageId: message.id });\n }\n }, [focusMessage, message]);\n\n if (!message) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default MessageLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getDispatch } from '../../lib/teact/teactn';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\n\ntype OwnProps = {\n className?: string;\n chatId?: string;\n children: any;\n};\n\nconst ChatLink: FC = ({\n className, chatId, children,\n}) => {\n const { openChat } = getDispatch();\n\n const handleClick = useCallback(() => {\n if (chatId) {\n openChat({ id: chatId });\n }\n }, [chatId, openChat]);\n\n if (!chatId) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default ChatLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport { ApiGroupCall } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\nimport { getDispatch } from '../../lib/teact/teactn';\n\ntype OwnProps = {\n className?: string;\n groupCall?: Partial;\n children: any;\n};\n\nconst GroupCallLink: FC = ({\n className, groupCall, children,\n}) => {\n const { joinGroupCall } = getDispatch();\n\n const handleClick = useCallback(() => {\n if (groupCall) {\n joinGroupCall({ id: groupCall.id, accessHash: groupCall.accessHash });\n }\n }, [groupCall, joinGroupCall]);\n\n if (!groupCall) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default GroupCallLink;\n","import React from '../../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMessage, ApiUser, ApiGroupCall,\n} from '../../../api/types';\nimport { LangFn } from '../../../hooks/useLang';\nimport {\n getChatTitle,\n getMessageSummaryText,\n getUserFullName,\n} from '../../../modules/helpers';\nimport trimText from '../../../util/trimText';\nimport { formatCurrency } from '../../../util/formatCurrency';\nimport { TextPart, renderMessageSummary } from './renderMessageText';\nimport renderText from './renderText';\n\nimport UserLink from '../UserLink';\nimport MessageLink from '../MessageLink';\nimport ChatLink from '../ChatLink';\nimport GroupCallLink from '../GroupCallLink';\n\ninterface RenderOptions {\n asPlainText?: boolean;\n asTextWithSpoilers?: boolean;\n}\n\nconst MAX_LENGTH = 32;\nconst NBSP = '\\u00A0';\n\nexport function renderActionMessageText(\n lang: LangFn,\n message: ApiMessage,\n actionOriginUser?: ApiUser,\n actionOriginChat?: ApiChat,\n targetUsers?: ApiUser[],\n targetMessage?: ApiMessage,\n targetChatId?: string,\n options: RenderOptions = {},\n) {\n if (!message.content.action) {\n return [];\n }\n\n const {\n text, translationValues, amount, currency, call,\n } = message.content.action;\n const content: TextPart[] = [];\n const noLinks = options.asPlainText || options.asTextWithSpoilers;\n const translationKey = text === 'Chat.Service.Group.UpdatedPinnedMessage1' && !targetMessage\n ? 'Message.PinnedGenericMessage'\n : text;\n\n let unprocessed = lang(translationKey, translationValues?.length ? translationValues : undefined);\n let processed: TextPart[];\n\n if (unprocessed.includes('%payment_amount%')) {\n processed = processPlaceholder(\n unprocessed,\n '%payment_amount%',\n formatCurrency(amount!, currency, lang.code),\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n }\n\n processed = processPlaceholder(\n unprocessed,\n '%action_origin%',\n actionOriginUser ? (\n renderUserContent(actionOriginUser, noLinks) || NBSP\n ) : actionOriginChat ? (\n renderChatContent(lang, actionOriginChat, noLinks) || NBSP\n ) : 'User',\n );\n\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%target_user%',\n targetUsers\n ? targetUsers.map((user) => renderUserContent(user, noLinks)).filter(Boolean as any)\n : 'User',\n );\n\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%message%',\n targetMessage\n ? renderMessageContent(lang, targetMessage, options)\n : 'a message',\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%product%',\n targetMessage\n ? renderProductContent(targetMessage)\n : 'a product',\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%target_chat%',\n targetChatId\n ? renderMigratedContent(targetChatId, noLinks)\n : 'another chat',\n );\n content.push(...processed);\n\n if (options.asPlainText) {\n return content.join('').trim();\n }\n\n if (call) {\n return renderGroupCallContent(call, content);\n }\n\n return content;\n}\n\nfunction renderProductContent(message: ApiMessage) {\n return message.content && message.content.invoice\n ? message.content.invoice.title\n : 'a product';\n}\n\nfunction renderMessageContent(lang: LangFn, message: ApiMessage, options: RenderOptions = {}) {\n const { asPlainText, asTextWithSpoilers } = options;\n\n if (asPlainText) {\n return getMessageSummaryText(lang, message, undefined, MAX_LENGTH);\n }\n\n const messageSummary = renderMessageSummary(lang, message, undefined, undefined, MAX_LENGTH);\n\n if (asTextWithSpoilers) {\n return (\n {messageSummary}\n );\n }\n\n return (\n {messageSummary}\n );\n}\n\nfunction renderGroupCallContent(groupCall: Partial, text: TextPart[]): string | TextPart | undefined {\n return (\n \n {text}\n \n );\n}\n\nfunction renderUserContent(sender: ApiUser, noLinks?: boolean): string | TextPart | undefined {\n const text = trimText(getUserFullName(sender), MAX_LENGTH);\n\n if (noLinks) {\n return text;\n }\n\n return {sender && renderText(text!)};\n}\n\nfunction renderChatContent(lang: LangFn, chat: ApiChat, noLinks?: boolean): string | TextPart | undefined {\n const text = trimText(getChatTitle(lang, chat), MAX_LENGTH);\n\n if (noLinks) {\n return text;\n }\n\n return {chat && renderText(text!)};\n}\n\nfunction renderMigratedContent(chatId: string, noLinks?: boolean): string | TextPart | undefined {\n const text = 'another chat';\n\n if (noLinks) {\n return text;\n }\n\n return {text};\n}\n\nfunction processPlaceholder(text: string, placeholder: string, replaceValue?: TextPart | TextPart[]): TextPart[] {\n const placeholderPosition = text.indexOf(placeholder);\n if (placeholderPosition < 0 || !replaceValue) {\n return [text];\n }\n\n const content: TextPart[] = [];\n content.push(text.substring(0, placeholderPosition));\n if (Array.isArray(replaceValue)) {\n replaceValue.forEach((value, index) => {\n content.push(value);\n if (index + 1 < replaceValue.length) {\n content.push(', ');\n }\n });\n } else {\n content.push(replaceValue);\n }\n content.push(text.substring(placeholderPosition + placeholder.length));\n\n return content;\n}\n","import { ApiMessage, ApiMessageEntityTypes } from '../../../api/types';\nimport {\n getMessageSummaryDescription,\n getMessageSummaryEmoji,\n getMessageSummaryText,\n getMessageText,\n TRUNCATED_SUMMARY_LENGTH,\n} from '../../../modules/helpers';\nimport { LangFn } from '../../../hooks/useLang';\nimport renderText from './renderText';\nimport { renderTextWithEntities, TextPart } from './renderTextWithEntities';\nimport trimText from '../../../util/trimText';\n\nexport type { TextPart };\n\nexport function renderMessageText(\n message: ApiMessage,\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n isSimple?: boolean,\n truncateLength?: number,\n) {\n const { text, entities } = message.content.text || {};\n\n if (!text) {\n const contentNotSupportedText = getMessageText(message);\n return contentNotSupportedText ? [trimText(contentNotSupportedText, truncateLength)] : undefined;\n }\n\n return renderTextWithEntities(\n trimText(text, truncateLength),\n entities,\n highlight,\n shouldRenderHqEmoji,\n undefined,\n message.id,\n isSimple,\n );\n}\n\nexport function renderMessageSummary(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n highlight?: string,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n): TextPart[] {\n let { entities } = message.content.text || {};\n\n const hasSpoilers = entities?.some((e) => e.type === ApiMessageEntityTypes.Spoiler);\n if (!hasSpoilers) {\n const text = trimText(getMessageSummaryText(lang, message, noEmoji), truncateLength);\n\n if (highlight) {\n return renderText(text, ['emoji', 'highlight'], { highlight });\n } else {\n return renderText(text);\n }\n }\n\n const emoji = !noEmoji && getMessageSummaryEmoji(message);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n\n const text = renderMessageText(message, highlight, undefined, true, truncateLength);\n const description = getMessageSummaryDescription(lang, message, text);\n\n return [\n emojiWithSpace,\n ...(Array.isArray(description) ? description : [description]),\n ].filter(Boolean);\n}\n","import React from '../../../lib/teact/teact';\nimport EMOJI_REGEX, { removeVS16s } from '../../../lib/twemojiRegex';\n\nimport { RE_LINK_TEMPLATE, RE_MENTION_TEMPLATE } from '../../../config';\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\nimport { fixNonStandardEmoji, nativeToUnified } from '../../../util/emoji';\nimport buildClassName from '../../../util/buildClassName';\nimport { compact } from '../../../util/iteratees';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\n\ntype TextPart = string | Element;\nexport type TextFilter = (\n 'escape_html' | 'hq_emoji' | 'emoji' | 'emoji_html' | 'br' | 'br_html' | 'highlight' | 'links' |\n 'simple_markdown' | 'simple_markdown_html'\n);\n\nconst RE_LETTER_OR_DIGIT = /^[\\d\\wа-яё]$/i;\nconst SIMPLE_MARKDOWN_REGEX = /(\\*\\*|__).+?\\1/g;\n\nexport default function renderText(\n part: TextPart,\n filters: Array = ['emoji'],\n params?: { highlight: string | undefined },\n): TextPart[] {\n if (typeof part !== 'string') {\n return [part];\n }\n\n return compact(filters.reduce((text, filter) => {\n switch (filter) {\n case 'escape_html':\n return escapeHtml(text);\n\n case 'hq_emoji':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'big', 'jsx');\n\n case 'emoji':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'small', 'jsx');\n\n case 'emoji_html':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'small', 'html');\n\n case 'br':\n return addLineBreaks(text, 'jsx');\n\n case 'br_html':\n return addLineBreaks(text, 'html');\n\n case 'highlight':\n return addHighlight(text, params!.highlight);\n\n case 'links':\n return addLinks(text);\n\n case 'simple_markdown':\n return replaceSimpleMarkdown(text, 'jsx');\n\n case 'simple_markdown_html':\n return replaceSimpleMarkdown(text, 'html');\n }\n\n return text;\n }, [part] as TextPart[]));\n}\n\nfunction escapeHtml(textParts: TextPart[]): TextPart[] {\n const divEl = document.createElement('div');\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n divEl.innerText = part;\n result.push(divEl.innerHTML);\n\n return result;\n }, [] as TextPart[]);\n}\n\nfunction replaceEmojis(textParts: TextPart[], size: 'big' | 'small', type: 'jsx' | 'html'): TextPart[] {\n if (IS_EMOJI_SUPPORTED) {\n return textParts;\n }\n\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n part = fixNonStandardEmoji(part);\n const parts = part.split(EMOJI_REGEX);\n const emojis = part.match(EMOJI_REGEX) || [];\n result.push(parts[0]);\n\n return emojis.reduce((emojiResult: TextPart[], emoji, i) => {\n const code = nativeToUnified(removeVS16s(emoji));\n if (!code) return emojiResult;\n const className = buildClassName(\n 'emoji',\n size === 'small' && 'emoji-small',\n );\n if (type === 'jsx') {\n emojiResult.push(\n ,\n );\n }\n if (type === 'html') {\n emojiResult.push(\n // For preventing extra spaces in html\n // eslint-disable-next-line max-len\n `\"${emoji}\"`,\n );\n }\n\n const index = i * 2 + 2;\n if (parts[index]) {\n emojiResult.push(parts[index]);\n }\n\n return emojiResult;\n }, result);\n }, [] as TextPart[]);\n}\n\nfunction addLineBreaks(textParts: TextPart[], type: 'jsx' | 'html'): TextPart[] {\n return textParts.reduce((result: TextPart[], part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const splittenParts = part\n .split(/\\r\\n|\\r|\\n/g)\n .reduce((parts: TextPart[], line: string, i, source) => {\n // This adds non-breaking space if line was indented with spaces, to preserve the indentation\n const trimmedLine = line.trimLeft();\n const indentLength = line.length - trimmedLine.length;\n parts.push(String.fromCharCode(160).repeat(indentLength) + trimmedLine);\n\n if (i !== source.length - 1) {\n parts.push(\n type === 'jsx' ?
: '
',\n );\n }\n\n return parts;\n }, []);\n\n return [...result, ...splittenParts];\n }, []);\n}\n\nfunction addHighlight(textParts: TextPart[], highlight: string | undefined): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string' || !highlight) {\n result.push(part);\n return result;\n }\n\n const lowerCaseText = part.toLowerCase();\n const queryPosition = lowerCaseText.indexOf(highlight.toLowerCase());\n const nextSymbol = lowerCaseText[queryPosition + highlight.length];\n if (queryPosition < 0 || (nextSymbol && nextSymbol.match(RE_LETTER_OR_DIGIT))) {\n result.push(part);\n return result;\n }\n\n const newParts: TextPart[] = [];\n newParts.push(part.substring(0, queryPosition));\n newParts.push(\n \n {part.substring(queryPosition, queryPosition + highlight.length)}\n ,\n );\n newParts.push(part.substring(queryPosition + highlight.length));\n\n return [...result, ...newParts];\n }, [] as TextPart[]);\n}\n\nconst RE_LINK = new RegExp(`${RE_LINK_TEMPLATE}|${RE_MENTION_TEMPLATE}`, 'ig');\n\nfunction addLinks(textParts: TextPart[]): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const links = part.match(RE_LINK);\n if (!links || !links.length) {\n result.push(part);\n return result;\n }\n\n const content: TextPart[] = [];\n\n let nextLink = links.shift();\n let lastIndex = 0;\n while (nextLink) {\n const index = part.indexOf(nextLink, lastIndex);\n content.push(part.substring(lastIndex, index));\n if (nextLink.startsWith('@')) {\n content.push(\n \n {nextLink}\n ,\n );\n } else {\n if (nextLink.endsWith('?')) {\n nextLink = nextLink.slice(0, nextLink.length - 1);\n }\n\n content.push(\n ,\n );\n }\n lastIndex = index + nextLink.length;\n nextLink = links.shift();\n }\n content.push(part.substring(lastIndex));\n\n return [...result, ...content];\n }, [] as TextPart[]);\n}\n\nfunction replaceSimpleMarkdown(textParts: TextPart[], type: 'jsx' | 'html'): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const parts = part.split(SIMPLE_MARKDOWN_REGEX);\n const entities = part.match(SIMPLE_MARKDOWN_REGEX) || [];\n result.push(parts[0]);\n\n return entities.reduce((entityResult: TextPart[], entity, i) => {\n if (type === 'jsx') {\n entityResult.push(\n entity.startsWith('**')\n ? {entity.replace(/\\*\\*/g, '')}\n : {entity.replace(/__/g, '')},\n );\n } else {\n entityResult.push(\n entity.startsWith('**')\n ? `${entity.replace(/\\*\\*/g, '')}`\n : `${entity.replace(/__/g, '')}`,\n );\n }\n\n const index = i * 2 + 2;\n if (parts[index]) {\n entityResult.push(parts[index]);\n }\n\n return entityResult;\n }, result);\n }, [] as TextPart[]);\n}\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\n\nimport './Spoiler.scss';\n\ntype OwnProps = {\n children?: React.ReactNode;\n messageId?: number;\n};\n\nconst READING_SYMBOLS_PER_SECOND = 23; // Heuristics\nconst MIN_HIDE_TIMEOUT = 5000; // 5s\nconst MAX_HIDE_TIMEOUT = 60000; // 1m\n\nconst actionsByMessageId: Map = new Map();\n\nconst buildClassName = createClassNameBuilder('Spoiler');\n\nconst Spoiler: FC = ({\n children,\n messageId,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n\n const [isRevealed, reveal, conceal] = useFlag();\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n actionsByMessageId.get(messageId!)?.forEach((actions) => actions.reveal());\n\n const contentLength = contentRef.current!.innerText.length;\n const readingMs = Math.round(contentLength / READING_SYMBOLS_PER_SECOND) * 1000;\n const timeoutMs = Math.max(MIN_HIDE_TIMEOUT, Math.min(readingMs, MAX_HIDE_TIMEOUT));\n\n setTimeout(() => {\n actionsByMessageId.get(messageId!)?.forEach((actions) => actions.conceal());\n conceal();\n }, timeoutMs);\n }, [conceal, messageId]);\n\n useEffect(() => {\n if (!messageId) {\n return undefined;\n }\n\n if (actionsByMessageId.has(messageId)) {\n actionsByMessageId.get(messageId)!.push({ reveal, conceal });\n } else {\n actionsByMessageId.set(messageId, [{ reveal, conceal }]);\n }\n\n return () => {\n actionsByMessageId.delete(messageId);\n };\n }, [conceal, handleClick, isRevealed, messageId, reveal]);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(Spoiler);\n","import { MouseEvent } from 'react';\nimport React from '../../../lib/teact/teact';\nimport { getDispatch } from '../../../lib/teact/teactn';\n\nimport { ApiFormattedText, ApiMessageEntity, ApiMessageEntityTypes } from '../../../api/types';\nimport renderText, { TextFilter } from './renderText';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\nimport Spoiler from '../spoiler/Spoiler';\n\nexport type TextPart =\n string\n | Element;\n\ninterface IOrganizedEntity {\n entity: ApiMessageEntity;\n organizedIndexes: Set;\n nestedEntities: IOrganizedEntity[];\n}\n\nexport function renderTextWithEntities(\n text: string,\n entities?: ApiMessageEntity[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n messageId?: number,\n isSimple?: boolean,\n) {\n if (!entities || !entities.length) {\n return renderMessagePart(text, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple);\n }\n\n const result: TextPart[] = [];\n let deleteLineBreakAfterPre = false;\n\n const organizedEntities = organizeEntities(entities);\n\n // Recursive function to render regular and nested entities\n function renderEntity(\n textPartStart: number,\n textPartEnd: number,\n organizedEntity: IOrganizedEntity,\n isLastEntity: boolean,\n ) {\n const renderResult: TextPart[] = [];\n const { entity, nestedEntities } = organizedEntity;\n const { offset, length, type } = entity;\n\n // Render text before the entity\n let textBefore = text.substring(textPartStart, offset);\n const textBeforeLength = textBefore.length;\n if (textBefore) {\n if (deleteLineBreakAfterPre && textBefore.length > 0 && textBefore[0] === '\\n') {\n textBefore = textBefore.substr(1);\n deleteLineBreakAfterPre = false;\n }\n if (textBefore) {\n renderResult.push(...renderMessagePart(\n textBefore, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n const entityStartIndex = textPartStart + textBeforeLength;\n const entityEndIndex = entityStartIndex + length;\n\n let entityContent: TextPart = text.substring(offset, offset + length);\n const nestedEntityContent: TextPart[] = [];\n\n if (deleteLineBreakAfterPre && entityContent.length > 0 && entityContent[0] === '\\n') {\n entityContent = entityContent.substr(1);\n deleteLineBreakAfterPre = false;\n }\n\n if (type === ApiMessageEntityTypes.Pre) {\n deleteLineBreakAfterPre = true;\n }\n\n // Render nested entities, if any\n if (nestedEntities.length) {\n let nestedIndex = entityStartIndex;\n\n nestedEntities.forEach((nestedEntity, nestedEntityIndex) => {\n const {\n renderResult: nestedResult,\n entityEndIndex: nestedEntityEndIndex,\n } = renderEntity(\n nestedIndex,\n entityEndIndex,\n nestedEntity,\n nestedEntityIndex === nestedEntities.length - 1,\n );\n\n nestedEntityContent.push(...nestedResult);\n nestedIndex = nestedEntityEndIndex;\n });\n }\n\n // Render the entity itself\n const newEntity = shouldRenderAsHtml\n ? processEntityAsHtml(entity, entityContent, nestedEntityContent)\n : processEntity(entity, entityContent, nestedEntityContent, highlight, messageId, isSimple);\n\n if (Array.isArray(newEntity)) {\n renderResult.push(...newEntity);\n } else {\n renderResult.push(newEntity);\n }\n\n // Render text after the entity, if it is the last entity in the text,\n // or the last nested entity inside of another entity\n if (isLastEntity && entityEndIndex < textPartEnd) {\n let textAfter = text.substring(entityEndIndex, textPartEnd);\n if (deleteLineBreakAfterPre && textAfter.length > 0 && textAfter[0] === '\\n') {\n textAfter = textAfter.substring(1);\n }\n if (textAfter) {\n renderResult.push(...renderMessagePart(\n textAfter, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n return {\n renderResult,\n entityEndIndex,\n };\n }\n\n // Process highest-level entities\n let index = 0;\n\n organizedEntities.forEach((entity, arrayIndex) => {\n const { renderResult, entityEndIndex } = renderEntity(\n index,\n text.length,\n entity,\n arrayIndex === organizedEntities.length - 1,\n );\n\n result.push(...renderResult);\n index = entityEndIndex;\n });\n\n return result;\n}\n\nexport function getTextWithEntitiesAsHtml(formattedText?: ApiFormattedText) {\n const { text, entities } = formattedText || {};\n if (!text) {\n return '';\n }\n\n const result = renderTextWithEntities(\n text,\n entities,\n undefined,\n undefined,\n true,\n );\n\n if (Array.isArray(result)) {\n return result.join('');\n }\n\n return result;\n}\n\nfunction renderMessagePart(\n content: TextPart | TextPart[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n isSimple?: boolean,\n) {\n if (Array.isArray(content)) {\n const result: TextPart[] = [];\n\n content.forEach((c) => {\n result.push(...renderMessagePart(c, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple));\n });\n\n return result;\n }\n\n if (shouldRenderAsHtml) {\n return renderText(content, ['escape_html', 'emoji_html', 'br_html']);\n }\n\n const emojiFilter = shouldRenderHqEmoji ? 'hq_emoji' : 'emoji';\n\n const filters: TextFilter[] = [emojiFilter];\n if (!isSimple) {\n filters.push('br');\n }\n\n if (highlight) {\n return renderText(content, filters.concat('highlight'), { highlight });\n } else {\n return renderText(content, filters);\n }\n}\n\n// Organize entities in a tree-like structure to better represent how the text will be displayed\nfunction organizeEntities(entities: ApiMessageEntity[]) {\n const organizedEntityIndexes: Set = new Set();\n const organizedEntities: IOrganizedEntity[] = [];\n\n entities.forEach((entity, index) => {\n if (organizedEntityIndexes.has(index)) {\n return;\n }\n\n const organizedEntity = organizeEntity(entity, index, entities, organizedEntityIndexes);\n if (organizedEntity) {\n organizedEntity.organizedIndexes.forEach((organizedIndex) => {\n organizedEntityIndexes.add(organizedIndex);\n });\n\n organizedEntities.push(organizedEntity);\n }\n });\n\n return organizedEntities;\n}\n\nfunction organizeEntity(\n entity: ApiMessageEntity,\n index: number,\n entities: ApiMessageEntity[],\n organizedEntityIndexes: Set,\n): IOrganizedEntity | undefined {\n const { offset, length } = entity;\n const organizedIndexes = new Set([index]);\n\n if (organizedEntityIndexes.has(index)) {\n return undefined;\n }\n\n // Determine any nested entities inside current entity\n const nestedEntities: IOrganizedEntity[] = [];\n const parsedNestedEntities = entities\n .filter((e, i) => i > index && e.offset >= offset && e.offset < offset + length)\n .map((e) => organizeEntity(e, entities.indexOf(e), entities, organizedEntityIndexes))\n .filter(Boolean as any);\n\n parsedNestedEntities.forEach((parsedEntity) => {\n let isChanged = false;\n\n parsedEntity.organizedIndexes.forEach((organizedIndex) => {\n if (!isChanged && !organizedIndexes.has(organizedIndex)) {\n isChanged = true;\n }\n\n organizedIndexes.add(organizedIndex);\n });\n\n if (isChanged) {\n nestedEntities.push(parsedEntity);\n }\n });\n\n return {\n entity,\n organizedIndexes,\n nestedEntities,\n };\n}\n\nfunction processEntity(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n highlight?: string,\n messageId?: number,\n isSimple?: boolean,\n) {\n const entityText = typeof entityContent === 'string' && entityContent;\n const renderedContent = nestedEntityContent.length ? nestedEntityContent : entityContent;\n\n function renderNestedMessagePart() {\n return renderMessagePart(\n renderedContent, highlight, undefined, undefined, isSimple,\n );\n }\n\n if (!entityText) {\n return renderNestedMessagePart();\n }\n\n if (isSimple) {\n const text = renderNestedMessagePart();\n if (entity.type === ApiMessageEntityTypes.Spoiler) {\n return {text};\n }\n return text;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Blockquote:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.BotCommand:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Hashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Cashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Code:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Email:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Italic:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.MentionName:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Mention:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Phone:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Pre:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.Strike:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.TextUrl:\n case ApiMessageEntityTypes.Url:\n return (\n \n {renderNestedMessagePart()}\n
\n );\n case ApiMessageEntityTypes.Underline:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Spoiler:\n return {renderNestedMessagePart()};\n default:\n return renderNestedMessagePart();\n }\n}\n\nfunction processEntityAsHtml(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n) {\n const rawEntityText = typeof entityContent === 'string' && entityContent;\n\n const renderedContent = nestedEntityContent.length\n ? nestedEntityContent.join('')\n : renderText(entityContent, ['escape_html', 'emoji_html', 'br_html']).join('');\n\n if (!rawEntityText) {\n return renderedContent;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Italic:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Underline:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Code:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Pre:\n return `\\`\\`\\`
${renderedContent}
\\`\\`\\``;\n case ApiMessageEntityTypes.Strike:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.MentionName:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Url:\n case ApiMessageEntityTypes.TextUrl:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Spoiler:\n return `${renderedContent}`;\n default:\n return renderedContent;\n }\n}\n\nfunction getLinkUrl(entityContent: string, entity: ApiMessageEntity) {\n const { type, url } = entity;\n return type === ApiMessageEntityTypes.TextUrl && url ? url : entityContent;\n}\n\nfunction handleBotCommandClick(e: MouseEvent) {\n getDispatch().sendBotCommand({ command: e.currentTarget.innerText });\n}\n\nfunction handleHashtagClick(e: MouseEvent) {\n getDispatch().setLocalTextSearchQuery({ query: e.currentTarget.innerText });\n getDispatch().searchTextMessagesLocal();\n}\n","import React from '../../../lib/teact/teact';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport { IS_IOS } from '../../../util/environment';\n\nexport function preventMessageInputBlur(e: React.MouseEvent, withBubbling = false) {\n if (\n IS_IOS\n || !document.activeElement\n || document.activeElement.id !== EDITABLE_INPUT_ID\n || (!withBubbling && e.target !== e.currentTarget)\n ) {\n return;\n }\n\n e.preventDefault();\n}\n\nexport function preventMessageInputBlurWithBubbling(e: React.MouseEvent) {\n preventMessageInputBlur(e, true);\n}\n","import React, { FC } from '../../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../modules/selectors';\n\ntype OwnProps = {\n userId?: string;\n username?: string;\n children: any;\n};\n\ntype StateProps = {\n userOrChat?: ApiUser | ApiChat;\n};\n\nconst MentionLink: FC = ({\n username,\n userOrChat,\n children,\n}) => {\n const {\n openChat,\n openChatByUsername,\n } = getDispatch();\n\n const handleClick = () => {\n if (userOrChat) {\n openChat({ id: userOrChat.id });\n } else if (username) {\n openChatByUsername({ username: username.substring(1) });\n }\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport default withGlobal(\n (global, { userId }): StateProps => {\n return {\n userOrChat: userId ? selectUser(global, userId) : undefined,\n };\n },\n)(MentionLink);\n","import { MouseEvent as ReactMouseEvent, RefObject } from 'react';\n\nimport React, {\n FC, useRef, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Spinner from './Spinner';\nimport RippleEffect from './RippleEffect';\n\nimport './Button.scss';\n\nexport type OwnProps = {\n ref?: RefObject;\n type?: 'button' | 'submit' | 'reset';\n children: any;\n size?: 'default' | 'smaller' | 'tiny';\n color?: (\n 'primary' | 'secondary' | 'gray' | 'danger' | 'translucent' | 'translucent-white' | 'translucent-black' | 'dark'\n );\n backgroundImage?: string;\n className?: string;\n round?: boolean;\n pill?: boolean;\n fluid?: boolean;\n isText?: boolean;\n isLoading?: boolean;\n ariaLabel?: string;\n href?: string;\n download?: string;\n disabled?: boolean;\n ripple?: boolean;\n faded?: boolean;\n tabIndex?: number;\n isRtl?: boolean;\n withClickPropagation?: boolean;\n onClick?: (e: ReactMouseEvent) => void;\n onContextMenu?: (e: ReactMouseEvent) => void;\n onMouseDown?: (e: ReactMouseEvent) => void;\n onMouseEnter?: NoneToVoidFunction;\n onMouseLeave?: NoneToVoidFunction;\n onFocus?: NoneToVoidFunction;\n};\n\n// Longest animation duration;\nconst CLICKED_TIMEOUT = 400;\n\nconst Button: FC = ({\n ref,\n type = 'button',\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n children,\n size = 'default',\n color = 'primary',\n backgroundImage,\n className,\n round,\n pill,\n fluid,\n isText,\n isLoading,\n ariaLabel,\n href,\n download,\n disabled,\n ripple,\n faded,\n tabIndex,\n isRtl,\n withClickPropagation,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let elementRef = useRef(null);\n if (ref) {\n elementRef = ref;\n }\n\n const [isClicked, setIsClicked] = useState(false);\n\n const fullClassName = buildClassName(\n 'Button',\n className,\n size,\n color,\n round && 'round',\n pill && 'pill',\n fluid && 'fluid',\n disabled && 'disabled',\n isText && 'text',\n isLoading && 'loading',\n ripple && 'has-ripple',\n faded && 'faded',\n isClicked && 'clicked',\n backgroundImage && 'with-image',\n );\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (!disabled && onClick) {\n onClick(e);\n }\n\n setIsClicked(true);\n setTimeout(() => {\n setIsClicked(false);\n }, CLICKED_TIMEOUT);\n }, [disabled, onClick]);\n\n const handleMouseDown = useCallback((e: ReactMouseEvent) => {\n if (!withClickPropagation) e.preventDefault();\n if (!disabled && onMouseDown) {\n onMouseDown(e);\n }\n }, [onMouseDown, disabled, withClickPropagation]);\n\n if (href) {\n return (\n }\n className={fullClassName}\n href={href}\n title={ariaLabel}\n download={download}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n >\n {children}\n {!disabled && ripple && (\n \n )}\n \n );\n }\n\n return (\n // eslint-disable-next-line react/button-has-type\n }\n type={type}\n className={fullClassName}\n onClick={handleClick}\n onContextMenu={onContextMenu}\n onMouseDown={handleMouseDown}\n onMouseEnter={onMouseEnter && !disabled ? onMouseEnter : undefined}\n onMouseLeave={onMouseLeave && !disabled ? onMouseLeave : undefined}\n onFocus={onFocus && !disabled ? onFocus : undefined}\n aria-label={ariaLabel}\n title={ariaLabel}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n style={backgroundImage ? `background-image: url(${backgroundImage})` : undefined}\n >\n {isLoading ? (\n
\n Please wait...\n \n
\n ) : children}\n {!disabled && ripple && (\n \n )}\n \n );\n};\n\nexport default Button;\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport renderText from '../common/helpers/renderText';\n\nimport Spinner from './Spinner';\n\nimport './Checkbox.scss';\n\ntype OwnProps = {\n id?: string;\n name?: string;\n value?: string;\n label: string;\n subLabel?: string;\n checked: boolean;\n disabled?: boolean;\n round?: boolean;\n blocking?: boolean;\n isLoading?: boolean;\n withCheckedCallback?: boolean;\n onChange?: (e: ChangeEvent) => void;\n onCheck?: (isChecked: boolean) => void;\n};\n\nconst Checkbox: FC = ({\n id,\n name,\n value,\n label,\n subLabel,\n checked,\n disabled,\n round,\n blocking,\n isLoading,\n onChange,\n onCheck,\n}) => {\n const lang = useLang();\n const handleChange = useCallback((event: ChangeEvent) => {\n if (onChange) {\n onChange(event);\n }\n\n if (onCheck) {\n onCheck(event.currentTarget.checked);\n }\n }, [onChange, onCheck]);\n\n const className = buildClassName(\n 'Checkbox',\n disabled && 'disabled',\n round && 'round',\n isLoading && 'loading',\n blocking && 'blocking',\n );\n\n return (\n \n );\n};\n\nexport default memo(Checkbox);\n","import React, { FC, useState, useRef } from '../../lib/teact/teact';\n\nimport Menu from './Menu';\n\nimport './DropdownMenu.scss';\n\ntype OwnProps = {\n className?: string;\n trigger: FC<{ onTrigger: () => void; isOpen?: boolean }>;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n footer?: string;\n forceOpen?: boolean;\n onOpen?: NoneToVoidFunction;\n onClose?: NoneToVoidFunction;\n children: any;\n};\n\nconst DropdownMenu: FC = ({\n trigger,\n className,\n children,\n positionX = 'left',\n positionY = 'top',\n footer,\n forceOpen,\n onOpen,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const dropdownRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen);\n if (isOpen) {\n if (onClose) onClose();\n } else if (onOpen) onOpen();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const menu = menuRef.current;\n\n if (!isOpen || e.keyCode !== 40 || !menu) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(menu.children);\n\n if (!focusedElement || elementChildren.indexOf(focusedElement) === -1) {\n (elementChildren[0] as HTMLElement).focus();\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n if (onClose) onClose();\n };\n\n return (\n \n {trigger({ onTrigger: toggleIsOpen, isOpen })}\n\n \n {children}\n \n
\n );\n};\n\nexport default DropdownMenu;\n","import {\n ChangeEvent, FormEvent, RefObject,\n} from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\ntype OwnProps = {\n ref?: RefObject;\n id?: string;\n className?: string;\n value?: string;\n label?: string;\n error?: string;\n success?: string;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n autoComplete?: string;\n maxLength?: number;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: (e: ChangeEvent) => void;\n onInput?: (e: FormEvent) => void;\n onKeyPress?: (e: React.KeyboardEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n onPaste?: (e: React.ClipboardEvent) => void;\n};\n\nconst InputText: FC = ({\n ref,\n id,\n className,\n value,\n label,\n error,\n success,\n disabled,\n readOnly,\n placeholder,\n autoComplete,\n inputMode,\n maxLength,\n onChange,\n onInput,\n onKeyPress,\n onKeyDown,\n onBlur,\n onPaste,\n}) => {\n const lang = useLang();\n const labelText = error || success || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error ? 'error' : success && 'success',\n disabled && 'disabled',\n readOnly && 'disabled',\n labelText && 'with-label',\n className,\n );\n\n return (\n
\n \n {labelText && (\n \n )}\n
\n );\n};\n\nexport default memo(InputText);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Link.scss';\n\ntype OwnProps = {\n children: any;\n className?: string;\n isRtl?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n};\n\nconst Link: FC = ({\n children, className, isRtl, onClick,\n}) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n onClick!(e);\n }, [onClick]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default Link;\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport Spinner from './Spinner';\nimport buildClassName from '../../util/buildClassName';\n\nimport './Loading.scss';\n\ntype OwnProps = {\n color?: 'blue' | 'white' | 'black' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n onClick?: NoneToVoidFunction;\n};\n\nconst Loading: FC = ({ color = 'blue', backgroundColor, onClick }) => {\n return (\n
\n \n
\n );\n};\n\nexport default memo(Loading);\n","import { RefObject } from 'react';\nimport React, { FC, useEffect, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useVirtualBackdrop from '../../hooks/useVirtualBackdrop';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\n\nimport './Menu.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n containerRef?: RefObject;\n isOpen: boolean;\n className?: string;\n style?: string;\n bubbleStyle?: string;\n transformOriginX?: number;\n transformOriginY?: number;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n autoClose?: boolean;\n shouldSkipTransition?: boolean;\n footer?: string;\n noCloseOnBackdrop?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onCloseAnimationEnd?: () => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n children: any;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst Menu: FC = ({\n ref,\n containerRef,\n isOpen,\n className,\n style,\n bubbleStyle,\n children,\n transformOriginX,\n transformOriginY,\n positionX = 'left',\n positionY = 'top',\n autoClose = false,\n footer,\n noCloseOnBackdrop = false,\n onCloseAnimationEnd,\n onClose,\n onMouseEnter,\n onMouseLeave,\n shouldSkipTransition,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let menuRef = useRef(null);\n if (ref) {\n menuRef = ref;\n }\n const backdropContainerRef = containerRef || menuRef;\n\n const {\n transitionClassNames,\n } = useShowTransition(\n isOpen,\n onCloseAnimationEnd,\n shouldSkipTransition,\n undefined,\n shouldSkipTransition,\n );\n\n useEffect(\n () => (isOpen && onClose ? captureEscKeyListener(onClose) : undefined),\n [isOpen, onClose],\n );\n\n useHistoryBack(isOpen, onClose, undefined, undefined, autoClose);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n if (isOpen || (!isOpen && prevIsOpen === true)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n }, [isOpen]);\n\n const handleKeyDown = useKeyboardListNavigation(menuRef, isOpen, autoClose ? onClose : undefined, undefined, true);\n\n useVirtualBackdrop(\n isOpen,\n backdropContainerRef,\n noCloseOnBackdrop ? undefined : onClose,\n );\n\n const bubbleClassName = buildClassName(\n 'bubble menu-container custom-scroll',\n positionY,\n positionX,\n footer && 'with-footer',\n transitionClassNames,\n );\n\n const transformOriginYStyle = transformOriginY !== undefined ? `${transformOriginY}px` : undefined;\n const transformOriginXStyle = transformOriginX !== undefined ? `${transformOriginX}px` : undefined;\n\n return (\n \n {isOpen && (\n // This only prevents click events triggering on underlying elements\n
\n )}\n \n {children}\n {footer &&
{footer}
}\n
\n
\n );\n};\n\nexport default Menu;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './MenuItem.scss';\n\ntype OnClickHandler = (e: React.SyntheticEvent) => void;\n\ntype OwnProps = {\n icon?: string;\n className?: string;\n children: any;\n onClick?: OnClickHandler;\n href?: string;\n download?: string;\n disabled?: boolean;\n destructive?: boolean;\n ariaLabel?: string;\n};\n\nconst MenuItem: FC = (props) => {\n const {\n icon,\n className,\n children,\n onClick,\n href,\n download,\n disabled,\n destructive,\n ariaLabel,\n } = props;\n\n const lang = useLang();\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 13 && e.keyCode !== 32) {\n return;\n }\n\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const fullClassName = buildClassName(\n 'MenuItem',\n className,\n disabled && 'disabled',\n destructive && 'destructive',\n );\n\n const content = (\n <>\n {icon && (\n \n )}\n {children}\n \n );\n\n if (href) {\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n
\n );\n};\n\nexport default MenuItem;\n","import React, {\n FC, useCallback, useMemo, useState, memo,\n} from '../../lib/teact/teact';\nimport { debounce } from '../../util/schedulers';\n\nimport './RippleEffect.scss';\n\ninterface Ripple {\n x: number;\n y: number;\n size: number;\n}\n\nconst ANIMATION_DURATION_MS = 700;\n\nconst RippleEffect: FC = () => {\n const [ripples, setRipples] = useState([]);\n\n const cleanUpDebounced = useMemo(() => {\n return debounce(() => {\n setRipples([]);\n }, ANIMATION_DURATION_MS, false);\n }, []);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (e.button !== 0) {\n return;\n }\n\n const container = e.currentTarget as HTMLDivElement;\n const position = container.getBoundingClientRect() as DOMRect;\n\n const rippleSize = container.offsetWidth / 2;\n\n setRipples([\n ...ripples,\n {\n x: e.clientX - position.x - (rippleSize / 2),\n y: e.clientY - position.y - (rippleSize / 2),\n size: rippleSize,\n },\n ]);\n\n requestAnimationFrame(() => {\n cleanUpDebounced();\n });\n }, [ripples, cleanUpDebounced]);\n\n return (\n
\n {ripples.map(({ x, y, size }) => (\n \n ))}\n
\n );\n};\n\nexport default memo(RippleEffect);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Spinner.scss';\n\nconst Spinner: FC<{\n color?: 'blue' | 'white' | 'black' | 'green' | 'gray' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n}> = ({\n color = 'blue',\n backgroundColor,\n}) => {\n return (\n
\n
\n
\n );\n};\n\nexport default Spinner;\n","export const APP_NAME = 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\nexport const APP_REVISION = process.env.APP_REVISION;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v7';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { useEffect } from '../lib/teact/teact';\nimport usePrevious from './usePrevious';\n\nconst useEffectWithPrevDeps = (cb: (args: T | []) => void, dependencies: T, debugKey?: string) => {\n const prevDeps = usePrevious(dependencies);\n return useEffect(() => {\n return cb(prevDeps || []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies, debugKey);\n};\n\nexport default useEffectWithPrevDeps;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useFlag = (initial = false): [boolean, AnyToVoidFunction, AnyToVoidFunction] => {\n const [value, setValue] = useState(initial);\n\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n\n return [value, setTrue, setFalse];\n};\n\nexport default useFlag;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useForceUpdate = () => {\n const [, setTrigger] = useState(false);\n\n return useCallback(() => {\n setTrigger((trigger) => !trigger);\n }, []);\n};\n\nexport default useForceUpdate;\n","import { useEffect } from '../lib/teact/teact';\n\nconst ANIMATION_START_EVENT = 'tt-event-heavy-animation-start';\nconst ANIMATION_END_EVENT = 'tt-event-heavy-animation-end';\n\nlet timeout: number | undefined;\nlet isAnimating = false;\n\n// Make sure to end even if end callback was not called (which was some hardly-reproducible bug)\nconst AUTO_END_TIMEOUT = 1000;\n\nconst useHeavyAnimationCheck = (\n handleAnimationStart: AnyToVoidFunction,\n handleAnimationEnd: AnyToVoidFunction,\n isDisabled = false,\n) => {\n useEffect(() => {\n if (isDisabled) {\n return undefined;\n }\n\n if (isAnimating) {\n handleAnimationStart();\n }\n\n document.addEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n document.addEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n\n return () => {\n document.removeEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n document.removeEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n };\n }, [isDisabled, handleAnimationEnd, handleAnimationStart]);\n};\n\nexport function isHeavyAnimating() {\n return isAnimating;\n}\n\nexport function dispatchHeavyAnimationEvent(duration = AUTO_END_TIMEOUT) {\n if (!isAnimating) {\n isAnimating = true;\n document.dispatchEvent(new Event(ANIMATION_START_EVENT));\n }\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n // Race condition may happen if another `dispatchHeavyAnimationEvent` is called before `onEnd`\n function onEnd() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n isAnimating = false;\n document.dispatchEvent(new Event(ANIMATION_END_EVENT));\n }\n\n timeout = window.setTimeout(onEnd, duration);\n\n return onEnd;\n}\n\nexport default useHeavyAnimationCheck;\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nimport { IS_IOS } from '../util/environment';\nimport usePrevious from './usePrevious';\nimport { getDispatch } from '../lib/teact/teactn';\nimport { areSortedArraysEqual } from '../util/iteratees';\n\ntype HistoryState = {\n currentIndex: number;\n nextStateIndexToReplace: number;\n isHistoryAltered: boolean;\n isDisabled: boolean;\n isEdge: boolean;\n currentIndexes: number[];\n};\n\n// Carefully selected by swiping and observing visual changes\n// TODO: may be different on other devices such as iPad, maybe take dpi into account?\nconst SAFARI_EDGE_BACK_GESTURE_LIMIT = 300;\nconst SAFARI_EDGE_BACK_GESTURE_DURATION = 350;\nexport const LOCATION_HASH = window.location.hash;\nconst PATH_BASE = `${window.location.pathname}${window.location.search}`;\n\nconst historyState: HistoryState = {\n currentIndex: 0,\n nextStateIndexToReplace: -1,\n isHistoryAltered: false,\n isDisabled: false,\n isEdge: false,\n currentIndexes: [],\n};\n\nexport const disableHistoryBack = () => {\n historyState.isDisabled = true;\n};\n\nconst handleTouchStart = (event: TouchEvent) => {\n const x = event.touches[0].pageX;\n\n if (x <= SAFARI_EDGE_BACK_GESTURE_LIMIT || x >= window.innerWidth - SAFARI_EDGE_BACK_GESTURE_LIMIT) {\n historyState.isEdge = true;\n }\n};\n\nconst handleTouchEnd = () => {\n if (historyState.isEdge) {\n setTimeout(() => {\n historyState.isEdge = false;\n }, SAFARI_EDGE_BACK_GESTURE_DURATION);\n }\n};\n\nif (IS_IOS) {\n window.addEventListener('touchstart', handleTouchStart);\n window.addEventListener('touchend', handleTouchEnd);\n window.addEventListener('popstate', handleTouchEnd);\n}\n\nwindow.history.replaceState({ index: historyState.currentIndex }, '', PATH_BASE);\n\nexport default function useHistoryBack(\n isActive: boolean | undefined,\n onBack: ((noDisableAnimation: boolean) => void) | undefined,\n onForward?: (state: any) => void,\n currentState?: any,\n shouldReplaceNext = false,\n hashes?: string[],\n) {\n const indexRef = useRef(-1);\n const isForward = useRef(false);\n const prevIsActive = usePrevious(isActive);\n const isClosed = useRef(true);\n const indexHashRef = useRef<{ index: number; hash: string }[]>([]);\n const prevHashes = usePrevious(hashes);\n const isHashChangedFromEvent = useRef(false);\n\n const handleChange = useCallback((isForceClose = false) => {\n if (!hashes) {\n if (isActive && !isForceClose) {\n isClosed.current = false;\n\n if (isForward.current) {\n isForward.current = false;\n historyState.currentIndexes.push(indexRef.current);\n } else {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n\n historyState.currentIndexes.push(index);\n\n window.history[(\n (\n historyState.currentIndexes.includes(historyState.nextStateIndexToReplace - 1)\n && window.history.state.index !== 0\n && historyState.nextStateIndexToReplace === index\n && !shouldReplaceNext\n )\n ? 'replaceState'\n : 'pushState'\n )]({\n index,\n state: currentState,\n }, '');\n\n indexRef.current = index;\n\n if (shouldReplaceNext) {\n historyState.nextStateIndexToReplace = historyState.currentIndex + 1;\n }\n }, 0);\n }\n }\n\n if ((isForceClose || !isActive) && !isClosed.current) {\n if ((indexRef.current === historyState.currentIndex || !shouldReplaceNext)) {\n historyState.isHistoryAltered = true;\n window.history.back();\n\n setTimeout(() => {\n historyState.nextStateIndexToReplace = -1;\n }, 400);\n }\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(indexRef.current), 1);\n\n isClosed.current = true;\n }\n } else {\n const prev = prevHashes || [];\n if (prev.length < hashes.length) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes.push(index);\n\n window.history.pushState({\n index,\n state: currentState,\n }, '', `#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current.push({\n index,\n hash: hashes[hashes.length - 1],\n });\n }, 0);\n } else {\n const delta = prev.length - hashes.length;\n if (isHashChangedFromEvent.current) {\n isHashChangedFromEvent.current = false;\n } else {\n if (hashes.length !== indexHashRef.current.length) {\n if (delta > 0) {\n const last = indexHashRef.current[indexHashRef.current.length - delta - 1];\n let realDelta = delta;\n if (last) {\n const indexLast = historyState.currentIndexes.findIndex(\n (l) => l === last.index,\n );\n realDelta = historyState.currentIndexes.length - indexLast - 1;\n }\n historyState.isHistoryAltered = true;\n window.history.go(-realDelta);\n const removed = indexHashRef.current.splice(indexHashRef.current.length - delta - 1, delta);\n removed.forEach(({ index }) => {\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(index), 1);\n });\n }\n }\n\n if (hashes.length > 0) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes[historyState.currentIndexes.length - 1] = index;\n\n window.history.replaceState({\n index,\n state: currentState,\n }, '', `${PATH_BASE}#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current[indexHashRef.current.length - 1] = {\n index,\n hash: hashes[hashes.length - 1],\n };\n }, 0);\n }\n }\n }\n }\n }, [currentState, hashes, isActive, prevHashes, shouldReplaceNext]);\n\n useEffect(() => {\n const handlePopState = (event: PopStateEvent) => {\n if (historyState.isHistoryAltered) {\n setTimeout(() => {\n historyState.isHistoryAltered = false;\n }, 0);\n return;\n }\n const { index: i } = event.state;\n const index = i || 0;\n try {\n const currIndex = hashes ? indexHashRef.current[indexHashRef.current.length - 1].index : indexRef.current;\n\n const prev = historyState.currentIndexes[historyState.currentIndexes.indexOf(currIndex) - 1];\n\n if (historyState.isDisabled) return;\n\n if ((!isClosed.current && (index === 0 || index === prev)) || (hashes && (index === 0 || index === prev))) {\n if (hashes) {\n isHashChangedFromEvent.current = true;\n indexHashRef.current.pop();\n }\n\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(currIndex), 1);\n\n if (onBack) {\n if (historyState.isEdge) {\n getDispatch()\n .disableHistoryAnimations();\n }\n onBack(!historyState.isEdge);\n isClosed.current = true;\n }\n } else if (index === currIndex && isClosed.current && onForward && !hashes) {\n isForward.current = true;\n if (historyState.isEdge) {\n getDispatch()\n .disableHistoryAnimations();\n }\n onForward(event.state.state);\n }\n } catch (e) {\n // Forward navigation for hashed is not supported\n }\n };\n\n const hasChanged = hashes\n ? (!prevHashes || !areSortedArraysEqual(prevHashes, hashes))\n : prevIsActive !== isActive;\n\n if (!historyState.isDisabled && hasChanged) {\n handleChange();\n }\n\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [\n currentState, handleChange, hashes, isActive, onBack, onForward, prevHashes, prevIsActive, shouldReplaceNext,\n ]);\n\n return {\n forceClose: () => handleChange(true),\n };\n}\n","import { RefObject } from 'react';\nimport { useState, useCallback, useEffect } from '../lib/teact/teact';\n\nconst useKeyboardListNavigation = (\n elementRef: RefObject,\n isOpen: boolean,\n onSelectWithEnter?: (index: number) => void,\n itemSelector?: string,\n noCaptureFocus?: boolean,\n) => {\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n useEffect(() => {\n setFocusedIndex(-1);\n\n const element = elementRef.current;\n if (isOpen && element && !noCaptureFocus) {\n element.tabIndex = -1;\n element.focus();\n }\n }, [elementRef, isOpen, noCaptureFocus]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n const element = elementRef.current;\n\n if (!element) {\n return;\n }\n\n if (e.keyCode === 13 && onSelectWithEnter) {\n onSelectWithEnter(focusedIndex);\n return;\n }\n\n if (e.keyCode !== 38 && e.keyCode !== 40) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(itemSelector ? element.querySelectorAll(itemSelector) : element.children);\n\n let newIndex = (focusedElement && elementChildren.indexOf(focusedElement)) || focusedIndex;\n\n if (e.keyCode === 38 && newIndex > 0) {\n newIndex--;\n } else if (e.keyCode === 40 && newIndex < elementChildren.length - 1) {\n newIndex++;\n } else if (elementChildren.length === 1) {\n newIndex = 0;\n } else {\n return;\n }\n\n const item = elementChildren[newIndex] as HTMLElement;\n if (item) {\n setFocusedIndex(newIndex);\n item.focus();\n }\n }, [elementRef, onSelectWithEnter, itemSelector, focusedIndex]);\n\n return handleKeyDown;\n};\n\nexport default useKeyboardListNavigation;\n","import * as langProvider from '../util/langProvider';\nimport useForceUpdate from './useForceUpdate';\nimport useOnChange from './useOnChange';\n\nexport type LangFn = typeof langProvider.getTranslation;\n\nconst useLang = (): LangFn => {\n const forceUpdate = useForceUpdate();\n\n useOnChange(() => {\n return langProvider.addCallback(forceUpdate);\n }, [forceUpdate]);\n\n return langProvider.getTranslation;\n};\n\nexport default useLang;\n","import { useEffect } from '../lib/teact/teact';\n\nimport {\n BundleModules, Bundles, getModuleFromMemory, loadModule, addLoadListener,\n} from '../util/moduleLoader';\n\nimport useForceUpdate from './useForceUpdate';\n\nconst useModuleLoader = >(\n bundleName: B, moduleName: M, noLoad = false, autoUpdate = false,\n) => {\n const module = getModuleFromMemory(bundleName, moduleName);\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!autoUpdate) {\n return undefined;\n }\n\n return addLoadListener(forceUpdate);\n }, [autoUpdate, forceUpdate]);\n\n useEffect(() => {\n if (!noLoad && !module) {\n loadModule(bundleName, moduleName).then(forceUpdate);\n }\n }, [bundleName, forceUpdate, module, moduleName, noLoad]);\n\n return module;\n};\n\nexport default useModuleLoader;\n","import usePrevious from './usePrevious';\n\nconst useOnChange = (cb: (args: T | []) => void, dependencies: T) => {\n const prevDeps = usePrevious(dependencies);\n if (!prevDeps || dependencies.some((d, i) => d !== prevDeps[i])) {\n cb(prevDeps || []);\n }\n};\n\nexport default useOnChange;\n","import { useRef } from '../lib/teact/teact';\n\nfunction usePrevious(next: T): T | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined: true): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean) {\n const ref = useRef();\n const { current } = ref;\n if (!shouldSkipUndefined || next !== undefined) {\n ref.current = next;\n }\n\n return current;\n}\n\nexport default usePrevious;\n","import { useRef, useState } from '../lib/teact/teact';\nimport buildClassName from '../util/buildClassName';\n\nconst CLOSE_DURATION = 350;\n\nconst useShowTransition = (\n isOpen = false,\n onCloseTransitionEnd?: () => void,\n noOpenTransition = false,\n className: string | false = 'fast',\n noCloseTransition = false,\n) => {\n const [isClosed, setIsClosed] = useState(!isOpen);\n const closeTimeoutRef = useRef();\n // СSS class should be added in a separate tick to turn on CSS transition.\n const [hasOpenClassName, setHasOpenClassName] = useState(isOpen && noOpenTransition);\n\n if (isOpen) {\n setIsClosed(false);\n setHasOpenClassName(true);\n\n if (closeTimeoutRef.current) {\n window.clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = undefined;\n }\n } else {\n setHasOpenClassName(false);\n\n if (!isClosed && !closeTimeoutRef.current) {\n const exec = () => {\n setIsClosed(true);\n\n if (onCloseTransitionEnd) {\n onCloseTransitionEnd();\n }\n\n closeTimeoutRef.current = undefined;\n };\n\n if (noCloseTransition) {\n exec();\n } else {\n closeTimeoutRef.current = window.setTimeout(exec, CLOSE_DURATION);\n }\n }\n }\n\n // `noCloseTransition`, when set to true, should remove the open class immediately\n const shouldHaveOpenClassName = hasOpenClassName && !(noCloseTransition && !isOpen);\n const isClosing = Boolean(closeTimeoutRef.current);\n const shouldRender = isOpen || isClosing;\n const transitionClassNames = buildClassName(\n className && 'opacity-transition',\n className,\n shouldHaveOpenClassName && 'open',\n shouldRender && 'shown',\n isClosing && 'closing',\n );\n\n return {\n shouldRender,\n transitionClassNames,\n };\n};\n\nexport default useShowTransition;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\n\nconst BACKDROP_CLASSNAME = 'backdrop';\n\n// This effect implements closing menus by clicking outside of them\n// without adding extra elements to the DOM\nexport default function useVirtualBackdrop(\n isOpen: boolean,\n menuRef: RefObject,\n onClose?: () => void | undefined,\n) {\n useEffect(() => {\n const handleEvent = (e: Event) => {\n const menu = menuRef.current;\n const target = e.target as HTMLElement | null;\n if (!menu || !target) {\n return;\n }\n\n if (\n !menu.contains(e.target as Node | null)\n || target.classList.contains(BACKDROP_CLASSNAME)\n ) {\n e.preventDefault();\n e.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n };\n\n if (isOpen && onClose) {\n document.addEventListener('mousedown', handleEvent);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleEvent);\n };\n }, [isOpen, menuRef, onClose]);\n}\n","import { DEBUG } from '../../config';\n\ntype Handler = (e: Event) => void;\ntype DelegationRegistry = Map;\n\nconst NON_BUBBLEABLE_EVENTS = new Set(['scroll', 'mouseenter', 'mouseleave']);\n\nconst documentEventCounters: Record = {};\nconst delegationRegistryByEventType: Record = {};\nconst delegatedEventTypesByElement = new Map>();\n\nexport function addEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n addDelegatedListener(eventType, element, handler);\n } else {\n element.addEventListener(eventType, handler, asCapture);\n }\n}\n\nexport function removeEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n removeDelegatedListener(eventType, element);\n } else {\n element.removeEventListener(eventType, handler, asCapture);\n }\n}\n\nfunction resolveEventType(propName: string, element: HTMLElement) {\n const eventType = propName\n .replace(/^on/, '')\n .replace(/Capture$/, '').toLowerCase();\n\n if (eventType === 'change' && element.tagName !== 'SELECT') {\n // React behavior repeated here.\n // https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput\n return 'input';\n }\n\n if (eventType === 'doubleclick') {\n return 'dblclick';\n }\n\n // Replace focus/blur by their \"bubbleable\" versions\n if (eventType === 'focus') {\n return 'focusin';\n }\n\n if (eventType === 'blur') {\n return 'focusout';\n }\n\n return eventType;\n}\n\nfunction canUseEventDelegation(realEventType: string, element: HTMLElement, asCapture: boolean) {\n return (\n !asCapture\n && !NON_BUBBLEABLE_EVENTS.has(realEventType)\n && element.tagName !== 'VIDEO'\n && element.tagName !== 'IFRAME'\n );\n}\n\nfunction addDelegatedListener(eventType: string, element: HTMLElement, handler: Handler) {\n if (!documentEventCounters[eventType]) {\n documentEventCounters[eventType] = 0;\n document.addEventListener(eventType, handleEvent);\n }\n\n resolveDelegationRegistry(eventType).set(element, handler);\n resolveDelegatedEventTypes(element).add(eventType);\n documentEventCounters[eventType]++;\n}\n\nfunction removeDelegatedListener(eventType: string, element: HTMLElement) {\n documentEventCounters[eventType]--;\n if (!documentEventCounters[eventType]) {\n // Synchronous deletion on 0 will cause perf degradation in the case of 1 element\n // which is not a real case, so it's ok to do it this way\n document.removeEventListener(eventType, handleEvent);\n }\n\n delegationRegistryByEventType[eventType].delete(element);\n delegatedEventTypesByElement.get(element)!.delete(eventType);\n}\n\nexport function removeAllDelegatedListeners(element: HTMLElement) {\n const eventTypes = delegatedEventTypesByElement.get(element);\n if (!eventTypes) {\n return;\n }\n\n eventTypes.forEach((eventType) => removeDelegatedListener(eventType, element));\n delegatedEventTypesByElement.delete(element);\n}\n\nfunction handleEvent(realEvent: Event) {\n const events = delegationRegistryByEventType[realEvent.type];\n\n if (events) {\n let furtherCallsPrevented = false;\n let current: HTMLElement = realEvent.target as HTMLElement;\n\n const stopPropagation = () => {\n furtherCallsPrevented = true;\n };\n\n const preventDefault = () => {\n realEvent.preventDefault();\n };\n\n // Proxy is a simplest way to provide an access to the event property\n const event = new Proxy(realEvent, {\n get(target, p) {\n if (p === 'currentTarget') {\n return current;\n }\n if (p === 'stopPropagation' || p === 'stopImmediatePropagation') {\n return stopPropagation;\n }\n if (p === 'preventDefault') {\n // \"this\" is changed to proxy and one can't call methods via it\n return preventDefault;\n }\n return Reflect.get(target, p);\n },\n });\n\n // This can also be limited by teact root\n while (current && current !== document.body) {\n const handler = events.get(current);\n if (handler) {\n handler(event);\n if (furtherCallsPrevented) {\n return;\n }\n }\n\n current = current.parentNode as HTMLElement;\n }\n }\n}\n\nfunction resolveDelegationRegistry(eventType: string) {\n if (!delegationRegistryByEventType[eventType]) {\n delegationRegistryByEventType[eventType] = new Map();\n }\n\n return delegationRegistryByEventType[eventType];\n}\n\nfunction resolveDelegatedEventTypes(element: HTMLElement) {\n const existing = delegatedEventTypesByElement.get(element);\n if (existing) {\n return existing;\n }\n\n const newSet = new Set();\n delegatedEventTypesByElement.set(element, newSet);\n\n return newSet;\n}\n\nif (DEBUG) {\n document.addEventListener('dblclick', () => {\n const documentListenersCount = Object.keys(documentEventCounters).length;\n const delegatedHandlersCount1 = Object.values(documentEventCounters)\n .reduce((acc, counter) => acc + counter, 0);\n const delegationRegistriesCount = Object.keys(delegationRegistryByEventType).length;\n const delegatedHandlersCount2 = Object.values(delegationRegistryByEventType)\n .reduce((acc, delegationRegistry) => acc + delegationRegistry.size, 0);\n const delegationElementsCount = delegatedEventTypesByElement.size;\n const delegatedEventTypesCount = Array.from(delegatedEventTypesByElement.values())\n .reduce((acc, eventTypes) => acc + eventTypes.size, 0);\n\n // eslint-disable-next-line no-console\n console.warn('DELEGATED EVENTS STATS', {\n delegatedHandlersCount1,\n delegatedHandlersCount2,\n delegatedEventTypesCount,\n delegationRegistriesCount,\n delegationElementsCount,\n documentListenersCount,\n });\n });\n}\n","import {\n hasElementChanged,\n isComponentElement,\n isEmptyElement,\n isRealElement,\n isTextElement,\n mountComponent,\n renderComponent,\n unmountTree,\n getTarget,\n setTarget,\n VirtualElement,\n VirtualElementComponent,\n VirtualRealElement,\n} from './teact';\nimport generateIdFor from '../../util/generateIdFor';\nimport { DEBUG } from '../../config';\nimport { addEventListener, removeEventListener } from './dom-events';\n\ntype VirtualDomHead = {\n children: [VirtualElement] | [];\n};\n\nconst FILTERED_ATTRIBUTES = new Set(['key', 'ref', 'teactFastList', 'teactOrderKey']);\nconst HTML_ATTRIBUTES = new Set(['dir', 'role']);\nconst MAPPED_ATTRIBUTES: { [k: string]: string } = {\n autoPlay: 'autoplay',\n autoComplete: 'autocomplete',\n};\nconst INDEX_KEY_PREFIX = '__indexKey#';\n\nconst headsByElement: Record = {};\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEBUG_virtualTreeSize = 1;\n\nfunction render($element?: VirtualElement, parentEl?: HTMLElement | null) {\n if (!parentEl) {\n return undefined;\n }\n\n let headId = parentEl.getAttribute('data-teact-head-id');\n if (!headId) {\n headId = generateIdFor(headsByElement);\n headsByElement[headId] = { children: [] };\n parentEl.setAttribute('data-teact-head-id', headId);\n }\n\n const $head = headsByElement[headId];\n $head.children = [renderWithVirtual(parentEl, $head.children[0], $element, $head, 0) as VirtualElement];\n\n if (process.env.APP_ENV === 'perf') {\n DEBUG_virtualTreeSize = 0;\n DEBUG_addToVirtualTreeSize($head);\n\n return DEBUG_virtualTreeSize;\n }\n\n return undefined;\n}\n\nfunction renderWithVirtual(\n parentEl: HTMLElement,\n $current: VirtualElement | undefined,\n $new: VirtualElement | undefined,\n $parent: VirtualRealElement | VirtualDomHead,\n index: number,\n {\n skipComponentUpdate = false,\n forceIndex = false,\n fragment,\n moveDirection,\n }: {\n skipComponentUpdate?: boolean;\n forceIndex?: boolean;\n fragment?: DocumentFragment;\n moveDirection?: 'up' | 'down';\n } = {},\n) {\n const isCurrentComponent = $current && isComponentElement($current);\n const isNewComponent = $new && isComponentElement($new);\n\n if (\n !skipComponentUpdate\n && isCurrentComponent && isNewComponent\n && !hasElementChanged($current!, $new!)\n ) {\n $new = updateComponent($current as VirtualElementComponent, $new as VirtualElementComponent);\n }\n\n // Parent element may have changed, so we need to update the listener closure.\n if (!skipComponentUpdate && isNewComponent && ($new as VirtualElementComponent).componentInstance.isMounted) {\n setupComponentUpdateListener($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n if ($current === $new) {\n return $new;\n }\n\n if (!$current && $new) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n\n if (forceIndex && parentEl.childNodes[index]) {\n parentEl.insertBefore(node, parentEl.childNodes[index]);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n } else if ($current && !$new) {\n parentEl.removeChild(getTarget($current)!);\n unmountTree($current);\n } else if ($current && $new) {\n if (hasElementChanged($current, $new)) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n parentEl.replaceChild(node, getTarget($current)!);\n unmountTree($current);\n } else {\n const areComponents = isCurrentComponent && isNewComponent;\n const currentTarget = getTarget($current);\n\n if (!areComponents) {\n setTarget($new, currentTarget!);\n setTarget($current, undefined as any); // Help GC\n\n if ('props' in $current && 'props' in $new) {\n $new.props.ref = $current.props.ref;\n }\n }\n\n if (isRealElement($new)) {\n if (moveDirection) {\n const node = currentTarget!;\n const nextSibling = parentEl.childNodes[moveDirection === 'up' ? index : index + 1];\n\n if (nextSibling) {\n parentEl.insertBefore(node, nextSibling);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n }\n\n if (!areComponents) {\n updateAttributes(($current as VirtualRealElement), $new, currentTarget as HTMLElement);\n }\n\n $new.children = renderChildren(\n ($current as VirtualRealElement),\n $new,\n areComponents ? parentEl : currentTarget as HTMLElement,\n );\n }\n }\n }\n\n return $new;\n}\n\nfunction initComponent(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n if (!isComponentElement($element)) {\n return $element;\n }\n\n const { componentInstance } = $element;\n\n if (!componentInstance.isMounted) {\n $element = mountComponent(componentInstance);\n setupComponentUpdateListener($element, $parent, index, parentEl);\n\n const $firstChild = $element.children[0];\n if (isComponentElement($firstChild)) {\n $element.children = [initComponent($firstChild, $element, 0, parentEl)];\n }\n\n componentInstance.isMounted = true;\n }\n\n return $element;\n}\n\nfunction updateComponent($current: VirtualElementComponent, $new: VirtualElementComponent) {\n $current.componentInstance.props = $new.componentInstance.props;\n\n return renderComponent($current.componentInstance);\n}\n\nfunction setupComponentUpdateListener(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n const { componentInstance } = $element;\n\n componentInstance.onUpdate = () => {\n $parent.children[index] = renderWithVirtual(\n parentEl,\n $parent.children[index],\n componentInstance.$element,\n $parent,\n index,\n { skipComponentUpdate: true },\n ) as VirtualElementComponent;\n };\n}\n\nfunction createNode($element: VirtualElement): Node {\n if (isEmptyElement($element)) {\n return document.createTextNode('');\n }\n\n if (isTextElement($element)) {\n return document.createTextNode($element.value);\n }\n\n if (isComponentElement($element)) {\n return createNode($element.children[0] as VirtualElement);\n }\n\n const { tag, props, children = [] } = $element;\n const element = document.createElement(tag);\n\n if (typeof props.ref === 'object') {\n props.ref.current = element;\n }\n\n Object.entries(props).forEach(([key, value]) => {\n if (props[key] !== undefined) {\n setAttribute(element, key, value);\n }\n });\n\n $element.children = children.map(($child, i) => (\n renderWithVirtual(element, undefined, $child, $element, i) as VirtualElement\n ));\n\n return element;\n}\n\nfunction renderChildren(\n $current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement,\n) {\n if ($new.props.teactFastList) {\n return renderFastListChildren($current, $new, currentEl);\n }\n\n const currentChildrenLength = $current.children.length;\n const newChildrenLength = $new.children.length;\n const maxLength = Math.max(currentChildrenLength, newChildrenLength);\n const newChildren = [];\n const fragment = newChildrenLength > currentChildrenLength + 1 ? document.createDocumentFragment() : undefined;\n\n for (let i = 0; i < maxLength; i++) {\n const $newChild = renderWithVirtual(\n currentEl,\n $current.children[i],\n $new.children[i],\n $new,\n i,\n i >= currentChildrenLength ? { fragment } : undefined,\n );\n\n if ($newChild) {\n newChildren.push($newChild);\n }\n }\n\n if (fragment) {\n currentEl.appendChild(fragment);\n }\n\n return newChildren;\n}\n\nfunction renderFastListChildren($current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement) {\n const newKeys = new Set(\n $new.children.map(($newChild) => {\n const key = 'props' in $newChild && $newChild.props.key;\n\n // eslint-disable-next-line no-null/no-null\n if (DEBUG && isRealElement($newChild) && (key === undefined || key === null)) {\n // eslint-disable-next-line no-console\n console.warn('Missing `key` in `teactFastList`');\n }\n\n return key;\n }),\n );\n\n let currentRemainingIndex = 0;\n const remainingByKey = $current.children\n .reduce((acc, $currentChild, i) => {\n let key = 'props' in $currentChild ? $currentChild.props.key : undefined;\n // eslint-disable-next-line no-null/no-null\n const isKeyPresent = key !== undefined && key !== null;\n\n // First we handle removed children\n if (isKeyPresent && !newKeys.has(key)) {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n } else if (!isKeyPresent) {\n const $newChild = $new.children[i];\n const newChildKey = ($newChild && 'props' in $newChild) ? $newChild.props.key : undefined;\n // If a non-key element remains at the same index we preserve it with a virtual `key`\n if ($newChild && !newChildKey) {\n key = `${INDEX_KEY_PREFIX}${i}`;\n } else {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n }\n }\n\n // Then we build up info about remaining children\n acc[key] = {\n $element: $currentChild,\n index: currentRemainingIndex++,\n order: 'props' in $currentChild ? $currentChild.props.teactOrderKey : undefined,\n };\n return acc;\n }, {} as Record);\n\n let newChildren: VirtualElement[] = [];\n\n let fragmentQueue: VirtualElement[] | undefined;\n let fragmentIndex: number | undefined;\n\n let currentPreservedIndex = 0;\n\n $new.children.forEach(($newChild, i) => {\n const key = 'props' in $newChild ? $newChild.props.key : `${INDEX_KEY_PREFIX}${i}`;\n const currentChildInfo = remainingByKey[key];\n\n if (!currentChildInfo) {\n // All new nodes are queued to be inserted with fragments if possible.\n if (!fragmentQueue) {\n fragmentQueue = [];\n fragmentIndex = i;\n }\n\n fragmentQueue.push($newChild);\n return;\n }\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n fragmentIndex = undefined;\n fragmentQueue = undefined;\n }\n\n // This is a \"magic\" `teactOrderKey` property that tells us the element is updated\n const order = 'props' in $newChild ? $newChild.props.teactOrderKey : undefined;\n const shouldMoveNode = currentChildInfo.index !== currentPreservedIndex && currentChildInfo.order !== order;\n const isMovingDown = shouldMoveNode && currentPreservedIndex > currentChildInfo.index;\n\n // When the node goes down, preserved indexing actually breaks, so the \"magic\" should help.\n if (!shouldMoveNode || isMovingDown) {\n currentPreservedIndex++;\n }\n\n newChildren.push(\n renderWithVirtual(currentEl, currentChildInfo.$element, $newChild, $new, i, {\n forceIndex: true,\n moveDirection: shouldMoveNode ? (isMovingDown ? 'down' : 'up') : undefined,\n })!,\n );\n });\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n }\n\n return newChildren;\n}\n\nfunction flushFragmentQueue(\n fragmentQueue: VirtualElement[], fragmentIndex: number, parentEl: HTMLElement, $parent: VirtualRealElement,\n) {\n if (fragmentQueue.length === 1) {\n return [renderWithVirtual(parentEl, undefined, fragmentQueue[0], $parent, fragmentIndex, { forceIndex: true })!];\n } else if (fragmentQueue.length > 1) {\n const fragment = document.createDocumentFragment();\n const newChildren = fragmentQueue.map(($fragmentChild) => (\n renderWithVirtual(parentEl, undefined, $fragmentChild, $parent, fragmentIndex!, { fragment })!\n ));\n\n if (parentEl.childNodes[fragmentIndex]) {\n parentEl.insertBefore(fragment, parentEl.childNodes[fragmentIndex]);\n } else {\n parentEl.appendChild(fragment);\n }\n\n return newChildren;\n }\n\n throw new Error('Unexpected input');\n}\n\nfunction updateAttributes($current: VirtualRealElement, $new: VirtualRealElement, element: HTMLElement) {\n const currentEntries = Object.entries($current.props);\n const newEntries = Object.entries($new.props);\n\n currentEntries.forEach(([key, currentValue]) => {\n const newValue = $new.props[key];\n\n if (\n currentValue !== undefined\n && (\n newValue === undefined\n || (currentValue !== newValue && key.startsWith('on'))\n )\n ) {\n removeAttribute(element, key, currentValue);\n }\n });\n\n newEntries.forEach(([key, newValue]) => {\n const currentValue = $current.props[key];\n\n if (newValue !== undefined && newValue !== currentValue) {\n setAttribute(element, key, newValue);\n }\n });\n}\n\nfunction setAttribute(element: HTMLElement, key: string, value: any) {\n // An optimization attempt\n if (key === 'className') {\n element.className = value;\n // An optimization attempt\n } else if (key === 'value') {\n if ((element as HTMLInputElement).value !== value) {\n (element as HTMLInputElement).value = value;\n }\n } else if (key === 'style') {\n element.style.cssText = value;\n } else if (key === 'dangerouslySetInnerHTML') {\n // eslint-disable-next-line no-underscore-dangle\n element.innerHTML = value.__html;\n } else if (key.startsWith('on')) {\n addEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.setAttribute(key, value);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n (element as any)[MAPPED_ATTRIBUTES[key] || key] = value;\n }\n}\n\nfunction removeAttribute(element: HTMLElement, key: string, value: any) {\n if (key === 'className') {\n element.className = '';\n } else if (key === 'value') {\n (element as HTMLInputElement).value = '';\n } else if (key === 'style') {\n element.style.cssText = '';\n } else if (key === 'dangerouslySetInnerHTML') {\n element.innerHTML = '';\n } else if (key.startsWith('on')) {\n removeEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.removeAttribute(key);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n delete (element as any)[MAPPED_ATTRIBUTES[key] || key];\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction DEBUG_addToVirtualTreeSize($current: VirtualRealElement | VirtualDomHead) {\n DEBUG_virtualTreeSize += $current.children.length;\n\n $current.children.forEach(($child) => {\n if (isRealElement($child)) {\n DEBUG_addToVirtualTreeSize($child);\n }\n });\n}\n\nconst TeactDOM = { render };\nexport default TeactDOM;\n","import { DEBUG, DEBUG_MORE } from '../../config';\nimport {\n fastRaf, fastRafPrimary, onTickEnd, onTickEndPrimary, throttleWithPrimaryRaf, throttleWithRaf,\n} from '../../util/schedulers';\nimport { flatten, orderBy } from '../../util/iteratees';\nimport arePropsShallowEqual, { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { handleError } from '../../util/handleError';\nimport { removeAllDelegatedListeners } from './dom-events';\n\nexport type Props = AnyLiteral;\nexport type FC

= (props: P) => any;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport type FC_withDebug = FC & {\n DEBUG_contentComponentName?: string;\n};\n\nexport enum VirtualElementTypesEnum {\n Empty,\n Text,\n Tag,\n Component,\n}\n\ninterface VirtualElementEmpty {\n type: VirtualElementTypesEnum.Empty;\n target?: Node;\n}\n\ninterface VirtualElementText {\n type: VirtualElementTypesEnum.Text;\n target?: Node;\n value: string;\n}\n\nexport interface VirtualElementTag {\n type: VirtualElementTypesEnum.Tag;\n target?: Node;\n tag: string;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport interface VirtualElementComponent {\n type: VirtualElementTypesEnum.Component;\n componentInstance: ComponentInstance;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport type StateHookSetter = (newValue: ((current: T) => T) | T) => void;\n\ninterface ComponentInstance {\n $element: VirtualElementComponent;\n Component: FC;\n name: string;\n props: Props;\n renderedValue?: any;\n isMounted: boolean;\n hooks: {\n state: {\n cursor: number;\n byCursor: {\n value: any;\n nextValue: any;\n setter: StateHookSetter;\n }[];\n };\n effects: {\n cursor: number;\n byCursor: {\n effect: () => void;\n dependencies?: readonly any[];\n cleanup?: Function;\n }[];\n };\n memos: {\n cursor: number;\n byCursor: {\n current: any;\n dependencies: any[];\n }[];\n };\n };\n prepareForFrame?: () => void;\n forceUpdate?: () => void;\n onUpdate?: () => void;\n}\n\nexport type VirtualElement =\n VirtualElementEmpty\n | VirtualElementText\n | VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualRealElement =\n VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualElementChildren = VirtualElement[];\n\nconst Fragment = Symbol('Fragment');\n\nconst DEBUG_RENDER_THRESHOLD = 7;\nconst DEBUG_EFFECT_THRESHOLD = 7;\nconst DEBUG_SILENT_RENDERS_FOR = new Set(['TeactMemoWrapper', 'TeactNContainer', 'Button', 'ListItem', 'MenuItem']);\n\nlet renderingInstance: ComponentInstance;\n\nexport function isEmptyElement($element: VirtualElement): $element is VirtualElementEmpty {\n return $element.type === VirtualElementTypesEnum.Empty;\n}\n\nexport function isTextElement($element: VirtualElement): $element is VirtualElementText {\n return $element.type === VirtualElementTypesEnum.Text;\n}\n\nexport function isTagElement($element: VirtualElement): $element is VirtualElementTag {\n return $element.type === VirtualElementTypesEnum.Tag;\n}\n\nexport function isComponentElement($element: VirtualElement): $element is VirtualElementComponent {\n return $element.type === VirtualElementTypesEnum.Component;\n}\n\nexport function isRealElement($element: VirtualElement): $element is VirtualRealElement {\n return isTagElement($element) || isComponentElement($element);\n}\n\nfunction createElement(\n source: string | FC | typeof Fragment,\n props: Props,\n ...children: any[]\n): VirtualRealElement | VirtualElementChildren {\n if (!props) {\n props = {};\n }\n\n children = flatten(children);\n\n if (source === Fragment) {\n return children;\n } else if (typeof source === 'function') {\n return createComponentInstance(source, props, children);\n } else {\n return buildTagElement(source, props, children);\n }\n}\n\nfunction createComponentInstance(Component: FC, props: Props, children: any[]): VirtualElementComponent {\n let parsedChildren: any | any[] | undefined;\n if (children.length === 0) {\n parsedChildren = undefined;\n } else if (children.length === 1) {\n [parsedChildren] = children;\n } else {\n parsedChildren = children;\n }\n\n const componentInstance: ComponentInstance = {\n $element: {} as VirtualElementComponent,\n Component,\n name: Component.name,\n props: {\n ...props,\n ...(parsedChildren && { children: parsedChildren }),\n },\n isMounted: false,\n hooks: {\n state: {\n cursor: 0,\n byCursor: [],\n },\n effects: {\n cursor: 0,\n byCursor: [],\n },\n memos: {\n cursor: 0,\n byCursor: [],\n },\n },\n };\n\n componentInstance.$element = buildComponentElement(componentInstance);\n\n return componentInstance.$element;\n}\n\nfunction buildComponentElement(\n componentInstance: ComponentInstance,\n children: VirtualElementChildren = [],\n): VirtualElementComponent {\n const { props } = componentInstance;\n\n return {\n componentInstance,\n type: VirtualElementTypesEnum.Component,\n props,\n children,\n };\n}\n\nfunction buildTagElement(tag: string, props: Props, children: any[]): VirtualElementTag {\n return {\n type: VirtualElementTypesEnum.Tag,\n tag,\n props,\n children: dropEmptyTail(children).map(buildChildElement),\n };\n}\n\n// We only need placeholders in the middle of collection (to ensure other elements order).\nfunction dropEmptyTail(children: any[]) {\n let i = children.length - 1;\n\n for (; i >= 0; i--) {\n if (!isEmptyPlaceholder(children[i])) {\n break;\n }\n }\n\n return i + 1 < children.length ? children.slice(0, i + 1) : children;\n}\n\nfunction isEmptyPlaceholder(child: any) {\n // eslint-disable-next-line no-null/no-null\n return child === false || child === null || child === undefined;\n}\n\nfunction buildChildElement(child: any): VirtualElement {\n if (isEmptyPlaceholder(child)) {\n return buildEmptyElement();\n } else if (isRealElement(child)) {\n return child;\n } else {\n return buildTextElement(child);\n }\n}\n\nfunction buildTextElement(value: any): VirtualElementText {\n return {\n type: VirtualElementTypesEnum.Text,\n value: String(value),\n };\n}\n\nfunction buildEmptyElement(): VirtualElementEmpty {\n return { type: VirtualElementTypesEnum.Empty };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DEBUG_components: AnyLiteral = {};\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('COMPONENTS', orderBy(Object.values(DEBUG_components), 'renderCount', 'desc'));\n});\n\nexport function renderComponent(componentInstance: ComponentInstance) {\n renderingInstance = componentInstance;\n componentInstance.hooks.state.cursor = 0;\n componentInstance.hooks.effects.cursor = 0;\n componentInstance.hooks.memos.cursor = 0;\n\n const { Component, props } = componentInstance;\n let newRenderedValue;\n\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n const componentName = componentInstance.name;\n if (!DEBUG_components[componentName]) {\n DEBUG_components[componentName] = {\n componentName,\n renderCount: 0,\n renderTimes: [],\n };\n }\n\n if (DEBUG_MORE) {\n if (!DEBUG_SILENT_RENDERS_FOR.has(componentName)) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Render ${componentName}`);\n }\n }\n\n DEBUG_startAt = performance.now();\n }\n\n newRenderedValue = Component(props);\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_RENDER_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow component render: ${componentName}, ${Math.round(duration)} ms`);\n }\n DEBUG_components[componentName].renderTimes.push(duration);\n DEBUG_components[componentName].renderCount++;\n }\n } catch (err: any) {\n handleError(err);\n\n newRenderedValue = componentInstance.renderedValue;\n }\n\n if (componentInstance.isMounted && newRenderedValue === componentInstance.renderedValue) {\n return componentInstance.$element;\n }\n\n componentInstance.renderedValue = newRenderedValue;\n\n const newChild = buildChildElement(newRenderedValue);\n componentInstance.$element = buildComponentElement(componentInstance, [newChild]);\n\n return componentInstance.$element;\n}\n\nexport function hasElementChanged($old: VirtualElement, $new: VirtualElement) {\n if (typeof $old !== typeof $new) {\n return true;\n } else if ($old.type !== $new.type) {\n return true;\n } else if (isTextElement($old) && isTextElement($new)) {\n return $old.value !== $new.value;\n } else if (isTagElement($old) && isTagElement($new)) {\n return ($old.tag !== $new.tag) || ($old.props.key !== $new.props.key);\n } else if (isComponentElement($old) && isComponentElement($new)) {\n return (\n $old.componentInstance.Component !== $new.componentInstance.Component\n ) || (\n $old.props.key !== $new.props.key\n );\n }\n\n return false;\n}\n\nexport function unmountTree($element: VirtualElement) {\n if (isComponentElement($element)) {\n unmountComponent($element.componentInstance);\n } else {\n if (isTagElement($element)) {\n if ($element.target) {\n removeAllDelegatedListeners($element.target as HTMLElement);\n }\n\n if ($element.props.ref) {\n $element.props.ref.current = undefined; // Help GC\n }\n }\n\n if ($element.target) {\n $element.target = undefined; // Help GC\n }\n\n if (!isRealElement($element)) {\n return;\n }\n }\n\n $element.children.forEach(unmountTree);\n}\n\nexport function mountComponent(componentInstance: ComponentInstance) {\n renderComponent(componentInstance);\n componentInstance.isMounted = true;\n return componentInstance.$element;\n}\n\nfunction unmountComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // We need to clean refs before running effect cleanups\n componentInstance.hooks.memos.byCursor.forEach((memoContainer) => {\n memoContainer.current = undefined;\n });\n\n componentInstance.hooks.effects.byCursor.forEach(({ cleanup }) => {\n if (typeof cleanup === 'function') {\n try {\n cleanup();\n } catch (err: any) {\n handleError(err);\n }\n }\n });\n\n componentInstance.isMounted = false;\n\n helpGc(componentInstance);\n}\n\n// We need to remove all references to DOM objects. We also clean all other references, just in case\nfunction helpGc(componentInstance: ComponentInstance) {\n componentInstance.hooks.effects.byCursor.forEach((hook) => {\n hook.cleanup = undefined;\n hook.effect = undefined as any;\n hook.dependencies = undefined;\n });\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = undefined;\n hook.nextValue = undefined;\n hook.setter = undefined as any;\n });\n\n componentInstance.hooks.memos.byCursor.forEach((hook) => {\n hook.dependencies = undefined as any;\n });\n\n componentInstance.hooks = undefined as any;\n componentInstance.$element = undefined as any;\n componentInstance.renderedValue = undefined;\n componentInstance.Component = undefined as any;\n componentInstance.props = undefined as any;\n componentInstance.forceUpdate = undefined;\n componentInstance.onUpdate = undefined;\n}\n\nfunction prepareComponentForFrame(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = hook.nextValue;\n });\n\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(() => prepareComponentForFrame(componentInstance));\n componentInstance.forceUpdate = throttleWithRaf(() => forceUpdateComponent(componentInstance));\n}\n\nfunction forceUpdateComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted || !componentInstance.onUpdate) {\n return;\n }\n\n const currentElement = componentInstance.$element;\n\n renderComponent(componentInstance);\n\n if (componentInstance.$element !== currentElement) {\n componentInstance.onUpdate();\n }\n}\n\nexport function getTarget($element: VirtualElement): Node | undefined {\n if (isComponentElement($element)) {\n return getTarget($element.children[0]);\n } else {\n return $element.target;\n }\n}\n\nexport function setTarget($element: VirtualElement, target: Node) {\n if (isComponentElement($element)) {\n setTarget($element.children[0], target);\n } else {\n $element.target = target;\n }\n}\n\nexport function useState(): [T, StateHookSetter];\nexport function useState(initial: T): [T, StateHookSetter];\nexport function useState(initial?: T): [T, StateHookSetter] {\n const { cursor, byCursor } = renderingInstance.hooks.state;\n\n if (byCursor[cursor] === undefined) {\n byCursor[cursor] = {\n value: initial,\n nextValue: initial,\n setter: ((componentInstance) => (newValue: ((current: T) => T) | T) => {\n if (byCursor[cursor].nextValue !== newValue) {\n byCursor[cursor].nextValue = typeof newValue === 'function'\n ? (newValue as (current: T) => T)(byCursor[cursor].value)\n : newValue;\n\n if (!componentInstance.prepareForFrame || !componentInstance.forceUpdate) {\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(\n () => prepareComponentForFrame(componentInstance),\n );\n componentInstance.forceUpdate = throttleWithRaf(\n () => forceUpdateComponent(componentInstance),\n );\n }\n\n componentInstance.prepareForFrame();\n componentInstance.forceUpdate();\n\n if (DEBUG_MORE) {\n if (componentInstance.name !== 'TeactNContainer') {\n // eslint-disable-next-line no-console\n console.log(\n '[Teact.useState]',\n componentInstance.name,\n // `componentInstance.Component` may be set to `null` by GC helper\n componentInstance.Component && (componentInstance.Component as FC_withDebug).DEBUG_contentComponentName\n ? `> ${(componentInstance.Component as FC_withDebug).DEBUG_contentComponentName}`\n : '',\n `Forced update at cursor #${cursor}, next value: `,\n byCursor[cursor].nextValue,\n );\n }\n }\n }\n })(renderingInstance),\n };\n }\n\n renderingInstance.hooks.state.cursor++;\n\n return [\n byCursor[cursor].value,\n byCursor[cursor].setter,\n ];\n}\n\nfunction useLayoutEffectBase(\n schedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n primarySchedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n effect: () => Function | void,\n dependencies?: readonly any[],\n debugKey?: string,\n) {\n const { cursor, byCursor } = renderingInstance.hooks.effects;\n const componentInstance = renderingInstance;\n\n function execCleanup() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n const { cleanup } = byCursor[cursor];\n if (typeof cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n cleanup();\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Teact] Slow cleanup at effect cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`,\n );\n }\n }\n } catch (err: any) {\n handleError(err);\n }\n }\n }\n\n function exec() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n byCursor[cursor].cleanup = effect() as Function;\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow effect at cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`);\n }\n }\n }\n\n if (byCursor[cursor] !== undefined && dependencies && byCursor[cursor].dependencies) {\n if (dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies![i])) {\n if (debugKey) {\n const causedBy = dependencies.reduce((res, newValue, i) => {\n const prevValue = byCursor[cursor].dependencies![i];\n if (newValue !== prevValue) {\n res.push(`${i}: ${prevValue} => ${newValue}`);\n }\n\n return res;\n }, []);\n\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by dependencies.`, causedBy.join(', '));\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n } else {\n if (debugKey) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by missing dependencies.`);\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n\n byCursor[cursor] = {\n effect,\n dependencies,\n cleanup: byCursor[cursor] ? byCursor[cursor].cleanup : undefined,\n };\n\n renderingInstance.hooks.effects.cursor++;\n}\n\nexport function useEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(fastRaf, fastRafPrimary, effect, dependencies, debugKey);\n}\n\nexport function useLayoutEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(onTickEnd, onTickEndPrimary, effect, dependencies, debugKey);\n}\n\nexport function useMemo(resolver: () => T, dependencies: any[], debugKey?: string): T {\n const { cursor, byCursor } = renderingInstance.hooks.memos;\n let { current } = byCursor[cursor] || {};\n\n if (\n byCursor[cursor] === undefined\n || dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies[i])\n ) {\n if (DEBUG && debugKey) {\n // eslint-disable-next-line no-console\n console.log(\n `[Teact.useMemo] ${renderingInstance.name} (${debugKey}): Update is caused by:`,\n byCursor[cursor]\n ? getUnequalProps(dependencies, byCursor[cursor].dependencies).join(', ')\n : '[first render]',\n );\n }\n\n current = resolver();\n }\n\n byCursor[cursor] = {\n current,\n dependencies,\n };\n\n renderingInstance.hooks.memos.cursor++;\n\n return current;\n}\n\nexport function useCallback(newCallback: F, dependencies: any[], debugKey?: string): F {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => newCallback, dependencies, debugKey);\n}\n\nexport function useRef(initial: T): { current: T };\nexport function useRef(): { current: T | undefined }; // TT way (empty is `undefined`)\nexport function useRef(initial: null): { current: T | null }; // React way (empty is `null`)\n// eslint-disable-next-line no-null/no-null\nexport function useRef(initial?: T | null) {\n return useMemo(() => ({\n current: initial,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), []);\n}\n\nexport function memo(Component: T, areEqual = arePropsShallowEqual, debugKey?: string) {\n return function TeactMemoWrapper(props: Props) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const propsRef = useRef(props);\n const renderedRef = useRef();\n\n if (!renderedRef.current || (propsRef.current && !areEqual(propsRef.current, props))) {\n if (DEBUG && debugKey) {\n // eslint-disable-next-line no-console\n console.log(\n `[Teact.memo] ${Component.name} (${debugKey}): Update is caused by:`,\n getUnequalProps(propsRef.current!, props).join(', '),\n );\n }\n\n propsRef.current = props;\n renderedRef.current = createElement(Component, props) as VirtualElementComponent;\n }\n\n return renderedRef.current;\n } as T;\n}\n\n// We need to keep it here for JSX.\nconst Teact = {\n createElement,\n Fragment,\n};\n\nexport default Teact;\n","import React, {\n FC, FC_withDebug, Props, useEffect, useState,\n} from './teact';\n\nimport { DEBUG, DEBUG_MORE } from '../../config';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport generateIdFor from '../../util/generateIdFor';\nimport { fastRaf, throttleWithTickEnd } from '../../util/schedulers';\nimport arePropsShallowEqual, { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { orderBy } from '../../util/iteratees';\nimport {\n GlobalState, GlobalActions, ActionTypes, DispatchOptions,\n} from '../../global/types';\nimport { handleError } from '../../util/handleError';\nimport { isHeavyAnimating } from '../../hooks/useHeavyAnimationCheck';\n\nexport default React;\n\ntype ActionPayload = AnyLiteral;\n\ntype Reducer = (\n global: GlobalState,\n actions: GlobalActions,\n payload: any,\n) => GlobalState | void;\n\ntype MapStateToProps = ((global: GlobalState, ownProps: OwnProps) => AnyLiteral);\n\nlet currentGlobal = {} as GlobalState;\n\nconst reducers: Record = {};\nconst callbacks: Function[] = [updateContainers];\nconst actions = {} as GlobalActions;\nconst containers = new Map;\n ownProps: Props;\n mappedProps?: Props;\n forceUpdate: Function;\n areMappedPropsChanged: boolean;\n DEBUG_updates: number;\n DEBUG_componentName: string;\n}>();\n\nconst runCallbacksThrottled = throttleWithTickEnd(runCallbacks);\n\nfunction runCallbacks(forceOnHeavyAnimation = false) {\n if (!forceOnHeavyAnimation && isHeavyAnimating()) {\n fastRaf(runCallbacksThrottled);\n return;\n }\n\n callbacks.forEach((cb) => cb(currentGlobal));\n}\n\nexport function setGlobal(newGlobal?: GlobalState, options?: DispatchOptions) {\n if (typeof newGlobal === 'object' && newGlobal !== currentGlobal) {\n currentGlobal = newGlobal;\n if (options?.forceSyncOnIOs) {\n runCallbacks(true);\n } else {\n runCallbacksThrottled(options?.forceOnHeavyAnimation);\n }\n }\n}\n\nexport function getGlobal() {\n return currentGlobal;\n}\n\nexport function getDispatch() {\n return actions;\n}\n\nfunction onDispatch(name: string, payload?: ActionPayload, options?: DispatchOptions) {\n if (reducers[name]) {\n reducers[name].forEach((reducer) => {\n const newGlobal = reducer(currentGlobal, actions, payload);\n if (newGlobal) {\n setGlobal(newGlobal, options);\n }\n });\n }\n}\n\nfunction updateContainers() {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const container of containers.values()) {\n const {\n mapStateToProps, ownProps, mappedProps, forceUpdate,\n } = container;\n\n let newMappedProps;\n\n try {\n newMappedProps = mapStateToProps(currentGlobal, ownProps);\n } catch (err: any) {\n handleError(err);\n\n return;\n }\n\n if (DEBUG) {\n if (Object.values(newMappedProps).some(Number.isNaN)) {\n // eslint-disable-next-line no-console\n console.warn(\n // eslint-disable-next-line max-len\n `[TeactN] Some of \\`${container.DEBUG_componentName}\\` mappers contain NaN values. This may cause redundant updates because of incorrect equality check.`,\n );\n }\n }\n\n if (Object.keys(newMappedProps).length && !arePropsShallowEqual(mappedProps!, newMappedProps)) {\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log(\n '[TeactN] Will update',\n container.DEBUG_componentName,\n 'caused by',\n getUnequalProps(mappedProps!, newMappedProps).join(', '),\n );\n }\n\n container.mappedProps = newMappedProps;\n container.areMappedPropsChanged = true;\n container.DEBUG_updates++;\n\n forceUpdate();\n }\n }\n\n if (DEBUG) {\n const updateTime = performance.now() - DEBUG_startAt!;\n if (updateTime > 7) {\n // eslint-disable-next-line no-console\n console.warn(`[TeactN] Slow containers update: ${Math.round(updateTime)} ms`);\n }\n }\n}\n\nexport function addReducer(name: ActionTypes, reducer: Reducer) {\n if (!reducers[name]) {\n reducers[name] = [];\n\n actions[name] = (payload?: ActionPayload, options?: DispatchOptions) => {\n onDispatch(name, payload, options);\n };\n }\n\n reducers[name].push(reducer);\n}\n\nexport function addCallback(cb: Function) {\n callbacks.push(cb);\n}\n\nexport function removeCallback(cb: Function) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n}\n\nexport function withGlobal(\n mapStateToProps: MapStateToProps = () => ({}),\n) {\n return (Component: FC) => {\n return function TeactNContainer(props: OwnProps) {\n (TeactNContainer as FC_withDebug).DEBUG_contentComponentName = Component.name;\n\n const [id] = useState(generateIdFor(containers));\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n return () => {\n containers.delete(id);\n };\n }, [id]);\n\n let container = containers.get(id);\n if (!container) {\n container = {\n mapStateToProps,\n ownProps: props,\n areMappedPropsChanged: false,\n forceUpdate,\n DEBUG_updates: 0,\n DEBUG_componentName: Component.name,\n };\n\n containers.set(id, container);\n }\n\n if (container.areMappedPropsChanged) {\n container.areMappedPropsChanged = false;\n }\n\n if (!container.mappedProps || !arePropsShallowEqual(container.ownProps, props)) {\n container.ownProps = props;\n\n try {\n container.mappedProps = mapStateToProps(currentGlobal, props);\n } catch (err: any) {\n handleError(err);\n }\n }\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ;\n };\n };\n}\n\nif (DEBUG) {\n (window as any).getGlobal = getGlobal;\n\n document.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn(\n 'GLOBAL CONTAINERS',\n orderBy(\n Array.from(containers.values())\n .map(({ DEBUG_componentName, DEBUG_updates }) => ({ DEBUG_componentName, DEBUG_updates })),\n 'DEBUG_updates',\n 'desc',\n ),\n );\n });\n}\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n// Version 2c193ce 28.05.2021\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nexport function removeVS16s(rawEmoji) {\n return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji;\n}\n\n// This file is generated by source/emoji/scripts/generate.sh\n// eslint-disable-next-line max-len\nexport default /(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91])|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd1d\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78\\udd7a-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcb\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7a\\ude80-\\ude86\\ude90-\\udea8\\udeb0-\\udeb6\\udec0-\\udec2\\uded0-\\uded6]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g;\n","import {\n addReducer, getDispatch, getGlobal, setGlobal,\n} from '../../../lib/teact/teactn';\n\nimport { initApi, callApi } from '../../../api/gramjs';\nimport { GlobalState } from '../../../global/types';\n\nimport {\n LANG_CACHE_NAME,\n CUSTOM_BG_CACHE_NAME,\n MEDIA_CACHE_NAME,\n MEDIA_CACHE_NAME_AVATARS,\n MEDIA_PROGRESSIVE_CACHE_NAME,\n IS_TEST,\n} from '../../../config';\nimport { IS_MOV_SUPPORTED, IS_WEBM_SUPPORTED, PLATFORM_ENV } from '../../../util/environment';\nimport { unsubscribe } from '../../../util/notifications';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { updateAppBadge } from '../../../util/appBadge';\nimport {\n storeSession,\n loadStoredSession,\n clearStoredSession,\n importLegacySession,\n clearLegacySessions,\n} from '../../../util/sessions';\nimport { forceWebsync } from '../../../util/websync';\n\naddReducer('initApi', (global: GlobalState, actions) => {\n (async () => {\n if (!IS_TEST) {\n await importLegacySession();\n void clearLegacySessions();\n }\n\n void initApi(actions.apiUpdate, {\n userAgent: navigator.userAgent,\n platform: PLATFORM_ENV,\n sessionData: loadStoredSession(),\n isTest: window.location.search.includes('test'),\n isMovSupported: IS_MOV_SUPPORTED,\n isWebmSupported: IS_WEBM_SUPPORTED,\n });\n })();\n});\n\naddReducer('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n void callApi('provideAuthPhoneNumber', phoneNumber.replace(/[^\\d]/g, ''));\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('setAuthCode', (global, actions, payload) => {\n const { code } = payload!;\n\n void callApi('provideAuthCode', code);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('setAuthPassword', (global, actions, payload) => {\n const { password } = payload!;\n\n void callApi('provideAuthPassword', password);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('uploadProfilePhoto', (global, actions, payload) => {\n const { file } = payload!;\n\n void callApi('uploadProfilePhoto', file);\n});\n\naddReducer('signUp', (global, actions, payload) => {\n const { firstName, lastName } = payload!;\n\n void callApi('provideAuthRegistration', { firstName, lastName });\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddReducer('returnToAuthPhoneNumber', (global) => {\n void callApi('restartAuth');\n\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddReducer('goToAuthQrCode', (global) => {\n void callApi('restartAuthWithQr');\n\n return {\n ...global,\n authIsLoadingQrCode: true,\n authError: undefined,\n };\n});\n\naddReducer('saveSession', (global, actions, payload) => {\n const { sessionData } = payload;\n\n if (sessionData) {\n storeSession(payload.sessionData, global.currentUserId);\n } else {\n clearStoredSession();\n }\n});\n\naddReducer('signOut', () => {\n (async () => {\n try {\n await unsubscribe();\n await callApi('destroy');\n await forceWebsync(false);\n } catch (err) {\n // Do nothing\n }\n\n getDispatch().reset();\n })();\n});\n\naddReducer('reset', () => {\n clearStoredSession();\n\n void cacheApi.clear(MEDIA_CACHE_NAME);\n void cacheApi.clear(MEDIA_CACHE_NAME_AVATARS);\n void cacheApi.clear(MEDIA_PROGRESSIVE_CACHE_NAME);\n void cacheApi.clear(CUSTOM_BG_CACHE_NAME);\n\n const langCachePrefix = LANG_CACHE_NAME.replace(/\\d+$/, '');\n const langCacheVersion = (LANG_CACHE_NAME.match(/\\d+$/) || [0])[0];\n for (let i = 0; i < langCacheVersion; i++) {\n void cacheApi.clear(`${langCachePrefix}${i === 0 ? '' : i}`);\n }\n\n void clearLegacySessions();\n\n updateAppBadge(0);\n\n getDispatch().init();\n});\n\naddReducer('disconnect', () => {\n (async () => {\n await callApi('disconnect');\n })();\n});\n\naddReducer('loadNearestCountry', (global) => {\n if (global.connectionState !== 'connectionStateReady') {\n return;\n }\n\n (async () => {\n const authNearestCountry = await callApi('fetchNearestCountry');\n\n setGlobal({\n ...getGlobal(),\n authNearestCountry,\n });\n })();\n});\n\naddReducer('setDeviceToken', (global, actions, deviceToken) => {\n setGlobal({\n ...global,\n push: {\n deviceToken,\n subscribedAt: Date.now(),\n },\n });\n});\n\naddReducer('deleteDeviceToken', (global) => {\n const newGlobal = { ...global };\n delete newGlobal.push;\n setGlobal(newGlobal);\n});\n","import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\nimport {\n ApiPrivacyKey, PrivacyVisibility, ProfileEditProgress, InputPrivacyRules, InputPrivacyContact,\n UPLOADING_WALLPAPER_SLUG,\n} from '../../../types';\n\nimport { COUNTRIES_WITH_12H_TIME_FORMAT } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport { subscribe, unsubscribe } from '../../../util/notifications';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport { selectUser } from '../../selectors';\nimport {\n addUsers, addBlockedContact, updateChats, updateUser, removeBlockedContact, replaceSettings, updateNotifySettings,\n addNotifyExceptions,\n} from '../../reducers';\nimport { isUserId } from '../../helpers';\n\naddReducer('updateProfile', (global, actions, payload) => {\n const {\n photo, firstName, lastName, bio: about, username,\n } = payload!;\n\n (async () => {\n const { currentUserId } = global;\n if (!currentUserId) {\n return;\n }\n\n setGlobal({\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.InProgress,\n },\n });\n\n if (photo) {\n await callApi('updateProfilePhoto', photo);\n }\n\n if (firstName || lastName || about) {\n const result = await callApi('updateProfile', { firstName, lastName, about });\n if (result) {\n global = getGlobal();\n const currentUser = currentUserId && selectUser(global, currentUserId);\n\n if (currentUser) {\n setGlobal(updateUser(\n global,\n currentUser.id,\n {\n firstName,\n lastName,\n fullInfo: {\n ...currentUser.fullInfo,\n bio: about,\n },\n },\n ));\n }\n }\n }\n\n if (username) {\n const result = await callApi('updateUsername', username);\n if (result && currentUserId) {\n setGlobal(updateUser(getGlobal(), currentUserId, { username }));\n }\n }\n\n setGlobal({\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.Complete,\n },\n });\n })();\n});\n\naddReducer('checkUsername', (global, actions, payload) => {\n const { username } = payload!;\n\n (async () => {\n // No need to check the username if profile update is already in progress\n if (global.profileEdit && global.profileEdit.progress === ProfileEditProgress.InProgress) {\n return;\n }\n\n setGlobal({\n ...global,\n profileEdit: {\n progress: global.profileEdit ? global.profileEdit.progress : ProfileEditProgress.Idle,\n isUsernameAvailable: undefined,\n },\n });\n\n const isUsernameAvailable = await callApi('checkUsername', username);\n\n global = getGlobal();\n setGlobal({\n ...global,\n profileEdit: {\n ...global.profileEdit!,\n isUsernameAvailable,\n },\n });\n })();\n});\n\naddReducer('loadWallpapers', () => {\n (async () => {\n const result = await callApi('fetchWallpapers');\n if (!result) {\n return;\n }\n\n const global = getGlobal();\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: result.wallpapers,\n },\n });\n })();\n});\n\naddReducer('uploadWallpaper', (global, actions, payload) => {\n const file = payload;\n const previewBlobUrl = URL.createObjectURL(file);\n\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n {\n slug: UPLOADING_WALLPAPER_SLUG,\n document: {\n fileName: '',\n size: file.size,\n mimeType: file.type,\n previewBlobUrl,\n },\n },\n ...(global.settings.loadedWallpapers || []),\n ],\n },\n });\n\n (async () => {\n const result = await callApi('uploadWallpaper', file);\n if (!result) {\n return;\n }\n\n const { wallpaper } = result;\n\n global = getGlobal();\n if (!global.settings.loadedWallpapers) {\n return;\n }\n\n const firstWallpaper = global.settings.loadedWallpapers[0];\n if (!firstWallpaper || firstWallpaper.slug !== UPLOADING_WALLPAPER_SLUG) {\n return;\n }\n\n const withLocalMedia = {\n ...wallpaper,\n document: {\n ...wallpaper.document,\n previewBlobUrl,\n },\n };\n\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n withLocalMedia,\n ...global.settings.loadedWallpapers.slice(1),\n ],\n },\n });\n })();\n});\n\naddReducer('loadBlockedContacts', () => {\n (async () => {\n const result = await callApi('fetchBlockedContacts');\n\n if (!result) {\n return;\n }\n\n let newGlobal = getGlobal();\n\n if (result.users?.length) {\n newGlobal = addUsers(newGlobal, buildCollectionByKey(result.users, 'id'));\n }\n if (result.chats?.length) {\n newGlobal = updateChats(newGlobal, buildCollectionByKey(result.chats, 'id'));\n }\n\n newGlobal = {\n ...newGlobal,\n blocked: {\n ...newGlobal.blocked,\n ids: [...(newGlobal.blocked.ids || []), ...result.blockedIds],\n totalCount: result.totalCount,\n },\n };\n\n setGlobal(newGlobal);\n })();\n});\n\naddReducer('blockContact', (global, actions, payload) => {\n const { contactId, accessHash } = payload!;\n\n (async () => {\n const result = await callApi('blockContact', contactId, accessHash);\n if (!result) {\n return;\n }\n\n const newGlobal = getGlobal();\n\n setGlobal(addBlockedContact(newGlobal, contactId));\n })();\n});\n\naddReducer('unblockContact', (global, actions, payload) => {\n const { contactId } = payload!;\n let accessHash: string | undefined;\n const isPrivate = isUserId(contactId);\n\n if (isPrivate) {\n const user = selectUser(global, contactId);\n if (!user) {\n return;\n }\n\n accessHash = user.accessHash;\n }\n\n (async () => {\n const result = await callApi('unblockContact', contactId, accessHash);\n if (!result) {\n return;\n }\n\n const newGlobal = getGlobal();\n\n setGlobal(removeBlockedContact(newGlobal, contactId));\n })();\n});\n\naddReducer('loadAuthorizations', () => {\n (async () => {\n const result = await callApi('fetchAuthorizations');\n if (!result) {\n return;\n }\n\n setGlobal({\n ...getGlobal(),\n activeSessions: result,\n });\n })();\n});\n\naddReducer('terminateAuthorization', (global, actions, payload) => {\n const { hash } = payload!;\n\n (async () => {\n const result = await callApi('terminateAuthorization', hash);\n if (!result) {\n return;\n }\n\n const newGlobal = getGlobal();\n\n setGlobal({\n ...newGlobal,\n activeSessions: newGlobal.activeSessions.filter((session) => session.hash !== hash),\n });\n })();\n});\n\naddReducer('terminateAllAuthorizations', () => {\n (async () => {\n const result = await callApi('terminateAllAuthorizations');\n if (!result) {\n return;\n }\n\n const global = getGlobal();\n\n setGlobal({\n ...global,\n activeSessions: global.activeSessions.filter((session) => session.isCurrent),\n });\n })();\n});\n\naddReducer('loadNotificationExceptions', (global) => {\n const { serverTimeOffset } = global;\n\n (async () => {\n const result = await callApi('fetchNotificationExceptions', { serverTimeOffset });\n if (!result) {\n return;\n }\n\n setGlobal(addNotifyExceptions(getGlobal(), result));\n })();\n});\n\naddReducer('loadNotificationSettings', (global) => {\n const { serverTimeOffset } = global;\n (async () => {\n const result = await callApi('fetchNotificationSettings', {\n serverTimeOffset,\n });\n if (!result) {\n return;\n }\n\n setGlobal(replaceSettings(getGlobal(), result));\n })();\n});\n\naddReducer('updateNotificationSettings', (global, actions, payload) => {\n const { peerType, isSilent, shouldShowPreviews } = payload!;\n\n (async () => {\n const result = await callApi('updateNotificationSettings', peerType, { isSilent, shouldShowPreviews });\n\n if (!result) {\n return;\n }\n\n setGlobal(updateNotifySettings(getGlobal(), peerType, isSilent, shouldShowPreviews));\n })();\n});\n\naddReducer('updateWebNotificationSettings', (global, actions, payload) => {\n (async () => {\n setGlobal(replaceSettings(getGlobal(), payload));\n const newGlobal = getGlobal();\n const { hasPushNotifications, hasWebNotifications } = newGlobal.settings.byKey;\n if (hasWebNotifications && hasPushNotifications) {\n await subscribe();\n } else {\n await unsubscribe();\n }\n })();\n});\n\naddReducer('updateContactSignUpNotification', (global, actions, payload) => {\n const { isSilent } = payload!;\n\n (async () => {\n const result = await callApi('updateContactSignUpNotification', isSilent);\n if (!result) {\n return;\n }\n\n setGlobal(replaceSettings(getGlobal(), { hasContactJoinedNotifications: !isSilent }));\n })();\n});\n\naddReducer('loadLanguages', () => {\n (async () => {\n const result = await callApi('fetchLanguages');\n if (!result) {\n return;\n }\n\n setGlobal(replaceSettings(getGlobal(), { languages: result }));\n })();\n});\n\naddReducer('loadPrivacySettings', () => {\n (async () => {\n const [\n phoneNumberSettings, lastSeenSettings, profilePhotoSettings, forwardsSettings, chatInviteSettings,\n ] = await Promise.all([\n callApi('fetchPrivacySettings', 'phoneNumber'),\n callApi('fetchPrivacySettings', 'lastSeen'),\n callApi('fetchPrivacySettings', 'profilePhoto'),\n callApi('fetchPrivacySettings', 'forwards'),\n callApi('fetchPrivacySettings', 'chatInvite'),\n ]);\n\n if (\n !phoneNumberSettings || !lastSeenSettings || !profilePhotoSettings || !forwardsSettings || !chatInviteSettings\n ) {\n return;\n }\n\n const global = getGlobal();\n\n global.settings.privacy.phoneNumber = phoneNumberSettings;\n global.settings.privacy.lastSeen = lastSeenSettings;\n global.settings.privacy.profilePhoto = profilePhotoSettings;\n global.settings.privacy.forwards = forwardsSettings;\n global.settings.privacy.chatInvite = chatInviteSettings;\n\n setGlobal(global);\n })();\n});\n\naddReducer('setPrivacyVisibility', (global, actions, payload) => {\n const { privacyKey, visibility } = payload!;\n\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility,\n allowedIds: [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n (async () => {\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n\n if (result) {\n const newGlobal = getGlobal();\n\n newGlobal.settings.privacy[privacyKey as ApiPrivacyKey] = result;\n\n setGlobal(newGlobal);\n }\n })();\n});\n\naddReducer('setPrivacySettings', (global, actions, payload) => {\n const { privacyKey, isAllowList, contactsIds } = payload!;\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility: settings.visibility,\n allowedIds: isAllowList ? contactsIds : [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: !isAllowList ? contactsIds : [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n (async () => {\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n\n if (result) {\n const newGlobal = getGlobal();\n\n newGlobal.settings.privacy[privacyKey as ApiPrivacyKey] = result;\n\n setGlobal(newGlobal);\n }\n })();\n});\n\nfunction buildInputPrivacyRules(global: GlobalState, {\n visibility,\n allowedIds,\n deniedIds,\n}: {\n visibility: PrivacyVisibility;\n allowedIds: string[];\n deniedIds: string[];\n}): InputPrivacyRules {\n const {\n users: { byId: usersById },\n chats: { byId: chatsById },\n } = global;\n\n const rules: InputPrivacyRules = {\n visibility,\n };\n let users: InputPrivacyContact[];\n let chats: InputPrivacyContact[];\n\n const collectUsers = (userId: string) => {\n if (!isUserId(userId)) {\n return undefined;\n }\n const { id, accessHash } = usersById[userId] || {};\n if (!id) {\n return undefined;\n }\n\n return { id, accessHash };\n };\n\n const collectChats = (userId: string) => {\n if (isUserId(userId)) {\n return undefined;\n }\n const chat = chatsById[userId];\n\n return chat ? { id: chat.id } : undefined;\n };\n\n if (visibility === 'contacts' || visibility === 'nobody') {\n users = allowedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = allowedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.allowedUsers = users;\n }\n if (chats.length > 0) {\n rules.allowedChats = chats;\n }\n }\n\n if (visibility === 'everybody' || visibility === 'contacts') {\n users = deniedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = deniedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.blockedUsers = users;\n }\n if (chats.length > 0) {\n rules.blockedChats = chats;\n }\n }\n\n return rules;\n}\n\naddReducer('updateIsOnline', (global, actions, payload) => {\n callApi('updateIsOnline', payload);\n});\n\naddReducer('loadContentSettings', () => {\n (async () => {\n const result = await callApi('fetchContentSettings');\n if (!result) return;\n\n setGlobal(replaceSettings(getGlobal(), result));\n })();\n});\n\naddReducer('updateContentSettings', (global, actions, payload) => {\n (async () => {\n setGlobal(replaceSettings(getGlobal(), { isSensitiveEnabled: payload }));\n\n const result = await callApi('updateContentSettings', payload);\n if (!result) {\n setGlobal(replaceSettings(getGlobal(), { isSensitiveEnabled: !payload }));\n }\n })();\n});\n\naddReducer('loadCountryList', (global, actions, payload = {}) => {\n let { langCode } = payload;\n if (!langCode) langCode = global.settings.byKey.language;\n\n (async () => {\n const countryList = await callApi('fetchCountryList', { langCode });\n if (!countryList) return;\n\n setGlobal({\n ...getGlobal(),\n countryList,\n });\n })();\n});\n\naddReducer('ensureTimeFormat', (global, actions) => {\n if (global.authNearestCountry) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(global.authNearestCountry.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n\n (async () => {\n if (getGlobal().settings.byKey.wasTimeFormatSetManually) {\n return;\n }\n\n const nearestCountryCode = await callApi('fetchNearestCountry');\n if (nearestCountryCode) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(nearestCountryCode.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n })();\n});\n\naddReducer('loadAppConfig', () => {\n (async () => {\n const appConfig = await callApi('fetchAppConfig');\n\n if (!appConfig) return;\n\n setGlobal({\n ...getGlobal(),\n appConfig,\n });\n })();\n});\n","import {\n addReducer, getDispatch, getGlobal, setGlobal,\n} from '../../../lib/teact/teactn';\n\nimport { GlobalState } from '../../../global/types';\n\nimport {\n ApiUpdate,\n ApiUpdateAuthorizationState,\n ApiUpdateAuthorizationError,\n ApiUpdateConnectionState,\n ApiUpdateSession,\n ApiUpdateCurrentUser, ApiUpdateServerTimeOffset,\n} from '../../../api/types';\nimport { DEBUG, SESSION_USER_KEY } from '../../../config';\nimport { subscribe } from '../../../util/notifications';\nimport { updateUser } from '../../reducers';\nimport { setLanguage } from '../../../util/langProvider';\nimport { selectNotifySettings } from '../../selectors';\nimport { forceWebsync } from '../../../util/websync';\nimport { getShippingError } from '../../../util/getReadableErrorText';\n\naddReducer('apiUpdate', (global, actions, update: ApiUpdate) => {\n if (DEBUG) {\n if (update['@type'] !== 'updateUserStatus' && update['@type'] !== 'updateServerTimeOffset') {\n // eslint-disable-next-line no-console\n console.log('[GramJs] UPDATE', update['@type'], { update });\n }\n }\n\n switch (update['@type']) {\n case 'updateApiReady':\n onUpdateApiReady(global);\n break;\n\n case 'updateAuthorizationState':\n onUpdateAuthorizationState(update);\n break;\n\n case 'updateAuthorizationError':\n onUpdateAuthorizationError(update);\n break;\n\n case 'updateConnectionState':\n onUpdateConnectionState(update);\n break;\n\n case 'updateSession':\n onUpdateSession(update);\n break;\n\n case 'updateServerTimeOffset':\n onUpdateServerTimeOffset(update);\n break;\n\n case 'updateCurrentUser':\n onUpdateCurrentUser(update);\n break;\n\n case 'error': {\n if (update.error.message === 'SESSION_REVOKED') {\n actions.signOut();\n }\n\n const paymentShippingError = getShippingError(update.error);\n if (paymentShippingError) {\n actions.addPaymentError({ error: paymentShippingError });\n } else if (actions.showDialog) {\n actions.showDialog({ data: update.error });\n }\n\n break;\n }\n }\n});\n\nfunction onUpdateApiReady(global: GlobalState) {\n const { hasWebNotifications, hasPushNotifications } = selectNotifySettings(global);\n if (hasWebNotifications && hasPushNotifications) {\n void subscribe();\n }\n void setLanguage(global.settings.byKey.language);\n}\n\nfunction onUpdateAuthorizationState(update: ApiUpdateAuthorizationState) {\n let global = getGlobal();\n\n const wasAuthReady = global.authState === 'authorizationStateReady';\n const authState = update.authorizationState;\n\n setGlobal({\n ...global,\n authState,\n authIsLoading: false,\n });\n\n global = getGlobal();\n\n switch (authState) {\n case 'authorizationStateLoggingOut':\n void forceWebsync(false);\n\n setGlobal({\n ...global,\n isLoggingOut: true,\n });\n break;\n case 'authorizationStateWaitCode':\n setGlobal({\n ...global,\n authIsCodeViaApp: update.isCodeViaApp,\n });\n break;\n case 'authorizationStateWaitPassword':\n setGlobal({\n ...global,\n authHint: update.hint,\n });\n break;\n case 'authorizationStateWaitQrCode':\n setGlobal({\n ...global,\n authIsLoadingQrCode: false,\n authQrCode: update.qrCode,\n });\n break;\n case 'authorizationStateReady': {\n if (wasAuthReady) {\n break;\n }\n\n void forceWebsync(true);\n\n setGlobal({\n ...global,\n isLoggingOut: false,\n });\n\n break;\n }\n }\n}\n\nfunction onUpdateAuthorizationError(update: ApiUpdateAuthorizationError) {\n setGlobal({\n ...getGlobal(),\n authError: update.message,\n });\n}\n\nfunction onUpdateConnectionState(update: ApiUpdateConnectionState) {\n const { connectionState } = update;\n const global = getGlobal();\n\n if (connectionState === global.connectionState) {\n return;\n }\n\n setGlobal({\n ...global,\n connectionState,\n });\n\n if (connectionState === 'connectionStateBroken') {\n getDispatch().signOut();\n }\n}\n\nfunction onUpdateSession(update: ApiUpdateSession) {\n const { sessionData } = update;\n const { authRememberMe, authState } = getGlobal();\n const isEmpty = !sessionData || !sessionData.mainDcId;\n\n if (!authRememberMe || authState !== 'authorizationStateReady' || isEmpty) {\n return;\n }\n\n getDispatch().saveSession({ sessionData });\n}\n\nfunction onUpdateServerTimeOffset(update: ApiUpdateServerTimeOffset) {\n const global = getGlobal();\n\n if (global.serverTimeOffset === update.serverTimeOffset) {\n return;\n }\n\n setGlobal({\n ...global,\n serverTimeOffset: update.serverTimeOffset,\n });\n}\n\nfunction onUpdateCurrentUser(update: ApiUpdateCurrentUser) {\n const { currentUser } = update;\n\n setGlobal({\n ...updateUser(getGlobal(), currentUser.id, currentUser),\n currentUserId: currentUser.id,\n });\n\n updateSessionUserId(currentUser.id);\n}\n\nfunction updateSessionUserId(currentUserId: string) {\n const sessionUserAuth = localStorage.getItem(SESSION_USER_KEY);\n if (!sessionUserAuth) return;\n\n const userAuth = JSON.parse(sessionUserAuth);\n userAuth.id = currentUserId;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify(userAuth));\n}\n","import { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\n\nimport { ANIMATION_LEVEL_MAX } from '../../../config';\nimport {\n IS_ANDROID, IS_IOS, IS_MAC_OS, IS_SAFARI, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport { setLanguage } from '../../../util/langProvider';\nimport switchTheme from '../../../util/switchTheme';\nimport { selectTheme } from '../../selectors';\nimport { startWebsync } from '../../../util/websync';\nimport { ensurePermanentWebVersion } from '../../../util/permanentWebVersion';\n\nconst HISTORY_ANIMATION_DURATION = 450;\n\nsubscribeToSystemThemeChange();\n\naddReducer('init', (global) => {\n const { animationLevel, messageTextSize, language } = global.settings.byKey;\n const theme = selectTheme(global);\n\n void setLanguage(language, undefined, true);\n\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(messageTextSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(messageTextSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${messageTextSize}px`);\n document.documentElement.setAttribute('data-message-text-size', messageTextSize.toString());\n document.body.classList.add('initial');\n document.body.classList.add(`animation-level-${animationLevel}`);\n document.body.classList.add(IS_TOUCH_ENV ? 'is-touch-env' : 'is-pointer-env');\n\n switchTheme(theme, animationLevel === ANIMATION_LEVEL_MAX);\n\n ensurePermanentWebVersion();\n startWebsync();\n\n if (IS_IOS) {\n document.body.classList.add('is-ios');\n } else if (IS_ANDROID) {\n document.body.classList.add('is-android');\n } else if (IS_MAC_OS) {\n document.body.classList.add('is-macos');\n }\n if (IS_SAFARI) {\n document.body.classList.add('is-safari');\n }\n});\n\naddReducer('setIsUiReady', (global, actions, payload) => {\n const { uiReadyState } = payload!;\n\n if (uiReadyState === 2) {\n document.body.classList.remove('initial');\n }\n\n return {\n ...global,\n uiReadyState,\n };\n});\n\naddReducer('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n return {\n ...global,\n authPhoneNumber: phoneNumber,\n };\n});\n\naddReducer('setAuthRememberMe', (global, actions, payload) => {\n return {\n ...global,\n authRememberMe: Boolean(payload),\n };\n});\n\naddReducer('clearAuthError', (global) => {\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddReducer('disableHistoryAnimations', () => {\n setTimeout(() => {\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: false,\n });\n document.body.classList.remove('no-animate');\n }, HISTORY_ANIMATION_DURATION);\n\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: true,\n }, { forceSyncOnIOs: true });\n});\n\nfunction subscribeToSystemThemeChange() {\n function handleSystemThemeChange() {\n const currentThemeMatch = document.documentElement.className.match(/theme-(\\w+)/);\n const currentTheme = currentThemeMatch ? currentThemeMatch[1] : 'light';\n const global = getGlobal();\n const nextTheme = selectTheme(global);\n const { animationLevel } = global.settings.byKey;\n\n if (nextTheme !== currentTheme) {\n switchTheme(nextTheme, animationLevel === ANIMATION_LEVEL_MAX);\n // Force-update component containers\n setGlobal({ ...global });\n }\n }\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n }\n}\n","import { addReducer } from '../../../lib/teact/teactn';\nimport { ISettings, IThemeSettings, ThemeKey } from '../../../types';\nimport { replaceSettings, replaceThemeSettings } from '../../reducers';\n\naddReducer('setSettingOption', (global, actions, payload?: Partial) => {\n return replaceSettings(global, payload);\n});\n\naddReducer('setThemeSettings', (global, actions, payload: { theme: ThemeKey } & Partial) => {\n const { theme, ...settings } = payload;\n\n return replaceThemeSettings(global, theme, settings);\n});\n","import {\n ApiChat,\n ApiUser,\n ApiChatBannedRights,\n ApiChatAdminRights,\n ApiChatFolder,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { NotifyException, NotifySettings } from '../../types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport { ARCHIVED_FOLDER_ID, REPLIES_USER_ID } from '../../config';\nimport { orderBy } from '../../util/iteratees';\nimport { getUserFirstOrLastName } from './users';\nimport { formatDateToString, formatTime } from '../../util/dateFormat';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst FOREVER_BANNED_DATE = Date.now() / 1000 + 31622400; // 366 days\n\nconst VERIFIED_PRIORITY_BASE = 3e9;\nconst PINNED_PRIORITY_BASE = 3e8;\n\nexport function isUserId(entityId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof entityId === 'number') {\n return entityId > 0;\n }\n\n return !entityId.startsWith('-');\n}\n\nexport function isChatGroup(chat: ApiChat) {\n return isChatBasicGroup(chat) || isChatSuperGroup(chat);\n}\n\nexport function isChatBasicGroup(chat: ApiChat) {\n return chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatSuperGroup(chat: ApiChat) {\n return chat.type === 'chatTypeSuperGroup';\n}\n\nexport function isChatChannel(chat: ApiChat) {\n return chat.type === 'chatTypeChannel';\n}\n\nexport function isCommonBoxChat(chat: ApiChat) {\n return chat.type === 'chatTypePrivate' || chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatWithRepliesBot(chatId: string) {\n return chatId === REPLIES_USER_ID;\n}\n\nexport function getChatTypeString(chat: ApiChat) {\n switch (chat.type) {\n case 'chatTypePrivate':\n return 'PrivateChat';\n case 'chatTypeBasicGroup':\n case 'chatTypeSuperGroup':\n return 'AccDescrGroup';\n case 'chatTypeChannel':\n return 'AccDescrChannel';\n default:\n return 'Chat';\n }\n}\n\nexport function getPrivateChatUserId(chat: ApiChat) {\n if (chat.type !== 'chatTypePrivate' && chat.type !== 'chatTypeSecret') {\n return undefined;\n }\n return chat.id;\n}\n\n// TODO Get rid of `user`\nexport function getChatTitle(lang: LangFn, chat: ApiChat, user?: ApiUser, isSelf = false) {\n if (isSelf || (user && chat.id === user.id && user.isSelf)) {\n return lang('SavedMessages');\n }\n return chat.title || lang('HiddenName');\n}\n\nexport function getChatDescription(chat: ApiChat) {\n if (!chat.fullInfo) {\n return undefined;\n }\n return chat.fullInfo.about;\n}\n\nexport function getChatLink(chat: ApiChat) {\n const { username } = chat;\n if (username) {\n return `https://t.me/${username}`;\n }\n\n const { inviteLink } = chat.fullInfo || {};\n\n return inviteLink;\n}\n\nexport function getChatAvatarHash(\n owner: ApiChat | ApiUser,\n size: 'normal' | 'big' = 'normal',\n) {\n if (!owner.avatarHash) {\n return undefined;\n }\n\n switch (size) {\n case 'big':\n return `profile${owner.id}?${owner.avatarHash}`;\n default:\n return `avatar${owner.id}?${owner.avatarHash}`;\n }\n}\n\nexport function isChatSummaryOnly(chat: ApiChat) {\n return !chat.lastMessage;\n}\n\nexport function isChatAdmin(chat: ApiChat) {\n return Boolean(chat.adminRights);\n}\n\nexport function getHasAdminRight(chat: ApiChat, key: keyof ApiChatAdminRights) {\n return chat.adminRights ? chat.adminRights[key] : false;\n}\n\nexport function isUserRightBanned(chat: ApiChat, key: keyof ApiChatBannedRights) {\n return Boolean(\n (chat.currentUserBannedRights?.[key])\n || (chat.defaultBannedRights?.[key]),\n );\n}\n\nexport function getCanPostInChat(chat: ApiChat, threadId: number) {\n if (threadId !== MAIN_THREAD_ID) {\n return true;\n }\n\n if (chat.isRestricted || chat.migratedTo || chat.isNotJoined || isChatWithRepliesBot(chat.id)) {\n return false;\n }\n\n if (chat.isCreator) {\n return true;\n }\n\n if (isUserId(chat.id)) {\n return true;\n }\n\n if (isChatChannel(chat)) {\n return getHasAdminRight(chat, 'postMessages');\n }\n\n return isChatAdmin(chat) || !isUserRightBanned(chat, 'sendMessages');\n}\n\nexport interface IAllowedAttachmentOptions {\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n canAttachEmbedLinks: boolean;\n}\n\nexport function getAllowedAttachmentOptions(chat?: ApiChat, isChatWithBot = false): IAllowedAttachmentOptions {\n if (!chat) {\n return {\n canAttachMedia: false,\n canAttachPolls: false,\n canSendStickers: false,\n canSendGifs: false,\n canAttachEmbedLinks: false,\n };\n }\n\n const isAdmin = isChatAdmin(chat);\n\n return {\n canAttachMedia: isAdmin || !isUserRightBanned(chat, 'sendMedia'),\n canAttachPolls: (isAdmin || !isUserRightBanned(chat, 'sendPolls')) && (!isUserId(chat.id) || isChatWithBot),\n canSendStickers: isAdmin || !isUserRightBanned(chat, 'sendStickers'),\n canSendGifs: isAdmin || !isUserRightBanned(chat, 'sendGifs'),\n canAttachEmbedLinks: isAdmin || !isUserRightBanned(chat, 'embedLinks'),\n };\n}\n\nexport function getMessageSendingRestrictionReason(\n lang: LangFn,\n currentUserBannedRights?: ApiChatBannedRights,\n defaultBannedRights?: ApiChatBannedRights,\n) {\n if (currentUserBannedRights?.sendMessages) {\n const { untilDate } = currentUserBannedRights;\n return untilDate && untilDate < FOREVER_BANNED_DATE\n ? lang(\n 'Channel.Persmission.Denied.SendMessages.Until',\n lang(\n 'formatDateAtTime',\n [formatDateToString(new Date(untilDate * 1000), lang.code), formatTime(lang, untilDate * 1000)],\n ),\n )\n : lang('Channel.Persmission.Denied.SendMessages.Forever');\n }\n\n if (defaultBannedRights?.sendMessages) {\n return lang('Channel.Persmission.Denied.SendMessages.DefaultRestrictedText');\n }\n\n return undefined;\n}\n\nexport function getChatSlowModeOptions(chat?: ApiChat) {\n if (!chat || !chat.fullInfo) {\n return undefined;\n }\n\n return chat.fullInfo.slowMode;\n}\n\nexport function getChatOrder(chat: ApiChat) {\n return Math.max(chat.joinDate || 0, chat.draftDate || 0, chat.lastMessage?.date || 0);\n}\n\nexport function isChatArchived(chat: ApiChat) {\n return chat.folderId === ARCHIVED_FOLDER_ID;\n}\n\nexport function selectIsChatMuted(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].isMuted !== undefined) {\n return notifyExceptions[chat.id].isMuted;\n }\n\n return (\n chat.isMuted\n || (isUserId(chat.id) && !notifySettings.hasPrivateChatsNotifications)\n || (isChatChannel(chat) && !notifySettings.hasBroadcastNotifications)\n || (isChatGroup(chat) && !notifySettings.hasGroupNotifications)\n );\n}\n\nexport function selectShouldShowMessagePreview(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n const {\n hasPrivateChatsMessagePreview = true,\n hasBroadcastMessagePreview = true,\n hasGroupMessagePreview = true,\n } = notifySettings;\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].shouldShowPreviews !== undefined) {\n return notifyExceptions[chat.id].shouldShowPreviews;\n }\n\n return (isUserId(chat.id) && hasPrivateChatsMessagePreview)\n || (isChatChannel(chat) && hasBroadcastMessagePreview)\n || (isChatGroup(chat) && hasGroupMessagePreview);\n}\n\nexport function getCanDeleteChat(chat: ApiChat) {\n return isChatBasicGroup(chat) || ((isChatSuperGroup(chat) || isChatChannel(chat)) && chat.isCreator);\n}\n\nexport function getFolderDescriptionText(lang: LangFn, folder: ApiChatFolder, chatsCount?: number) {\n const {\n id, title, emoticon, description, pinnedChatIds,\n excludedChatIds, includedChatIds,\n excludeArchived, excludeMuted, excludeRead,\n ...filters\n } = folder;\n\n // If folder has multiple additive filters or uses include/exclude lists,\n // we display folder chats count\n if (\n chatsCount !== undefined && (\n Object.values(filters).filter(Boolean).length > 1\n || (excludedChatIds?.length)\n || (includedChatIds?.length)\n )) {\n return lang('Chats', chatsCount);\n }\n\n // Otherwise, we return a short description of a single filter\n if (filters.bots) {\n return lang('FilterBots');\n } else if (filters.groups) {\n return lang('FilterGroups');\n } else if (filters.channels) {\n return lang('FilterChannels');\n } else if (filters.contacts) {\n return lang('FilterContacts');\n } else if (filters.nonContacts) {\n return lang('FilterNonContacts');\n } else {\n return undefined;\n }\n}\n\nexport function getMessageSenderName(lang: LangFn, chatId: string, sender?: ApiUser) {\n if (!sender || isUserId(chatId)) {\n return undefined;\n }\n\n if (sender.isSelf) {\n return lang('FromYou');\n }\n\n return getUserFirstOrLastName(sender);\n}\n\nexport function sortChatIds(\n chatIds: string[],\n chatsById: Record,\n shouldPrioritizeVerified = false,\n priorityIds?: string[],\n) {\n return orderBy(chatIds, (id) => {\n const chat = chatsById[id];\n if (!chat) {\n return 0;\n }\n\n let priority = 0;\n\n if (chat.lastMessage) {\n priority += chat.lastMessage.date;\n }\n\n if (shouldPrioritizeVerified && chat.isVerified) {\n priority += VERIFIED_PRIORITY_BASE; // ~100 years in seconds\n }\n\n if (priorityIds && priorityIds.includes(id)) {\n priority = Date.now() + PINNED_PRIORITY_BASE + (priorityIds.length - priorityIds.indexOf(id));\n }\n\n return priority;\n }, 'desc');\n}\n\nexport function filterChatsByName(\n lang: LangFn,\n chatIds: string[],\n chatsById: Record,\n query?: string,\n currentUserId?: string,\n) {\n if (!query) {\n return chatIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return chatIds.filter((id) => {\n const chat = chatsById[id];\n if (!chat) {\n return false;\n }\n\n return searchWords(getChatTitle(lang, chat, undefined, id === currentUserId));\n });\n}\n","import {\n ApiChat, ApiMessage, ApiMessageEntityTypes, ApiReactions, ApiUser,\n} from '../../api/types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport {\n CONTENT_NOT_SUPPORTED,\n LOCAL_MESSAGE_ID_BASE,\n RE_LINK_TEMPLATE,\n SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\nimport { getUserFullName } from './users';\nimport { IS_OPUS_SUPPORTED, isWebpSupported } from '../../util/environment';\nimport { getChatTitle, isUserId } from './chats';\nimport parseEmojiOnlyString from '../../components/common/helpers/parseEmojiOnlyString';\n\nconst RE_LINK = new RegExp(RE_LINK_TEMPLATE, 'i');\n\nexport type MessageKey = `msg${string}-${number}`;\n\nexport function getMessageKey(message: ApiMessage): MessageKey {\n const { chatId, id } = message;\n\n return buildMessageKey(chatId, id);\n}\n\nexport function buildMessageKey(chatId: string, msgId: number): MessageKey {\n return `msg${chatId}-${msgId}`;\n}\n\nexport function parseMessageKey(key: MessageKey) {\n const match = key.match(/^msg(-?\\d+)-(\\d+)/)!;\n\n return { chatId: match[1], messageId: Number(match[2]) };\n}\n\nexport function getMessageOriginalId(message: ApiMessage) {\n return message.previousLocalId || message.id;\n}\n\nexport function getMessageText(message: ApiMessage) {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact, invoice,\n } = message.content;\n\n if (text) {\n return text.text;\n }\n\n if (sticker || photo || video || audio || voice || document || contact || poll || webPage || invoice) {\n return undefined;\n }\n\n return CONTENT_NOT_SUPPORTED;\n}\n\nexport function getMessageCustomShape(message: ApiMessage): boolean | number {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact,\n } = message.content;\n\n if (sticker || (video?.isRound)) {\n return true;\n }\n\n if (!text || photo || video || audio || voice || document || poll || webPage || contact) {\n return false;\n }\n\n // This is a \"dual-intent\" method used to limit calls of `parseEmojiOnlyString`.\n return parseEmojiOnlyString(text.text) || false;\n}\n\nexport function getMessageSingleEmoji(message: ApiMessage) {\n const { text } = message.content;\n if (!(text && text.text.length <= 6)) {\n return undefined;\n }\n\n if (getMessageCustomShape(message) !== 1) {\n return undefined;\n }\n\n return text.text;\n}\n\nexport function getFirstLinkInMessage(message: ApiMessage) {\n const { text } = message.content;\n\n let match: RegExpMatchArray | null | undefined;\n if (text?.entities) {\n let link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.TextUrl);\n if (link) {\n match = link.url!.match(RE_LINK);\n }\n\n if (!match) {\n link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.Url);\n if (link) {\n const { offset, length } = link;\n match = text.text.substring(offset, offset + length).match(RE_LINK);\n }\n }\n }\n\n if (!match && text) {\n match = text.text.match(RE_LINK);\n }\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function matchLinkInMessageText(message: ApiMessage) {\n const { text } = message.content;\n const match = text && text.text.match(RE_LINK);\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function isOwnMessage(message: ApiMessage) {\n return message.isOutgoing;\n}\n\nexport function isReplyMessage(message: ApiMessage) {\n return Boolean(message.replyToMessageId);\n}\n\nexport function isForwardedMessage(message: ApiMessage) {\n return Boolean(message.forwardInfo);\n}\n\nexport function isActionMessage(message: ApiMessage) {\n return Boolean(message.content.action);\n}\n\nexport function isServiceNotificationMessage(message: ApiMessage) {\n return message.chatId === SERVICE_NOTIFICATIONS_USER_ID && Math.round(message.id) !== message.id;\n}\n\nexport function isAnonymousOwnMessage(message: ApiMessage) {\n return Boolean(message.senderId) && !isUserId(message.senderId!) && isOwnMessage(message);\n}\n\nexport function getSenderTitle(lang: LangFn, sender: ApiUser | ApiChat) {\n return isUserId(sender.id) ? getUserFullName(sender as ApiUser) : getChatTitle(lang, sender as ApiChat);\n}\n\nexport function getSendingState(message: ApiMessage) {\n if (!message.sendingState) {\n return 'succeeded';\n }\n\n return message.sendingState === 'messageSendingStateFailed' ? 'failed' : 'pending';\n}\n\nexport function isMessageLocal(message: ApiMessage) {\n return message.id >= LOCAL_MESSAGE_ID_BASE;\n}\n\nexport function isHistoryClearMessage(message: ApiMessage) {\n return message.content.action && message.content.action.type === 'historyClear';\n}\n\nexport function getMessageContentFilename(message: ApiMessage) {\n const { content } = message;\n\n const video = content.webPage ? content.webPage.video : content.video;\n const photo = content.webPage ? content.webPage.photo : content.photo;\n const document = content.webPage ? content.webPage.document : content.document;\n if (document) {\n return document.fileName;\n }\n\n if (video) {\n return video.fileName;\n }\n\n if (content.sticker) {\n const extension = content.sticker.isLottie ? 'tgs' : content.sticker.isGif\n ? 'webm' : isWebpSupported() ? 'webp' : 'png';\n return `${content.sticker.id}.${extension}`;\n }\n\n if (content.audio) {\n return content.audio.fileName;\n }\n\n const baseFilename = getMessageKey(message);\n\n if (photo) {\n return `${baseFilename}.jpg`;\n }\n\n if (content.voice) {\n return IS_OPUS_SUPPORTED ? `${baseFilename}.ogg` : `${baseFilename}.wav`;\n }\n\n return baseFilename;\n}\n\nexport function areReactionsEmpty(reactions: ApiReactions) {\n return !reactions.results.some((l) => l.count > 0);\n}\n","import { ApiMessage, ApiMessageEntityTypes } from '../../api/types';\nimport type { TextPart } from '../../components/common/helpers/renderTextWithEntities';\nimport { CONTENT_NOT_SUPPORTED } from '../../config';\n\nimport { LangFn } from '../../hooks/useLang';\nimport trimText from '../../util/trimText';\nimport { getMessageText } from './messages';\nimport { getMessageRecentReaction } from './reactions';\n\nconst SPOILER_CHARS = ['⠺', '⠵', '⠞', '⠟'];\nexport const TRUNCATED_SUMMARY_LENGTH = 80;\n\nexport function getMessageSummaryText(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n noReactions = true,\n) {\n const emoji = !noEmoji && getMessageSummaryEmoji(message, noReactions);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n const text = trimText(getMessageTextWithSpoilers(message), truncateLength);\n const description = getMessageSummaryDescription(lang, message, text, noReactions);\n\n return `${emojiWithSpace}${description}`;\n}\n\nexport function getMessageTextWithSpoilers(message: ApiMessage) {\n const text = getMessageText(message);\n if (!text) {\n return undefined;\n }\n\n const { entities } = message.content.text || {};\n if (!entities?.length) {\n return text;\n }\n\n return entities.reduce((accText, {\n type,\n offset,\n length,\n }) => {\n if (type !== ApiMessageEntityTypes.Spoiler) {\n return accText;\n }\n\n const spoiler = generateBrailleSpoiler(length);\n\n\n return `${accText.substr(0, offset)}${spoiler}${accText.substr(offset + length, accText.length)}`;\n }, text);\n}\n\nexport function getMessageSummaryEmoji(message: ApiMessage, noReactions = true) {\n const {\n photo,\n video,\n audio,\n voice,\n document,\n sticker,\n poll,\n } = message.content;\n\n if (message.groupedId || photo) {\n return '🖼';\n }\n\n if (video) {\n return '📹';\n }\n\n if (sticker) {\n return sticker.emoji;\n }\n\n if (audio) {\n return '🎧';\n }\n\n if (voice) {\n return '🎤';\n }\n\n if (document) {\n return '📎';\n }\n\n if (poll) {\n return '📊';\n }\n\n const reaction = !noReactions && getMessageRecentReaction(message);\n if (reaction) {\n return reaction.reaction;\n }\n\n return undefined;\n}\n\nexport function getMessageSummaryDescription(\n lang: LangFn,\n message: ApiMessage,\n truncatedText?: string | TextPart[],\n noReactions = true,\n) {\n const {\n text,\n photo,\n video,\n audio,\n voice,\n document,\n sticker,\n contact,\n poll,\n invoice,\n } = message.content;\n\n let summary: string | TextPart[] | undefined;\n\n if (message.groupedId) {\n summary = truncatedText || lang('lng_in_dlg_album');\n }\n\n if (photo) {\n summary = truncatedText || lang('AttachPhoto');\n }\n\n if (video) {\n summary = truncatedText || lang(video.isGif ? 'AttachGif' : 'AttachVideo');\n }\n\n if (sticker) {\n summary = lang('AttachSticker')\n .trim();\n }\n\n if (audio) {\n summary = getMessageAudioCaption(message) || lang('AttachMusic');\n }\n\n if (voice) {\n summary = truncatedText || lang('AttachAudio');\n }\n\n if (document) {\n summary = truncatedText || document.fileName;\n }\n\n if (contact) {\n summary = lang('AttachContact');\n }\n\n if (poll) {\n summary = poll.summary.question;\n }\n\n if (invoice) {\n summary = 'Invoice';\n }\n\n if (text) {\n summary = truncatedText;\n }\n\n const reaction = !noReactions && getMessageRecentReaction(message);\n if (summary && reaction) {\n summary = `to your \"${summary}\"`;\n }\n\n return summary || CONTENT_NOT_SUPPORTED;\n}\n\nexport function generateBrailleSpoiler(length: number) {\n return new Array(length)\n .fill(undefined)\n .map(() => SPOILER_CHARS[Math.floor(Math.random() * SPOILER_CHARS.length)])\n .join('');\n}\n\nfunction getMessageAudioCaption(message: ApiMessage) {\n const {\n audio,\n text,\n } = message.content;\n\n return (audio && [audio.title, audio.performer].filter(Boolean)\n .join(' — ')) || (text?.text);\n}\n","import {\n ApiAudio, ApiMediaFormat, ApiMessage, ApiMessageSearchType, ApiPhoto, ApiVideo, ApiDimensions,\n} from '../../api/types';\n\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, IS_SAFARI } from '../../util/environment';\nimport { getMessageKey, isMessageLocal, matchLinkInMessageText } from './messages';\nimport { getDocumentHasPreview } from '../../components/common/helpers/documentInfo';\n\ntype Target =\n 'micro'\n | 'pictogram'\n | 'inline'\n | 'viewerPreview'\n | 'viewerFull'\n | 'download';\n\nexport function getMessageContent(message: ApiMessage) {\n return message.content;\n}\n\nexport function hasMessageMedia(message: ApiMessage) {\n return Boolean((\n getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageContact(message)\n || getMessagePoll(message)\n || getMessageAction(message)\n || getMessageAudio(message)\n || getMessageVoice(message)\n ));\n}\n\nexport function getMessagePhoto(message: ApiMessage) {\n return message.content.photo;\n}\n\nexport function getMessageVideo(message: ApiMessage) {\n return message.content.video;\n}\n\nexport function getMessageRoundVideo(message: ApiMessage) {\n const { video } = message.content;\n\n return video?.isRound ? video : undefined;\n}\n\nexport function getMessageAction(message: ApiMessage) {\n return message.content.action;\n}\n\nexport function getMessageAudio(message: ApiMessage) {\n return message.content.audio;\n}\n\nexport function getMessageVoice(message: ApiMessage) {\n return message.content.voice;\n}\n\nexport function getMessageSticker(message: ApiMessage) {\n return message.content.sticker;\n}\n\nexport function getMessageDocument(message: ApiMessage) {\n return message.content.document;\n}\n\nexport function isMessageDocumentPhoto(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'photo' : undefined;\n}\n\nexport function isMessageDocumentVideo(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'video' : undefined;\n}\n\nexport function getMessageContact(message: ApiMessage) {\n return message.content.contact;\n}\n\nexport function getMessagePoll(message: ApiMessage) {\n return message.content.poll;\n}\n\nexport function getMessageInvoice(message: ApiMessage) {\n return message.content.invoice;\n}\n\nexport function getMessageWebPage(message: ApiMessage) {\n return message.content.webPage;\n}\n\nexport function getMessageWebPagePhoto(message: ApiMessage) {\n return getMessageWebPage(message)?.photo;\n}\n\nexport function getMessageWebPageDocument(message: ApiMessage) {\n return getMessageWebPage(message)?.document;\n}\n\nexport function getMessageWebPageVideo(message: ApiMessage): ApiVideo | undefined {\n return getMessageWebPage(message)?.video;\n}\n\nexport function getMessageMediaThumbnail(message: ApiMessage) {\n const media = getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageWebPagePhoto(message)\n || getMessageWebPageVideo(message);\n\n if (!media) {\n return undefined;\n }\n\n return media.thumbnail;\n}\n\nexport function getMessageMediaThumbDataUri(message: ApiMessage) {\n return getMessageMediaThumbnail(message)?.dataUri;\n}\n\nexport function getMessageMediaHash(\n message: ApiMessage,\n target: Target,\n) {\n const {\n photo, video, sticker, audio, voice, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n const messageVideo = video || webPageVideo;\n const messagePhoto = photo || webPagePhoto;\n\n if (!(messagePhoto || messageVideo || sticker || audio || voice || document)) {\n return undefined;\n }\n\n const mediaId = (messagePhoto || messageVideo || sticker || audio || voice || document)!.id;\n const base = `${getMessageKey(message)}${mediaId ? `:${mediaId}` : ''}`;\n\n if (messageVideo) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? getVideoOrAudioBaseHash(messageVideo, base) : undefined;\n case 'viewerPreview':\n return `${base}?size=m`;\n case 'viewerFull':\n return getVideoOrAudioBaseHash(messageVideo, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (messagePhoto) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? `${base}?size=x` : undefined;\n case 'viewerPreview':\n return `${base}?size=x`;\n case 'viewerFull':\n case 'download':\n return `${base}?size=z`;\n }\n }\n\n if (document) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n case 'inline':\n case 'viewerPreview':\n if (!getDocumentHasPreview(document) || hasMessageLocalBlobUrl(message)) {\n return undefined;\n }\n\n return `${base}?size=m`;\n case 'viewerFull':\n case 'download':\n return base;\n }\n }\n\n if (sticker) {\n switch (target) {\n case 'micro':\n return undefined;\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (audio) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return getAudioHasCover(audio) ? `${base}?size=m` : undefined;\n case 'inline':\n return getVideoOrAudioBaseHash(audio, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (voice) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return undefined;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n return undefined;\n}\n\nfunction getVideoOrAudioBaseHash(media: ApiAudio | ApiVideo, base: string) {\n if (IS_PROGRESSIVE_SUPPORTED && IS_SAFARI) {\n return `${base}?fileSize=${media.size}&mimeType=${media.mimeType}`;\n }\n\n return base;\n}\n\nexport function getAudioHasCover(media: ApiAudio) {\n return media.thumbnailSizes && media.thumbnailSizes.length > 0;\n}\n\nexport function getMessageMediaFormat(\n message: ApiMessage, target: Target,\n): ApiMediaFormat {\n const {\n sticker, video, audio, voice,\n } = message.content;\n\n const fullVideo = video || getMessageWebPageVideo(message);\n\n if (sticker && target === 'inline' && sticker.isLottie) {\n return ApiMediaFormat.Lottie;\n } else if (fullVideo && IS_PROGRESSIVE_SUPPORTED && (\n target === 'viewerFull' || target === 'inline'\n )) {\n return ApiMediaFormat.Progressive;\n } else if (audio || voice) {\n // Safari\n if (voice && !IS_OPUS_SUPPORTED) {\n return ApiMediaFormat.BlobUrl;\n }\n\n return ApiMediaFormat.Progressive;\n }\n\n return ApiMediaFormat.BlobUrl;\n}\n\nexport function getMessageFileName(message: ApiMessage) {\n const {\n photo, video, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n if (photo || webPagePhoto) {\n return `photo${message.date}.jpeg`;\n }\n\n const { fileName } = video || webPageVideo || document || {};\n\n return fileName;\n}\n\nexport function getMessageFileSize(message: ApiMessage) {\n const { video, document } = message.content;\n const webPageVideo = getMessageWebPageVideo(message);\n const { size } = video || webPageVideo || document || {};\n\n return size;\n}\n\nexport function hasMessageLocalBlobUrl(message: ApiMessage) {\n const { photo, video, document } = message.content;\n\n return (photo?.blobUrl) || (video?.blobUrl) || (document?.previewBlobUrl);\n}\n\nexport function getChatMediaMessageIds(\n messages: Record, listedIds: number[], isFromSharedMedia = false,\n) {\n return getMessageContentIds(messages, listedIds, isFromSharedMedia ? 'media' : 'inlineMedia');\n}\n\nexport function getPhotoFullDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'z')\n || photo.sizes.find((size) => size.type === 'y')\n || getPhotoInlineDimensions(photo)\n );\n}\n\nexport function getPhotoInlineDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'x')\n || photo.sizes.find((size) => size.type === 'm')\n || photo.sizes.find((size) => size.type === 's')\n || photo.thumbnail\n );\n}\n\nexport function getVideoDimensions(video: ApiVideo): ApiDimensions | undefined {\n if (video.width && video.height) {\n return video as ApiDimensions;\n }\n\n return undefined;\n}\n\nexport function getMediaTransferState(message: ApiMessage, progress?: number, isLoadNeeded = false) {\n const isUploading = isMessageLocal(message);\n const isTransferring = isUploading || isLoadNeeded;\n const transferProgress = Number(progress);\n\n return {\n isUploading, isTransferring, transferProgress,\n };\n}\n\nexport function getMessageContentIds(\n messages: Record, messageIds: number[], contentType: ApiMessageSearchType | 'inlineMedia',\n) {\n let validator: Function;\n\n switch (contentType) {\n case 'media':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessagePhoto(message) || (video && !video.isRound && !video.isGif);\n };\n break;\n\n case 'documents':\n validator = getMessageDocument;\n break;\n\n case 'links':\n validator = (message: ApiMessage) => getMessageWebPage(message) || matchLinkInMessageText(message);\n break;\n\n case 'audio':\n validator = getMessageAudio;\n break;\n\n case 'voice':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessageVoice(message) || (video && video.isRound);\n };\n break;\n\n case 'inlineMedia':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return (\n getMessagePhoto(message)\n || (video && !video.isRound && !video.isGif)\n || isMessageDocumentPhoto(message)\n || isMessageDocumentVideo(message)\n );\n };\n break;\n\n default:\n return [] as Array;\n }\n\n return messageIds.reduce((result, messageId) => {\n if (messages[messageId] && validator(messages[messageId])) {\n result.push(messageId);\n }\n\n return result;\n }, [] as Array);\n}\n\nexport function getMediaDuration(message: ApiMessage) {\n const { audio, voice, video } = getMessageContent(message);\n const media = audio || voice || video || getMessageWebPageVideo(message);\n if (!media) {\n return undefined;\n }\n\n return media.duration;\n}\n","export function buildChatThreadKey(chatId: string, threadId: number) {\n return `${chatId}_${threadId}`;\n}\n","import { ApiFieldError } from '../../api/types';\n\nconst STRIPE_ERRORS: Record = {\n missing_payment_information: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n invalid_number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n exp_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n exp_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n invalid_expiry_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n invalid_expiry_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n invalid_cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n};\n\nexport function getStripeError(error: {\n code: string;\n message: string;\n param?: string;\n}) {\n const { message: description, code, param } = error;\n const { field, message } = param ? STRIPE_ERRORS[param] : STRIPE_ERRORS[code];\n\n return { field, message, description };\n}\n","import { ApiMessage, ApiReactions } from '../../api/types';\n\nexport function getMessageRecentReaction(message: Partial) {\n return message.isOutgoing ? message.reactions?.recentReactions?.[0] : undefined;\n}\n\nexport function checkIfReactionAdded(oldReactions?: ApiReactions, newReactions?: ApiReactions) {\n if (!oldReactions || !oldReactions.recentReactions) return true;\n if (!newReactions || !newReactions.recentReactions) return false;\n const oldReactionsMap = oldReactions.results.reduce>((acc, reaction) => {\n acc[reaction.reaction] = reaction.count;\n return acc;\n }, {});\n return newReactions.results.some(r => !oldReactionsMap[r.reaction] || oldReactionsMap[r.reaction] < r.count);\n}\n","import { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport { formatFullDate, formatTime } from '../../util/dateFormat';\nimport { orderBy } from '../../util/iteratees';\nimport { LangFn } from '../../hooks/useLang';\nimport { getServerTime } from '../../util/serverTime';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst USER_COLOR_KEYS = [1, 8, 5, 2, 7, 4, 6];\n\nexport function getUserFirstOrLastName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n return user.firstName || user.lastName;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted';\n }\n\n default:\n return undefined;\n }\n}\n\nexport function getUserFullName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n if (isDeletedUser(user)) {\n return 'Deleted account';\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n if (user.firstName && user.lastName) {\n return `${user.firstName} ${user.lastName}`;\n }\n\n if (user.firstName) {\n return user.firstName;\n }\n\n if (user.lastName) {\n return user.lastName;\n }\n\n break;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted account';\n }\n }\n\n return undefined;\n}\n\nexport function getUserStatus(\n lang: LangFn, user: ApiUser, userStatus: ApiUserStatus | undefined, serverTimeOffset: number,\n) {\n if (user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return lang('ServiceNotifications').toLowerCase();\n }\n\n if (user.type && user.type === 'userTypeBot') {\n return lang('Bot');\n }\n\n if (!userStatus) {\n return '';\n }\n\n switch (userStatus.type) {\n case 'userStatusEmpty': {\n return lang('ALongTimeAgo');\n }\n\n case 'userStatusLastMonth': {\n return lang('WithinAMonth');\n }\n\n case 'userStatusLastWeek': {\n return lang('WithinAWeek');\n }\n\n case 'userStatusOffline': {\n const { wasOnline } = userStatus;\n\n if (!wasOnline) return lang('LastSeen.Offline');\n\n const now = new Date(new Date().getTime() + serverTimeOffset * 1000);\n const wasOnlineDate = new Date(wasOnline * 1000);\n\n if (wasOnlineDate >= now) {\n return lang('LastSeen.JustNow');\n }\n\n const diff = new Date(now.getTime() - wasOnlineDate.getTime());\n\n // within a minute\n if (diff.getTime() / 1000 < 60) {\n return lang('LastSeen.JustNow');\n }\n\n // within an hour\n if (diff.getTime() / 1000 < 60 * 60) {\n const minutes = Math.floor(diff.getTime() / 1000 / 60);\n return lang('LastSeen.MinutesAgo', minutes);\n }\n\n // today\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const serverToday = new Date(today.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverToday) {\n // up to 6 hours ago\n if (diff.getTime() / 1000 < 6 * 60 * 60) {\n const hours = Math.floor(diff.getTime() / 1000 / 60 / 60);\n return lang('LastSeen.HoursAgo', hours);\n }\n\n // other\n return lang('LastSeen.TodayAt', formatTime(lang, wasOnlineDate));\n }\n\n // yesterday\n const yesterday = new Date();\n yesterday.setDate(now.getDate() - 1);\n yesterday.setHours(0, 0, 0, 0);\n const serverYesterday = new Date(yesterday.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverYesterday) {\n return lang('LastSeen.YesterdayAt', formatTime(lang, wasOnlineDate));\n }\n\n return lang('LastSeen.AtDate', formatFullDate(lang, wasOnlineDate));\n }\n\n case 'userStatusOnline': {\n return lang('Online');\n }\n\n case 'userStatusRecently': {\n return lang('Lately');\n }\n\n default:\n return undefined;\n }\n}\n\nexport function isUserOnline(user: ApiUser, userStatus?: ApiUserStatus) {\n const { id, type } = user;\n\n if (!userStatus) {\n return false;\n }\n\n if (id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return userStatus.type === 'userStatusOnline' && type !== 'userTypeBot';\n}\n\nexport function isDeletedUser(user: ApiUser) {\n if (user.noStatus || user.type === 'userTypeBot' || user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return user.type === 'userTypeDeleted'\n || user.type === 'userTypeUnknown';\n}\n\nexport function isUserBot(user: ApiUser) {\n return user.type === 'userTypeBot';\n}\n\nexport function getCanAddContact(user: ApiUser) {\n return !user.isContact && !isUserBot(user);\n}\n\nexport function sortUserIds(\n userIds: string[],\n usersById: Record,\n userStatusesById: Record,\n priorityIds?: string[],\n serverTimeOffset = 0,\n) {\n return orderBy(userIds, (id) => {\n const now = getServerTime(serverTimeOffset);\n\n if (priorityIds && priorityIds.includes(id)) {\n // Assuming that online status expiration date can't be as far as two days from now,\n // this should place prioritized on top of the list.\n // Then we subtract index of `id` in `priorityIds` to preserve selected order\n return now + (48 * 60 * 60) - (priorityIds.length - priorityIds.indexOf(id));\n }\n\n const user = usersById[id];\n const userStatus = userStatusesById[id];\n if (!user || !userStatus) {\n return 0;\n }\n\n if (userStatus.type === 'userStatusOnline') {\n return userStatus.expires;\n } else if (userStatus.type === 'userStatusOffline' && userStatus.wasOnline) {\n return userStatus.wasOnline;\n }\n\n switch (userStatus.type) {\n case 'userStatusRecently':\n return now - 60 * 60 * 24;\n case 'userStatusLastWeek':\n return now - 60 * 60 * 24 * 7;\n case 'userStatusLastMonth':\n return now - 60 * 60 * 24 * 7 * 30;\n default:\n return 0;\n }\n }, 'desc');\n}\n\nexport function filterUsersByName(\n userIds: string[],\n usersById: Record,\n query?: string,\n currentUserId?: string,\n savedMessagesLang?: string,\n) {\n if (!query) {\n return userIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return userIds.filter((id) => {\n const user = usersById[id];\n if (!user) {\n return false;\n }\n\n const name = id === currentUserId ? savedMessagesLang : getUserFullName(user);\n return (name && searchWords(name)) || searchWords(user.username);\n });\n}\n\nexport function getUserIdDividend(userId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof userId === 'number') {\n return Math.abs(userId);\n }\n\n return Math.abs(Number(userId));\n}\n\n// eslint-disable-next-line max-len\n// https://github.com/telegramdesktop/tdesktop/blob/371510cfe23b0bd226de8c076bc49248fbe40c26/Telegram/SourceFiles/data/data_peer.cpp#L53\nexport function getUserColorKey(peer: ApiUser | ApiChat | undefined) {\n const index = peer ? getUserIdDividend(peer.id) % 7 : 0;\n\n return USER_COLOR_KEYS[index];\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiChat, ApiPhoto } from '../../api/types';\n\nimport { ARCHIVED_FOLDER_ID } from '../../config';\nimport { omit } from '../../util/iteratees';\nimport { selectChatListType } from '../selectors';\n\nexport function replaceChatListIds(\n global: GlobalState,\n type: 'active' | 'archived',\n newIds: string[] | undefined,\n): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n listIds: {\n ...global.chats.listIds,\n [type]: newIds,\n },\n },\n };\n}\n\nexport function updateChatListIds(global: GlobalState, type: 'active' | 'archived', idsUpdate: string[]): GlobalState {\n const { [type]: listIds } = global.chats.listIds;\n const newIds = listIds?.length\n ? idsUpdate.filter((id) => !listIds.includes(id))\n : idsUpdate;\n\n if (listIds && !newIds.length) {\n return global;\n }\n\n return replaceChatListIds(global, type, [\n ...(listIds || []),\n ...newIds,\n ]);\n}\n\nexport function replaceChats(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n byId: newById,\n },\n };\n}\n\nexport function updateChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n): GlobalState {\n const { byId } = global.chats;\n\n const updatedChat = getUpdatedChat(global, chatId, chatUpdate, photo);\n if (!updatedChat) {\n return global;\n }\n\n return replaceChats(global, {\n ...byId,\n [chatId]: updatedChat,\n });\n}\n\nexport function updateChats(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n }\n\n return acc;\n }, {});\n\n global = replaceChats(global, {\n ...global.chats.byId,\n ...updatedById,\n });\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addChats(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.chats;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceChats(global, {\n ...byId,\n ...addedById,\n });\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n) {\n const { byId } = global.chats;\n const chat = byId[chatId];\n const shouldOmitMinInfo = chatUpdate.isMin && chat && !chat.isMin;\n const updatedChat: ApiChat = {\n ...chat,\n ...(shouldOmitMinInfo ? omit(chatUpdate, ['isMin', 'accessHash']) : chatUpdate),\n ...(photo && { photos: [photo, ...(chat.photos || [])] }),\n };\n\n if (!updatedChat.id || !updatedChat.type) {\n return undefined;\n }\n\n return updatedChat;\n}\n\nexport function updateChatListType(\n global: GlobalState,\n chatId: string,\n folderId?: number,\n): GlobalState {\n const listType = folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n\n let currentListIds = global.chats.listIds;\n (Object.keys(currentListIds) as Array).forEach((listTypeKey) => {\n const currentFolderList = currentListIds[listTypeKey] || [];\n if (listTypeKey === listType && !currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: [...currentFolderList, chatId],\n };\n } else if (listTypeKey !== listType && currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: currentFolderList.filter((id) => id !== chatId),\n };\n }\n });\n\n global = {\n ...global,\n chats: {\n ...global.chats,\n listIds: currentListIds,\n },\n };\n\n global = updateChat(global, chatId, { folderId: folderId || undefined });\n\n return global;\n}\n\nexport function updateChatListSecondaryInfo(\n global: GlobalState,\n type: 'active' | 'archived',\n info: {\n orderedPinnedIds?: string[];\n totalChatCount: number;\n },\n): GlobalState {\n const totalCountKey = type === 'active' ? 'all' : 'archived';\n\n return {\n ...global,\n chats: {\n ...global.chats,\n ...(info.orderedPinnedIds && {\n orderedPinnedIds: {\n ...global.chats.orderedPinnedIds,\n [type]: info.orderedPinnedIds,\n },\n }),\n totalCount: {\n ...global.chats.totalCount,\n [totalCountKey]: info.totalChatCount,\n },\n isFullyLoaded: {\n ...global.chats.isFullyLoaded,\n [type]: false,\n },\n },\n };\n}\n\nexport function leaveChat(global: GlobalState, leftChatId: string): GlobalState {\n const listType = selectChatListType(global, leftChatId);\n if (!listType) {\n return global;\n }\n\n const { [listType]: listIds } = global.chats.listIds;\n\n if (listIds) {\n global = replaceChatListIds(global, listType, listIds.filter((listId) => listId !== leftChatId));\n }\n\n global = updateChat(global, leftChatId, { isNotJoined: true });\n\n return global;\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiSticker, ApiStickerSet, ApiVideo } from '../../api/types';\nimport { buildCollectionByKey, unique } from '../../util/iteratees';\nimport { selectStickersForEmoji } from '../selectors';\n\nexport function updateStickerSets(\n global: GlobalState,\n category: 'added' | 'featured' | 'search',\n hash: string,\n sets: ApiStickerSet[],\n resultIds?: string[],\n): GlobalState {\n const updatedSets = sets.map((stickerSet) => {\n const existing = global.stickers.setsById[stickerSet.id];\n if (!existing) {\n return stickerSet;\n }\n\n return {\n ...existing,\n ...stickerSet,\n };\n });\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n setsById: {\n ...global.stickers.setsById,\n ...buildCollectionByKey(updatedSets, 'id'),\n },\n [category]: {\n ...global.stickers[category],\n hash,\n ...(\n category === 'search'\n ? { resultIds }\n : { setIds: sets.map(({ id }) => id) }\n ),\n },\n },\n };\n}\n\nexport function updateStickerSet(\n global: GlobalState, stickerSetId: string, update: Partial,\n): GlobalState {\n const currentStickerSet = global.stickers.setsById[stickerSetId] || {};\n const addedSets = global.stickers.added.setIds || [];\n let setIds: string[] = addedSets;\n if (update.installedDate && addedSets && !addedSets.includes(stickerSetId)) {\n setIds = [stickerSetId, ...setIds];\n }\n\n if (!update.installedDate && addedSets?.includes(stickerSetId)) {\n setIds = setIds.filter((id) => id !== stickerSetId);\n }\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n added: {\n ...global.stickers.added,\n setIds,\n },\n setsById: {\n ...global.stickers.setsById,\n [stickerSetId]: {\n ...currentStickerSet,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateGifSearch(\n global: GlobalState, isNew: boolean, results: ApiVideo[], nextOffset?: string,\n): GlobalState {\n const { results: currentResults } = global.gifs.search;\n\n let newResults!: ApiVideo[];\n if (isNew || !currentResults) {\n newResults = results;\n } else {\n const currentIds = new Set(currentResults.map((gif) => gif.id));\n newResults = [\n ...currentResults,\n ...results.filter((gif) => !currentIds.has(gif.id)),\n ];\n }\n\n return {\n ...global,\n gifs: {\n ...global.gifs,\n search: {\n ...global.gifs.search,\n offset: nextOffset,\n results: newResults,\n },\n },\n };\n}\n\nexport function replaceAnimatedEmojis(global: GlobalState, stickerSet: ApiStickerSet): GlobalState {\n return {\n ...global,\n animatedEmojis: stickerSet,\n };\n}\n\nexport function updateStickersForEmoji(\n global: GlobalState, emoji: string, remoteStickers?: ApiSticker[], hash?: string,\n): GlobalState {\n const localStickers = selectStickersForEmoji(global, emoji);\n const allStickers = [...localStickers, ...(remoteStickers || [])];\n const uniqueIds = unique(allStickers.map(({ id }) => id));\n const byId = buildCollectionByKey(allStickers, 'id');\n const stickers = uniqueIds.map((id) => byId[id]);\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n forEmoji: {\n emoji,\n stickers,\n hash,\n },\n },\n };\n}\n\nexport function rebuildStickersForEmoji(global: GlobalState): GlobalState {\n const { emoji, stickers, hash } = global.stickers.forEmoji || {};\n if (!emoji) {\n return global;\n }\n\n return updateStickersForEmoji(global, emoji, stickers, hash);\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { omit, pick } from '../../util/iteratees';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\n\nexport function replaceUsers(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n byId: newById,\n },\n };\n}\n\nfunction updateContactList(global: GlobalState, updatedUsers: ApiUser[]): GlobalState {\n const { userIds: contactUserIds } = global.contactList || {};\n\n if (!contactUserIds) return global;\n\n const newContactUserIds = updatedUsers\n .filter((user) => user?.isContact && !contactUserIds.includes(user.id))\n .map((user) => user.id);\n\n if (newContactUserIds.length === 0) return global;\n\n return {\n ...global,\n contactList: {\n userIds: [\n ...newContactUserIds,\n ...contactUserIds,\n ],\n },\n };\n}\n\nexport function updateUser(global: GlobalState, userId: string, userUpdate: Partial): GlobalState {\n const { byId } = global.users;\n\n const updatedUser = getUpdatedUser(global, userId, userUpdate);\n if (!updatedUser) {\n return global;\n }\n\n global = updateContactList(global, [updatedUser]);\n\n return replaceUsers(global, {\n ...byId,\n [userId]: updatedUser,\n });\n}\n\nexport function updateUsers(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n }\n\n return acc;\n }, {});\n\n global = replaceUsers(global, {\n ...global.users.byId,\n ...updatedById,\n });\n\n global = updateContactList(global, Object.values(updatedById));\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUsers(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.users;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceUsers(global, {\n ...byId,\n ...addedById,\n });\n\n global = updateContactList(global, Object.values(addedById));\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedUser(global: GlobalState, userId: string, userUpdate: Partial) {\n const { byId } = global.users;\n const user = byId[userId];\n const shouldOmitMinInfo = userUpdate.isMin && user && !user.isMin;\n\n const updatedUser = {\n ...user,\n ...(shouldOmitMinInfo ? omit(userUpdate, ['isMin', 'accessHash']) : userUpdate),\n };\n\n if (!updatedUser.id || !updatedUser.type) {\n return undefined;\n }\n\n return updatedUser;\n}\n\nexport function deleteContact(global: GlobalState, userId: string): GlobalState {\n const { byId } = global.users;\n const { userIds } = global.contactList || {};\n\n global = {\n ...global,\n contactList: {\n userIds: userIds ? userIds.filter((id) => id !== userId) : MEMO_EMPTY_ARRAY,\n },\n };\n\n return replaceUsers(global, {\n ...byId,\n [userId]: {\n ...byId[userId],\n isContact: undefined,\n },\n });\n}\n\nexport function updateUserSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n userSearch: {\n ...global.userSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateUserSearchFetchingStatus(\n global: GlobalState, newState: boolean,\n) {\n return updateUserSearch(global, {\n fetchingStatus: newState,\n });\n}\n\nexport function updateUserBlockedState(global: GlobalState, userId: string, isBlocked: boolean) {\n const { byId } = global.users;\n const user = byId[userId];\n if (!user || !user.fullInfo) {\n return global;\n }\n\n return updateUser(global, userId, {\n ...user,\n fullInfo: {\n ...user.fullInfo,\n isBlocked,\n },\n });\n}\n\nexport function replaceUserStatuses(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n statusesById: newById,\n },\n };\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUserStatuses(global: GlobalState, newById: Record): GlobalState {\n const { statusesById } = global.users;\n\n const newKeys = Object.keys(newById).filter((id) => !statusesById[id]);\n if (!newKeys.length) {\n return global;\n }\n\n global = replaceUserStatuses(global, {\n ...statusesById,\n ...pick(newById, newKeys),\n });\n\n return global;\n}\n","import { GlobalState } from '../../global/types';\nimport { GlobalSearchContent } from '../../types';\nimport { ApiGlobalMessageSearchType, ApiMessage } from '../../api/types';\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nconst getComplexKey = (message: ApiMessage) => `${message.chatId}_${message.id}`;\n\nexport function updateGlobalSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n globalSearch: {\n ...global.globalSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateGlobalSearchContent(\n global: GlobalState,\n currentContent: GlobalSearchContent | undefined,\n): GlobalState {\n return updateGlobalSearch(global, { currentContent });\n}\n\nexport function updateGlobalSearchResults(\n global: GlobalState,\n newFoundMessages: ApiMessage[],\n totalCount: number,\n type: ApiGlobalMessageSearchType,\n nextRate?: number,\n): GlobalState {\n const { resultsByType } = global.globalSearch || {};\n const newFoundMessagesById = newFoundMessages.reduce((result, message) => {\n result[getComplexKey(message)] = message;\n\n return result;\n }, {} as Record);\n const foundIdsForType = resultsByType?.[type]?.foundIds;\n\n if (foundIdsForType !== undefined\n && Object.keys(newFoundMessagesById).every(\n (newId) => foundIdsForType.includes(getComplexKey(newFoundMessagesById[newId])),\n )\n ) {\n return updateGlobalSearchFetchingStatus(global, { messages: false });\n }\n\n const prevFoundIds = foundIdsForType || [];\n const newFoundIds = newFoundMessages.map((message) => getComplexKey(message));\n const foundIds = Array.prototype.concat(prevFoundIds, newFoundIds);\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n global = updateGlobalSearchFetchingStatus(global, { messages: false });\n\n return updateGlobalSearch(global, {\n resultsByType: {\n ...(global.globalSearch || {}).resultsByType,\n [type]: {\n totalCount,\n nextOffsetId: nextRate,\n foundIds: foundOrPrevFoundIds,\n },\n },\n });\n}\n\nexport function updateGlobalSearchFetchingStatus(\n global: GlobalState, newState: { chats?: boolean; messages?: boolean },\n) {\n return updateGlobalSearch(global, {\n fetchingStatus: {\n ...global.globalSearch.fetchingStatus,\n ...newState,\n },\n });\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiMessageSearchType } from '../../api/types';\n\nimport { areSortedArraysEqual, unique } from '../../util/iteratees';\nimport { SharedMediaType } from '../../types';\nimport { buildChatThreadKey } from '../helpers';\n\ninterface TextSearchParams {\n isActive: boolean;\n query?: string;\n results?: {\n totalCount?: number;\n nextOffsetId?: number;\n foundIds?: number[];\n };\n}\n\ninterface MediaSearchParams {\n currentType?: SharedMediaType;\n resultsByType?: Partial>;\n}\n\nfunction replaceLocalTextSearch(\n global: GlobalState,\n chatThreadKey: string,\n searchParams: TextSearchParams,\n): GlobalState {\n return {\n ...global,\n localTextSearch: {\n byChatThreadKey: {\n ...global.localTextSearch.byChatThreadKey,\n [chatThreadKey]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalTextSearch(\n global: GlobalState,\n chatId: string,\n threadId: number,\n isActive: boolean,\n query?: string,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n isActive,\n query,\n });\n}\n\nexport function replaceLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n results: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n });\n}\n\nexport function updateLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const { results } = global.localTextSearch.byChatThreadKey[chatThreadKey] || {};\n const prevFoundIds = (results?.foundIds) || [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalTextSearchResults(global, chatId, threadId, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction replaceLocalMediaSearch(\n global: GlobalState,\n chatId: string,\n searchParams: MediaSearchParams,\n): GlobalState {\n return {\n ...global,\n localMediaSearch: {\n byChatId: {\n ...global.localMediaSearch.byChatId,\n [chatId]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalMediaSearchType(\n global: GlobalState,\n chatId: string,\n currentType: SharedMediaType | undefined,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n currentType,\n });\n}\n\nexport function replaceLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: ApiMessageSearchType,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n resultsByType: {\n ...(global.localMediaSearch.byChatId[chatId] || {}).resultsByType,\n [type]: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n },\n });\n}\n\nexport function updateLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: SharedMediaType,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const { resultsByType } = global.localMediaSearch.byChatId[chatId] || {};\n const prevFoundIds = resultsByType?.[type] ? resultsByType[type]!.foundIds : [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalMediaSearchResults(global, chatId, type, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction orderFoundIds(listedIds: number[]) {\n return listedIds.sort((a, b) => b - a);\n}\n","import { GlobalState } from '../../global/types';\nimport { ManagementProgress, ManagementState } from '../../types';\n\nexport function updateManagementProgress(global: GlobalState, progress: ManagementProgress): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n progress,\n },\n };\n}\n\nexport function updateManagement(global: GlobalState, chatId: string, update: Partial): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...(global.management.byChatId[chatId] || {}),\n ...update,\n },\n },\n },\n };\n}\n","import { GlobalState } from '../../global/types';\nimport {\n ISettings, IThemeSettings, ThemeKey, NotifyException,\n} from '../../types';\nimport { ApiNotifyException } from '../../api/types';\nimport { updateUserBlockedState } from './users';\n\nexport function replaceSettings(global: GlobalState, newSettings?: Partial): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n byKey: {\n ...global.settings.byKey,\n ...newSettings,\n },\n },\n };\n}\n\nexport function replaceThemeSettings(\n global: GlobalState, theme: ThemeKey, newSettings?: Partial,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n themes: {\n ...global.settings.themes,\n [theme]: {\n ...(global.settings.themes[theme] || {}),\n ...newSettings,\n },\n },\n },\n };\n}\n\nexport function addNotifyExceptions(\n global: GlobalState, notifyExceptions: ApiNotifyException[],\n): GlobalState {\n notifyExceptions.forEach((notifyException) => {\n const { chatId, ...exceptionData } = notifyException;\n global = addNotifyException(global, chatId, exceptionData);\n });\n\n return global;\n}\n\nexport function addNotifyException(\n global: GlobalState, id: string, notifyException: NotifyException,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n notifyExceptions: {\n ...global.settings.notifyExceptions,\n [id]: notifyException,\n },\n },\n };\n}\n\nexport function updateNotifySettings(\n global: GlobalState, peerType: 'contact' | 'group' | 'broadcast', isSilent?: boolean, shouldShowPreviews?: boolean,\n) {\n switch (peerType) {\n case 'contact':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasPrivateChatsNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasPrivateChatsMessagePreview: shouldShowPreviews }),\n });\n case 'group':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasGroupNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasGroupMessagePreview: shouldShowPreviews }),\n });\n case 'broadcast':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasBroadcastNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasBroadcastMessagePreview: shouldShowPreviews }),\n });\n\n default:\n return undefined;\n }\n}\n\nexport function addBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, true);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: [contactId, ...global.blocked.ids],\n totalCount: global.blocked.totalCount + 1,\n },\n };\n}\n\nexport function removeBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, false);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: global.blocked.ids.filter((id) => id !== contactId),\n totalCount: global.blocked.totalCount - 1,\n },\n };\n}\n","import { GlobalState } from '../../global/types';\n\nexport function updateTwoFaSettings(\n global: GlobalState,\n update: GlobalState['twoFaSettings'],\n): GlobalState {\n return {\n ...global,\n twoFaSettings: {\n ...global.twoFaSettings,\n ...update,\n },\n };\n}\n","import { GlobalState } from '../../global/types';\nimport { ShippingOption, PaymentStep } from '../../types';\nimport { ApiMessage, ApiPaymentForm, ApiReceipt } from '../../api/types';\n\nexport function updateShippingOptions(\n global: GlobalState,\n shippingOptions: ShippingOption[],\n): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n shippingOptions,\n },\n };\n}\n\nexport function setRequestInfoId(global: GlobalState, id: string): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n requestId: id,\n },\n };\n}\n\nexport function setPaymentStep(global: GlobalState, step: PaymentStep): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n step,\n },\n };\n}\n\nexport function setInvoiceMessageInfo(global: GlobalState, message: ApiMessage): GlobalState {\n if (!message.content || !message.content.invoice) {\n return global;\n }\n const {\n title,\n text,\n amount,\n currency,\n isTest,\n photoUrl,\n } = message.content.invoice;\n return {\n ...global,\n payment: {\n ...global.payment,\n invoiceContent: {\n title,\n text,\n photoUrl,\n amount,\n currency,\n isTest,\n },\n },\n };\n}\n\nexport function setStripeCardInfo(global: GlobalState, cardInfo: { type: string; id: string }): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n stripeCredentials: {\n ...cardInfo,\n },\n },\n };\n}\n\nexport function setPaymentForm(global: GlobalState, form: ApiPaymentForm): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n ...form,\n },\n };\n}\n\nexport function setReceipt(\n global: GlobalState,\n receipt?: ApiReceipt,\n message?: ApiMessage,\n): GlobalState {\n if (!receipt || !message) {\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: undefined,\n },\n };\n }\n\n const { invoice: messageInvoice } = message.content;\n const { photoUrl, text, title } = (messageInvoice || {});\n\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: {\n ...receipt,\n photoUrl,\n text,\n title,\n },\n },\n };\n}\n\nexport function clearPayment(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {},\n };\n}\n\nexport function closeInvoice(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n isPaymentModalOpen: false,\n },\n };\n}\n","import {\n GlobalState, MessageList, MessageListType, Thread,\n} from '../../global/types';\nimport {\n ApiMessage, ApiSponsoredMessage, ApiThreadInfo, MAIN_THREAD_ID,\n} from '../../api/types';\nimport { FocusDirection } from '../../types';\n\nimport {\n IS_TEST, MESSAGE_LIST_SLICE, MESSAGE_LIST_VIEWPORT_LIMIT, TMP_CHAT_ID,\n} from '../../config';\nimport {\n selectListedIds,\n selectChatMessages,\n selectViewportIds,\n selectOutlyingIds,\n selectPinnedIds,\n selectThreadInfo,\n selectMessageIdsByGroupId,\n selectScheduledMessages,\n selectScheduledIds,\n selectCurrentMessageIds,\n selectChatMessage,\n selectCurrentMessageList,\n} from '../selectors';\nimport {\n areSortedArraysEqual, omit, pickTruthy, unique,\n} from '../../util/iteratees';\n\ntype MessageStoreSections = {\n byId: Record;\n threadsById: Record;\n};\n\nexport function updateCurrentMessageList(\n global: GlobalState,\n chatId: string | undefined,\n threadId: number = MAIN_THREAD_ID,\n type: MessageListType = 'thread',\n shouldReplaceHistory?: boolean,\n): GlobalState {\n const { messageLists } = global.messages;\n let newMessageLists: MessageList[] = messageLists;\n if (shouldReplaceHistory || IS_TEST) {\n newMessageLists = chatId ? [{ chatId, threadId, type }] : [];\n } else if (chatId) {\n const last = messageLists[messageLists.length - 1];\n if (!last || last.chatId !== chatId || last.threadId !== threadId || last.type !== type) {\n if (last && last.chatId === TMP_CHAT_ID) {\n newMessageLists = [...messageLists.slice(0, -1), { chatId, threadId, type }];\n } else {\n newMessageLists = [...messageLists, { chatId, threadId, type }];\n }\n }\n } else {\n newMessageLists = messageLists.slice(0, -1);\n }\n\n return {\n ...global,\n messages: {\n ...global.messages,\n messageLists: newMessageLists,\n },\n };\n}\n\nfunction replaceChatMessages(global: GlobalState, chatId: string, newById: Record): GlobalState {\n return updateMessageStore(global, chatId, {\n byId: newById,\n });\n}\n\nfunction updateThread(\n global: GlobalState, chatId: string, threadId: number, threadUpdate: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId];\n\n return updateMessageStore(global, chatId, {\n threadsById: {\n ...(current?.threadsById),\n [threadId]: {\n ...(current?.threadsById[threadId]),\n ...threadUpdate,\n },\n },\n });\n}\n\nfunction updateMessageStore(\n global: GlobalState, chatId: string, update: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId] || { byId: {}, threadsById: {} };\n\n return {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {\n ...global.messages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function replaceThreadParam(\n global: GlobalState, chatId: string, threadId: number, paramName: T, newValue: Thread[T] | undefined,\n) {\n return updateThread(global, chatId, threadId, { [paramName]: newValue });\n}\n\nexport function addMessages(\n global: GlobalState, messages: ApiMessage[],\n): GlobalState {\n const addedByChatId = messages.reduce((messagesByChatId, message: ApiMessage) => {\n if (!messagesByChatId[message.chatId]) {\n messagesByChatId[message.chatId] = {};\n }\n messagesByChatId[message.chatId][message.id] = message;\n\n return messagesByChatId;\n }, {} as Record>);\n\n Object.keys(addedByChatId).forEach((chatId) => {\n global = addChatMessagesById(global, chatId, addedByChatId[chatId]);\n });\n\n return global;\n}\n\nexport function addChatMessagesById(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n\n if (byId && Object.keys(newById).every((newId) => Boolean(byId[Number(newId)]))) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...newById,\n ...byId,\n });\n}\n\nexport function updateChatMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectChatMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function updateScheduledMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceScheduledMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function deleteChatMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n const deletedForwardedPosts = Object.values(pickTruthy(byId, messageIds)).filter(\n ({ forwardInfo }) => forwardInfo?.isLinkedChannelPost,\n );\n\n const threadIds = Object.keys(global.messages.byChatId[chatId].threadsById).map(Number);\n threadIds.forEach((threadId) => {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n\n let listedIds = selectListedIds(global, chatId, threadId);\n let outlyingIds = selectOutlyingIds(global, chatId, threadId);\n let viewportIds = selectViewportIds(global, chatId, threadId);\n let pinnedIds = selectPinnedIds(global, chatId);\n let newMessageCount = threadInfo?.messagesCount;\n\n messageIds.forEach((messageId) => {\n if (listedIds && listedIds.includes(messageId)) {\n listedIds = listedIds.filter((id) => id !== messageId);\n if (newMessageCount !== undefined) newMessageCount -= 1;\n }\n\n if (outlyingIds && outlyingIds.includes(messageId)) {\n outlyingIds = outlyingIds.filter((id) => id !== messageId);\n }\n\n if (viewportIds && viewportIds.includes(messageId)) {\n viewportIds = viewportIds.filter((id) => id !== messageId);\n }\n\n if (pinnedIds && pinnedIds.includes(messageId)) {\n pinnedIds = pinnedIds.filter((id) => id !== messageId);\n }\n });\n\n global = replaceThreadParam(global, chatId, threadId, 'listedIds', listedIds);\n global = replaceThreadParam(global, chatId, threadId, 'outlyingIds', outlyingIds);\n global = replaceThreadParam(global, chatId, threadId, 'viewportIds', viewportIds);\n global = replaceThreadParam(global, chatId, threadId, 'pinnedIds', pinnedIds);\n\n if (threadInfo && newMessageCount !== undefined) {\n global = replaceThreadParam(global, chatId, threadId, 'threadInfo', {\n ...threadInfo,\n messagesCount: newMessageCount,\n });\n }\n });\n\n if (deletedForwardedPosts.length) {\n const currentMessageList = selectCurrentMessageList(global);\n const canDeleteCurrentThread = currentMessageList && currentMessageList.chatId === chatId\n && currentMessageList.type === 'thread';\n const currentThreadId = currentMessageList?.threadId;\n\n deletedForwardedPosts.forEach((message) => {\n const { fromChatId, fromMessageId } = message.forwardInfo!;\n const originalPost = selectChatMessage(global, fromChatId!, fromMessageId!);\n\n if (canDeleteCurrentThread && currentThreadId === fromMessageId) {\n global = updateCurrentMessageList(global, chatId);\n }\n if (originalPost) {\n global = updateChatMessage(global, fromChatId!, fromMessageId!, { threadInfo: undefined });\n }\n });\n }\n\n global = replaceChatMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function deleteChatScheduledMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n\n let scheduledIds = selectScheduledIds(global, chatId);\n if (scheduledIds) {\n messageIds.forEach((messageId) => {\n if (scheduledIds!.includes(messageId)) {\n scheduledIds = scheduledIds!.filter((id) => id !== messageId);\n }\n });\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', scheduledIds);\n }\n\n global = replaceScheduledMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function updateListedIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const listedIds = selectListedIds(global, chatId, threadId);\n const newIds = listedIds?.length\n ? idsUpdate.filter((id) => !listedIds.includes(id))\n : idsUpdate;\n\n if (listedIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'listedIds', orderHistoryIds([\n ...(listedIds || []),\n ...newIds,\n ]));\n}\n\nexport function updateOutlyingIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const newIds = outlyingIds?.length\n ? idsUpdate.filter((id) => !outlyingIds.includes(id))\n : idsUpdate;\n\n if (outlyingIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'outlyingIds', orderHistoryIds([\n ...(outlyingIds || []),\n ...newIds,\n ]));\n}\n\nfunction orderHistoryIds(listedIds: number[]) {\n return listedIds.sort((a, b) => a - b);\n}\n\nexport function addViewportId(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newId: number,\n): GlobalState {\n const viewportIds = selectViewportIds(global, chatId, threadId) || [];\n if (viewportIds.includes(newId)) {\n return global;\n }\n\n const newIds = orderHistoryIds([\n ...(\n viewportIds.length < MESSAGE_LIST_VIEWPORT_LIMIT\n ? viewportIds\n : viewportIds.slice(-(MESSAGE_LIST_SLICE / 2))\n ),\n newId,\n ]);\n\n return replaceThreadParam(global, chatId, threadId, 'viewportIds', newIds);\n}\n\nexport function safeReplaceViewportIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newViewportIds: number[],\n): GlobalState {\n const currentIds = selectViewportIds(global, chatId, threadId) || [];\n const newIds = orderHistoryIds(newViewportIds);\n\n return replaceThreadParam(\n global,\n chatId,\n threadId,\n 'viewportIds',\n areSortedArraysEqual(currentIds, newIds) ? currentIds : newIds,\n );\n}\n\nexport function updateThreadInfo(\n global: GlobalState, chatId: string, threadId: number, update: Partial | undefined,\n): GlobalState {\n const newThreadInfo = {\n ...(selectThreadInfo(global, chatId, threadId) as ApiThreadInfo),\n ...update,\n };\n\n if (!newThreadInfo.threadId) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'threadInfo', newThreadInfo);\n}\n\nexport function updateThreadInfos(\n global: GlobalState, chatId: string, updates: Partial[],\n): GlobalState {\n updates.forEach((update) => {\n global = updateThreadInfo(global, update.chatId!, update.threadId!, update);\n });\n\n return global;\n}\n\nexport function replaceScheduledMessages(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n return updateScheduledMessages(global, chatId, {\n byId: newById,\n });\n}\n\nfunction updateScheduledMessages(\n global: GlobalState, chatId: string, update: Partial<{ byId: Record }>,\n): GlobalState {\n const current = global.scheduledMessages.byChatId[chatId] || { byId: {}, hash: 0 };\n\n return {\n ...global,\n scheduledMessages: {\n byChatId: {\n ...global.scheduledMessages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateFocusedMessage(\n global: GlobalState, chatId?: string, messageId?: number, noHighlight = false, isResizingContainer = false,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n chatId,\n messageId,\n noHighlight,\n isResizingContainer,\n },\n };\n}\n\nexport function updateSponsoredMessage(\n global: GlobalState, chatId: string, message: ApiSponsoredMessage,\n): GlobalState {\n return {\n ...global,\n messages: {\n ...global.messages,\n sponsoredByChatId: {\n ...global.messages.sponsoredByChatId,\n [chatId]: message,\n },\n },\n };\n}\n\nexport function updateFocusDirection(\n global: GlobalState, direction?: FocusDirection,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n direction,\n },\n };\n}\n\nexport function enterMessageSelectMode(\n global: GlobalState,\n chatId: string,\n messageId?: number | number[],\n): GlobalState {\n const messageIds = messageId ? Array.prototype.concat([], messageId) : [];\n return {\n ...global,\n selectedMessages: {\n chatId,\n messageIds,\n },\n };\n}\n\nexport function toggleMessageSelection(\n global: GlobalState,\n chatId: string,\n threadId: number,\n messageListType: MessageListType,\n messageId: number,\n groupedId?: string,\n childMessageIds?: number[],\n withShift = false,\n): GlobalState {\n const { selectedMessages: oldSelectedMessages } = global;\n if (groupedId) {\n childMessageIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n }\n const selectedMessageIds = childMessageIds || [messageId];\n if (!oldSelectedMessages) {\n return enterMessageSelectMode(global, chatId, selectedMessageIds);\n }\n\n const { messageIds } = oldSelectedMessages;\n\n let newMessageIds;\n const newSelectedMessageIds = selectedMessageIds.filter((id) => !messageIds.includes(id));\n if (newSelectedMessageIds && !newSelectedMessageIds.length) {\n newMessageIds = messageIds.filter((id) => !selectedMessageIds.includes(id));\n } else if (withShift && messageIds.length) {\n const viewportIds = selectCurrentMessageIds(global, chatId, threadId, messageListType)!;\n const prevIndex = viewportIds.indexOf(messageIds[messageIds.length - 1]);\n const currentIndex = viewportIds.indexOf(messageId);\n const from = Math.min(prevIndex, currentIndex);\n const to = Math.max(prevIndex, currentIndex);\n const slice = viewportIds.slice(from, to + 1);\n newMessageIds = unique([...messageIds, ...slice]);\n } else {\n newMessageIds = [...messageIds, ...newSelectedMessageIds];\n }\n\n if (!newMessageIds.length) {\n return exitMessageSelectMode(global);\n }\n\n return {\n ...global,\n selectedMessages: {\n ...oldSelectedMessages,\n messageIds: newMessageIds,\n },\n };\n}\n\nexport function exitMessageSelectMode(global: GlobalState): GlobalState {\n return {\n ...global,\n selectedMessages: undefined,\n };\n}\n\nexport function updateThreadUnreadFromForwardedMessage(\n global: GlobalState,\n originMessage: ApiMessage,\n chatId: string,\n lastMessageId: number,\n isDeleting?: boolean,\n) {\n const { channelPostId, fromChatId } = originMessage.forwardInfo || {};\n if (channelPostId && fromChatId) {\n const threadInfoOld = selectThreadInfo(global, chatId, channelPostId);\n if (threadInfoOld) {\n global = replaceThreadParam(global, chatId, channelPostId, 'threadInfo', {\n ...threadInfoOld,\n lastMessageId,\n messagesCount: threadInfoOld.messagesCount + (isDeleting ? -1 : 1),\n });\n }\n }\n return global;\n}\n","import { ApiChat, MAIN_THREAD_ID } from '../../api/types';\nimport { GlobalState } from '../../global/types';\n\nimport {\n getPrivateChatUserId, isChatChannel, isUserId, isHistoryClearMessage, isUserBot, isUserOnline,\n} from '../helpers';\nimport { selectUser } from './users';\nimport {\n ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, MEMBERS_LOAD_SLICE, SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\n\nexport function selectChat(global: GlobalState, chatId: string): ApiChat | undefined {\n return global.chats.byId[chatId];\n}\n\nexport function selectChatUser(global: GlobalState, chat: ApiChat) {\n const userId = getPrivateChatUserId(chat);\n if (!userId) {\n return false;\n }\n\n return selectUser(global, userId);\n}\n\nexport function selectIsChatWithSelf(global: GlobalState, chatId: string) {\n return chatId === global.currentUserId;\n}\n\nexport function selectIsChatWithBot(global: GlobalState, chat: ApiChat) {\n const user = selectChatUser(global, chat);\n return user && isUserBot(user);\n}\n\nexport function selectSupportChat(global: GlobalState) {\n return Object.values(global.chats.byId).find(({ isSupport }: ApiChat) => isSupport);\n}\n\nexport function selectChatOnlineCount(global: GlobalState, chat: ApiChat) {\n if (isUserId(chat.id) || isChatChannel(chat) || !chat.fullInfo) {\n return undefined;\n }\n\n if (!chat.fullInfo.members || chat.fullInfo.members.length === MEMBERS_LOAD_SLICE) {\n return chat.fullInfo.onlineCount;\n }\n\n return chat.fullInfo.members.reduce((onlineCount, { userId }) => {\n if (\n userId !== global.currentUserId\n && global.users.byId[userId]\n && isUserOnline(global.users.byId[userId], global.users.statusesById[userId])\n ) {\n return onlineCount + 1;\n }\n\n return onlineCount;\n }, 0);\n}\n\nexport function selectChatBot(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const userId = chat && getPrivateChatUserId(chat);\n const user = userId && selectUser(global, userId);\n if (!user || !isUserBot(user)) {\n return undefined;\n }\n\n return user;\n}\n\nexport function selectIsChatBotNotStarted(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const bot = selectChatBot(global, chatId);\n if (!chat || !bot) {\n return false;\n }\n\n if (chat.lastMessage && isHistoryClearMessage(chat.lastMessage)) {\n return true;\n }\n\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return false;\n }\n\n const { listedIds } = messageInfo.threadsById[MAIN_THREAD_ID] || {};\n return listedIds && !listedIds.length;\n}\n\nexport function selectAreActiveChatsLoaded(global: GlobalState): boolean {\n return Boolean(global.chats.listIds.active);\n}\n\nexport function selectIsChatListed(global: GlobalState, chatId: string, type?: 'active' | 'archived'): boolean {\n const { listIds } = global.chats;\n if (type) {\n const targetList = listIds[type];\n return Boolean(targetList && targetList.includes(chatId));\n }\n\n return Object.values(listIds).some((list) => list && list.includes(chatId));\n}\n\nexport function selectChatListType(global: GlobalState, chatId: string): 'active' | 'archived' | undefined {\n const chat = selectChat(global, chatId);\n if (!chat || !selectIsChatListed(global, chatId)) {\n return undefined;\n }\n\n return chat.folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n}\n\nexport function selectChatFolder(global: GlobalState, folderId: number) {\n return global.chatFolders.byId[folderId];\n}\n\nexport function selectTotalChatCount(global: GlobalState, listType: 'active' | 'archived'): number {\n const { totalCount } = global.chats;\n const allChatsCount = totalCount.all;\n const archivedChatsCount = totalCount.archived || 0;\n\n if (listType === 'archived') {\n return archivedChatsCount;\n }\n\n return allChatsCount ? allChatsCount - archivedChatsCount : 0;\n}\n\nexport function selectIsChatPinned(global: GlobalState, chatId: string, folderId = ALL_FOLDER_ID): boolean {\n const { active, archived } = global.chats.orderedPinnedIds;\n\n if (folderId === ALL_FOLDER_ID) {\n return Boolean(active?.includes(chatId));\n }\n\n if (folderId === ARCHIVED_FOLDER_ID) {\n return Boolean(archived?.includes(chatId));\n }\n\n const { byId: chatFoldersById } = global.chatFolders;\n\n const { pinnedChatIds } = chatFoldersById[folderId] || {};\n return Boolean(pinnedChatIds?.includes(chatId));\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectChatByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.chats.byId).find(\n (chat) => chat.username && chat.username.toLowerCase() === usernameLowered,\n );\n}\n\nexport function selectIsServiceChatReady(global: GlobalState) {\n return Boolean(selectChat(global, SERVICE_NOTIFICATIONS_USER_ID));\n}\n\nexport function selectSendAs(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n if (!chat) return undefined;\n\n const id = chat?.fullInfo?.sendAsId;\n if (!id) return undefined;\n\n return selectUser(global, id) || selectChat(global, id);\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiSticker } from '../../api/types';\n\nexport function selectIsStickerFavorite(global: GlobalState, sticker: ApiSticker) {\n const { stickers } = global.stickers.favorite;\n return stickers && stickers.some(({ id }) => id === sticker.id);\n}\n\nexport function selectCurrentStickerSearch(global: GlobalState) {\n return global.stickers.search;\n}\n\nexport function selectCurrentGifSearch(global: GlobalState) {\n return global.gifs.search;\n}\n\nexport function selectStickerSet(global: GlobalState, id: string) {\n return global.stickers.setsById[id];\n}\n\nexport function selectStickerSetByShortName(global: GlobalState, shortName: string) {\n return Object.values(global.stickers.setsById).find((l) => l.shortName.toLowerCase() === shortName.toLowerCase());\n}\n\nexport function selectStickersForEmoji(global: GlobalState, emoji: string) {\n const stickerSets = Object.values(global.stickers.setsById);\n let stickersForEmoji: ApiSticker[] = [];\n // Favorites\n global.stickers.favorite.stickers.forEach((sticker) => {\n if (sticker.emoji === emoji) stickersForEmoji.push(sticker);\n });\n\n // Added sets\n stickerSets.forEach(({ packs }) => {\n if (!packs) {\n return;\n }\n\n stickersForEmoji = stickersForEmoji.concat(packs[emoji] || [], packs[cleanEmoji(emoji)] || []);\n });\n return stickersForEmoji;\n}\n\nfunction cleanEmoji(emoji: string) {\n // Some emojis (❤️ for example) with a service symbol 'VARIATION SELECTOR-16' are not recognized as animated\n return emoji.replace('\\ufe0f', '');\n}\n\nexport function selectAnimatedEmoji(global: GlobalState, emoji: string) {\n const { animatedEmojis } = global;\n if (!animatedEmojis || !animatedEmojis.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojis.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiEffect(global: GlobalState, emoji: string) {\n const { animatedEmojiEffects } = global;\n if (!animatedEmojiEffects || !animatedEmojiEffects.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojiEffects.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiSound(global: GlobalState, emoji: string) {\n return global?.appConfig?.emojiSounds[cleanEmoji(emoji)];\n}\n\nexport function selectLocalAnimatedEmoji(global: GlobalState, emoji: string) {\n const cleanedEmoji = cleanEmoji(emoji);\n\n return cleanedEmoji === '🍑' ? 'Peach' : (cleanedEmoji === '🍆' ? 'Eggplant' : undefined);\n}\n\nexport function selectLocalAnimatedEmojiEffect(emoji: string) {\n return emoji === 'Eggplant' ? 'Cumshot' : undefined;\n}\n\nexport function selectLocalAnimatedEmojiEffectByName(name: string) {\n return name === 'Cumshot' ? '🍆' : undefined;\n}\n","import { GlobalState, MessageListType, Thread } from '../../global/types';\nimport {\n ApiChat,\n ApiMessage,\n ApiMessageOutgoingStatus,\n ApiUser,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { LOCAL_MESSAGE_ID_BASE, SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport {\n selectChat, selectIsChatWithBot, selectIsChatWithSelf,\n} from './chats';\nimport { selectIsUserOrChatContact, selectUser } from './users';\nimport {\n getSendingState,\n isChatChannel,\n isMessageLocal,\n isUserId,\n isForwardedMessage,\n getCanPostInChat,\n isUserRightBanned,\n getHasAdminRight,\n isChatBasicGroup,\n isCommonBoxChat,\n isServiceNotificationMessage,\n isOwnMessage,\n isActionMessage,\n isChatGroup,\n isChatSuperGroup,\n getMessageVideo,\n getMessageWebPageVideo,\n getMessagePhoto,\n getMessageAudio,\n getMessageVoice,\n getMessageDocument,\n getMessageWebPagePhoto,\n} from '../helpers';\nimport { findLast } from '../../util/iteratees';\nimport { selectIsStickerFavorite } from './symbols';\nimport { getServerTime } from '../../util/serverTime';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\n\nconst MESSAGE_EDIT_ALLOWED_TIME = 172800; // 48 hours\n\nexport function selectCurrentMessageList(global: GlobalState) {\n const { messageLists } = global.messages;\n\n if (messageLists.length) {\n return messageLists[messageLists.length - 1];\n }\n\n return undefined;\n}\n\nexport function selectCurrentChat(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n\n return chatId ? selectChat(global, chatId) : undefined;\n}\n\nexport function selectChatMessages(global: GlobalState, chatId: string) {\n return global.messages.byChatId[chatId]?.byId;\n}\n\nexport function selectScheduledMessages(global: GlobalState, chatId: string) {\n return global.scheduledMessages.byChatId[chatId]?.byId;\n}\n\nexport function selectThreadParam(\n global: GlobalState,\n chatId: string,\n threadId: number,\n key: K,\n) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const thread = messageInfo.threadsById[threadId];\n if (!thread) {\n return undefined;\n }\n\n return thread[key];\n}\n\nexport function selectListedIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'listedIds');\n}\n\nexport function selectOutlyingIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'outlyingIds');\n}\n\nexport function selectCurrentMessageIds(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n switch (messageListType) {\n case 'thread':\n return selectViewportIds(global, chatId, threadId);\n case 'pinned':\n return selectPinnedIds(global, chatId);\n case 'scheduled':\n return selectScheduledIds(global, chatId);\n }\n\n return undefined;\n}\n\nexport function selectViewportIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'viewportIds');\n}\n\nexport function selectPinnedIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'pinnedIds');\n}\n\nexport function selectScheduledIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds');\n}\n\nexport function selectScrollOffset(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'scrollOffset');\n}\n\nexport function selectReplyingToId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyingToId');\n}\n\nexport function selectEditingId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'editingId');\n}\n\nexport function selectEditingScheduledId(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'editingScheduledId');\n}\n\nexport function selectDraft(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'draft');\n}\n\nexport function selectNoWebPage(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'noWebPage');\n}\n\nexport function selectThreadInfo(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'threadInfo');\n}\n\nexport function selectFirstMessageId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'firstMessageId');\n}\n\nexport function selectReplyStack(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyStack');\n}\n\nexport function selectThreadOriginChat(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return selectChat(global, chatId);\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return selectChat(global, threadInfo.originChannelId || chatId);\n}\n\nexport function selectThreadTopMessageId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return undefined;\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return threadInfo.topMessageId;\n}\n\nexport function selectThreadByMessage(global: GlobalState, chatId: string, message: ApiMessage) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const { replyToMessageId, replyToTopMessageId } = message;\n if (!replyToMessageId && !replyToTopMessageId) {\n return undefined;\n }\n\n return Object.values(messageInfo.threadsById).find((thread) => {\n return thread.threadInfo && (\n (replyToMessageId && replyToMessageId === thread.threadInfo.topMessageId)\n || (replyToTopMessageId && replyToTopMessageId === thread.threadInfo.topMessageId)\n );\n });\n}\n\nexport function isMessageInCurrentMessageList(global: GlobalState, chatId: string, message: ApiMessage) {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return false;\n }\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message) || {};\n return (\n chatId === currentMessageList.chatId\n && (\n (currentMessageList.threadId === MAIN_THREAD_ID)\n || (threadInfo && currentMessageList.threadId === threadInfo.threadId)\n )\n );\n}\n\nexport function selectIsViewportNewest(global: GlobalState, chatId: string, threadId: number) {\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (!viewportIds || !viewportIds.length) {\n return true;\n }\n\n let lastMessageId: number;\n\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.lastMessage) {\n return true;\n }\n\n lastMessageId = chat.lastMessage.id;\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo || !threadInfo.lastMessageId) {\n return undefined;\n }\n\n lastMessageId = threadInfo.lastMessageId;\n }\n\n // Edge case: outgoing `lastMessage` is updated with a delay to optimize animation\n if (lastMessageId >= LOCAL_MESSAGE_ID_BASE && !selectChatMessage(global, chatId, lastMessageId)) {\n return true;\n }\n\n return viewportIds[viewportIds.length - 1] >= lastMessageId;\n}\n\nexport function selectChatMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectChatMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectScheduledMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectScheduledMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectEditingMessage(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n if (messageListType === 'scheduled') {\n const messageId = selectEditingScheduledId(global, chatId);\n return messageId ? selectScheduledMessage(global, chatId, messageId) : undefined;\n } else {\n const messageId = selectEditingId(global, chatId, threadId);\n return messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n }\n}\n\nexport function selectChatMessageByPollId(global: GlobalState, pollId: string) {\n let messageWithPoll: ApiMessage | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const chatMessages of Object.values(global.messages.byChatId)) {\n const { byId } = chatMessages;\n messageWithPoll = Object.values(byId).find((message) => {\n return message.content.poll && message.content.poll.id === pollId;\n });\n if (messageWithPoll) {\n break;\n }\n }\n\n return messageWithPoll;\n}\n\nexport function selectFocusedMessageId(global: GlobalState, chatId: string) {\n const { chatId: focusedChatId, messageId } = global.focusedMessage || {};\n\n return focusedChatId === chatId ? messageId : undefined;\n}\n\nexport function selectIsMessageFocused(global: GlobalState, message: ApiMessage) {\n const focusedId = selectFocusedMessageId(global, message.chatId);\n\n return focusedId ? focusedId === message.id || focusedId === message.previousLocalId : false;\n}\n\nexport function selectIsMessageUnread(global: GlobalState, message: ApiMessage) {\n const { lastReadOutboxMessageId } = selectChat(global, message.chatId) || {};\n return isMessageLocal(message) || !lastReadOutboxMessageId || lastReadOutboxMessageId < message.id;\n}\n\nexport function selectOutgoingStatus(\n global: GlobalState, message: ApiMessage, isScheduledList = false,\n): ApiMessageOutgoingStatus {\n if (!selectIsMessageUnread(global, message) && !isScheduledList) {\n return 'read';\n }\n\n return getSendingState(message);\n}\n\nexport function selectSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { senderId } = message;\n if (!senderId) {\n return undefined;\n }\n\n return isUserId(senderId) ? selectUser(global, senderId) : selectChat(global, senderId);\n}\n\nexport function selectForwardedSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { forwardInfo } = message;\n if (!forwardInfo) {\n return undefined;\n }\n\n if (forwardInfo.isChannelPost && forwardInfo.fromChatId) {\n return selectChat(global, forwardInfo.fromChatId);\n } else if (forwardInfo.senderUserId) {\n return selectUser(global, forwardInfo.senderUserId) || selectChat(global, forwardInfo.senderUserId);\n }\n\n return undefined;\n}\n\nexport function selectAllowedMessageActions(global: GlobalState, message: ApiMessage, threadId: number) {\n const chat = selectChat(global, message.chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n\n const isPrivate = isUserId(chat.id);\n const isChatWithSelf = selectIsChatWithSelf(global, message.chatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const isSuperGroup = isChatSuperGroup(chat);\n const isChannel = isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const isServiceNotification = isServiceNotificationMessage(message);\n const isOwn = isOwnMessage(message);\n const isAction = isActionMessage(message);\n const { content } = message;\n\n const canEditMessagesIndefinitely = isChatWithSelf\n || (isSuperGroup && getHasAdminRight(chat, 'pinMessages'))\n || (isChannel && getHasAdminRight(chat, 'editMessages'));\n const isMessageEditable = (\n (\n canEditMessagesIndefinitely\n || getServerTime(global.serverTimeOffset) - message.date < MESSAGE_EDIT_ALLOWED_TIME\n ) && !(\n content.sticker || content.contact || content.poll || content.action || content.audio\n || (content.video?.isRound)\n )\n && !isForwardedMessage(message)\n && !message.viaBotId\n );\n\n const canReply = !isLocal && !isServiceNotification && getCanPostInChat(chat, threadId);\n\n const hasPinPermission = isPrivate || (\n chat.isCreator\n || (!isChannel && !isUserRightBanned(chat, 'pinMessages'))\n || getHasAdminRight(chat, 'pinMessages')\n );\n\n let canPin = !isLocal && !isServiceNotification && !isAction && hasPinPermission;\n let canUnpin = false;\n\n const pinnedMessageIds = selectPinnedIds(global, chat.id);\n\n if (canPin) {\n canUnpin = Boolean(pinnedMessageIds && pinnedMessageIds.includes(message.id));\n canPin = !canUnpin;\n }\n\n const canDelete = !isLocal && !isServiceNotification && (\n isPrivate\n || isOwn\n || isBasicGroup\n || chat.isCreator\n || getHasAdminRight(chat, 'deleteMessages')\n );\n\n const canReport = !isPrivate && !isOwn;\n\n const canDeleteForAll = canDelete && (\n (isPrivate && !isChatWithSelf)\n || (isBasicGroup && (\n isOwn || getHasAdminRight(chat, 'deleteMessages') || chat.isCreator\n ))\n );\n\n const canEdit = !isLocal && !isAction && isMessageEditable && (\n isOwn\n || (isChannel && (chat.isCreator || getHasAdminRight(chat, 'editMessages')))\n );\n\n const canForward = !isLocal && !isAction;\n\n const hasSticker = Boolean(message.content.sticker);\n const hasFavoriteSticker = hasSticker && selectIsStickerFavorite(global, message.content.sticker!);\n const canFaveSticker = !isAction && hasSticker && !hasFavoriteSticker;\n const canUnfaveSticker = !isAction && hasFavoriteSticker;\n const canCopy = !isAction;\n const canCopyLink = !isAction && (isChannel || isSuperGroup);\n const canSelect = !isAction;\n\n const canDownload = Boolean(content.webPage?.document || content.webPage?.video || content.webPage?.photo\n || content.audio || content.voice || content.photo || content.video || content.document || content.sticker);\n\n const noOptions = [\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n ].every((ability) => !ability);\n\n return {\n noOptions,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n };\n}\n\n// This selector always returns a new object which can not be safely used in shallow-equal checks\nexport function selectCanDeleteSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return {};\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return {\n canDelete: messageActions.every((actions) => actions.canDelete),\n canDeleteForAll: messageActions.every((actions) => actions.canDeleteForAll),\n };\n}\n\nexport function selectCanReportSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.every((actions) => actions.canReport);\n}\n\nexport function selectCanDownloadSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.some((actions) => actions.canDownload);\n}\n\nexport function selectIsDownloading(global: GlobalState, message: ApiMessage) {\n const activeInChat = global.activeDownloads.byChatId[message.chatId];\n return activeInChat ? activeInChat.includes(message.id) : false;\n}\n\nexport function selectActiveDownloadIds(global: GlobalState, chatId: string) {\n return global.activeDownloads.byChatId[chatId] || MEMO_EMPTY_ARRAY;\n}\n\nexport function selectUploadProgress(global: GlobalState, message: ApiMessage) {\n return global.fileUploads.byMessageLocalId[message.previousLocalId || message.id]?.progress;\n}\n\nexport function selectRealLastReadId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n // `lastReadInboxMessageId` is empty for new chats\n if (!chat.lastReadInboxMessageId) {\n return undefined;\n }\n\n if (!chat.lastMessage) {\n return chat.lastReadInboxMessageId;\n }\n\n if (isMessageLocal(chat.lastMessage)) {\n return chat.lastMessage.id;\n }\n\n // Some previously read messages may be deleted\n return Math.min(chat.lastMessage.id, chat.lastReadInboxMessageId);\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n if (!threadInfo.lastReadInboxMessageId) {\n return threadInfo.topMessageId;\n }\n\n // Some previously read messages may be deleted\n return Math.min(threadInfo.lastReadInboxMessageId, threadInfo.lastMessageId || Infinity);\n }\n}\n\nexport function selectFirstUnreadId(global: GlobalState, chatId: string, threadId: number) {\n const chat = selectChat(global, chatId);\n\n if (threadId === MAIN_THREAD_ID) {\n if (!chat) {\n return undefined;\n }\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo\n || (threadInfo.lastMessageId !== undefined && threadInfo.lastMessageId === threadInfo.lastReadInboxMessageId)) {\n return undefined;\n }\n }\n\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const listedIds = selectListedIds(global, chatId, threadId);\n const byId = selectChatMessages(global, chatId);\n if (!byId || !(outlyingIds || listedIds)) {\n return undefined;\n }\n\n const lastReadId = selectRealLastReadId(global, chatId, threadId);\n if (!lastReadId && chat && chat.isNotJoined) {\n return undefined;\n }\n\n const lastReadServiceNotificationId = chatId === SERVICE_NOTIFICATIONS_USER_ID\n ? global.serviceNotifications.reduce((max, notification) => {\n return !notification.isUnread && notification.id > max ? notification.id : max;\n }, -1)\n : -1;\n\n function findAfterLastReadId(listIds: number[]) {\n return listIds.find((id) => {\n return (\n (!lastReadId || id > lastReadId)\n && byId[id]\n && (!byId[id].isOutgoing || byId[id].isFromScheduled)\n && id > lastReadServiceNotificationId\n );\n });\n }\n\n if (outlyingIds) {\n const found = findAfterLastReadId(outlyingIds);\n if (found) {\n return found;\n }\n }\n\n if (listedIds) {\n const found = findAfterLastReadId(listedIds);\n if (found) {\n return found;\n }\n }\n\n return undefined;\n}\n\nexport function selectIsPollResultsOpen(global: GlobalState) {\n const { pollResults } = global;\n return Boolean(pollResults.messageId);\n}\n\nexport function selectIsForwardModalOpen(global: GlobalState) {\n const { forwardMessages } = global;\n return Boolean(forwardMessages.isModalShown);\n}\n\nexport function selectCommonBoxChatId(global: GlobalState, messageId: number) {\n const fromLastMessage = Object.values(global.chats.byId).find((chat) => (\n isCommonBoxChat(chat) && chat.lastMessage && chat.lastMessage.id === messageId\n ));\n if (fromLastMessage) {\n return fromLastMessage.id;\n }\n\n const { byChatId } = global.messages;\n return Object.keys(byChatId).find((chatId) => {\n const chat = selectChat(global, chatId);\n return chat && isCommonBoxChat(chat) && byChatId[chat.id].byId[messageId];\n });\n}\n\nexport function selectIsInSelectMode(global: GlobalState) {\n const { selectedMessages } = global;\n\n return Boolean(selectedMessages);\n}\n\nexport function selectIsMessageSelected(global: GlobalState, messageId: number) {\n const { messageIds } = global.selectedMessages || {};\n if (!messageIds) {\n return false;\n }\n\n return messageIds.includes(messageId);\n}\n\nexport function selectForwardedMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.values(chatMessages)\n .filter((message) => message.groupedId === groupedId && message.forwardInfo)\n .map(({ forwardInfo }) => forwardInfo!.fromMessageId);\n}\n\nexport function selectMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.keys(chatMessages)\n .map(Number)\n .filter((id) => chatMessages[id].groupedId === groupedId);\n}\n\nexport function selectIsDocumentGroupSelected(global: GlobalState, chatId: string, groupedId: string) {\n const { messageIds: selectedIds } = global.selectedMessages || {};\n if (!selectedIds) {\n return false;\n }\n\n const groupIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n return groupIds && groupIds.every((id) => selectedIds.includes(id));\n}\n\nexport function selectSelectedMessagesCount(global: GlobalState) {\n const { messageIds } = global.selectedMessages || {};\n\n return messageIds ? messageIds.length : 0;\n}\n\nexport function selectNewestMessageWithBotKeyboardButtons(\n global: GlobalState, chatId: string,\n): ApiMessage | undefined {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (!selectIsChatWithBot(global, chat)) {\n return undefined;\n }\n\n const chatMessages = selectChatMessages(global, chatId);\n const viewportIds = selectViewportIds(global, chatId, MAIN_THREAD_ID);\n if (!chatMessages || !viewportIds) {\n return undefined;\n }\n\n const messageId = findLast(viewportIds, (id) => {\n return !chatMessages[id].isOutgoing && Boolean(chatMessages[id].keyboardButtons);\n });\n\n const replyHideMessageId = findLast(viewportIds, (id) => {\n return Boolean(chatMessages[id].shouldHideKeyboardButtons);\n });\n\n if (messageId && replyHideMessageId && replyHideMessageId > messageId) {\n return undefined;\n }\n\n return messageId ? chatMessages[messageId] : undefined;\n}\n\nexport function selectCanAutoLoadMedia(global: GlobalState, message: ApiMessage) {\n const chat = selectChat(global, message.chatId);\n if (!chat) {\n return undefined;\n }\n\n const sender = selectSender(global, message);\n\n const isPhoto = Boolean(getMessagePhoto(message) || getMessageWebPagePhoto(message));\n const isVideo = Boolean(getMessageVideo(message) || getMessageWebPageVideo(message));\n const isFile = Boolean(getMessageAudio(message) || getMessageVoice(message) || getMessageDocument(message));\n\n const {\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n } = global.settings.byKey;\n\n if (isPhoto) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadPhotoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadPhotoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadPhotoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadPhotoInChannels,\n });\n }\n\n if (isVideo) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadVideoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadVideoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadVideoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadVideoInChannels,\n });\n }\n\n if (isFile) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadFileFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadFileInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadFileInGroups,\n canAutoLoadMediaInChannels: canAutoLoadFileInChannels,\n });\n }\n\n return true;\n}\n\nfunction canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts,\n canAutoLoadMediaInPrivateChats,\n canAutoLoadMediaInGroups,\n canAutoLoadMediaInChannels,\n}: {\n global: GlobalState;\n chat: ApiChat;\n canAutoLoadMediaFromContacts: boolean;\n canAutoLoadMediaInPrivateChats: boolean;\n canAutoLoadMediaInGroups: boolean;\n canAutoLoadMediaInChannels: boolean;\n sender?: ApiChat | ApiUser;\n}) {\n const isMediaFromContact = Boolean(sender && (\n sender.id === global.currentUserId || selectIsUserOrChatContact(global, sender)\n ));\n\n return Boolean(\n (isMediaFromContact && canAutoLoadMediaFromContacts)\n || (!isMediaFromContact && canAutoLoadMediaInPrivateChats && isUserId(chat.id))\n || (canAutoLoadMediaInGroups && isChatGroup(chat))\n || (canAutoLoadMediaInChannels && isChatChannel(chat)),\n );\n}\n\nexport function selectCanAutoPlayMedia(global: GlobalState, message: ApiMessage) {\n const video = getMessageVideo(message) || getMessageWebPageVideo(message);\n if (!video) {\n return undefined;\n }\n\n const {\n canAutoPlayVideos,\n canAutoPlayGifs,\n } = global.settings.byKey;\n\n const asGif = video.isGif || video.isRound;\n\n return (canAutoPlayVideos && !asGif) || (canAutoPlayGifs && asGif);\n}\n\nexport function selectShouldLoopStickers(global: GlobalState) {\n return global.settings.byKey.shouldLoopStickers;\n}\n\nexport function selectLastServiceNotification(global: GlobalState) {\n const { serviceNotifications } = global;\n const maxId = Math.max(...serviceNotifications.map(({ id }) => id));\n\n return serviceNotifications.find(({ id }) => id === maxId);\n}\n\nexport function selectIsMessageProtected(global: GlobalState, message?: ApiMessage) {\n return message ? message.isProtected || selectChat(global, message.chatId)?.isProtected : false;\n}\n\nexport function selectHasProtectedMessage(global: GlobalState, chatId: string, messageIds?: number[]) {\n if (selectChat(global, chatId)?.isProtected) {\n return true;\n }\n\n if (!messageIds) {\n return false;\n }\n\n const messages = selectChatMessages(global, chatId);\n\n return messageIds.some((messageId) => messages[messageId]?.isProtected);\n}\n\nexport function selectSponsoredMessage(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const message = chat && isChatChannel(chat) ? global.messages.sponsoredByChatId[chatId] : undefined;\n\n return message && message.expiresAt >= Math.round(Date.now() / 1000) ? message : undefined;\n}\n\nexport function selectDefaultReaction(global: GlobalState, chatId: string) {\n if (chatId === SERVICE_NOTIFICATIONS_USER_ID) return undefined;\n\n const isPrivate = isUserId(chatId);\n const defaultReaction = global.appConfig?.defaultReaction;\n const { availableReactions } = global;\n if (!defaultReaction || !availableReactions?.some(\n (l) => l.reaction === defaultReaction && !l.isInactive,\n )) {\n return undefined;\n }\n\n if (isPrivate) {\n return defaultReaction;\n }\n\n const enabledReactions = selectChat(global, chatId)?.fullInfo?.enabledReactions;\n if (!enabledReactions?.includes(defaultReaction)) {\n return undefined;\n }\n\n return defaultReaction;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectVisibleUsers(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const messageIds = selectThreadParam(global, chatId, threadId, 'viewportIds');\n if (!messageIds) {\n return undefined;\n }\n\n return messageIds.map((messageId) => {\n const { senderId } = selectChatMessage(global, chatId, messageId) || {};\n return senderId ? selectUser(global, senderId) : undefined;\n }).filter(Boolean);\n}\n","import { GlobalState } from '../../global/types';\nimport { selectCurrentMessageList } from './messages';\nimport { buildChatThreadKey } from '../helpers';\n\nexport function selectCurrentTextSearch(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const currentSearch = global.localTextSearch.byChatThreadKey[chatThreadKey];\n if (!currentSearch || !currentSearch.isActive) {\n return undefined;\n }\n\n return currentSearch;\n}\n\nexport function selectCurrentMediaSearch(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return undefined;\n }\n\n return global.localMediaSearch.byChatId[chatId];\n}\n","import { GlobalState } from '../../global/types';\n\nimport { selectCurrentMessageList } from './messages';\nimport { selectChat } from './chats';\nimport { isChatGroup, isUserId } from '../helpers';\n\nexport function selectManagement(global: GlobalState, chatId: string) {\n return global.management.byChatId[chatId];\n}\n\nexport function selectCurrentManagement(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const currentManagement = global.management.byChatId[chatId];\n if (!currentManagement || !currentManagement.isActive) {\n return undefined;\n }\n\n return currentManagement;\n}\n\nexport function selectCurrentManagementType(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n if (isUserId(chatId)) {\n return 'user';\n }\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (isChatGroup(chat)) {\n return 'group';\n }\n\n return 'channel';\n}\n","import { GlobalState } from '../../global/types';\nimport { NewChatMembersProgress, RightColumnContent } from '../../types';\n\nimport { getSystemTheme, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { selectCurrentMessageList, selectIsPollResultsOpen } from './messages';\nimport { selectCurrentTextSearch } from './localSearch';\nimport { selectCurrentGifSearch, selectCurrentStickerSearch } from './symbols';\nimport { selectCurrentManagement } from './management';\n\nexport function selectIsMediaViewerOpen(global: GlobalState) {\n const { mediaViewer } = global;\n return Boolean(mediaViewer.messageId || mediaViewer.avatarOwnerId);\n}\n\nexport function selectRightColumnContentKey(global: GlobalState) {\n return selectIsPollResultsOpen(global) ? (\n RightColumnContent.PollResults\n ) : !IS_SINGLE_COLUMN_LAYOUT && selectCurrentTextSearch(global) ? (\n RightColumnContent.Search\n ) : selectCurrentManagement(global) ? (\n RightColumnContent.Management\n ) : selectCurrentStickerSearch(global).query !== undefined ? (\n RightColumnContent.StickerSearch\n ) : selectCurrentGifSearch(global).query !== undefined ? (\n RightColumnContent.GifSearch\n ) : global.newChatMembersProgress !== NewChatMembersProgress.Closed ? (\n RightColumnContent.AddingMembers\n ) : global.isChatInfoShown && selectCurrentMessageList(global) ? (\n RightColumnContent.ChatInfo\n ) : undefined;\n}\n\nexport function selectIsRightColumnShown(global: GlobalState) {\n return selectRightColumnContentKey(global) !== undefined;\n}\n\nexport function selectTheme(global: GlobalState) {\n const { theme, shouldUseSystemTheme } = global.settings.byKey;\n\n return shouldUseSystemTheme ? getSystemTheme() : theme;\n}\n","import { GlobalState } from '../../global/types';\n\nexport function selectCurrentGlobalSearchQuery(global: GlobalState) {\n return global.globalSearch.query;\n}\n","import { GlobalState } from '../../global/types';\n\nexport function selectPaymentChatId(global: GlobalState) {\n return global.payment.chatId;\n}\n\nexport function selectPaymentMessageId(global: GlobalState) {\n return global.payment.messageId;\n}\n\nexport function selectPaymentFormId(global: GlobalState) {\n return global.payment.formId;\n}\n\nexport function selectPaymentRequestId(global: GlobalState) {\n return global.payment.requestId;\n}\n\nexport function selectProviderPublishableKey(global: GlobalState) {\n return global.payment.nativeParams ? global.payment.nativeParams.publishableKey : undefined;\n}\n\nexport function selectStripeCredentials(global: GlobalState) {\n return global.payment.stripeCredentials;\n}\n","import { GlobalState } from '../../global/types';\n\nexport function selectNotifySettings(global: GlobalState) {\n return global.settings.byKey;\n}\n\nexport function selectNotifyExceptions(global: GlobalState) {\n return global.settings.notifyExceptions;\n}\n","import { GlobalState } from '../../global/types';\nimport { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nexport function selectUser(global: GlobalState, userId: string): ApiUser | undefined {\n return global.users.byId[userId];\n}\n\nexport function selectUserStatus(global: GlobalState, userId: string): ApiUserStatus | undefined {\n return global.users.statusesById[userId];\n}\n\nexport function selectIsUserBlocked(global: GlobalState, userId: string) {\n const user = selectUser(global, userId);\n\n return user?.fullInfo?.isBlocked;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectUserByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.users.byId).find(\n (user) => user.username.toLowerCase() === usernameLowered,\n );\n}\n\nexport function selectIsUserOrChatContact(global: GlobalState, userOrChat: ApiUser | ApiChat) {\n return global.contactList && global.contactList.userIds.includes(userOrChat.id);\n}\n","import {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm,\n ApiChatInviteImporter,\n ApiExportedInvite,\n ApiLanguage, ApiMessage, ApiShippingAddress, ApiStickerSet,\n} from '../api/types';\n\nexport enum LoadMoreDirection {\n Backwards,\n Forwards,\n Around,\n}\n\nexport enum FocusDirection {\n Up,\n Down,\n Static,\n}\n\nexport interface IAlbum {\n albumId: string;\n messages: ApiMessage[];\n mainMessage: ApiMessage;\n}\n\nexport type ThemeKey = 'light' | 'dark';\n\nexport interface IThemeSettings {\n background?: string;\n backgroundColor?: string;\n patternColor?: string;\n isBlurred?: boolean;\n}\n\nexport type NotifySettings = {\n hasPrivateChatsNotifications?: boolean;\n hasPrivateChatsMessagePreview?: boolean;\n hasGroupNotifications?: boolean;\n hasGroupMessagePreview?: boolean;\n hasBroadcastNotifications?: boolean;\n hasBroadcastMessagePreview?: boolean;\n hasContactJoinedNotifications?: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nexport type LangCode = (\n 'en' | 'ar' | 'be' | 'ca' | 'nl' | 'fr' | 'de' | 'id' | 'it' | 'ko' | 'ms' | 'fa' | 'pl' | 'pt-br' | 'ru' | 'es'\n | 'tr' | 'uk' | 'uz'\n);\n\nexport type TimeFormat = '24h' | '12h';\n\nexport interface ISettings extends NotifySettings, Record {\n theme: ThemeKey;\n shouldUseSystemTheme: boolean;\n messageTextSize: number;\n animationLevel: 0 | 1 | 2;\n messageSendKeyCombo: 'enter' | 'ctrl-enter';\n canAutoLoadPhotoFromContacts: boolean;\n canAutoLoadPhotoInPrivateChats: boolean;\n canAutoLoadPhotoInGroups: boolean;\n canAutoLoadPhotoInChannels: boolean;\n canAutoLoadVideoFromContacts: boolean;\n canAutoLoadVideoInPrivateChats: boolean;\n canAutoLoadVideoInGroups: boolean;\n canAutoLoadVideoInChannels: boolean;\n canAutoLoadFileFromContacts: boolean;\n canAutoLoadFileInPrivateChats: boolean;\n canAutoLoadFileInGroups: boolean;\n canAutoLoadFileInChannels: boolean;\n autoLoadFileMaxSizeMb: number;\n canAutoPlayGifs: boolean;\n canAutoPlayVideos: boolean;\n shouldSuggestStickers: boolean;\n shouldLoopStickers: boolean;\n hasPassword?: boolean;\n languages?: ApiLanguage[];\n language: LangCode;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n timeFormat: TimeFormat;\n wasTimeFormatSetManually: boolean;\n isConnectionStatusMinimized: boolean;\n}\n\nexport interface ApiPrivacySettings {\n visibility: PrivacyVisibility;\n allowUserIds: string[];\n allowChatIds: string[];\n blockUserIds: string[];\n blockChatIds: string[];\n}\n\nexport interface InputPrivacyContact {\n id: string;\n accessHash?: string;\n}\n\nexport interface InputPrivacyRules {\n visibility: PrivacyVisibility;\n allowedUsers?: InputPrivacyContact[];\n allowedChats?: InputPrivacyContact[];\n blockedUsers?: InputPrivacyContact[];\n blockedChats?: InputPrivacyContact[];\n}\n\nexport type IAnchorPosition = {\n x: number;\n y: number;\n};\n\nexport interface ShippingOption {\n id: string;\n title: string;\n amount: number;\n prices: Price[];\n}\n\nexport interface Price {\n label: string;\n amount: number;\n}\n\nexport interface Invoice {\n currency?: string;\n emailRequested?: boolean;\n emailToProvider?: boolean;\n flexible?: boolean;\n nameRequested?: boolean;\n phoneRequested?: boolean;\n phoneToProvider?: boolean;\n prices?: Price[];\n shippingAddressRequested?: boolean;\n test?: boolean;\n}\n\nexport interface Receipt {\n currency: string;\n prices: Price[];\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n totalAmount: number;\n credentialsTitle: string;\n shippingPrices?: Price[];\n shippingMethod?: string;\n photoUrl?: string;\n text?: string;\n title?: string;\n}\n\nexport enum SettingsScreens {\n Main,\n EditProfile,\n Notifications,\n DataStorage,\n Language,\n General,\n GeneralChatBackground,\n GeneralChatBackgroundColor,\n Privacy,\n PrivacyPhoneNumber,\n PrivacyLastSeen,\n PrivacyProfilePhoto,\n PrivacyForwarding,\n PrivacyGroupChats,\n PrivacyPhoneNumberAllowedContacts,\n PrivacyPhoneNumberDeniedContacts,\n PrivacyLastSeenAllowedContacts,\n PrivacyLastSeenDeniedContacts,\n PrivacyProfilePhotoAllowedContacts,\n PrivacyProfilePhotoDeniedContacts,\n PrivacyForwardingAllowedContacts,\n PrivacyForwardingDeniedContacts,\n PrivacyGroupChatsAllowedContacts,\n PrivacyGroupChatsDeniedContacts,\n PrivacyActiveSessions,\n PrivacyBlockedUsers,\n Folders,\n FoldersCreateFolder,\n FoldersEditFolder,\n FoldersEditFolderFromChatList,\n FoldersIncludedChats,\n FoldersIncludedChatsFromChatList,\n FoldersExcludedChats,\n FoldersExcludedChatsFromChatList,\n TwoFaDisabled,\n TwoFaNewPassword,\n TwoFaNewPasswordConfirm,\n TwoFaNewPasswordHint,\n TwoFaNewPasswordEmail,\n TwoFaNewPasswordEmailCode,\n TwoFaEnabled,\n TwoFaChangePasswordCurrent,\n TwoFaChangePasswordNew,\n TwoFaChangePasswordConfirm,\n TwoFaChangePasswordHint,\n TwoFaTurnOff,\n TwoFaRecoveryEmailCurrentPassword,\n TwoFaRecoveryEmail,\n TwoFaRecoveryEmailCode,\n TwoFaCongratulations,\n QuickReaction,\n}\n\nexport type StickerSetOrRecent = Pick;\n\nexport enum LeftColumnContent {\n ChatList,\n GlobalSearch,\n Settings,\n Contacts,\n Archived,\n NewChannelStep1,\n NewChannelStep2,\n NewGroupStep1,\n NewGroupStep2,\n}\n\nexport enum GlobalSearchContent {\n ChatList,\n Media,\n Links,\n Files,\n Music,\n Voice,\n}\n\nexport enum RightColumnContent {\n ChatInfo,\n Search,\n Management,\n StickerSearch,\n GifSearch,\n PollResults,\n AddingMembers,\n}\n\nexport enum MediaViewerOrigin {\n Inline,\n ScheduledInline,\n SharedMedia,\n ProfileAvatar,\n SettingsAvatar,\n MiddleHeaderAvatar,\n Album,\n ScheduledAlbum,\n SearchResult,\n}\n\nexport enum AudioOrigin {\n Inline,\n SharedMedia,\n Search,\n}\n\nexport enum ChatCreationProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ProfileEditProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ManagementProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport interface ManagementState {\n isActive: boolean;\n nextScreen?: ManagementScreens;\n isUsernameAvailable?: boolean;\n error?: string;\n invites?: ApiExportedInvite[];\n revokedInvites?: ApiExportedInvite[];\n editingInvite?: ApiExportedInvite;\n inviteInfo?: {\n invite: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n };\n}\n\nexport enum NewChatMembersProgress {\n Closed,\n InProgress,\n Loading,\n}\n\nexport type ProfileTabType = 'members' | 'commonChats' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type SharedMediaType = 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type ApiPrivacyKey = 'phoneNumber' | 'lastSeen' | 'profilePhoto' | 'forwards' | 'chatInvite';\nexport type PrivacyVisibility = 'everybody' | 'contacts' | 'nonContacts' | 'nobody';\n\nexport enum ProfileState {\n Profile,\n SharedMedia,\n MemberList,\n}\n\nexport enum PaymentStep {\n ShippingInfo,\n Shipping,\n PaymentInfo,\n Checkout,\n}\n\nexport const UPLOADING_WALLPAPER_SLUG = 'UPLOADING_WALLPAPER_SLUG';\n\nexport enum ManagementScreens {\n Initial,\n ChatPrivacyType,\n Discussion,\n ChannelSubscribers,\n GroupType,\n GroupPermissions,\n GroupRemovedUsers,\n GroupUserPermissionsCreate,\n GroupUserPermissions,\n ChatAdministrators,\n GroupRecentActions,\n ChatAdminRights,\n ChatNewAdminRights,\n GroupMembers,\n GroupAddAdmins,\n Invites,\n EditInvite,\n Reactions,\n InviteInfo,\n JoinRequests,\n}\n\nexport type ManagementType = 'user' | 'group' | 'channel';\n\nexport type NotifyException = {\n isMuted: boolean;\n isSilent?: boolean;\n shouldShowPreviews?: boolean;\n};\n\nexport type EmojiKeywords = {\n isLoading?: boolean;\n version: number;\n keywords: Record;\n};\n\nexport type InlineBotSettings = {\n id: string;\n help?: string;\n query?: string;\n offset?: string;\n canLoadMore?: boolean;\n results?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n isGallery?: boolean;\n switchPm?: ApiBotInlineSwitchPm;\n};\n","import { fastRaf } from './schedulers';\n\ninterface AnimationInstance {\n isCancelled: boolean;\n}\n\nlet currentInstance: AnimationInstance | undefined;\n\nexport function animateSingle(tick: Function, instance?: AnimationInstance) {\n if (!instance) {\n if (currentInstance && !currentInstance.isCancelled) {\n currentInstance.isCancelled = true;\n }\n\n instance = { isCancelled: false };\n currentInstance = instance;\n }\n\n if (!instance!.isCancelled && tick()) {\n fastRaf(() => {\n animateSingle(tick, instance);\n });\n }\n}\n\nexport function animate(tick: Function) {\n if (tick()) {\n fastRaf(() => {\n animate(tick);\n });\n }\n}\n\nexport type TimingFn = (t: number) => number;\n\nexport type AnimateNumberProps = {\n to: number | number[];\n from: number | number[];\n duration: number;\n onUpdate: (value: any) => void;\n timing?: TimingFn;\n onEnd?: () => void;\n};\n\nexport const timingFunctions = {\n linear: (t: number) => t,\n easeIn: (t: number) => t ** 1.675,\n easeOut: (t: number) => 1 - (1 - t ** 1.675),\n easeInOut: (t: number) => 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1),\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => (--t) * t * t + 1,\n easeInOutCubic: (t: number) => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - (--t) * t * t * t,\n easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t),\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + (--t) * t * t * t * t,\n easeInOutQuint: (t: number) => (t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t),\n};\n\nexport function animateNumber({\n timing = timingFunctions.linear,\n onUpdate,\n duration,\n onEnd,\n from,\n to,\n}: AnimateNumberProps) {\n const t0 = Date.now();\n let canceled = false;\n\n animate(() => {\n if (canceled) return false;\n const t1 = Date.now();\n let t = (t1 - t0) / duration;\n if (t > 1) t = 1;\n const progress = timing(t);\n if (typeof from === 'number' && typeof to === 'number') {\n onUpdate(from + ((to - from) * progress));\n } else if (Array.isArray(from) && Array.isArray(to)) {\n const result = from.map((f, i) => f + ((to[i] - f) * progress));\n onUpdate(result);\n }\n if (t === 1 && onEnd) onEnd();\n return t < 1;\n });\n\n return () => {\n canceled = true;\n if (onEnd) onEnd();\n };\n}\n","import { DEBUG } from '../config';\n\nexport function updateAppBadge(unreadCount: number) {\n if (typeof window.navigator.setAppBadge !== 'function') {\n return;\n }\n\n window.navigator.setAppBadge(unreadCount).catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n });\n}\n","export default function arePropsShallowEqual(currentProps: AnyLiteral, newProps: AnyLiteral) {\n if (currentProps === newProps) {\n return true;\n }\n\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return false;\n }\n\n if (currentKeysLength === 0) {\n return true;\n }\n\n for (let i = 0; i < currentKeysLength; i++) {\n const prop = currentKeys[i];\n if (currentProps[prop] !== newProps[prop]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getUnequalProps(currentProps: AnyLiteral, newProps: AnyLiteral) {\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return ['%LENGTH%'];\n }\n\n return currentKeys.reduce((res, prop) => {\n if (currentProps[prop] !== newProps[prop]) {\n res.push(`${prop}: ${currentProps[prop]} => ${newProps[prop]}`);\n }\n\n return res;\n }, [] as string[]);\n}\n","type Parts = (string | false | undefined)[];\ntype PartsWithGlobals = (string | false | undefined | string[])[];\n\nexport default function buildClassName(...parts: Parts) {\n return parts.filter(Boolean).join(' ');\n}\n\nexport function createClassNameBuilder(componentName: string) {\n return (elementName: string, ...modifiers: PartsWithGlobals) => {\n const baseName = elementName === '&' ? componentName : `${componentName}__${elementName}`;\n\n return modifiers.reduce((acc, modifier) => {\n if (modifier) {\n // A bit hacky way to pass global class names\n if (Array.isArray(modifier)) {\n acc.push(...modifier);\n } else {\n acc.push(`${baseName}--${modifier}`);\n }\n }\n\n return acc;\n }, [baseName]).join(' ');\n };\n}\n","// eslint-disable-next-line no-restricted-globals\nconst cacheApi = self.caches;\n\nexport enum Type {\n Text,\n Blob,\n Json,\n}\n\nexport async function fetch(\n cacheName: string, key: string, type: Type, isHtmlAllowed = false,\n) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const cache = await cacheApi.open(cacheName);\n const response = await cache.match(request);\n if (!response) {\n return undefined;\n }\n\n const contentType = response.headers.get('Content-Type');\n\n switch (type) {\n case Type.Text:\n return await response.text();\n case Type.Blob: {\n // Ignore deprecated data-uri avatars\n if (key.startsWith('avatar') && contentType && contentType.startsWith('text')) {\n return undefined;\n }\n\n const blob = await response.blob();\n const shouldRecreate = !blob.type || (!isHtmlAllowed && blob.type.includes('html'));\n // iOS Safari fails to preserve `type` in cache\n let resolvedType = blob.type || contentType;\n\n if (!(shouldRecreate && resolvedType)) {\n return blob;\n }\n\n // Prevent HTML-in-video attacks (for files that were cached before fix)\n if (!isHtmlAllowed) {\n resolvedType = resolvedType.replace(/html/gi, '');\n }\n\n return new Blob([blob], { type: resolvedType });\n }\n case Type.Json:\n return await response.json();\n default:\n return undefined;\n }\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function save(cacheName: string, key: string, data: AnyLiteral | Blob | string) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n const cacheData = typeof data === 'string' || data instanceof Blob ? data : JSON.stringify(data);\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const response = new Response(cacheData);\n const cache = await cacheApi.open(cacheName);\n return await cache.put(request, response);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function clear(cacheName: string) {\n try {\n if (!cacheApi) {\n return undefined;\n }\n\n return await cacheApi.delete(cacheName);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n","export function createCallbackManager() {\n const callbacks: AnyToVoidFunction[] = [];\n\n function addCallback(cb: AnyToVoidFunction) {\n callbacks.push(cb);\n\n return () => {\n removeCallback(cb);\n };\n }\n\n function removeCallback(cb: AnyToVoidFunction) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n function runCallbacks(...args: any[]) {\n callbacks.forEach((callback) => {\n callback(...args);\n });\n }\n\n function hasCallbacks() {\n return Boolean(callbacks.length);\n }\n\n return {\n runCallbacks,\n addCallback,\n removeCallback,\n hasCallbacks,\n };\n}\n\nexport type CallbackManager = ReturnType;\n","import captureKeyboardListener from './captureKeyboardListeners';\n\ntype IHandlerFunction = () => void;\n\nexport default function captureEscKeyListener(handler: IHandlerFunction) {\n return captureKeyboardListener({ onEsc: handler });\n}\n","type HandlerName = 'onEnter' | 'onBackspace' | 'onDelete' | 'onEsc' | 'onUp' | 'onDown' | 'onLeft' | 'onRight'\n| 'onTab';\ntype Handler = (e: KeyboardEvent) => void;\ntype CaptureOptions = Partial>;\n\nconst keyToHandlerName: Record = {\n Enter: 'onEnter',\n Backspace: 'onBackspace',\n Delete: 'onDelete',\n Esc: 'onEsc',\n Escape: 'onEsc',\n ArrowUp: 'onUp',\n ArrowDown: 'onDown',\n ArrowLeft: 'onLeft',\n ArrowRight: 'onRight',\n Tab: 'onTab',\n};\n\nconst handlers: Record = {\n onEnter: [],\n onDelete: [],\n onBackspace: [],\n onEsc: [],\n onUp: [],\n onDown: [],\n onLeft: [],\n onRight: [],\n onTab: [],\n};\n\nexport default function captureKeyboardListeners(options: CaptureOptions) {\n if (!hasActiveHandlers()) {\n document.addEventListener('keydown', handleKeyDown, true);\n }\n\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n if (!handler) {\n return;\n }\n\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n currentEventHandlers.push(handler);\n }\n });\n\n return () => {\n releaseKeyboardListener(options);\n };\n}\n\nfunction hasActiveHandlers() {\n return Object.values(handlers).some((keyHandlers) => Boolean(keyHandlers.length));\n}\n\nfunction handleKeyDown(e: KeyboardEvent) {\n const handlerName = keyToHandlerName[e.key];\n if (!handlerName) {\n return;\n }\n\n const { length } = handlers[handlerName];\n if (!length) {\n return;\n }\n e.stopPropagation();\n\n const handler = handlers[handlerName][length - 1];\n handler!(e);\n}\n\nfunction releaseKeyboardListener(options: CaptureOptions) {\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n const index = currentEventHandlers.findIndex((cb) => cb === handler);\n if (index !== -1) {\n currentEventHandlers.splice(index, 1);\n }\n }\n });\n\n if (!hasActiveHandlers()) {\n document.removeEventListener('keydown', handleKeyDown, false);\n }\n}\n","import { LangFn } from '../hooks/useLang';\n\nconst WEEKDAYS_FULL = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MONTHS_FULL = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nconst MONTHS_FULL_LOWERCASE = MONTHS_FULL.map((month) => month.toLowerCase());\nconst MIN_SEARCH_YEAR = 2015;\nconst MAX_DAY_IN_MONTH = 31;\nconst MAX_MONTH_IN_YEAR = 12;\nexport const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;\n\nexport function isToday(date: Date) {\n return getDayStart(new Date()) === getDayStart(date);\n}\n\nexport function getDayStart(datetime: number | Date) {\n const date = new Date(datetime);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\nexport function getDayStartAt(datetime: number | Date) {\n return getDayStart(datetime).getTime();\n}\n\nexport function toYearMonth(timestamp: number) {\n const date = new Date(timestamp * 1000);\n return `${date.getFullYear()}-${date.getMonth()}`;\n}\n\nfunction toIsoString(date: Date) {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n}\n\n// @optimization `toLocaleTimeString` is avoided because of bad performance\nexport function formatTime(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const timeFormat = lang.timeFormat || '24h';\n\n let hours = date.getHours();\n let marker = '';\n if (timeFormat === '12h') {\n marker = hours >= 12 ? ' PM' : ' AM';\n hours = hours > 12 ? hours % 12 : hours;\n }\n\n return `${String(hours).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}${marker}`;\n}\n\nexport function formatPastTimeShort(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n if (date >= today) {\n return formatTime(lang, date);\n }\n\n const weekAgo = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n if (date >= weekAgo) {\n return lang(`Weekday.Short${WEEKDAYS_FULL[date.getDay()]}`);\n }\n\n const withYear = date.getFullYear() !== today.getFullYear();\n const format = (\n lang(withYear ? 'formatDateScheduleYear' : 'formatDateSchedule')\n || (withYear ? 'd MMM yyyy' : 'd MMM')\n );\n\n return formatDate(lang, date, format);\n}\n\nexport function formatFullDate(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const format = lang('formatterYearMax') || 'dd.MM.yyyy';\n\n return formatDate(lang, date, format);\n}\n\nexport function formatMonthAndYear(lang: LangFn, date: Date, isShort = false) {\n const format = lang(isShort ? 'formatterMonthYear2' : 'formatterMonthYear') || 'MMM yyyy';\n\n return formatDate(lang, date, format);\n}\n\nexport function formatCountdown(\n lang: LangFn,\n msLeft: number,\n) {\n const days = Math.floor(msLeft / MILLISECONDS_IN_DAY);\n if (msLeft < 0) {\n return 0;\n } else if (days < 1) {\n return formatMediaDuration(msLeft / 1000);\n } else if (days < 7) {\n return lang('Days', days);\n } else if (days < 30) {\n return lang('Weeks', Math.floor(days / 7));\n } else if (days < 365) {\n return lang('Months', Math.floor(days / 30));\n } else {\n return lang('Years', Math.floor(days / 365));\n }\n}\n\nexport function formatHumanDate(\n lang: LangFn,\n datetime: number | Date,\n isShort = false,\n noWeekdays = false,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n\n if (!noWeekdays) {\n if (toIsoString(date) === toIsoString(today)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Today'));\n }\n\n const yesterday = new Date(today);\n yesterday.setDate(today.getDate() - 1);\n if (toIsoString(date) === toIsoString(yesterday)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Yesterday'));\n }\n\n const weekAgo = new Date(today);\n const weekAhead = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n weekAhead.setDate(today.getDate() + 7);\n if (date >= weekAgo && date <= weekAhead) {\n const weekDay = WEEKDAYS_FULL[date.getDay()];\n const weekDayString = isShort ? lang(`Weekday.Short${weekDay}`) : lang(`Weekday.${weekDay}`);\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(weekDayString);\n }\n }\n\n const withYear = date.getFullYear() !== today.getFullYear();\n const formatKey = isShort\n ? (withYear ? 'formatDateScheduleYear' : 'formatDateSchedule')\n : (withYear ? 'chatFullDate' : 'chatDate');\n const format = lang(formatKey) || 'd MMMM yyyy';\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(formatDate(lang, date, format));\n}\n\nfunction formatDate(lang: LangFn, date: Date, format: string) {\n const day = date.getDate();\n const monthIndex = date.getMonth();\n\n return format\n .replace('LLLL', lang(MONTHS_FULL[monthIndex]))\n .replace('MMMM', lang(`Month.Gen${MONTHS_FULL[monthIndex]}`))\n .replace('MMM', lang(`Month.Short${MONTHS_FULL[monthIndex]}`))\n .replace('MM', String(monthIndex + 1).padStart(2, '0'))\n .replace('dd', String(day).padStart(2, '0'))\n .replace('d', String(day))\n .replace('yyyy', String(date.getFullYear()))\n // Workaround for https://bugs.telegram.org/c/5777\n .replace(/'de'/g, 'de');\n}\n\nexport function formatMediaDateTime(\n lang: LangFn,\n datetime: number | Date,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n return `${formatHumanDate(lang, date, true, undefined, isUpperFirst)}, ${formatTime(lang, date)}`;\n}\n\nexport function formatMediaDuration(duration: number, maxValue?: number) {\n const hours = Math.floor(duration / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 3600 % 60);\n\n const maxHours = maxValue ? Math.floor(maxValue / 3600) : 0;\n const maxMinutes = maxValue ? Math.floor((maxValue % 3600) / 60) : 0;\n let string = '';\n if (hours > 0 || maxHours > 0) {\n string += `${String(hours).padStart(2, '0')}:`;\n string += `${String(minutes).padStart(2, '0')}:`;\n } else if (maxMinutes >= 10) {\n string += `${String(minutes).padStart(2, '0')}:`;\n } else {\n string += `${String(minutes)}:`;\n }\n string += String(seconds).padStart(2, '0');\n\n return string;\n}\n\nexport function formatVoiceRecordDuration(durationInMs: number) {\n const parts = [];\n\n let milliseconds = durationInMs % 1000;\n durationInMs -= milliseconds;\n milliseconds = Math.floor(milliseconds / 10);\n\n durationInMs = Math.floor(durationInMs / 1000);\n const seconds = durationInMs % 60;\n durationInMs -= seconds;\n\n durationInMs = Math.floor(durationInMs / 60);\n const minutes = durationInMs % 60;\n durationInMs -= minutes;\n\n durationInMs = Math.floor(durationInMs / 60);\n const hours = durationInMs % 60;\n\n if (hours > 0) {\n parts.push(String(hours).padStart(2, '0'));\n }\n parts.push(String(minutes).padStart(hours > 0 ? 2 : 1, '0'));\n parts.push(String(seconds).padStart(2, '0'));\n\n return `${parts.join(':')},${String(milliseconds).padStart(2, '0')}`;\n}\n\nexport function formatDateToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n return date.toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n },\n );\n}\n\nexport function formatDateTimeToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n return date.toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n );\n}\n\nfunction isValidDate(day: number, month: number, year = 2021): boolean {\n if (month > (MAX_MONTH_IN_YEAR - 1) || day > MAX_DAY_IN_MONTH) {\n return false;\n }\n const date = new Date(year, month, day);\n return !Number.isNaN(date.getTime()) && date.getDate() === day;\n}\n\nexport function parseDateString(query = ''): string | undefined {\n const matchStringDate = query.match(/\\d{1,2}\\s[a-zA-Z]{3,}/);\n const matchEuropeStringDate = query.match(/[a-zA-Z]{3,}\\s\\d{1,2}/);\n const matchNumberDate = query.match(/\\d{1,2}[./-]\\d{1,2}([./-]\\d{2,4})?/);\n if (!matchStringDate && !matchNumberDate && !matchEuropeStringDate) {\n return undefined;\n }\n\n if (matchNumberDate) {\n const [date, month, year] = query.split(/[./-]/).map(Number);\n return !(year && year < MIN_SEARCH_YEAR) && isValidDate(date, month - 1, year || undefined)\n ? `${year ? `${year}-` : ''}${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n }\n\n const dateParts = query.split(' ');\n const date = matchStringDate ? dateParts[0] : dateParts[1];\n const month = (matchStringDate ? dateParts[1] : dateParts[0]).toLowerCase();\n const monthIndex = MONTHS_FULL_LOWERCASE.findIndex((item) => item.startsWith(month));\n\n return monthIndex !== -1 && isValidDate(Number(date), monthIndex)\n ? `${String(monthIndex + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n}\n\nexport function timestampPlusDay(timestamp: number) {\n return timestamp + MILLISECONDS_IN_DAY / 1000;\n}\n\nfunction lowerFirst(str: string) {\n return `${str[0].toLowerCase()}${str.slice(1)}`;\n}\n\nfunction upperFirst(str: string) {\n return `${str[0].toUpperCase()}${str.slice(1)}`;\n}\n","import EMOJI_REGEX from '../lib/twemojiRegex';\n\n// Due to the fact that emoji from Apple do not contain some characters, it is necessary to remove them from emoji-data\n// https://github.com/iamcal/emoji-data/issues/136\nconst EXCLUDE_EMOJIS = ['female_sign', 'male_sign', 'medical_symbol'];\n\nconst ISO_FLAGS_OFFSET = 127397;\n\nexport type EmojiRawData = typeof import('emoji-data-ios/emoji-data.json');\nexport type EmojiModule = { default: EmojiRawData };\n\nexport type EmojiData = {\n categories: Array;\n emojis: Record;\n};\n\n// Non-standard variations of emojis, used on some devices\nconst EMOJI_EXCEPTIONS: [string | RegExp, string][] = [\n [/\\u{1f3f3}\\u200d\\u{1f308}/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u{1f308}'], // 🏳‍🌈\n [/\\u{1f3f3}\\u200d\\u26a7\\ufe0f/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u26a7\\ufe0f'], // 🏳️‍⚧️\n [/\\u{1f937}\\u200d\\u2642[^\\ufe0f]/gu, '\\u{1f937}\\u200d\\u2642\\ufe0f'], // 🤷‍♂️\n];\n\nfunction unifiedToNative(unified: string) {\n const unicodes = unified.split('-');\n const codePoints = unicodes.map((i) => parseInt(i, 16));\n\n return String.fromCodePoint(...codePoints);\n}\n\nexport function fixNonStandardEmoji(text: string) {\n // Non-standard sequences typically parsed as separate emojis, so no need to fix text without any\n if (!text.match(EMOJI_REGEX)) return text;\n // eslint-disable-next-line no-restricted-syntax\n for (const [regex, replacement] of EMOJI_EXCEPTIONS) {\n text = text.replace(regex, replacement);\n }\n\n return text;\n}\n\nexport function nativeToUnified(emoji: string) {\n let code;\n\n if (emoji.length === 1) {\n code = emoji.charCodeAt(0).toString(16).padStart(4, '0');\n } else {\n const pairs = [];\n for (let i = 0; i < emoji.length; i++) {\n if (emoji.charCodeAt(i) >= 0xd800 && emoji.charCodeAt(i) <= 0xdbff) {\n if (emoji.charCodeAt(i + 1) >= 0xdc00 && emoji.charCodeAt(i + 1) <= 0xdfff) {\n pairs.push(\n (emoji.charCodeAt(i) - 0xd800) * 0x400\n + (emoji.charCodeAt(i + 1) - 0xdc00) + 0x10000,\n );\n }\n } else if (emoji.charCodeAt(i) < 0xd800 || emoji.charCodeAt(i) > 0xdfff) {\n pairs.push(emoji.charCodeAt(i));\n }\n }\n\n code = pairs.map((x) => x.toString(16).padStart(4, '0')).join('-');\n }\n\n return code;\n}\n\nexport function uncompressEmoji(data: EmojiRawData): EmojiData {\n const emojiData: EmojiData = { categories: [], emojis: {} };\n\n for (let i = 0; i < data.length; i += 2) {\n const category = {\n id: data[i][0],\n name: data[i][1],\n emojis: [],\n } as EmojiCategory;\n\n for (let j = 0; j < data[i + 1].length; j++) {\n const emojiRaw = data[i + 1][j];\n if (!EXCLUDE_EMOJIS.includes(emojiRaw[1][0])) {\n category.emojis.push(emojiRaw[1][0]);\n emojiData.emojis[emojiRaw[1][0]] = {\n id: emojiRaw[1][0],\n names: emojiRaw[1] as string[],\n native: unifiedToNative(emojiRaw[0] as string),\n image: (emojiRaw[0] as string).toLowerCase(),\n };\n }\n }\n\n emojiData.categories.push(category);\n }\n\n return emojiData;\n}\n\nexport function isoToEmoji(iso: string) {\n const code = iso.toUpperCase();\n\n if (!/^[A-Z]{2}$/.test(code)) return iso;\n const codePoints = [...code].map((c) => c.codePointAt(0)! + ISO_FLAGS_OFFSET);\n return String.fromCodePoint(...codePoints);\n}\n","export function ensureProtocol(url?: string) {\n if (!url) {\n return undefined;\n }\n\n // HTTP was chosen by default as a fix for https://bugs.telegram.org/c/10712.\n // It is also the default protocol in the official TDesktop client.\n return url.includes('://') ? url : `http://${url}`;\n}\n","let isWebpSupportedCache: boolean | undefined;\n\nexport function isWebpSupported() {\n return Boolean(isWebpSupportedCache);\n}\n\nfunction testWebp(): Promise {\n return new Promise((resolve) => {\n const webp = new Image();\n // eslint-disable-next-line max-len\n webp.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n const handleLoadOrError = () => {\n resolve(webp.height === 2);\n };\n webp.onload = handleLoadOrError;\n webp.onerror = handleLoadOrError;\n });\n}\n\ntestWebp().then((hasWebp) => {\n isWebpSupportedCache = hasWebp;\n});\n","import { ThemeKey } from '../types';\n\nlet systemThemeCache: ThemeKey = (\n window.matchMedia?.('(prefers-color-scheme: dark)').matches\n) ? 'dark' : 'light';\n\nexport function getSystemTheme() {\n return systemThemeCache;\n}\n\nfunction handleSystemThemeChange(e: MediaQueryListEventMap['change']) {\n systemThemeCache = e.matches ? 'dark' : 'light';\n}\n\nconst mql = window.matchMedia('(prefers-color-scheme: dark)');\nif (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n} else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n}\n","import {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n IS_TEST,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n VIDEO_MOV_TYPE,\n} from '../config';\n\nexport * from './environmentWebp';\n\nexport * from './environmentSystemTheme';\n\nexport function getPlatform() {\n const { userAgent, platform } = window.navigator;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os: 'macOS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | undefined;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'macOS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (/Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n}\n\nexport const PLATFORM_ENV = getPlatform();\nexport const IS_MAC_OS = PLATFORM_ENV === 'macOS';\nexport const IS_IOS = PLATFORM_ENV === 'iOS';\nexport const IS_ANDROID = PLATFORM_ENV === 'Android';\nexport const IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nexport const IS_PWA = (\n window.matchMedia('(display-mode: standalone)').matches\n || (window.navigator as any).standalone\n || document.referrer.includes('android-app://')\n);\n\nexport const IS_TOUCH_ENV = window.matchMedia('(pointer: coarse)').matches;\n// Keep in mind the landscape orientation\nexport const IS_SINGLE_COLUMN_LAYOUT = window.innerWidth <= MOBILE_SCREEN_MAX_WIDTH || (\n window.innerWidth <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH && window.innerHeight <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n);\n// Special layout, 1 column while chat opened, 2 columns while collapsed\nexport const IS_TABLET_COLUMN_LAYOUT = !IS_SINGLE_COLUMN_LAYOUT && (\n window.innerWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n);\nexport const IS_VOICE_RECORDING_SUPPORTED = Boolean(\n navigator.mediaDevices && 'getUserMedia' in navigator.mediaDevices && (\n window.AudioContext || (window as any).webkitAudioContext\n ),\n);\nexport const IS_SMOOTH_SCROLL_SUPPORTED = 'scrollBehavior' in document.documentElement.style;\nexport const IS_EMOJI_SUPPORTED = PLATFORM_ENV && (IS_MAC_OS || IS_IOS);\nexport const IS_SERVICE_WORKER_SUPPORTED = 'serviceWorker' in navigator;\n// TODO Consider failed service worker\nexport const IS_PROGRESSIVE_SUPPORTED = IS_SERVICE_WORKER_SUPPORTED;\nexport const IS_STREAMING_SUPPORTED = 'MediaSource' in window;\nexport const IS_OPUS_SUPPORTED = Boolean((new Audio()).canPlayType('audio/ogg; codecs=opus'));\nexport const IS_CANVAS_FILTER_SUPPORTED = (\n !IS_TEST && 'filter' in (document.createElement('canvas').getContext('2d') || {})\n);\nexport const IS_REQUEST_FULLSCREEN_SUPPORTED = 'requestFullscreen' in document.createElement('div');\nexport const ARE_CALLS_SUPPORTED = !navigator.userAgent.includes('Firefox');\nexport const LAYERS_ANIMATION_NAME = IS_ANDROID ? 'slide-fade' : IS_IOS ? 'slide-layers' : 'push-slide';\n\nconst TEST_VIDEO = document.createElement('video');\n// `canPlayType(VIDEO_MOV_TYPE)` returns false negative at least for macOS Chrome and iOS Safari\nexport const IS_MOV_SUPPORTED = true;\n\nif (IS_MOV_SUPPORTED) SUPPORTED_VIDEO_CONTENT_TYPES.add(VIDEO_MOV_TYPE);\n\nexport const IS_WEBM_SUPPORTED = Boolean(TEST_VIDEO.canPlayType('video/webm; codecs=\"vp9\"').replace('no', ''))\n && !(IS_MAC_OS && IS_SAFARI); // Safari on MacOS has some issues with WebM\n\nexport const DPR = window.devicePixelRatio || 1;\n\nexport const MASK_IMAGE_DISABLED = true;\n\nexport const IS_SCROLL_PATCH_NEEDED = !IS_MAC_OS && !IS_IOS && !IS_ANDROID;\n\n// Smaller area reduces scroll jumps caused by `patchChromiumScroll`\nexport const MESSAGE_LIST_SENSITIVE_AREA = IS_SCROLL_PATCH_NEEDED ? 300 : 750;\n","import { pause } from './schedulers';\n\n// Polyfill for Safari: `File` is not available in web worker\nif (typeof File === 'undefined') {\n // eslint-disable-next-line no-global-assign, no-restricted-globals, func-names\n self.File = class extends Blob {\n name: string;\n\n constructor(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag) {\n if (options) {\n const { type, ...rest } = options;\n super(fileBits, { type });\n Object.assign(this, rest);\n } else {\n super(fileBits);\n }\n\n this.name = fileName;\n }\n } as typeof File;\n}\n\nexport function dataUriToBlob(dataUri: string) {\n const arr = dataUri.split(',');\n const mime = arr[0].match(/:(.*?);/)![1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n}\n\nexport function blobToDataUri(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent) => {\n const { result } = e.target || {};\n if (typeof result === 'string') {\n resolve(result);\n }\n\n reject(new Error('Failed to read blob'));\n };\n\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport function blobToFile(blob: Blob, fileName: string) {\n return new File([blob], fileName, {\n lastModified: Date.now(),\n type: blob.type,\n });\n}\n\nexport function preloadImage(url: string): Promise {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n}\n\nexport function preloadVideo(url: string): Promise {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.volume = 0;\n video.onloadedmetadata = () => resolve(video);\n video.onerror = reject;\n video.src = url;\n });\n}\n\nexport async function createPosterForVideo(url: string): Promise {\n const video = await preloadVideo(url);\n\n return Promise.race([\n pause(2000) as Promise,\n new Promise((resolve, reject) => {\n video.onseeked = () => {\n if (!video.videoWidth || !video.videoHeight) {\n resolve(undefined);\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(video, 0, 0);\n resolve(canvas.toDataURL('image/jpeg'));\n };\n video.onerror = reject;\n video.currentTime = Math.min(video.duration, 1);\n }),\n ]);\n}\n\nexport async function fetchBlob(blobUrl: string) {\n const response = await fetch(blobUrl);\n return response.blob();\n}\n\nexport async function fetchFile(blobUrl: string, fileName: string) {\n const blob = await fetchBlob(blobUrl);\n return blobToFile(blob, fileName);\n}\n\nexport function imgToCanvas(img: HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0);\n\n return canvas;\n}\n","import { addCallback, addReducer, getGlobal } from '../lib/teact/teactn';\n\nimport { GlobalState } from '../global/types';\nimport { NotifyException, NotifySettings } from '../types';\nimport { ApiChat, ApiChatFolder, ApiUser } from '../api/types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, DEBUG } from '../config';\nimport { selectNotifySettings, selectNotifyExceptions } from '../modules/selectors';\nimport { selectIsChatMuted } from '../modules/helpers';\nimport { onIdle, throttle } from './schedulers';\nimport { areSortedArraysEqual, unique } from './iteratees';\nimport arePropsShallowEqual from './arePropsShallowEqual';\nimport { CallbackManager, createCallbackManager } from './callbacks';\n\ninterface FolderSummary {\n id: number;\n listIds?: Set;\n orderedPinnedIds?: string[];\n contacts?: true;\n nonContacts?: true;\n groups?: true;\n channels?: true;\n bots?: true;\n excludeMuted?: true;\n excludeRead?: true;\n excludeArchived?: true;\n excludedChatIds?: Set;\n includedChatIds?: Set;\n pinnedChatIds?: Set;\n}\n\ninterface ChatSummary {\n id: string;\n type: ApiChat['type'];\n isListed: boolean;\n isArchived: boolean;\n isMuted: boolean;\n isUnread: boolean;\n unreadCount?: number;\n unreadMentionsCount?: number;\n order: number;\n isUserBot?: boolean;\n isUserContact?: boolean;\n}\n\nconst UPDATE_THROTTLE = 500;\nconst DEBUG_DURATION_LIMIT = 6;\n\nconst initials = buildInitials();\n\nlet prevGlobal: {\n allFolderListIds?: GlobalState['chats']['listIds']['active'];\n allFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['active'];\n archivedFolderListIds?: GlobalState['chats']['listIds']['archived'];\n archivedFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['archived'];\n isAllFolderFullyLoaded?: boolean;\n isArchivedFolderFullyLoaded?: boolean;\n chatsById: Record;\n foldersById: Record;\n usersById: Record;\n notifySettings: NotifySettings;\n notifyExceptions?: Record;\n} = initials.prevGlobal;\n\nlet prepared: {\n folderSummariesById: Record;\n chatSummariesById: Map;\n folderIdsByChatId: Record;\n chatIdsByFolderId: Record | undefined>;\n isOrderedListJustPatched: Record;\n} = initials.prepared;\n\nlet results: {\n orderedIdsByFolderId: Record;\n pinnedCountByFolderId: Record; // Also watched by `callbacks.orderedIdsByFolderId`\n chatsCountByFolderId: Record;\n unreadCountersByFolderId: Record;\n} = initials.results;\n\nlet callbacks: {\n orderedIdsByFolderId: Record;\n chatsCountByFolderId: CallbackManager;\n unreadCountersByFolderId: CallbackManager;\n} = initials.callbacks;\n\nconst updateFolderManagerThrottled = throttle(() => {\n onIdle(() => {\n updateFolderManager(getGlobal());\n });\n}, UPDATE_THROTTLE);\n\nlet inited = false;\n\n/* Getters */\n\nexport function init() {\n inited = true;\n\n addCallback(updateFolderManagerThrottled);\n addReducer('reset', reset);\n\n updateFolderManager(getGlobal());\n}\n\nexport function getOrderedIds(folderId: number) {\n if (!inited) init();\n\n return results.orderedIdsByFolderId[folderId];\n}\n\nexport function getPinnedChatsCount(folderId: number) {\n if (!inited) init();\n\n return results.pinnedCountByFolderId[folderId] || 0;\n}\n\nexport function getChatsCount() {\n if (!inited) init();\n\n return results.chatsCountByFolderId;\n}\n\nexport function getUnreadCounters() {\n if (!inited) init();\n\n return results.unreadCountersByFolderId;\n}\n\nexport function getAllNotificationsCount() {\n return getUnreadCounters()[ALL_FOLDER_ID]?.notificationsCount || 0;\n}\n\n/* Callback managers */\n\nexport function addOrderedIdsCallback(folderId: number, callback: (orderedIds: string[]) => void) {\n if (!callbacks.orderedIdsByFolderId[folderId]) {\n callbacks.orderedIdsByFolderId[folderId] = createCallbackManager();\n }\n\n return callbacks.orderedIdsByFolderId[folderId].addCallback(callback);\n}\n\nexport function addChatsCountCallback(callback: (chatsCount: typeof results.chatsCountByFolderId) => void) {\n return callbacks.chatsCountByFolderId.addCallback(callback);\n}\n\nexport function addUnreadCountersCallback(callback: (unreadCounters: typeof results.unreadCountersByFolderId) => void) {\n return callbacks.unreadCountersByFolderId.addCallback(callback);\n}\n\n/* Global update handlers */\n\nfunction updateFolderManager(global: GlobalState) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startedAt: number;\n if (DEBUG) {\n DEBUG_startedAt = performance.now();\n }\n\n const isAllFolderChanged = Boolean(\n global.chats.listIds.active\n && isMainFolderChanged(ALL_FOLDER_ID, global.chats.listIds.active, global.chats.orderedPinnedIds.active),\n );\n const isArchivedFolderChanged = Boolean(\n global.chats.listIds.archived\n && isMainFolderChanged(ARCHIVED_FOLDER_ID, global.chats.listIds.archived, global.chats.orderedPinnedIds.archived),\n );\n const isAllFullyLoadedChanged = global.chats.isFullyLoaded.active !== prevGlobal.isAllFolderFullyLoaded;\n const isArchivedFullyLoadedChanged = global.chats.isFullyLoaded.archived !== prevGlobal.isArchivedFolderFullyLoaded;\n\n const areFoldersChanged = global.chatFolders.byId !== prevGlobal.foldersById;\n const areChatsChanged = global.chats.byId !== prevGlobal.chatsById;\n const areUsersChanged = global.users.byId !== prevGlobal.usersById;\n const areNotifySettingsChanged = selectNotifySettings(global) !== prevGlobal.notifySettings;\n const areNotifyExceptionsChanged = selectNotifyExceptions(global) !== prevGlobal.notifyExceptions;\n\n let affectedFolderIds: number[] = [];\n\n if (isAllFullyLoadedChanged || isArchivedFullyLoadedChanged) {\n affectedFolderIds = affectedFolderIds.concat(\n updateFullyLoaded(global, isArchivedFullyLoadedChanged),\n );\n }\n\n if (!(\n isAllFolderChanged || isArchivedFolderChanged || areFoldersChanged\n || areChatsChanged || areUsersChanged || areNotifySettingsChanged || areNotifyExceptionsChanged\n )\n ) {\n if (affectedFolderIds.length) {\n updateResults(affectedFolderIds);\n }\n\n return;\n }\n\n const prevAllFolderListIds = prevGlobal.allFolderListIds;\n const prevArchivedFolderListIds = prevGlobal.archivedFolderListIds;\n\n updateFolders(global, isAllFolderChanged, isArchivedFolderChanged, areFoldersChanged);\n\n affectedFolderIds = affectedFolderIds.concat(updateChats(\n global, areFoldersChanged || isAllFolderChanged || isArchivedFolderChanged,\n areNotifySettingsChanged, areNotifyExceptionsChanged,\n prevAllFolderListIds, prevArchivedFolderListIds,\n ));\n\n updateResults(unique(affectedFolderIds));\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startedAt!;\n if (duration > DEBUG_DURATION_LIMIT) {\n // eslint-disable-next-line no-console\n console.warn(`Slow \\`updateFolderManager\\`: ${Math.round(duration)} ms`);\n }\n }\n}\n\nfunction isMainFolderChanged(folderId: number, newListIds?: string[], newPinnedIds?: string[]) {\n const currentListIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderListIds\n : prevGlobal.archivedFolderListIds;\n const currentPinnedIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderPinnedIds\n : prevGlobal.archivedFolderPinnedIds;\n\n return currentListIds !== newListIds || currentPinnedIds !== newPinnedIds;\n}\n\nfunction updateFullyLoaded(\n global: GlobalState,\n isArchivedFullyLoadedChanged = false,\n) {\n let affectedFolderIds = [];\n\n if (isArchivedFullyLoadedChanged) {\n affectedFolderIds.push(ARCHIVED_FOLDER_ID);\n }\n\n const isAllFolderFullyLoaded = global.chats.isFullyLoaded.active;\n const isArchivedFolderFullyLoaded = global.chats.isFullyLoaded.archived;\n\n if (isAllFolderFullyLoaded && isArchivedFolderFullyLoaded) {\n const emptyFolderIds = Object.keys(prepared.folderSummariesById)\n .filter((folderId) => !results.orderedIdsByFolderId[folderId])\n .map(Number);\n\n affectedFolderIds = affectedFolderIds.concat(emptyFolderIds);\n }\n\n prevGlobal.isAllFolderFullyLoaded = isAllFolderFullyLoaded;\n prevGlobal.isArchivedFolderFullyLoaded = isArchivedFolderFullyLoaded;\n\n return affectedFolderIds;\n}\n\nfunction updateFolders(\n global: GlobalState, isAllFolderChanged: boolean, isArchivedFolderChanged: boolean, areFoldersChanged: boolean,\n) {\n const changedFolders = [];\n\n if (isAllFolderChanged) {\n const newListIds = global.chats.listIds.active!;\n const newPinnedIds = global.chats.orderedPinnedIds.active;\n\n prepared.folderSummariesById[ALL_FOLDER_ID] = buildFolderSummaryFromMainList(\n ALL_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.allFolderListIds = newListIds;\n prevGlobal.allFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ALL_FOLDER_ID);\n }\n\n if (isArchivedFolderChanged) {\n const newListIds = global.chats.listIds.archived!;\n const newPinnedIds = global.chats.orderedPinnedIds.archived;\n\n prepared.folderSummariesById[ARCHIVED_FOLDER_ID] = buildFolderSummaryFromMainList(\n ARCHIVED_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.archivedFolderListIds = newListIds;\n prevGlobal.archivedFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ARCHIVED_FOLDER_ID);\n }\n\n if (areFoldersChanged) {\n const newFoldersById = global.chatFolders.byId;\n\n Object.values(newFoldersById).forEach((folder) => {\n if (folder === prevGlobal.foldersById[folder.id]) {\n return;\n }\n\n prepared.folderSummariesById[folder.id] = buildFolderSummary(folder);\n\n changedFolders.push(folder.id);\n });\n\n prevGlobal.foldersById = newFoldersById;\n }\n\n return changedFolders;\n}\n\nfunction buildFolderSummaryFromMainList(\n folderId: number, listIds: string[], orderedPinnedIds?: string[],\n): FolderSummary {\n return {\n id: folderId,\n listIds: new Set(listIds),\n orderedPinnedIds: orderedPinnedIds,\n pinnedChatIds: new Set(orderedPinnedIds),\n };\n}\n\nfunction buildFolderSummary(folder: ApiChatFolder): FolderSummary {\n return {\n ...folder,\n orderedPinnedIds: folder.pinnedChatIds,\n excludedChatIds: folder.excludedChatIds ? new Set(folder.excludedChatIds) : undefined,\n includedChatIds: folder.excludedChatIds ? new Set(folder.includedChatIds) : undefined,\n pinnedChatIds: folder.excludedChatIds ? new Set(folder.pinnedChatIds) : undefined,\n };\n}\n\nfunction updateChats(\n global: GlobalState,\n areFoldersChanged: boolean,\n areNotifySettingsChanged: boolean,\n areNotifyExceptionsChanged: boolean,\n prevAllFolderListIds?: string[],\n prevArchivedFolderListIds?: string[],\n) {\n const newChatsById = global.chats.byId;\n const newUsersById = global.users.byId;\n const newNotifySettings = selectNotifySettings(global);\n const newNotifyExceptions = selectNotifyExceptions(global);\n const folderSummaries = Object.values(prepared.folderSummariesById);\n const affectedFolderIds = new Set();\n\n const newAllFolderListIds = global.chats.listIds.active;\n const newArchivedFolderListIds = global.chats.listIds.archived;\n let allIds = [...newAllFolderListIds || [], ...newArchivedFolderListIds || []];\n if (newAllFolderListIds !== prevAllFolderListIds || newArchivedFolderListIds !== prevArchivedFolderListIds) {\n allIds = unique(allIds.concat(prevAllFolderListIds || [], prevArchivedFolderListIds || []));\n }\n\n allIds.forEach((chatId) => {\n const chat = newChatsById[chatId];\n\n if (\n !areFoldersChanged\n && !areNotifySettingsChanged\n && !areNotifyExceptionsChanged\n && chat === prevGlobal.chatsById[chatId]\n && newUsersById[chatId] === prevGlobal.usersById[chatId]\n ) {\n return;\n }\n\n let newFolderIds: number[];\n if (chat) {\n const currentSummary = prepared.chatSummariesById.get(chatId);\n const newSummary = buildChatSummary(chat, newNotifySettings, newNotifyExceptions, newUsersById[chatId]);\n if (!areFoldersChanged && currentSummary && arePropsShallowEqual(newSummary, currentSummary)) {\n return;\n }\n\n prepared.chatSummariesById.set(chatId, newSummary);\n\n newFolderIds = buildChatFolderIds(newSummary, folderSummaries);\n newFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n } else {\n prepared.chatSummariesById.delete(chatId);\n newFolderIds = [];\n }\n\n const currentFolderIds = prepared.folderIdsByChatId[chatId] || [];\n if (areSortedArraysEqual(newFolderIds, currentFolderIds)) {\n return;\n }\n\n const deletedFolderIds = updateListsForChat(chatId, currentFolderIds, newFolderIds);\n deletedFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n });\n\n prevGlobal.chatsById = newChatsById;\n prevGlobal.usersById = newUsersById;\n prevGlobal.notifySettings = newNotifySettings;\n prevGlobal.notifyExceptions = newNotifyExceptions;\n\n return Array.from(affectedFolderIds);\n}\n\nfunction buildChatSummary(\n chat: ApiChat,\n notifySettings: NotifySettings,\n notifyExceptions?: Record,\n user?: ApiUser,\n): ChatSummary {\n const {\n id, type, lastMessage, isRestricted, isNotJoined, folderId,\n unreadCount, unreadMentionsCount, hasUnreadMark,\n joinDate, draftDate,\n } = chat;\n\n const userInfo = type === 'chatTypePrivate' && user;\n\n return {\n id,\n type,\n isListed: Boolean(lastMessage && !isRestricted && !isNotJoined),\n isArchived: folderId === ARCHIVED_FOLDER_ID,\n isMuted: selectIsChatMuted(chat, notifySettings, notifyExceptions),\n isUnread: Boolean(unreadCount || unreadMentionsCount || hasUnreadMark),\n unreadCount,\n unreadMentionsCount,\n order: Math.max(joinDate || 0, draftDate || 0, lastMessage?.date || 0),\n isUserBot: userInfo ? userInfo.type === 'userTypeBot' : undefined,\n isUserContact: userInfo ? userInfo.isContact : undefined,\n };\n}\n\nfunction buildChatFolderIds(chatSummary: ChatSummary, folderSummaries: FolderSummary[]) {\n return folderSummaries.reduce((acc, folderSummary) => {\n if (isChatInFolder(chatSummary, folderSummary)) {\n acc.push(folderSummary.id);\n }\n\n return acc;\n }, []).sort();\n}\n\nfunction isChatInFolder(\n chatSummary: ChatSummary,\n folderSummary: FolderSummary,\n) {\n if (!chatSummary.isListed) {\n return false;\n }\n\n const { id: chatId, type } = chatSummary;\n\n if (folderSummary.listIds) {\n if (\n (chatSummary.isArchived && folderSummary.id === ALL_FOLDER_ID)\n || (!chatSummary.isArchived && folderSummary.id === ARCHIVED_FOLDER_ID)\n ) {\n return false;\n }\n\n return folderSummary.listIds.has(chatId);\n }\n\n if (folderSummary.excludedChatIds?.has(chatId)) {\n return false;\n }\n\n if (folderSummary.includedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.pinnedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.excludeArchived && chatSummary.isArchived) {\n return false;\n }\n\n if (folderSummary.excludeRead && !chatSummary.isUnread) {\n return false;\n }\n\n if (folderSummary.excludeMuted && chatSummary.isMuted && !chatSummary.unreadMentionsCount) {\n return false;\n }\n\n if (type === 'chatTypePrivate') {\n if (chatSummary.isUserBot) {\n if (folderSummary.bots) {\n return true;\n }\n } else {\n if (folderSummary.contacts && chatSummary.isUserContact) {\n return true;\n }\n\n if (folderSummary.nonContacts && !chatSummary.isUserContact) {\n return true;\n }\n }\n } else if (type === 'chatTypeChannel') {\n return Boolean(folderSummary.channels);\n } else if (type === 'chatTypeBasicGroup' || type === 'chatTypeSuperGroup') {\n return Boolean(folderSummary.groups);\n }\n\n return false;\n}\n\nfunction updateListsForChat(chatId: string, currentFolderIds: number[], newFolderIds: number[]) {\n const currentFolderIdsSet = new Set(currentFolderIds);\n const newFolderIdsSet = new Set(newFolderIds);\n const deletedFolderIds: number[] = [];\n\n unique([...currentFolderIds, ...newFolderIds]).forEach((folderId) => {\n let currentFolderOrderedIds = results.orderedIdsByFolderId[folderId];\n\n if (currentFolderIdsSet.has(folderId) && !newFolderIdsSet.has(folderId)) {\n prepared.chatIdsByFolderId[folderId]!.delete(chatId);\n\n deletedFolderIds.push(folderId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds = currentFolderOrderedIds.filter((id) => id !== chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n } else if (!currentFolderIdsSet.has(folderId) && newFolderIdsSet.has(folderId)) {\n if (!prepared.chatIdsByFolderId[folderId]) {\n prepared.chatIdsByFolderId[folderId] = new Set();\n }\n\n prepared.chatIdsByFolderId[folderId]!.add(chatId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds.push(chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n }\n\n results.orderedIdsByFolderId[folderId] = currentFolderOrderedIds;\n });\n\n prepared.folderIdsByChatId[chatId] = newFolderIds;\n\n return deletedFolderIds;\n}\n\nfunction updateResults(affectedFolderIds: number[]) {\n let wasUnreadCountersChanged = false;\n let wasChatsCountChanged = false;\n\n Array.from(affectedFolderIds).forEach((folderId) => {\n const { pinnedCount: newPinnedCount, orderedIds: newOrderedIds } = buildFolderOrderedIds(folderId);\n // When signed out\n if (!newOrderedIds) {\n return;\n }\n\n const currentOrderedIds = results.orderedIdsByFolderId[folderId];\n const currentPinnedCount = results.pinnedCountByFolderId[folderId];\n const areOrderedIdsChanged = (\n !currentOrderedIds\n || currentPinnedCount === undefined || currentPinnedCount !== newPinnedCount\n || prepared.isOrderedListJustPatched[folderId]\n || !areSortedArraysEqual(newOrderedIds, currentOrderedIds)\n );\n if (areOrderedIdsChanged) {\n prepared.isOrderedListJustPatched[folderId] = false;\n results.orderedIdsByFolderId[folderId] = newOrderedIds;\n results.pinnedCountByFolderId[folderId] = newPinnedCount;\n callbacks.orderedIdsByFolderId[folderId]?.runCallbacks(newOrderedIds);\n }\n\n const currentChatsCount = results.chatsCountByFolderId[folderId];\n const newChatsCount = newOrderedIds.length;\n if (!wasChatsCountChanged) {\n wasChatsCountChanged = currentChatsCount !== newChatsCount;\n }\n results.chatsCountByFolderId[folderId] = newChatsCount;\n\n const currentUnreadCounters = results.unreadCountersByFolderId[folderId];\n const newUnreadCounters = buildFolderUnreadCounters(folderId);\n if (!wasUnreadCountersChanged) {\n wasUnreadCountersChanged = (\n !currentUnreadCounters || !arePropsShallowEqual(newUnreadCounters, currentUnreadCounters)\n );\n }\n results.unreadCountersByFolderId[folderId] = newUnreadCounters;\n });\n\n if (wasChatsCountChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.chatsCountByFolderId };\n results.chatsCountByFolderId = newValue;\n callbacks.chatsCountByFolderId.runCallbacks(newValue);\n }\n\n if (wasUnreadCountersChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.unreadCountersByFolderId };\n results.unreadCountersByFolderId = newValue;\n callbacks.unreadCountersByFolderId.runCallbacks(newValue);\n }\n}\n\nfunction buildFolderOrderedIds(folderId: number) {\n const folderSummary = prepared.folderSummariesById[folderId];\n if (!folderSummary) {\n return {};\n }\n\n const { orderedPinnedIds, pinnedChatIds } = folderSummary;\n const {\n chatSummariesById,\n chatIdsByFolderId: { [folderId]: chatIds },\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: prevOrderedIds },\n } = results;\n\n const sortedPinnedIds = chatIds ? orderedPinnedIds?.filter((id) => chatIds.has(id)) : orderedPinnedIds;\n const allListIds = prevOrderedIds || (chatIds && Array.from(chatIds)) || [];\n const notPinnedIds = pinnedChatIds ? allListIds.filter((id) => !pinnedChatIds.has(id)) : allListIds;\n const sortedNotPinnedIds = notPinnedIds.sort((chatId1: string, chatId2: string) => {\n return chatSummariesById.get(chatId2)!.order - chatSummariesById.get(chatId1)!.order;\n });\n\n return {\n pinnedCount: sortedPinnedIds?.length || 0,\n orderedIds: [\n ...(sortedPinnedIds || []),\n ...sortedNotPinnedIds,\n ],\n };\n}\n\nfunction buildFolderUnreadCounters(folderId: number) {\n const {\n chatSummariesById,\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: orderedIds },\n } = results;\n\n return orderedIds!.reduce((newUnreadCounters, chatId) => {\n const chatSummary = chatSummariesById.get(chatId);\n if (!chatSummary) {\n return newUnreadCounters;\n }\n\n if (chatSummary.isUnread) {\n newUnreadCounters.chatsCount++;\n\n if (chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadMentionsCount;\n }\n\n if (!chatSummary.isMuted) {\n if (chatSummary.unreadCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadCount;\n } else if (!chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += 1; // Manually marked unread\n }\n }\n }\n\n return newUnreadCounters;\n }, {\n chatsCount: 0,\n notificationsCount: 0,\n });\n}\n\nfunction buildInitials() {\n return {\n prevGlobal: {\n foldersById: {},\n chatsById: {},\n usersById: {},\n notifySettings: {} as NotifySettings,\n notifyExceptions: {},\n },\n\n prepared: {\n folderSummariesById: {},\n chatSummariesById: new Map(),\n folderIdsByChatId: {},\n chatIdsByFolderId: {},\n isOrderedListJustPatched: {},\n },\n\n results: {\n orderedIdsByFolderId: {},\n pinnedCountByFolderId: {},\n chatsCountByFolderId: {},\n unreadCountersByFolderId: {},\n },\n\n callbacks: {\n orderedIdsByFolderId: {},\n chatsCountByFolderId: createCallbackManager(),\n unreadCountersByFolderId: createCallbackManager(),\n },\n };\n}\n\nfunction reset() {\n const newInitials = buildInitials();\n\n prevGlobal = newInitials.prevGlobal;\n prepared = newInitials.prepared;\n results = newInitials.results;\n callbacks = newInitials.callbacks;\n}\n","import { LangCode } from '../types';\n\nexport function formatCurrency(totalPrice: number, currency?: string, locale: LangCode = 'en') {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(currency === 'JPY' ? totalPrice : totalPrice / 100);\n}\n","const generateIdFor = (store: AnyLiteral) => {\n let id;\n\n do {\n id = String(Math.random()).replace('0.', 'id');\n } while (store.hasOwnProperty(id));\n\n return id;\n};\n\nexport default generateIdFor;\n","import { ApiError, ApiFieldError } from '../api/types';\n\nconst READABLE_ERROR_MESSAGES: Record = {\n CHAT_RESTRICTED: 'You can\\'t send messages in this chat, you were restricted',\n CHAT_WRITE_FORBIDDEN: 'You can\\'t write in this chat',\n CHAT_SEND_POLL_FORBIDDEN: 'You can\\'t create polls in this chat',\n CHAT_SEND_STICKERS_FORBIDDEN: 'You can\\'t send stickers in this chat',\n CHAT_SEND_GIFS_FORBIDDEN: 'You can\\'t send gifs in this chat',\n CHAT_SEND_MEDIA_FORBIDDEN: 'You can\\'t send media in this chat',\n CHAT_LINK_EXISTS: 'The chat is public, you can\\'t hide the history to new users',\n // eslint-disable-next-line max-len\n SLOWMODE_WAIT_X: 'Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.',\n USER_BANNED_IN_CHANNEL: 'You\\'re banned from sending messages in supergroups / channels',\n USER_IS_BLOCKED: 'You were blocked by this user',\n YOU_BLOCKED_USER: 'You blocked this user',\n IMAGE_PROCESS_FAILED: 'Failure while processing image',\n MEDIA_EMPTY: 'The provided media object is invalid',\n MEDIA_INVALID: 'Media invalid',\n PHOTO_EXT_INVALID: 'The extension of the photo is invalid',\n PHOTO_INVALID_DIMENSIONS: 'The photo dimensions are invalid',\n PHOTO_SAVE_FILE_INVALID: 'Internal issues, try again later',\n // eslint-disable-next-line max-len\n MESSAGE_DELETE_FORBIDDEN: 'You can\\'t delete one of the messages you tried to delete, most likely because it is a service message.',\n MESSAGE_POLL_CLOSED: 'Poll closed',\n MESSAGE_EDIT_TIME_EXPIRED: 'You can\\'t edit this message anymore.',\n CHAT_ADMIN_REQUIRED: 'You must be an admin in this chat to do this',\n PINNED_DIALOGS_TOO_MUCH: 'Sorry, you can only pin 5 chats to the top',\n DIALOG_FILTERS_TOO_MUCH: 'Sorry, you can\\'t have more than 10 folders',\n CHANNEL_PRIVATE: 'This channel is private',\n MEDIA_CAPTION_TOO_LONG: 'The provided caption is too long',\n ADDRESS_STREET_LINE1_INVALID: 'The address you provided is not valid',\n ADDRESS_STREET_LINE2_INVALID: 'The address you provided is not valid',\n ADDRESS_CITY_INVALID: 'The city you provided is not valid',\n ADDRESS_COUNTRY_INVALID: 'The country you provided is not valid',\n ADDRESS_POSTCODE_INVALID: 'The postcode you provided is not valid',\n ADDRESS_STATE_INVALID: 'The state you provided is not valid',\n REQ_INFO_NAME_INVALID: 'The name you provided is not valid',\n REQ_INFO_PHONE_INVALID: 'The phone you provided is not valid',\n REQ_INFO_EMAIL_INVALID: 'The email you provided is not valid',\n // TODO Bring back after fixing the weird bug\n // CHANNEL_INVALID: 'An error occurred. Please try again later',\n LINK_NOT_MODIFIED: 'This discussion is already linked to the channel',\n MESSAGE_TOO_LONG: 'Message is too long',\n\n // Non-API errors\n // eslint-disable-next-line max-len\n SERVICE_WORKER_DISABLED: 'Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key',\n // eslint-disable-next-line max-len\n MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS: 'The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.',\n // eslint-disable-next-line max-len\n FRESH_RESET_AUTHORISATION_FORBIDDEN: 'You can’t logout other sessions if less than 24 hours have passed since you logged on the current session',\n\n BOTS_TOO_MUCH: 'There are too many bots in this chat/channel',\n BOT_GROUPS_BLOCKED: 'This bot can\\'t be added to groups',\n USERS_TOO_MUCH: 'The maximum number of users has been exceeded',\n USER_CHANNELS_TOO_MUCH: 'One of the users you tried to add is already in too many channels/supergroups',\n USER_KICKED: 'This user was kicked from this supergroup/channel',\n USER_NOT_MUTUAL_CONTACT: 'The provided user is not a mutual contact',\n USER_PRIVACY_RESTRICTED: 'The user\\'s privacy settings do not allow you to do this',\n INVITE_HASH_EMPTY: 'The invite hash is empty',\n INVITE_HASH_EXPIRED: 'The invite link has expired',\n INVITE_HASH_INVALID: 'The invite hash is invalid',\n CHANNELS_TOO_MUCH: 'You have joined too many channels/supergroups',\n USER_ALREADY_PARTICIPANT: 'You already in the group',\n SCHEDULE_DATE_INVALID: 'Invalid schedule date provided',\n WALLPAPER_DIMENSIONS_INVALID: 'The wallpaper dimensions are invalid, please select another file',\n ADMINS_TOO_MUCH: 'There are too many admins',\n ADMIN_RANK_EMOJI_NOT_ALLOWED: 'An admin rank cannot contain emojis',\n ADMIN_RANK_INVALID: 'The specified admin rank is invalid',\n FRESH_CHANGE_ADMINS_FORBIDDEN: 'You were just elected admin, you can\\'t add or modify other admins yet',\n INPUT_USER_DEACTIVATED: 'The specified user was deleted',\n};\n\nexport const SHIPPING_ERRORS: Record = {\n ADDRESS_STREET_LINE1_INVALID: {\n field: 'streetLine1',\n message: 'Incorrect street address',\n },\n ADDRESS_STREET_LINE2_INVALID: {\n field: 'streetLine2',\n message: 'Incorrect street address',\n },\n ADDRESS_CITY_INVALID: {\n field: 'city',\n message: 'Incorrect city',\n },\n ADDRESS_COUNTRY_INVALID: {\n field: 'countryIso2',\n message: 'Incorrect country',\n },\n ADDRESS_POSTCODE_INVALID: {\n field: 'postCode',\n message: 'Incorrect post code',\n },\n ADDRESS_STATE_INVALID: {\n field: 'state',\n message: 'Incorrect state',\n },\n REQ_INFO_NAME_INVALID: {\n field: 'fullName',\n message: 'Incorrect name',\n },\n REQ_INFO_PHONE_INVALID: {\n field: 'phone',\n message: 'Incorrect phone',\n },\n REQ_INFO_EMAIL_INVALID: {\n field: 'email',\n message: 'Incorrect email',\n },\n};\n\nexport default function getReadableErrorText(error: ApiError) {\n const { message, isSlowMode, textParams } = error;\n // Currently, Telegram API doesn't return `SLOWMODE_WAIT_X` error as described in the docs\n if (isSlowMode) {\n const extraPartIndex = message.indexOf(' (caused by');\n return extraPartIndex > 0 ? message.substring(0, extraPartIndex) : message;\n }\n let errorMessage = READABLE_ERROR_MESSAGES[message];\n if (errorMessage && textParams) {\n errorMessage = Object.keys(textParams).reduce((acc, current) => {\n return acc.replace(current, textParams[current]);\n }, errorMessage as string);\n }\n return errorMessage;\n}\n\nexport function getShippingError(error: ApiError): ApiFieldError | undefined {\n return SHIPPING_ERRORS[error.message];\n}\n","import { DEBUG_ALERT_MSG } from '../config';\nimport { throttle } from './schedulers';\n\nwindow.addEventListener('error', handleErrorEvent);\nwindow.addEventListener('unhandledrejection', handleErrorEvent);\n\n// eslint-disable-next-line prefer-destructuring\nconst APP_ENV = process.env.APP_ENV;\n\nfunction handleErrorEvent(e: ErrorEvent | PromiseRejectionEvent) {\n // https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n return;\n }\n\n e.preventDefault();\n\n handleError(e instanceof ErrorEvent ? (e.error || e.message) : e.reason);\n}\n\nconst throttledAlert = throttle(window.alert, 1000);\n\nexport function handleError(err: Error) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (APP_ENV === 'development' || APP_ENV === 'staging') {\n throttledAlert(`${DEBUG_ALERT_MSG}\\n\\n${(err?.message) || err}\\n${err?.stack}`);\n }\n}\n","type CollectionByKey = Record;\n\ntype OrderDirection =\n 'asc'\n | 'desc';\n\ninterface OrderCallback {\n (member: T): any;\n}\n\nexport function buildCollectionByKey(collection: T[], key: keyof T) {\n return collection.reduce((byKey: CollectionByKey, member: T) => {\n byKey[member[key]] = member;\n\n return byKey;\n }, {});\n}\n\nexport function mapValues(\n byKey: CollectionByKey,\n callback: (member: M, key: string, index: number, originalByKey: CollectionByKey) => R,\n): CollectionByKey {\n return Object.keys(byKey).reduce((newByKey: CollectionByKey, key, index) => {\n newByKey[key] = callback(byKey[key], key, index, byKey);\n return newByKey;\n }, {});\n}\n\nexport function pick(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n result[key] = object[key];\n return result;\n }, {} as Pick);\n}\n\nexport function pickTruthy(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n if (object[key]) {\n result[key] = object[key];\n }\n\n return result;\n }, {} as Pick);\n}\n\nexport function omit(object: T, keys: K[]) {\n const stringKeys = new Set(keys.map(String));\n const savedKeys = Object.keys(object)\n .filter((key) => !stringKeys.has(key)) as Array>;\n\n return pick(object, savedKeys);\n}\n\nexport function orderBy(\n collection: T[],\n orderRule: (keyof T) | OrderCallback | ((keyof T) | OrderCallback)[],\n mode: OrderDirection | [OrderDirection, OrderDirection] = 'asc',\n): T[] {\n function compareValues(a: T, b: T, currentOrderRule: (keyof T) | OrderCallback, isAsc: boolean) {\n const aValue = (typeof currentOrderRule === 'function' ? currentOrderRule(a) : a[currentOrderRule]) || 0;\n const bValue = (typeof currentOrderRule === 'function' ? currentOrderRule(b) : b[currentOrderRule]) || 0;\n\n return isAsc ? aValue - bValue : bValue - aValue;\n }\n\n if (Array.isArray(orderRule)) {\n const [mode1, mode2] = Array.isArray(mode) ? mode : [mode, mode];\n const [orderRule1, orderRule2] = orderRule;\n const isAsc1 = mode1 === 'asc';\n const isAsc2 = mode2 === 'asc';\n\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule1, isAsc1) || compareValues(a, b, orderRule2, isAsc2);\n });\n }\n\n const isAsc = mode === 'asc';\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule, isAsc);\n });\n}\n\nexport function flatten(array: any[]) {\n return array.reduce((result, member) => {\n if (Array.isArray(member)) {\n return result.concat(member);\n } else {\n result.push(member);\n return result;\n }\n }, []);\n}\n\nexport function unique(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function compact(array: T[]) {\n return array.filter(Boolean);\n}\n\nexport function areSortedArraysEqual(array1: any[], array2: any[]) {\n if (array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((item, i) => item === array2[i]);\n}\n\nexport function areSortedArraysIntersecting(array1: any[], array2: any[]) {\n return array1[0] <= array2[array2.length - 1] && array1[array1.length - 1] >= array2[0];\n}\n\nexport function findIntersectionWithSet(array: T[], set: Set): T[] {\n return array.filter((a) => set.has(a));\n}\n\nexport function split(array: any[], chunkSize: number) {\n const result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nexport function cloneDeep(value: T): T {\n if (typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(cloneDeep) as typeof value;\n }\n\n return Object.keys(value).reduce((acc, key) => {\n acc[key as keyof T] = cloneDeep(value[key as keyof T]);\n return acc;\n }, {} as T);\n}\n\nexport function findLast(array: Array, predicate: (value: T, index: number, obj: T[]) => boolean): T | undefined {\n let cursor = array.length;\n\n while (cursor--) {\n if (predicate(array[cursor], cursor, array)) {\n return array[cursor];\n }\n }\n\n return undefined;\n}\n","import { getGlobal } from '../lib/teact/teactn';\n\nimport { ApiLangPack, ApiLangString } from '../api/types';\nimport { LangCode, TimeFormat } from '../types';\n\nimport {\n DEFAULT_LANG_CODE, DEFAULT_LANG_PACK, LANG_CACHE_NAME, LANG_PACKS,\n} from '../config';\nimport * as cacheApi from './cacheApi';\nimport { callApi } from '../api/gramjs';\nimport { createCallbackManager } from './callbacks';\nimport { formatInteger } from './textFormat';\n\ninterface LangFn {\n (key: string, value?: any, format?: 'i'): any;\n\n isRtl?: boolean;\n code?: LangCode;\n timeFormat?: TimeFormat;\n}\n\nconst SUBSTITUTION_REGEX = /%\\d?\\$?[sdf@]/g;\nconst PLURAL_OPTIONS = ['value', 'zeroValue', 'oneValue', 'twoValue', 'fewValue', 'manyValue', 'otherValue'] as const;\nconst PLURAL_RULES = {\n /* eslint-disable max-len */\n en: (n: number) => (n !== 1 ? 6 : 2),\n ar: (n: number) => (n === 0 ? 1 : n === 1 ? 2 : n === 2 ? 3 : n % 100 >= 3 && n % 100 <= 10 ? 4 : n % 100 >= 11 ? 5 : 6),\n ca: (n: number) => (n !== 1 ? 6 : 2),\n de: (n: number) => (n !== 1 ? 6 : 2),\n es: (n: number) => (n !== 1 ? 6 : 2),\n fa: (n: number) => (n > 1 ? 6 : 2),\n fr: (n: number) => (n > 1 ? 6 : 2),\n id: () => 0,\n it: (n: number) => (n !== 1 ? 6 : 2),\n ko: () => 0,\n ms: () => 0,\n nl: (n: number) => (n !== 1 ? 6 : 2),\n pl: (n: number) => (n === 1 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n pt_BR: (n: number) => (n > 1 ? 6 : 2),\n ru: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n tr: (n: number) => (n > 1 ? 6 : 2),\n uk: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n uz: (n: number) => (n > 1 ? 6 : 2),\n /* eslint-enable max-len */\n};\n\nconst cache = new Map();\n\nlet langPack: ApiLangPack | undefined;\nlet fallbackLangPack: ApiLangPack | undefined;\n\nconst {\n addCallback,\n removeCallback,\n runCallbacks,\n} = createCallbackManager();\n\nexport { addCallback, removeCallback };\n\nlet currentLangCode: string | undefined;\nlet currentTimeFormat: TimeFormat | undefined;\n\nexport const getTranslation: LangFn = (key: string, value?: any, format?: 'i') => {\n if (value !== undefined) {\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n const cached = cache.get(`${key}_${cacheValue}_${format}`);\n if (cached) {\n return cached;\n }\n }\n\n if (!langPack && !fallbackLangPack) {\n return key;\n }\n\n const langString = (langPack?.[key]) || (fallbackLangPack?.[key]);\n if (!langString) {\n if (!fallbackLangPack) {\n void importFallbackLangPack();\n }\n\n return key;\n }\n\n return processTranslation(langString, key, value, format);\n};\n\nexport async function getTranslationForLangString(langCode: string, key: string) {\n let translateString: ApiLangString | undefined = await cacheApi.fetch(\n LANG_CACHE_NAME,\n `${DEFAULT_LANG_PACK}_${langCode}_${key}`,\n cacheApi.Type.Json,\n );\n\n if (!translateString) {\n translateString = await fetchRemoteString(DEFAULT_LANG_PACK, langCode, key);\n }\n\n return processTranslation(translateString, key);\n}\n\nexport async function setLanguage(langCode: LangCode, callback?: NoneToVoidFunction, withFallback = false) {\n if (langPack && langCode === currentLangCode) {\n if (callback) {\n callback();\n }\n\n return;\n }\n\n let newLangPack = await cacheApi.fetch(LANG_CACHE_NAME, langCode, cacheApi.Type.Json);\n if (!newLangPack) {\n if (withFallback) {\n await importFallbackLangPack();\n }\n\n newLangPack = await fetchRemote(langCode);\n if (!newLangPack) {\n return;\n }\n }\n\n cache.clear();\n\n currentLangCode = langCode;\n langPack = newLangPack;\n document.documentElement.lang = langCode;\n\n const { languages, timeFormat } = getGlobal().settings.byKey;\n const langInfo = languages?.find((l) => l.langCode === langCode);\n getTranslation.isRtl = Boolean(langInfo?.rtl);\n getTranslation.code = langCode;\n getTranslation.timeFormat = timeFormat;\n\n if (callback) {\n callback();\n }\n\n runCallbacks();\n}\n\nexport function setTimeFormat(timeFormat: TimeFormat) {\n if (timeFormat && timeFormat === currentTimeFormat) {\n return;\n }\n\n currentTimeFormat = timeFormat;\n getTranslation.timeFormat = timeFormat;\n\n runCallbacks();\n}\n\nasync function importFallbackLangPack() {\n if (fallbackLangPack) {\n return;\n }\n\n fallbackLangPack = (await import('./fallbackLangPack')).default;\n runCallbacks();\n}\n\nasync function fetchRemote(langCode: string): Promise {\n const remote = await callApi('fetchLangPack', { sourceLangPacks: LANG_PACKS, langCode });\n if (remote) {\n await cacheApi.save(LANG_CACHE_NAME, langCode, remote.langPack);\n return remote.langPack;\n }\n\n return undefined;\n}\n\nasync function fetchRemoteString(\n remoteLangPack: typeof LANG_PACKS[number], langCode: string, key: string,\n): Promise {\n const remote = await callApi('fetchLangStrings', {\n langPack: remoteLangPack,\n langCode,\n keys: [key],\n });\n\n if (remote?.length) {\n await cacheApi.save(LANG_CACHE_NAME, `${remoteLangPack}_${langCode}_${key}`, remote[0]);\n\n return remote[0];\n }\n\n return undefined;\n}\n\nfunction getPluralOption(amount: number) {\n const langCode = currentLangCode || DEFAULT_LANG_CODE;\n const optionIndex = PLURAL_RULES[langCode as keyof typeof PLURAL_RULES]\n ? PLURAL_RULES[langCode as keyof typeof PLURAL_RULES](amount)\n : 0;\n\n return PLURAL_OPTIONS[optionIndex];\n}\n\nfunction processTemplate(template: string, value: any) {\n value = Array.isArray(value) ? value : [value];\n const translationSlices = template.split(SUBSTITUTION_REGEX);\n const initialValue = translationSlices.shift();\n\n return translationSlices.reduce((result, str, index) => {\n return `${result}${String(value[index] || '')}${str}`;\n }, initialValue || '');\n}\n\nfunction processTranslation(langString: ApiLangString | undefined, key: string, value?: any, format?: 'i') {\n const template = langString ? langString[typeof value === 'number' ? getPluralOption(value) : 'value'] : undefined;\n if (!template || !template.trim()) {\n const parts = key.split('.');\n\n return parts[parts.length - 1];\n }\n\n if (value !== undefined) {\n const formattedValue = format === 'i' ? formatInteger(value) : value;\n const result = processTemplate(template, formattedValue);\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n cache.set(`${key}_${cacheValue}_${format}`, result);\n return result;\n }\n\n return template;\n}\n","const SAMPLE_RATE = 48000;\nconst BIT_DEPTH = 16;\n\nexport async function oggToWav(opusData: Blob): Promise {\n const arrayBuffer = await new Response(opusData).arrayBuffer();\n\n return new Promise((resolve) => {\n const typedArray = new Uint8Array(arrayBuffer);\n\n let decoderWorker: Worker | undefined = new Worker(\n new URL('opus-recorder/dist/decoderWorker.min.js', import.meta.url),\n );\n let wavWorker: Worker | undefined = new Worker(new URL('opus-recorder/dist/waveWorker.min.js', import.meta.url));\n\n decoderWorker.onmessage = (e) => {\n // eslint-disable-next-line no-null/no-null\n if (e.data === null) {\n // `null` means decoder is finished\n wavWorker!.postMessage({ command: 'done' });\n } else {\n // `e.data` contains decoded buffers as float32 values\n wavWorker!.postMessage(\n {\n command: 'encode',\n buffers: e.data,\n },\n e.data.map(({ buffer }: Float32Array) => buffer),\n );\n }\n };\n\n wavWorker.onmessage = (e) => {\n if (e.data.message === 'page') {\n resolve(new Blob([e.data.page], { type: 'audio/wav' }));\n\n decoderWorker!.terminate();\n decoderWorker = undefined;\n wavWorker!.terminate();\n wavWorker = undefined;\n }\n };\n\n wavWorker.postMessage({\n command: 'init',\n wavBitDepth: BIT_DEPTH,\n wavSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'init',\n decoderSampleRate: SAMPLE_RATE,\n outputBufferSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'decode',\n pages: typedArray,\n }, [typedArray.buffer]);\n });\n}\n","import {\n ApiMediaFormat,\n ApiOnProgress,\n ApiParsedMedia,\n ApiPreparedMedia,\n} from '../api/types';\n\nimport {\n DEBUG, MEDIA_CACHE_DISABLED, MEDIA_CACHE_NAME, MEDIA_CACHE_NAME_AVATARS,\n} from '../config';\nimport { callApi, cancelApiProgress } from '../api/gramjs';\nimport * as cacheApi from './cacheApi';\nimport { fetchBlob } from './files';\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, isWebpSupported } from './environment';\nimport { oggToWav } from './oggToWav';\nimport { webpToPng } from './webpToPng';\n\nconst asCacheApiType = {\n [ApiMediaFormat.BlobUrl]: cacheApi.Type.Blob,\n [ApiMediaFormat.Lottie]: cacheApi.Type.Blob,\n [ApiMediaFormat.Progressive]: undefined,\n [ApiMediaFormat.Stream]: undefined,\n};\n\nconst PROGRESSIVE_URL_PREFIX = './progressive/';\n\nconst memoryCache = new Map();\nconst fetchPromises = new Map>();\nconst progressCallbacks = new Map>();\nconst cancellableCallbacks = new Map();\n\nexport function fetch(\n url: string,\n mediaFormat: T,\n isHtmlAllowed = false,\n onProgress?: ApiOnProgress,\n callbackUniqueId?: string,\n): Promise {\n if (mediaFormat === ApiMediaFormat.Progressive) {\n return (\n IS_PROGRESSIVE_SUPPORTED\n ? getProgressive(url)\n : fetch(url, ApiMediaFormat.BlobUrl, isHtmlAllowed, onProgress, callbackUniqueId)\n ) as Promise;\n }\n\n if (!fetchPromises.has(url)) {\n const promise = fetchFromCacheOrRemote(url, mediaFormat, isHtmlAllowed)\n .catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err);\n }\n\n return undefined;\n })\n .finally(() => {\n fetchPromises.delete(url);\n progressCallbacks.delete(url);\n cancellableCallbacks.delete(url);\n });\n\n fetchPromises.set(url, promise);\n }\n\n if (onProgress && callbackUniqueId) {\n let activeCallbacks = progressCallbacks.get(url);\n if (!activeCallbacks) {\n activeCallbacks = new Map();\n progressCallbacks.set(url, activeCallbacks);\n }\n activeCallbacks.set(callbackUniqueId, onProgress);\n }\n\n return fetchPromises.get(url) as Promise;\n}\n\nexport function getFromMemory(url: string) {\n return memoryCache.get(url) as ApiPreparedMedia;\n}\n\nexport function cancelProgress(progressCallback: ApiOnProgress) {\n progressCallbacks.forEach((map, url) => {\n map.forEach((callback) => {\n if (callback === progressCallback) {\n const parentCallback = cancellableCallbacks.get(url);\n if (!parentCallback) return;\n\n cancelApiProgress(parentCallback);\n cancellableCallbacks.delete(url);\n progressCallbacks.delete(url);\n }\n });\n });\n}\n\nexport function removeCallback(url: string, callbackUniqueId: string) {\n const callbacks = progressCallbacks.get(url);\n if (!callbacks) return;\n callbacks.delete(callbackUniqueId);\n}\n\nfunction getProgressive(url: string) {\n const progressiveUrl = `${PROGRESSIVE_URL_PREFIX}${url}`;\n\n memoryCache.set(url, progressiveUrl);\n\n return Promise.resolve(progressiveUrl);\n}\n\nasync function fetchFromCacheOrRemote(\n url: string, mediaFormat: ApiMediaFormat, isHtmlAllowed: boolean,\n) {\n if (!MEDIA_CACHE_DISABLED) {\n const cacheName = url.startsWith('avatar') ? MEDIA_CACHE_NAME_AVATARS : MEDIA_CACHE_NAME;\n const cached = await cacheApi.fetch(cacheName, url, asCacheApiType[mediaFormat]!, isHtmlAllowed);\n\n if (cached) {\n let media = cached;\n\n if (cached.type === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n media = await oggToWav(media);\n }\n\n if (cached.type === 'image/webp' && !isWebpSupported() && media) {\n const mediaPng = await webpToPng(url, media);\n if (mediaPng) {\n media = mediaPng;\n }\n }\n\n const prepared = prepareMedia(media);\n\n memoryCache.set(url, prepared);\n\n return prepared;\n }\n }\n\n if (mediaFormat === ApiMediaFormat.Stream) {\n const mediaSource = new MediaSource();\n const streamUrl = URL.createObjectURL(mediaSource);\n let isOpen = false;\n\n mediaSource.addEventListener('sourceopen', () => {\n if (isOpen) {\n return;\n }\n isOpen = true;\n\n const sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');\n\n const onProgress = makeOnProgress(url, mediaSource, sourceBuffer);\n cancellableCallbacks.set(url, onProgress);\n\n void callApi('downloadMedia', { url, mediaFormat }, onProgress);\n });\n\n memoryCache.set(url, streamUrl);\n return streamUrl;\n }\n\n const onProgress = makeOnProgress(url);\n cancellableCallbacks.set(url, onProgress);\n\n const remote = await callApi('downloadMedia', { url, mediaFormat, isHtmlAllowed }, onProgress);\n if (!remote) {\n throw new Error(`Failed to fetch media ${url}`);\n }\n\n let { prepared, mimeType } = remote;\n\n if (mimeType === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await oggToWav(blob);\n prepared = prepareMedia(media);\n mimeType = media.type;\n }\n\n if (mimeType === 'image/webp' && !isWebpSupported()) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await webpToPng(url, blob);\n if (media) {\n prepared = prepareMedia(media);\n }\n }\n\n memoryCache.set(url, prepared);\n\n return prepared;\n}\n\nfunction makeOnProgress(url: string, mediaSource?: MediaSource, sourceBuffer?: SourceBuffer) {\n const onProgress: ApiOnProgress = (progress: number, arrayBuffer: ArrayBuffer) => {\n progressCallbacks.get(url)?.forEach((callback) => {\n callback(progress);\n if (callback.isCanceled) onProgress.isCanceled = true;\n });\n\n if (progress === 1) {\n mediaSource?.endOfStream();\n }\n\n if (!arrayBuffer) {\n return;\n }\n\n sourceBuffer?.appendBuffer(arrayBuffer);\n };\n\n return onProgress;\n}\n\nfunction prepareMedia(mediaData: Exclude): ApiPreparedMedia {\n if (mediaData instanceof Blob) {\n return URL.createObjectURL(mediaData);\n }\n\n return mediaData;\n}\n\nif (IS_PROGRESSIVE_SUPPORTED) {\n navigator.serviceWorker.addEventListener('message', async (e) => {\n const { type, messageId, params } = e.data as {\n type: string;\n messageId: string;\n params: { url: string; start: number; end: number };\n };\n\n if (type !== 'requestPart') {\n return;\n }\n\n const result = await callApi('downloadMedia', { mediaFormat: ApiMediaFormat.Progressive, ...params });\n if (!result) {\n return;\n }\n\n const { arrayBuffer, mimeType, fullSize } = result;\n\n navigator.serviceWorker.controller!.postMessage({\n type: 'partResponse',\n messageId,\n result: {\n arrayBuffer,\n mimeType,\n fullSize,\n },\n }, [arrayBuffer!]);\n });\n}\n","export const MEMO_EMPTY_ARRAY = [];\n","import { DEBUG } from '../config';\nimport { createCallbackManager } from './callbacks';\n\nexport enum Bundles {\n Auth,\n Main,\n Extra,\n Calls,\n}\n\ninterface ImportedBundles {\n [Bundles.Auth]: typeof import('../bundles/auth');\n [Bundles.Main]: typeof import('../bundles/main');\n [Bundles.Extra]: typeof import('../bundles/extra');\n [Bundles.Calls]: typeof import('../bundles/calls');\n}\n\ntype BundlePromises = {\n [K in keyof ImportedBundles]: Promise\n};\n\nexport type BundleModules = keyof ImportedBundles[B];\n\nconst LOAD_PROMISES: Partial = {};\nconst MEMORY_CACHE: Partial = {};\n\nconst { addCallback, runCallbacks } = createCallbackManager();\n\nexport async function loadModule>(bundleName: B, moduleName: M) {\n if (!LOAD_PROMISES[bundleName]) {\n switch (bundleName) {\n case Bundles.Auth:\n LOAD_PROMISES[Bundles.Auth] = import('../bundles/auth');\n break;\n case Bundles.Main:\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD MAIN BUNDLE');\n }\n\n LOAD_PROMISES[Bundles.Main] = import('../bundles/main');\n break;\n case Bundles.Extra:\n LOAD_PROMISES[Bundles.Extra] = import('../bundles/extra');\n break;\n case Bundles.Calls:\n LOAD_PROMISES[Bundles.Calls] = import('../bundles/calls');\n break;\n }\n\n (LOAD_PROMISES[bundleName] as Promise).then(runCallbacks);\n }\n\n const bundle = (await LOAD_PROMISES[bundleName]) as unknown as ImportedBundles[B];\n\n if (!MEMORY_CACHE[bundleName]) {\n MEMORY_CACHE[bundleName] = bundle;\n }\n\n return getModuleFromMemory(bundleName, moduleName);\n}\n\nexport function getModuleFromMemory>(bundleName: B, moduleName: M) {\n const bundle = MEMORY_CACHE[bundleName] as ImportedBundles[B];\n\n if (!bundle) {\n return undefined;\n }\n\n return bundle[moduleName];\n}\n\nexport const addLoadListener = addCallback;\n","import { callApi } from '../api/gramjs';\nimport { ApiChat, ApiMediaFormat, ApiMessage, ApiUser, ApiUserReaction } from '../api/types';\nimport { renderActionMessageText } from '../components/common/helpers/renderActionMessageText';\nimport { DEBUG, IS_TEST } from '../config';\nimport { getDispatch, getGlobal, setGlobal } from '../lib/teact/teactn';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getMessageAction,\n getMessageRecentReaction,\n getMessageSenderName,\n getMessageSummaryText,\n getPrivateChatUserId,\n isActionMessage,\n isChatChannel,\n selectIsChatMuted,\n selectShouldShowMessagePreview,\n} from '../modules/helpers';\nimport { addNotifyExceptions, replaceSettings } from '../modules/reducers';\nimport {\n selectChatMessage,\n selectCurrentMessageList,\n selectNotifyExceptions,\n selectNotifySettings,\n selectUser,\n} from '../modules/selectors';\nimport { IS_SERVICE_WORKER_SUPPORTED, IS_TOUCH_ENV } from './environment';\nimport { getTranslation } from './langProvider';\nimport * as mediaLoader from './mediaLoader';\nimport { debounce } from './schedulers';\n\nfunction getDeviceToken(subscription: PushSubscription) {\n const data = subscription.toJSON();\n return JSON.stringify({\n endpoint: data.endpoint,\n keys: data.keys,\n });\n}\n\nfunction checkIfPushSupported() {\n if (!IS_SERVICE_WORKER_SUPPORTED) return false;\n if (!('showNotification' in ServiceWorkerRegistration.prototype)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push notifications aren\\'t supported.');\n }\n return false;\n }\n\n // Check the current Notification permission.\n // If its denied, it's a permanent block until the\n // user changes the permission\n if (Notification.permission === 'denied') {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n\n // Check if push messaging is supported\n if (!('PushManager' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push messaging isn\\'t supported.');\n }\n return false;\n }\n return true;\n}\n\nfunction checkIfNotificationsSupported() {\n // Let's check if the browser supports notifications\n if (!('Notification' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] This browser does not support desktop notification');\n }\n return false;\n }\n\n if (Notification.permission === 'denied' as NotificationPermission) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n return true;\n}\n\nconst expirationTime = 12 * 60 * 60 * 1000; // 12 hours\n// Notification id is removed from soundPlayed cache after 3 seconds\nconst soundPlayedDelay = 3 * 1000;\nconst soundPlayedIds = new Set();\n\nexport async function playNotifySound(id?: string, volume?: number) {\n if (id !== undefined && soundPlayedIds.has(id)) return;\n const { notificationSoundVolume } = selectNotifySettings(getGlobal());\n const currentVolume = volume ? volume / 10 : notificationSoundVolume / 10;\n if (currentVolume === 0) return;\n\n const audio = new Audio('./notification.mp3');\n audio.volume = currentVolume;\n audio.setAttribute('mozaudiochannel', 'notification');\n if (id !== undefined) {\n audio.addEventListener('ended', () => {\n soundPlayedIds.add(id);\n }, { once: true });\n\n setTimeout(() => {\n soundPlayedIds.delete(id);\n }, soundPlayedDelay);\n }\n\n try {\n await audio.play();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Unable to play notification sound');\n }\n }\n}\n\nexport const playNotifySoundDebounced = debounce(playNotifySound, 1000, true, false);\n\nfunction checkIfShouldResubscribe(subscription: PushSubscription | null) {\n const global = getGlobal();\n if (!global.push || !subscription) return true;\n if (getDeviceToken(subscription) !== global.push.deviceToken) return true;\n return Date.now() - global.push.subscribedAt > expirationTime;\n}\n\nasync function requestPermission() {\n if (!('Notification' in window)) return;\n if (!['granted', 'denied'].includes(Notification.permission)) {\n await Notification.requestPermission();\n }\n}\n\nasync function unsubscribeFromPush(subscription: PushSubscription | null) {\n const global = getGlobal();\n const dispatch = getDispatch();\n if (subscription) {\n try {\n const deviceToken = getDeviceToken(subscription);\n await callApi('unregisterDevice', deviceToken);\n await subscription.unsubscribe();\n dispatch.deleteDeviceToken();\n return;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to unsubscribe from push.', error);\n }\n }\n }\n if (global.push) {\n await callApi('unregisterDevice', global.push.deviceToken);\n dispatch.deleteDeviceToken();\n }\n}\n\nexport async function unsubscribe() {\n if (!checkIfPushSupported()) return;\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n const subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n await unsubscribeFromPush(subscription);\n}\n\n// Indicates if notification settings are loaded from the api\nlet areSettingsLoaded = false;\n\n// Load notification settings from the api\nasync function loadNotificationSettings() {\n if (areSettingsLoaded) return selectNotifySettings(getGlobal());\n const [resultSettings, resultExceptions] = await Promise.all([\n callApi('fetchNotificationSettings', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n callApi('fetchNotificationExceptions', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n ]);\n if (!resultSettings) return selectNotifySettings(getGlobal());\n\n let global = replaceSettings(getGlobal(), resultSettings);\n if (resultExceptions) {\n global = addNotifyExceptions(global, resultExceptions);\n }\n setGlobal(global);\n areSettingsLoaded = true;\n return selectNotifySettings(global);\n}\n\nexport async function subscribe() {\n if (!checkIfPushSupported()) {\n // Ask for notification permissions only if service worker notifications are not supported\n // As pushManager.subscribe automatically triggers permission popup\n await requestPermission();\n return;\n }\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n let subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n if (!checkIfShouldResubscribe(subscription)) return;\n await unsubscribeFromPush(subscription);\n try {\n subscription = await serviceWorkerRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n });\n const deviceToken = getDeviceToken(subscription);\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Received push subscription: ', deviceToken);\n }\n await callApi('registerDevice', deviceToken);\n getDispatch()\n .setDeviceToken(deviceToken);\n } catch (error: any) {\n if (Notification.permission === 'denied' as NotificationPermission) {\n // The user denied the notification permission which\n // means we failed to subscribe and the user will need\n // to manually change the notification permission to\n // subscribe to push messages\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n } else if (DEBUG) {\n // A problem occurred with the subscription, this can\n // often be down to an issue or lack of the gcm_sender_id\n // and / or gcm_user_visible_only\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to subscribe to push.', error);\n\n // Request permissions and fall back to local notifications\n // if pushManager.subscribe was aborted due to invalid VAPID key.\n if (error.code === DOMException.ABORT_ERR) {\n await requestPermission();\n }\n }\n }\n}\n\nfunction checkIfShouldNotify(chat: ApiChat) {\n if (!areSettingsLoaded) return false;\n const global = getGlobal();\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n if (isMuted || chat.isNotJoined || !chat.isListed) {\n return false;\n }\n // On touch devices show notifications when chat is not active\n if (IS_TOUCH_ENV) {\n const {\n chatId,\n type,\n } = selectCurrentMessageList(global) || {};\n return !(chatId === chat.id && type === 'thread');\n }\n // On desktop show notifications when window is not focused\n return !document.hasFocus();\n}\n\nfunction getNotificationContent(chat: ApiChat, message: ApiMessage, reaction?: ApiUserReaction) {\n const global = getGlobal();\n let {\n senderId,\n replyToMessageId,\n } = message;\n if (reaction) senderId = reaction.userId;\n\n const messageSender = senderId ? selectUser(global, senderId) : undefined;\n const messageAction = getMessageAction(message as ApiMessage);\n const actionTargetMessage = messageAction && replyToMessageId\n ? selectChatMessage(global, chat.id, replyToMessageId)\n : undefined;\n const {\n targetUserIds: actionTargetUserIds,\n targetChatId: actionTargetChatId,\n } = messageAction || {};\n\n const actionTargetUsers = actionTargetUserIds\n ? actionTargetUserIds.map((userId) => selectUser(global, userId))\n .filter(Boolean as any)\n : undefined;\n const privateChatUserId = getPrivateChatUserId(chat);\n const privateChatUser = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n\n let body: string;\n if (selectShouldShowMessagePreview(chat, selectNotifySettings(global), selectNotifyExceptions(global))) {\n if (isActionMessage(message)) {\n const isChat = chat && (isChatChannel(chat) || message.senderId === message.chatId);\n\n body = renderActionMessageText(\n getTranslation,\n message,\n !isChat ? messageSender : undefined,\n isChat ? chat : undefined,\n actionTargetUsers,\n actionTargetMessage,\n actionTargetChatId,\n { asPlainText: true },\n ) as string;\n } else {\n const senderName = getMessageSenderName(getTranslation, chat.id, messageSender);\n const summary = getMessageSummaryText(getTranslation, message, false, 60, false);\n\n body = senderName ? `${senderName}: ${summary}` : summary;\n }\n } else {\n body = 'New message';\n }\n\n return {\n title: getChatTitle(getTranslation, chat, privateChatUser),\n body,\n };\n}\n\nasync function getAvatar(chat: ApiChat) {\n const imageHash = getChatAvatarHash(chat);\n if (!imageHash) return undefined;\n let mediaData = mediaLoader.getFromMemory(imageHash);\n if (!mediaData) {\n await mediaLoader.fetch(imageHash, ApiMediaFormat.BlobUrl);\n mediaData = mediaLoader.getFromMemory(imageHash);\n }\n return mediaData;\n}\n\nexport async function notifyAboutMessage({\n chat,\n message,\n}: { chat: ApiChat; message: Partial }) {\n const { hasWebNotifications } = await loadNotificationSettings();\n if (!checkIfShouldNotify(chat)) return;\n const areNotificationsSupported = checkIfNotificationsSupported();\n if (!hasWebNotifications || !areNotificationsSupported) {\n // only play sound if web notifications are disabled\n playNotifySoundDebounced(String(message.id) || chat.id);\n return;\n }\n if (!areNotificationsSupported) return;\n\n if (!message.id) return;\n\n const activeReaction = getMessageRecentReaction(message);\n const icon = await getAvatar(chat);\n\n const {\n title,\n body,\n } = getNotificationContent(chat, message as ApiMessage, activeReaction);\n\n if (checkIfPushSupported()) {\n if (navigator.serviceWorker?.controller) {\n // notify service worker about new message notification\n navigator.serviceWorker.controller.postMessage({\n type: 'showMessageNotification',\n payload: {\n title,\n body,\n icon,\n chatId: chat.id,\n messageId: message.id,\n reaction: activeReaction ? activeReaction.reaction : undefined,\n },\n });\n }\n } else {\n const dispatch = getDispatch();\n const options: NotificationOptions = {\n body,\n icon,\n badge: icon,\n tag: String(message.id),\n };\n\n if ('vibrate' in navigator) {\n options.vibrate = [200, 100, 200];\n }\n\n const notification = new Notification(title, options);\n\n notification.onclick = () => {\n notification.close();\n dispatch.focusMessage({\n chatId: chat.id,\n messageId: message.id,\n });\n if (activeReaction) {\n dispatch.startActiveReaction({\n messageId: message.id,\n reaction: activeReaction.reaction,\n });\n }\n if (window.focus) {\n window.focus();\n }\n };\n\n // Play sound when notification is displayed\n notification.onshow = () => {\n playNotifySoundDebounced(String(message.id) || chat.id);\n };\n }\n}\n\nexport function closeMessageNotifications(payload: { chatId: string; lastReadInboxMessageId?: number }) {\n if (IS_TEST || !navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'closeMessageNotifications',\n payload,\n });\n}\n\n// Notify service worker that client is fully loaded\nexport function notifyClientReady() {\n if (!navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'clientReady',\n });\n}\n","const PERMANENT_VERSION_KEY = 'kz_version';\nconst AVAILABLE_VERSIONS = ['Z', 'K'] as const;\nconst DEFAULT_VERSION = 'Z';\n\nexport function setPermanentWebVersion(version: typeof AVAILABLE_VERSIONS[number]) {\n localStorage.setItem(PERMANENT_VERSION_KEY, JSON.stringify(version));\n}\n\nexport function ensurePermanentWebVersion() {\n if (!hasPermanentWebVersion()) {\n setPermanentWebVersion(DEFAULT_VERSION);\n }\n}\n\nfunction hasPermanentWebVersion() {\n const json = localStorage.getItem(PERMANENT_VERSION_KEY);\n if (!json) {\n return false;\n }\n\n try {\n const version = JSON.parse(json);\n return AVAILABLE_VERSIONS.includes(version);\n } catch (err) {\n return false;\n }\n}\n","import { ApiCountryCode } from '../api/types';\nimport { flatten } from './iteratees';\n\nconst PATTERN_PLACEHOLDER = 'X';\nconst DEFAULT_PATTERN = 'XXX XXX XXX XXX';\n\nexport function getCountryCodesByIso(phoneCodeList: ApiCountryCode[], iso: string) {\n return phoneCodeList.filter((country) => country.iso2 === iso);\n}\n\nexport function getCountryFromPhoneNumber(phoneCodeList: ApiCountryCode[], input = '') {\n let phoneNumber = input.replace(/[^\\d+]+/g, '');\n if (phoneNumber.startsWith('+')) {\n phoneNumber = phoneNumber.substr(1);\n }\n\n const possibleCountries = phoneCodeList\n .filter((country) => phoneNumber.startsWith(country.countryCode));\n const codesWithPrefix: { code: string; country: ApiCountryCode }[] = flatten(possibleCountries\n .map((country) => (country.prefixes || ['']).map((prefix) => {\n return {\n code: `${country.countryCode}${prefix}`,\n country,\n };\n })));\n\n const bestMatches = codesWithPrefix\n .filter(({ code }) => phoneNumber.startsWith(code))\n .sort((a, b) => a.code.length - b.code.length);\n\n return bestMatches[bestMatches.length - 1]?.country;\n}\n\nexport function formatPhoneNumber(input: string, country?: ApiCountryCode) {\n let phoneNumber = input.replace(/[^\\d]+/g, '');\n if (country) {\n phoneNumber = phoneNumber.substr(country.countryCode.length);\n } else if (input.startsWith('+')) {\n return input;\n }\n const pattern = getBestPattern(phoneNumber, country?.patterns);\n\n const result: string[] = []; // Result character array\n let j = 0; // Position inside pattern\n for (let i = 0; i < phoneNumber.length; i++) {\n while (pattern[j] !== PATTERN_PLACEHOLDER && j < pattern.length) {\n result.push(pattern[j]);\n if (pattern[j] === phoneNumber[i]) { // If pattern contains digits, move input position too\n i++;\n if (i === phoneNumber.length) break; // But don't overdo it, or it will insert full pattern unexpectedly\n }\n j++;\n }\n\n result.push(phoneNumber[i]); // For placeholder characters, setting current input digit\n j++;\n }\n\n return result.join('');\n}\n\nfunction getBestPattern(numberWithoutCode: string, patterns?: string[]) {\n if (!patterns || patterns.length === 0) return DEFAULT_PATTERN;\n if (patterns.length === 1) return patterns[0];\n\n const defaultPattern = patterns.find((pattern) => pattern.startsWith(PATTERN_PLACEHOLDER)) || DEFAULT_PATTERN;\n\n const bestMatches = patterns.filter((pattern) => {\n const stripped = pattern.replace(/[^\\dX]+/g, '');\n if (stripped.startsWith(PATTERN_PLACEHOLDER)) return false; // Don't consider default number format here\n for (let i = 0; i < numberWithoutCode.length; i++) {\n if (i > stripped.length - 1 || (stripped[i] !== PATTERN_PLACEHOLDER && stripped[i] !== numberWithoutCode[i])) {\n return false;\n }\n }\n return true;\n });\n\n // Playing it safe: if not sure, use default for that region\n return bestMatches.length === 1 ? bestMatches[0] : defaultPattern;\n}\n\nexport function formatPhoneNumberWithCode(phoneCodeList: ApiCountryCode[], phoneNumber: string) {\n const numberWithPlus = phoneNumber.startsWith('+') ? phoneNumber : `+${phoneNumber}`;\n const country = getCountryFromPhoneNumber(phoneCodeList, numberWithPlus);\n if (!country) {\n return numberWithPlus;\n }\n return `+${country.countryCode} ${formatPhoneNumber(numberWithPlus, country)}`;\n}\n","import { MessageList, MessageListType } from '../global/types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { LOCATION_HASH } from '../hooks/useHistoryBack';\n\nexport function createMessageHash(messageList: MessageList) {\n const typeOrThreadId = messageList.type !== 'thread' ? (\n `_${messageList.type}`\n ) : messageList.threadId !== -1 ? (\n `_${messageList.threadId}`\n ) : '';\n\n return `${messageList.chatId}${typeOrThreadId}`;\n}\n\nexport function parseLocationHash() {\n if (!LOCATION_HASH) return undefined;\n\n const [chatId, typeOrThreadId] = LOCATION_HASH.replace(/^#/, '').split('_');\n if (!chatId?.match(/^-?\\d+$/)) return undefined;\n\n const isType = ['thread', 'pinned', 'scheduled'].includes(typeOrThreadId);\n\n return {\n chatId,\n type: Boolean(typeOrThreadId) && isType ? (typeOrThreadId as MessageListType) : 'thread',\n threadId: Boolean(typeOrThreadId) && !isType ? Number(typeOrThreadId) : MAIN_THREAD_ID,\n };\n}\n","type Scheduler =\n typeof requestAnimationFrame\n | typeof onTickEnd\n | typeof runNow;\n\nexport function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true,\n) {\n let waitingTimeout: number | undefined;\n\n return (...args: Parameters) => {\n if (waitingTimeout) {\n clearTimeout(waitingTimeout);\n waitingTimeout = undefined;\n } else if (shouldRunFirst) {\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n waitingTimeout = self.setTimeout(() => {\n if (shouldRunLast) {\n fn(...args);\n }\n\n waitingTimeout = undefined;\n }, ms);\n };\n}\n\nexport function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n) {\n let interval: number | undefined;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if (!interval) {\n if (shouldRunFirst) {\n isPending = false;\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n interval = self.setInterval(() => {\n if (!isPending) {\n // eslint-disable-next-line no-restricted-globals\n self.clearInterval(interval!);\n interval = undefined;\n return;\n }\n\n isPending = false;\n fn(...args);\n }, ms);\n }\n };\n}\n\nexport function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n\nexport function throttleWithPrimaryRaf(fn: F) {\n return throttleWith(fastRafPrimary, fn);\n}\n\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function throttleWith(schedulerFn: Scheduler, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n fn(...args);\n });\n }\n };\n}\n\nexport function onIdle(cb: NoneToVoidFunction, timeout?: number) {\n // eslint-disable-next-line no-restricted-globals\n if (self.requestIdleCallback) {\n // eslint-disable-next-line no-restricted-globals\n self.requestIdleCallback(cb, { timeout });\n } else {\n onTickEnd(cb);\n }\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n}\n\nexport const pause = (ms: number) => new Promise((resolve) => {\n setTimeout(() => resolve(), ms);\n});\n\nexport function rafPromise() {\n return new Promise((resolve) => {\n fastRaf(resolve);\n });\n}\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nlet fastRafPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\n// May result in an immediate execution if called from another `requestAnimationFrame` callback\nexport function fastRaf(callback: NoneToVoidFunction, isPrimary = false) {\n if (!fastRafCallbacks) {\n fastRafCallbacks = isPrimary ? [] : [callback];\n fastRafPrimaryCallbacks = isPrimary ? [callback] : [];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n const currentPrimaryCallbacks = fastRafPrimaryCallbacks!;\n fastRafCallbacks = undefined;\n fastRafPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n fastRafPrimaryCallbacks!.push(callback);\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nexport function fastRafPrimary(callback: NoneToVoidFunction) {\n fastRaf(callback, true);\n}\n\nlet onTickEndCallbacks: NoneToVoidFunction[] | undefined;\nlet onTickEndPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onTickEnd(callback: NoneToVoidFunction, isPrimary = false) {\n if (!onTickEndCallbacks) {\n onTickEndCallbacks = isPrimary ? [] : [callback];\n onTickEndPrimaryCallbacks = isPrimary ? [callback] : [];\n\n Promise.resolve().then(() => {\n const currentCallbacks = onTickEndCallbacks!;\n const currentPrimaryCallbacks = onTickEndPrimaryCallbacks!;\n onTickEndCallbacks = undefined;\n onTickEndPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n onTickEndPrimaryCallbacks!.push(callback);\n } else {\n onTickEndCallbacks.push(callback);\n }\n}\n\nexport function onTickEndPrimary(callback: NoneToVoidFunction) {\n onTickEnd(callback, true);\n}\n\nlet beforeUnloadCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onBeforeUnload(callback: NoneToVoidFunction, isLast = false) {\n if (!beforeUnloadCallbacks) {\n beforeUnloadCallbacks = [];\n // eslint-disable-next-line no-restricted-globals\n self.addEventListener('beforeunload', () => {\n beforeUnloadCallbacks!.forEach((cb) => cb());\n });\n }\n\n if (isLast) {\n beforeUnloadCallbacks.push(callback);\n } else {\n beforeUnloadCallbacks.unshift(callback);\n }\n\n return () => {\n beforeUnloadCallbacks = beforeUnloadCallbacks!.filter((cb) => cb !== callback);\n };\n}\n","let RE_NOT_LETTER: RegExp;\n\ntry {\n RE_NOT_LETTER = new RegExp('[^\\\\p{L}\\\\p{M}]+', 'ui');\n} catch (e) {\n // Support for older versions of firefox\n RE_NOT_LETTER = new RegExp('[^\\\\wа-яё]+', 'i');\n}\n\nexport default function searchWords(haystack: string, needle: string | string[]) {\n if (!haystack || !needle) {\n return false;\n }\n\n const needleWords = typeof needle === 'string' ? needle.toLowerCase().split(RE_NOT_LETTER) : needle;\n const haystackLower = haystack.toLowerCase();\n\n // @optimization\n if (needleWords.length === 1 && !haystackLower.includes(needleWords[0])) {\n return false;\n }\n\n let haystackWords: string[];\n\n return needleWords.every((needleWord) => {\n if (!haystackLower.includes(needleWord)) {\n return false;\n }\n\n if (!haystackWords) {\n haystackWords = haystackLower.split(RE_NOT_LETTER);\n }\n\n return haystackWords.some((haystackWord) => haystackWord.startsWith(needleWord));\n });\n}\n\nexport function prepareSearchWordsForNeedle(needle: string) {\n const needleWords = needle.toLowerCase().split(RE_NOT_LETTER);\n\n return (haystack: string) => searchWords(haystack, needleWords);\n}\n","export const getServerTime = (serverTimeOffset: number) => {\n return Math.floor(Date.now() / 1000) + serverTimeOffset;\n};\n","import safariFix from 'safari-14-idb-fix';\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const dbp = safariFix().then(() => {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n return promisifyRequest(request);\n });\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import * as idb from 'idb-keyval';\n\nimport { ApiSessionData } from '../api/types';\n\nimport { DEBUG, LEGACY_SESSION_KEY, SESSION_USER_KEY } from '../config';\nimport * as cacheApi from './cacheApi';\n\nconst DC_IDS = [1, 2, 3, 4, 5];\n\nexport function hasStoredSession(withLegacy = false) {\n if (withLegacy && localStorage.getItem(LEGACY_SESSION_KEY)) {\n return true;\n }\n\n const userAuthJson = localStorage.getItem(SESSION_USER_KEY);\n if (!userAuthJson) return false;\n\n try {\n const userAuth = JSON.parse(userAuthJson);\n return Boolean(userAuth && userAuth.id && userAuth.dcID);\n } catch (err) {\n // Do nothing.\n return false;\n }\n}\n\nexport function storeSession(sessionData: ApiSessionData, currentUserId?: string) {\n const { mainDcId, keys, hashes } = sessionData;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify({ dcID: mainDcId, id: currentUserId }));\n localStorage.setItem('dc', String(mainDcId));\n Object.keys(keys).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_auth_key`, JSON.stringify(keys[dcId]));\n });\n\n if (hashes) {\n Object.keys(hashes).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_hash`, JSON.stringify(hashes[dcId]));\n });\n }\n}\n\nexport function clearStoredSession() {\n [\n SESSION_USER_KEY,\n 'dc',\n ...DC_IDS.map((dcId) => `dc${dcId}_auth_key`),\n ...DC_IDS.map((dcId) => `dc${dcId}_hash`),\n ].forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n\nexport function loadStoredSession(): ApiSessionData | undefined {\n if (!hasStoredSession()) {\n return undefined;\n }\n\n const userAuth = JSON.parse(localStorage.getItem(SESSION_USER_KEY)!);\n const mainDcId = Number(userAuth.dcID);\n const keys: Record = {};\n const hashes: Record = {};\n\n DC_IDS.forEach((dcId) => {\n try {\n const key = localStorage.getItem(`dc${dcId}_auth_key`);\n if (key) {\n keys[dcId] = JSON.parse(key);\n }\n\n const hash = localStorage.getItem(`dc${dcId}_hash`);\n if (hash) {\n hashes[dcId] = JSON.parse(hash);\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load stored session', err);\n }\n // Do nothing.\n }\n });\n\n if (!Object.keys(keys).length) return undefined;\n\n return {\n mainDcId,\n keys,\n hashes,\n };\n}\n\nexport async function importLegacySession() {\n const sessionId = localStorage.getItem(LEGACY_SESSION_KEY);\n if (!sessionId) return;\n\n const sessionJson = await idb.get(`GramJs:${sessionId}`);\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData;\n storeSession(sessionData);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load legacy session', err);\n }\n // Do nothing.\n }\n}\n\n// Remove previously created IndexedDB and cache API sessions\nexport async function clearLegacySessions() {\n localStorage.removeItem(LEGACY_SESSION_KEY);\n\n const idbKeys = await idb.keys();\n\n await Promise.all>([\n cacheApi.clear('GramJs'),\n ...idbKeys\n .filter((k) => typeof k === 'string' && k.startsWith('GramJs:GramJs-session-'))\n .map((k) => idb.del(k)),\n ]);\n}\n\nexport function importTestSession() {\n const sessionJson = process.env.TEST_SESSION!;\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData & { userId: string };\n storeSession(sessionData, sessionData.userId);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load test session', err);\n }\n // Do nothing.\n }\n}\n","import { ISettings } from '../types';\n\nimport { animateSingle } from './animation';\nimport { fastRaf } from './schedulers';\n\nimport themeColors from '../styles/themes.json';\n\ntype RGBAColor = {\n r: number;\n g: number;\n b: number;\n a?: number;\n};\n\nlet isInitialized = false;\n\nconst HEX_COLOR_REGEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nconst DURATION_MS = 200;\nconst ENABLE_ANIMATION_DELAY_MS = 500;\nconst RGB_VARIABLES = new Set([\n '--color-primary-shade',\n '--color-text-secondary',\n]);\n\nconst lerp = (start: number, end: number, interpolationRatio: number) => {\n return (1 - interpolationRatio) * start + interpolationRatio * end;\n};\n\nconst colors = (Object.keys(themeColors) as Array).map((property) => ({\n property,\n colors: [hexToRgb(themeColors[property][0]), hexToRgb(themeColors[property][1])],\n}));\n\nconst switchTheme = (theme: ISettings['theme'], withAnimation: boolean) => {\n const isDarkTheme = theme === 'dark';\n const shouldAnimate = isInitialized && withAnimation;\n const startIndex = isDarkTheme ? 0 : 1;\n const endIndex = isDarkTheme ? 1 : 0;\n const startAt = Date.now();\n const themeColorTag = document.querySelector('meta[name=\"theme-color\"]');\n\n document.documentElement.classList.remove(`theme-${isDarkTheme ? 'light' : 'dark'}`);\n if (isInitialized) {\n document.documentElement.classList.add('no-animations');\n }\n document.documentElement.classList.add(`theme-${theme}`);\n if (themeColorTag) {\n themeColorTag.setAttribute('content', isDarkTheme ? '#212121' : '#fff');\n }\n\n setTimeout(() => {\n document.documentElement.classList.remove('no-animations');\n }, ENABLE_ANIMATION_DELAY_MS);\n\n isInitialized = true;\n\n if (shouldAnimate) {\n fastRaf(() => {\n animateSingle(() => {\n const t = Math.min((Date.now() - startAt) / DURATION_MS, 1);\n\n applyColorAnimationStep(startIndex, endIndex, transition(t));\n\n return t < 1;\n });\n });\n } else {\n applyColorAnimationStep(startIndex, endIndex);\n }\n};\n\nfunction transition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n\nfunction hexToRgb(hex: string): RGBAColor {\n const result = HEX_COLOR_REGEX.exec(hex)!;\n\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] !== undefined ? parseInt(result[4], 16) : undefined,\n };\n}\n\nfunction applyColorAnimationStep(startIndex: number, endIndex: number, interpolationRatio: number = 1) {\n colors.forEach(({ property, colors: propertyColors }) => {\n const r = Math.round(lerp(propertyColors[startIndex].r, propertyColors[endIndex].r, interpolationRatio));\n const g = Math.round(lerp(propertyColors[startIndex].g, propertyColors[endIndex].g, interpolationRatio));\n const b = Math.round(lerp(propertyColors[startIndex].b, propertyColors[endIndex].b, interpolationRatio));\n const a = propertyColors[startIndex].a !== undefined\n ? Math.round(lerp(propertyColors[startIndex].a!, propertyColors[endIndex].a!, interpolationRatio))\n : undefined;\n\n document.documentElement.style.setProperty(property, a !== undefined\n ? `rgba(${r},${g},${b},${a / 255})`\n : `rgb(${r},${g},${b})`);\n\n if (RGB_VARIABLES.has(property)) {\n document.documentElement.style.setProperty(`${property}-rgb`, `${r},${g},${b}`);\n }\n });\n}\n\nexport default switchTheme;\n","import EMOJI_REGEX from '../lib/twemojiRegex';\nimport { fixNonStandardEmoji } from './emoji';\n\nexport function formatInteger(value: number) {\n return String(value).replace(/\\d(?=(\\d{3})+$)/g, '$& ');\n}\n\nfunction formatFixedNumber(number: number) {\n const fixed = String(number.toFixed(1));\n if (fixed.substr(-2) === '.0') {\n return Math.round(number);\n }\n\n return number.toFixed(1).replace('.', ',');\n}\n\nexport function formatIntegerCompact(views: number) {\n if (views < 1e3) {\n return views;\n }\n\n if (views < 1e6) {\n return `${formatFixedNumber(views / 1e3)}K`;\n }\n\n return `${formatFixedNumber(views / 1e6)}M`;\n}\n\nexport function getFirstLetters(phrase: string, count = 2) {\n return phrase\n .replace(/[.,!@#$%^&*()_+=\\-`~[\\]/\\\\{}:\"|<>?]+/gi, '')\n .trim()\n .split(/\\s+/)\n .slice(0, count)\n .map((word: string) => {\n if (!word.length) return '';\n word = fixNonStandardEmoji(word);\n const emojis = word.match(EMOJI_REGEX);\n if (emojis && word.startsWith(emojis[0])) {\n return emojis[0];\n }\n return word.match(/./u)![0].toUpperCase();\n })\n .join('');\n}\n","export default function trimText(text: T, length?: number) {\n if (!text || !length || text.length <= length) {\n return text;\n }\n\n return `${text.substring(0, length)}...`;\n}\n","import { isWebpSupported } from './environment';\nimport { dataUriToBlob, blobToDataUri } from './files';\nimport { pause } from './schedulers';\n\nconst WORKER_INITIALIZATION_TIMEOUT = 2000;\n\nlet canvas: HTMLCanvasElement;\nlet worker: IWebpWorker;\n\nexport const EMPTY_IMAGE_DATA_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk'\n + 'YAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport async function webpToPng(url: string, blob: Blob): Promise {\n initWebpWorker();\n\n while (!worker.wasmReady) {\n await pause(WORKER_INITIALIZATION_TIMEOUT);\n }\n\n const { result, width, height } = await getDecodePromise(url, blob);\n if (!width || !height) {\n return undefined;\n }\n\n return createPng({ result, width, height });\n}\n\nexport async function webpToPngBase64(key: string, dataUri: string): Promise {\n if (isWebpSupported() || dataUri.substr(0, 15) !== 'data:image/webp') {\n return dataUri;\n }\n\n initWebpWorker();\n\n const pngBlob = await webpToPng(key, dataUriToBlob(dataUri));\n\n if (!pngBlob) {\n throw new Error(`Can't convert webp to png. Url: ${dataUri}`);\n }\n\n return blobToDataUri(pngBlob);\n}\n\nfunction initWebpWorker() {\n if (!worker) {\n worker = new Worker(new URL('../lib/webp/webp_wasm.worker.js', import.meta.url)) as IWebpWorker;\n worker.wasmReady = false;\n worker.onmessage = handleLibWebpMessage;\n }\n}\n\nfunction createPng({ result, width, height }: TEncodedImage): Promise {\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n\n return new Promise((resolve) => {\n const img = new ImageData(result, width, height);\n\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d')!;\n ctx.putImageData(img, 0, 0);\n\n canvas.toBlob((blob) => {\n resolve(blob ?? undefined);\n }, 'image/png', 1);\n });\n}\n\nfunction handleLibWebpMessage(e: MessageEvent) {\n const { id } = e.data;\n switch (e.data.type) {\n case 'initialized': {\n worker.wasmReady = true;\n break;\n }\n\n case 'result': {\n if (worker.requests.has(id)) {\n const resolve = worker.requests.get(id)!;\n\n worker.requests.delete(id);\n resolve(e.data!);\n }\n break;\n }\n }\n}\n\nfunction getDecodePromise(url: string, blob: Blob): Promise {\n return new Promise((resolve) => {\n if (!worker.requests) {\n worker.requests = new Map();\n }\n\n worker.requests.set(url, resolve);\n worker.postMessage({ id: url, blob });\n });\n}\n","import { APP_VERSION, DEBUG } from '../config';\nimport { getGlobal } from '../lib/teact/teactn';\nimport { hasStoredSession } from './sessions';\n\nconst WEBSYNC_URLS = [\n 't.me',\n 'telegram.me',\n].map((domain) => `//${domain}/_websync_?`);\nconst WEBSYNC_VERSION = `${APP_VERSION} Z`;\nconst WEBSYNC_KEY = 'tgme_sync';\nconst WEBSYNC_TIMEOUT = 86400;\n\nconst getTs = () => {\n return Math.floor(Number(new Date()) / 1000);\n};\n\nconst saveSync = (authed: boolean) => {\n const ts = getTs();\n localStorage.setItem(WEBSYNC_KEY, JSON.stringify({\n canRedirect: authed,\n ts,\n }));\n};\n\nlet lastTimeout: NodeJS.Timeout | undefined;\n\nexport const forceWebsync = (authed: boolean) => {\n const currentTs = getTs();\n\n const { canRedirect, ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n if (canRedirect !== authed || ts + WEBSYNC_TIMEOUT <= currentTs) {\n return Promise.all(WEBSYNC_URLS.map((url) => {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n\n const removeElement = () => Boolean(document.body.removeChild(script));\n\n script.src = url + new URLSearchParams({\n authed: Number(authed).toString(),\n version: WEBSYNC_VERSION,\n });\n\n document.body.appendChild(script);\n\n script.onload = () => {\n saveSync(authed);\n removeElement();\n if (lastTimeout) {\n clearTimeout(lastTimeout);\n lastTimeout = undefined;\n }\n startWebsync();\n resolve();\n };\n\n script.onerror = () => {\n removeElement();\n reject();\n };\n });\n }));\n } else {\n return Promise.resolve();\n }\n};\n\nexport function startWebsync() {\n if (DEBUG) {\n return;\n }\n\n if (lastTimeout !== undefined) return;\n const currentTs = getTs();\n\n const { ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n const timeout = WEBSYNC_TIMEOUT - (currentTs - ts);\n\n lastTimeout = setTimeout(() => {\n const { authState } = getGlobal();\n\n const authed = authState === 'authorizationStateReady' || hasStoredSession(true);\n forceWebsync(authed);\n }, Math.max(0, timeout * 1000));\n}\n\nexport function clearWebsync() {\n localStorage.removeItem(WEBSYNC_KEY);\n}\n","import { throttle } from './schedulers';\nimport {\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n MOBILE_SCREEN_MAX_WIDTH,\n} from '../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT } from './environment';\n\ntype IDimensions = {\n width: number;\n height: number;\n};\n\nconst IS_LANDSCAPE = IS_SINGLE_COLUMN_LAYOUT && isLandscape();\n\nconst initialHeight = window.innerHeight;\nlet currentWindowSize = updateSizes();\nlet isRefreshDisabled = false;\n\nfunction disableRefresh() {\n isRefreshDisabled = true;\n}\n\nfunction enableRefresh() {\n isRefreshDisabled = false;\n}\n\nconst handleResize = throttle(() => {\n currentWindowSize = updateSizes();\n\n if (!isRefreshDisabled && (\n isMobileScreen() !== IS_SINGLE_COLUMN_LAYOUT\n || (IS_SINGLE_COLUMN_LAYOUT && IS_LANDSCAPE !== isLandscape())\n )) {\n window.location.reload();\n }\n}, 250, true);\n\nwindow.addEventListener('orientationchange', handleResize);\nif (IS_IOS) {\n window.visualViewport.addEventListener('resize', handleResize);\n} else {\n window.addEventListener('resize', handleResize);\n}\n\nexport function updateSizes(): IDimensions {\n let height: number;\n if (IS_IOS) {\n height = window.visualViewport.height + window.visualViewport.pageTop;\n } else {\n height = window.innerHeight;\n }\n const vh = height * 0.01;\n\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nfunction isMobileScreen() {\n return currentWindowSize.width <= MOBILE_SCREEN_MAX_WIDTH || (\n currentWindowSize.width <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH\n && currentWindowSize.height <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n );\n}\n\nfunction isLandscape() {\n if (IS_IOS) {\n return window.matchMedia('(orientation: landscape)').matches;\n }\n\n // eslint-disable-next-line max-len\n // Source: https://web.archive.org/web/20160509220835/http://blog.abouthalf.com/development/orientation-media-query-challenges-in-android-browsers/\n // Feature is marked as deprecated now, but it is still supported\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/device-aspect-ratio#browser_compatibility\n return window.matchMedia('screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)').matches;\n}\n\nconst windowSize = {\n get: () => currentWindowSize,\n getIsKeyboardVisible: () => initialHeight > currentWindowSize.height,\n disableRefresh,\n enableRefresh,\n};\n\nexport default windowSize;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"47\":\"636da8b3a0051a88c67f\",\"99\":\"4acb17d13e1a5b87b131\",\"126\":\"56949b6fb714b8786c3b\",\"133\":\"f664a3ff1ab968ba12a0\",\"161\":\"4fade15904bfe66b4f71\",\"302\":\"fde2dcaf1124227a1d9e\",\"354\":\"7bc3c5c13bc07dd188c8\",\"472\":\"65a66b6c1fb1be8db986\",\"501\":\"3c8f4d2d9fb141fac95f\",\"524\":\"5ba4654722f6398c85d7\",\"536\":\"ab2a889dae72ec88f68c\",\"538\":\"784f6f20a24129e3caaf\",\"626\":\"0852f35873300d889e6f\",\"640\":\"b191f48c5df91e546441\",\"745\":\"cc53f6e29328dbd2c9ff\",\"830\":\"75c3f8b65582d31f48aa\",\"915\":\"af01666698d37aea6ce6\",\"941\":\"367e239e47c825643813\",\"993\":\"5065d2f591c9fc4f83b4\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"47\":\"636da8b3a0051a88c67f\",\"126\":\"56949b6fb714b8786c3b\",\"133\":\"f664a3ff1ab968ba12a0\",\"472\":\"65a66b6c1fb1be8db986\",\"538\":\"784f6f20a24129e3caaf\",\"640\":\"b191f48c5df91e546441\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { DEBUG, DEBUG_MORE } from '../config';\nimport { getDispatch } from '../lib/teact/teactn';\nimport { IS_ANDROID, IS_IOS, IS_SERVICE_WORKER_SUPPORTED } from './environment';\nimport { notifyClientReady, playNotifySoundDebounced } from './notifications';\n\ntype WorkerAction = {\n type: string;\n payload: Record;\n};\n\nfunction handleWorkerMessage(e: MessageEvent) {\n const action: WorkerAction = e.data;\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log('[SW] Message from worker', action);\n }\n if (!action.type) return;\n const dispatch = getDispatch();\n const payload = action.payload;\n switch (action.type) {\n case 'focusMessage':\n if (dispatch.focusMessage) {\n dispatch.focusMessage(payload);\n }\n if (dispatch.startActiveReaction && payload.reaction) {\n dispatch.startActiveReaction({\n messageId: payload.messageId,\n reaction: payload.reaction,\n });\n }\n break;\n case 'playNotificationSound':\n playNotifySoundDebounced(action.payload.id);\n break;\n }\n}\n\nfunction subscribeToWorker() {\n navigator.serviceWorker.removeEventListener('message', handleWorkerMessage);\n navigator.serviceWorker.addEventListener('message', handleWorkerMessage);\n // Notify web worker that client is ready to receive messages\n notifyClientReady();\n}\n\nif (IS_SERVICE_WORKER_SUPPORTED) {\n window.addEventListener('load', async () => {\n try {\n if (!navigator.serviceWorker.controller) {\n const registrations = await navigator.serviceWorker.getRegistrations();\n if (registrations.length) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Hard reload detected, re-enabling Service Worker');\n }\n await Promise.all(registrations.map(r => r.unregister()));\n }\n }\n\n await navigator.serviceWorker.register(new URL('../serviceWorker.ts', import.meta.url));\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker registered');\n }\n\n await navigator.serviceWorker.ready;\n\n if (navigator.serviceWorker.controller) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker ready');\n }\n subscribeToWorker();\n } else {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker not available');\n }\n\n if (!IS_IOS && !IS_ANDROID) {\n getDispatch().showDialog({ data: { message: 'SERVICE_WORKER_DISABLED', hasErrorKey: true } });\n }\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker registration failed: ', err);\n }\n }\n });\n window.addEventListener('focus', async () => {\n await navigator.serviceWorker.ready;\n subscribeToWorker();\n });\n}\n","import { GlobalState } from './types';\nimport { NewChatMembersProgress } from '../types';\n\nimport {\n ANIMATION_LEVEL_DEFAULT, DARK_THEME_PATTERN_COLOR, DEFAULT_MESSAGE_TEXT_SIZE_PX, DEFAULT_PATTERN_COLOR,\n DEFAULT_PLAYBACK_RATE,\n DEFAULT_VOLUME,\n IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX, MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX,\n} from '../config';\nimport { IS_IOS, IS_MAC_OS } from '../util/environment';\n\nexport const INITIAL_STATE: GlobalState = {\n isLeftColumnShown: true,\n isChatInfoShown: false,\n newChatMembersProgress: NewChatMembersProgress.Closed,\n uiReadyState: 0,\n serverTimeOffset: 0,\n\n authRememberMe: true,\n countryList: {\n phoneCodes: [],\n general: [],\n },\n\n blocked: {\n ids: [],\n totalCount: 0,\n },\n\n users: {\n byId: {},\n statusesById: {},\n },\n\n chats: {\n listIds: {},\n isFullyLoaded: {},\n orderedPinnedIds: {},\n totalCount: {},\n byId: {},\n },\n\n messages: {\n byChatId: {},\n messageLists: [],\n sponsoredByChatId: {},\n },\n\n groupCalls: {\n byId: {},\n },\n\n scheduledMessages: {\n byChatId: {},\n },\n\n chatFolders: {\n byId: {},\n activeChatFolder: 0,\n },\n\n fileUploads: {\n byMessageLocalId: {},\n },\n\n recentEmojis: ['grinning', 'kissing_heart', 'christmas_tree', 'brain', 'trophy'],\n\n stickers: {\n setsById: {},\n added: {},\n recent: {\n stickers: [],\n },\n favorite: {\n stickers: [],\n },\n greeting: {\n stickers: [],\n },\n featured: {\n setIds: [],\n },\n search: {},\n forEmoji: {},\n },\n\n emojiKeywords: {},\n\n gifs: {\n saved: {},\n search: {},\n },\n\n inlineBots: {\n isLoading: false,\n byUsername: {},\n },\n\n globalSearch: {},\n\n userSearch: {},\n\n localTextSearch: {\n byChatThreadKey: {},\n },\n\n localMediaSearch: {\n byChatId: {},\n },\n\n management: {\n byChatId: {},\n },\n\n topPeers: {},\n\n topInlineBots: {},\n\n mediaViewer: {},\n\n audioPlayer: {\n volume: DEFAULT_VOLUME,\n playbackRate: DEFAULT_PLAYBACK_RATE,\n isMuted: false,\n },\n\n forwardMessages: {},\n\n pollResults: {},\n\n payment: {},\n\n notifications: [],\n\n dialogs: [],\n\n activeSessions: [],\n\n settings: {\n byKey: {\n theme: 'light',\n shouldUseSystemTheme: true,\n messageTextSize: IS_IOS\n ? IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX\n : (IS_MAC_OS ? MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX : DEFAULT_MESSAGE_TEXT_SIZE_PX),\n animationLevel: ANIMATION_LEVEL_DEFAULT,\n messageSendKeyCombo: 'enter',\n canAutoLoadPhotoFromContacts: true,\n canAutoLoadPhotoInPrivateChats: true,\n canAutoLoadPhotoInGroups: true,\n canAutoLoadPhotoInChannels: true,\n canAutoLoadVideoFromContacts: true,\n canAutoLoadVideoInPrivateChats: true,\n canAutoLoadVideoInGroups: true,\n canAutoLoadVideoInChannels: true,\n canAutoLoadFileFromContacts: false,\n canAutoLoadFileInPrivateChats: false,\n canAutoLoadFileInGroups: false,\n canAutoLoadFileInChannels: false,\n autoLoadFileMaxSizeMb: 10,\n hasWebNotifications: true,\n hasPushNotifications: true,\n notificationSoundVolume: 5,\n canAutoPlayGifs: true,\n canAutoPlayVideos: true,\n shouldSuggestStickers: true,\n shouldLoopStickers: true,\n language: 'en',\n timeFormat: '24h',\n wasTimeFormatSetManually: false,\n isConnectionStatusMinimized: true,\n },\n themes: {\n light: {\n isBlurred: true,\n patternColor: DEFAULT_PATTERN_COLOR,\n },\n dark: {\n isBlurred: true,\n patternColor: DARK_THEME_PATTERN_COLOR,\n },\n },\n privacy: {},\n notifyExceptions: {},\n },\n\n twoFaSettings: {},\n activeReactions: {},\n\n shouldShowContextMenuHint: true,\n\n activeDownloads: {\n byChatId: {},\n },\n\n serviceNotifications: [],\n};\n","import {\n addCallback, addReducer, getGlobal, removeCallback,\n} from '../lib/teact/teactn';\n\nimport { GlobalState } from './types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { onBeforeUnload, onIdle, throttle } from '../util/schedulers';\nimport {\n DEBUG,\n GLOBAL_STATE_CACHE_DISABLED,\n GLOBAL_STATE_CACHE_KEY,\n GLOBAL_STATE_CACHE_USER_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n DEFAULT_VOLUME,\n DEFAULT_PLAYBACK_RATE,\n ALL_FOLDER_ID,\n ARCHIVED_FOLDER_ID,\n} from '../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../util/environment';\nimport { isHeavyAnimating } from '../hooks/useHeavyAnimationCheck';\nimport { pick, unique } from '../util/iteratees';\nimport {\n selectCurrentChat,\n selectCurrentMessageList,\n selectVisibleUsers,\n} from '../modules/selectors';\nimport { hasStoredSession } from '../util/sessions';\nimport { INITIAL_STATE } from './initial';\nimport { parseLocationHash } from '../util/routing';\nimport { isUserId } from '../modules/helpers';\nimport { getOrderedIds } from '../util/folderManager';\n\nconst UPDATE_THROTTLE = 5000;\n\nconst updateCacheThrottled = throttle(() => onIdle(updateCache), UPDATE_THROTTLE, false);\n\nlet isCaching = false;\nlet unsubscribeFromBeforeUnload: NoneToVoidFunction | undefined;\n\nexport function initCache() {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return;\n }\n\n addReducer('saveSession', () => {\n if (isCaching) {\n return;\n }\n\n setupCaching();\n });\n\n addReducer('reset', () => {\n localStorage.removeItem(GLOBAL_STATE_CACHE_KEY);\n\n if (!isCaching) {\n return;\n }\n\n clearCaching();\n });\n}\n\nexport function loadCache(initialState: GlobalState): GlobalState | undefined {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return undefined;\n }\n\n if (hasStoredSession(true)) {\n setupCaching();\n\n return readCache(initialState);\n } else {\n clearCaching();\n\n return undefined;\n }\n}\n\nfunction setupCaching() {\n isCaching = true;\n unsubscribeFromBeforeUnload = onBeforeUnload(updateCache, true);\n window.addEventListener('blur', updateCache);\n addCallback(updateCacheThrottled);\n}\n\nfunction clearCaching() {\n isCaching = false;\n removeCallback(updateCacheThrottled);\n window.removeEventListener('blur', updateCache);\n if (unsubscribeFromBeforeUnload) {\n unsubscribeFromBeforeUnload();\n }\n}\n\nfunction readCache(initialState: GlobalState): GlobalState {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.time('global-state-cache-read');\n }\n\n const json = localStorage.getItem(GLOBAL_STATE_CACHE_KEY);\n const cached = json ? JSON.parse(json) as GlobalState : undefined;\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.timeEnd('global-state-cache-read');\n }\n\n if (cached) {\n migrateCache(cached, initialState);\n }\n\n const newState = {\n ...initialState,\n ...cached,\n };\n\n const parsedMessageList = !IS_SINGLE_COLUMN_LAYOUT ? parseLocationHash() : undefined;\n\n return {\n ...newState,\n messages: {\n ...newState.messages,\n messageLists: parsedMessageList ? [parsedMessageList] : [],\n },\n };\n}\n\nfunction migrateCache(cached: GlobalState, initialState: GlobalState) {\n // Migrate from legacy setting names\n if ('shouldAutoDownloadMediaFromContacts' in cached.settings.byKey) {\n const {\n shouldAutoDownloadMediaFromContacts,\n shouldAutoDownloadMediaInPrivateChats,\n shouldAutoDownloadMediaInGroups,\n shouldAutoDownloadMediaInChannels,\n shouldAutoPlayVideos,\n shouldAutoPlayGifs,\n ...rest\n } = cached.settings.byKey;\n\n cached.settings.byKey = {\n ...rest,\n canAutoLoadPhotoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadVideoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadPhotoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadVideoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadPhotoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadVideoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadPhotoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoLoadVideoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoPlayVideos: shouldAutoPlayVideos,\n canAutoPlayGifs: shouldAutoPlayGifs,\n };\n }\n\n // Pre-fill settings with defaults\n cached.settings.byKey = {\n ...initialState.settings.byKey,\n ...cached.settings.byKey,\n };\n\n cached.settings.themes = {\n ...initialState.settings.themes,\n ...cached.settings.themes,\n };\n\n cached.chatFolders = {\n ...initialState.chatFolders,\n ...cached.chatFolders,\n };\n\n if (!cached.stickers.greeting) {\n cached.stickers.greeting = initialState.stickers.greeting;\n }\n\n if (!cached.activeDownloads) {\n cached.activeDownloads = {\n byChatId: {},\n };\n }\n\n if (!cached.serviceNotifications) {\n cached.serviceNotifications = [];\n }\n\n if (cached.audioPlayer.volume === undefined) {\n cached.audioPlayer.volume = DEFAULT_VOLUME;\n }\n\n if (cached.audioPlayer.playbackRate === undefined) {\n cached.audioPlayer.playbackRate = DEFAULT_PLAYBACK_RATE;\n }\n\n if (!cached.groupCalls) {\n cached.groupCalls = initialState.groupCalls;\n }\n\n if (!cached.users.statusesById) {\n cached.users.statusesById = {};\n }\n\n if (!cached.messages.sponsoredByChatId) {\n cached.messages.sponsoredByChatId = {};\n }\n\n if (!cached.activeReactions) {\n cached.activeReactions = {};\n }\n}\n\nfunction updateCache() {\n if (!isCaching || isHeavyAnimating()) {\n return;\n }\n\n const global = getGlobal();\n\n if (global.isLoggingOut) {\n return;\n }\n\n const reducedGlobal: GlobalState = {\n ...INITIAL_STATE,\n ...pick(global, [\n 'authState',\n 'authPhoneNumber',\n 'authRememberMe',\n 'authNearestCountry',\n 'currentUserId',\n 'contactList',\n 'topPeers',\n 'topInlineBots',\n 'recentEmojis',\n 'push',\n 'shouldShowContextMenuHint',\n 'leftColumnWidth',\n 'serviceNotifications',\n ]),\n audioPlayer: {\n volume: global.audioPlayer.volume,\n playbackRate: global.audioPlayer.playbackRate,\n isMuted: global.audioPlayer.isMuted,\n },\n isChatInfoShown: reduceShowChatInfo(global),\n users: reduceUsers(global),\n chats: reduceChats(global),\n messages: reduceMessages(global),\n globalSearch: {\n recentlyFoundChatIds: global.globalSearch.recentlyFoundChatIds,\n },\n settings: reduceSettings(global),\n chatFolders: reduceChatFolders(global),\n groupCalls: reduceGroupCalls(global),\n availableReactions: reduceAvailableReactions(global),\n };\n\n const json = JSON.stringify(reducedGlobal);\n localStorage.setItem(GLOBAL_STATE_CACHE_KEY, json);\n}\n\nfunction reduceShowChatInfo(global: GlobalState): boolean {\n return window.innerWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n ? global.isChatInfoShown\n : false;\n}\n\nfunction reduceUsers(global: GlobalState): GlobalState['users'] {\n const { users: { byId, statusesById }, currentUserId } = global;\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const visibleUserIds = selectVisibleUsers(global)?.map(({ id }) => id);\n\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChatId && isUserId(currentChatId) ? [currentChatId] : [],\n ...visibleUserIds || [],\n ...global.topPeers.userIds || [],\n ...getOrderedIds(ALL_FOLDER_ID)?.filter(isUserId) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID)?.filter(isUserId) || [],\n ...global.contactList?.userIds || [],\n ...global.globalSearch.recentlyFoundChatIds?.filter(isUserId) || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_USER_LIST_LIMIT);\n\n return {\n byId: pick(byId, idsToSave),\n statusesById: pick(statusesById, idsToSave),\n };\n}\n\nfunction reduceChats(global: GlobalState): GlobalState['chats'] {\n const { chats: { byId }, currentUserId } = global;\n const currentChat = selectCurrentChat(global);\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChat ? [currentChat.id] : [],\n ...getOrderedIds(ALL_FOLDER_ID) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID) || [],\n ...global.globalSearch.recentlyFoundChatIds || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT);\n\n return {\n ...global.chats,\n isFullyLoaded: {},\n byId: pick(global.chats.byId, idsToSave),\n };\n}\n\nfunction reduceMessages(global: GlobalState): GlobalState['messages'] {\n const { currentUserId } = global;\n const byChatId: GlobalState['messages']['byChatId'] = {};\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const chatIdsToSave = [\n ...currentChatId ? [currentChatId] : [],\n ...currentUserId ? [currentUserId] : [],\n ...getOrderedIds(ALL_FOLDER_ID)?.slice(0, GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT) || [],\n ];\n\n chatIdsToSave.forEach((chatId) => {\n const current = global.messages.byChatId[chatId];\n if (!current) {\n return;\n }\n\n const mainThread = current.threadsById[MAIN_THREAD_ID];\n if (!mainThread || !mainThread.viewportIds) {\n return;\n }\n\n byChatId[chatId] = {\n byId: pick(current.byId, mainThread.viewportIds),\n threadsById: {\n [MAIN_THREAD_ID]: mainThread,\n },\n };\n });\n\n return {\n byChatId,\n messageLists: [],\n sponsoredByChatId: {},\n };\n}\n\nfunction reduceSettings(global: GlobalState): GlobalState['settings'] {\n const { byKey, themes } = global.settings;\n\n return {\n byKey,\n themes,\n privacy: {},\n notifyExceptions: {},\n };\n}\n\nfunction reduceChatFolders(global: GlobalState): GlobalState['chatFolders'] {\n return {\n ...global.chatFolders,\n activeChatFolder: 0,\n };\n}\n\nfunction reduceGroupCalls(global: GlobalState): GlobalState['groupCalls'] {\n return {\n ...global.groupCalls,\n byId: {},\n activeGroupCallId: undefined,\n isGroupCallPanelHidden: undefined,\n isFallbackConfirmOpen: undefined,\n };\n}\n\nfunction reduceAvailableReactions(global: GlobalState): GlobalState['availableReactions'] {\n return global.availableReactions\n ?.map((r) => pick(r, ['reaction', 'staticIcon', 'title', 'isInactive']));\n}\n","import { addReducer } from '../lib/teact/teactn';\n\nimport { INITIAL_STATE } from './initial';\nimport { initCache, loadCache } from './cache';\nimport { cloneDeep } from '../util/iteratees';\n\ninitCache();\n\naddReducer('init', () => {\n const initial = cloneDeep(INITIAL_STATE);\n return loadCache(initial) || initial;\n});\n","const STORAGE_KEY = 'tt-active-tab';\nconst INTERVAL = 2000;\n\nconst tabKey = String(Date.now() + Math.random());\n\nlocalStorage.setItem(STORAGE_KEY, tabKey);\n\nlet callback: NoneToVoidFunction;\n\nconst interval = window.setInterval(() => {\n if (callback && localStorage.getItem(STORAGE_KEY) !== tabKey) {\n callback();\n clearInterval(interval);\n }\n}, INTERVAL);\n\nexport function addActiveTabChangeListener(_callback: NoneToVoidFunction) {\n callback = _callback;\n}\n","const SITE_FONTS = ['400 1em Roboto', '500 1em Roboto'];\n\nexport default function preloadFonts() {\n if ('fonts' in document) {\n return Promise.all(SITE_FONTS.map((font) => document.fonts.load(font)));\n }\n\n return undefined;\n}\n","import React, { FC, useEffect } from '../../lib/teact/teact';\nimport { getDispatch, getGlobal, withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiMediaFormat } from '../../api/types';\nimport { GlobalState } from '../../global/types';\n\nimport { getChatAvatarHash } from '../../modules/helpers/chats'; // Direct import for better module splitting\nimport useFlag from '../../hooks/useFlag';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport { pause } from '../../util/schedulers';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport * as mediaLoader from '../../util/mediaLoader';\nimport { Bundles, loadModule } from '../../util/moduleLoader';\nimport buildClassName from '../../util/buildClassName';\n\nimport './UiLoader.scss';\n\nimport telegramLogoPath from '../../assets/telegram-logo.svg';\nimport reactionThumbsPath from '../../assets/reaction-thumbs.png';\nimport monkeyPath from '../../assets/monkey.svg';\nimport { selectIsRightColumnShown, selectTheme } from '../../modules/selectors';\n\ntype OwnProps = {\n page: 'main' | 'authCode' | 'authPassword' | 'authPhoneNumber' | 'authQrCode';\n children: any;\n};\n\ntype StateProps =\n Pick\n & {\n hasCustomBackground?: boolean;\n hasCustomBackgroundColor: boolean;\n isRightColumnShown?: boolean;\n leftColumnWidth?: number;\n };\n\nconst MAX_PRELOAD_DELAY = 700;\nconst SECOND_STATE_DELAY = 1000;\nconst AVATARS_TO_PRELOAD = 10;\n\nfunction preloadAvatars() {\n const { listIds, byId } = getGlobal().chats;\n if (!listIds.active) {\n return undefined;\n }\n\n return Promise.all(listIds.active.slice(0, AVATARS_TO_PRELOAD).map((chatId) => {\n const chat = byId[chatId];\n if (!chat) {\n return undefined;\n }\n\n const avatarHash = getChatAvatarHash(chat);\n if (!avatarHash) {\n return undefined;\n }\n\n return mediaLoader.fetch(avatarHash, ApiMediaFormat.BlobUrl);\n }));\n}\n\nconst preloadTasks = {\n main: () => Promise.all([\n loadModule(Bundles.Main, 'Main')\n .then(preloadFonts),\n preloadAvatars(),\n preloadImage(reactionThumbsPath),\n ]),\n authPhoneNumber: () => Promise.all([\n preloadFonts(),\n preloadImage(telegramLogoPath),\n ]),\n authCode: () => preloadImage(monkeyPath),\n authPassword: () => preloadImage(monkeyPath),\n authQrCode: preloadFonts,\n};\n\nconst UiLoader: FC = ({\n page,\n children,\n hasCustomBackground,\n hasCustomBackgroundColor,\n isRightColumnShown,\n shouldSkipHistoryAnimations,\n leftColumnWidth,\n}) => {\n const { setIsUiReady } = getDispatch();\n\n const [isReady, markReady] = useFlag();\n const {\n shouldRender: shouldRenderMask, transitionClassNames,\n } = useShowTransition(!isReady, undefined, true);\n\n useEffect(() => {\n let timeout: number | undefined;\n\n const safePreload = async () => {\n try {\n await preloadTasks[page]();\n } catch (err) {\n // Do nothing\n }\n };\n\n Promise.race([\n pause(MAX_PRELOAD_DELAY),\n safePreload(),\n ]).then(() => {\n markReady();\n setIsUiReady({ uiReadyState: 1 });\n\n timeout = window.setTimeout(() => {\n setIsUiReady({ uiReadyState: 2 });\n }, SECOND_STATE_DELAY);\n });\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n setIsUiReady({ uiReadyState: 0 });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n

\n {children}\n {shouldRenderMask && !shouldSkipHistoryAnimations && (\n
\n {page === 'main' ? (\n <>\n \n \n {isRightColumnShown &&
}\n \n ) : (\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, backgroundColor } = global.settings.themes[theme] || {};\n\n return {\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n uiReadyState: global.uiReadyState,\n hasCustomBackground: Boolean(background),\n hasCustomBackgroundColor: Boolean(backgroundColor),\n isRightColumnShown: selectIsRightColumnShown(global),\n leftColumnWidth: global.leftColumnWidth,\n };\n },\n)(UiLoader);\n","import * as langProvider from '../util/langProvider';\nimport { useState } from '../lib/teact/teact';\n\nconst useLangString = (langCode: string | undefined, key: string): string | undefined => {\n const [translation, setTranslation] = useState();\n\n if (langCode) {\n langProvider\n .getTranslationForLangString(langCode, key)\n .then(setTranslation);\n }\n\n return translation;\n};\n\nexport default useLangString;\n","import { LangCode } from '../../../types';\n\nexport function getSuggestedLanguage() {\n let suggestedLanguage = navigator.language;\n\n if (suggestedLanguage && suggestedLanguage !== 'pt-br') {\n suggestedLanguage = suggestedLanguage.substr(0, 2);\n }\n\n return suggestedLanguage as LangCode;\n}\n","import React, {\n FC, useState, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { ApiCountryCode } from '../../api/types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport { isoToEmoji } from '../../util/emoji';\nimport useOnChange from '../../hooks/useOnChange';\n\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport Spinner from '../ui/Spinner';\n\nimport './CountryCodeInput.scss';\n\ntype StateProps = {\n phoneCodeList: ApiCountryCode[];\n};\n\ntype OwnProps = {\n id: string;\n value?: ApiCountryCode;\n isLoading?: boolean;\n onChange: (value: ApiCountryCode) => void;\n};\n\nconst MENU_HIDING_DURATION = 200 + ANIMATION_END_DELAY;\nconst SELECT_TIMEOUT = 50;\n\nconst CountryCodeInput: FC = ({\n id,\n value,\n isLoading,\n onChange,\n phoneCodeList,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [filter, setFilter] = useState();\n const [filteredList, setFilteredList] = useState([]);\n\n const updateFilter = useCallback((filterValue?: string) => {\n setFilter(filterValue);\n setFilteredList(getFilteredList(phoneCodeList, filterValue));\n }, [phoneCodeList]);\n\n useOnChange(([prevPhoneCodeList]) => {\n if (prevPhoneCodeList?.length === 0 && phoneCodeList.length > 0) {\n updateFilter(filter);\n }\n }, [phoneCodeList, updateFilter]);\n\n const handleChange = useCallback((country: ApiCountryCode) => {\n onChange(country);\n\n setTimeout(() => updateFilter(undefined), MENU_HIDING_DURATION);\n }, [onChange, updateFilter]);\n\n const handleInput = useCallback((e: React.FormEvent) => {\n updateFilter(e.currentTarget.value);\n }, [updateFilter]);\n\n const handleInputKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 8) {\n return;\n }\n\n const target = e.currentTarget;\n if (value && filter === undefined) {\n target.value = '';\n }\n\n updateFilter(target.value);\n }, [filter, updateFilter, value]);\n\n const CodeInput: FC<{ onTrigger: () => void; isOpen?: boolean }> = ({ onTrigger, isOpen }) => {\n const handleTrigger = () => {\n if (isOpen) {\n return;\n }\n\n setTimeout(() => {\n inputRef.current!.select();\n }, SELECT_TIMEOUT);\n\n onTrigger();\n\n const formEl = document.getElementById('auth-phone-number-form')!;\n formEl.scrollTo({ top: formEl.scrollHeight, behavior: 'smooth' });\n };\n\n const handleCodeInput = (e: React.FormEvent) => {\n handleInput(e);\n handleTrigger();\n };\n\n const inputValue = filter ?? (value?.name || value?.defaultName || '');\n\n return (\n
\n \n \n {isLoading ? (\n \n ) : (\n \n )}\n
\n );\n };\n\n return (\n \n {filteredList\n .map((country: ApiCountryCode) => (\n handleChange(country)}\n >\n {renderText(isoToEmoji(country.iso2), ['hq_emoji'])}\n {country.name || country.defaultName}\n {country.countryCode}\n \n ))}\n {!filteredList.length && (\n \n {lang('lng_country_none')}\n \n )}\n \n );\n};\n\nfunction getFilteredList(countryList: ApiCountryCode[], filter = ''): ApiCountryCode[] {\n if (!filter.length) {\n return countryList;\n }\n\n const searchWords = prepareSearchWordsForNeedle(filter);\n\n return countryList.filter((country) => (\n searchWords(country.defaultName) || (country.name && searchWords(country.name))\n ));\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { countryList: { phoneCodes: phoneCodeList } } = global;\n return {\n phoneCodeList,\n };\n },\n)(CountryCodeInput));\n","import { ChangeEvent } from 'react';\n\nimport monkeyPath from '../../assets/monkey.svg';\n\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\nimport { LangCode } from '../../types';\nimport { ApiCountryCode } from '../../api/types';\n\nimport { IS_SAFARI, IS_TOUCH_ENV } from '../../util/environment';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport { pick } from '../../util/iteratees';\nimport { formatPhoneNumber, getCountryCodesByIso, getCountryFromPhoneNumber } from '../../util/phoneNumber';\nimport { setLanguage } from '../../util/langProvider';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport useLangString from '../../hooks/useLangString';\nimport { getSuggestedLanguage } from './helpers/getSuggestedLanguage';\n\nimport Button from '../ui/Button';\nimport Checkbox from '../ui/Checkbox';\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport CountryCodeInput from './CountryCodeInput';\n\ntype StateProps = Pick & {\n language?: LangCode;\n phoneCodeList: ApiCountryCode[];\n};\n\nconst MIN_NUMBER_LENGTH = 7;\n\nlet isPreloadInitiated = false;\n\nconst AuthPhoneNumber: FC = ({\n connectionState,\n authState,\n authPhoneNumber,\n authIsLoading,\n authIsLoadingQrCode,\n authError,\n authRememberMe,\n authNearestCountry,\n phoneCodeList,\n language,\n}) => {\n const {\n setAuthPhoneNumber,\n setAuthRememberMe,\n loadNearestCountry,\n loadCountryList,\n clearAuthError,\n goToAuthQrCode,\n setSettingOption,\n } = getDispatch();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const suggestedLanguage = getSuggestedLanguage();\n\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [country, setCountry] = useState();\n const [phoneNumber, setPhoneNumber] = useState();\n const [isTouched, setIsTouched] = useState(false);\n const [lastSelection, setLastSelection] = useState<[number, number] | undefined>();\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n const fullNumber = country ? `+${country.countryCode} ${phoneNumber || ''}` : phoneNumber;\n const canSubmit = fullNumber && fullNumber.replace(/[^\\d]+/g, '').length >= MIN_NUMBER_LENGTH;\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, [country]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && !authNearestCountry) {\n loadNearestCountry();\n }\n }, [connectionState, authNearestCountry, loadNearestCountry]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n loadCountryList({ langCode: language });\n }\n }, [connectionState, language, loadCountryList]);\n\n useEffect(() => {\n if (authNearestCountry && phoneCodeList && !country && !isTouched) {\n setCountry(getCountryCodesByIso(phoneCodeList, authNearestCountry)[0]);\n }\n }, [country, authNearestCountry, isTouched, phoneCodeList]);\n\n const parseFullNumber = useCallback((newFullNumber: string) => {\n if (!newFullNumber.length) {\n setPhoneNumber('');\n }\n\n const suggestedCountry = phoneCodeList && getCountryFromPhoneNumber(phoneCodeList, newFullNumber);\n\n // Any phone numbers should be allowed, in some cases ignoring formatting\n const selectedCountry = !country\n || (suggestedCountry && suggestedCountry.iso2 !== country.iso2)\n || (!suggestedCountry && newFullNumber.length)\n ? suggestedCountry\n : country;\n\n if (!country || !selectedCountry || (selectedCountry && selectedCountry.iso2 !== country.iso2)) {\n setCountry(selectedCountry);\n }\n setPhoneNumber(formatPhoneNumber(newFullNumber, selectedCountry));\n }, [phoneCodeList, country]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n useEffect(() => {\n if (phoneNumber === undefined && authPhoneNumber) {\n parseFullNumber(authPhoneNumber);\n }\n }, [authPhoneNumber, phoneNumber, parseFullNumber]);\n\n useLayoutEffect(() => {\n if (inputRef.current && lastSelection) {\n inputRef.current.setSelectionRange(...lastSelection);\n }\n }, [lastSelection]);\n\n const isJustPastedRef = useRef(false);\n const handlePaste = useCallback(() => {\n isJustPastedRef.current = true;\n requestAnimationFrame(() => {\n isJustPastedRef.current = false;\n });\n }, []);\n\n const handleCountryChange = useCallback((value: ApiCountryCode) => {\n setCountry(value);\n setPhoneNumber('');\n }, []);\n\n const handlePhoneNumberChange = useCallback((e: ChangeEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n // This is for further screens. We delay it until user input to speed up the initial loading.\n if (!isPreloadInitiated) {\n isPreloadInitiated = true;\n preloadFonts();\n void preloadImage(monkeyPath);\n }\n\n const { value, selectionStart, selectionEnd } = e.target;\n setLastSelection(\n selectionStart && selectionEnd && selectionEnd < value.length\n ? [selectionStart, selectionEnd]\n : undefined,\n );\n\n setIsTouched(true);\n\n const shouldFixSafariAutoComplete = (\n IS_SAFARI && country && fullNumber !== undefined\n && value.length - fullNumber.length > 1 && !isJustPastedRef.current\n );\n parseFullNumber(shouldFixSafariAutoComplete ? `${country!.countryCode} ${value}` : value);\n }, [authError, clearAuthError, country, fullNumber, parseFullNumber]);\n\n const handleKeepSessionChange = useCallback((e: ChangeEvent) => {\n setAuthRememberMe(e.target.checked);\n }, [setAuthRememberMe]);\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (authIsLoading) {\n return;\n }\n\n if (canSubmit) {\n setAuthPhoneNumber({ phoneNumber: fullNumber });\n }\n }\n\n const isAuthReady = authState === 'authorizationStateWaitPhoneNumber';\n\n return (\n
\n
\n
\n

Telegram

\n

{lang('StartText')}

\n
\n \n \n \n {canSubmit && (\n isAuthReady ? (\n \n ) : (\n \n )\n )}\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: { byKey: { language } },\n countryList: { phoneCodes: phoneCodeList },\n } = global;\n\n return {\n ...pick(global, [\n 'connectionState',\n 'authState',\n 'authPhoneNumber',\n 'authIsLoading',\n 'authIsLoadingQrCode',\n 'authError',\n 'authRememberMe',\n 'authNearestCountry',\n ]),\n language,\n phoneCodeList,\n };\n },\n)(AuthPhoneNumber));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthCodeAsync: FC = () => {\n const AuthCode = useModuleLoader(Bundles.Auth, 'AuthCode');\n\n return AuthCode ? : ;\n};\n\nexport default memo(AuthCodeAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthPasswordAsync: FC = () => {\n const AuthPassword = useModuleLoader(Bundles.Auth, 'AuthPassword');\n\n return AuthPassword ? : ;\n};\n\nexport default memo(AuthPasswordAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthRegisterAsync: FC = () => {\n const AuthRegister = useModuleLoader(Bundles.Auth, 'AuthRegister');\n\n return AuthRegister ? : ;\n};\n\nexport default memo(AuthRegisterAsync);\n","/*\n jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */\n'use strict';let G=null;class H{}H.render=function(w,B){G(w,B)};self.QrCreator=H;\n(function(w){function B(t,c,a,e){var b={},h=w(a,c);h.u(t);h.J();e=e||0;var r=h.h(),d=h.h()+2*e;b.text=t;b.level=c;b.version=a;b.O=d;b.a=function(b,a){b-=e;a-=e;return 0>b||b>=r||0>a||a>=r?!1:h.a(b,a)};return b}function C(t,c,a,e,b,h,r,d,g,x){function u(b,a,f,c,d,r,g){b?(t.lineTo(a+r,f+g),t.arcTo(a,f,c,d,h)):t.lineTo(a,f)}r?t.moveTo(c+h,a):t.moveTo(c,a);u(d,e,a,e,b,-h,0);u(g,e,b,c,b,0,-h);u(x,c,b,c,a,h,0);u(r,c,a,e,a,0,h)}function z(t,c,a,e,b,h,r,d,g,x){function u(b,a,c,d){t.moveTo(b+c,a);t.lineTo(b,\na);t.lineTo(b,a+d);t.arcTo(b,a,b+c,a,h)}r&&u(c,a,h,h);d&&u(e,a,-h,h);g&&u(e,b,-h,-h);x&&u(c,b,h,-h)}function A(t,c){var a=c.fill;if(\"string\"===typeof a)t.fillStyle=a;else{var e=a.type,b=a.colorStops;a=a.position.map((b)=>Math.round(b*c.size));if(\"linear-gradient\"===e)var h=t.createLinearGradient.apply(t,a);else if(\"radial-gradient\"===e)h=t.createRadialGradient.apply(t,a);else throw Error(\"Unsupported fill\");b.forEach(([b,a])=>{h.addColorStop(b,a)});t.fillStyle=h}}function y(t,c){a:{var a=c.text,e=\nc.v,b=c.N,h=c.K,r=c.P;b=Math.max(1,b||1);for(h=Math.min(40,h||40);b<=h;b+=1)try{var d=B(a,e,b,r);break a}catch(J){}d=void 0}if(!d)return null;a=t.getContext(\"2d\");c.background&&(a.fillStyle=c.background,a.fillRect(c.left,c.top,c.size,c.size));e=d.O;h=c.size/e;a.beginPath();for(r=0;r>>7-b%8&1)},put:function(b,h){for(var a=0;a>>h-a-1&1))},f:function(){return a},m:function(b){var h=Math.floor(a/8);c.length<=h&&c.push(0);b&&(c[h]|=128>>>a%8);a+=1}};return e}function C(c,a){function e(b,h){for(var a=-1;7>=a;a+=1)if(!(-1>=b+a||d<=b+a))for(var c=-1;7>=c;c+=1)-1>=h+c||d<=h+c||(r[b+a][h+c]=0<=a&&6>=a&&(0==c||6==c)||0<=c&&6>=c&&(0==a||6==a)||2<=a&&4>=a&&2<=c&&4>=c?!0:!1)}function b(b,a){for(var f=d=4*c+17,k=Array(f),m=0;m<\nf;m+=1){k[m]=Array(f);for(var p=0;p=n;n+=1)for(var l=-2;2>=l;l+=1)r[p+n][q+l]=-2==n||2==n||-2==l||2==l||0==n&&0==l}for(f=8;fk;k+=1)m=!b&&1==(f>>k&1),r[6>k?k:8>k?k+1:d-15+k][8]=m,r[8][8>k?d-k-1:9>k?15-k:14-k]=m;r[d-8][8]=!b;if(7<=\nc){f=y.A(c);for(k=0;18>k;k+=1)m=!b&&1==(f>>k&1),r[Math.floor(k/3)][k%3+d-8-3]=m;for(k=0;18>k;k+=1)m=!b&&1==(f>>k&1),r[k%3+d-8-3][Math.floor(k/3)]=m}if(null==g){b=t.I(c,h);f=B();for(k=0;k8*m)throw Error(\"code length overflow. (\"+f.f()+\">\"+8*m+\")\");for(f.f()+4<=8*m&&f.put(0,4);0!=f.f()%8;)f.m(!1);for(;!(f.f()>=8*m);){f.put(236,8);if(f.f()>=8*m)break;f.put(17,8)}var u=0;m=k=0;p=Array(b.length);\nq=Array(b.length);for(n=0;nn;n+=1)null==r[k][q-n]&&(l=!1,p>>m&1)),a(k,q-n)&&(l=!l),r[k][q-n]=l,--m,-1==m&&(p+=1,m=7));k+=f;if(0>k||d<=k){k-=f;f=-f;break}}}var h=A[a],r=null,d=0,g=null,x=[],u={u:function(b){b=w(b);x.push(b);g=null},a:function(b,a){if(0>b||d<=b||0>a||d<=a)throw Error(b+\",\"+a);return r[b][a]},h:function(){return d},J:function(){for(var a=0,h=0,c=0;8>c;c+=1){b(!0,c);var d=y.D(u);if(0==c||a>d)a=d,h=c}b(!1,h)}};return u}\nfunction z(c,a){if(\"undefined\"==typeof c.length)throw Error(c.length+\"/\"+a);var e=function(){for(var b=0;bb.b()-a.b())return b;for(var c=v.g(b.c(0))-v.g(a.c(0)),h=Array(b.b()),\ng=0;gb?a.push(b):2048>b?a.push(192|b>>6,128|b&63):55296>b||57344<=b?a.push(224|b>>12,128|b>>6&63,128|b&63):(e++,b=65536+((b&1023)<<10|c.charCodeAt(e)&1023),a.push(240|b>>18,128|b>>12&63,128|b>>6&63,128|b&63))}return a};var A={L:1,M:0,Q:3,H:2},y=function(){function c(b){for(var a=0;0!=b;)a+=1,b>>>=1;return a}var a=[[],[6,18],\n[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],\n[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],e={w:function(b){for(var a=b<<10;0<=c(a)-c(1335);)a^=1335<a||40a?8:16},D:function(b){for(var a=b.h(),c=0,\nd=0;d=p;p+=1)if(!(0>d+p||a<=d+p))for(var q=-1;1>=q;q+=1)0>g+q||a<=g+q||(0!=p||0!=q)&&t==b.a(d+p,g+q)&&(e+=1);5e;e+=1)c[e]=1<e;e+=1)c[e]=c[e-4]^c[e-5]^c[e-6]^c[e-8];for(e=0;255>e;e+=1)a[c[e]]=e;return{g:function(b){if(1>b)throw Error(\"glog(\"+b+\")\");return a[b]},i:function(b){for(;0>b;)b+=255;for(;256<=b;)b-=255;return c[b]}}}(),t=function(){function c(b,c){switch(c){case A.L:return a[4*\n(b-1)];case A.M:return a[4*(b-1)+1];case A.Q:return a[4*(b-1)+2];case A.H:return a[4*(b-1)+3]}}var a=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,\n2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,\n45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,\n151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],\n[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],\n[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],e={I:function(b,a){var e=c(b,a);if(\"undefined\"==\ntypeof e)throw Error(\"bad rs block @ typeNumber:\"+b+\"/errorCorrectLevel:\"+a);b=e.length/3;a=[];for(var d=0;d\n & {\n language?: LangCode;\n };\n\nconst DATA_PREFIX = 'tg://login?token=';\n\nconst AuthCode: FC = ({\n connectionState,\n authState,\n authQrCode,\n language,\n}) => {\n const {\n returnToAuthPhoneNumber,\n setSettingOption,\n } = getDispatch();\n\n const suggestedLanguage = getSuggestedLanguage();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const qrCodeRef = useRef(null);\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n useEffect(() => {\n if (!authQrCode || connectionState !== 'connectionStateReady') {\n return;\n }\n\n const container = qrCodeRef.current!;\n\n container.innerHTML = '';\n container.classList.remove('pre-animate');\n\n QrCreator.render({\n text: `${DATA_PREFIX}${authQrCode.token}`,\n radius: 0.5,\n ecLevel: 'M',\n fill: '#4E96D4',\n size: 280,\n }, container);\n }, [connectionState, authQrCode]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n void setLanguage(DEFAULT_LANG_CODE);\n }\n }, [connectionState]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n const isAuthReady = authState === 'authorizationStateWaitQrCode';\n\n return (\n
\n
\n {authQrCode ? (\n
\n ) : (\n
\n )}\n

{lang('Login.QR.Title')}

\n
    \n
  1. {lang('Login.QR.Help1')}
  2. \n
  3. {renderText(lang('Login.QR.Help2'), ['simple_markdown'])}
  4. \n
  5. {lang('Login.QR.Help3')}
  6. \n
\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n connectionState, authState, authQrCode, settings: { byKey: { language } },\n } = global;\n\n return {\n connectionState,\n authState,\n authQrCode,\n language,\n };\n },\n)(AuthCode));\n","import React, { FC, useEffect, memo } from '../../lib/teact/teact';\nimport { getDispatch, withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalState } from '../../global/types';\n\nimport '../../modules/actions/initial';\nimport { pick } from '../../util/iteratees';\nimport { PLATFORM_ENV } from '../../util/environment';\nimport windowSize from '../../util/windowSize';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport UiLoader from '../common/UiLoader';\nimport AuthPhoneNumber from './AuthPhoneNumber';\nimport AuthCode from './AuthCode.async';\nimport AuthPassword from './AuthPassword.async';\nimport AuthRegister from './AuthRegister.async';\nimport AuthQrCode from './AuthQrCode';\n\nimport './Auth.scss';\n\ntype StateProps = Pick;\n\nconst Auth: FC = ({\n authState,\n}) => {\n const {\n reset, initApi, returnToAuthPhoneNumber, goToAuthQrCode,\n } = getDispatch();\n\n useEffect(() => {\n reset();\n initApi();\n }, [reset, initApi]);\n\n const isMobile = PLATFORM_ENV === 'iOS' || PLATFORM_ENV === 'Android';\n\n const handleChangeAuthorizationMethod = () => {\n if (!isMobile) {\n goToAuthQrCode();\n } else {\n returnToAuthPhoneNumber();\n }\n };\n\n useHistoryBack(\n (!isMobile && authState === 'authorizationStateWaitPhoneNumber')\n || (isMobile && authState === 'authorizationStateWaitQrCode'), handleChangeAuthorizationMethod,\n );\n\n // Prevent refresh when rotating device\n useEffect(() => {\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, []);\n\n switch (authState) {\n case 'authorizationStateWaitCode':\n return ;\n case 'authorizationStateWaitPassword':\n return ;\n case 'authorizationStateWaitRegistration':\n return ;\n case 'authorizationStateWaitPhoneNumber':\n return ;\n case 'authorizationStateWaitQrCode':\n return ;\n default:\n return isMobile\n ? \n : ;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(Auth));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MainAsync: FC = () => {\n const Main = useModuleLoader(Bundles.Main, 'Main');\n\n return Main ?
: undefined;\n};\n\nexport default memo(MainAsync);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport Button from '../ui/Button';\n\nimport appInactivePath from '../../assets/app-inactive.png';\nimport './AppInactive.scss';\n\nconst AppInactive: FC = () => {\n const handleReload = () => {\n window.location.reload();\n };\n\n return (\n
\n
\n \"\"\n

Such error, many tabs

\n
\n Telegram supports only one active tab with the app.\n
\n Please reload this page to continue using this tab or close it.\n
\n
\n \n
\n
\n
\n );\n};\n\nexport default AppInactive;\n","import { FC, useEffect } from './lib/teact/teact';\nimport React, { getDispatch, withGlobal } from './lib/teact/teactn';\n\nimport { GlobalState } from './global/types';\n\nimport { INACTIVE_MARKER, PAGE_TITLE } from './config';\nimport { pick } from './util/iteratees';\nimport { updateSizes } from './util/windowSize';\nimport { addActiveTabChangeListener } from './util/activeTabMonitor';\nimport useFlag from './hooks/useFlag';\n\nimport Auth from './components/auth/Auth';\nimport UiLoader from './components/common/UiLoader';\nimport Main from './components/main/Main.async';\nimport AppInactive from './components/main/AppInactive';\nimport { hasStoredSession } from './util/sessions';\n// import Test from './components/test/TestNoRedundancy';\n\ntype StateProps = Pick;\n\nconst App: FC = ({ authState }) => {\n const { disconnect } = getDispatch();\n\n const [isInactive, markInactive] = useFlag(false);\n\n useEffect(() => {\n updateSizes();\n addActiveTabChangeListener(() => {\n disconnect();\n document.title = `${PAGE_TITLE}${INACTIVE_MARKER}`;\n\n markInactive();\n });\n }, [disconnect, markInactive]);\n\n // return ;\n\n if (isInactive) {\n return ;\n }\n\n if (authState) {\n switch (authState) {\n case 'authorizationStateWaitPhoneNumber':\n case 'authorizationStateWaitCode':\n case 'authorizationStateWaitPassword':\n case 'authorizationStateWaitRegistration':\n case 'authorizationStateWaitQrCode':\n return ;\n case 'authorizationStateClosed':\n case 'authorizationStateClosing':\n case 'authorizationStateLoggingOut':\n case 'authorizationStateReady':\n return renderMain();\n }\n }\n\n return hasStoredSession(true) ? renderMain() : ;\n};\n\nfunction renderMain() {\n return (\n \n
\n \n );\n}\n\nexport default withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(App);\n","import './util/handleError';\nimport './util/setupServiceWorker';\n\nimport React, { getDispatch, getGlobal } from './lib/teact/teactn';\nimport TeactDOM from './lib/teact/teact-dom';\n\nimport './global';\n\nimport { DEBUG } from './config';\n\nimport App from './App';\n\nimport './styles/index.scss';\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> INIT');\n}\n\ngetDispatch().init();\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START INITIAL RENDER');\n}\n\nTeactDOM.render(\n ,\n document.getElementById('root'),\n);\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH INITIAL RENDER');\n}\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('GLOBAL STATE', getGlobal());\n});\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","worker","requestStates","Map","requestStatesByCallback","initApi","onUpdate","initialArgs","DEBUG","console","log","Worker","URL","addEventListener","data","type","update","requestState","get","messageId","error","reject","resolve","response","callback","callbackArgs","Error","message","subscribeToWorker","platform","window","ensureWorkerPing","setTimeout","makeRequest","args","callApi","fnName","warn","promise","name","err","cancelApiProgress","progressCallback","isCanceled","postMessage","generateIdFor","payload","Promise","Object","assign","pop","set","catch","finally","delete","startedAt","Date","now","async","race","pause","then","location","reload","ApiMediaFormat","ApiMessageEntityTypes","MAIN_THREAD_ID","MESSAGE_DELETED","base","maxint","adapt","delta","numpoints","firsttime","k","Math","floor","decode","input","preserveCase","output","case_flags","input_length","length","n","out","i","bias","basic","j","ic","oldi","w","digit","t","len","lastIndexOf","charCodeAt","RangeError","push","cp","splice","String","fromCharCode","toUpperCase","value","join","utf16","getDomain","url","href","ensureProtocol","decodedHref","decodeURI","match","domain","replace","domain_array","split","s","slice","convertPunycode","memo","text","className","children","isRtl","toggleSafeLinkModal","openTelegramLink","getDispatch","content","isNotSafe","handleClick","useCallback","e","ctrlKey","altKey","shiftKey","metaKey","RE_TME_LINK","RE_TG_LINK","preventDefault","classNames","buildClassName","title","target","rel","onClick","dir","getFileSizeString","bytes","ONE_GIGABYTE","toFixed","ONE_MEGABYTE","getDocumentExtension","document","fileName","mimeType","getFileExtension","indexOf","getColorFromExtension","extension","getDocumentHasPreview","Boolean","previewBlobUrl","thumbnail","RE_EMOJI_ONLY","RegExp","twemojiRegex","DETECT_UP_TO","emojiCount","sender","openChat","id","Link","focusMessage","handleMessageClick","chatId","groupCall","joinGroupCall","accessHash","MAX_LENGTH","NBSP","renderActionMessageText","lang","actionOriginUser","actionOriginChat","targetUsers","targetMessage","targetChatId","options","action","translationValues","amount","currency","call","noLinks","asPlainText","asTextWithSpoilers","translationKey","processed","unprocessed","undefined","includes","processPlaceholder","formatCurrency","code","renderUserContent","renderChatContent","map","user","filter","renderMessageContent","renderProductContent","renderMigratedContent","trim","renderGroupCallContent","invoice","getMessageSummaryText","messageSummary","renderMessageSummary","trimText","getUserFullName","renderText","chat","getChatTitle","placeholder","replaceValue","placeholderPosition","substring","Array","isArray","forEach","index","renderMessageText","highlight","shouldRenderHqEmoji","isSimple","truncateLength","entities","contentNotSupportedText","getMessageText","renderTextWithEntities","noEmoji","TRUNCATED_SUMMARY_LENGTH","hasSpoilers","some","emoji","getMessageSummaryEmoji","emojiWithSpace","description","getMessageSummaryDescription","RE_LETTER_OR_DIGIT","SIMPLE_MARKDOWN_REGEX","part","filters","params","compact","reduce","escapeHtml","EMOJI_REGEX","replaceEmojis","addLineBreaks","addHighlight","addLinks","replaceSimpleMarkdown","textParts","divEl","createElement","result","innerText","innerHTML","size","IS_EMOJI_SUPPORTED","parts","fixNonStandardEmoji","emojis","emojiResult","nativeToUnified","removeVS16s","src","alt","splittenParts","line","source","trimmedLine","trimLeft","indentLength","repeat","lowerCaseText","toLowerCase","queryPosition","nextSymbol","newParts","RE_LINK","RE_LINK_TEMPLATE","RE_MENTION_TEMPLATE","links","nextLink","shift","lastIndex","startsWith","username","endsWith","entityResult","entity","actionsByMessageId","createClassNameBuilder","contentRef","useRef","isRevealed","reveal","conceal","useFlag","stopPropagation","actions","contentLength","current","readingMs","round","timeoutMs","max","min","useEffect","has","ref","shouldRenderAsHtml","renderMessagePart","deleteLineBreakAfterPre","organizedEntities","organizedEntityIndexes","Set","organizedEntity","organizeEntity","organizedIndexes","organizedIndex","add","organizeEntities","renderEntity","textPartStart","textPartEnd","isLastEntity","renderResult","nestedEntities","offset","textBefore","textBeforeLength","substr","entityStartIndex","entityEndIndex","entityContent","nestedEntityContent","nestedIndex","nestedEntity","nestedEntityIndex","nestedResult","nestedEntityEndIndex","newEntity","rawEntityText","renderedContent","userId","getLinkUrl","processEntityAsHtml","entityText","renderNestedMessagePart","handleBotCommandClick","handleHashtagClick","MentionLink","SafeLink","processEntity","textAfter","arrayIndex","getTextWithEntitiesAsHtml","formattedText","c","concat","parsedEntity","isChanged","sendBotCommand","command","currentTarget","setLocalTextSearchQuery","query","searchTextMessagesLocal","preventMessageInputBlur","withBubbling","IS_IOS","activeElement","EDITABLE_INPUT_ID","preventMessageInputBlurWithBubbling","withGlobal","global","userOrChat","selectUser","openChatByUsername","onContextMenu","onMouseDown","onMouseEnter","onMouseLeave","onFocus","color","backgroundImage","pill","fluid","isText","isLoading","ariaLabel","download","disabled","ripple","faded","tabIndex","withClickPropagation","elementRef","isClicked","setIsClicked","useState","fullClassName","handleMouseDown","style","label","subLabel","checked","blocking","onChange","onCheck","useLang","handleChange","event","trigger","positionX","positionY","footer","forceOpen","onOpen","onClose","menuRef","dropdownRef","isOpen","setIsOpen","onKeyDown","menu","keyCode","focusedElement","elementChildren","from","focus","onTrigger","containerRef","autoClose","shouldSkipTransition","success","readOnly","autoComplete","inputMode","maxLength","onInput","onKeyPress","onBlur","onPaste","labelText","htmlFor","backgroundColor","bubbleStyle","transformOriginX","transformOriginY","noCloseOnBackdrop","onCloseAnimationEnd","backdropContainerRef","transitionClassNames","useShowTransition","captureEscKeyListener","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","dispatchHeavyAnimationEvent","handleKeyDown","useKeyboardListNavigation","useVirtualBackdrop","bubbleClassName","transformOriginYStyle","transformOriginXStyle","props","icon","destructive","origin","role","ripples","setRipples","cleanUpDebounced","useMemo","debounce","button","container","position","getBoundingClientRect","rippleSize","offsetWidth","x","clientX","y","clientY","requestAnimationFrame","APP_NAME","APP_VERSION","process","APP_REVISION","DEBUG_MORE","IS_TEST","DEBUG_ALERT_MSG","PAGE_TITLE","INACTIVE_MARKER","SESSION_USER_KEY","LEGACY_SESSION_KEY","GLOBAL_STATE_CACHE_DISABLED","GLOBAL_STATE_CACHE_KEY","GLOBAL_STATE_CACHE_USER_LIST_LIMIT","GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT","GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT","MEDIA_CACHE_DISABLED","MEDIA_CACHE_NAME","MEDIA_CACHE_NAME_AVATARS","MEDIA_PROGRESSIVE_CACHE_NAME","CUSTOM_BG_CACHE_NAME","LANG_CACHE_NAME","AUTODOWNLOAD_FILESIZE_MB_LIMITS","isBigScreen","innerHeight","MIN_PASSWORD_LENGTH","MESSAGE_LIST_SLICE","MESSAGE_LIST_VIEWPORT_LIMIT","CHAT_HEIGHT_PX","CHAT_LIST_SLICE","CHAT_LIST_LOAD_SLICE","SHARED_MEDIA_SLICE","MESSAGE_SEARCH_SLICE","GLOBAL_SEARCH_SLICE","MEMBERS_SLICE","MEMBERS_LOAD_SLICE","PROFILE_SENSITIVE_AREA","TOP_CHAT_MESSAGES_PRELOAD_LIMIT","DEFAULT_VOLUME","DEFAULT_PLAYBACK_RATE","ANIMATION_LEVEL_MIN","ANIMATION_LEVEL_MAX","ANIMATION_LEVEL_DEFAULT","DEFAULT_MESSAGE_TEXT_SIZE_PX","IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","DRAFT_DEBOUNCE","SEND_MESSAGE_ACTION_INTERVAL","EDITABLE_INPUT_MODAL_ID","SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","SAFE_SCREEN_WIDTH_FOR_CHAT_INFO","MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN","MOBILE_SCREEN_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT","LOCAL_MESSAGE_ID_BASE","TMP_CHAT_ID","ANIMATION_END_DELAY","FAST_SMOOTH_MAX_DISTANCE","FAST_SMOOTH_MIN_DURATION","FAST_SMOOTH_MAX_DURATION","FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE","STICKER_SIZE_INLINE_DESKTOP_FACTOR","STICKER_SIZE_INLINE_MOBILE_FACTOR","STICKER_SIZE_AUTH","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_PICKER","STICKER_SIZE_GENERAL_SETTINGS","STICKER_SIZE_PICKER_HEADER","STICKER_SIZE_SEARCH","STICKER_SIZE_MODAL","STICKER_SIZE_TWO_FA","STICKER_SIZE_DISCUSSION_GROUPS","STICKER_SIZE_FOLDER_SETTINGS","STICKER_SIZE_INLINE_BOT_RESULT","STICKER_SIZE_JOIN_REQUESTS","STICKER_SIZE_INVITES","NO_STICKER_SET_ID","BASE_EMOJI_KEYWORD_LANG","MENU_TRANSITION_DURATION","SLIDE_TRANSITION_DURATION","VIDEO_MOV_TYPE","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","CONTENT_TYPES_WITH_PREVIEW","CONTENT_NOT_SUPPORTED","COUNTRIES_WITH_12H_TIME_FORMAT","SERVICE_NOTIFICATIONS_USER_ID","REPLIES_USER_ID","ALL_FOLDER_ID","ARCHIVED_FOLDER_ID","MAX_MEDIA_FILES_FOR_ALBUM","MAX_ACTIVE_PINNED_CHATS","SCHEDULED_WHEN_ONLINE","DEFAULT_LANG_CODE","DEFAULT_LANG_PACK","LANG_PACKS","TIPS_USERNAME","LOCALIZED_TIPS","FEEDBACK_URL","LIGHT_THEME_BG_COLOR","DARK_THEME_BG_COLOR","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","GROUP_CALL_VOLUME_MULTIPLIER","GROUP_CALL_DEFAULT_VOLUME","ENABLE_THUMBNAIL_VIDEO","cb","dependencies","debugKey","prevDeps","usePrevious","initial","setValue","setTrue","setFalse","setTrigger","ANIMATION_START_EVENT","ANIMATION_END_EVENT","timeout","isAnimating","isHeavyAnimating","duration","onEnd","clearTimeout","dispatchEvent","Event","handleAnimationStart","handleAnimationEnd","isDisabled","removeEventListener","LOCATION_HASH","hash","PATH_BASE","pathname","search","historyState","currentIndex","nextStateIndexToReplace","isHistoryAltered","isEdge","currentIndexes","disableHistoryBack","handleTouchEnd","isActive","onBack","onForward","currentState","shouldReplaceNext","hashes","indexRef","isForward","prevIsActive","isClosed","indexHashRef","prevHashes","isHashChangedFromEvent","isForceClose","prev","history","pushState","state","last","realDelta","indexLast","findIndex","l","go","replaceState","back","handlePopState","currIndex","disableHistoryAnimations","hasChanged","areSortedArraysEqual","forceClose","touches","pageX","innerWidth","onSelectWithEnter","itemSelector","noCaptureFocus","focusedIndex","setFocusedIndex","element","querySelectorAll","newIndex","item","forceUpdate","useForceUpdate","useOnChange","langProvider","bundleName","moduleName","noLoad","autoUpdate","module","getModuleFromMemory","addLoadListener","loadModule","d","next","shouldSkipUndefined","onCloseTransitionEnd","noOpenTransition","noCloseTransition","setIsClosed","closeTimeoutRef","hasOpenClassName","setHasOpenClassName","exec","shouldHaveOpenClassName","isClosing","shouldRender","handleEvent","contains","classList","NON_BUBBLEABLE_EVENTS","documentEventCounters","delegationRegistryByEventType","delegatedEventTypesByElement","propName","handler","asCapture","eventType","resolveEventType","canUseEventDelegation","addDelegatedListener","removeDelegatedListener","tagName","realEventType","resolveDelegationRegistry","existing","newSet","resolveDelegatedEventTypes","removeAllDelegatedListeners","eventTypes","realEvent","events","furtherCallsPrevented","Proxy","p","Reflect","body","parentNode","documentListenersCount","keys","delegatedHandlersCount1","values","acc","counter","delegationRegistriesCount","delegatedHandlersCount2","delegationRegistry","delegationElementsCount","delegatedEventTypesCount","FILTERED_ATTRIBUTES","HTML_ATTRIBUTES","MAPPED_ATTRIBUTES","autoPlay","headsByElement","renderWithVirtual","parentEl","$current","$new","$parent","skipComponentUpdate","forceIndex","fragment","moveDirection","isCurrentComponent","isComponentElement","isNewComponent","hasElementChanged","updateComponent","componentInstance","isMounted","setupComponentUpdateListener","initComponent","node","createNode","setTarget","childNodes","insertBefore","appendChild","removeChild","getTarget","unmountTree","replaceChild","areComponents","isRealElement","nextSibling","updateAttributes","renderChildren","$element","mountComponent","$firstChild","renderComponent","isEmptyElement","createTextNode","isTextElement","tag","entries","key","setAttribute","$child","currentEl","teactFastList","newKeys","$newChild","currentRemainingIndex","remainingByKey","$currentChild","isKeyPresent","newChildKey","order","teactOrderKey","fragmentQueue","fragmentIndex","newChildren","currentPreservedIndex","currentChildInfo","flushFragmentQueue","shouldMoveNode","isMovingDown","renderFastListChildren","currentChildrenLength","newChildrenLength","createDocumentFragment","$fragmentChild","currentEntries","newEntries","currentValue","newValue","cssText","removeAttribute","__html","render","headId","getAttribute","$head","VirtualElementTypesEnum","Fragment","Symbol","DEBUG_SILENT_RENDERS_FOR","renderingInstance","Empty","Text","isTagElement","Tag","Component","flatten","createComponentInstance","buildTagElement","parsedChildren","hooks","cursor","byCursor","effects","memos","buildComponentElement","dropEmptyTail","buildChildElement","isEmptyPlaceholder","child","DEBUG_components","newRenderedValue","DEBUG_startAt","componentName","renderCount","renderTimes","performance","handleError","renderedValue","newChild","$old","memoContainer","cleanup","hook","effect","nextValue","setter","helpGc","prepareComponentForFrame","prepareForFrame","throttleWithPrimaryRaf","throttleWithRaf","forceUpdateComponent","currentElement","DEBUG_contentComponentName","useLayoutEffectBase","schedulerFn","primarySchedulerFn","execCleanup","dependency","causedBy","res","prevValue","fastRaf","fastRafPrimary","useLayoutEffect","onTickEnd","onTickEndPrimary","resolver","getUnequalProps","newCallback","areEqual","arePropsShallowEqual","propsRef","renderedRef","orderBy","React","currentGlobal","reducers","callbacks","containers","mapStateToProps","ownProps","mappedProps","newMappedProps","Number","isNaN","DEBUG_componentName","areMappedPropsChanged","DEBUG_updates","updateTime","runCallbacksThrottled","throttleWithTickEnd","runCallbacks","forceOnHeavyAnimation","setGlobal","newGlobal","forceSyncOnIOs","getGlobal","addReducer","reducer","onDispatch","addCallback","removeCallback","TeactNContainer","vs16RegExp","zeroWidthJoiner","rawEmoji","importLegacySession","clearLegacySessions","apiUpdate","userAgent","navigator","PLATFORM_ENV","sessionData","loadStoredSession","isTest","isMovSupported","IS_MOV_SUPPORTED","isWebmSupported","IS_WEBM_SUPPORTED","phoneNumber","authIsLoading","authError","password","file","firstName","lastName","authIsLoadingQrCode","storeSession","currentUserId","clearStoredSession","unsubscribe","forceWebsync","reset","cacheApi","langCachePrefix","langCacheVersion","updateAppBadge","init","connectionState","authNearestCountry","deviceToken","subscribedAt","buildInputPrivacyRules","visibility","allowedIds","deniedIds","users","byId","usersById","chats","chatsById","rules","collectUsers","isUserId","collectChats","allowedUsers","allowedChats","blockedUsers","blockedChats","photo","bio","about","profileEdit","progress","ProfileEditProgress","currentUser","updateUser","fullInfo","isUsernameAvailable","settings","loadedWallpapers","wallpapers","createObjectURL","slug","UPLOADING_WALLPAPER_SLUG","wallpaper","firstWallpaper","withLocalMedia","addUsers","buildCollectionByKey","updateChats","blocked","ids","blockedIds","totalCount","contactId","addBlockedContact","removeBlockedContact","activeSessions","session","isCurrent","serverTimeOffset","addNotifyExceptions","replaceSettings","peerType","isSilent","shouldShowPreviews","updateNotifySettings","hasPushNotifications","hasWebNotifications","byKey","subscribe","hasContactJoinedNotifications","languages","phoneNumberSettings","lastSeenSettings","profilePhotoSettings","forwardsSettings","chatInviteSettings","all","privacy","lastSeen","profilePhoto","forwards","chatInvite","privacyKey","allowUserIds","allowChatIds","blockUserIds","blockChatIds","isAllowList","contactsIds","isSensitiveEnabled","langCode","language","countryList","timeFormat","setSettingOption","setTimeFormat","wasTimeFormatSetManually","nearestCountryCode","appConfig","selectNotifySettings","setLanguage","onUpdateApiReady","wasAuthReady","authState","authorizationState","isLoggingOut","authIsCodeViaApp","isCodeViaApp","authHint","hint","authQrCode","qrCode","onUpdateAuthorizationState","onUpdateAuthorizationError","signOut","onUpdateConnectionState","authRememberMe","isEmpty","mainDcId","saveSession","onUpdateSession","onUpdateServerTimeOffset","sessionUserAuth","localStorage","getItem","userAuth","JSON","parse","setItem","stringify","updateSessionUserId","onUpdateCurrentUser","paymentShippingError","getShippingError","addPaymentError","showDialog","handleSystemThemeChange","currentThemeMatch","documentElement","currentTheme","nextTheme","selectTheme","animationLevel","switchTheme","mql","matchMedia","addListener","subscribeToSystemThemeChange","messageTextSize","theme","setProperty","toString","IS_TOUCH_ENV","ensurePermanentWebVersion","startWebsync","IS_ANDROID","IS_MAC_OS","IS_SAFARI","uiReadyState","remove","authPhoneNumber","shouldSkipHistoryAnimations","replaceThemeSettings","FOREVER_BANNED_DATE","VERIFIED_PRIORITY_BASE","PINNED_PRIORITY_BASE","entityId","isChatGroup","isChatBasicGroup","isChatSuperGroup","isChatChannel","isCommonBoxChat","isChatWithRepliesBot","getChatTypeString","getPrivateChatUserId","isSelf","getChatDescription","getChatLink","inviteLink","getChatAvatarHash","owner","avatarHash","isChatSummaryOnly","lastMessage","isChatAdmin","adminRights","getHasAdminRight","isUserRightBanned","currentUserBannedRights","defaultBannedRights","getCanPostInChat","threadId","isRestricted","migratedTo","isNotJoined","isCreator","getAllowedAttachmentOptions","isChatWithBot","canAttachMedia","canAttachPolls","canSendStickers","canSendGifs","canAttachEmbedLinks","isAdmin","getMessageSendingRestrictionReason","sendMessages","untilDate","formatDateToString","formatTime","getChatSlowModeOptions","slowMode","isChatArchived","folderId","selectIsChatMuted","notifySettings","notifyExceptions","isMuted","hasPrivateChatsNotifications","hasBroadcastNotifications","hasGroupNotifications","selectShouldShowMessagePreview","hasPrivateChatsMessagePreview","hasBroadcastMessagePreview","hasGroupMessagePreview","getCanDeleteChat","getFolderDescriptionText","folder","chatsCount","emoticon","pinnedChatIds","excludedChatIds","includedChatIds","excludeArchived","excludeMuted","excludeRead","bots","groups","channels","contacts","nonContacts","getMessageSenderName","getUserFirstOrLastName","sortChatIds","chatIds","shouldPrioritizeVerified","priorityIds","priority","date","isVerified","filterChatsByName","searchWords","prepareSearchWordsForNeedle","getMessageKey","msgId","buildMessageKey","parseMessageKey","getMessageOriginalId","previousLocalId","sticker","video","audio","voice","poll","webPage","contact","getMessageCustomShape","isRound","parseEmojiOnlyString","getMessageSingleEmoji","getFirstLinkInMessage","link","find","isOwnMessage","isOutgoing","isReplyMessage","replyToMessageId","isForwardedMessage","forwardInfo","isActionMessage","isServiceNotificationMessage","isAnonymousOwnMessage","senderId","getSenderTitle","getSendingState","sendingState","isMessageLocal","isHistoryClearMessage","getMessageContentFilename","isLottie","isGif","isWebpSupported","baseFilename","IS_OPUS_SUPPORTED","areReactionsEmpty","reactions","results","count","SPOILER_CHARS","noReactions","getMessageTextWithSpoilers","accText","spoiler","fill","random","generateBrailleSpoiler","groupedId","reaction","getMessageRecentReaction","truncatedText","summary","getMessageAudioCaption","question","performer","getMessageContent","hasMessageMedia","getMessagePhoto","getMessageVideo","getMessageDocument","getMessageSticker","getMessageContact","getMessagePoll","getMessageAction","getMessageAudio","getMessageVoice","getMessageRoundVideo","isMessageDocumentPhoto","mediaType","isMessageDocumentVideo","getMessageInvoice","getMessageWebPage","getMessageWebPagePhoto","getMessageWebPageVideo","getMessageMediaThumbDataUri","media","getMessageMediaThumbnail","dataUri","getMessageMediaHash","webPagePhoto","webPageVideo","messageVideo","messagePhoto","mediaId","hasMessageLocalBlobUrl","getVideoOrAudioBaseHash","getAudioHasCover","IS_PROGRESSIVE_SUPPORTED","thumbnailSizes","getMessageMediaFormat","fullVideo","getMessageFileName","getMessageFileSize","blobUrl","getChatMediaMessageIds","messages","listedIds","isFromSharedMedia","getMessageContentIds","getPhotoFullDimensions","sizes","getPhotoInlineDimensions","getVideoDimensions","width","height","getMediaTransferState","isLoadNeeded","isUploading","isTransferring","transferProgress","messageIds","contentType","validator","matchLinkInMessageText","getMediaDuration","buildChatThreadKey","STRIPE_ERRORS","missing_payment_information","field","invalid_number","number","exp_year","exp_month","invalid_expiry_year","invalid_expiry_month","cvc","invalid_cvc","getStripeError","param","recentReactions","checkIfReactionAdded","oldReactions","newReactions","oldReactionsMap","r","USER_COLOR_KEYS","isDeletedUser","getUserStatus","userStatus","wasOnline","getTime","wasOnlineDate","diff","today","setHours","yesterday","setDate","getDate","formatFullDate","isUserOnline","noStatus","isUserBot","getCanAddContact","isContact","sortUserIds","userIds","userStatusesById","getServerTime","expires","filterUsersByName","savedMessagesLang","getUserIdDividend","abs","getUserColorKey","peer","replaceChatListIds","newIds","listIds","updateChatListIds","idsUpdate","replaceChats","newById","updateChat","chatUpdate","updatedChat","getUpdatedChat","updatedById","addChats","isUpdated","addedById","isMin","shouldOmitMinInfo","omit","photos","updateChatListType","listType","currentListIds","listTypeKey","currentFolderList","updateChatListSecondaryInfo","info","totalCountKey","orderedPinnedIds","totalChatCount","isFullyLoaded","leaveChat","leftChatId","selectChatListType","listId","updateStickerSets","category","sets","resultIds","updatedSets","stickerSet","stickers","setsById","setIds","updateStickerSet","stickerSetId","currentStickerSet","addedSets","added","installedDate","updateGifSearch","isNew","nextOffset","currentResults","gifs","newResults","currentIds","gif","replaceAnimatedEmojis","animatedEmojis","updateStickersForEmoji","remoteStickers","allStickers","selectStickersForEmoji","uniqueIds","unique","forEmoji","rebuildStickersForEmoji","replaceUsers","updateContactList","updatedUsers","contactUserIds","contactList","newContactUserIds","userUpdate","updatedUser","getUpdatedUser","updateUsers","deleteContact","MEMO_EMPTY_ARRAY","updateUserSearch","searchStatePartial","userSearch","updateUserSearchFetchingStatus","newState","fetchingStatus","updateUserBlockedState","isBlocked","replaceUserStatuses","statusesById","addUserStatuses","pick","getComplexKey","updateGlobalSearch","globalSearch","updateGlobalSearchContent","currentContent","updateGlobalSearchResults","newFoundMessages","nextRate","resultsByType","newFoundMessagesById","foundIdsForType","foundIds","every","newId","updateGlobalSearchFetchingStatus","prevFoundIds","newFoundIds","prototype","foundOrPrevFoundIds","nextOffsetId","replaceLocalTextSearch","chatThreadKey","searchParams","localTextSearch","byChatThreadKey","updateLocalTextSearch","replaceLocalTextSearchResults","updateLocalTextSearchResults","orderFoundIds","replaceLocalMediaSearch","localMediaSearch","byChatId","updateLocalMediaSearchType","currentType","updateLocalMediaSearchResults","replaceLocalMediaSearchResults","sort","a","b","updateManagementProgress","management","updateManagement","newSettings","themes","notifyException","exceptionData","addNotifyException","updateTwoFaSettings","twoFaSettings","updateShippingOptions","shippingOptions","payment","setRequestInfoId","requestId","setPaymentStep","step","setInvoiceMessageInfo","photoUrl","invoiceContent","setStripeCardInfo","cardInfo","stripeCredentials","setPaymentForm","form","setReceipt","receipt","messageInvoice","clearPayment","closeInvoice","isPaymentModalOpen","updateCurrentMessageList","shouldReplaceHistory","messageLists","newMessageLists","replaceChatMessages","updateMessageStore","threadsById","replaceThreadParam","paramName","threadUpdate","updateThread","addMessages","addedByChatId","messagesByChatId","addChatMessagesById","selectChatMessages","updateChatMessage","messageUpdate","updatedMessage","updateScheduledMessage","selectScheduledMessages","replaceScheduledMessages","deleteChatMessages","deletedForwardedPosts","pickTruthy","isLinkedChannelPost","threadInfo","selectThreadInfo","selectListedIds","outlyingIds","selectOutlyingIds","viewportIds","selectViewportIds","pinnedIds","selectPinnedIds","newMessageCount","messagesCount","currentMessageList","selectCurrentMessageList","canDeleteCurrentThread","currentThreadId","fromChatId","fromMessageId","originalPost","selectChatMessage","deleteChatScheduledMessages","scheduledIds","selectScheduledIds","updateListedIds","orderHistoryIds","updateOutlyingIds","addViewportId","safeReplaceViewportIds","newViewportIds","updateThreadInfo","newThreadInfo","updateThreadInfos","updates","scheduledMessages","updateScheduledMessages","updateFocusedMessage","noHighlight","isResizingContainer","focusedMessage","updateSponsoredMessage","sponsoredByChatId","updateFocusDirection","direction","enterMessageSelectMode","selectedMessages","toggleMessageSelection","messageListType","childMessageIds","withShift","oldSelectedMessages","selectMessageIdsByGroupId","selectedMessageIds","newMessageIds","newSelectedMessageIds","selectCurrentMessageIds","prevIndex","to","exitMessageSelectMode","updateThreadUnreadFromForwardedMessage","originMessage","lastMessageId","isDeleting","channelPostId","threadInfoOld","selectChat","selectChatUser","selectIsChatWithSelf","selectIsChatWithBot","selectSupportChat","isSupport","selectChatOnlineCount","members","onlineCount","selectChatBot","selectIsChatBotNotStarted","bot","messageInfo","selectAreActiveChatsLoaded","active","selectIsChatListed","targetList","list","selectChatFolder","chatFolders","selectIsChatPinned","archived","chatFoldersById","selectChatByUsername","usernameLowered","selectIsServiceChatReady","selectSendAs","sendAsId","selectCurrentStickerSearch","selectCurrentGifSearch","selectStickerSet","selectStickerSetByShortName","shortName","stickerSets","stickersForEmoji","favorite","packs","cleanEmoji","selectAnimatedEmoji","cleanedEmoji","selectAnimatedEmojiEffect","animatedEmojiEffects","selectAnimatedEmojiSound","emojiSounds","selectLocalAnimatedEmoji","selectLocalAnimatedEmojiEffect","selectLocalAnimatedEmojiEffectByName","selectCurrentChat","selectThreadParam","thread","selectScrollOffset","selectReplyingToId","selectEditingId","selectEditingScheduledId","selectDraft","selectNoWebPage","selectFirstMessageId","selectReplyStack","selectThreadOriginChat","originChannelId","selectThreadTopMessageId","topMessageId","selectThreadByMessage","replyToTopMessageId","isMessageInCurrentMessageList","selectIsViewportNewest","chatMessages","selectScheduledMessage","selectEditingMessage","selectChatMessageByPollId","pollId","messageWithPoll","selectFocusedMessageId","focusedChatId","selectIsMessageFocused","focusedId","selectIsMessageUnread","lastReadOutboxMessageId","selectOutgoingStatus","isScheduledList","selectSender","selectForwardedSender","isChannelPost","senderUserId","selectAllowedMessageActions","isPrivate","isChatWithSelf","isBasicGroup","isSuperGroup","isChannel","isLocal","isServiceNotification","isOwn","isAction","isMessageEditable","viaBotId","canReply","hasPinPermission","canPin","canUnpin","pinnedMessageIds","canDelete","canReport","canDeleteForAll","canEdit","canForward","hasSticker","hasFavoriteSticker","selectIsStickerFavorite","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canDownload","noOptions","ability","selectCanDeleteSelectedMessages","messageActions","selectCanReportSelectedMessages","selectCanDownloadSelectedMessages","selectIsDownloading","activeInChat","activeDownloads","selectActiveDownloadIds","selectUploadProgress","fileUploads","byMessageLocalId","selectRealLastReadId","lastReadInboxMessageId","Infinity","selectFirstUnreadId","lastReadId","lastReadServiceNotificationId","serviceNotifications","notification","isUnread","findAfterLastReadId","isFromScheduled","found","selectIsForwardModalOpen","forwardMessages","isModalShown","selectCommonBoxChatId","fromLastMessage","selectIsInSelectMode","selectIsMessageSelected","selectForwardedMessageIdsByGroupId","selectIsDocumentGroupSelected","selectedIds","groupIds","selectSelectedMessagesCount","selectNewestMessageWithBotKeyboardButtons","findLast","keyboardButtons","replyHideMessageId","shouldHideKeyboardButtons","selectCanAutoLoadMedia","isPhoto","isVideo","isFile","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoLoadMedia","canAutoLoadMediaFromContacts","canAutoLoadMediaInPrivateChats","canAutoLoadMediaInGroups","canAutoLoadMediaInChannels","isMediaFromContact","selectIsUserOrChatContact","selectCanAutoPlayMedia","canAutoPlayVideos","canAutoPlayGifs","asGif","selectShouldLoopStickers","shouldLoopStickers","selectLastServiceNotification","maxId","selectIsMessageProtected","isProtected","selectHasProtectedMessage","selectSponsoredMessage","expiresAt","selectDefaultReaction","defaultReaction","availableReactions","isInactive","enabledReactions","selectVisibleUsers","selectCurrentTextSearch","currentSearch","selectCurrentMediaSearch","selectManagement","selectCurrentManagementType","selectIsMediaViewerOpen","mediaViewer","avatarOwnerId","selectRightColumnContentKey","pollResults","selectIsPollResultsOpen","RightColumnContent","IS_SINGLE_COLUMN_LAYOUT","currentManagement","selectCurrentManagement","newChatMembersProgress","NewChatMembersProgress","isChatInfoShown","selectIsRightColumnShown","shouldUseSystemTheme","getSystemTheme","selectCurrentGlobalSearchQuery","selectPaymentChatId","selectPaymentMessageId","selectPaymentFormId","formId","selectPaymentRequestId","selectProviderPublishableKey","nativeParams","publishableKey","selectStripeCredentials","selectNotifyExceptions","selectUserStatus","selectIsUserBlocked","LoadMoreDirection","FocusDirection","SettingsScreens","LeftColumnContent","GlobalSearchContent","MediaViewerOrigin","AudioOrigin","ChatCreationProgress","ManagementProgress","ProfileState","PaymentStep","ManagementScreens","currentInstance","animateSingle","tick","instance","isCancelled","animate","timingFunctions","linear","easeIn","easeOut","easeInOut","sin","PI","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","animateNumber","timing","t0","canceled","f","unreadCount","setAppBadge","currentProps","newProps","currentKeys","currentKeysLength","prop","elementName","baseName","modifiers","modifier","self","caches","Type","fetch","cacheName","isHtmlAllowed","request","Request","cache","open","headers","Blob","blob","shouldRecreate","resolvedType","Json","json","save","cacheData","Response","put","clear","createCallbackManager","hasCallbacks","captureKeyboardListener","onEsc","keyToHandlerName","Enter","Backspace","Delete","Esc","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","handlers","onEnter","onDelete","onBackspace","onUp","onDown","onLeft","onRight","onTab","captureKeyboardListeners","hasActiveHandlers","handlerName","currentEventHandlers","releaseKeyboardListener","keyHandlers","WEEKDAYS_FULL","MONTHS_FULL","MONTHS_FULL_LOWERCASE","month","MILLISECONDS_IN_DAY","isToday","getDayStart","datetime","getDayStartAt","toYearMonth","timestamp","getFullYear","getMonth","toIsoString","hours","getHours","marker","padStart","getMinutes","formatPastTimeShort","weekAgo","getDay","withYear","format","formatDate","formatMonthAndYear","isShort","formatCountdown","msLeft","days","formatMediaDuration","formatHumanDate","noWeekdays","isUpperFirst","upperFirst","lowerFirst","weekAhead","weekDay","formatKey","day","monthIndex","formatMediaDateTime","maxValue","minutes","seconds","maxHours","maxMinutes","string","formatVoiceRecordDuration","durationInMs","milliseconds","locale","toLocaleString","year","formatDateTimeToString","hour","minute","second","isValidDate","MAX_MONTH_IN_YEAR","parseDateString","matchStringDate","matchEuropeStringDate","matchNumberDate","dateParts","timestampPlusDay","str","EXCLUDE_EMOJIS","EMOJI_EXCEPTIONS","unifiedToNative","unified","codePoints","parseInt","fromCodePoint","regex","replacement","pairs","uncompressEmoji","emojiData","categories","emojiRaw","names","native","image","isoToEmoji","iso","test","codePointAt","isWebpSupportedCache","webp","Image","handleLoadOrError","onload","onerror","hasWebp","systemThemeCache","matches","os","getPlatform","IS_PWA","standalone","referrer","IS_TABLET_COLUMN_LAYOUT","IS_VOICE_RECORDING_SUPPORTED","mediaDevices","AudioContext","webkitAudioContext","IS_SERVICE_WORKER_SUPPORTED","Audio","canPlayType","IS_CANVAS_FILTER_SUPPORTED","getContext","IS_REQUEST_FULLSCREEN_SUPPORTED","ARE_CALLS_SUPPORTED","LAYERS_ANIMATION_NAME","TEST_VIDEO","DPR","devicePixelRatio","MASK_IMAGE_DISABLED","IS_SCROLL_PATCH_NEEDED","MESSAGE_LIST_SENSITIVE_AREA","dataUriToBlob","arr","mime","bstr","atob","u8arr","Uint8Array","blobToDataUri","reader","FileReader","readAsDataURL","blobToFile","File","lastModified","preloadImage","img","preloadVideo","volume","onloadedmetadata","createPosterForVideo","onseeked","videoWidth","videoHeight","canvas","drawImage","toDataURL","currentTime","fetchBlob","fetchFile","imgToCanvas","constructor","fileBits","rest","super","this","initials","buildInitials","prevGlobal","prepared","updateFolderManagerThrottled","throttle","onIdle","updateFolderManager","inited","getOrderedIds","orderedIdsByFolderId","getPinnedChatsCount","pinnedCountByFolderId","getChatsCount","chatsCountByFolderId","getUnreadCounters","unreadCountersByFolderId","getAllNotificationsCount","notificationsCount","addOrderedIdsCallback","addChatsCountCallback","addUnreadCountersCallback","DEBUG_startedAt","isAllFolderChanged","isMainFolderChanged","isArchivedFolderChanged","isAllFullyLoadedChanged","isAllFolderFullyLoaded","isArchivedFullyLoadedChanged","isArchivedFolderFullyLoaded","areFoldersChanged","foldersById","areChatsChanged","areUsersChanged","areNotifySettingsChanged","areNotifyExceptionsChanged","affectedFolderIds","emptyFolderIds","folderSummariesById","updateFullyLoaded","updateResults","prevAllFolderListIds","allFolderListIds","prevArchivedFolderListIds","archivedFolderListIds","changedFolders","newListIds","newPinnedIds","buildFolderSummaryFromMainList","allFolderPinnedIds","archivedFolderPinnedIds","newFoldersById","buildFolderSummary","updateFolders","newChatsById","newUsersById","newNotifySettings","newNotifyExceptions","folderSummaries","newAllFolderListIds","newArchivedFolderListIds","allIds","newFolderIds","currentSummary","chatSummariesById","newSummary","unreadMentionsCount","hasUnreadMark","joinDate","draftDate","userInfo","isListed","isArchived","isUserContact","buildChatSummary","chatSummary","folderSummary","isChatInFolder","buildChatFolderIds","currentFolderIds","folderIdsByChatId","deletedFolderIds","currentFolderIdsSet","newFolderIdsSet","currentFolderOrderedIds","chatIdsByFolderId","isOrderedListJustPatched","updateListsForChat","currentPinnedIds","wasUnreadCountersChanged","wasChatsCountChanged","pinnedCount","newPinnedCount","orderedIds","newOrderedIds","prevOrderedIds","sortedPinnedIds","allListIds","sortedNotPinnedIds","chatId1","chatId2","buildFolderOrderedIds","currentOrderedIds","currentPinnedCount","currentChatsCount","newChatsCount","currentUnreadCounters","newUnreadCounters","buildFolderUnreadCounters","newInitials","totalPrice","Intl","NumberFormat","store","hasOwnProperty","READABLE_ERROR_MESSAGES","CHAT_RESTRICTED","CHAT_WRITE_FORBIDDEN","CHAT_SEND_POLL_FORBIDDEN","CHAT_SEND_STICKERS_FORBIDDEN","CHAT_SEND_GIFS_FORBIDDEN","CHAT_SEND_MEDIA_FORBIDDEN","CHAT_LINK_EXISTS","SLOWMODE_WAIT_X","USER_BANNED_IN_CHANNEL","USER_IS_BLOCKED","YOU_BLOCKED_USER","IMAGE_PROCESS_FAILED","MEDIA_EMPTY","MEDIA_INVALID","PHOTO_EXT_INVALID","PHOTO_INVALID_DIMENSIONS","PHOTO_SAVE_FILE_INVALID","MESSAGE_DELETE_FORBIDDEN","MESSAGE_POLL_CLOSED","MESSAGE_EDIT_TIME_EXPIRED","CHAT_ADMIN_REQUIRED","PINNED_DIALOGS_TOO_MUCH","DIALOG_FILTERS_TOO_MUCH","CHANNEL_PRIVATE","MEDIA_CAPTION_TOO_LONG","ADDRESS_STREET_LINE1_INVALID","ADDRESS_STREET_LINE2_INVALID","ADDRESS_CITY_INVALID","ADDRESS_COUNTRY_INVALID","ADDRESS_POSTCODE_INVALID","ADDRESS_STATE_INVALID","REQ_INFO_NAME_INVALID","REQ_INFO_PHONE_INVALID","REQ_INFO_EMAIL_INVALID","LINK_NOT_MODIFIED","MESSAGE_TOO_LONG","SERVICE_WORKER_DISABLED","MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS","FRESH_RESET_AUTHORISATION_FORBIDDEN","BOTS_TOO_MUCH","BOT_GROUPS_BLOCKED","USERS_TOO_MUCH","USER_CHANNELS_TOO_MUCH","USER_KICKED","USER_NOT_MUTUAL_CONTACT","USER_PRIVACY_RESTRICTED","INVITE_HASH_EMPTY","INVITE_HASH_EXPIRED","INVITE_HASH_INVALID","CHANNELS_TOO_MUCH","USER_ALREADY_PARTICIPANT","SCHEDULE_DATE_INVALID","WALLPAPER_DIMENSIONS_INVALID","ADMINS_TOO_MUCH","ADMIN_RANK_EMOJI_NOT_ALLOWED","ADMIN_RANK_INVALID","FRESH_CHANGE_ADMINS_FORBIDDEN","INPUT_USER_DEACTIVATED","SHIPPING_ERRORS","getReadableErrorText","isSlowMode","textParams","extraPartIndex","errorMessage","handleErrorEvent","ErrorEvent","reason","alert","collection","member","mapValues","newByKey","object","stringKeys","orderRule","mode","compareValues","currentOrderRule","isAsc","aValue","bValue","mode1","mode2","orderRule1","orderRule2","isAsc1","isAsc2","array","array1","array2","areSortedArraysIntersecting","findIntersectionWithSet","chunkSize","cloneDeep","predicate","SUBSTITUTION_REGEX","PLURAL_OPTIONS","PLURAL_RULES","en","ar","ca","de","es","fa","fr","it","ko","ms","nl","pl","pt_BR","ru","tr","uk","uz","langPack","fallbackLangPack","currentLangCode","currentTimeFormat","getTranslation","cacheValue","cached","langString","processTranslation","importFallbackLangPack","getTranslationForLangString","translateString","remoteLangPack","remote","fetchRemoteString","withFallback","newLangPack","fetchRemote","langInfo","rtl","default","sourceLangPacks","template","optionIndex","getPluralOption","translationSlices","initialValue","processTemplate","formatInteger","SAMPLE_RATE","oggToWav","opusData","arrayBuffer","typedArray","decoderWorker","wavWorker","onmessage","buffers","buffer","page","terminate","wavBitDepth","wavSampleRate","decoderSampleRate","outputBufferSampleRate","pages","asCacheApiType","memoryCache","fetchPromises","progressCallbacks","cancellableCallbacks","mediaFormat","onProgress","callbackUniqueId","getProgressive","fetchFromCacheOrRemote","activeCallbacks","getFromMemory","cancelProgress","parentCallback","progressiveUrl","mediaPng","webpToPng","prepareMedia","mediaSource","MediaSource","streamUrl","sourceBuffer","addSourceBuffer","makeOnProgress","revokeObjectURL","endOfStream","appendBuffer","mediaData","serviceWorker","fullSize","controller","Bundles","LOAD_PROMISES","MEMORY_CACHE","Auth","Main","Extra","Calls","bundle","getDeviceToken","subscription","toJSON","endpoint","checkIfPushSupported","ServiceWorkerRegistration","Notification","permission","soundPlayedIds","playNotifySound","notificationSoundVolume","currentVolume","once","play","playNotifySoundDebounced","requestPermission","unsubscribeFromPush","dispatch","deleteDeviceToken","serviceWorkerRegistration","ready","pushManager","getSubscription","areSettingsLoaded","checkIfShouldResubscribe","userVisibleOnly","setDeviceToken","DOMException","ABORT_ERR","notifyAboutMessage","resultSettings","resultExceptions","loadNotificationSettings","hasFocus","checkIfShouldNotify","areNotificationsSupported","activeReaction","imageHash","mediaLoader","getAvatar","messageSender","messageAction","actionTargetMessage","targetUserIds","actionTargetUserIds","actionTargetChatId","actionTargetUsers","privateChatUserId","privateChatUser","isChat","senderName","getNotificationContent","badge","vibrate","onclick","close","startActiveReaction","onshow","closeMessageNotifications","notifyClientReady","PERMANENT_VERSION_KEY","AVAILABLE_VERSIONS","setPermanentWebVersion","version","hasPermanentWebVersion","PATTERN_PLACEHOLDER","DEFAULT_PATTERN","getCountryCodesByIso","phoneCodeList","country","iso2","getCountryFromPhoneNumber","possibleCountries","countryCode","codesWithPrefix","prefixes","prefix","bestMatches","formatPhoneNumber","pattern","numberWithoutCode","patterns","defaultPattern","stripped","getBestPattern","formatPhoneNumberWithCode","numberWithPlus","createMessageHash","messageList","typeOrThreadId","parseLocationHash","isType","fn","waitingTimeout","shouldRunFirst","shouldRunLast","interval","isPending","_args","setInterval","clearInterval","throttleWith","waiting","requestIdleCallback","rafPromise","fastRafCallbacks","fastRafPrimaryCallbacks","onTickEndCallbacks","onTickEndPrimaryCallbacks","beforeUnloadCallbacks","isPrimary","currentCallbacks","currentPrimaryCallbacks","onBeforeUnload","isLast","unshift","RE_NOT_LETTER","haystack","needle","needleWords","haystackLower","haystackWords","needleWord","haystackWord","promisifyRequest","oncomplete","onsuccess","onabort","defaultGetStoreFunc","defaultGetStore","dbName","storeName","dbp","userAgentData","indexedDB","databases","tryIdb","intervalId","onupgradeneeded","createObjectStore","txMode","db","transaction","objectStore","createStore","DC_IDS","hasStoredSession","withLegacy","userAuthJson","dcID","dcId","removeItem","sessionId","sessionJson","customStore","idb","idbKeys","getAllKeys","items","openCursor","continue","eachCursor","isInitialized","HEX_COLOR_REGEX","RGB_VARIABLES","lerp","start","end","interpolationRatio","colors","themeColors","property","hexToRgb","hex","g","applyColorAnimationStep","startIndex","endIndex","propertyColors","withAnimation","isDarkTheme","shouldAnimate","startAt","themeColorTag","querySelector","transition","formatFixedNumber","formatIntegerCompact","views","getFirstLetters","phrase","word","EMPTY_IMAGE_DATA_URI","initWebpWorker","wasmReady","requests","getDecodePromise","ImageData","putImageData","toBlob","createPng","webpToPngBase64","pngBlob","handleLibWebpMessage","WEBSYNC_URLS","WEBSYNC_VERSION","WEBSYNC_KEY","getTs","lastTimeout","authed","currentTs","canRedirect","ts","script","removeElement","URLSearchParams","saveSync","clearWebsync","IS_LANDSCAPE","isLandscape","initialHeight","currentWindowSize","updateSizes","isRefreshDisabled","handleResize","visualViewport","pageTop","vh","getIsKeyboardVisible","disableRefresh","enableRefresh","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","m","getter","__esModule","getPrototypeOf","obj","ns","create","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","chunkId","promises","u","miniCssF","globalThis","Function","done","needAttach","scripts","getElementsByTagName","charset","nc","onScriptComplete","doneFns","bind","head","toStringTag","scriptUrl","importScripts","currentScript","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","linkTag","errorType","realHref","createStylesheet","miniCss","baseURI","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","handleWorkerMessage","registrations","getRegistrations","unregister","register","hasErrorKey","INITIAL_STATE","isLeftColumnShown","phoneCodes","general","groupCalls","activeChatFolder","recentEmojis","recent","greeting","featured","emojiKeywords","saved","inlineBots","byUsername","topPeers","topInlineBots","audioPlayer","playbackRate","notifications","dialogs","messageSendKeyCombo","autoLoadFileMaxSizeMb","shouldSuggestStickers","isConnectionStatusMinimized","light","isBlurred","patternColor","dark","activeReactions","shouldShowContextMenuHint","updateCacheThrottled","updateCache","unsubscribeFromBeforeUnload","isCaching","setupCaching","clearCaching","reducedGlobal","reduceShowChatInfo","reduceUsers","reduceChats","reduceMessages","recentlyFoundChatIds","reduceSettings","reduceChatFolders","reduceGroupCalls","reduceAvailableReactions","currentChatId","visibleUserIds","idsToSave","currentChat","mainThread","activeGroupCallId","isGroupCallPanelHidden","isFallbackConfirmOpen","initialState","time","timeEnd","shouldAutoDownloadMediaFromContacts","shouldAutoDownloadMediaInPrivateChats","shouldAutoDownloadMediaInGroups","shouldAutoDownloadMediaInChannels","shouldAutoPlayVideos","shouldAutoPlayGifs","migrateCache","parsedMessageList","readCache","loadCache","STORAGE_KEY","tabKey","SITE_FONTS","preloadFonts","font","fonts","load","preloadAvatars","preloadTasks","main","reactionThumbsPath","telegramLogoPath","authCode","monkeyPath","authPassword","background","hasCustomBackground","hasCustomBackgroundColor","isRightColumnShown","leftColumnWidth","setIsUiReady","isReady","markReady","shouldRenderMask","safePreload","translation","setTranslation","getSuggestedLanguage","suggestedLanguage","MENU_HIDING_DURATION","inputRef","setFilter","filteredList","setFilteredList","updateFilter","filterValue","defaultName","getFilteredList","prevPhoneCodeList","handleInput","handleInputKeyDown","DropdownMenu","handleTrigger","select","formEl","getElementById","scrollTo","top","scrollHeight","behavior","inputValue","Spinner","MenuItem","isPreloadInitiated","setAuthPhoneNumber","setAuthRememberMe","loadNearestCountry","loadCountryList","clearAuthError","goToAuthQrCode","continueText","useLangString","setCountry","setPhoneNumber","isTouched","setIsTouched","lastSelection","setLastSelection","markIsLoading","unmarkIsLoading","fullNumber","canSubmit","parseFullNumber","newFullNumber","suggestedCountry","selectedCountry","handleLangChange","setSelectionRange","isJustPastedRef","handlePaste","handleCountryChange","handlePhoneNumberChange","selectionStart","selectionEnd","shouldFixSafariAutoComplete","handleKeepSessionChange","isAuthReady","onSubmit","InputText","Checkbox","Button","Loading","AuthCode","useModuleLoader","AuthPassword","AuthRegister","G","H","B","QrCreator","h","J","level","O","C","lineTo","arcTo","moveTo","z","v","N","K","P","fillStyle","fillRect","left","beginPath","q","D","E","R","I","F","colorStops","createLinearGradient","apply","createRadialGradient","addColorStop","A","minVersion","maxVersion","ecLevel","radius","quiet","HTMLCanvasElement","clearRect","write","S","multiply","L","M","Q","returnToAuthPhoneNumber","qrCodeRef","token","isMobile","windowSize","AuthQrCode","appInactivePath","renderMain","disconnect","markInactive","TeactDOM"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.b2f7667b4f3d1d606a08.css b/dist/main.b2f7667b4f3d1d606a08.css deleted file mode 100644 index e64303728..000000000 --- a/dist/main.b2f7667b4f3d1d606a08.css +++ /dev/null @@ -1,164 +0,0 @@ -.Spoiler--concealed{cursor:pointer;background-image:url(spoiler-dots-black.b2dd6e4f4a5a520c4ccd..png);background-size:auto min(100%,1.125rem);border-radius:.5rem}html.theme-dark .Spoiler--concealed,html.theme-light .ListItem.selected .Spoiler--concealed,.ActionMessage .Spoiler--concealed,.MediaViewerFooter .Spoiler--concealed{background-image:url(spoiler-dots-white.ab45f83c6ba729884808..png)}.emoji-only .Spoiler--concealed{background-size:auto 1.125rem}.Spoiler--animated{animation:pulse-opacity-light 1.75s linear infinite}.Spoiler__content{opacity:1;transition:opacity 250ms ease}.Spoiler--concealed .Spoiler__content{-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:0}@keyframes pulse-opacity-light{25%{opacity:1}50%{opacity:.25}75%{opacity:1}} -.Link{color:inherit}.Link:hover{color:inherit}.Link:hover.GroupCallLink{text-decoration:none} -#UiLoader{height:100%}@media(max-width: 600px){#UiLoader{height:calc(var(--vh, 1vh)*100)}}#UiLoader .mask{position:fixed;top:0;left:0;right:0;margin:0 auto;width:100%;height:100%;z-index:var(--z-ui-loader-mask);display:flex}@media(min-width: 600px){#UiLoader .mask{display:grid;grid-template-columns:auto 1fr;grid-template-rows:100%}}#UiLoader .mask .left{flex:1;background:var(--color-background);min-width:12rem;width:33vw;max-width:26.5rem}@media(min-width: 926px){#UiLoader .mask .left{max-width:40vw}}@media(min-width: 1276px){#UiLoader .mask .left{width:25vw;max-width:33vw}}@media(max-width: 1275px){#UiLoader .mask .left{flex:2}}@media(max-width: 925px){#UiLoader .mask .left{width:26.5rem !important}}@media(max-width: 600px){#UiLoader .mask .left{max-width:none;width:100vw !important}}#UiLoader .mask .middle{flex:3;border-left:1px solid var(--color-borders);border-right:1px solid var(--color-borders);position:relative;z-index:1;overflow:hidden}#UiLoader .mask .middle::before{content:"";display:block;position:absolute;top:0;left:0;bottom:0;right:0;background:no-repeat center;background-size:cover;z-index:-1;transform-origin:left center}.theme-dark body.initial #UiLoader .mask .middle::before{background-color:#0f0f0f}.theme-light body.initial #UiLoader .mask .middle::before,body:not(.initial) #UiLoader .mask .middle::before{background-image:url(chat-bg.f607e788298d8a7de37a..jpg)}#UiLoader .mask .middle.with-right-column::before{transform:scale(0.67)}@media screen and (min-width: 1276px){#UiLoader .mask .middle::before{margin:-16rem -5rem -20rem 0}}#UiLoader .mask .middle.custom-bg-image::before{margin:-1rem;background-image:none !important}@media(max-width: 1275px){#UiLoader .mask .middle{flex:3;border-right:none}}@media(max-width: 600px){#UiLoader .mask .middle{display:none}}#UiLoader .mask .right{position:absolute;top:0;right:0;z-index:1;height:100%;width:var(--right-column-width);border-left:1px solid var(--color-borders);background:var(--color-background)}#UiLoader .blank{flex:1;background:var(--color-background)} -.Spinner{--spinner-size: 2rem;position:relative;display:flex;align-items:center;justify-content:center;width:var(--spinner-size);height:var(--spinner-size)}.Spinner>div{position:absolute;top:0;left:0;right:0;bottom:0;background-repeat:no-repeat;background-size:100%;animation-name:spin;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear}.Spinner.with-background::before{content:"";position:absolute;left:-0.125rem;top:-0.125rem;bottom:-0.125rem;right:-0.125rem;border-radius:50%}.Spinner.with-background.bg-dark::before{background:rgba(0,0,0,.25)}.Spinner.with-background.bg-light::before{background:rgba(255,255,255,.4)}.Spinner.white>div{background-image:var(--spinner-white-data)}.Spinner.white.with-background>div{background-image:var(--spinner-white-thin-data)}.Spinner.blue>div{background-image:var(--spinner-blue-data)}.theme-dark .Spinner.blue>div{background-image:var(--spinner-dark-blue-data)}.Spinner.black>div{background-image:var(--spinner-black-data)}.Spinner.green>div{background-image:var(--spinner-green-data)}.Spinner.gray>div{background-image:var(--spinner-gray-data)}.Spinner.yellow>div{background-image:var(--spinner-yellow-data)}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} -@keyframes ripple-animation{from{transform:scale(0);opacity:1}50%{opacity:1}to{opacity:0;transform:scale(2)}}.ripple-container{position:absolute;top:0;left:0;bottom:0;right:0}body.animation-level-0 .ripple-container{display:none}.ripple-container span{position:absolute;display:block;background-color:var(--ripple-color, rgba(0, 0, 0, 0.08));border-radius:50%;transform:scale(0);animation:ripple-animation 700ms} -.Button{outline:none !important;display:flex;align-items:center;justify-content:center;width:100%;height:3.5rem;border:0;border-radius:var(--border-radius-default);background-color:transparent;background-size:cover;padding:.625rem;color:#fff;line-height:1.2;cursor:pointer;text-transform:uppercase;flex-shrink:0;position:relative;overflow:hidden;transition:background-color .15s,color .15s;text-decoration:none !important}.Button:active,.Button.clicked,body.animation-level-0 .Button{transition:none !important}.Button.disabled{opacity:.5 !important;cursor:default;pointer-events:none}.Button.round{width:3.5rem;border-radius:50%}.Button.round i{font-size:1.5rem}.Button.primary{background-color:var(--color-primary);color:var(--color-white);--ripple-color: rgba(0, 0, 0, .08)}.Button.primary:not(.disabled):not(:disabled):active,.Button.primary:not(.disabled):not(:disabled).active,.Button.primary:not(.disabled):not(:disabled):focus{background-color:var(--color-primary-shade)}@media(hover: hover){.Button.primary:not(.disabled):not(:disabled):hover{background-color:var(--color-primary-shade)}}body.animation-level-0 .Button.primary:not(.disabled):not(:disabled):active{background-color:var(--color-primary-shade-darker)}.Button.secondary{background-color:var(--color-background);color:rgba(var(--color-text-secondary-rgb), 0.75);--ripple-color: rgba(0, 0, 0, .08)}.Button.secondary:not(.disabled):not(:disabled):active,.Button.secondary:not(.disabled):not(:disabled).active,.Button.secondary:not(.disabled):not(:disabled):focus{background-color:var(--color-primary);color:#fff}@media(hover: hover){.Button.secondary:not(.disabled):not(:disabled):hover{background-color:var(--color-primary);color:#fff}}body.animation-level-0 .Button.secondary:not(.disabled):not(:disabled):active{background-color:var(--color-primary-shade)}.Button.gray{background-color:var(--color-background);color:var(--color-text-secondary);--ripple-color: rgba(0, 0, 0, .08)}.Button.gray:not(.disabled):not(:disabled):active,.Button.gray:not(.disabled):not(:disabled).active,.Button.gray:not(.disabled):not(:disabled):focus{color:var(--color-primary)}@media(hover: hover){.Button.gray:not(.disabled):not(:disabled):hover{color:var(--color-primary)}}body.animation-level-0 .Button.gray:not(.disabled):not(:disabled):active{background-color:var(--color-chat-hover)}.Button.danger{background-color:var(--color-background);color:var(--color-error);--ripple-color: rgba(var(--color-error-rgb), .16)}.Button.danger:not(.disabled):not(:disabled):active,.Button.danger:not(.disabled):not(:disabled).active,.Button.danger:not(.disabled):not(:disabled):focus{background-color:var(--color-error);color:var(--color-white)}@media(hover: hover){.Button.danger:not(.disabled):not(:disabled):hover{background-color:var(--color-error);color:var(--color-white)}}body.animation-level-0 .Button.danger:not(.disabled):not(:disabled):active{background-color:var(--color-error-shade)}.Button.text{background-color:transparent}.Button.text.primary{color:var(--color-primary);background-color:transparent}.Button.text.primary:not(.disabled):not(:disabled):active,.Button.text.primary:not(.disabled):not(:disabled).active,.Button.text.primary:not(.disabled):not(:disabled):focus{background-color:rgba(var(--color-primary-shade-rgb), 0.08)}@media(hover: hover){.Button.text.primary:not(.disabled):not(:disabled):hover{background-color:rgba(var(--color-primary-shade-rgb), 0.08)}}body.animation-level-0 .Button.text.primary:not(.disabled):not(:disabled):active{background-color:rgba(var(--color-primary-shade-rgb), 0.16)}.Button.text.secondary{background-color:transparent;color:var(--color-text-secondary)}.Button.text.danger:not(.disabled):not(:disabled):active,.Button.text.danger:not(.disabled):not(:disabled).active,.Button.text.danger:not(.disabled):not(:disabled):focus{background-color:rgba(var(--color-error-rgb), 0.08);color:var(--color-error)}@media(hover: hover){.Button.text.danger:not(.disabled):not(:disabled):hover{background-color:rgba(var(--color-error-rgb), 0.08);color:var(--color-error)}}body.animation-level-0 .Button.text.danger:not(.disabled):not(:disabled):active{background-color:rgba(var(--color-error-rgb), 0.16)}.Button.faded{opacity:.8}.Button.faded:not(.disabled):not(:disabled):active,.Button.faded:not(.disabled):not(:disabled).active,.Button.faded:not(.disabled):not(:disabled):focus{opacity:1}@media(hover: hover){.Button.faded:not(.disabled):not(:disabled):hover{opacity:1}}.Button.faded.activated{opacity:1}.Button.translucent{background-color:transparent;color:var(--color-text-secondary);--ripple-color: var(--color-interactive-element-hover)}.Button.translucent:not(.disabled):not(:disabled):active,.Button.translucent:not(.disabled):not(:disabled).active,.Button.translucent:not(.disabled):not(:disabled):focus{background-color:var(--color-interactive-element-hover)}@media(hover: hover){.Button.translucent:not(.disabled):not(:disabled):hover{background-color:var(--color-interactive-element-hover)}}body.animation-level-0 .Button.translucent:not(.disabled):not(:disabled):active{background-color:rgba(var(--color-text-secondary-rgb), 0.16)}.Button.translucent.activated{color:var(--color-primary)}.Button.translucent-white{background-color:transparent;color:rgba(255,255,255,.5);--ripple-color: rgba(255, 255, 255, 0.08)}.Button.translucent-white:not(.disabled):not(:disabled):active,.Button.translucent-white:not(.disabled):not(:disabled).active,.Button.translucent-white:not(.disabled):not(:disabled):focus{background-color:rgba(255,255,255,.08);color:#fff}@media(hover: hover){.Button.translucent-white:not(.disabled):not(:disabled):hover{background-color:rgba(255,255,255,.08);color:#fff}}body.animation-level-0 .Button.translucent-white:not(.disabled):not(:disabled):active{background-color:rgba(255,255,255,.16)}.Button.translucent-black{background-color:transparent;color:rgba(0,0,0,.8);--ripple-color: rgba(0, 0, 0, 0.08)}.Button.translucent-black:not(.disabled):not(:disabled):active,.Button.translucent-black:not(.disabled):not(:disabled).active,.Button.translucent-black:not(.disabled):not(:disabled):focus{background-color:rgba(0,0,0,.08)}@media(hover: hover){.Button.translucent-black:not(.disabled):not(:disabled):hover{background-color:rgba(0,0,0,.08)}}body.animation-level-0 .Button.translucent-black:not(.disabled):not(:disabled):active{background-color:rgba(0,0,0,.16)}.Button.dark{background-color:rgba(0,0,0,.75);color:#fff;--ripple-color: rgba(255, 255, 255, 0.08)}.Button.dark:not(.disabled):not(:disabled):active,.Button.dark:not(.disabled):not(:disabled).active,.Button.dark:not(.disabled):not(:disabled):focus{background-color:rgba(0,0,0,.85);color:#fff}@media(hover: hover){.Button.dark:not(.disabled):not(:disabled):hover{background-color:rgba(0,0,0,.85);color:#fff}}body.animation-level-0 .Button.dark:not(.disabled):not(:disabled):active{background-color:rgba(0,0,0,.95)}.Button.smaller{height:2.75rem;padding:.3125rem}.Button.smaller.round{width:2.75rem}.Button.smaller.pill{height:2.5rem;border-radius:1.25rem;padding:.3125rem 1rem}.Button.smaller.with-icon{padding-left:.75rem;padding-right:1.25rem}.Button.smaller.with-icon i{font-size:1.5rem;margin-right:.5rem}.Button.smaller.with-icon[dir=rtl]{padding-left:1.25rem;padding-right:.75rem}.Button.smaller.with-icon[dir=rtl] i{margin-left:.5rem;margin-right:0}@media(max-width: 600px){.Button.smaller{height:2.5rem}.Button.smaller.round{width:2.5rem}}.Button.tiny{height:2.25rem;padding:.4375rem;border-radius:var(--border-radius-default-small);font-size:.875rem;font-weight:500}.Button.tiny.round{width:2.25rem;height:2.25rem;border-radius:50%}.Button.tiny i{font-size:1.25rem}.Button.tiny.pill{height:2rem;border-radius:1rem;padding:.3125rem 1rem;font-size:1rem}.Button.fluid{padding-left:1.75rem;padding-right:1.75rem;width:auto}.Button.fluid.tiny{padding-left:1.375rem;padding-right:1.375rem}.Button.pill{border-radius:1.75rem;padding-left:1.75rem;padding-right:1.75rem;text-transform:none}.Button.loading{position:relative;pointer-events:none}.Button.loading .Spinner{position:absolute;right:.875rem;top:.875rem;--spinner-size: 1.8rem}.Button .emoji{vertical-align:-3px} -.Checkbox{display:block;position:relative;padding-left:4.5rem;text-align:left;margin-bottom:1.5rem;line-height:1.5rem;cursor:pointer}.Checkbox.disabled{pointer-events:none;opacity:.5}.Checkbox.round .Checkbox-main::before{border-radius:50%}.Checkbox.round .Checkbox-main::after{background:var(--color-primary) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiLz48L3N2Zz4=) no-repeat 50% 50%;background-size:12px;border-radius:50%}.Checkbox.loading .Checkbox-main::before,.Checkbox.loading .Checkbox-main::after{opacity:0 !important}.Checkbox.loading .Spinner{position:absolute;left:.375rem;top:.125rem;opacity:0;animation:fade-in .2s ease forwards;--spinner-size: 1.25rem}.Checkbox.blocking input:not(:checked)~.Checkbox-main::before{border-color:var(--color-error)}.Checkbox.blocking input:not(:checked)~.Checkbox-main::after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMjQgMCAyNCAyNCAwIDI0Ii8+CiAgICA8cGF0aCBmaWxsPSIjZTUzOTM1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOCwzIEMxOS42NTY4NTQyLDMgMjEsNC4zNDMxNDU3NSAyMSw2IEwyMSwxOCBDMjEsMTkuNjU2ODU0MiAxOS42NTY4NTQyLDIxIDE4LDIxIEw2LDIxIEM0LjM0MzE0NTc1LDIxIDMsMTkuNjU2ODU0MiAzLDE4IEwzLDYgQzMsNC4zNDMxNDU3NSA0LjM0MzE0NTc1LDMgNiwzIEwxOCwzIFogTTE2LDExIEw4LDExIEM3LjQ0NzcxNTI1LDExIDcsMTEuNDQ3NzE1MyA3LDEyIEM3LDEyLjU1MjI4NDcgNy40NDc3MTUyNSwxMyA4LDEzIEwxNiwxMyBDMTYuNTUyMjg0NywxMyAxNywxMi41NTIyODQ3IDE3LDEyIEMxNywxMS40NDc3MTUzIDE2LjU1MjI4NDcsMTEgMTYsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==);opacity:1;background-size:1.375rem;background-position:-0.125rem -0.125rem}.Checkbox input{position:absolute;z-index:var(--z-below);opacity:0}.Checkbox .Checkbox-main::before,.Checkbox .Checkbox-main::after{content:"";display:block;position:absolute;left:1.1875rem;top:.1875rem;width:1.125rem;height:1.125rem}.Checkbox .Checkbox-main::before{border:2px solid var(--color-borders-input);border-radius:.25rem;background-color:var(--color-background);transition:border-color .1s ease,background-color .1s ease}.Checkbox .Checkbox-main::after{background:center no-repeat url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==);background-size:.875rem;opacity:0;transition:opacity .1s ease}.Checkbox .Checkbox-main .label{display:block;text-align:initial}.Checkbox .Checkbox-main .subLabel{display:block;font-size:.875rem;line-height:1rem;color:var(--color-text-secondary)}.Checkbox input:checked~.Checkbox-main::before{border-color:var(--color-primary);background-color:var(--color-primary)}.Checkbox input:checked~.Checkbox-main::after{opacity:1}.Checkbox[dir=rtl]{padding-left:0;padding-right:4.5rem}.Checkbox[dir=rtl].loading .Spinner{left:auto;right:.375rem}.Checkbox[dir=rtl] .label,.Checkbox[dir=rtl] .subLabel{text-align:right}.Checkbox[dir=rtl] .Checkbox-main::before,.Checkbox[dir=rtl] .Checkbox-main::after{left:auto;right:1.1875rem} -.Loading{display:flex;height:100%;align-items:center;justify-content:center}.Loading.interactive{cursor:pointer}.Loading .Spinner{--spinner-size: 2.75rem} -.Menu.fluid .bubble{min-width:13.5rem;width:auto}.Menu .backdrop{position:fixed;left:-100vw;right:-100vw;top:-100vh;bottom:-100vh;z-index:var(--z-menu-backdrop)}.Menu .bubble{overflow:hidden;display:block;list-style:none;padding:.5rem 0;margin:0;position:absolute;background-color:var(--color-background);box-shadow:0 .25rem .5rem .125rem var(--color-default-shadow);border-radius:var(--border-radius-default);min-width:13.5rem;z-index:var(--z-menu-bubble);overscroll-behavior:contain;transform:scale(0.5);transition:opacity .2s cubic-bezier(0.2, 0, 0.2, 1),transform .2s cubic-bezier(0.2, 0, 0.2, 1) !important;--offset-y: calc(100% + 0.5rem);--offset-x: 0}.Menu .bubble.open{transform:scale(1)}.Menu .bubble.closing{transition:opacity .2s ease-in,transform .2s ease-in !important}body.animation-level-0 .Menu .bubble{transform:none !important;transition:opacity .15s !important}body.has-open-dialog .Menu .bubble{transition:none !important}.Menu .bubble.top{top:var(--offset-y)}.Menu .bubble.bottom{bottom:var(--offset-y)}.Menu .bubble.left{left:var(--offset-x)}.Menu .bubble.right{right:var(--offset-x)}.Menu .bubble.with-footer{padding-bottom:0}.Menu .footer{padding:.5rem 0;background:var(--color-chat-hover);color:var(--color-text-secondary);font-size:.8125rem;text-align:center} -.DropdownMenu{position:relative} -.MenuItem{width:100%;background:none;border:none !important;box-shadow:none !important;outline:none !important;display:flex;padding:.75rem 1rem;position:relative;overflow:hidden;line-height:1.5rem;white-space:nowrap;color:var(--color-text);--ripple-color: rgba(0, 0, 0, .08);cursor:pointer;unicode-bidi:plaintext}@media(hover: hover){.MenuItem:hover,.MenuItem:focus{background-color:var(--color-chat-hover);text-decoration:none;color:inherit}}@media(max-width: 600px){.MenuItem:focus,.MenuItem:hover,.MenuItem:active{text-decoration:none;color:inherit}.MenuItem:active{background-color:var(--color-chat-hover)}}.MenuItem i{font-size:1.5rem;margin-right:2rem;color:var(--color-text-secondary)}.MenuItem .menu-item-name{margin-right:2rem}.MenuItem .menu-item-name.capitalize{text-transform:capitalize}.MenuItem.disabled{opacity:.5 !important;cursor:default !important}.MenuItem.destructive{color:var(--color-error)}.MenuItem.destructive i{color:inherit}.MenuItem:not(.has-ripple):not(.disabled):active{background-color:var(--color-item-active);transition:none !important}.MenuItem>.Switcher{margin-left:auto}.MenuItem[dir=rtl] i{margin-left:2rem;margin-right:0}.MenuItem[dir=rtl] .menu-item-name{margin-left:2rem;margin-right:0}.MenuItem[dir=rtl]>.Switcher{margin-left:0;margin-right:auto} -.CountryCodeInput .input-group{cursor:pointer;z-index:var(--z-country-code-input-group)}.CountryCodeInput .input-group .Spinner{position:absolute;top:1rem;right:.75rem;opacity:.5;--spinner-size: 1.5rem}.CountryCodeInput .input-group .css-icon-down{position:absolute;top:1.125rem;right:1rem;width:.75rem;height:.75rem;border:2px solid var(--color-text-secondary);border-top:0;border-left:0;transform:scaleY(1) rotate(45deg);transition:color .2s ease,transform .2s ease,top .2s ease}.CountryCodeInput .input-group .css-icon-down.open{border-color:var(--color-primary);transform:scaleY(-1) rotate(45deg);top:1.5rem}.CountryCodeInput .bubble{width:100%;max-height:23.5rem;overflow-y:auto;transform-origin:top center !important;transform:scale(0.95)}.CountryCodeInput .bubble.open{transform:scaleY(1)}.CountryCodeInput .MenuItem button{display:flex;align-items:center}.CountryCodeInput .MenuItem.no-results button{justify-content:center;padding:.5rem 1rem}.CountryCodeInput .MenuItem.no-results button span{font-size:.875rem}.CountryCodeInput .country-flag{font-size:2rem;margin-right:2rem}.CountryCodeInput .country-flag .emoji{width:2rem;height:2rem;display:inline-block;vertical-align:4px;margin:-0.5rem .125rem}.CountryCodeInput .country-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:1rem;text-align:left}.CountryCodeInput .country-code{margin-left:auto;opacity:.5} -.auth-form{width:100%;max-width:25.5rem;margin:0 auto;padding:6rem 1rem 1rem;text-align:center}@media(min-width: 600px)and (min-height: 450px){.auth-form{padding:6.8rem 1.5rem 1.5rem}.auth-form.qr{padding-top:4rem}}.auth-form #logo,.auth-form .AvatarEditable label{display:block;margin-left:auto;margin-right:auto;width:7.5rem;height:7.5rem;margin-bottom:1.75rem}@media(min-width: 600px)and (min-height: 450px){.auth-form #logo,.auth-form .AvatarEditable label{width:10rem;height:10rem;margin-bottom:2.5rem}}.auth-form #logo{background:url(telegram-logo.1b2bb5b107f046ea9325..svg) center no-repeat;background-size:100%}.auth-form h2{font-size:1.25rem;line-height:1}@media(min-width: 600px){.auth-form h2{font-size:2rem;line-height:1.5}}.auth-form .note{font-size:.875rem;line-height:1.35;margin-bottom:2.5rem;color:var(--color-text-secondary)}@media(min-width: 600px){.auth-form .note{font-size:1rem;margin-bottom:3rem}}#auth-registration-form,#auth-phone-number-form,#auth-code-form,#auth-password-form,#auth-qr-form{height:100%;overflow-y:auto}#auth-phone-number-form form{min-height:26.25rem}#auth-phone-number-form .Button{margin-top:2.75rem}#auth-phone-number-form .Button+.Button{margin-top:1rem}#auth-code-form h2,#auth-password-form h2{display:flex;align-items:center;justify-content:center}.auth-number-edit{width:2.5rem;height:2.5rem;padding:.5rem;font-size:1.5rem;color:var(--color-text-secondary);opacity:.75;display:flex;align-items:center;justify-content:center;cursor:pointer}.auth-number-edit:hover,.auth-number-edit:focus{opacity:1}#auth-qr-form .qr-container,#auth-qr-form .qr-loading{height:280px}#auth-qr-form .qr-container{opacity:1;transform:scale(1);transition:transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1),opacity 300ms}#auth-qr-form .qr-container.pre-animate{opacity:.5;transform:scale(0.8)}#auth-qr-form .qr-container canvas{padding:.625rem;border-radius:var(--border-radius-default);background:var(--color-white);margin-top:-0.625rem}#auth-qr-form h3{margin:1.5rem 0 1rem 0}#auth-qr-form ol{list-style:none;counter-reset:item;padding:0 1.75rem}#auth-qr-form ol li{counter-increment:item;text-align:left;margin:.75rem 0;display:flex}#auth-qr-form ol li::before{content:counter(item);display:flex;justify-content:center;align-items:center;min-width:1.4rem;height:1.4rem;padding:0;margin:0 .75rem 0 0;background:var(--color-primary);border-radius:50%;font-size:smaller;color:#fff}#sign-in-password{word-break:normal !important} -#AppInactive{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}#AppInactive .content{max-width:28rem;margin:auto;padding:1.5rem;text-align:center}#AppInactive .title{margin-top:1rem}#AppInactive .description{color:var(--color-text-secondary);font-size:.875rem}#AppInactive img{width:100%;max-width:20rem}#AppInactive .Button{margin-top:1rem} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.499af208fa04aa805317..woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.6b69287db14836e8ccee..woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.350ec982325895563ada..woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.af30acd9d70ade5b828d..woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.62afd8a72052ca925aaf..woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.009379f5feecd3ef689a..woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxKKTU1Kg.465390c6e54c60f4a15f..woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.66efaee062df58309edc..woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.3e1bb90afe5eb4a94c5f..woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.acd64c8bf32762464b8f..woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.cab892ae9aa422233ea4..woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.01bafbfbc1e4ebe0139d..woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.d3c211af53a789d2f9fd..woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.324b1e6d0f5ae7c6ab42..woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */ -@font-face { - font-family: Vazir; - src: url(Vazir-Regular-WOL.c7b24ace258717d9a320..woff2) format('woff2'), - url(Vazir-Regular-WOL.ed6379fdf8108ff3bc5b..woff) format('woff'); - font-weight: normal; - font-display:swap; - unicode-range:U+0627-06FF; -} - -/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */ -@font-face { - font-family: Vazir; - src: url(Vazir-Medium-WOL.2f98e6f8ba81b54a0f96..woff2) format('woff2'), - url(Vazir-Medium-WOL.f4d87915577d64b321c6..woff) format('woff'); - font-weight: 500; - font-display:swap; - unicode-range: U+0600-06FF; -} - -*,*::before,*::after{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)}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0}[tabindex="-1"]:focus{outline:none !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:500}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:var(--color-links);text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font:.9375rem/1.25 "Courier","Courier New","Nimbus Mono L","Courier 10 Pitch","FreeMono",sans-serif-monospace,monospace;font-size-adjust:.43}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color: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}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none !important}:root{--color-background: #ffffff;--color-background-selected: #f4f4f5;--color-background-secondary: #f4f4f5;--color-background-secondary-accent: #E4E4E5;--color-background-own: #EEFFDE;--color-background-own-selected: color.adjust($color-light-green, -10%);--color-text: #000000;--color-text-lighter: #2e3939;--color-text-secondary: #707579;--color-text-secondary-rgb: 112, 117, 121;--color-text-secondary-apple: #8A8A90;--color-text-meta: #686c72;--color-text-meta-rgb: 104, 108, 114;--color-text-meta-colored: #4FAE4E;--color-text-meta-apple: #8C8C91;--color-text-green: #4FAE4E;--color-text-green-rgb: 79, 174, 78;--color-borders: #DADCE0;--color-borders-input: #DADCE0;--color-dividers: #C8C6CC;--color-webpage-initial-background: #2e3939;--color-interactive-active: var(--color-primary);--color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);--color-composer-button: #707579CC;--color-primary: #3390EC;--color-primary-shade: #2f84d9;--color-primary-shade-darker: #2b79c6;--color-primary-shade-rgb: 47, 132, 217;--color-primary-opacity: rgba(var(--color-primary), 0.50);--color-green: #00C73E;--color-green-darker: #00a734;--color-error: #e53935;--color-error-shade: #d33431;--color-error-rgb: 229, 57, 53;--color-warning: #fb8c00;--color-yellow: #FDD764;--color-links: #3390EC;--color-own-links: #ffffff;--color-placeholders: #A2ACB4;--color-pinned: #ffffff;--color-code: #4a729a;--color-code-bg: rgba(112, 117, 121, 0.08);--color-code-own: #3c7940;--color-code-own-bg: rgba(112, 117, 121, 0.08);--color-accent-own: #4FAE4E;--color-message-meta-own: #4FAE4E;--color-message-reaction: $color-message-reaction;--color-message-reaction-hover: $color-message-reaction-hover;--color-message-reaction-own: $color-message-reaction-own;--color-message-reaction-hover-own: $color-message-reaction-own-hover;--color-reply-hover: #f4f4f4;--color-reply-active: #e8e9ea;--color-reply-own-hover: #dbf5cd;--color-reply-own-active: #c8ecbb;--color-background-own-apple: #DCF8C5;--color-reply-own-hover-apple: #cbefb7;--color-reply-own-active-apple: #bae6a8;--color-white: #ffffff;--color-gray: #c4c9cc;--color-chat-hover: #f4f4f5;--color-chat-active: #3390EC;--color-item-active: #ededed;--color-selection-highlight: #3993fb;--color-selection-highlight-emoji: rgba(57, 147, 251, .7);--color-user-1: #E17076;--color-user-2: #7BC862;--color-user-4: #65aadd;--color-user-5: #a695e7;--color-user-6: #ee7aae;--color-user-7: #6ec9cb;--color-user-8: #faa774;--color-default-shadow: #72727240;--color-light-shadow: #7272722B;--vh: 1vh;--border-radius-default: 0.75rem;--border-radius-default-small: 0.625rem;--border-radius-default-tiny: 0.375rem;--border-radius-messages: 0.75rem;--border-radius-messages-small: 0.375rem;--messages-container-width: 45.5rem;--right-column-width: 26.5rem;--header-height: 3.5rem;--symbol-menu-width: 26.25rem;--symbol-menu-height: 23.25rem;--symbol-menu-footer-height: 3rem;--z-ui-loader-mask: 2000;--z-notification: 1000;--z-right-column: 900;--z-header-menu: 990;--z-header-menu-backdrop: 980;--z-modal: 1000;--z-media-viewer: 1500;--z-drop-area: 55;--z-animation-fade: 50;--z-menu-bubble: 21;--z-menu-backdrop: 20;--z-message-highlighted: 14;--z-message-context-menu: 13;--z-scroll-down-button: 12;--z-mobile-search: 12;--z-middle-header: 11;--z-middle-footer: 11;--z-country-code-input-group: 10;--z-message-select-control: 9;--z-message-select-area: 8;--z-sticky-date: 9;--z-register-add-avatar: 5;--z-media-viewer-head: 3;--z-resize-handle: 2;--z-below: -1;--spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);--spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);--spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);--spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);--spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);--spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);--spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);--spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);--drag-target-border: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%23DDDFE0%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--drag-target-border-hovered: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%2363A2E3%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--layer-blackout-opacity: 0.3;--layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);--select-transition: 200ms ease-out}@media(min-width: 1276px)and (max-width: 1920px){:root{--right-column-width: 25vw}}@media(min-width: 1921px){:root{--messages-container-width: 50vw}}@media(max-width: 600px){:root{--right-column-width: 100vw;--symbol-menu-width: 100vw;--symbol-menu-height: 14.6875rem}}:root body.is-ios{--layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1)}:root body.is-android{--layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);--slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:2rem !important}.mt-5,.my-5{margin-top:2rem !important}.mr-5,.mx-5{margin-right:2rem !important}.mb-5,.my-5{margin-bottom:2rem !important}.ml-5,.mx-5{margin-left:2rem !important}.m-6{margin:3rem !important}.mt-6,.my-6{margin-top:3rem !important}.mr-6,.mx-6{margin-right:3rem !important}.mb-6,.my-6{margin-bottom:3rem !important}.ml-6,.mx-6{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:2rem !important}.pt-5,.py-5{padding-top:2rem !important}.pr-5,.px-5{padding-right:2rem !important}.pb-5,.py-5{padding-bottom:2rem !important}.pl-5,.px-5{padding-left:2rem !important}.p-6{padding:3rem !important}.pt-6,.py-6{padding-top:3rem !important}.pr-6,.px-6{padding-right:3rem !important}.pb-6,.py-6{padding-bottom:3rem !important}.pl-6,.px-6{padding-left:3rem !important}.input-group{position:relative;margin-bottom:1.5rem}.input-group label{display:block;padding:0 .25rem;position:absolute;left:.75rem;top:.95rem;background-color:var(--color-background);font-size:1rem;font-weight:400;color:var(--color-placeholders);transition:transform .15s ease-out,color .15s ease-out;cursor:text;pointer-events:none;transform-origin:left center;white-space:nowrap}.input-group.with-arrow::after{content:"";position:absolute;height:.75rem;width:.75rem;border-left:1px var(--color-text-secondary) solid;border-bottom:1px var(--color-text-secondary) solid;transform:rotate(-45deg);right:2rem;top:1rem}.input-group.touched label,.input-group.error label,.input-group.success label,.input-group .form-control:focus+label,.input-group .form-control.focus+label{transform:scale(0.75) translate(-0.5rem, -2.25rem)}.input-group input::placeholder,.input-group .form-control::placeholder{color:var(--color-placeholders)}.input-group.touched label{color:var(--color-text-secondary)}.input-group.error label{color:var(--color-error) !important}.input-group.success label{color:var(--color-text-green) !important}.input-group.disabled{opacity:.5;pointer-events:none}.input-group[dir=rtl] input{text-align:right}.input-group[dir=rtl] label{left:auto;right:.75rem}.input-group[dir=rtl].with-arrow::after{border-left:none;border-right:1px var(--color-text-secondary) solid;right:auto;left:2rem}.input-group[dir=rtl].touched label,.input-group[dir=rtl].error label,.input-group[dir=rtl].success label,.input-group[dir=rtl] .form-control:focus+label,.input-group[dir=rtl] .form-control.focus+label{transform:scale(0.75) translate(1.5rem, -2.25rem)}.form-control{--border-width: 1px;display:block;width:100%;height:3.375rem;padding:calc(.75rem - var(--border-width)) calc(.9rem - var(--border-width));border:var(--border-width) solid var(--color-borders-input);border-radius:var(--border-radius-default);color:var(--color-text);background-color:var(--color-background);outline:none;transition:border-color .15s ease;word-break:break-word;-webkit-appearance:none;font-size:1rem;line-height:1.25rem}.form-control[dir]{text-align:initial}.form-control:hover{border-color:var(--color-primary)}.form-control:hover+label{color:var(--color-primary)}.form-control:focus,.form-control.focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);caret-color:var(--color-primary)}.form-control:focus+label,.form-control.focus+label{color:var(--color-primary)}.form-control:disabled{background:none !important}.error .form-control{border-color:var(--color-error);box-shadow:inset 0 0 0 1px var(--color-error);caret-color:var(--color-error)}.success .form-control{border-color:var(--color-text-green);box-shadow:inset 0 0 0 1px var(--color-text-green);caret-color:var(--color-text-green)}select.form-control option{line-height:2rem}textarea.form-control{resize:none;overflow:hidden;line-height:1.3125rem;padding-top:calc(1rem - var(--border-width));padding-bottom:calc(1rem - var(--border-width))}.input-group.password-input{position:relative}.input-group.password-input .form-control{padding-right:3.375rem}.input-group.password-input .toggle-password{position:absolute;top:0;right:0;width:3.375rem;height:3.375rem;display:flex;align-items:center;justify-content:center;cursor:pointer;outline:none !important;color:var(--color-text-secondary);opacity:.7;font-size:1.5rem}.input-group.password-input .toggle-password:hover,.input-group.password-input .toggle-password:focus{opacity:1}.input-group.password-input[dir=rtl] .form-control{padding-left:3.375rem;padding-right:calc(.9rem - var(--border-width))}.input-group.password-input[dir=rtl] .toggle-password{left:0;right:auto}@font-face{font-family:"icomoon";src:url(icomoon.57726174156380af4e68..woff2) format("woff2"),url(icomoon.9b265b61a1efa088d5c6..woff) format("woff");font-weight:normal;font-style:normal;font-display:block}[class^=icon-],[class*=" icon-"]{font-family:"icomoon" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=icon-char-]::before,[class*=" icon-char-"]::before{font-family:Roboto,"Helvetica Neue",sans-serif;content:attr(data-char);width:1.5rem;text-align:center;display:block}.icon-loop:before{content:""}.icon-skip-next:before{content:""}.icon-skip-previous:before{content:""}.icon-volume-1:before{content:""}.icon-volume-2:before{content:""}.icon-volume-3:before{content:""}.icon-reaction-filled:before{content:""}.icon-reactions:before{content:""}.icon-sidebar:before{content:""}.icon-video-stop:before{content:""}.icon-speaker:before{content:""}.icon-speaker-outline:before{content:""}.icon-phone-discard-outline:before{content:""}.icon-allow-speak:before{content:""}.icon-stop-raising-hand:before{content:""}.icon-share-screen:before{content:""}.icon-voice-chat:before{content:""}.icon-video:before{content:""}.icon-noise-suppression:before{content:""}.icon-phone-discard:before{content:""}.icon-bot-commands-filled:before{content:""}.icon-reply-filled:before{content:""}.icon-bug:before{content:""}.icon-data:before{content:""}.icon-darkmode:before{content:""}.icon-animations:before{content:""}.icon-enter:before{content:""}.icon-fontsize:before{content:""}.icon-permissions:before{content:""}.icon-card:before{content:""}.icon-truck:before{content:""}.icon-share-filled:before{content:""}.icon-bold:before{content:""}.icon-bot-command:before{content:""}.icon-calendar-filter:before{content:""}.icon-comments:before{content:""}.icon-comments-sticker:before{content:""}.icon-arrow-down:before{content:""}.icon-email:before{content:""}.icon-italic:before{content:""}.icon-link:before{content:""}.icon-mention:before{content:""}.icon-monospace:before{content:""}.icon-next:before{content:""}.icon-password-off:before{content:""}.icon-pin-list:before{content:""}.icon-previous:before{content:""}.icon-replace:before{content:""}.icon-schedule:before{content:""}.icon-strikethrough:before{content:""}.icon-underlined:before{content:""}.icon-zoom-in:before{content:""}.icon-zoom-out:before{content:""}.icon-select:before{content:""}.icon-folder:before{content:""}.icon-bots:before{content:""}.icon-calendar:before{content:""}.icon-cloud-download:before{content:""}.icon-colorize:before{content:""}.icon-forward:before{content:""}.icon-reply:before{content:""}.icon-help:before{content:""}.icon-info:before{content:""}.icon-info-filled:before{content:""}.icon-delete-filled:before{content:""}.icon-delete:before{content:""}.icon-edit:before{content:""}.icon-new-chat-filled:before{content:""}.icon-send:before{content:""}.icon-send-outline:before{content:""}.icon-add-user-filled:before{content:""}.icon-add-user:before{content:""}.icon-delete-user:before{content:""}.icon-microphone:before{content:""}.icon-microphone-alt:before{content:""}.icon-poll:before{content:""}.icon-revote:before{content:""}.icon-photo:before{content:""}.icon-document:before{content:""}.icon-camera:before{content:""}.icon-camera-add:before{content:""}.icon-logout:before{content:""}.icon-saved-messages:before{content:""}.icon-settings:before{content:""}.icon-phone:before{content:""}.icon-attach:before{content:""}.icon-copy:before{content:""}.icon-channel:before{content:""}.icon-group:before{content:""}.icon-user:before{content:""}.icon-non-contacts:before{content:""}.icon-active-sessions:before{content:""}.icon-admin:before{content:""}.icon-download:before{content:""}.icon-location:before{content:""}.icon-stop:before{content:""}.icon-archive:before{content:""}.icon-unarchive:before{content:""}.icon-readchats:before{content:""}.icon-unread:before{content:""}.icon-message:before{content:""}.icon-lock:before{content:""}.icon-unlock:before{content:""}.icon-mute:before{content:""}.icon-unmute:before{content:""}.icon-pin:before{content:""}.icon-unpin:before{content:""}.icon-smallscreen:before{content:""}.icon-fullscreen:before{content:""}.icon-large-pause:before{content:""}.icon-large-play:before{content:""}.icon-pause:before{content:""}.icon-play:before{content:""}.icon-channelviews:before{content:""}.icon-message-succeeded:before{content:""}.icon-message-read:before{content:""}.icon-message-pending:before{content:""}.icon-message-failed:before{content:""}.icon-favorite:before{content:""}.icon-keyboard:before{content:""}.icon-delete-left:before{content:""}.icon-recent:before{content:""}.icon-gifs:before{content:""}.icon-stickers:before{content:""}.icon-smile:before{content:""}.icon-animals:before{content:""}.icon-eats:before{content:""}.icon-sport:before{content:""}.icon-car:before{content:""}.icon-lamp:before{content:""}.icon-language:before{content:""}.icon-flag:before{content:""}.icon-more:before{content:""}.icon-search:before{content:""}.icon-remove:before{content:""}.icon-add:before{content:""}.icon-check:before{content:""}.icon-close:before{content:""}.icon-arrow-left:before{content:""}.icon-arrow-right:before{content:""}.icon-down:before{content:""}.icon-up:before{content:""}.icon-eye-closed:before{content:""}.icon-eye:before{content:""}.icon-muted:before{content:""}.icon-avatar-archived-chats:before{content:""}.icon-avatar-deleted-account:before{content:""}.icon-avatar-saved-messages:before{content:""}.icon-pinned-chat:before{content:""}.media-inner{position:relative}.media-inner video,.media-inner img{display:block;object-fit:cover}.media-inner video{background:no-repeat 50% 50%;background-size:contain}.media-inner .thumbnail~.thumbnail,.media-inner .thumbnail~.full-media,.media-inner .media-loading{position:absolute}.animated-close-icon{position:absolute;transform:rotate(-45deg)}.animated-close-icon,.animated-close-icon::before,.animated-close-icon::after{width:1.125rem;height:.125rem;border-radius:.125rem;background-color:var(--color-text-secondary);transition:transform var(--slide-transition)}.animated-close-icon::before,.animated-close-icon::after{position:absolute;left:0;top:0;content:""}.animated-close-icon::before{transform:rotate(90deg)}.animated-close-icon.no-transition,.animated-close-icon.no-transition::before,.animated-close-icon.no-transition::after{transition:none}.animated-close-icon.state-back{transform:rotate(180deg)}.animated-close-icon.state-back::before{transform:rotate(45deg) scaleX(0.75) translate(0, -0.375rem)}.animated-close-icon.state-back::after{transform:rotate(-45deg) scaleX(0.75) translate(0, 0.375rem)}.chat-list{background:var(--color-background);height:100%;padding:.5rem .125rem .5rem .4375rem;overflow-y:auto}@supports(overflow-y: overlay){body.is-android .chat-list{overflow-y:overlay;overflow-x:hidden}}.chat-list .scroll-container{position:relative}.chat-list .ListItem.chat-item-clickable{margin:0}@media(max-width: 600px){.chat-list{padding-left:0;padding-right:0}}.chat-list .no-results{color:var(--color-text-meta);margin-top:2rem;text-align:center}div.color-bg-1{--color-user: var(--color-user-1)}div.color-bg-2{--color-user: var(--color-user-2)}div.color-bg-4{--color-user: var(--color-user-4)}div.color-bg-5{--color-user: var(--color-user-5)}div.color-bg-6{--color-user: var(--color-user-6)}div.color-bg-7{--color-user: var(--color-user-7)}div.color-bg-8{--color-user: var(--color-user-8)}div.replies-bot-account,div.saved-messages{--color-user: var(--color-primary)}div.deleted-account{--color-user: var(--color-gray)}html,body{width:100%;height:100%;background:var(--color-background);margin:0;padding:0;font-size:16px;font-family:"Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;color:var(--color-text);font-weight:400;line-height:1.5;text-align:left;overflow:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(max-width: 600px){html,body{height:calc(var(--vh, 1vh)*100)}}body.is-ios,body.is-macos{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Helvetica Neue",sans-serif}html[lang=fa],html[lang=fa] body{font-family:"Vazir","Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}html[lang=fa].is-ios,html[lang=fa].is-macos,html[lang=fa] body.is-ios,html[lang=fa] body.is-macos{font-family:"Vazir",-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}body.is-ios{--border-radius-messages: 1rem;--border-radius-messages-small: 0.5rem}body.cursor-grabbing,body.cursor-grabbing *{cursor:grabbing !important}body.cursor-ew-resize{cursor:ew-resize !important}#root{height:100%}@media(max-width: 600px){#root{height:calc(var(--vh, 1vh)*100)}}#middle-column-portals,#portals{position:absolute;top:0;left:0;right:0}.hidden{visibility:hidden}.no-selection{-moz-user-select:none;user-select:none;-webkit-user-select:none !important}.resize-handle{display:none;position:absolute;top:0;right:-0.25rem;bottom:0;width:.25rem;z-index:var(--z-resize-handle);cursor:ew-resize}@media(min-width: 926px){.resize-handle{display:block}}.visually-hidden{position:absolute !important;width:0;height:0;overflow:hidden;clip:rect(0, 0, 0, 0);z-index:-1}.not-implemented{opacity:.5}.not-implemented,.not-implemented *{cursor:not-allowed !important}*{box-sizing:border-box}.no-animations #root *,.no-animations #root *::before,.no-animations #root *::after{transition:none !important}.custom-scroll,.custom-scroll-x{scrollbar-width:thin;scrollbar-color:rgba(90,90,90,0) transparent;transition:scrollbar-color .3s ease;-webkit-overflow-scrolling:touch;pointer-events:auto}.custom-scroll::-webkit-scrollbar-thumb,.custom-scroll-x::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,0);border-radius:.375rem;box-shadow:0 0 1px rgba(255,255,255,.01)}.custom-scroll:hover,.custom-scroll:focus,.custom-scroll:focus-within,.custom-scroll-x:hover,.custom-scroll-x:focus,.custom-scroll-x:focus-within{scrollbar-color:rgba(90,90,90,.3) transparent}.custom-scroll:hover::-webkit-scrollbar-thumb,.custom-scroll:focus::-webkit-scrollbar-thumb,.custom-scroll:focus-within::-webkit-scrollbar-thumb,.custom-scroll-x:hover::-webkit-scrollbar-thumb,.custom-scroll-x:focus::-webkit-scrollbar-thumb,.custom-scroll-x:focus-within::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,.3)}body:not(.is-ios) .custom-scroll::-webkit-scrollbar{width:.375rem}body:not(.is-ios) .custom-scroll-x::-webkit-scrollbar{height:.35rem}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.emoji-small{background:no-repeat;background-size:1.25rem;color:transparent;display:inline-block;width:1.25rem;height:1.25rem;margin-inline-end:1px;overflow:hidden;flex-shrink:0}.emoji-small::selection{background-color:var(--color-selection-highlight-emoji);color:transparent}div[role=button]{outline:none !important;cursor:pointer}.opacity-transition{opacity:1;transition:opacity .15s ease}.opacity-transition:not(.open){opacity:0}.opacity-transition:not(.shown){display:none}.opacity-transition.slow{transition-duration:.3s}.color-primary{color:var(--color-primary) !important}.color-danger{color:var(--color-error) !important}.text-muted{color:var(--color-text-secondary) !important}.protector{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2}.for-ios-autocapitalization-fix{position:fixed;font-size:16px;opacity:0;bottom:1rem;z-index:-1}@keyframes grow-icon{0%{transform:scale(0.5);opacity:.8}50%{transform:scale(1.1);opacity:1}100%{transform:scale(1)}}@keyframes hide-icon{from{transform:scale(1);opacity:.4}to{transform:scale(0.5);opacity:0}} - -/*# sourceMappingURL=main.b2f7667b4f3d1d606a08.css.map*/ \ No newline at end of file diff --git a/dist/main.b2f7667b4f3d1d606a08.css.map b/dist/main.b2f7667b4f3d1d606a08.css.map deleted file mode 100644 index 4932d659a..000000000 --- a/dist/main.b2f7667b4f3d1d606a08.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.b2f7667b4f3d1d606a08.css","mappings":"AACE,oBACE,eACA,yDACA,wCACA,oBAEA,sKAIE,yDAGF,gCACE,8BAIJ,mBACE,oDAGF,kBACE,UACA,8BAGF,sCACE,gEACA,UAIJ,+BACE,IACE,UAEF,IACE,YAEF,IACE,+B;AC1CJ,MACE,cAEA,YACE,cAEA,0BACE,qB;ACPN,UACE,YACA,yBAFF,UAGI,iCAGF,gBACE,eACA,MACA,OACA,QACA,cACA,WACA,YACA,gCACA,aAGA,yBAZF,gBAaI,aACA,+BACA,yBAGF,sBACE,OACA,mCACA,gBACA,WACA,kBAEA,yBAPF,sBAQI,gBAGF,0BAXF,sBAYI,WACA,gBAGF,0BAhBF,sBAiBI,QAGF,yBApBF,sBAqBI,0BAGF,yBAxBF,sBAyBI,eACA,wBAIJ,wBACE,OACA,2CACA,4CACA,kBACA,UACA,gBAEA,gCACE,WACA,cACA,kBACA,MACA,OACA,SACA,QACA,4BACA,sBACA,WACA,6BAEA,yDACE,yBAGF,6GAEE,yDAIJ,kDACE,sBAGF,sCACE,gCACE,8BAIJ,gDACE,aACA,iCAGF,0BA9CF,wBA+CI,OACA,mBAGF,yBAnDF,wBAoDI,cAIJ,uBACE,kBACA,MACA,QACA,UACA,YACA,gCACA,2CACA,mCAIJ,iBACE,OACA,kC;AC5HJ,SACE,qBAEA,kBACA,aACA,mBACA,uBAEA,0BACA,2BAEA,aACE,kBACA,MACA,OACA,QACA,SAEA,4BACA,qBAEA,oBACA,sBACA,mCACA,iCAIA,iCACE,WACA,kBACA,eACA,cACA,iBACA,gBACA,kBAGF,yCACE,2BAGF,0CACE,gCAKF,mBACE,2CAIA,mCACE,gDAMJ,kBACE,0CAEA,8BACE,+CAMJ,mBACE,2CAKF,mBACE,2CAKF,kBACE,0CAKF,oBACE,4CAKN,gBACE,KACE,uBAGF,GACE,0B;ACtFJ,4BACE,KACE,mBACA,UAEF,IACE,UAEF,GACE,UACA,oBAIJ,kBACE,kBACA,MACA,OACA,SACA,QAEA,yCACE,aAGF,uBACE,kBACA,cACA,0DACA,kBACA,mBACA,iC;ACtBJ,QACE,wBACA,aACA,mBACA,uBACA,WACA,cACA,SACA,2CACA,6BACA,sBACA,gBACA,WACA,gBACA,eACA,yBACA,cACA,kBACA,gBACA,4CACA,gCAGA,8DACE,2BAGF,iBACE,sBACA,eACA,oBAGF,cACE,aACA,kBAEA,gBACE,iBAIJ,gBACE,sCACA,yBACA,mCAlEA,8JAqEE,4CAlEF,qBACE,oDAiEA,6CAvDA,4EA2DA,mDAIJ,kBACE,yCACA,kDACA,mCAhFA,oKAmFE,sCACA,WAjFF,qBACE,sDA+EA,sCACA,YAtEA,8EA0EA,4CAIJ,aACE,yCACA,kCACA,mCA/FA,qJAkGE,2BA/FF,qBACE,iDA8FA,4BApFA,yEAwFA,yCAIJ,eACE,yCACA,yBACA,kDA7GA,2JAgHE,oCACA,yBA9GF,qBACE,mDA4GA,oCACA,0BAnGA,2EAuGA,0CAIJ,aACE,6BAEA,qBACE,2BACA,6BA9HF,6KAiII,4DA9HJ,qBACE,yDA6HE,6DAnHF,iFAuHE,4DAIJ,uBACE,6BACA,kCA3IF,0KAgJI,oDACA,yBA9IJ,qBACE,wDA4IE,oDACA,0BAnIF,gFAuIE,oDAKN,cACE,WA3JA,wJA8JE,UA3JF,qBACE,kDA0JA,WAGF,wBACE,UAIJ,oBACE,6BACA,kCAEA,uDA1KA,0KA6KE,wDA1KF,qBACE,wDAyKA,yDA/JA,gFAmKA,6DAGF,8BACE,2BAIJ,0BACE,6BACA,2BACA,0CA5LA,4LA+LE,uCACA,WA7LF,qBACE,8DA2LA,uCACA,YAlLA,sFAsLA,uCAIJ,0BACE,6BACA,qBACA,oCA3MA,4LA8ME,iCA3MF,qBACE,8DA0MA,kCAhMA,sFAoMA,iCAIJ,aACE,iCACA,WACA,0CAzNA,qJA4NE,iCACA,WA1NF,qBACE,iDAwNA,iCACA,YA/MA,yEAmNA,iCAIJ,gBACE,eACA,iBAEA,sBACE,cAGF,qBACE,cACA,sBACA,sBAGF,0BACE,oBACA,sBAEA,4BACE,iBACA,mBAGF,mCACE,qBACA,qBAEA,qCACE,kBACA,eAKN,yBAlCF,gBAmCI,cAEA,sBACE,cAKN,aACE,eACA,iBACA,iDACA,kBACA,gBAEA,mBACE,cACA,eACA,kBAGF,eACE,kBAGF,kBACE,YACA,mBACA,sBACA,eAIJ,cACE,qBACA,sBACA,WAEA,mBACE,sBACA,uBAIJ,aACE,sBACA,qBACA,sBACA,oBAGF,gBACE,kBACA,oBAEA,yBACE,kBACA,cACA,YAEA,uBAIJ,eACE,oB;AC3UJ,UACE,cACA,kBACA,oBACA,gBACA,qBACA,mBACA,eAEA,mBACE,oBACA,WAKE,uCACE,kBAGF,sCAEE,0FACA,qBACA,kBAMJ,iFAEE,qBAGF,2BACE,kBACA,aACA,YACA,UACA,oCACA,wBAMA,8DACE,gCAGF,6DACE,yDACA,UAGA,yBACA,wCAKN,gBACE,kBACA,uBACA,UAIA,iEACE,WACA,cACA,kBACA,eACA,aACA,eACA,gBAGF,iCACE,4CACA,qBACA,yCACA,2DAGF,gCAEE,oEACA,wBACA,UACA,4BAGF,gCACE,cACA,mBAGF,mCACE,cACA,kBACA,iBACA,kCAKF,+CACE,kCACA,sCAGF,8CACE,UAIJ,mBACE,eACA,qBAGE,oCACE,UACA,cAIJ,uDAEE,iBAIA,mFACE,UACA,g1C;ACzIR,SACE,aACA,YACA,mBACA,uBAEA,qBACE,eAGF,kBACE,wB;ACVF,oBACE,kBACA,WAGF,gBACE,eACA,YACA,aACA,WACA,cACA,+BAGF,cACE,gBACA,cACA,gBACA,gBACA,SACA,kBACA,yCACA,8DACA,2CACA,kBACA,6BACA,4BAEA,qBACA,0GAmBA,gCACA,cAlBA,mBACE,mBAGF,sBACE,gEAGF,qCACE,0BACA,mCAGF,mCACE,2BAMF,kBACE,oBAGF,qBACE,uBAGF,mBACE,qBAGF,oBACE,sBAGF,0BACE,iBAIJ,cACE,gBACA,mCACA,kCACA,mBACA,kB;AC9EJ,cACE,kB;ACDF,UACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,oBACA,kBACA,gBACA,mBACA,mBACA,wBACA,mCACA,eACA,uBAEA,qBACE,gCACE,yCACA,qBACA,eAIJ,yBACE,iDACE,qBACA,cAGF,iBACE,0CAIJ,YACE,iBACA,kBACA,kCAGF,0BACE,kBAEA,qCACE,0BAIJ,mBACE,sBACA,0BAGF,sBACE,yBAEA,wBACE,cAIJ,iDACE,0CACA,2BAGF,oBACE,iBAIA,qBACE,iBACA,eAGF,mCACE,iBACA,eAGF,6BACE,cACA,kB;ACnFJ,+BACE,eAEA,0CAEA,wCACE,kBACA,SACA,aACA,WACA,uBAIF,8CACE,kBACA,aACA,WACA,aACA,cACA,6CACA,aACA,cACA,kCACA,0DAEA,mDACE,kCACA,mCACA,WAKN,0BACE,WACA,mBACA,gBACA,uCACA,sBAEA,+BACE,oBAKF,mCACE,aACA,mBAGF,8CACE,uBACA,mBAEA,mDACE,kBAKN,gCACE,eACA,kBAEA,uCACE,WACA,YACA,qBACA,mBACA,uBAIJ,gCACE,mBACA,gBACA,uBACA,kBACA,gBAGF,gCACE,iBACA,W;ACvFJ,WACE,WACA,kBACA,cACA,uBACA,kBAEA,gDAPF,WAQI,6BAEA,cACE,kBAIJ,kDACE,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDARF,kDASI,YACA,aACA,sBAIJ,iBACE,oEACA,qBAGF,cACE,kBACA,cAEA,yBAJF,cAKI,eACA,iBAIJ,iBACE,kBACA,iBACA,qBACA,kCAEA,yBANF,iBAOI,eACA,oBAKN,kGAKE,YACA,gBAIA,6BACE,oBAGF,gCACE,mBAGF,wCACE,gBAMF,0CACE,aACA,mBACA,uBAIJ,kBACE,aACA,cACA,cACA,iBACA,kCACA,YACA,aACA,mBACA,uBACA,eAEA,gDACE,UAKF,sDACE,aAGF,4BACE,UACA,mBACA,2EAEA,wCACE,WACA,qBAGF,mCACE,gBACA,2CACA,8BACA,qBAIJ,iBACE,uBAGF,iBACE,gBACA,mBACA,kBAEA,oBACE,uBACA,gBACA,gBACA,aAEA,4BACE,sBACA,aACA,uBACA,mBACA,iBACA,cACA,UACA,oBACA,gCACA,kBACA,kBACA,WAMR,kBACE,kC;ACpKF,aACE,YACA,aACA,sBACA,mBACA,uBAEA,sBACE,gBACA,YACA,eACA,kBAGF,oBACE,gBAGF,0BACE,kCACA,kBAGF,iBACE,WACA,gBAGF,qBACE,gB;AC7BJ,iBAAiB;AACjB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,sFAAsF;AACxF;AACA,aAAa;AACb;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,0BAA0B;AAC5B;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,0BAA0B;AAC5B;AACA,eAAe;AACf;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,mHAAmH;AACrH;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAoG;EACpG,yKAAyK;AAC3K;AACA,iBAAiB;AACjB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,sFAAsF;AACxF;AACA,aAAa;AACb;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,0BAA0B;AAC5B;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,0BAA0B;AAC5B;AACA,eAAe;AACf;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,mHAAmH;AACrH;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAA8G;EAC9G,yKAAyK;AAC3K;;AAEA,gEAAgE;AAChE;EACE,kBAAkB;EAClB;yDAC4C;EAC5C,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;AAC3B;;AAEA,gEAAgE;AAChE;EACE,kBAAkB;EAClB;yDAC2C;EAC3C,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;AAC5B;;AC1IQ,qBCPR,qBAGE,MAGF,sBACE,iBACA,8BACA,0BACA,6BACA,6CACA,CAIA,6EAEF,aACE,MAGF,QACE,uBAGF,uBACE,IAGF,sBACE,SACA,iBACA,mBAGF,YACE,oBACA,gBACA,GAGF,YACE,mBACA,uCAGF,yBAEE,yCACA,CADA,gCACA,YACA,gBACA,SAGF,kBACE,kBACA,oBACA,UAGF,YAGE,mBACA,yBAGF,eAIE,IAGF,eACE,IAGF,mBACE,cACA,YAGF,eACE,KAGF,iBACE,UAGF,eAEE,OAGF,aACE,SAGF,iBAEE,cACA,cACA,wBACA,KAGF,cACE,KAGF,UACE,GAGF,wBACE,qBACA,6BACA,qCACA,SAEF,aACE,0BACA,+BAGF,aACE,qBACA,yEAEF,aACE,qBACA,qCAEF,SACE,mBAGF,uHAIE,qBACA,KAGF,YACE,mBACA,cACA,6BACA,QAGF,eACE,KAGF,qBACE,kBACA,gBAGF,eACE,mFAGF,yBASE,OAGF,wBACE,SAGF,kBACE,sBACA,cACA,gBACA,oBACA,IAGF,kBACE,OAGF,oBACE,oBACA,QAGF,eACE,cAGF,kBACE,0CACA,uCAGF,QAKE,oBACA,kBACA,oBACA,cAGF,gBAEE,eAGF,mBAEE,sDAGF,yBAIE,yHAGF,SAIE,kBACA,wCAGF,qBAEE,UACA,gFAGF,0BAIE,UAGF,aACE,gBACA,UAGF,WACE,UACA,SACA,SACA,QAGF,aACE,WACA,eACA,UACA,oBACA,iBACA,oBACA,cACA,mBACA,UAGF,uBACE,mFAGF,WAEE,eAGF,mBACE,wBACA,sFAGF,uBAEE,8BAGF,YACE,0BACA,QAGF,oBACE,SAGF,iBACE,UAGF,YACE,UAGF,uBACE,OC/PF,2BACE,qCACA,sCACA,6CACA,gCACA,wEACA,sBACA,8BACA,gCACA,0CACA,sCACA,2BACA,qCACA,mCACA,iCACA,4BACA,oCACA,yBACA,+BACA,0BACA,4CACA,iDACA,0EACA,0EACA,+EACA,mCACA,yBAEA,+BACA,sCACA,wCACA,0DACA,uBACA,8BACA,uBAEA,6BACA,+BACA,yBAEA,wBAEA,uBAEA,2BAEA,8BAEA,wBAEA,sBAEA,2CACA,0BACA,+CACA,4BAEA,kCACA,kDAEA,8DACA,0DACA,sEACA,6BAEA,8BACA,iCACA,kCACA,sCAEA,uCACA,wCACA,uBAEA,sBACA,4BAEA,6BACA,6BACA,qCAEA,0DACA,wBAEA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,kCAEA,gCACA,UAEA,iCAEA,wCACA,uCACA,kCACA,yCACA,oCACA,8BACA,wBACA,8BAEA,+BACA,kCACA,yBAgBA,uBACA,sBACA,qBACA,8BACA,gBACA,uBACA,kBACA,uBACA,oBACA,sBACA,4BACA,6BACA,2BACA,sBACA,sBACA,sBACA,iCACA,8BACA,2BACA,mBACA,2BACA,yBACA,qBACA,cACA,8DAEA,mEACA,6DACA,kEACA,8DACA,8DACA,6DACA,+DACA,8DAEA,sEACA,8BAEA,yDAEA,wDACA,oCACA,kDAxDA,MA9GF,0BA+GI,4BAGF,MAlHF,gCAmHI,2BAGF,MAtHF,2BAuHI,2BACA,iCACA,oBA+CF,wDACE,wDACA,uBAGF,uDACE,wDACA,MC1NA,gCACA,uBAEE,aAEF,yBAEE,aAEF,0BAEE,aAEF,wBAEE,MAfF,qCACA,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAfF,oCACA,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAfF,mCACA,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAfF,qCACA,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAfF,mCACA,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAfF,mCACA,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAfF,iCACA,wBAEE,aAEF,0BAEE,aAEF,2BAEE,aAEF,yBAEE,MAfF,sCACA,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAfF,qCACA,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAfF,oCACA,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAfF,sCACA,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAfF,oCACA,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAfF,oCACA,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,cCrCN,iBACE,qBACA,oBAEA,aACE,iBACA,kBACA,YACA,WACA,yCACA,eACA,gBACA,gCACA,uDACA,YACA,oBACA,6BACA,mBACA,gCAIA,UACE,kBACA,cACA,aACA,kDACA,oDACA,yBACA,WACA,SACA,8JAIJ,kDAKE,yEAGF,+BAEE,4BAGF,iCACE,0BAGF,mCACE,4BAGF,wCACE,uBAGF,UACE,oBACA,6BAIA,gBACE,6BAGF,SACE,aACA,yCAIA,gBACE,mDACA,WACA,UACA,2MAIJ,iDAKE,eAKN,mBACE,cACA,WACA,gBACA,6EACA,4DACA,2CACA,wBACA,yCACA,aACA,kCACA,sBACA,wBACA,eAEA,oBACA,oBAEA,kBACE,qBAGF,iCACE,2BAEA,0BACE,yCAIJ,iCAEE,gDACA,iCACA,qDAEA,0BACE,wBAIJ,0BACE,sBAGF,+BACE,8CACA,+BACA,wBAGF,oCACE,mDACA,oCACA,4BAKF,gBACE,uBAIJ,WACE,gBACA,sBACA,6CACA,gDACA,6BAGF,iBACE,2CAEA,sBACE,8CAGF,iBACE,MACA,QACA,eACA,gBACA,aACA,mBACA,uBACA,eACA,wBACA,kCAEA,WACA,iBACA,uGAEA,SACE,oDAKF,qBACE,gDACA,uDAGF,MACE,WACA,YC1MN,qBACE,qHACA,mBAEA,kBACA,mBACA,kCAGF,gCAGE,WACA,kBACA,mBACA,oBACA,oBACA,cACA,mCAGA,kCACA,4DAIA,8CACE,wBACA,aACA,kBACA,cACA,mBAIJ,WACE,wBAEF,WACE,4BAEF,WACE,uBAEF,WACE,uBAEF,WACE,uBAEF,WACE,8BAEF,WACE,wBAEF,WACE,sBAEF,WACE,yBAEF,WACE,sBAEF,WACE,8BAEF,WACE,oCAEF,WACE,0BAEF,WACE,gCAEF,WACE,2BAEF,WACE,yBAEF,WACE,oBAEF,WACE,gCAEF,WACE,4BAEF,WACE,kCAEF,WACE,2BAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,yBAEF,WACE,oBAEF,WACE,uBAEF,WACE,0BAEF,WACE,mBAEF,WACE,oBAEF,WACE,2BAEF,WACE,mBAEF,WACE,0BAEF,WACE,8BAEF,WACE,uBAEF,WACE,+BAEF,WACE,yBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,mBAEF,WACE,2BAEF,WACE,uBAEF,WACE,uBAEF,WACE,sBAEF,WACE,uBAEF,WACE,4BAEF,WACE,yBAEF,WACE,sBAEF,WACE,uBAEF,WACE,qBAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,6BAEF,WACE,uBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,mBAEF,WACE,0BAEF,WACE,4BAEF,WACE,qBAEF,WACE,mBAEF,WACE,8BAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,uBAEF,WACE,0BAEF,WACE,yBAEF,WACE,6BAEF,WACE,mBAEF,WACE,qBAEF,WACE,oBAEF,WACE,uBAEF,WACE,qBAEF,WACE,yBAEF,WACE,qBAEF,WACE,6BAEF,WACE,uBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,oBAEF,WACE,uBAEF,WACE,uBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,wBAEF,WACE,qBAEF,WACE,sBAEF,WACE,mBAEF,WACE,qBAEF,WACE,mBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,0BAEF,WACE,yBAEF,WACE,0BAEF,WACE,yBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,gCAEF,WACE,2BAEF,WACE,8BAEF,WACE,6BAEF,WACE,uBAEF,WACE,uBAEF,WACE,0BAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,oBAEF,WACE,sBAEF,WACE,mBAEF,WACE,oBAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,mBAEF,WACE,mBAEF,WACE,qBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oBAEF,WACE,yBAEF,WACE,0BAEF,WACE,mBAEF,WACE,iBAEF,WACE,yBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oCAEF,WACE,qCAEF,WACE,oCAEF,WACE,0BAEF,WACE,cC7dF,iBACE,qCAEA,aACE,iBACA,oBAGF,4BACE,wBACA,oGAGF,iBACE,sBAIJ,iBACE,yBACA,+EAEA,cACE,eACA,sBACA,6CACA,6CACA,0DAGF,iBACE,OACA,MACA,WACA,8BAGF,uBACE,yHAIA,eACE,iCAIJ,wBACE,yCAEA,4DACE,wCAGF,4DACE,YAMN,kCACE,YACA,qCACA,gBAEA,gCC7DA,2BD8DA,kBC7DE,kBAGA,+BD8DF,iBACE,0CAGF,QACE,0BAGF,WAlBF,cAmBI,gBACA,yBAGF,4BACE,gBACA,kBACA,gBAMF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,4CAGF,kCAEE,qBAGF,+BACE,WNzHJ,UACE,YACA,mCACA,SACA,UACA,eACA,kKACA,wBACA,gBACA,gBACA,gBACA,gBACA,mCACA,kCACA,0BAEA,UAhBF,+BAiBI,4BAIJ,+GAEE,kCAGF,yKAEE,mGAEA,yKAEE,aAIJ,8BACE,uCACA,6CAGF,0BACE,uBAGF,2BACE,OAGF,WACE,0BACA,MAFF,+BAGI,kCAIJ,iBAEE,MACA,OACA,QACA,SAGF,iBACE,eAGF,qBACE,CADF,gBACE,oCACA,gBAGF,YACE,kBACA,MACA,eACA,SACA,aACA,+BACA,iBACA,0BAEA,eAVF,aAWI,mBAQJ,4BACE,QACA,SACA,gBACA,sBACA,WACA,kBAGF,UACE,qCAEA,6BACE,GAIJ,qBACE,qFAGF,0BAGE,iCAGF,oBAEE,6CACA,oCACA,iCAEA,oBAEA,mFAEA,iCACE,sBACA,yCAEA,mJAGF,6CACE,ySAEA,kCACE,qDAOF,aACE,uDAKF,aACE,eAKN,oBACE,kCAEA,YACE,cAIJ,oBACE,wBACA,kBACA,qBACA,cACA,eACA,sBACA,gBACA,cACA,yBAEA,uDACE,kBACA,kBAIJ,uBACE,eACA,qBAGF,SACE,6BACA,gCAEA,SACE,iCAGF,YACE,0BAGF,uBACE,gBAIJ,qCACE,eAGF,mCACE,aAGF,4CACE,YAGF,iBACE,OACA,MACA,QACA,SACA,UACA,iCAGF,cACE,eACA,UACA,YACA,WACA,sBAGF,GACE,oBACE,WACA,KAEF,oBACE,UACA,MAEF,kBACE,uBAIJ,KACE,kBACE,WACA,IAEF,oBACE,UACA,6mH","sources":["webpack://telegram-t/./src/components/common/spoiler/Spoiler.scss","webpack://telegram-t/./src/components/ui/Link.scss","webpack://telegram-t/./src/components/common/UiLoader.scss","webpack://telegram-t/./src/components/ui/Spinner.scss","webpack://telegram-t/./src/components/ui/RippleEffect.scss","webpack://telegram-t/./src/components/ui/Button.scss","webpack://telegram-t/./src/components/ui/Checkbox.scss","webpack://telegram-t/./src/components/ui/Loading.scss","webpack://telegram-t/./src/components/ui/Menu.scss","webpack://telegram-t/./src/components/ui/DropdownMenu.scss","webpack://telegram-t/./src/components/ui/MenuItem.scss","webpack://telegram-t/./src/components/auth/CountryCodeInput.scss","webpack://telegram-t/./src/components/auth/Auth.scss","webpack://telegram-t/./src/components/main/AppInactive.scss","webpack://telegram-t/./src/assets/fonts/roboto.css","webpack://telegram-t/./src/styles/index.scss","webpack://telegram-t/./src/styles/reboot.css","webpack://telegram-t/./src/styles/_variables.scss","webpack://telegram-t/./src/styles/_spacing.scss","webpack://telegram-t/./src/styles/_forms.scss","webpack://telegram-t/./src/styles/icons.scss","webpack://telegram-t/./src/styles/_common.scss","webpack://telegram-t/./src/styles/_mixins.scss"],"sourcesContent":[".Spoiler {\n &--concealed {\n cursor: pointer;\n background-image: url('../../../assets/spoiler-dots-black.png');\n background-size: auto min(100%, 1.125rem);\n border-radius: 0.5rem;\n\n html.theme-dark &,\n html.theme-light .ListItem.selected &,\n .ActionMessage &,\n .MediaViewerFooter & {\n background-image: url('../../../assets/spoiler-dots-white.png');\n }\n\n .emoji-only & {\n background-size: auto 1.125rem;\n }\n }\n\n &--animated {\n animation: pulse-opacity-light 1.75s linear infinite;\n }\n\n &__content {\n opacity: 1;\n transition: opacity 250ms ease;\n }\n\n &--concealed &__content {\n user-select: none;\n opacity: 0;\n }\n}\n\n@keyframes pulse-opacity-light {\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 75% {\n opacity: 1;\n }\n}\n",".Link {\n color: inherit;\n\n &:hover {\n color: inherit;\n\n &.GroupCallLink {\n text-decoration: none;\n }\n }\n}\n","#UiLoader {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n\n .mask {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n width: 100%;\n height: 100%;\n z-index: var(--z-ui-loader-mask);\n display: flex;\n\n\n @media (min-width: 600px) {\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: 100%;\n }\n\n .left {\n flex: 1;\n background: var(--color-background);\n min-width: 12rem;\n width: 33vw;\n max-width: 26.5rem;\n\n @media (min-width: 926px) {\n max-width: 40vw;\n }\n\n @media (min-width: 1276px) {\n width: 25vw;\n max-width: 33vw;\n }\n\n @media (max-width: 1275px) {\n flex: 2;\n }\n\n @media (max-width: 925px) {\n width: 26.5rem !important;\n }\n\n @media (max-width: 600px) {\n max-width: none;\n width: 100vw !important;\n }\n }\n\n .middle {\n flex: 3;\n border-left: 1px solid var(--color-borders);\n border-right: 1px solid var(--color-borders);\n position: relative;\n z-index: 1;\n overflow: hidden;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: no-repeat center;\n background-size: cover;\n z-index: -1;\n transform-origin: left center;\n\n .theme-dark body.initial & {\n background-color: #0f0f0f;\n }\n\n .theme-light body.initial &,\n body:not(.initial) & {\n background-image: url('../../assets/chat-bg.jpg');\n }\n }\n\n &.with-right-column::before {\n transform: scale(0.67);\n }\n\n @media screen and (min-width: 1276px) {\n &::before {\n margin: -16rem -5rem -20rem 0;\n }\n }\n\n &.custom-bg-image::before {\n margin: -1rem;\n background-image: none !important;\n }\n\n @media (max-width: 1275px) {\n flex: 3;\n border-right: none;\n }\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .right {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n width: var(--right-column-width);\n border-left: 1px solid var(--color-borders);\n background: var(--color-background);\n }\n }\n\n .blank {\n flex: 1;\n background: var(--color-background);\n }\n}\n",".Spinner {\n --spinner-size: 2rem;\n\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: var(--spinner-size);\n height: var(--spinner-size);\n\n > div {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-repeat: no-repeat;\n background-size: 100%;\n\n animation-name: spin;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n &.with-background {\n &::before {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.125rem;\n bottom: -0.125rem;\n right: -0.125rem;\n border-radius: 50%;\n }\n\n &.bg-dark::before {\n background: rgba(0, 0, 0, 0.25);\n }\n\n &.bg-light::before {\n background: rgba(255, 255, 255, 0.4);\n }\n }\n\n &.white {\n > div {\n background-image: var(--spinner-white-data);\n }\n\n &.with-background {\n > div {\n background-image: var(--spinner-white-thin-data);\n }\n }\n }\n\n &.blue {\n > div {\n background-image: var(--spinner-blue-data);\n\n .theme-dark & {\n background-image: var(--spinner-dark-blue-data);\n }\n }\n }\n\n &.black {\n > div {\n background-image: var(--spinner-black-data);\n }\n }\n\n &.green {\n > div {\n background-image: var(--spinner-green-data);\n }\n }\n\n &.gray {\n > div {\n background-image: var(--spinner-gray-data);\n }\n }\n\n &.yellow {\n > div {\n background-image: var(--spinner-yellow-data);\n }\n }\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n","@-webkit-keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n@keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n.ripple-container {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n\n body.animation-level-0 & {\n display: none;\n }\n\n span {\n position: absolute;\n display: block;\n background-color: var(--ripple-color, rgba(0, 0, 0, .08));\n border-radius: 50%;\n transform: scale(0);\n animation: ripple-animation 700ms;\n }\n}\n","@mixin active-styles() {\n &:not(.disabled):not(:disabled) {\n &:active, &.active, &:focus {\n @content;\n }\n @media (hover:hover) {\n &:hover {\n @content;\n }\n }\n }\n}\n\n@mixin no-ripple-styles() {\n body.animation-level-0 & {\n &:not(.disabled):not(:disabled) {\n &:active {\n @content;\n }\n }\n }\n}\n\n.Button {\n outline: none !important;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 3.5rem;\n border: 0;\n border-radius: var(--border-radius-default);\n background-color: transparent;\n background-size: cover;\n padding: 0.625rem;\n color: white;\n line-height: 1.2;\n cursor: pointer;\n text-transform: uppercase;\n flex-shrink: 0;\n position: relative;\n overflow: hidden;\n transition: background-color .15s, color .15s;\n text-decoration: none !important;\n\n // @optimization\n &:active, &.clicked, body.animation-level-0 & {\n transition: none !important;\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default;\n pointer-events: none;\n }\n\n &.round {\n width: 3.5rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n &.primary {\n background-color: var(--color-primary);\n color: var(--color-white);\n --ripple-color: rgba(0, 0, 0, .08);\n\n @include active-styles() {\n background-color: var(--color-primary-shade);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade-darker);\n }\n }\n\n &.secondary {\n background-color: var(--color-background);\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n --ripple-color: rgba(0, 0, 0, .08);\n\n @include active-styles() {\n background-color: var(--color-primary);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade);\n }\n }\n\n &.gray {\n background-color: var(--color-background);\n color: var(--color-text-secondary);\n --ripple-color: rgba(0, 0, 0, .08);\n\n @include active-styles() {\n color: var(--color-primary);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-chat-hover);\n }\n }\n\n &.danger {\n background-color: var(--color-background);\n color: var(--color-error);\n --ripple-color: rgba(var(--color-error-rgb), .16);\n\n @include active-styles() {\n background-color: var(--color-error);\n color: var(--color-white);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-error-shade);\n }\n }\n\n &.text {\n background-color: transparent;\n\n &.primary {\n color: var(--color-primary);\n background-color: transparent;\n\n @include active-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), .08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), .16);\n }\n }\n\n &.secondary {\n background-color: transparent;\n color: var(--color-text-secondary);\n }\n\n &.danger {\n @include active-styles() {\n background-color: rgba(var(--color-error-rgb), .08);\n color: var(--color-error);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-error-rgb), .16);\n }\n }\n }\n\n &.faded {\n opacity: 0.8;\n\n @include active-styles() {\n opacity: 1;\n }\n\n &.activated {\n opacity: 1;\n }\n }\n\n &.translucent {\n background-color: transparent;\n color: var(--color-text-secondary);\n\n --ripple-color: var(--color-interactive-element-hover);\n\n @include active-styles() {\n background-color: var(--color-interactive-element-hover);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-text-secondary-rgb), 0.16);\n }\n\n &.activated {\n color: var(--color-primary);\n }\n }\n\n &.translucent-white {\n background-color: transparent;\n color: rgba(255, 255, 255, 0.5);\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(255, 255, 255, 0.08);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(255, 255, 255, 0.16);\n }\n }\n\n &.translucent-black {\n background-color: transparent;\n color: rgba(0, 0, 0, 0.8);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.16);\n }\n }\n\n &.dark {\n background-color: rgba(0, 0, 0, 0.75);\n color: white;\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.85);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.95);\n }\n }\n\n &.smaller {\n height: 2.75rem;\n padding: 0.3125rem;\n\n &.round {\n width: 2.75rem;\n }\n\n &.pill {\n height: 2.5rem;\n border-radius: 1.25rem;\n padding: 0.3125rem 1rem;\n }\n\n &.with-icon {\n padding-left: 0.75rem;\n padding-right: 1.25rem;\n\n i {\n font-size: 1.5rem;\n margin-right: 0.5rem;\n }\n\n &[dir=rtl] {\n padding-left: 1.25rem;\n padding-right: 0.75rem;\n\n i {\n margin-left: 0.5rem;\n margin-right: 0;\n }\n }\n }\n\n @media (max-width: 600px) {\n height: 2.5rem;\n\n &.round {\n width: 2.5rem;\n }\n }\n }\n\n &.tiny {\n height: 2.25rem;\n padding: .4375rem;\n border-radius: var(--border-radius-default-small);\n font-size: .875rem;\n font-weight: 500;\n\n &.round {\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 50%;\n }\n\n i {\n font-size: 1.25rem;\n }\n\n &.pill {\n height: 2rem;\n border-radius: 1rem;\n padding: 0.3125rem 1rem;\n font-size: 1rem;\n }\n }\n\n &.fluid {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n width: auto;\n\n &.tiny {\n padding-left: 1.375rem;\n padding-right: 1.375rem;\n }\n }\n\n &.pill {\n border-radius: 1.75rem;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n text-transform: none;\n }\n\n &.loading {\n position: relative;\n pointer-events: none;\n\n .Spinner {\n position: absolute;\n right: 0.875rem;\n top: 0.875rem;\n\n --spinner-size: 1.8rem;\n }\n }\n\n .emoji {\n vertical-align: -3px;\n }\n}\n",".Checkbox {\n display: block;\n position: relative;\n padding-left: 4.5rem;\n text-align: left;\n margin-bottom: 1.5rem;\n line-height: 1.5rem;\n cursor: pointer;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.round {\n .Checkbox-main {\n &::before {\n border-radius: 50%;\n }\n\n &::after {\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: var(--color-primary) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiLz48L3N2Zz4=) no-repeat 50% 50%;\n background-size: 12px;\n border-radius: 50%;\n }\n }\n }\n\n &.loading {\n .Checkbox-main::before,\n .Checkbox-main::after {\n opacity: 0 !important;\n }\n\n .Spinner {\n position: absolute;\n left: 0.375rem;\n top: 0.125rem;\n opacity: 0;\n animation: fade-in .2s ease forwards;\n --spinner-size: 1.25rem;\n }\n }\n\n &.blocking {\n input:not(:checked) ~ .Checkbox-main {\n &::before {\n border-color: var(--color-error);\n }\n\n &::after {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMjQgMCAyNCAyNCAwIDI0Ii8+CiAgICA8cGF0aCBmaWxsPSIjZTUzOTM1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOCwzIEMxOS42NTY4NTQyLDMgMjEsNC4zNDMxNDU3NSAyMSw2IEwyMSwxOCBDMjEsMTkuNjU2ODU0MiAxOS42NTY4NTQyLDIxIDE4LDIxIEw2LDIxIEM0LjM0MzE0NTc1LDIxIDMsMTkuNjU2ODU0MiAzLDE4IEwzLDYgQzMsNC4zNDMxNDU3NSA0LjM0MzE0NTc1LDMgNiwzIEwxOCwzIFogTTE2LDExIEw4LDExIEM3LjQ0NzcxNTI1LDExIDcsMTEuNDQ3NzE1MyA3LDEyIEM3LDEyLjU1MjI4NDcgNy40NDc3MTUyNSwxMyA4LDEzIEwxNiwxMyBDMTYuNTUyMjg0NywxMyAxNywxMi41NTIyODQ3IDE3LDEyIEMxNywxMS40NDc3MTUzIDE2LjU1MjI4NDcsMTEgMTYsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==);\n opacity: 1;\n\n // Compensate for svg having incorrect size\n background-size: 1.375rem;\n background-position: -0.125rem -0.125rem;\n }\n }\n }\n\n input {\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .Checkbox-main {\n &::before, &::after {\n content: '';\n display: block;\n position: absolute;\n left: 1.1875rem;\n top: 0.1875rem;\n width: 1.125rem;\n height: 1.125rem;\n }\n\n &::before {\n border: 2px solid var(--color-borders-input);\n border-radius: .25rem;\n background-color: var(--color-background);\n transition: border-color .1s ease, background-color .1s ease;\n }\n\n &::after {\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: center no-repeat url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==);\n background-size: .875rem;\n opacity: 0;\n transition: opacity .1s ease;\n }\n\n .label {\n display: block;\n text-align: initial;\n }\n\n .subLabel {\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n input:checked ~ .Checkbox-main {\n &::before {\n border-color: var(--color-primary);\n background-color: var(--color-primary);\n }\n\n &::after {\n opacity: 1;\n }\n }\n\n &[dir=rtl] {\n padding-left: 0;\n padding-right: 4.5rem;\n\n &.loading {\n .Spinner {\n left: auto;\n right: 0.375rem;\n }\n }\n\n .label,\n .subLabel {\n text-align: right;\n }\n\n .Checkbox-main {\n &::before, &::after {\n left: auto;\n right: 1.1875rem;\n }\n }\n }\n}\n",".Loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n\n &.interactive {\n cursor: pointer;\n }\n\n .Spinner {\n --spinner-size: 2.75rem;\n }\n}\n",".Menu {\n &.fluid .bubble {\n min-width: 13.5rem;\n width: auto;\n }\n\n .backdrop {\n position: fixed;\n left: -100vw;\n right: -100vw;\n top: -100vh;\n bottom: -100vh;\n z-index: var(--z-menu-backdrop);\n }\n\n .bubble {\n overflow: hidden;\n display: block;\n list-style: none;\n padding: 0.5rem 0;\n margin: 0;\n position: absolute;\n background-color: var(--color-background);\n box-shadow: 0 .25rem .5rem .125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n min-width: 13.5rem;\n z-index: var(--z-menu-bubble);\n overscroll-behavior: contain;\n\n transform: scale(0.5);\n transition: opacity .2s cubic-bezier(0.2, 0, 0.2, 1), transform .2s cubic-bezier(0.2, 0, 0.2, 1) !important;\n\n &.open {\n transform: scale(1);\n }\n\n &.closing {\n transition: opacity .2s ease-in, transform .2s ease-in !important;\n }\n\n body.animation-level-0 & {\n transform: none !important;\n transition: opacity .15s !important;\n }\n\n body.has-open-dialog & {\n transition: none !important;\n }\n\n --offset-y: calc(100% + 0.5rem);\n --offset-x: 0;\n\n &.top {\n top: var(--offset-y);\n }\n\n &.bottom {\n bottom: var(--offset-y);\n }\n\n &.left {\n left: var(--offset-x);\n }\n\n &.right {\n right: var(--offset-x);\n }\n\n &.with-footer {\n padding-bottom: 0;\n }\n }\n\n .footer {\n padding: 0.5rem 0;\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n font-size: 0.8125rem;\n text-align: center;\n }\n}\n",".DropdownMenu {\n position: relative;\n}\n",".MenuItem {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n padding: 0.75rem 1rem;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, .08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n @media (hover: hover) {\n &:hover, &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n color: inherit;\n }\n }\n\n @media (max-width: 600px) {\n &:focus, &:hover, &:active {\n text-decoration: none;\n color: inherit;\n }\n\n &:active {\n background-color: var(--color-chat-hover);\n }\n }\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n\n .menu-item-name {\n margin-right: 2rem;\n\n &.capitalize {\n text-transform: capitalize;\n }\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n }\n\n &.destructive {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n\n &:not(.has-ripple):not(.disabled):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n & > .Switcher {\n margin-left: auto;\n }\n\n &[dir=rtl] {\n i {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n .menu-item-name {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n > .Switcher {\n margin-left: 0;\n margin-right: auto;\n }\n }\n}\n",".CountryCodeInput {\n\n .input-group {\n cursor: pointer;\n\n z-index: var(--z-country-code-input-group);\n\n .Spinner {\n position: absolute;\n top: 1rem;\n right: 0.75rem;\n opacity: 0.5;\n --spinner-size: 1.5rem;\n }\n\n // Prevent loading additional 10 kB of icomoon font on initial load.\n .css-icon-down {\n position: absolute;\n top: 1.125rem;\n right: 1rem;\n width: .75rem;\n height: .75rem;\n border: 2px solid var(--color-text-secondary);\n border-top: 0;\n border-left: 0;\n transform: scaleY(1) rotate(45deg);\n transition: color .2s ease, transform .2s ease, top .2s ease;\n\n &.open {\n border-color: var(--color-primary);\n transform: scaleY(-1) rotate(45deg);\n top: 1.5rem;\n }\n }\n }\n\n .bubble {\n width: 100%;\n max-height: 23.5rem;\n overflow-y: auto;\n transform-origin: top center !important;\n transform: scale(0.95);\n\n &.open {\n transform: scaleY(1);\n }\n }\n\n .MenuItem {\n button {\n display: flex;\n align-items: center;\n }\n\n &.no-results button {\n justify-content: center;\n padding: .5rem 1rem;\n\n span {\n font-size: 0.875rem;\n }\n }\n }\n\n .country-flag {\n font-size: 2rem;\n margin-right: 2rem;\n\n .emoji {\n width: 2rem;\n height: 2rem;\n display: inline-block;\n vertical-align: 4px;\n margin: -.5rem .125rem;\n }\n }\n\n .country-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 1rem;\n text-align: left;\n }\n\n .country-code {\n margin-left: auto;\n opacity: 0.5;\n }\n}\n",".auth-form {\n width: 100%;\n max-width: 25.5rem;\n margin: 0 auto;\n padding: 6rem 1rem 1rem;\n text-align: center;\n\n @media (min-width: 600px) and (min-height: 450px) {\n padding: 6.8rem 1.5rem 1.5rem;\n\n &.qr {\n padding-top: 4rem;\n }\n }\n\n #logo, .AvatarEditable label {\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n }\n\n #logo {\n background: url('../../assets/telegram-logo.svg') center no-repeat;\n background-size: 100%;\n }\n\n h2 {\n font-size: 1.25rem;\n line-height: 1;\n\n @media (min-width: 600px) {\n font-size: 2rem;\n line-height: 1.5;\n }\n }\n\n .note {\n font-size: 0.875rem;\n line-height: 1.35;\n margin-bottom: 2.5rem;\n color: var(--color-text-secondary);\n\n @media (min-width: 600px) {\n font-size: 1rem;\n margin-bottom: 3rem;\n }\n }\n}\n\n#auth-registration-form,\n#auth-phone-number-form,\n#auth-code-form,\n#auth-password-form,\n#auth-qr-form {\n height: 100%;\n overflow-y: auto;\n}\n\n#auth-phone-number-form {\n form {\n min-height: 26.25rem;\n }\n\n .Button {\n margin-top: 2.75rem;\n }\n\n .Button + .Button {\n margin-top: 1rem;\n }\n}\n\n#auth-code-form,\n#auth-password-form {\n h2 {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n\n.auth-number-edit {\n width: 2.5rem;\n height: 2.5rem;\n padding: 0.5rem;\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n opacity: 0.75;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n &:hover, &:focus {\n opacity: 1;\n }\n}\n\n#auth-qr-form {\n .qr-container, .qr-loading {\n height: 280px;\n }\n\n .qr-container {\n opacity: 1;\n transform: scale(1);\n transition: transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 300ms;\n\n &.pre-animate {\n opacity: 0.5;\n transform: scale(0.8);\n }\n\n canvas {\n padding: .625rem;\n border-radius: var(--border-radius-default);\n background: var(--color-white);\n margin-top: -.625rem;\n }\n }\n\n h3 {\n margin: 1.5rem 0 1rem 0;\n }\n\n ol {\n list-style: none;\n counter-reset: item;\n padding: 0 1.75rem;\n\n li {\n counter-increment: item;\n text-align: left;\n margin: 0.75rem 0;\n display: flex;\n\n &::before {\n content: counter(item);\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 1.4rem;\n height: 1.4rem;\n padding: 0;\n margin: 0 0.75rem 0 0;\n background: var(--color-primary);\n border-radius: 50%;\n font-size: smaller;\n color: white;\n }\n }\n }\n}\n\n#sign-in-password {\n word-break: normal !important;\n}\n","#AppInactive {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .content {\n max-width: 28rem;\n margin: auto;\n padding: 1.5rem;\n text-align: center;\n }\n\n .title {\n margin-top: 1rem;\n }\n\n .description {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n img {\n width: 100%;\n max-width: 20rem;\n }\n\n .Button {\n margin-top: 1rem;\n }\n}\n","/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */\n@font-face {\n font-family: Vazir;\n src: url('Vazir-Regular-WOL.woff2') format('woff2'),\n url('Vazir-Regular-WOL.woff') format('woff');\n font-weight: normal;\n font-display:swap;\n unicode-range:U+0627-06FF;\n}\n\n/* Persian, v30.1.0, https://github.com/rastikerdar/vazir-font */\n@font-face {\n font-family: Vazir;\n src: url('Vazir-Medium-WOL.woff2') format('woff2'),\n url('Vazir-Medium-WOL.woff') format('woff');\n font-weight: 500;\n font-display:swap;\n unicode-range: U+0600-06FF;\n}\n","@import 'reboot';\n@import 'variables';\n@import 'mixins';\n@import 'spacing';\n@import 'forms';\n@import 'icons';\n@import 'common';\n@import '../assets/fonts/roboto.css';\n\nhtml, body {\n width: 100%;\n height: 100%;\n background: var(--color-background);\n margin: 0;\n padding: 0;\n font-size: 16px;\n font-family: \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n color: var(--color-text);\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n overflow: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\nbody.is-ios,\nbody.is-macos {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif;\n}\n\nhtml[lang=fa],\nhtml[lang=fa] body {\n font-family: \"Vazir\", \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n\n &.is-ios,\n &.is-macos {\n font-family: \"Vazir\", -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n }\n}\n\nbody.is-ios {\n --border-radius-messages: 1rem;\n --border-radius-messages-small: 0.5rem;\n}\n\nbody.cursor-grabbing, body.cursor-grabbing * {\n cursor: grabbing !important;\n}\n\nbody.cursor-ew-resize {\n cursor: ew-resize !important;\n}\n\n#root {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\n#middle-column-portals,\n#portals {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.hidden {\n visibility: hidden;\n}\n\n.no-selection {\n user-select: none;\n -webkit-user-select: none !important;\n}\n\n.resize-handle {\n display: none;\n position: absolute;\n top: 0;\n right: -.25rem;\n bottom: 0;\n width: .25rem;\n z-index: var(--z-resize-handle);\n cursor: ew-resize;\n\n @media (min-width: 926px) {\n display: block;\n }\n}\n\n/*\n See the article for more information on this visually-hidden pattern.\n https://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n*/\n.visually-hidden {\n position: absolute !important;\n width: 0;\n height: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n z-index: -1;\n}\n\n.not-implemented {\n opacity: 0.5;\n\n &, & * {\n cursor: not-allowed !important;\n }\n}\n\n* {\n box-sizing: border-box;\n}\n\n.no-animations #root *,\n.no-animations #root *::before,\n.no-animations #root *::after {\n transition: none !important;\n}\n\n.custom-scroll,\n.custom-scroll-x {\n scrollbar-width: thin;\n scrollbar-color: rgba(90, 90, 90, 0) transparent;\n transition: scrollbar-color .3s ease;\n\n -webkit-overflow-scrolling: touch;\n // Fix scroll lock on iOS\n pointer-events: auto;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0);\n border-radius: 0.375rem;\n // `box-shadow` prevents repaint on macOS when hovering out of scrollable container\n box-shadow: 0 0 1px rgba(255, 255, 255, .01);\n }\n\n &:hover, &:focus, &:focus-within {\n scrollbar-color: rgba(90, 90, 90, 0.3) transparent;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0.3);\n }\n }\n}\n\nbody:not(.is-ios) {\n .custom-scroll {\n &::-webkit-scrollbar {\n width: .375rem;\n }\n }\n\n .custom-scroll-x {\n &::-webkit-scrollbar {\n height: .35rem;\n }\n }\n}\n\n.no-scrollbar {\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.emoji-small {\n background: no-repeat;\n background-size: 1.25rem;\n color: transparent;\n display: inline-block;\n width: 1.25rem;\n height: 1.25rem;\n margin-inline-end: 1px;\n overflow: hidden;\n flex-shrink: 0;\n\n &::selection {\n background-color: var(--color-selection-highlight-emoji);\n color: transparent;\n }\n}\n\ndiv[role=\"button\"] {\n outline: none !important;\n cursor: pointer;\n}\n\n.opacity-transition {\n opacity: 1;\n transition: opacity .15s ease;\n\n &:not(.open) {\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n\n &.slow {\n transition-duration: .3s;\n }\n}\n\n.color-primary {\n color: var(--color-primary) !important;\n}\n\n.color-danger {\n color: var(--color-error) !important;\n}\n\n.text-muted {\n color: var(--color-text-secondary) !important;\n}\n\n.protector {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 2;\n}\n\n.for-ios-autocapitalization-fix {\n position: fixed;\n font-size: 16px;\n opacity: 0;\n bottom: 1rem;\n z-index: -1;\n}\n\n@keyframes grow-icon {\n 0% {\n transform: scale(0.5);\n opacity: .8;\n }\n 50% {\n transform: scale(1.1);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes hide-icon {\n from {\n transform: scale(1);\n opacity: .4;\n }\n to {\n transform: scale(.5);\n opacity: 0;\n }\n}\n","*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\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\n@-ms-viewport {\n width: device-width;\n}\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\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: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: 500;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: var(--color-links);\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font: .9375rem/1.25 'Courier', 'Courier New', 'Nimbus Mono L', 'Courier 10 Pitch', 'FreeMono', sans-serif-monospace, monospace;\n font-size-adjust: .43;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: .5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\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}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n","@use \"sass:color\";\n\n@function toRGB($color) {\n @return red($color) + \", \" + green($color) + \", \" + blue($color);\n}\n\n@function blend-normal ($foreground, $background) {\n $opacity: opacity($foreground);\n $background-opacity: opacity($background);\n\n // calculate opacity\n $bm-red: color.red($foreground) * $opacity + color.red($background) * $background-opacity * (1 - $opacity);\n $bm-green: color.green($foreground) * $opacity + color.green($background) * $background-opacity * (1 - $opacity);\n $bm-blue: color.blue($foreground) * $opacity + color.blue($background) * $background-opacity * (1 - $opacity);\n @return rgb($bm-red, $bm-green, $bm-blue);\n}\n\n$color-primary: #3390EC;\n\n$color-links: #3390EC;\n\n$color-placeholders: #A2ACB4;\n\n$color-text-green: #4FAE4E;\n$color-green: #00C73E;\n$color-light-green: #EEFFDE;\n\n$color-error: #e53935;\n\n$color-warning: #fb8c00;\n\n$color-yellow: #FDD764;\n\n$color-white: #ffffff;\n$color-black: #000000;\n$color-dark-gray: #2e3939;\n$color-gray: #c4c9cc;\n$color-text-secondary: #707579;\n$color-text-secondary-apple: #8A8A90;\n$color-text-meta: #686c72;\n$color-text-meta-apple: #8C8C91;\n$color-borders: #DADCE0;\n$color-dividers: #C8C6CC;\n$color-item-active: #ededed;\n$color-chat-hover: #f4f4f5;\n$color-chat-active: #3390EC;\n$color-selection: #3993fb;\n\n// https://github.com/telegramdesktop/tdesktop/wiki/Theme-Reference#user-content-standard-color-constants\n// Colors borrowed from https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/Resources/day-blue.tdesktop-theme\n// historyPeer[1-8]UserpicBg\n$color-user-1: #E17076;\n$color-user-2: #7BC862;\n//$color-user-3: #E5CA77;\n$color-user-4: #65aadd;\n$color-user-5: #a695e7;\n$color-user-6: #ee7aae;\n$color-user-7: #6ec9cb;\n$color-user-8: #faa774;\n\n$color-message-reaction: #ebf3fd;\n$color-message-reaction-hover: #c5def9;\n$color-message-reaction-own: #cef0ba;\n$color-message-reaction-own-hover: #b5e0a4;\n\n:root {\n --color-background: #{$color-white};\n --color-background-selected: #f4f4f5;\n --color-background-secondary: #f4f4f5;\n --color-background-secondary-accent: #E4E4E5;\n --color-background-own: #{$color-light-green};\n --color-background-own-selected: color.adjust($color-light-green, -10%);\n --color-text: #{$color-black};\n --color-text-lighter: #{$color-dark-gray};\n --color-text-secondary: #{$color-text-secondary};\n --color-text-secondary-rgb: #{toRGB($color-text-secondary)};\n --color-text-secondary-apple: #{$color-text-secondary-apple};\n --color-text-meta: #{$color-text-meta};\n --color-text-meta-rgb: #{toRGB($color-text-meta)};\n --color-text-meta-colored: #{$color-text-green};\n --color-text-meta-apple: #{$color-text-meta-apple};\n --color-text-green: #{$color-text-green};\n --color-text-green-rgb: #{toRGB($color-text-green)};\n --color-borders: #{$color-borders};\n --color-borders-input: #{$color-borders};\n --color-dividers: #{$color-dividers};\n --color-webpage-initial-background: #{$color-dark-gray};\n --color-interactive-active: var(--color-primary);\n --color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);\n --color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25); // Overlays underlying inactive element\n --color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);\n --color-composer-button: #{$color-text-secondary}CC;\n\n --color-primary: #{$color-primary};\n --color-primary-shade: #{color.mix($color-primary, $color-black, 92%)};\n --color-primary-shade-darker: #{color.mix($color-primary, $color-black, 84%)};\n --color-primary-shade-rgb: #{toRGB(color.mix($color-primary, $color-black, 92%))};\n --color-primary-opacity: rgba(var(--color-primary), 0.50);\n --color-green: #{$color-green};\n --color-green-darker: #{color.mix($color-green, $color-black, 84%)};\n\n --color-error: #{$color-error};\n --color-error-shade: #{color.mix($color-error, $color-black, 92%)};\n --color-error-rgb: #{toRGB($color-error)};\n\n --color-warning: #{$color-warning};\n\n --color-yellow: #{$color-yellow};\n\n --color-links: #{$color-links};\n\n --color-own-links: #{$color-white};\n\n --color-placeholders: #{$color-placeholders};\n\n --color-pinned: #{$color-white};\n\n --color-code: #4a729a;\n --color-code-bg: #{rgba($color-text-secondary, .08)};\n --color-code-own: #3c7940;\n --color-code-own-bg: #{rgba($color-text-secondary, .08)};\n\n --color-accent-own: #{$color-text-green};\n --color-message-meta-own: #{$color-text-green};\n\n --color-message-reaction: $color-message-reaction;\n --color-message-reaction-hover: $color-message-reaction-hover;\n --color-message-reaction-own: $color-message-reaction-own;\n --color-message-reaction-hover-own: $color-message-reaction-own-hover;\n\n --color-reply-hover: #{blend-normal(rgba($color-text-secondary, 0.08), $color-white)};\n --color-reply-active: #{blend-normal(rgba($color-text-secondary, 0.16), $color-white)};\n --color-reply-own-hover: #{blend-normal(rgba($color-text-green, 0.12), $color-light-green)};\n --color-reply-own-active: #{blend-normal(rgba($color-text-green, 0.24), $color-light-green)};\n\n --color-background-own-apple: #DCF8C5;\n --color-reply-own-hover-apple: #cbefb7;\n --color-reply-own-active-apple: #bae6a8;\n\n --color-white: #{$color-white};\n --color-gray: #{$color-gray};\n\n --color-chat-hover: #{$color-chat-hover};\n --color-chat-active: #{$color-chat-active};\n --color-item-active: #{$color-item-active};\n\n --color-selection-highlight: #{$color-selection};\n --color-selection-highlight-emoji: rgba(#{toRGB($color-selection)}, .7);\n\n --color-user-1: #{$color-user-1};\n --color-user-2: #{$color-user-2};\n --color-user-4: #{$color-user-4};\n --color-user-5: #{$color-user-5};\n --color-user-6: #{$color-user-6};\n --color-user-7: #{$color-user-7};\n --color-user-8: #{$color-user-8};\n\n --color-default-shadow: #72727240;\n --color-light-shadow: #7272722B;\n\n --vh: 1vh;\n\n --border-radius-default: 0.75rem;\n --border-radius-default-small: 0.625rem;\n --border-radius-default-tiny: 0.375rem;\n --border-radius-messages: 0.75rem;\n --border-radius-messages-small: 0.375rem;\n --messages-container-width: 45.5rem;\n --right-column-width: 26.5rem;\n --header-height: 3.5rem;\n\n --symbol-menu-width: 26.25rem;\n --symbol-menu-height: 23.25rem;\n --symbol-menu-footer-height: 3rem;\n\n @media (min-width: 1276px) and (max-width: 1920px) {\n --right-column-width: 25vw;\n }\n\n @media (min-width: 1921px) {\n --messages-container-width: 50vw;\n }\n\n @media (max-width: 600px) {\n --right-column-width: 100vw;\n --symbol-menu-width: 100vw;\n --symbol-menu-height: 14.6875rem;\n }\n\n --z-ui-loader-mask: 2000;\n --z-notification: 1000;\n --z-right-column: 900;\n --z-header-menu: 990;\n --z-header-menu-backdrop: 980;\n --z-modal: 1000;\n --z-media-viewer: 1500;\n --z-drop-area: 55;\n --z-animation-fade: 50;\n --z-menu-bubble: 21;\n --z-menu-backdrop: 20;\n --z-message-highlighted: 14;\n --z-message-context-menu: 13;\n --z-scroll-down-button: 12;\n --z-mobile-search: 12;\n --z-middle-header: 11;\n --z-middle-footer: 11;\n --z-country-code-input-group: 10;\n --z-message-select-control: 9;\n --z-message-select-area: 8;\n --z-sticky-date: 9;\n --z-register-add-avatar: 5;\n --z-media-viewer-head: 3;\n --z-resize-handle: 2;\n --z-below: -1;\n\n --spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);\n --spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);\n --spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);\n --spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);\n --spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);\n --spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);\n --spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);\n --spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);\n\n --drag-target-border: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%23DDDFE0' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n --drag-target-border-hovered: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%2363A2E3' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n\n --layer-blackout-opacity: 0.3;\n\n --layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);\n --select-transition: 200ms ease-out;\n\n body.is-ios {\n --layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n\n body.is-android {\n --layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n --slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n}\n","@use \"sass:map\";\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map.merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 2),\n 6: ($spacer * 3),\n ),\n $spacers\n);\n\n// Margin and Padding\n\n@each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n}\n",".input-group {\n position: relative;\n margin-bottom: 1.5rem;\n\n label {\n display: block;\n padding: 0 0.25rem;\n position: absolute;\n left: 0.75rem;\n top: 0.95rem;\n background-color: var(--color-background);\n font-size: 1rem;\n font-weight: 400;\n color: var(--color-placeholders);\n transition: transform 0.15s ease-out, color .15s ease-out;\n cursor: text;\n pointer-events: none;\n transform-origin: left center;\n white-space: nowrap;\n }\n\n &.with-arrow {\n &::after {\n content: '';\n position: absolute;\n height: .75rem;\n width: .75rem;\n border-left: 1px var(--color-text-secondary) solid;\n border-bottom: 1px var(--color-text-secondary) solid;\n transform: rotate(-45deg);\n right: 2rem;\n top: 1rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(.75) translate(-0.5rem, -2.25rem);\n }\n\n input::placeholder,\n .form-control::placeholder {\n color: var(--color-placeholders);\n }\n\n &.touched label {\n color: var(--color-text-secondary);\n }\n\n &.error label {\n color: var(--color-error) !important;\n }\n\n &.success label {\n color: var(--color-text-green) !important;\n }\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n &[dir=rtl] {\n input {\n text-align: right;\n }\n\n label {\n left: auto;\n right: 0.75rem;\n }\n\n &.with-arrow {\n &::after {\n border-left: none;\n border-right: 1px var(--color-text-secondary) solid;\n right: auto;\n left: 2rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(.75) translate(1.5rem, -2.25rem);\n }\n }\n}\n\n.form-control {\n --border-width: 1px;\n display: block;\n width: 100%;\n height: 3.375rem;\n padding: calc(0.75rem - var(--border-width)) calc(.9rem - var(--border-width));\n border: var(--border-width) solid var(--color-borders-input);\n border-radius: var(--border-radius-default);\n color: var(--color-text);\n background-color: var(--color-background);\n outline: none;\n transition: border-color 0.15s ease;\n word-break: break-word;\n -webkit-appearance: none;\n\n font-size: 1rem;\n line-height: 1.25rem;\n\n &[dir] {\n text-align: initial;\n }\n\n &:hover {\n border-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:focus,\n &.focus {\n border-color: var(--color-primary);\n box-shadow: inset 0 0 0 1px var(--color-primary);\n caret-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:disabled {\n background: none !important;\n }\n\n .error & {\n border-color: var(--color-error);\n box-shadow: inset 0 0 0 1px var(--color-error);\n caret-color: var(--color-error);\n }\n\n .success & {\n border-color: var(--color-text-green);\n box-shadow: inset 0 0 0 1px var(--color-text-green);\n caret-color: var(--color-text-green);\n }\n}\n\nselect.form-control {\n option {\n line-height: 2rem;\n }\n}\n\ntextarea.form-control {\n resize: none;\n overflow: hidden;\n line-height: 1.3125rem;\n padding-top: calc(1rem - var(--border-width));\n padding-bottom: calc(1rem - var(--border-width));\n}\n\n.input-group.password-input {\n position: relative;\n\n .form-control {\n padding-right: 3.375rem;\n }\n\n .toggle-password {\n position: absolute;\n top: 0;\n right: 0;\n width: 3.375rem;\n height: 3.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none !important;\n\n color: var(--color-text-secondary);\n opacity: 0.7;\n font-size: 1.5rem;\n\n &:hover, &:focus {\n opacity: 1;\n }\n }\n\n &[dir=rtl] {\n .form-control {\n padding-left: 3.375rem;\n padding-right: calc(.9rem - var(--border-width))\n }\n\n .toggle-password {\n left: 0;\n right: auto;\n }\n }\n}\n","@font-face {\n font-family: 'icomoon';\n src: url('../assets/fonts/icomoon.woff2?n9djnk') format('woff2'),\n url('../assets/fonts/icomoon.woff?n9djnk') format('woff');\n font-weight: normal;\n font-style: normal;\n font-display: block;\n}\n\n[class^=\"icon-\"], [class*=\" icon-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */\n font-family: 'icomoon' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n[class^=\"icon-char-\"], [class*=\" icon-char-\"] {\n &::before {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n content: attr(data-char);\n width: 1.5rem;\n text-align: center;\n display: block;\n }\n}\n\n.icon-loop:before {\n content: \"\\e98c\";\n}\n.icon-skip-next:before {\n content: \"\\e98d\";\n}\n.icon-skip-previous:before {\n content: \"\\e98e\";\n}\n.icon-volume-1:before {\n content: \"\\e98f\";\n}\n.icon-volume-2:before {\n content: \"\\e990\";\n}\n.icon-volume-3:before {\n content: \"\\e991\";\n}\n.icon-reaction-filled:before {\n content: \"\\e994\";\n}\n.icon-reactions:before {\n content: \"\\e993\";\n}\n.icon-sidebar:before {\n content: \"\\e992\";\n}\n.icon-video-stop:before {\n content: \"\\e98b\";\n}\n.icon-speaker:before {\n content: \"\\e981\";\n}\n.icon-speaker-outline:before {\n content: \"\\e982\";\n}\n.icon-phone-discard-outline:before {\n content: \"\\e983\";\n}\n.icon-allow-speak:before {\n content: \"\\e984\";\n}\n.icon-stop-raising-hand:before {\n content: \"\\e985\";\n}\n.icon-share-screen:before {\n content: \"\\e986\";\n}\n.icon-voice-chat:before {\n content: \"\\e987\";\n}\n.icon-video:before {\n content: \"\\e988\";\n}\n.icon-noise-suppression:before {\n content: \"\\e989\";\n}\n.icon-phone-discard:before {\n content: \"\\e98a\";\n}\n.icon-bot-commands-filled:before {\n content: \"\\e97f\";\n}\n.icon-reply-filled:before {\n content: \"\\e980\";\n}\n.icon-bug:before {\n content: \"\\e97e\";\n}\n.icon-data:before {\n content: \"\\e97d\";\n}\n.icon-darkmode:before {\n content: \"\\e979\";\n}\n.icon-animations:before {\n content: \"\\e97a\";\n}\n.icon-enter:before {\n content: \"\\e97b\";\n}\n.icon-fontsize:before {\n content: \"\\e97c\";\n}\n.icon-permissions:before {\n content: \"\\e976\";\n}\n.icon-card:before {\n content: \"\\e977\";\n}\n.icon-truck:before {\n content: \"\\e978\";\n}\n.icon-share-filled:before {\n content: \"\\e95a\";\n}\n.icon-bold:before {\n content: \"\\e961\";\n}\n.icon-bot-command:before {\n content: \"\\e962\";\n}\n.icon-calendar-filter:before {\n content: \"\\e963\";\n}\n.icon-comments:before {\n content: \"\\e964\";\n}\n.icon-comments-sticker:before {\n content: \"\\e965\";\n}\n.icon-arrow-down:before {\n content: \"\\e966\";\n}\n.icon-email:before {\n content: \"\\e967\";\n}\n.icon-italic:before {\n content: \"\\e968\";\n}\n.icon-link:before {\n content: \"\\e969\";\n}\n.icon-mention:before {\n content: \"\\e96a\";\n}\n.icon-monospace:before {\n content: \"\\e96b\";\n}\n.icon-next:before {\n content: \"\\e96c\";\n}\n.icon-password-off:before {\n content: \"\\e96d\";\n}\n.icon-pin-list:before {\n content: \"\\e96e\";\n}\n.icon-previous:before {\n content: \"\\e96f\";\n}\n.icon-replace:before {\n content: \"\\e970\";\n}\n.icon-schedule:before {\n content: \"\\e971\";\n}\n.icon-strikethrough:before {\n content: \"\\e972\";\n}\n.icon-underlined:before {\n content: \"\\e973\";\n}\n.icon-zoom-in:before {\n content: \"\\e974\";\n}\n.icon-zoom-out:before {\n content: \"\\e975\";\n}\n.icon-select:before {\n content: \"\\e960\";\n}\n.icon-folder:before {\n content: \"\\e913\";\n}\n.icon-bots:before {\n content: \"\\e915\";\n}\n.icon-calendar:before {\n content: \"\\e916\";\n}\n.icon-cloud-download:before {\n content: \"\\e917\";\n}\n.icon-colorize:before {\n content: \"\\e918\";\n}\n.icon-forward:before {\n content: \"\\e927\";\n}\n.icon-reply:before {\n content: \"\\e947\";\n}\n.icon-help:before {\n content: \"\\e92a\";\n}\n.icon-info:before {\n content: \"\\e92b\";\n}\n.icon-info-filled:before {\n content: \"\\e91b\";\n}\n.icon-delete-filled:before {\n content: \"\\e91c\";\n}\n.icon-delete:before {\n content: \"\\e91d\";\n}\n.icon-edit:before {\n content: \"\\e923\";\n}\n.icon-new-chat-filled:before {\n content: \"\\e939\";\n}\n.icon-send:before {\n content: \"\\e94a\";\n}\n.icon-send-outline:before {\n content: \"\\e94b\";\n}\n.icon-add-user-filled:before {\n content: \"\\e904\";\n}\n.icon-add-user:before {\n content: \"\\e905\";\n}\n.icon-delete-user:before {\n content: \"\\e91e\";\n}\n.icon-microphone:before {\n content: \"\\e935\";\n}\n.icon-microphone-alt:before {\n content: \"\\e93b\";\n}\n.icon-poll:before {\n content: \"\\e938\";\n}\n.icon-revote:before {\n content: \"\\e93a\";\n}\n.icon-photo:before {\n content: \"\\e940\";\n}\n.icon-document:before {\n content: \"\\e91f\";\n}\n.icon-camera:before {\n content: \"\\e90e\";\n}\n.icon-camera-add:before {\n content: \"\\e90f\";\n}\n.icon-logout:before {\n content: \"\\e932\";\n}\n.icon-saved-messages:before {\n content: \"\\e948\";\n}\n.icon-settings:before {\n content: \"\\e94e\";\n}\n.icon-phone:before {\n content: \"\\e93f\";\n}\n.icon-attach:before {\n content: \"\\e909\";\n}\n.icon-copy:before {\n content: \"\\e91a\";\n}\n.icon-channel:before {\n content: \"\\e911\";\n}\n.icon-group:before {\n content: \"\\e929\";\n}\n.icon-user:before {\n content: \"\\e959\";\n}\n.icon-non-contacts:before {\n content: \"\\e928\";\n}\n.icon-active-sessions:before {\n content: \"\\e902\";\n}\n.icon-admin:before {\n content: \"\\e906\";\n}\n.icon-download:before {\n content: \"\\e921\";\n}\n.icon-location:before {\n content: \"\\e930\";\n}\n.icon-stop:before {\n content: \"\\e952\";\n}\n.icon-archive:before {\n content: \"\\e908\";\n}\n.icon-unarchive:before {\n content: \"\\e953\";\n}\n.icon-readchats:before {\n content: \"\\e933\";\n}\n.icon-unread:before {\n content: \"\\e957\";\n}\n.icon-message:before {\n content: \"\\e934\";\n}\n.icon-lock:before {\n content: \"\\e931\";\n}\n.icon-unlock:before {\n content: \"\\e954\";\n}\n.icon-mute:before {\n content: \"\\e937\";\n}\n.icon-unmute:before {\n content: \"\\e955\";\n}\n.icon-pin:before {\n content: \"\\e941\";\n}\n.icon-unpin:before {\n content: \"\\e956\";\n}\n.icon-smallscreen:before {\n content: \"\\e95e\";\n}\n.icon-fullscreen:before {\n content: \"\\e95f\";\n}\n.icon-large-pause:before {\n content: \"\\e92e\";\n}\n.icon-large-play:before {\n content: \"\\e92f\";\n}\n.icon-pause:before {\n content: \"\\e93d\";\n}\n.icon-play:before {\n content: \"\\e943\";\n}\n.icon-channelviews:before {\n content: \"\\e912\";\n}\n.icon-message-succeeded:before {\n content: \"\\e900\";\n}\n.icon-message-read:before {\n content: \"\\e901\";\n}\n.icon-message-pending:before {\n content: \"\\e94c\";\n}\n.icon-message-failed:before {\n content: \"\\e94d\";\n}\n.icon-favorite:before {\n content: \"\\e93e\";\n}\n.icon-keyboard:before {\n content: \"\\e944\";\n}\n.icon-delete-left:before {\n content: \"\\e945\";\n}\n.icon-recent:before {\n content: \"\\e946\";\n}\n.icon-gifs:before {\n content: \"\\e94f\";\n}\n.icon-stickers:before {\n content: \"\\e95b\";\n}\n.icon-smile:before {\n content: \"\\e950\";\n}\n.icon-animals:before {\n content: \"\\e907\";\n}\n.icon-eats:before {\n content: \"\\e922\";\n}\n.icon-sport:before {\n content: \"\\e951\";\n}\n.icon-car:before {\n content: \"\\e910\";\n}\n.icon-lamp:before {\n content: \"\\e92c\";\n}\n.icon-language:before {\n content: \"\\e92d\";\n}\n.icon-flag:before {\n content: \"\\e926\";\n}\n.icon-more:before {\n content: \"\\e936\";\n}\n.icon-search:before {\n content: \"\\e949\";\n}\n.icon-remove:before {\n content: \"\\e95c\";\n}\n.icon-add:before {\n content: \"\\e903\";\n}\n.icon-check:before {\n content: \"\\e914\";\n}\n.icon-close:before {\n content: \"\\e919\";\n}\n.icon-arrow-left:before {\n content: \"\\e90d\";\n}\n.icon-arrow-right:before {\n content: \"\\e93c\";\n}\n.icon-down:before {\n content: \"\\e920\";\n}\n.icon-up:before {\n content: \"\\e958\";\n}\n.icon-eye-closed:before {\n content: \"\\e925\";\n}\n.icon-eye:before {\n content: \"\\e924\";\n}\n.icon-muted:before {\n content: \"\\e95d\";\n}\n.icon-avatar-archived-chats:before {\n content: \"\\e90a\";\n}\n.icon-avatar-deleted-account:before {\n content: \"\\e90b\";\n}\n.icon-avatar-saved-messages:before {\n content: \"\\e90c\";\n}\n.icon-pinned-chat:before {\n content: \"\\e942\";\n}\n","@import './mixins';\n\n// Common styles for all media-type components across the app.\n.media-inner {\n position: relative;\n\n video, img {\n display: block;\n object-fit: cover;\n }\n\n video {\n background: no-repeat 50% 50%;\n background-size: contain;\n }\n\n .thumbnail ~ .thumbnail, .thumbnail ~ .full-media, .media-loading {\n position: absolute;\n }\n}\n\n.animated-close-icon {\n position: absolute;\n transform: rotate(-45deg);\n\n &, &::before, &::after {\n width: 1.125rem;\n height: 0.125rem;\n border-radius: 0.125rem;\n background-color: var(--color-text-secondary);\n transition: transform var(--slide-transition);\n }\n\n &::before, &::after {\n position: absolute;\n left: 0;\n top: 0;\n content: '';\n }\n\n &::before {\n transform: rotate(90deg);\n }\n\n &.no-transition {\n &, &::before, &::after {\n transition: none;\n }\n }\n\n &.state-back {\n transform: rotate(180deg);\n\n &::before {\n transform: rotate(45deg) scaleX(0.75) translate(0, -0.375rem);\n }\n\n &::after {\n transform: rotate(-45deg) scaleX(0.75) translate(0, 0.375rem);\n }\n }\n}\n\n// Used by ChatList and ContactList components\n.chat-list {\n background: var(--color-background);\n height: 100%;\n padding: .5rem .125rem .5rem .4375rem;\n\n overflow-y: auto;\n body.is-android & {\n @include overflow-y-overlay();\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n }\n\n @media (max-width: 600px) {\n padding-left: 0;\n padding-right: 0;\n }\n\n .no-results {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n\n// Used by Avatar and ProfilePhoto components\ndiv {\n &.color-bg-1 {\n --color-user: var(--color-user-1);\n }\n\n &.color-bg-2 {\n --color-user: var(--color-user-2);\n }\n\n &.color-bg-4 {\n --color-user: var(--color-user-4);\n }\n\n &.color-bg-5 {\n --color-user: var(--color-user-5);\n }\n\n &.color-bg-6 {\n --color-user: var(--color-user-6);\n }\n\n &.color-bg-7 {\n --color-user: var(--color-user-7);\n }\n\n &.color-bg-8 {\n --color-user: var(--color-user-8);\n }\n\n &.replies-bot-account,\n &.saved-messages {\n --color-user: var(--color-primary);\n }\n\n &.deleted-account {\n --color-user: var(--color-gray);\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/report.html b/dist/report.html index 4b6fa1096..bea5505b7 100644 --- a/dist/report.html +++ b/dist/report.html @@ -3,7 +3,7 @@ - telegram-t [14 Feb 2022 at 00:54] + telegram-t [20 Feb 2022 at 13:49]