Merge pull request #4900 from element-hq/feature/bma/a11yTimeline

[a11y] Improve accessibility of message composer
This commit is contained in:
Benoit Marty 2025-06-20 16:39:24 +02:00 committed by GitHub
commit 9d6e089499
88 changed files with 226 additions and 249 deletions

View file

@ -24,7 +24,12 @@ open class AttachmentsPreviewStateProvider : PreviewParameterProvider<Attachment
override val values: Sequence<AttachmentsPreviewState> override val values: Sequence<AttachmentsPreviewState>
get() = sequenceOf( get() = sequenceOf(
anAttachmentsPreviewState(), anAttachmentsPreviewState(),
anAttachmentsPreviewState(sendActionState = SendActionState.Sending.Processing(displayProgress = false)), anAttachmentsPreviewState(
sendActionState = SendActionState.Sending.Processing(displayProgress = false),
textEditorState = aTextEditorStateMarkdown(
initialText = "This is a caption!"
)
),
anAttachmentsPreviewState(sendActionState = SendActionState.Sending.Processing(displayProgress = true)), anAttachmentsPreviewState(sendActionState = SendActionState.Sending.Processing(displayProgress = true)),
anAttachmentsPreviewState(sendActionState = SendActionState.Sending.ReadyToUpload(aMediaUploadInfo())), anAttachmentsPreviewState(sendActionState = SendActionState.Sending.ReadyToUpload(aMediaUploadInfo())),
anAttachmentsPreviewState(sendActionState = SendActionState.Sending.Uploading(0.5f, aMediaUploadInfo())), anAttachmentsPreviewState(sendActionState = SendActionState.Sending.Uploading(0.5f, aMediaUploadInfo())),
@ -55,15 +60,15 @@ fun aMediaUploadInfo(
filePath: String = "file://path", filePath: String = "file://path",
thumbnailFilePath: String? = null, thumbnailFilePath: String? = null,
) = MediaUploadInfo.Image( ) = MediaUploadInfo.Image(
file = File(filePath), file = File(filePath),
imageInfo = ImageInfo( imageInfo = ImageInfo(
height = 100, height = 100,
width = 100, width = 100,
mimetype = MimeTypes.Jpeg, mimetype = MimeTypes.Jpeg,
size = 1000, size = 1000,
thumbnailInfo = null, thumbnailInfo = null,
thumbnailSource = null, thumbnailSource = null,
blurhash = null, blurhash = null,
), ),
thumbnailFile = thumbnailFilePath?.let { File(it) }, thumbnailFile = thumbnailFilePath?.let { File(it) },
) )

View file

@ -31,6 +31,7 @@ object ElementRichTextEditorStyle {
} else { } else {
ElementTheme.colors.textSecondary ElementTheme.colors.textSecondary
}, },
placeholderColor = ElementTheme.colors.textSecondary,
lineHeight = TextUnit.Unspecified, lineHeight = TextUnit.Unspecified,
includeFontPadding = true, includeFontPadding = true,
) )

View file

