Merge branch 'develop' into feature/fga/improve_node_architecture

This commit is contained in:
ganfra 2023-03-09 15:42:23 +01:00
commit a230144431
59 changed files with 191 additions and 117 deletions

View file

@ -34,7 +34,7 @@ jobs:
FIREBASE_TOKEN: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_FIREBASE_TOKEN }}
- name: Additionally upload Nightly APK to browserstack for testing
continue-on-error: true # don't block anything by this upload failing (for now)
run: curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/nightly/app-nightly.apk" -F "custom_id=element-x-android-nightly"
run: curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/nightly/app-universal-nightly.apk" -F "custom_id=element-x-android-nightly"
env:
BROWSERSTACK_USERNAME: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_USERNAME }}
BROWSERSTACK_PASSWORD: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_ACCESS_KEY }}

View file

@ -13,6 +13,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install towncrier
run: |
python3 -m pip install towncrier
- name: Prepare changelog file
run: |
mv towncrier.toml towncrier.toml.bak
sed 's/CHANGES\.md/CHANGES_NIGHTLY\.md/' towncrier.toml.bak > towncrier.toml
rm towncrier.toml.bak
yes n | towncrier build --version nightly
- name: Build and upload Nightly APK
run: |
./gradlew assembleNightly appDistributionUploadNightly $CI_GRADLE_ARG_PROPERTIES
@ -23,8 +32,7 @@ jobs:
FIREBASE_TOKEN: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_FIREBASE_TOKEN }}
- name: Additionally upload Nightly APK to browserstack for testing
continue-on-error: true # don't block anything by this upload failing (for now)
run: curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/nightly/app-nightly.apk" -F "custom_id=element-x-android-nightly"
run: curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/nightly/app-universal-nightly.apk" -F "custom_id=element-x-android-nightly"
env:
BROWSERSTACK_USERNAME: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_USERNAME }}
BROWSERSTACK_PASSWORD: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_ACCESS_KEY }}

View file

