Rework timestamp positioning (#2075)

* Rework timestamp positioning

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
This commit is contained in:
Jorge Martin Espinosa 2023-12-20 14:37:28 +01:00 committed by GitHub
parent 921e9d2ca4
commit 9ec67e3cbb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
65 changed files with 169 additions and 155 deletions

1
changelog.d/2060.bugfix Normal file
View file

@ -0,0 +1 @@
Timestamp positioning was broken, specially for edited messages.

View file

@ -16,26 +16,30 @@
package io.element.android.features.messages.impl.timeline.components.event
import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextMeasurer
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.rememberTextMeasurer
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.times
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContent
import io.element.android.libraries.core.bool.orFalse
import io.element.android.libraries.designsystem.text.toDp
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings
import kotlin.math.roundToInt
import kotlin.math.ceil
// Allow to not overlap the timestamp with the text, in the message bubble.
// Compute the size of the worst case.
data class ExtraPadding(val nbChars: Int)
data class ExtraPadding(val extraWidth: Dp)
val noExtraPadding = ExtraPadding(0)
val noExtraPadding = ExtraPadding(0.dp)
/**
* See [io.element.android.features.messages.impl.timeline.components.TimelineEventTimestampView] for the related View.
@ -47,37 +51,48 @@ fun TimelineItem.Event.toExtraPadding(): ExtraPadding {
val hasMessageSendingFailed = localSendState is LocalEventSendState.SendingFailed
val isMessageEdited = (content as? TimelineItemTextBasedContent)?.isEdited.orFalse()
var strLen = 6
val textMeasurer = rememberTextMeasurer(cacheSize = 128)
val density = LocalDensity.current
var strLen = 2.dp // Extra space char
if (isMessageEdited) {
strLen += stringResource(id = CommonStrings.common_edited_suffix).length + 3
val editedText = stringResource(id = CommonStrings.common_edited_suffix)
val extraLen = remember(editedText, density) { textMeasurer.getExtraPadding(editedText, density) } + 10.dp // Text + spacing
strLen += extraLen
}
strLen += formattedTime.length
strLen += remember(formattedTime, density) { textMeasurer.getExtraPadding(formattedTime, density) }
if (hasMessageSendingFailed) {
strLen += 5
strLen += 19.dp // Image + spacing
// I do not know why, but adding extra widths avoid overlapping when the
// message is edited and in error.
if (isMessageEdited) {
// I do not know why, but adding 2 more chars avoid overlapping when the
// message is edited and in error.
strLen += 2
strLen += 2.dp
}
}
return ExtraPadding(strLen)
}
private fun TextMeasurer.getExtraPadding(text: String, density: Density): Dp {
val timestampTextStyle = ElementTheme.typography.fontBodyXsRegular
val textWidth = measure(text = text, style = timestampTextStyle).size.width
return (textWidth/density.density).dp
}
/**
* Get a string to add to the content of the message to avoid overlapping the timestamp.
* @param fontSize the font size of the message content, to be able to add more space char if the font is small.
*/
fun ExtraPadding.getStr(fontSize: TextUnit): String {
if (nbChars == 0) return ""
val timestampFontSize = ElementTheme.typography.fontBodyXsRegular.fontSize // 11.sp
val nbOfSpaces = (timestampFontSize.value / fontSize.value * nbChars).roundToInt() + 1
// A space and some unbreakable spaces
return " " + "\u00A0".repeat(nbOfSpaces)
@Composable
fun ExtraPadding.getStr(textStyle: TextStyle = LocalTextStyle.current): String {
if (extraWidth == 0.dp) return ""
val density = LocalDensity.current
val textMeasurer = rememberTextMeasurer(128)
val charWidth = remember(textStyle) { textMeasurer.measure(text = "\u00A0", style = textStyle).size.width }
val widthPx = remember(density, extraWidth) { with(density) { extraWidth.toPx() } }
// A space and some unbreakable spaces, always rounding the result to the next value if not a integer
return " " + "\u00A0".repeat(ceil(widthPx / charWidth).toInt())
}
@Composable
fun ExtraPadding.getDpSize(): Dp {
if (nbChars == 0) return 0.dp
val timestampFontSize = ElementTheme.typography.fontBodyXsRegular.fontSize // 11.sp
return nbChars * timestampFontSize.toDp() / 3
return extraWidth
}

View file

@ -33,14 +33,13 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContentProvider
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.compound.theme.ElementTheme
@Composable
fun TimelineItemAudioView(
@ -76,7 +75,7 @@ fun TimelineItemAudioView(
overflow = TextOverflow.Ellipsis
)
Text(
text = content.fileExtensionAndSize + extraPadding.getStr(12.sp),
text = content.fileExtensionAndSize + extraPadding.getStr(ElementTheme.typography.fontBodySmRegular),
color = ElementTheme.materialColors.secondary,
style = ElementTheme.typography.fontBodySmRegular,
maxLines = 1,

View file

@ -32,15 +32,14 @@ import androidx.compose.ui.draw.rotate
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContentProvider
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.compound.theme.ElementTheme
@Composable
fun TimelineItemFileView(
@ -77,7 +76,7 @@ fun TimelineItemFileView(
overflow = TextOverflow.Ellipsis
)
Text(
text = content.fileExtensionAndSize + extraPadding.getStr(12.sp),
text = content.fileExtensionAndSize + extraPadding.getStr(textStyle = ElementTheme.typography.fontBodySmRegular),
color = ElementTheme.materialColors.secondary,
style = ElementTheme.typography.fontBodySmRegular,
maxLines = 1,

View file

@ -27,7 +27,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.icons.CompoundDrawables
import io.element.android.libraries.designsystem.preview.ElementPreview
@ -58,7 +57,7 @@ fun TimelineItemInformativeView(
fontStyle = FontStyle.Italic,
color = MaterialTheme.colorScheme.secondary,
style = ElementTheme.typography.fontBodyMdRegular,
text = text + extraPadding.getStr(14.sp)
text = text + extraPadding.getStr(textStyle = ElementTheme.typography.fontBodyMdRegular)
)
}
}

View file

@ -25,6 +25,7 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.core.text.buildSpannedString
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContent
@ -45,16 +46,16 @@ fun TimelineItemTextView(
LocalContentColor provides ElementTheme.colors.textPrimary,
LocalTextStyle provides ElementTheme.typography.fontBodyLgRegular
) {
val fontSize = LocalTextStyle.current.fontSize
val formattedBody = content.formattedBody
val body = SpannableString(formattedBody ?: content.body)
val extraPaddingText = extraPadding.getStr()
Box(modifier) {
val textWithPadding = remember(body, fontSize) {
val textWithPadding = remember(body) {
buildSpannedString {
append(body)
append(extraPadding.getStr(fontSize))
append(extraPaddingText)
}
}
EditorStyledText(
@ -73,7 +74,7 @@ internal fun TimelineItemTextViewPreview(
) = ElementPreview {
TimelineItemTextView(
content = content,
extraPadding = ExtraPadding(nbChars = 8),
extraPadding = ExtraPadding(extraWidth = 32.dp),
onLinkClicked = {},
)
}

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:35611d5a52ef7df1100e99be186277cbd9f46c475ad4828debca5426f25fab0d
size 18283
oid sha256:f1f40fec45293d7676e851a2d9ea1b3a1e29770a01aa72c74013a8e36ec8e6f2
size 18213

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1845780049821e0c1e6af9945bde7880a17b755ca7d260b6cb06e3064e43bbfc
size 62716
oid sha256:851fc21681b724affa557d219b8e7be86b6058b788a5f2983f0db96f113f00eb
size 62632

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:13b64883f4caa390dd55158b885cc180d902ccf4956fd6acffd27e7fd61f50f4
oid sha256:bd2f473ac5685ea4dfbb565204e3d3f1b608f0b44a06c382f562b97846b1d75e
size 69546

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f78feb3ba3116ca0eb9ca0b44c16f2ad464b2dcebf8353e69baac40a26bd7744
size 72458
oid sha256:bb97680e0e8a74be5369ce8d443f4dbde8c8db5b3b5c62c8f91795e913f70497
size 72429

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:284fd94cf9755c7e3554edf1df6bca0956317f5e71594ebcbe2bb2c86379a35f
size 63013
oid sha256:4c9cb9e39505d30bd562f26f61f30f68b037b1c3ac542e8499f7f602687d508a
size 62930

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c1e770fc88ba9606a7c6372d641f1835d0431295fb5973a104b0fbb87bbbdbc8
size 69562
oid sha256:bf37662355ec12d52d2a8a88ef58fd9743b7fe278050d6d0a5504983c8844031
size 69625

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3129621b2270b432f47cde1107ce37e611359f5e2363ddbe417687c6a60e4005
size 71423
oid sha256:b5be47550b5fcd0ffe3def6a4448e47c96641224100ed82acb977ee033527714
size 71424

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f91a76355f9619360edc9728c7b7ef3c57ff4ef939c6eaa368cf1cd0ed39d356
size 27365
oid sha256:f7f88ed6f4c84ebe5c9dd6c46474fac299b2b2e8edce0bfebe49064bcaab5fe7
size 27226

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3e4ea5c5d57a4b76e9544025852a94c3c53cb61893c341a5ee0cb3010f71655c
size 26800
oid sha256:bd8ab01406157ba78a9923611a9d21d5afe6d1d433f3aa3cf263b1507fd7eee7
size 26774

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9859fede2392bc9afa0753dc30e800c7ebdebfc427263753b25cc6b564e633f2
size 31854
oid sha256:e7aafa97412bf18c9820aa158d0e1c2917cc471fa1977bf2ef6cc68d3a5bbc42
size 31933

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:28d2169bed8334f79d1af98064f4a7238a8ef300c2993fb6a619b3bff4743d88
size 26118
oid sha256:a162bad1922fb62ab2da4fe396fed4192800e21b9bccff1c5b309a8cd482994a
size 26169

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:32d40b69648df4da799b52afcd5912db3144d9846049629bc1183e17f9fae26b
size 25638
oid sha256:8198c156b3dcb61583d2543b3d2f4e62adbd54b9ac8579b9c2fbd9a8c6f8bc41
size 25604

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3498c5276cb9346e0393d1975983242773c30e0c51296e5c4d803cbb9867bce7
size 31020
oid sha256:4beebf86fc936884447204fa81ef2104e25d60bde1581d077468d2ed6f3cc1ad
size 31052

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:59cd8489ec06f17beb95990e06c5fdf726a22761ccb87212cf99919f231f0237
size 151677
oid sha256:1ee39bf77a133b0ddd544448fdcfd2e16fa0bb4b8b31d46be281b6d9127013c9
size 151719

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7a9ed336d0c4ebfe6dfbaa8c8d5a5efd760003eb55369811bed7d30954910677
size 150970
oid sha256:76fd8d5c077fc47f4957b82f654d89151ad10b851f450d827dfa389866e7d1d7
size 150948

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:39c1df36664808d4af9b3ac2881e648bafdf5354376b74f0ca7c731cb05072be
size 150007
oid sha256:683e230b3e60ce11c3a8e33edb7d74ccc819801d850d1b62e91236db003d2eb2
size 150045

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:de3d3ef7e6b65220c7df8a25f2d1539990ef0a47b7e6f2d53b1f53a0e351af4c
size 149396
oid sha256:7c55cc66caf61aebbb514f6f13bdf563c5fc1bf32eba2db3df133d2d736af260
size 149330

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4e0b5b467ed97c83a1c9034272a5d240495caa58b67d396604dabb222600d261
size 52880
oid sha256:5ea3e710d467877ccdb4842055ce36602675ad378bc6d135ee5c64edb21a89c6
size 52864

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6633e52179bd8292522f68a49859dbba3bd8288d8ff69fadc2d780567e40f96e
size 74716
oid sha256:a8d8205687fd1c5a7579b3c426ea9547dae4250ba4261cec36f1ef2ea588c982
size 74730

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:40ce9c457703b9c9d897ba29a16ef6837219a5546eb3be4d28edf891512ae654
size 54370
oid sha256:d2dd830883481bd3ed598bed06b3ca03573097adfa453f2fd889413e972244cd
size 54500

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e047084332661073ae46845c9c50c8183155b05b89d8af44afc16da4f830cce8
size 66881
oid sha256:28266d8283d1e453832c3c88f223edc4be28d84406981f5fe87f254aecc736ca
size 66910

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:93949d52105b04e499c776b96508eadf082fd792753552fdacdd9daedd18b9b2
size 50741
oid sha256:1427b32623dbcd384fae8819174936e13589457be7da88801ea48162752948cb
size 50630

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:442d45fb15e9a8308a10050e36dd32cdd496e53133813ca86a5e447464168a74
size 67822
oid sha256:8ef232876e00b2c9b1448973a0fa5856f4574ce340d4035c9a3f60e41fa99fcb
size 67758

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:409a084dc1ad3741710ad4dd347e77551245754e4a565eae02ccceb21868e2c4
size 57682
oid sha256:a65f7df1be94e2d77b0eab49c3025779c0a0e11afa428ddec651652a97335f19
size 57833

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:69a47f2e0686d9b1ed2c949fae73ca58160d533ece9cfd36037e9ee759c56026
size 72649
oid sha256:dabe55acc4f18170c9f040980723ca75f81942df098d031d36955609a47e5be7
size 72720

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fc7f746d4a3b570379d89ae47a6512f1e1cc5adfa5f80147f9effa1cf1408c05
size 74766
oid sha256:db6f0f1128a6372c4165cafd4255314216dc1aba3a48cafd043819bea4e573cb
size 74400

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0f1a1df4b2ef561bec70334bc04b4cc7c27da12748307fd60ce2fbd11ebc86c9
size 51235
oid sha256:eb3be77004838a03b9e3f17e0b060775dcd876d0249a01c343c94a64edc05c2a
size 51218

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7bad5c7b8889e0c3181b7a48b22c4b4d5ad1f83be1fa208c37331e4b96b5aa60
size 71616
oid sha256:62a81a4f33a8a76a2a9864fc522b6fe15765237a96663c8ecc8aca230642a771
size 71545

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f5731be5c98b6969767c066234936533426290691cbedcd036579ee4c0b4f0c4
size 52778
oid sha256:029144f5977e38f7a088f49acb6cd31aad68579975f2b5641cf44f385721ec13
size 52848

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e32f16c94772e25680bb7d29765c3872faeb7b8ea5f1a81423afd7e35b24c857
size 64191
oid sha256:e472556771fa5cc4253706bce70775664ba85b73566f34542aa580121583f153
size 64185

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1d70b27822ec7815346cc080aee6c458a194a7029505aa0b422bcbb3d485650c
size 49099
oid sha256:c49f2fbd209374af8e379ec4339dfbbcff3f89c0dc1766cb30b570845e339bca
size 48996

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ff62f66398396c2f1caa9bc1f70bed9599b4719bc177ddc51d58fbfa37424f8c
size 64859
oid sha256:0f483afa9110508d712f9ba0d6640b23e64d4ce7441506662c278e39b2213dc6
size 64926

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ab2224ae3437deba68362128c29edb7580af56728335cc681dd22a6c28ea1eee
size 55527
oid sha256:50698141b3f660e5424b20fa7999df8ff09ce23cd072fc041bfc49511283ecd6
size 55777

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6bcfb2bcbae7f633be037d0dc57362f01e815a8cc3ea1621c190033a18b448f2
size 69898
oid sha256:8333ae717f272947e4c904adb13913a6af952dbf7576153dfb41da5f2d854ff5
size 69865

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2c453c2588c59ac02819a2e980120b40383e4bd070ea7b287be88fa1bb47a939
size 72118
oid sha256:24b48d07cb841f6fa038b856e30b19da7c96e1435b6b71ca25800911f05de53a
size 72219

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3506ba2bcb44f19895ffbe7d9d8b57ca5b8e1724ef341a108a84e39c2ace11e5
size 57157
oid sha256:37646d8dba6f98c3a968a3bbe43b1db78acf2d5c3a25414f6da5cbecd8c4fef0
size 56933

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6e294e99a1c50efb02eb39d6af1523a4df858d9033368f6ce87f9df3ec3e074e
size 56092
oid sha256:f481314b733bcf9ab303cb2f82266db4eb9a189ab65bc6d8523f895271306a16
size 55869

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:571069d349466446378d0c5b893b89bc0756a00ff2f6392b98200c0ef669b0fc
size 58854
oid sha256:961bf2a4b81212c54750ffc66b2b72aebfbc56d880c376d6e06769fcea902e4d
size 58632

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:275029e0e527f5cd17d08ef40c2f383539b9ebbc9dbcf081676ca6dc81df3a9b
size 53436
oid sha256:c663f2eed56ad24d4af5ee218c9c0557b7b0ec3d56aca3244ad934b5f05071e4
size 53315

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d13360f421f757c0c56909912e2be97fd7c949c10c45ca1ad6140f3704d350d0
size 57112
oid sha256:92b5802745e5fab7bb9a7116965c1ab91aaa733f4a5df37b41f6043a5eb5e5f6
size 56887

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5c3290066eedb635bc6d8776aa1e77bcfd8b7db6bd340f27a573262f7c6f25c3
size 59306
oid sha256:7defaa404dcffce62e76ebdf958caa0b5b6c3450f02638c8510dc5bed36fc794
size 59135

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3501ea6945e2ec40177e4e0ebd1c00e7664bc705115d73b84bef5cbb3b2465a4
size 58251
oid sha256:40e7658ea9ab037d289392b42a458c2ec1c8626e3e852ba844eed508ad0c3787
size 58121

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:030436d020d1aa369eec4657ef1c40627c4a6e641b1d7050c7950b016520f4e8
size 54940
oid sha256:b43fb4f3732d6931c7d146d1324d7bde87d06cc4a659fb37846415dbb8717ccd
size 54713

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9ad670d3b46c40df6c01d891e1319f53c8cd5e5e260e91bceb811d304f181355
size 54784
oid sha256:27ccfb35105589c692e03fa6e84a2bf3f1cc2c817cb61011272c848bcedcf144
size 54606

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7cdb48f992e7f409fe8eaf6ef82c43e3ac7a69ce347916137f67c2fd282135ab
size 62037
oid sha256:d33e50e7bff509e933a1b90c69906bd2a2d9b490dcd001e66134b7e6a9226f73
size 61911

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c465edd73c507e2fdda709abdc4b1addac3286fcce42a665feffe09fcb89c54
size 43190
oid sha256:6e2001cf66bd7906715f3b75c40f82e7a982a4dbe5a597f001bb36931b485f56
size 43080

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c73d86e619e53b95d27840a9df7553d16a5b4bad31aa06a74e7ca95ff2631ae2
size 42347
oid sha256:c1a3f0aed0571fddc5d64bd7481368570663a574e69371a973801594c8b3881d
size 42233

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:279977634ba0ac20bbfca3884d738c0cfe2e01c2bb180e42ce96c2bdd00d71c6
size 55266
oid sha256:c940c77785392976a3508f0a926f3e33ead3b84c360ad52a93bce787f26d5528
size 55051

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2d6173270257b716aa487b01a99f77a17a01cc9d51ca9c25e78feb406a1dc191
size 54190
oid sha256:263f5a77469e574ffab73db2e5507c428da92a53980e1aacdfefbd499e8e0f4d
size 53983

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:eff9db3d4abc31cfcb050450292c8d5c260eda035f3cd0c30e80f1007a9f769c
size 56698
oid sha256:d8471b4298b5e08af217e625e95ce5811888f82d2f565b9e679ef14e5b0ae4e7
size 56492

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cc649e3eb70cb6c8318f75a47c06a6b526774320b228d7a3e40a2c3b827a1766
size 47957
oid sha256:ad8864df2310acbd286b5299db6b123a5fc26876b22f5b99bb27a1b2ef75f945
size 47785

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:66fb1632e2eefb8e010de7dedc452db2ccab1ac4924f0e8e43695beed862332f
size 55230
oid sha256:7b1f6f34a04f6a0ea1673a981b95b8d9552bbb0f5f95fe6e6f48ff3c79ed5a8d
size 55014

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ff897de0ad428d048b4a6eeb5135e4bca258d897cfa1f1f62942325bf08b27ac
size 57482
oid sha256:8689e497ff2befc2692b53ef9a1fe9705db17c894152eb3f631b567fe36d2067
size 57319

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:301ed54f0d68dcc6a3c6680ed5dace55ed8a5508bf7d82f6f27cc24e553baac8
size 53151
oid sha256:c7c9c081424187e535522de66d80d9d7fbf7716ab73b43b17ee805aa791e7f39
size 52995

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:79cf6010916652f7a48892b8c1c835379ce5bc9f39b628b85bbbb8cf4332667f
size 52874
oid sha256:43b4017b5b73f377baacb5c5f97ffa1909df36dc95368b15d51b103d006e740b
size 52655

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:51d9ea3a797456c1899081533c98c2fffa308bfe8b5059d3ae87f523a1928d01
size 52766
oid sha256:ce93b1482eadaf8555aae3f65e30dc8b21ec210dbab33dffeb0ad7108bed1c8e
size 52598

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6e1df1c2ee07a6f8c30cab0198c8961513f1a7abe42105a5c42f7ad3fbd0461a
size 56716
oid sha256:1e272aed6081f1687219144b23e2f8a12709179a4251022c8bc307970a173d5d
size 56557

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:11f70ed950d7ef61faf2ea694648fd071229128a7ce188110b09b28418ebe197
size 39943
oid sha256:d3102b568a3c54e71c7b2fe8a36dcbf49330edc15bb797bd98ff6f7fedb1b762
size 39825

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5d2789d9e9469fa17ff098121c3eec64c73c4bf229920b438149ed86aa7faef1
size 39155
oid sha256:976ebdcbc2c883c9385747a098355845c65b44e1625e6713de09307917040da6
size 39039