@ -39,7 +39,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -81,7 +80,6 @@ import io.element.android.libraries.textcomposer.model.aTextEditorStateRich
import io.element.android.libraries.textcomposer.model.showCaptionCompatibilityWarning import io.element.android.libraries.textcomposer.model.showCaptionCompatibilityWarning
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.wysiwyg.compose.RichTextEditor import io.element.android.wysiwyg.compose.RichTextEditor
import io.element.android.wysiwyg.compose.RichTextEditorState
import io.element.android.wysiwyg.display.TextDisplay import io.element.android.wysiwyg.display.TextDisplay
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
@ -174,18 +172,29 @@ fun TextComposer(
is TextEditorState.Rich -> { is TextEditorState.Rich -> {
remember(state.richTextEditorState, subcomposing, composerMode, onResetComposerMode, onError) { remember(state.richTextEditorState, subcomposing, composerMode, onResetComposerMode, onError) {
@Composable { @Composable {
TextInput( TextInputBox(
state = state.richTextEditorState,
subcomposing = subcomposing,
placeholder = placeholder,
composerMode = composerMode, composerMode = composerMode,
onResetComposerMode = onResetComposerMode, onResetComposerMode = onResetComposerMode,
resolveMentionDisplay = resolveMentionDisplay, isTextEmpty = state.richTextEditorState.messageHtml.isEmpty(),
resolveRoomMentionDisplay = resolveAtRoomMentionDisplay, subcomposing = subcomposing,
onError = onError, ) {
onTyping = onTyping, RichTextEditor(
onSelectRichContent = onSelectRichContent, state = state.richTextEditorState,
) placeholder = placeholder,
// Disable most of the editor functionality if it's just being measured for a subcomposition.
// This prevents it gaining focus and mutating the state.
registerStateUpdates = !subcomposing,
modifier = Modifier
.padding(top = 6.dp, bottom = 6.dp)
.fillMaxWidth(),
style = ElementRichTextEditorStyle.composerStyle(hasFocus = state.richTextEditorState.hasFocus),
resolveMentionDisplay = resolveMentionDisplay,
resolveRoomMentionDisplay = resolveAtRoomMentionDisplay,
onError = onError,
onRichContentSelected = onSelectRichContent,
onTyping = onTyping,
)
}
} }
} }
} }
@ -195,12 +204,13 @@ fun TextComposer(
TextInputBox( TextInputBox(
composerMode = composerMode, composerMode = composerMode,
onResetComposerMode = onResetComposerMode, onResetComposerMode = onResetComposerMode,
placeholder = placeholder, isTextEmpty = state.state.text.value().isEmpty(),
showPlaceholder = state.state.text.value().isEmpty(),
subcomposing = subcomposing, subcomposing = subcomposing,
) { ) {
MarkdownTextInput( MarkdownTextInput(
state = state.state, state = state.state,
placeholder = placeholder,
placeholderColor = ElementTheme.colors.textSecondary,
subcomposing = subcomposing, subcomposing = subcomposing,
onTyping = onTyping, onTyping = onTyping,
onReceiveSuggestion = onReceiveSuggestion, onReceiveSuggestion = onReceiveSuggestion,
@ -437,7 +447,9 @@ private fun TextFormattingLayout(
) { ) {
val bottomPadding = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() + 8.dp } val bottomPadding = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() + 8.dp }
Column( Column(
modifier = modifier.padding(vertical = 4.dp).padding(bottom = bottomPadding), modifier = modifier
.padding(vertical = 4.dp)
.padding(bottom = bottomPadding),
verticalArrangement = Arrangement.spacedBy(4.dp), verticalArrangement = Arrangement.spacedBy(4.dp),
) { ) {
if (isRoomEncrypted == false) { if (isRoomEncrypted == false) {
@ -480,8 +492,7 @@ private fun TextFormattingLayout(
private fun TextInputBox( private fun TextInputBox(
composerMode: MessageComposerMode, composerMode: MessageComposerMode,
onResetComposerMode: () -> Unit, onResetComposerMode: () -> Unit,
placeholder: String, isTextEmpty: Boolean,
showPlaceholder: Boolean,
subcomposing: Boolean, subcomposing: Boolean,
textInput: @Composable () -> Unit, textInput: @Composable () -> Unit,
) { ) {
@ -503,7 +514,6 @@ private fun TextInputBox(
onResetComposerMode = onResetComposerMode, onResetComposerMode = onResetComposerMode,
) )
} }
val defaultTypography = ElementTheme.typography.fontBodyLgRegular
Box( Box(
modifier = Modifier modifier = Modifier
.padding(top = 4.dp, bottom = 4.dp, start = 12.dp, end = 12.dp) .padding(top = 4.dp, bottom = 4.dp, start = 12.dp, end = 12.dp)
@ -511,21 +521,8 @@ private fun TextInputBox(
.then(if (!subcomposing) Modifier.testTag(TestTags.textEditor) else Modifier), .then(if (!subcomposing) Modifier.testTag(TestTags.textEditor) else Modifier),
contentAlignment = Alignment.CenterStart, contentAlignment = Alignment.CenterStart,
) { ) {
// Placeholder
if (showPlaceholder) {
Text(
text = placeholder,
style = defaultTypography.copy(
color = ElementTheme.colors.textSecondary,
),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
textInput() textInput()
if (isTextEmpty && composerMode.showCaptionCompatibilityWarning()) {
if (showPlaceholder && composerMode.showCaptionCompatibilityWarning()) {
var showBottomSheet by remember { mutableStateOf(false) } var showBottomSheet by remember { mutableStateOf(false) }
Icon( Icon(
modifier = Modifier modifier = Modifier
@ -546,44 +543,6 @@ private fun TextInputBox(
} }
} }
@Composable
private fun TextInput(
state: RichTextEditorState,
subcomposing: Boolean,
placeholder: String,
composerMode: MessageComposerMode,
onResetComposerMode: () -> Unit,
resolveRoomMentionDisplay: () -> TextDisplay,
resolveMentionDisplay: (text: String, url: String) -> TextDisplay,
onError: (Throwable) -> Unit,
onTyping: (Boolean) -> Unit,
onSelectRichContent: ((Uri) -> Unit)?,
) {
TextInputBox(
composerMode = composerMode,
onResetComposerMode = onResetComposerMode,
placeholder = placeholder,
showPlaceholder = state.messageHtml.isEmpty(),
subcomposing = subcomposing,
) {
RichTextEditor(
state = state,
// Disable most of the editor functionality if it's just being measured for a subcomposition.
// This prevents it gaining focus and mutating the state.
registerStateUpdates = !subcomposing,
modifier = Modifier
.padding(top = 6.dp, bottom = 6.dp)
.fillMaxWidth(),
style = ElementRichTextEditorStyle.composerStyle(hasFocus = state.hasFocus),
resolveMentionDisplay = resolveMentionDisplay,
resolveRoomMentionDisplay = resolveRoomMentionDisplay,
onError = onError,
onRichContentSelected = onSelectRichContent,
onTyping = onTyping,
)
}
}
private fun aTextEditorStateMarkdownList(isRoomEncrypted: Boolean? = null) = persistentListOf( private fun aTextEditorStateMarkdownList(isRoomEncrypted: Boolean? = null) = persistentListOf(
aTextEditorStateMarkdown(initialText = "", initialFocus = true, isRoomEncrypted = isRoomEncrypted), aTextEditorStateMarkdown(initialText = "", initialFocus = true, isRoomEncrypted = isRoomEncrypted),
aTextEditorStateMarkdown(initialText = "A message", initialFocus = true, isRoomEncrypted = isRoomEncrypted), aTextEditorStateMarkdown(initialText = "A message", initialFocus = true, isRoomEncrypted = isRoomEncrypted),

View file

@ -8,6 +8,7 @@
package io.element.android.libraries.textcomposer.components.markdown package io.element.android.libraries.textcomposer.components.markdown
import android.content.ClipData import android.content.ClipData
import android.content.res.ColorStateList
import android.graphics.Color import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.text.Editable import android.text.Editable
@ -18,6 +19,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.text.getSpans import androidx.core.text.getSpans
@ -26,6 +28,7 @@ import androidx.core.view.OnReceiveContentListener
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.setPadding import androidx.core.view.setPadding
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
@ -43,6 +46,8 @@ import io.element.android.wysiwyg.compose.internal.applyStyleInCompose
@Composable @Composable
fun MarkdownTextInput( fun MarkdownTextInput(
state: MarkdownTextEditorState, state: MarkdownTextEditorState,
placeholder: String,
placeholderColor: androidx.compose.ui.graphics.Color,
subcomposing: Boolean, subcomposing: Boolean,
onTyping: (Boolean) -> Unit, onTyping: (Boolean) -> Unit,
onReceiveSuggestion: (Suggestion?) -> Unit, onReceiveSuggestion: (Suggestion?) -> Unit,
@ -87,6 +92,8 @@ fun MarkdownTextInput(
setBackgroundColor(Color.TRANSPARENT) setBackgroundColor(Color.TRANSPARENT)
val text = state.text.value() val text = state.text.value()
setText(text) setText(text)
setHint(placeholder)
setHintTextColor(ColorStateList.valueOf(placeholderColor.toArgb()))
inputType = InputType.TYPE_CLASS_TEXT or inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_TEXT_FLAG_MULTI_LINE or
@ -189,6 +196,8 @@ internal fun MarkdownTextInputPreview() {
val style = ElementRichTextEditorStyle.composerStyle(hasFocus = true) val style = ElementRichTextEditorStyle.composerStyle(hasFocus = true)
MarkdownTextInput( MarkdownTextInput(
state = aMarkdownTextEditorState(initialText = "Hello, World!"), state = aMarkdownTextEditorState(initialText = "Hello, World!"),
placeholder = "Placeholder",
placeholderColor = ElementTheme.colors.textSecondary,
subcomposing = false, subcomposing = false,
onTyping = {}, onTyping = {},
onReceiveSuggestion = {}, onReceiveSuggestion = {},

View file

@ -14,6 +14,7 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.core.text.getSpans import androidx.core.text.getSpans
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkData
import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser
@ -175,6 +176,8 @@ class MarkdownTextInputTest {
val style = ElementRichTextEditorStyle.composerStyle(hasFocus = state.hasFocus) val style = ElementRichTextEditorStyle.composerStyle(hasFocus = state.hasFocus)
MarkdownTextInput( MarkdownTextInput(
state = state, state = state,
placeholder = "Placeholder",
placeholderColor = ElementTheme.colors.textSecondary,
subcomposing = subcomposing, subcomposing = subcomposing,
onTyping = onTyping, onTyping = onTyping,
onReceiveSuggestion = onSuggestionReceived, onReceiveSuggestion = onSuggestionReceived,

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:75b41d34ae5ecebdeaed2f4cd236c402757535a19befaf39918bbfc70bb467c7 oid sha256:cb50ba951a464a7bae750e779f25e2deeda0355a3220fdaf19f60c7c7ed73649
size 395098 size 395064

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:75b41d34ae5ecebdeaed2f4cd236c402757535a19befaf39918bbfc70bb467c7 oid sha256:503e64a8acb9630e3a6cece0028283407bd54fda2f8ca7bd41c09d12491b48d1
size 395098 size 394757

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:cb44dad546b898087ef5d98a69a235a04a84330aab05cdd400b5773885feb592 oid sha256:0ce509e6357edda6b8206eea46a7818386423c96abaddae8ae8e886244a93784
size 51252 size 51168

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:75b41d34ae5ecebdeaed2f4cd236c402757535a19befaf39918bbfc70bb467c7 oid sha256:cb50ba951a464a7bae750e779f25e2deeda0355a3220fdaf19f60c7c7ed73649
size 395098 size 395064

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6a571a03f04d9243c1f05b4867f1d117f9e155307fe1520f5f99ea0ca93552d2 oid sha256:089a84e094a191836ae654f3214b1b3a590a1b13e0d1972c8ef2ac82813b47eb
size 51223 size 51139

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:9fcc0bc6b9062dcc25b03470cecfaeeb464a9f9e0335bc1cab2c122400b8efd0 oid sha256:21a0d4fabf74730d3aff1ec23502c18d84cb53899d8cacfefede48ae8fde19e1
size 89353 size 89266

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:75b41d34ae5ecebdeaed2f4cd236c402757535a19befaf39918bbfc70bb467c7 oid sha256:cb50ba951a464a7bae750e779f25e2deeda0355a3220fdaf19f60c7c7ed73649
size 395098 size 395064

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f1e9382ed4ffc09e206928c33c667cb150dffc830f6215e06c9dd5ea520de4a8 oid sha256:19066a9752af1dbd27a3403dbc0a85d3b7dfa6b794cfcc314934a91c3e680283
size 54986 size 54925

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:955c4cce20c5e9f3457923ff76f22488445a891f145f0161cd0ec94c3da2bc55 oid sha256:9af45d39c400733792e3053e38612205a8c61ef044101d6beca4710b29e12e7b
size 63485 size 63435

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d1cdf81418927c64c9cb3bc97828f251da3116f09841ec0bfa2164e321058d67 oid sha256:70e6b6c940f935d585e210ffa10fa2926f074e4d1ee255e8607345379d2a52f0
size 55435 size 55326

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d568e0e6f80c6161ca33f51106268f5ef95e33bd21923c3dd734f8f67dd51609 oid sha256:4511572afb1134a5af14cd5cc0bfc248602761b1b32e35608de7dcba97830ae1
size 67392 size 67284

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:eb3362efdf5441cf73ac08196b95bdd5b4426e11188f6cb86c32169be049ed46 oid sha256:1b2acbefb2319d650215b5933d8ef2a4f407b83e5b7f26379aebbc617fa7bdc8
size 19547 size 19418

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ea025d360bedff971ae77ee3c9e47140dac75d2f8b64ea2d244304c35c8cea5c oid sha256:bdaae3b3badf316b130b67fbf0a2876e6620da4e4f22277625bba3590ed2d7dc
size 18078 size 17911

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:70ab6c6c738a96fd2db7901482cf4110dfcc69a6289e1db734a753751690747a oid sha256:f65fa2e0b1172f43b9475b8f46c3efc1086b5cf659038190bd8495b98bc21c82
size 51622 size 51551

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:237ee8f45cfd01821287669abc4fe7125c0d2828ff60224706eef855910821f0 oid sha256:dc219f3f79e2f7e061b541398971c36732346b2770fbeea95a4ecca266eb6ac0
size 51048 size 50925

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7a23ecbbee117033cefa5ddfbdf68862bc6f44bf03b9cbb2d468ffe4236f9109 oid sha256:4f9279dc01e9fdec69ee0819e2b4b7e0f00dec7e1b62c353052530b6bb66d4f0
size 52673 size 52621

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:3c019dc162f360869595392df03359b6333f96e98150ad3f3f65d464ba5317f7 oid sha256:0c3d263dfa02c775db1f370ac6ada2d3b31f3ce252f605e05f7121367b609bc0
size 50971 size 50915

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:93cbe1f644c5f13d7e77f917859333b761640355e6bd8087fc4a9308fb4afc01 oid sha256:72c662eb1b7c5d85c65d1f7cc25bf484964f0ce31f414406fe8fbf90f2e9173f
size 53776 size 53784

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:58b867446d31a57350e72768449d8072d70f94203b2ec110950b302c8f1792ba oid sha256:d6bef68b39ff88a4020f30c0ef8313eccbe2d360723894414cdabd9b89ee9c84
size 51764 size 51768

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2262ca89505ab3d8c896ef818830c2220aef2d0903e51ca3bab36ff63b1a6cfd oid sha256:a28794895dd4d6a6389aa2c23e756861e6f07ff13b60c67f273fdf027dd8eb09
size 47488 size 47515

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:cf2354049558d02a1072285d58598353a65974f91702fb7f4b516d7977b03c5b oid sha256:3d4214277841ebc15eda9dae5367cec2d1127eadecc7b2fa97ad9d845888cd2d
size 46035 size 46042

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:8d5feff7d5b06463196a09bf065a62c9e578c15fe9bafdc6e4508fcf93bfcdba oid sha256:5fca1c7a63f89d4ae3c63b473a7352f83abda12bde4ef7698fb4d80218ba0cc8
size 52415 size 52411

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:440568a0cc345291ff16d49890bd9665af96651702f417ec016f89f6c0475dc4 oid sha256:5bf7e9b141aef2236b935503a409eae7dc06f824d09a83fb97370450920f6d54
size 50833 size 50841

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:9e1589df371db7e489c4d8696898c44a919df001f4a30d83d2f32b92dbece2de oid sha256:2f1643e255457fcf5511d807235137a5afcf457740a02ad9632e26b06b224f89
size 63546 size 63488

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:3bf77d27c4fb0f491a40c3ca532e424bbb791660d168f951d8210cc6cb2898ba oid sha256:a01bfddaadf8d165d638980d05ebf02076c9ddeb0160e7dff40171fc433d3c05
size 61205 size 61161

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7a23ecbbee117033cefa5ddfbdf68862bc6f44bf03b9cbb2d468ffe4236f9109 oid sha256:4f9279dc01e9fdec69ee0819e2b4b7e0f00dec7e1b62c353052530b6bb66d4f0
size 52673 size 52621

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:3c019dc162f360869595392df03359b6333f96e98150ad3f3f65d464ba5317f7 oid sha256:0c3d263dfa02c775db1f370ac6ada2d3b31f3ce252f605e05f7121367b609bc0
size 50971 size 50915

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:17f126215961643b6b7c3b41fcc5ea970923229b76bb7c918db191cb5c0ef8b9 oid sha256:40ce5b17c4b499d9e671b7022ee6445abaddf4e14eed547f8c2b0e4d018d75c5
size 64672 size 64598

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f72fdf44bd35b6d62b5e75ec1bf2206429e0861da684d370259bea684eb2a76e oid sha256:cf923847e52fc8db3a7a27c5b85e27c4db8bcce9005b8009684e9f3b8b8b8c4b
size 62158 size 62040

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d5226d7599af16015858523607a829d9cbbc0ffa21174f9c528e725673e2e31c oid sha256:30e40a4f602f99ca9ba95842b1aa8955450072d8bb317aea2eb61c704be0d8e3
size 53982 size 53900

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:31b2d698e78fa11dc6af9dbc20b07533afd16c26b8f9969756057f07ea4785d0 oid sha256:ac727cdf60b1a31c386d223df6f9142990468fdb6e387668eb740335c2caf937
size 51371 size 51263

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d12f482740fbab1a9fb12bd5cdc37dc2bd03fac6d1304208b353d86bc4f558c6 oid sha256:bfcb5206ea0fc6b89d6ac460d0d78bd8b70cc3e960d4ab0397bd6470e7dd23b8
size 73436 size 73608

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:380a1544c59d1f8cf5f73f84341686b042bab24d7d092f43f30fd36cbb85b438 oid sha256:cdf8092eb79caa45a8f911589af848756218fc7ca8e3c32c11b7b650a4b9564a
size 59956 size 60143

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7127c9b52895079a8837bacc7371b31b1b1fd99415157f3246ee56a4272bf39e oid sha256:4dd4dbbaef196264c23e4188b34c617d2e72bacaa9f206a18fe2a73ba17adf63
size 72830 size 73006

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7856d79bdf5166b6b1676d6cd418a33e0b21713b8d40d02b0187363951d373c3 oid sha256:7c8920e6be0d01f0038d315a6421fe051b9f205477bb313e8ae8afada023fea1
size 80957 size 81122

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:b7407ef412758b7e19e0acb3fd539d15578b4bf94c776e7e6eec7d15e1ad0a40 oid sha256:e3e2cfa763cf8f73872d108e3c749ced3dc730b9ba2902b1050d2fdddb036c56
size 62484 size 62658

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:adf521b7a9e451146e13fcfd41ad3d072cfa4cdb01023cf252e39c147d9507b9 oid sha256:e8b3b3fbdc951585ace8942e9307581cb7793ffaa4c8fe56a52b6063bd5db271
size 61354 size 61540

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:dfacf0126a768870f293f6f327c4d5a1379bd51e1d62da6b8953e6f76952c11d oid sha256:68bdae9e2b82ba19d7d7de98fc682ffe7eb96777ba86b7fa99f2acc0eb33f7a5
size 67852 size 68023

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:bd3639f1d57e2a9e313a6626625c600557cc90e90326310441366e0177f17ada oid sha256:d799e7c48c310dd2a9e42bf8765016da88ee69f51555992d2f80f467e8f07be0
size 90429 size 90598

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:b0538f1d4753e95082434db510f8d9b90c8c05be9975729000a6ec122b1b83d1 oid sha256:ed11b4abb6a6a1a790248026fd9b322d1d00f3988957a9a549573d859dd6fa92
size 60841 size 61017

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:30532cf8f90261dff21a23f425a2c15334713d4659be97052fe6c796651ba8e2 oid sha256:851fe33ec8cac57d5ade446cec96dc5ec5790c8ce28d8bb47b111b46b9e30abd
size 61988 size 62175

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:add696fa3700b07bda65546a714887a96406cdc0c883b39e8b9b3eb419d60ef5 oid sha256:1838d95b241ebe2b83e732569efe344f1bde77b2cff068d0bb40412306c1f2c3
size 68667 size 68840

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d60de55c65d7225f077c084c0d345f17a4a1b9d8d8598824e7721b3ae3c53bb4 oid sha256:4ab214a116f303ef96e58d29edb757ccd4a36100d701c230a5f60d5850ebf0ce
size 60385 size 60562

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:0b18891980733fe58d000fcfc7b34f5fa0c355a7b7dc016157f02f633a0d2593 oid sha256:b38a8b5fd2c82843b4da6d0c4c11400f569d8e38a8c4dcde03056c5e81a53c0f
size 71248 size 71405

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:771606c34e4910bb123651706304db185fd2affe48c50e780147b9ecc86e6676 oid sha256:996e5014e75e88bded0ef2742733b60f55b003486e3b2a418298e39dfc595add
size 58149 size 58295

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:faa783569b0b56bc6e0853860d6a3aca19bc42d6d8cab8733f365a0c4d7ec076 oid sha256:eab616b950daa6169f06930d411e1ed75ef1cc2f425d692abb8fb479c658d9bc
size 70683 size 70819

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:e689ed91b269984c11e5d3ff9dd8fafb3e9786585eaedb2b9bd3c0c367a8255e oid sha256:61b85adda6a18eebcccd149318e6c0da23c791cf4df8405f41e31891bfa9febc
size 78512 size 78647

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:061c17ac2134b7ae49b80eb408c49a26b8c8f9bc3d40a0094fa466f6484c4525 oid sha256:950da1e8c251d711c7ec460234981ac52f6e6bf7528fc904518b93fb0ce35b09
size 60567 size 60708

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:901c974b774202476d3091ed624df42549f9add3bf7a8b07bcc33fc657412b5b oid sha256:2d4756b79b40777acad34655ab49ff9811f20b5196c6f2cbe31207e876290906
size 59591 size 59737

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:b5fdb0fdf6af3368f21dedbdb9e2f1492e20340de1427cd537a2c38aa21a73e4 oid sha256:9c7e798594d983cc0e544e3eb70ea1654a78a866a7bc64ef620ac6a823b8a691
size 65871 size 66011

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:55f9442c5fba907d6602b4f99700c28e5bb2b0229b599bc0497b9e7fd01f4adc oid sha256:f65f939395ba3c0736d59d9cdfcd55f1a9f7f9c0e1fcec8ff5da441277313a0e
size 87380 size 87547

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:90a6561fa8d3576d93daf1ececda3bd89fd54ede171186059ec4eabd33d09a04 oid sha256:4a4fee3963b352bfc49d8ef7e18c0179f304064758daafc8324cdc650458b522
size 59020 size 59171

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:cd32e719165a0351ad00ff7a39adb121b7ecbaa58232450d9cf41033cc93b389 oid sha256:3b075203bb02a9a68b70e24d4aa3b7975c50bbbc2087026f28910427f431ec62
size 60109 size 60251

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:52d06e1cc43e7e4fab868faceaec8ceab4513e99422954b859c6f38a93475487 oid sha256:3bc27af141adfea18c39b86bcdf046392e765e7411453b6143958d5ede017411
size 66489 size 66622

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:97ba97045331e55b16153ac3d8d37b3ddee0f8395d0b12d270d687e5ccdb662b oid sha256:03291891705787b0211dfd7375d755dc1abc985eb88d48bd978555032bea7a4e
size 58641 size 58782

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a3dc5b4b88b11b4398777f9c19f55c760a6da33755206dc3559e8cfd5cf6bcfc oid sha256:bb24ef3a0c22045fc9e9ec390dd1785779924f5bd2a10f9bbc88d1a70b106191
size 76395 size 76305

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:513851c2cfe1dd1579962b1913ad389e1cffb0570ff3572f981a780acc3da532 oid sha256:1974abd76e0a3f8cdf1beefe26209d2bffb5212520f9a4e2655b80925337d1e7
size 59926 size 59835

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:598fd33fab87e4f7095803f52af75843445863b2092130b0d423abbc8bb77c22 oid sha256:2aaf080dad05b68af3ed2ea9a4d6cd2f2e9bb991da02683a2e195cb01002cb18
size 74571 size 74482

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:314a1640f2835e5fb6adc8f2ae199f4f10ef028b6dede17681760860455b3590 oid sha256:e1185e1fe56eb661dac60465841979a542055436aa5064663641164cef3a6dfd
size 85742 size 85660

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a1273ac2ab60a7427f676bef8eb232b53be46d47e46963c58b1a134bb482cfb6 oid sha256:ec74265bb93b5699a79918986ac601c3c2b2eb04b8aac0c72e50e57432ff9c27
size 63085 size 62992

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a78d1da2ef8b469b90c06bf715b7c04e4477bc809a9fb2c74f916a8184a8d867 oid sha256:54d61d2749c5bf4194658359c580616412da386454cf7d06cd7546b6555f52ad
size 62131 size 62033

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:bae403a239eb103b8c24708ef8fdef3ba92f2c38a80fc16bb1611fb23fc8b2c9 oid sha256:a23bf0e7a2a2874121ba56dd144316df816432f1989fa8b9d05278e067175b75
size 70019 size 69928

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a3b31d74b92b2db69c548a78606b606751644124703f5163482b4fe0e0471b6e oid sha256:2958634d33600d8e1b2b49cd264e0dd3bc54ba4a4fa5d34b2fef5d195a0d30f1
size 104792 size 104699

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6e1a3088c752694f7260f2fd45f1b14d2449c7121609109ce93a1232ba9581a8 oid sha256:0834f567e0de98e55bc7607f5361637c00131c15f249594fd265ca4dafb4966c
size 61145 size 61049

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:39047878c1505a00ca8549ddea2f4373682bf6321eca82d92822d73d689e12c1 oid sha256:bbf214dfd61e9da88625243ebbca73c68718d15dbb96a11ff6765e8135ceac72
size 63211 size 63119

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:00f12f3c347087b24cdc23fc4c82b93d2a2550c4af1026dcddbe7b22a3dcd334 oid sha256:a34b3acb890a44a29b58d27e91851e6329d2ef4cadbef5beebcbd21f0444e93e
size 70522 size 70432

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6e9ed3949968e5c8653fddd929e5ebd4bf07dcd9391fab0fcb30d70146635fe1 oid sha256:fbcdc99699e06603d7e2e285d8eec6103b68dc829f45d29f5c781e932a375552
size 60638 size 60550

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c956c860f9148891b04eba8b30e8aef29b5e430caddc5340cd51af779596e598 oid sha256:fa08671396751f9562ea6ee83bc353276bfe72524809ec44f666804c7c164413
size 73718 size 73614

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7b367679460940c258542d54316006f9391ca23a30145baca4c2191cbca80363 oid sha256:b82f3f8fe10b89962c5d3dedd593eee2f11b2c133e863b2bd1d540f83d07dd4f
size 57953 size 57893

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7503402391f7adaa717eeff9d83f359f37cafed3e8502271aa37350a4039de3c oid sha256:de1b9014a911c3a7154cad9c52f1d2e60d73efad6e626e10623c59652cff763c
size 72010 size 71905

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:0417f5f570680d727df49e22408f296b8cbbf4be9086f6cb9b0f0e89208ef0f3 oid sha256:63a8eb5a1cc04455f270fce24811a389e7d274691e5b20a7df8595549ccbef87
size 83091 size 82985

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:dbe2e2977ae2fd86d154c34cf59ef82b796c4ff75d69455dcae8fdb4041b2f25 oid sha256:d8648126878bcaf3bb0e05a26c052710627e00ece4e2567977b8b52497a940cd
size 61122 size 61057

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c221234495c789453447b12ebfca4b03e3b4cb9c381bb21a6454f54bfe8a81f5 oid sha256:8ff99ca0e81db14b574c734ea5ba5d94c8a059b63b07502aa090113a776f6b22
size 60255 size 60195

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:bd04747ca75e56c63324893810f4194c84c796e9aeda0db193cb9339b331f890 oid sha256:b14c0f2ecd79fbed4a6c3a6b3459fe204cae344f42210987fb52eb9de836df6f
size 68015 size 67953

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7b2b966f1a3b55058d3173df9c80a7492be710f2310fab0d0ae3950e820526a7 oid sha256:841cbfe819f61338f25484e63916e50d07aa258782b50c6108a71fa10a792fea
size 101725 size 101688

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d0f4c13986a2f7932e2647ba26d20658a264e382805ed5aaddea5043aeeb70ec oid sha256:8e009d6cc28b8d98ae9c72e70a81af22d62b4428fae5dd7b10589d7aa46f1bf4
size 59145 size 59075

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c9c80af6d15b052c07453281260e806ad20b72068903123dc596391edd72dd0f oid sha256:74398889e5df4d87fd34196bccd07b0a9d8dd6c545613fb1a7a0c1aee26f37a4
size 61237 size 61167

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:78167ef5ac43202855cc4f683dd0f29930ba818e7f008a3f6561d90965c8ee9c oid sha256:a89fecb881a6ae6ce48e23abe2e3f3ed35e29f7a0b231c0c467b6dff022ad77b
size 68351 size 68284

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2fdde0b6f5c8b4f0b752a983ad746702405fe092d981ace6cb306d5c36b17821 oid sha256:16e4ac5820b57fe720e3c3b1d8383661b9d90ea230be19955f525ac7df346741
size 58751 size 58689

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f97b8a117e03fddd44855bb8bfb696486b601af81edbcc038817946abbb13db1 oid sha256:899158f6f0ece99609f76ed9d3ee23489043b0bfdf4daa0264bef52814b8af15
size 57037 size 56923

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6e8f665716e81675ad17f3a65b409f768879baca5156efa38204b8da74c46786 oid sha256:a8b9c61ee214c3d222eda082120ae681ef5b1e4359c65d34d6d08106403aeef6
size 54592 size 54539

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c72b2267469738863d7570309fc868368e9a897a98f192eb7bf7d561547fb029 oid sha256:d5e4def8107b07a630a8991b20f541768bf8090e0cd964bb3c5b524955f12318
size 46925 size 46869

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:9b4cdcee84b5b48ed4179fb187e34bdcde02c4f8ed5da1b439f343cce8c2a15d oid sha256:11633c6e4562ab6a3144d80ff630574bc800a880a2804edf986c1fc8aeeff6b7
size 44952 size 44873