@ -125,6 +125,10 @@ android {
firebaseAppDistribution {
artifactType = "APK"
// We upload the universal APK to fix this error:
// "App Distribution found more than 1 output file for this variant.
// Please contact firebase-support@google.com for help using APK splits with App Distribution."
artifactPath = "$rootDir/app/build/outputs/apk/nightly/app-universal-nightly.apk"
// This file will be generated by the GitHub action
releaseNotesFile = "CHANGES_NIGHTLY.md"
groups = "external-testers"

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

@ -0,0 +1 @@
Address design issues in the change server screen

View file

@ -17,6 +17,7 @@
package io.element.android.features.login.impl.changeserver
import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@ -44,23 +45,32 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.ParagraphStyle
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.UrlAnnotation
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.features.login.impl.R
import io.element.android.features.login.impl.error.changeServerError
import io.element.android.features.login.impl.util.LoginConstants
import io.element.android.libraries.architecture.Async
import io.element.android.libraries.designsystem.ElementTextStyles
import io.element.android.libraries.designsystem.LinkColor
import io.element.android.libraries.designsystem.components.ClickableLinkText
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog
import io.element.android.libraries.designsystem.components.form.textFieldState
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.theme.LocalColors
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.Icon
@ -75,7 +85,7 @@ import io.element.android.libraries.testtags.testTag
import org.matrix.rustcomponents.sdk.AuthenticationException
import io.element.android.libraries.ui.strings.R as StringR
@OptIn(ExperimentalMaterial3Api::class)
@OptIn(ExperimentalMaterial3Api::class, ExperimentalTextApi::class)
@Composable
fun ChangeServerView(
state: ChangeServerState,
@ -215,12 +225,27 @@ fun ChangeServerView(
}
}
Spacer(Modifier.height(8.dp))
Text(
text = stringResource(StringR.string.server_selection_server_footer),
val footerMessage = stringResource(StringR.string.server_selection_server_footer)
val footerAction = stringResource(StringR.string.server_selection_server_footer_action)
val footerText = buildAnnotatedString {
val defaultColor = MaterialTheme.colorScheme.tertiary
withStyle(ParagraphStyle(textAlign = TextAlign.Start)) {
withStyle(SpanStyle(color = defaultColor)) {
append(footerMessage)
append(" ")
}
val start = length
withStyle(SpanStyle(color = LinkColor)) {
append(footerAction)
}
addUrlAnnotation(UrlAnnotation(LoginConstants.SLIDING_SYNC_READ_MORE_URL), start, length)
}
}
ClickableLinkText(
text = footerText,
interactionSource = MutableInteractionSource(),
modifier = Modifier.padding(horizontal = 16.dp),
style = ElementTextStyles.Regular.caption1,
textAlign = TextAlign.Start,
color = MaterialTheme.colorScheme.tertiary,
)
Spacer(Modifier.height(32.dp))
Button(
@ -259,6 +284,8 @@ internal fun SlidingSyncNotSupportedDialog(onLearnMoreClicked: () -> Unit, onDis
onDismiss = onDismiss,
submitText = stringResource(StringR.string.action_learn_more),
onSubmitClicked = onLearnMoreClicked,
onCancelClicked = onDismiss,
emphasizeSubmitButton = true,
title = stringResource(StringR.string.server_selection_sliding_sync_alert_title),
content = stringResource(StringR.string.server_selection_sliding_sync_alert_message),
)

View file

@ -36,7 +36,6 @@ test_core = "1.5.0"
coil = "2.2.2"
datetime = "0.4.0"
serialization_json = "1.5.0"
# Warning, also hard-coded in composeDependencies()
showkase = "1.0.0-beta17"
jsoup = "1.15.4"
appyx = "1.0.5"

View file

@ -68,4 +68,4 @@ val ElementGreen = Color(0xFF0DBD8B)
val ElementOrange = Color(0xFFD9B072)
val Vermilion = Color(0xFFFF5B55)
val LinkColor = Color(0xFF054F6E)
val LinkColor = Color(0xFF0086E6)

View file

@ -30,6 +30,7 @@ import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.ParagraphStyle
import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextStyle
@ -40,14 +41,15 @@ import io.element.android.libraries.designsystem.theme.components.Text
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentMapOf
@OptIn(ExperimentalTextApi::class)
@Composable
fun ClickableLinkText(
text: AnnotatedString,
linkAnnotationTag: String,
onClick: () -> Unit,
onLongClick: () -> Unit,
interactionSource: MutableInteractionSource,
modifier: Modifier = Modifier,
linkAnnotationTag: String = "",
onClick: () -> Unit = {},
onLongClick: () -> Unit = {},
style: TextStyle = LocalTextStyle.current,
inlineContent: ImmutableMap<String, InlineTextContent> = persistentMapOf(),
) {
@ -71,12 +73,14 @@ fun ClickableLinkText(
) { offset ->
layoutResult.value?.let { layoutResult ->
val position = layoutResult.getOffsetForPosition(offset)
val linkAnnotations =
val linkUrlAnnotations = text.getUrlAnnotations(position, position)
.map { AnnotatedString.Range(it.item.url, it.start, it.end, linkAnnotationTag) }
val linkStringAnnotations = linkUrlAnnotations +
text.getStringAnnotations(linkAnnotationTag, position, position)
if (linkAnnotations.isEmpty()) {
if (linkStringAnnotations.isEmpty()) {
onClick()
} else {
uriHandler.openUri(linkAnnotations.first().item)
uriHandler.openUri(linkStringAnnotations.first().item)
}
}
}

View file

@ -16,9 +16,6 @@
package io.element.android.libraries.designsystem.components.dialogs
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.AlertDialogDefaults
import androidx.compose.material3.MaterialTheme
@ -29,28 +26,33 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.Dp
import io.element.android.libraries.designsystem.ElementTextStyles
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.BooleanProvider
import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun ConfirmationDialog(
title: String,
content: String,
onSubmitClicked: () -> Unit,
onDismiss: () -> Unit,
modifier: Modifier = Modifier,
submitText: String = stringResource(id = StringR.string.ok),
cancelText: String = stringResource(id = StringR.string.action_cancel),
thirdButtonText: String? = null,
onSubmitClicked: () -> Unit = {},
onCancelClicked: () -> Unit = {},
emphasizeSubmitButton: Boolean = false,
onCancelClicked: () -> Unit = onDismiss,
onThirdButtonClicked: () -> Unit = {},
onDismiss: () -> Unit = {},
shape: Shape = AlertDialogDefaults.shape,
containerColor: Color = AlertDialogDefaults.containerColor,
iconContentColor: Color = AlertDialogDefaults.iconContentColor,
titleContentColor: Color = AlertDialogDefaults.titleContentColor,
// According to the design team, `primary` should be used here instead of the default `onSurface`
titleContentColor: Color = MaterialTheme.colorScheme.primary,
textContentColor: Color = AlertDialogDefaults.textContentColor,
tonalElevation: Dp = AlertDialogDefaults.TonalElevation,
) {
@ -79,9 +81,16 @@ fun ConfirmationDialog(
TextButton(
onClick = {
onSubmitClicked()
}
},
) {
Text(submitText)
Text(
submitText,
style = if (emphasizeSubmitButton) {
ElementTextStyles.Bold.subheadline
} else {
MaterialTheme.typography.labelLarge
}
)
}
},
shape = shape,
@ -95,17 +104,22 @@ fun ConfirmationDialog(
@Preview
@Composable
internal fun ConfirmationDialogLightPreview() = ElementPreviewLight { ContentToPreview() }
internal fun ConfirmationDialogLightPreview(@PreviewParameter(BooleanProvider::class) emphasizeSubmitButton: Boolean) =
ElementPreviewLight { ContentToPreview(emphasizeSubmitButton) }
@Preview
@Composable
internal fun ConfirmationDialogDarkPreview() = ElementPreviewDark { ContentToPreview() }
internal fun ConfirmationDialogDarkPreview(@PreviewParameter(BooleanProvider::class) emphasizeSubmitButton: Boolean) =
ElementPreviewDark { ContentToPreview(emphasizeSubmitButton) }
@Composable
private fun ContentToPreview() {
private fun ContentToPreview(emphasizeSubmitButton: Boolean) {
ConfirmationDialog(
title = "Title",
content = "Content",
thirdButtonText = "Disable"
thirdButtonText = "Disable",
onSubmitClicked = {},
onDismiss = {},
emphasizeSubmitButton = emphasizeSubmitButton,
)
}

View file

@ -24,6 +24,7 @@ import io.element.android.libraries.designsystem.Azure
import io.element.android.libraries.designsystem.Black_800
import io.element.android.libraries.designsystem.Black_950
import io.element.android.libraries.designsystem.DarkGrey
import io.element.android.libraries.designsystem.Gray_300
import io.element.android.libraries.designsystem.Gray_400
import io.element.android.libraries.designsystem.Gray_450
import io.element.android.libraries.designsystem.SystemGrey5Dark
@ -59,7 +60,7 @@ val materialColorSchemeDark = darkColorScheme(
surface = Black_800,
onSurface = Color.White,
surfaceVariant = Black_950,
onSurfaceVariant = Color.White,
onSurfaceVariant = Gray_300,
// TODO surfaceTint = primary,
// TODO inverseSurface = ColorDarkTokens.InverseSurface,
// TODO inverseOnSurface = ColorDarkTokens.InverseOnSurface,

View file

@ -12,6 +12,7 @@
<string name="login_hide_password">Hide password</string>
<string name="ex_choose_server_subtitle">What is the address of your server?</string>
<string name="server_selection_server_footer">You can only connect to an existing server that supports sliding sync. Your homeserver admin will need to configure it.</string>
<string name="server_selection_server_footer_action">Learn more</string>
<string name="server_selection_sliding_sync_alert_title">Server not supported</string>
<string name="server_selection_sliding_sync_alert_message">This server currently doesn\'t support sliding sync.</string>
<!-- Create room -->

View file

@ -26,8 +26,8 @@ import org.gradle.kotlin.dsl.project
/**
* Dependencies used by all the modules
*/
fun DependencyHandlerScope.commonDependencies() {
implementation("com.jakewharton.timber:timber:5.0.1")
fun DependencyHandlerScope.commonDependencies(libs: LibrariesForLibs) {
implementation(libs.timber)
}
/**
@ -44,10 +44,10 @@ fun DependencyHandlerScope.composeDependencies(libs: LibrariesForLibs) {
implementation("androidx.compose.material3:material3:1.1.0-alpha04")
implementation("androidx.compose.material:material-icons-extended")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.activity:activity-compose:1.6.1")
implementation(libs.androidx.activity.compose)
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
implementation("com.airbnb.android:showkase:1.0.0-beta17")
implementation(libs.showkase)
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5")
}

View file

@ -36,6 +36,6 @@ android {
}
dependencies {
commonDependencies()
commonDependencies(libs)
composeDependencies(libs)
}

View file

@ -44,6 +44,6 @@ android {
}
dependencies {
commonDependencies()
commonDependencies(libs)
composeDependencies(libs)
}

View file

@ -19,6 +19,9 @@
*/
import extension.androidConfig
import extension.commonDependencies
import org.gradle.accessors.dm.LibrariesForLibs
val libs = the<LibrariesForLibs>()
plugins {
id("com.android.library")
@ -38,5 +41,5 @@ android {
}
dependencies {
commonDependencies()
commonDependencies(libs)
}

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:510c17406a13ce64a9b7578d70535dac7fe20e9c3a9a4ab3c8cab775bc46f568
size 19718
oid sha256:5451d8fb06cef9a346c92db43fa5994e39f3079b67b99d867a31d9b8a645cb0d
size 19198

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0c48397dc1a7ec94678c9423d3f4734422390679882d838c391913fe544042bc
size 39873
oid sha256:c5ec4955c5bd390d8f4681f709adcb7152de690bb9033827a9167bb0a4afeed3
size 41337

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:be550cedf5e99a3c80c50d201e8cf6faaed9161a1e5007eeff11fd9b46d844d8
size 43345
oid sha256:ad203c77d755606febd055a852a7288a670abab4bd6d281df1262a4cd02b8bff
size 44823

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fde980094076a921eee29d84663b6b5f09cf363c51681eb7702d15e8922d2950
size 42663
oid sha256:db98ec6bb8890f95367fb81bb61b592a883f113c92211b69f7d71431af00975a
size 44135

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:625bcb0c020582e470474463458c4a8335c84e6048bb12c4f57dbed92f257f57
size 43384
oid sha256:545df3870e1a6034180b6ebb23366a5855105df09ac741fe7a2e8c97e3df5086
size 44870

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:be550cedf5e99a3c80c50d201e8cf6faaed9161a1e5007eeff11fd9b46d844d8
size 43345
oid sha256:ad203c77d755606febd055a852a7288a670abab4bd6d281df1262a4cd02b8bff
size 44823

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e157e6b9c4d3e6c888f4360b45ed3ae13306407bcb4b55ef6a168341ad56b250
size 36585
oid sha256:3e0939baaec56f1be550ab960cd66c6e4541060ed36ec487b487d4ffa1c6911a
size 38103

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a30b81972f9927741ec5298d32cd28d13bb2ad5b4f044f42e42275722cb2dc40
size 40490
oid sha256:0baf660665cdce26b9e0716f1492f007cdf2d09d0989ae400b8677aafee80533
size 41924

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:307c1a0c2741b43ebfc2c135367865e4cb85f8ddf31f6c6fb112c18e617fb47d
size 39314
oid sha256:28c94b5d7d5caf5e5b00b1060c4538422dd50c6f1d8168d2948d9a4b8634f658
size 40818

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:194e3055a30dcb721a0c62e81cf9a326993e587d0d3805f71ca3eaed901f8fa4
size 40524
oid sha256:de060d43920f967c80f9795a28e7c84467f86b559ef1e434d605ec4c61f0400e
size 41954

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a30b81972f9927741ec5298d32cd28d13bb2ad5b4f044f42e42275722cb2dc40
size 40490
oid sha256:0baf660665cdce26b9e0716f1492f007cdf2d09d0989ae400b8677aafee80533
size 41924

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5128c12c3186abdab9020891825731fe1207421f86e7142f15fd67b15d872efe
size 33314
oid sha256:ae82ef6285127f343f0ebee35cedc6f28132dde37c3303bbc33aa881c471c48c
size 32466

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7b3c1d84c57ac35d57ddcadeffaa3efe3cfb35d8472cb499b113efeee27494f6
size 36118
oid sha256:50627ff6140b8fb9eed181e812740a8bf8cf4cdb23cb4cf2fa9cd0b37fb880bc
size 35224

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a339ab789eb6710aa5edba53acc46a61de373566089590940ab4c8233e97558b
size 34721
oid sha256:8f94523e18a1eb82324325f0e3f8439d4d457d6d4883cd75a7fa6169f90bbdf4
size 34229

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:675c1cbfc80acec11434153dacb1d69b0cf6122fb068db8a92ae86e039a54c71
size 34091
oid sha256:fe3431804d6d84b8588b0fb475bd824159abe4d0a7e35f0b7967b08477b07778
size 33523

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8137f8ed97a1a924fc76e16c8f0f0fc5a4a866d989460859b98edfcb5c7f98b7
size 30996
oid sha256:3d1c502239f0fd9cdd7fa286275d299b74597a2b0b5d0f081503a7db3cb39f52
size 30277

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a339ab789eb6710aa5edba53acc46a61de373566089590940ab4c8233e97558b
size 34721
oid sha256:8f94523e18a1eb82324325f0e3f8439d4d457d6d4883cd75a7fa6169f90bbdf4
size 34229

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:76623bcd15bba7ba56a377396ae5909fb11be2b823ad9acec3460bf303744b76
size 5087
oid sha256:b9f0ccf7c44ec97173ac34554dcd143065b9141f2a1ae58d1eb436ebd3427231
size 5170

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dd10104dbe89a00378f167c76283d08417b4599d27aabc16a73fc2be6e6b8137
size 5155
oid sha256:92ab01744efdb2b4ecc142b1a9d31a69ca9759607ce8d786c38fd3e25f5242d1
size 5115

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a11dfc14ce5ab8c38dfdf5be75677c3e21089994e7571c6734f3925a3f84e38e
size 44441
oid sha256:8a5cc544c074ed497560a68195655b858c29b3e4e433b4fde14cfb46ef74a892
size 44434

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:74d3f02e64692a5457155f0cc7784f84697fdcb26356eab1aa6c6711fdeb1d5c
oid sha256:e30fd9b73928ad8d12f88f26a6593f81cf16cb511241cea72321547977db4365
size 44386

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7dbd8905aa8a0ecaf14585dcac1562ed1668b022f2f38b8bc6146259447c5e90
size 54382
oid sha256:0a74fd9b4986b758b0c689da29c7eeac055befd1009a2b6bc49e01b56a19b85a
size 53480

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:04ac815269914dce155e08aca470be0e3fab7791af69aa93c5fb11ae3503b3d2
size 178384
oid sha256:5ffe2a0c8d2e9adba5ae0643727982bff1edf5d6977fe43ca76417d033b75dab
size 177404

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e828aac8c3edcda28cb04a7c1469148c99b3151786a67ac63a260b1310bb96e6
size 26511
oid sha256:4d995bd6d70846a5e0662220a087ea0c32c7d96b7c6516b36dbbb3834c8a8f7a
size 24837

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:98d52f889f8803dd751f84b9e3fa065309a972e9f7b9a86f0cae697898c81670
size 24745
oid sha256:be0b29f6bff994c832be9b7970c2acb19b0c5e5c5676d0f9fd11bf716ef14cc0
size 24840

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:01e8b6c8a7419f5053f398bfc2d0ce37fc1381274d568b344632bce1b8d02659
size 29276
oid sha256:8ce3ce57b0b52ff01e9f47884802e5847ff67af04f70bf0f287cdd26da098fd2
size 27408

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9b94b561d6e4211772c1fd5315f9db28f26a964af46ca94af8bc5cd6fc48c578
size 27270
oid sha256:f93b061d0f155b3a86e399661f3b3cc63fb30809b1a77a0f5d936dafde810baa
size 27411

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dab39f2a090726fb292b38b49c102a475603a5bbdaca538500a1619fc8cb9636
size 23777
oid sha256:23afdbfb4262b15b1855b434790e661da479bb7b0a310756de5c8e1f3ba2d351
size 23773

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ff04bf07f8c24b3b19d4926bb3c51b257166befe062fe8b8012d2e92dbfe3491
size 13477
oid sha256:8bca09418758a20493dae2e73a747449af8a448ad3a3cc4c5aae2e08a425f3fb
size 13464

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:328963ebd74fbbe47fd4a4d1f0edce5bf014d88a266c114e50a5274e87a88fe8
size 7154
oid sha256:90e726f5086c32da2a9bf2887e5295a761748ba991cd541a4e119f14bc57b0e8
size 7159

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3c8868d4974f23637afed9ecd062b88421e2b39ffe22f19742b946afc91caeb6
size 37838
oid sha256:0fc272268179409483fc5fad89aa00714a6811c63e478b5c696d4ab0338ce6bf
size 37781

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:001f8509e1e21f53e4d19285875ac76b937ea73931f5df5bf57b050a008d45c1
size 13126
oid sha256:716d8d42019944987e856dbe0978e9f8967998defb7421bcad12edbc50cec0a8
size 13020

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e587aade6a2dc96e9d0f4bfe2529ef1e6d2d6359b65530ac22d26160d876e180
size 12955

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:716d8d42019944987e856dbe0978e9f8967998defb7421bcad12edbc50cec0a8
size 13020

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3961fa465a6b11c6b762f39980febed8cce6be557780327b24dada42c486d258
size 13001
oid sha256:609bd13480751ae36a6192a0609ca8d10f897bd25049bea3091e6852ab598433
size 13052

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8c7c48cae8d37b026d5c1ad72fc69090679aaf3d3ad4d8fdbaffbb792b22c186
size 12981

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:609bd13480751ae36a6192a0609ca8d10f897bd25049bea3091e6852ab598433
size 13052

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4f3acd334b5698e5b8f709eace3b8ba93218928012777a827d50d8057a02bda5
size 10484
oid sha256:94856975f59d30d85b47f14d7ddb7bc93a435060aa19b0fdc3f7de027231e226
size 10311

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3c6df3331874bf0037100cf9f989fa0bb06f5eec57794eb887699e80a0d53fd5
size 9991
oid sha256:74714d068fe3654b88b1847559a1aaf2f744fad8db14e7ea5f4de8dd1963b68d
size 9485

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:35c286741bedf3dd27b206e499a585ddbd78cc1d0728e17e0ca6caf7788213a3
size 6517
oid sha256:b99eecb6d174058b9782e204d26c1d9e630d2a1b7bb8ce3fb1422e00b23af828
size 6542

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0553e19671b9285c781d5f16eaf988aaed0a5eebd04445dcd571b56b7076bbce
size 42123
oid sha256:01f1ebe3c4ea49287cad6920e6125794424e7db562ca6f421921e713587305fe
size 41847

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8cbc253fcab9fa5724a7f65d186524949c1b6f0ce7a798064e1654d083854c77
size 103194
oid sha256:d2655207242a616216b40041d34af1eafff311fefd5cb60773ebea379623b8b0
size 103469

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:03bfd855f6e010d2d4dc0cb9f3c13e76a4f2bbcda98b086dabcd33f201ebe10a
size 39486
oid sha256:2bc66a477d35143ca76e8a2bf9660cc4d87df57b1388ebca892de5eae1f12c86
size 39277

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:94ac7f61151a93051b6869aff30823d3995cd4229697e283d3490303f69377bc
size 116815
oid sha256:cc8026b2bf6fbc4afaf2641d2deba1b3ae27d582dbc30c70841356232aa8cbbe
size 117237