Compare commits
	
		
			1 Commits
		
	
	
		
			renovate/l
			...
			4e800f55bc
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4e800f55bc | 
							
								
								
									
										59
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						@@ -4,17 +4,9 @@ type: docker
 | 
				
			|||||||
name: default
 | 
					name: default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
steps:
 | 
					steps:
 | 
				
			||||||
# Needs a full git clone
 | 
					 | 
				
			||||||
- name: fetch
 | 
					 | 
				
			||||||
  image: alpine/git
 | 
					 | 
				
			||||||
  commands:
 | 
					 | 
				
			||||||
  - git fetch --tags
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Frontend
 | 
					# Frontend
 | 
				
			||||||
- name: web_build
 | 
					- name: web_build
 | 
				
			||||||
  image: node:23
 | 
					  image: node:23
 | 
				
			||||||
  depends_on:
 | 
					 | 
				
			||||||
  - fetch
 | 
					 | 
				
			||||||
  volumes:
 | 
					  volumes:
 | 
				
			||||||
    - name: web_app
 | 
					    - name: web_app
 | 
				
			||||||
      path: /tmp/web_build
 | 
					      path: /tmp/web_build
 | 
				
			||||||
@@ -28,8 +20,6 @@ steps:
 | 
				
			|||||||
# Backend
 | 
					# Backend
 | 
				
			||||||
- name: backend_fetch_deps
 | 
					- name: backend_fetch_deps
 | 
				
			||||||
  image: rust
 | 
					  image: rust
 | 
				
			||||||
  depends_on:
 | 
					 | 
				
			||||||
  - fetch
 | 
					 | 
				
			||||||
  volumes:
 | 
					  volumes:
 | 
				
			||||||
    - name: rust_registry
 | 
					    - name: rust_registry
 | 
				
			||||||
      path: /usr/local/cargo/registry
 | 
					      path: /usr/local/cargo/registry
 | 
				
			||||||
@@ -64,9 +54,6 @@ steps:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- name: backend_build
 | 
					- name: backend_build
 | 
				
			||||||
  image: rust
 | 
					  image: rust
 | 
				
			||||||
  when:
 | 
					 | 
				
			||||||
    event:
 | 
					 | 
				
			||||||
      - tag
 | 
					 | 
				
			||||||
  volumes:
 | 
					  volumes:
 | 
				
			||||||
  - name: rust_registry
 | 
					  - name: rust_registry
 | 
				
			||||||
    path: /usr/local/cargo/registry
 | 
					    path: /usr/local/cargo/registry
 | 
				
			||||||
@@ -85,58 +72,12 @@ steps:
 | 
				
			|||||||
  - ls -lah target/release/moneymgr_backend target/release/examples/api_curl
 | 
					  - ls -lah target/release/moneymgr_backend target/release/examples/api_curl
 | 
				
			||||||
  - cp target/release/moneymgr_backend target/release/examples/api_curl /tmp/release
 | 
					  - cp target/release/moneymgr_backend target/release/examples/api_curl /tmp/release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Mobile app code quality
 | 
					 | 
				
			||||||
- name: mobile_app_code_quality
 | 
					 | 
				
			||||||
  image: ghcr.io/cirruslabs/flutter:latest
 | 
					 | 
				
			||||||
  depends_on:
 | 
					 | 
				
			||||||
  - fetch
 | 
					 | 
				
			||||||
  commands:
 | 
					 | 
				
			||||||
  - echo "Build version:" $(git describe --tags --abbrev=0)
 | 
					 | 
				
			||||||
  - echo "Build number:" $(git rev-list --count $(git describe --tags --abbrev=0))
 | 
					 | 
				
			||||||
  - cd moneymgr_mobile
 | 
					 | 
				
			||||||
  - flutter --disable-analytics
 | 
					 | 
				
			||||||
  - flutter pub get --enforce-lockfile
 | 
					 | 
				
			||||||
  - dart run build_runner build
 | 
					 | 
				
			||||||
  - flutter analyze
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Mobile app build
 | 
					 | 
				
			||||||
- name: mobile_app_build
 | 
					 | 
				
			||||||
  image: ghcr.io/cirruslabs/flutter:latest
 | 
					 | 
				
			||||||
  depends_on:
 | 
					 | 
				
			||||||
  - backend_build # prevent synchronous backend & frontend build
 | 
					 | 
				
			||||||
  - mobile_app_code_quality
 | 
					 | 
				
			||||||
  when:
 | 
					 | 
				
			||||||
    event:
 | 
					 | 
				
			||||||
      - tag
 | 
					 | 
				
			||||||
  environment:
 | 
					 | 
				
			||||||
    JKS_KEYSTORE:
 | 
					 | 
				
			||||||
      from_secret: JKS_KEYSTORE
 | 
					 | 
				
			||||||
    JKS_KEYSTORE_PASSWORD:
 | 
					 | 
				
			||||||
      from_secret: JKS_KEYSTORE_PASSWORD
 | 
					 | 
				
			||||||
  volumes:
 | 
					 | 
				
			||||||
  - name: release
 | 
					 | 
				
			||||||
    path: /tmp/release
 | 
					 | 
				
			||||||
  commands:
 | 
					 | 
				
			||||||
  - cd moneymgr_mobile
 | 
					 | 
				
			||||||
  - flutter --disable-analytics
 | 
					 | 
				
			||||||
  - bash android/ci_write_keystore.sh
 | 
					 | 
				
			||||||
  - flutter pub get --enforce-lockfile
 | 
					 | 
				
			||||||
  - dart run build_runner build
 | 
					 | 
				
			||||||
  - flutter build apk
 | 
					 | 
				
			||||||
    --release
 | 
					 | 
				
			||||||
    --flavor publish
 | 
					 | 
				
			||||||
    --build-name $(git describe --tags --abbrev=0)
 | 
					 | 
				
			||||||
    --split-per-abi
 | 
					 | 
				
			||||||
    --target-platform android-arm64
 | 
					 | 
				
			||||||
    --build-number $(git rev-list --count $(git describe --tags --abbrev=0))
 | 
					 | 
				
			||||||
  - cp build/app/outputs/flutter-apk/app-arm64-v8a-publish-release.apk /tmp/release/moneymgr_mobile_arm64-v8a.apk
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Release
 | 
					# Release
 | 
				
			||||||
- name: gitea_release
 | 
					- name: gitea_release
 | 
				
			||||||
  image: plugins/gitea-release
 | 
					  image: plugins/gitea-release
 | 
				
			||||||
  depends_on:
 | 
					  depends_on:
 | 
				
			||||||
  - backend_build
 | 
					  - backend_build
 | 
				
			||||||
  - mobile_app_build
 | 
					 | 
				
			||||||
  when:
 | 
					  when:
 | 
				
			||||||
    event:
 | 
					    event:
 | 
				
			||||||
      - tag
 | 
					      - tag
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,5 +76,4 @@ services:
 | 
				
			|||||||
      - S3_ACCESS_KEY=$MINIO_ROOT_USER
 | 
					      - S3_ACCESS_KEY=$MINIO_ROOT_USER
 | 
				
			||||||
      - S3_SECRET_KEY=$MINIO_ROOT_PASSWORD
 | 
					      - S3_SECRET_KEY=$MINIO_ROOT_PASSWORD
 | 
				
			||||||
      - REDIS_HOSTNAME=redis
 | 
					      - REDIS_HOSTNAME=redis
 | 
				
			||||||
      - REDIS_PASSWORD=${REDIS_PASS:-secretredis}
 | 
					      - REDIS_PASSWORD=${REDIS_PASS:-secretredis}
 | 
				
			||||||
      - UNSECURE_AUTO_LOGIN_EMAIL=$UNSECURE_AUTO_LOGIN_EMAIL
 | 
					 | 
				
			||||||
							
								
								
									
										166
									
								
								moneymgr_backend/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						@@ -36,9 +36,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "actix-files"
 | 
					name = "actix-files"
 | 
				
			||||||
version = "0.6.8"
 | 
					version = "0.6.6"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "6c0d87f10d70e2948ad40e8edea79c8e77c6c66e0250a4c1f09b690465199576"
 | 
					checksum = "0773d59061dedb49a8aed04c67291b9d8cf2fe0b60130a381aab53c6dd86e9be"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "actix-http",
 | 
					 "actix-http",
 | 
				
			||||||
 "actix-service",
 | 
					 "actix-service",
 | 
				
			||||||
@@ -46,7 +46,7 @@ dependencies = [
 | 
				
			|||||||
 "actix-web",
 | 
					 "actix-web",
 | 
				
			||||||
 "bitflags",
 | 
					 "bitflags",
 | 
				
			||||||
 "bytes",
 | 
					 "bytes",
 | 
				
			||||||
 "derive_more 2.0.1",
 | 
					 "derive_more 0.99.20",
 | 
				
			||||||
 "futures-core",
 | 
					 "futures-core",
 | 
				
			||||||
 "http-range",
 | 
					 "http-range",
 | 
				
			||||||
 "log",
 | 
					 "log",
 | 
				
			||||||
@@ -87,7 +87,7 @@ dependencies = [
 | 
				
			|||||||
 "mime",
 | 
					 "mime",
 | 
				
			||||||
 "percent-encoding",
 | 
					 "percent-encoding",
 | 
				
			||||||
 "pin-project-lite",
 | 
					 "pin-project-lite",
 | 
				
			||||||
 "rand 0.9.2",
 | 
					 "rand 0.9.1",
 | 
				
			||||||
 "sha1",
 | 
					 "sha1",
 | 
				
			||||||
 "smallvec",
 | 
					 "smallvec",
 | 
				
			||||||
 "tokio",
 | 
					 "tokio",
 | 
				
			||||||
@@ -364,6 +364,12 @@ dependencies = [
 | 
				
			|||||||
 "alloc-no-stdlib",
 | 
					 "alloc-no-stdlib",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "android-tzdata"
 | 
				
			||||||
 | 
					version = "0.1.1"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "android_system_properties"
 | 
					name = "android_system_properties"
 | 
				
			||||||
version = "0.1.5"
 | 
					version = "0.1.5"
 | 
				
			||||||
@@ -425,9 +431,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "anyhow"
 | 
					name = "anyhow"
 | 
				
			||||||
version = "1.0.100"
 | 
					version = "1.0.98"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
 | 
					checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "arbitrary"
 | 
					name = "arbitrary"
 | 
				
			||||||
@@ -560,9 +566,9 @@ checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "binstring"
 | 
					name = "binstring"
 | 
				
			||||||
version = "0.1.7"
 | 
					version = "0.1.6"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef"
 | 
					checksum = "9a3a3c2603413428303761fae99d4b6d936404208221a44eba47d7c1e6dd03a3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "bitflags"
 | 
					name = "bitflags"
 | 
				
			||||||
@@ -592,9 +598,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "block-buffer"
 | 
					name = "block-buffer"
 | 
				
			||||||
version = "0.11.0-rc.5"
 | 
					version = "0.11.0-rc.4"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "e9ef36a6fcdb072aa548f3da057640ec10859eb4e91ddf526ee648d50c76a949"
 | 
					checksum = "a229bfd78e4827c91b9b95784f69492c1b77c1ab75a45a8a037b139215086f94"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "hybrid-array",
 | 
					 "hybrid-array",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -694,15 +700,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "chrono"
 | 
					name = "chrono"
 | 
				
			||||||
version = "0.4.42"
 | 
					version = "0.4.41"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
 | 
					checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "android-tzdata",
 | 
				
			||||||
 "iana-time-zone",
 | 
					 "iana-time-zone",
 | 
				
			||||||
 "js-sys",
 | 
					 "js-sys",
 | 
				
			||||||
 "num-traits",
 | 
					 "num-traits",
 | 
				
			||||||
 "wasm-bindgen",
 | 
					 "wasm-bindgen",
 | 
				
			||||||
 "windows-link 0.2.0",
 | 
					 "windows-link",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -717,9 +724,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "clap"
 | 
					name = "clap"
 | 
				
			||||||
version = "4.5.51"
 | 
					version = "4.5.38"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5"
 | 
					checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "clap_builder",
 | 
					 "clap_builder",
 | 
				
			||||||
 "clap_derive",
 | 
					 "clap_derive",
 | 
				
			||||||
@@ -727,9 +734,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "clap_builder"
 | 
					name = "clap_builder"
 | 
				
			||||||
version = "4.5.51"
 | 
					version = "4.5.38"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a"
 | 
					checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "anstream",
 | 
					 "anstream",
 | 
				
			||||||
 "anstyle",
 | 
					 "anstyle",
 | 
				
			||||||
@@ -739,9 +746,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "clap_derive"
 | 
					name = "clap_derive"
 | 
				
			||||||
version = "4.5.49"
 | 
					version = "4.5.32"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
 | 
					checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "heck",
 | 
					 "heck",
 | 
				
			||||||
 "proc-macro2",
 | 
					 "proc-macro2",
 | 
				
			||||||
@@ -941,18 +948,18 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "crypto-common"
 | 
					name = "crypto-common"
 | 
				
			||||||
version = "0.2.0-rc.4"
 | 
					version = "0.2.0-rc.2"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "6a8235645834fbc6832939736ce2f2d08192652269e11010a6240f61b908a1c6"
 | 
					checksum = "170d71b5b14dec99db7739f6fc7d6ec2db80b78c3acb77db48392ccc3d8a9ea0"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "hybrid-array",
 | 
					 "hybrid-array",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "ct-codecs"
 | 
					name = "ct-codecs"
 | 
				
			||||||
version = "1.1.6"
 | 
					version = "1.1.5"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "9b10589d1a5e400d61f9f38f12f884cfd080ff345de8f17efda36fe0e4a02aa8"
 | 
					checksum = "dd0d274c65cbc1c34703d2fc2ce0fb892ff68f4516b677671a2f238a30b9b2b2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "ctr"
 | 
					name = "ctr"
 | 
				
			||||||
@@ -1093,9 +1100,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "diesel"
 | 
					name = "diesel"
 | 
				
			||||||
version = "2.2.12"
 | 
					version = "2.2.10"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "229850a212cd9b84d4f0290ad9d294afc0ae70fccaa8949dbe8b43ffafa1e20c"
 | 
					checksum = "ff3e1edb1f37b4953dd5176916347289ed43d7119cc2e6c7c3f7849ff44ea506"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "bitflags",
 | 
					 "bitflags",
 | 
				
			||||||
 "byteorder",
 | 
					 "byteorder",
 | 
				
			||||||
@@ -1152,13 +1159,13 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "digest"
 | 
					name = "digest"
 | 
				
			||||||
version = "0.11.0-rc.3"
 | 
					version = "0.11.0-pre.10"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "dac89f8a64533a9b0eaa73a68e424db0fb1fd6271c74cc0125336a05f090568d"
 | 
					checksum = "6c478574b20020306f98d61c8ca3322d762e1ff08117422ac6106438605ea516"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "block-buffer 0.11.0-rc.5",
 | 
					 "block-buffer 0.11.0-rc.4",
 | 
				
			||||||
 "const-oid 0.10.1",
 | 
					 "const-oid 0.10.1",
 | 
				
			||||||
 "crypto-common 0.2.0-rc.4",
 | 
					 "crypto-common 0.2.0-rc.2",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -1599,18 +1606,18 @@ checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "hmac-sha256"
 | 
					name = "hmac-sha256"
 | 
				
			||||||
version = "1.1.12"
 | 
					version = "1.1.8"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425"
 | 
					checksum = "4a8575493d277c9092b988c780c94737fb9fd8651a1001e16bee3eccfc1baedb"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "digest 0.10.7",
 | 
					 "digest 0.10.7",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "hmac-sha512"
 | 
					name = "hmac-sha512"
 | 
				
			||||||
version = "1.1.7"
 | 
					version = "1.1.6"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "e89e8d20b3799fa526152a5301a771eaaad80857f83e01b23216ceaafb2d9280"
 | 
					checksum = "b0b3a0f572aa8389d325f5852b9e0a333a15b0f86ecccbb3fdb6e97cd86dc67c"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "digest 0.10.7",
 | 
					 "digest 0.10.7",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -1689,9 +1696,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "hybrid-array"
 | 
					name = "hybrid-array"
 | 
				
			||||||
version = "0.4.5"
 | 
					version = "0.3.1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "f471e0a81b2f90ffc0cb2f951ae04da57de8baa46fa99112b062a5173a5088d0"
 | 
					checksum = "891d15931895091dea5c47afa5b3c9a01ba634b311919fd4d41388fa0e3d76af"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "typenum",
 | 
					 "typenum",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -1998,9 +2005,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "jwt-simple"
 | 
					name = "jwt-simple"
 | 
				
			||||||
version = "0.12.13"
 | 
					version = "0.12.12"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "6ad8761f175784dfbb83709f322fc4daf6b27afd5bf375492f2876f9e925ef5a"
 | 
					checksum = "731011e9647a71ff4f8474176ff6ce6e0d2de87a0173f15613af3a84c3e3401a"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "anyhow",
 | 
					 "anyhow",
 | 
				
			||||||
 "binstring",
 | 
					 "binstring",
 | 
				
			||||||
@@ -2018,7 +2025,7 @@ dependencies = [
 | 
				
			|||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
 "superboring",
 | 
					 "superboring",
 | 
				
			||||||
 "thiserror 2.0.17",
 | 
					 "thiserror 2.0.12",
 | 
				
			||||||
 "zeroize",
 | 
					 "zeroize",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2044,9 +2051,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "lazy-regex"
 | 
					name = "lazy-regex"
 | 
				
			||||||
version = "3.4.2"
 | 
					version = "3.4.1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "191898e17ddee19e60bccb3945aa02339e81edd4a8c50e21fd4d48cdecda7b29"
 | 
					checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "lazy-regex-proc_macros",
 | 
					 "lazy-regex-proc_macros",
 | 
				
			||||||
 "once_cell",
 | 
					 "once_cell",
 | 
				
			||||||
@@ -2055,9 +2062,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "lazy-regex-proc_macros"
 | 
					name = "lazy-regex-proc_macros"
 | 
				
			||||||
version = "3.4.2"
 | 
					version = "3.4.1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "c35dc8b0da83d1a9507e12122c80dea71a9c7c613014347392483a83ea593e04"
 | 
					checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2",
 | 
					 "proc-macro2",
 | 
				
			||||||
 "quote",
 | 
					 "quote",
 | 
				
			||||||
@@ -2150,9 +2157,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "log"
 | 
					name = "log"
 | 
				
			||||||
version = "0.4.28"
 | 
					version = "0.4.27"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
 | 
					checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "lzma-rs"
 | 
					name = "lzma-rs"
 | 
				
			||||||
@@ -2291,15 +2298,15 @@ dependencies = [
 | 
				
			|||||||
 "light-openid",
 | 
					 "light-openid",
 | 
				
			||||||
 "log",
 | 
					 "log",
 | 
				
			||||||
 "mime_guess",
 | 
					 "mime_guess",
 | 
				
			||||||
 "rand 0.9.2",
 | 
					 "rand 0.9.1",
 | 
				
			||||||
 "rust-embed",
 | 
					 "rust-embed",
 | 
				
			||||||
 "rust-s3",
 | 
					 "rust-s3",
 | 
				
			||||||
 "rust_xlsxwriter",
 | 
					 "rust_xlsxwriter",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
 "sha2 0.11.0-rc.2",
 | 
					 "sha2 0.11.0-pre.5",
 | 
				
			||||||
 "tempfile",
 | 
					 "tempfile",
 | 
				
			||||||
 "thiserror 2.0.17",
 | 
					 "thiserror 2.0.12",
 | 
				
			||||||
 "tokio",
 | 
					 "tokio",
 | 
				
			||||||
 "zip",
 | 
					 "zip",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -2734,9 +2741,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "rand"
 | 
					name = "rand"
 | 
				
			||||||
version = "0.9.2"
 | 
					version = "0.9.1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
 | 
					checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "rand_chacha 0.9.0",
 | 
					 "rand_chacha 0.9.0",
 | 
				
			||||||
 "rand_core 0.9.3",
 | 
					 "rand_core 0.9.3",
 | 
				
			||||||
@@ -3205,28 +3212,18 @@ checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "serde"
 | 
					name = "serde"
 | 
				
			||||||
version = "1.0.228"
 | 
					version = "1.0.219"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
 | 
					checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
 | 
				
			||||||
dependencies = [
 | 
					 | 
				
			||||||
 "serde_core",
 | 
					 | 
				
			||||||
 "serde_derive",
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[[package]]
 | 
					 | 
				
			||||||
name = "serde_core"
 | 
					 | 
				
			||||||
version = "1.0.228"
 | 
					 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					 | 
				
			||||||
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
 | 
					 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "serde_derive",
 | 
					 "serde_derive",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "serde_derive"
 | 
					name = "serde_derive"
 | 
				
			||||||
version = "1.0.228"
 | 
					version = "1.0.219"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
 | 
					checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2",
 | 
					 "proc-macro2",
 | 
				
			||||||
 "quote",
 | 
					 "quote",
 | 
				
			||||||
@@ -3235,15 +3232,14 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "serde_json"
 | 
					name = "serde_json"
 | 
				
			||||||
version = "1.0.145"
 | 
					version = "1.0.140"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
 | 
					checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "itoa",
 | 
					 "itoa",
 | 
				
			||||||
 "memchr",
 | 
					 "memchr",
 | 
				
			||||||
 "ryu",
 | 
					 "ryu",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_core",
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -3300,13 +3296,13 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "sha2"
 | 
					name = "sha2"
 | 
				
			||||||
version = "0.11.0-rc.2"
 | 
					version = "0.11.0-pre.5"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "d1e3878ab0f98e35b2df35fe53201d088299b41a6bb63e3e34dada2ac4abd924"
 | 
					checksum = "19b4241d1a56954dce82cecda5c8e9c794eef6f53abe5e5216bac0a0ea71ffa7"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "cfg-if",
 | 
					 "cfg-if",
 | 
				
			||||||
 "cpufeatures",
 | 
					 "cpufeatures",
 | 
				
			||||||
 "digest 0.11.0-rc.3",
 | 
					 "digest 0.11.0-pre.10",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -3494,11 +3490,11 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "thiserror"
 | 
					name = "thiserror"
 | 
				
			||||||
version = "2.0.17"
 | 
					version = "2.0.12"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
 | 
					checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "thiserror-impl 2.0.17",
 | 
					 "thiserror-impl 2.0.12",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -3514,9 +3510,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "thiserror-impl"
 | 
					name = "thiserror-impl"
 | 
				
			||||||
version = "2.0.17"
 | 
					version = "2.0.12"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
 | 
					checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "proc-macro2",
 | 
					 "proc-macro2",
 | 
				
			||||||
 "quote",
 | 
					 "quote",
 | 
				
			||||||
@@ -3575,9 +3571,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "tokio"
 | 
					name = "tokio"
 | 
				
			||||||
version = "1.45.1"
 | 
					version = "1.45.0"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779"
 | 
					checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "backtrace",
 | 
					 "backtrace",
 | 
				
			||||||
 "bytes",
 | 
					 "bytes",
 | 
				
			||||||
@@ -3998,7 +3994,7 @@ checksum = "46ec44dc15085cea82cf9c78f85a9114c463a369786585ad2882d1ff0b0acf40"
 | 
				
			|||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "windows-implement",
 | 
					 "windows-implement",
 | 
				
			||||||
 "windows-interface",
 | 
					 "windows-interface",
 | 
				
			||||||
 "windows-link 0.1.1",
 | 
					 "windows-link",
 | 
				
			||||||
 "windows-result",
 | 
					 "windows-result",
 | 
				
			||||||
 "windows-strings 0.4.1",
 | 
					 "windows-strings 0.4.1",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -4031,12 +4027,6 @@ version = "0.1.1"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
 | 
					checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					 | 
				
			||||||
name = "windows-link"
 | 
					 | 
				
			||||||
version = "0.2.0"
 | 
					 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					 | 
				
			||||||
checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "windows-registry"
 | 
					name = "windows-registry"
 | 
				
			||||||
version = "0.4.0"
 | 
					version = "0.4.0"
 | 
				
			||||||
@@ -4054,7 +4044,7 @@ version = "0.3.3"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "4b895b5356fc36103d0f64dd1e94dfa7ac5633f1c9dd6e80fe9ec4adef69e09d"
 | 
					checksum = "4b895b5356fc36103d0f64dd1e94dfa7ac5633f1c9dd6e80fe9ec4adef69e09d"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "windows-link 0.1.1",
 | 
					 "windows-link",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -4063,7 +4053,7 @@ version = "0.3.1"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
 | 
					checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "windows-link 0.1.1",
 | 
					 "windows-link",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -4072,7 +4062,7 @@ version = "0.4.1"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "2a7ab927b2637c19b3dbe0965e75d8f2d30bdd697a1516191cad2ec4df8fb28a"
 | 
					checksum = "2a7ab927b2637c19b3dbe0965e75d8f2d30bdd697a1516191cad2ec4df8fb28a"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "windows-link 0.1.1",
 | 
					 "windows-link",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
@@ -4321,9 +4311,9 @@ dependencies = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "zeroize"
 | 
					name = "zeroize"
 | 
				
			||||||
version = "1.8.2"
 | 
					version = "1.8.1"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
 | 
					checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "zeroize_derive",
 | 
					 "zeroize_derive",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,35 +5,35 @@ edition = "2024"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
env_logger = "0.11.8"
 | 
					env_logger = "0.11.8"
 | 
				
			||||||
log = "0.4.28"
 | 
					log = "0.4.27"
 | 
				
			||||||
diesel = { version = "2.2.12", features = ["postgres", "r2d2"] }
 | 
					diesel = { version = "2.2.10", features = ["postgres", "r2d2"] }
 | 
				
			||||||
diesel_migrations = "2.2.0"
 | 
					diesel_migrations = "2.2.0"
 | 
				
			||||||
clap = { version = "4.5.51", features = ["env", "derive"] }
 | 
					clap = { version = "4.5.38", features = ["env", "derive"] }
 | 
				
			||||||
actix-web = "4.11.0"
 | 
					actix-web = "4.11.0"
 | 
				
			||||||
actix-cors = "0.7.1"
 | 
					actix-cors = "0.7.1"
 | 
				
			||||||
actix-multipart = "0.7.2"
 | 
					actix-multipart = "0.7.2"
 | 
				
			||||||
actix-remote-ip = "0.1.0"
 | 
					actix-remote-ip = "0.1.0"
 | 
				
			||||||
actix-session = { version = "0.10.1", features = ["redis-session"] }
 | 
					actix-session = { version = "0.10.1", features = ["redis-session"] }
 | 
				
			||||||
actix-files = "0.6.8"
 | 
					actix-files = "0.6.6"
 | 
				
			||||||
lazy_static = "1.5.0"
 | 
					lazy_static = "1.5.0"
 | 
				
			||||||
anyhow = "1.0.100"
 | 
					anyhow = "1.0.98"
 | 
				
			||||||
serde = { version = "1.0.228", features = ["derive"] }
 | 
					serde = { version = "1.0.219", features = ["derive"] }
 | 
				
			||||||
rust-s3 = "0.36.0-beta.2"
 | 
					rust-s3 = "0.36.0-beta.2"
 | 
				
			||||||
thiserror = "2.0.17"
 | 
					thiserror = "2.0.12"
 | 
				
			||||||
tokio = "1.45.1"
 | 
					tokio = "1.45.0"
 | 
				
			||||||
futures-util = "0.3.31"
 | 
					futures-util = "0.3.31"
 | 
				
			||||||
serde_json = "1.0.145"
 | 
					serde_json = "1.0.140"
 | 
				
			||||||
light-openid = "1.0.4"
 | 
					light-openid = "1.0.4"
 | 
				
			||||||
rand = "0.9.2"
 | 
					rand = "0.9.1"
 | 
				
			||||||
ipnet = { version = "2.11.0", features = ["serde"] }
 | 
					ipnet = { version = "2.11.0", features = ["serde"] }
 | 
				
			||||||
lazy-regex = "3.4.2"
 | 
					lazy-regex = "3.4.1"
 | 
				
			||||||
jwt-simple = { version = "0.12.13", default-features = false, features = ["pure-rust"] }
 | 
					jwt-simple = { version = "0.12.11", default-features = false, features = ["pure-rust"] }
 | 
				
			||||||
mime_guess = "2.0.5"
 | 
					mime_guess = "2.0.5"
 | 
				
			||||||
rust-embed = { version = "8.7.2" }
 | 
					rust-embed = { version = "8.7.2" }
 | 
				
			||||||
sha2 = "0.11.0-rc.2"
 | 
					sha2 = "0.11.0-pre.5"
 | 
				
			||||||
base16ct = "0.2.0"
 | 
					base16ct = "0.2.0"
 | 
				
			||||||
httpdate = "1.0.3"
 | 
					httpdate = "1.0.3"
 | 
				
			||||||
chrono = "0.4.42"
 | 
					chrono = "0.4.41"
 | 
				
			||||||
tempfile = "3.20.0"
 | 
					tempfile = "3.20.0"
 | 
				
			||||||
zip = "3.0.0"
 | 
					zip = "3.0.0"
 | 
				
			||||||
rust_xlsxwriter = "0.87.0"
 | 
					rust_xlsxwriter = "0.87.0"
 | 
				
			||||||
@@ -22,10 +22,14 @@ pub struct AppConfig {
 | 
				
			|||||||
    #[clap(short = 'S', long, env, default_value = "")]
 | 
					    #[clap(short = 'S', long, env, default_value = "")]
 | 
				
			||||||
    secret: String,
 | 
					    secret: String,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Specify whether the cookie should be transmitted only over secure connections
 | 
				
			||||||
 | 
					    #[clap(long, env)]
 | 
				
			||||||
 | 
					    pub cookie_secure: bool,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Unsecure : for development, bypass authentication, using the account with the given
 | 
					    /// Unsecure : for development, bypass authentication, using the account with the given
 | 
				
			||||||
    /// email address by default
 | 
					    /// email address by default
 | 
				
			||||||
    #[clap(long, env)]
 | 
					    #[clap(long, env)]
 | 
				
			||||||
    unsecure_auto_login_email: Option<String>,
 | 
					    pub unsecure_auto_login_email: Option<String>,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// PostgreSQL database host
 | 
					    /// PostgreSQL database host
 | 
				
			||||||
    #[clap(long, env, default_value = "localhost")]
 | 
					    #[clap(long, env, default_value = "localhost")]
 | 
				
			||||||
@@ -122,14 +126,6 @@ pub struct AppConfig {
 | 
				
			|||||||
    /// Redis password
 | 
					    /// Redis password
 | 
				
			||||||
    #[clap(long, env, default_value = "secretredis")]
 | 
					    #[clap(long, env, default_value = "secretredis")]
 | 
				
			||||||
    redis_password: String,
 | 
					    redis_password: String,
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// Application download URL
 | 
					 | 
				
			||||||
    #[clap(
 | 
					 | 
				
			||||||
        long,
 | 
					 | 
				
			||||||
        env,
 | 
					 | 
				
			||||||
        default_value = "https://gitea.communiquons.org/pierre/MoneyMgr/releases/download/latest/moneymgr_mobile_arm64-v8a.apk"
 | 
					 | 
				
			||||||
    )]
 | 
					 | 
				
			||||||
    pub apk_download_url: String,
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lazy_static::lazy_static! {
 | 
					lazy_static::lazy_static! {
 | 
				
			||||||
@@ -144,17 +140,26 @@ impl AppConfig {
 | 
				
			|||||||
        &ARGS
 | 
					        &ARGS
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Get auto login email (if not empty)
 | 
					 | 
				
			||||||
    pub fn unsecure_auto_login_email(&self) -> Option<&str> {
 | 
					 | 
				
			||||||
        match self.unsecure_auto_login_email.as_deref() {
 | 
					 | 
				
			||||||
            None | Some("") => None,
 | 
					 | 
				
			||||||
            s => s,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// Check if auth is disabled
 | 
					    /// Check if auth is disabled
 | 
				
			||||||
    pub fn is_auth_disabled(&self) -> bool {
 | 
					    pub fn is_auth_disabled(&self) -> bool {
 | 
				
			||||||
        self.unsecure_auto_login_email().is_some()
 | 
					        self.unsecure_auto_login_email.is_some()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Get auth cookie domain
 | 
				
			||||||
 | 
					    pub fn cookie_domain(&self) -> Option<String> {
 | 
				
			||||||
 | 
					        if cfg!(debug_assertions) {
 | 
				
			||||||
 | 
					            let domain = self.website_origin.split_once("://")?.1;
 | 
				
			||||||
 | 
					            Some(
 | 
				
			||||||
 | 
					                domain
 | 
				
			||||||
 | 
					                    .split_once(':')
 | 
				
			||||||
 | 
					                    .map(|s| s.0)
 | 
				
			||||||
 | 
					                    .unwrap_or(domain)
 | 
				
			||||||
 | 
					                    .to_string(),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // In release mode, the web app is hosted on the same origin as the API
 | 
				
			||||||
 | 
					            None
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Get app secret
 | 
					    /// Get app secret
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,7 @@ pub async fn create_bucket_if_required() -> anyhow::Result<()> {
 | 
				
			|||||||
            log::warn!("The bucket does not seem to exists, trying to create it!")
 | 
					            log::warn!("The bucket does not seem to exists, trying to create it!")
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Err(e) => {
 | 
					        Err(e) => {
 | 
				
			||||||
            log::error!("Got unexpected error when querying bucket info: {e}");
 | 
					            log::error!("Got unexpected error when querying bucket info: {}", e);
 | 
				
			||||||
            return Err(BucketServiceError::FailedFetchBucketInfo.into());
 | 
					            return Err(BucketServiceError::FailedFetchBucketInfo.into());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,20 +63,21 @@ pub async fn download(
 | 
				
			|||||||
pub async fn serve_file(req: HttpRequest, file: &File, download_file: bool) -> HttpResult {
 | 
					pub async fn serve_file(req: HttpRequest, file: &File, download_file: bool) -> HttpResult {
 | 
				
			||||||
    if !download_file {
 | 
					    if !download_file {
 | 
				
			||||||
        // Check if the browser already knows the etag
 | 
					        // Check if the browser already knows the etag
 | 
				
			||||||
        if let Some(c) = req.headers().get(header::IF_NONE_MATCH)
 | 
					        if let Some(c) = req.headers().get(header::IF_NONE_MATCH) {
 | 
				
			||||||
            && c.to_str().unwrap_or("") == file.sha512.as_str()
 | 
					            if c.to_str().unwrap_or("") == file.sha512.as_str() {
 | 
				
			||||||
        {
 | 
					                return Ok(HttpResponse::NotModified().finish());
 | 
				
			||||||
            return Ok(HttpResponse::NotModified().finish());
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check if the browser already knows the file by date
 | 
					        // Check if the browser already knows the file by date
 | 
				
			||||||
        if let Some(c) = req.headers().get(header::IF_MODIFIED_SINCE) {
 | 
					        if let Some(c) = req.headers().get(header::IF_MODIFIED_SINCE) {
 | 
				
			||||||
            let date_str = c.to_str().unwrap_or("");
 | 
					            let date_str = c.to_str().unwrap_or("");
 | 
				
			||||||
            if let Ok(date) = httpdate::parse_http_date(date_str)
 | 
					            if let Ok(date) = httpdate::parse_http_date(date_str) {
 | 
				
			||||||
                && date.add(Duration::from_secs(1))
 | 
					                if date.add(Duration::from_secs(1))
 | 
				
			||||||
                    >= time_utils::unix_to_system_time(file.time_create as u64)
 | 
					                    >= time_utils::unix_to_system_time(file.time_create as u64)
 | 
				
			||||||
            {
 | 
					                {
 | 
				
			||||||
                return Ok(HttpResponse::NotModified().finish());
 | 
					                    return Ok(HttpResponse::NotModified().finish());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,10 +64,10 @@ pub async fn get_list_of_account(
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if let Some(limit) = query.limit
 | 
					    if let Some(limit) = query.limit {
 | 
				
			||||||
        && list.len() > limit
 | 
					        if list.len() > limit {
 | 
				
			||||||
    {
 | 
					            list = list[..limit].to_vec();
 | 
				
			||||||
        list = list[..limit].to_vec();
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(HttpResponse::Ok().json(list))
 | 
					    Ok(HttpResponse::Ok().json(list))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,7 +70,6 @@ impl Default for ServerConstraints {
 | 
				
			|||||||
struct ServerConfig {
 | 
					struct ServerConfig {
 | 
				
			||||||
    auth_disabled: bool,
 | 
					    auth_disabled: bool,
 | 
				
			||||||
    oidc_provider_name: &'static str,
 | 
					    oidc_provider_name: &'static str,
 | 
				
			||||||
    apk_download_url: &'static str,
 | 
					 | 
				
			||||||
    accounts_types: &'static [AccountTypeDesc],
 | 
					    accounts_types: &'static [AccountTypeDesc],
 | 
				
			||||||
    constraints: ServerConstraints,
 | 
					    constraints: ServerConstraints,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -80,7 +79,6 @@ impl Default for ServerConfig {
 | 
				
			|||||||
        Self {
 | 
					        Self {
 | 
				
			||||||
            auth_disabled: AppConfig::get().is_auth_disabled(),
 | 
					            auth_disabled: AppConfig::get().is_auth_disabled(),
 | 
				
			||||||
            oidc_provider_name: AppConfig::get().openid_provider().name,
 | 
					            oidc_provider_name: AppConfig::get().openid_provider().name,
 | 
				
			||||||
            apk_download_url: AppConfig::get().apk_download_url.as_str(),
 | 
					 | 
				
			||||||
            constraints: Default::default(),
 | 
					            constraints: Default::default(),
 | 
				
			||||||
            accounts_types: &ACCOUNT_TYPES,
 | 
					            accounts_types: &ACCOUNT_TYPES,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,7 +50,7 @@ impl FromRequest for AccountInPath {
 | 
				
			|||||||
            Self::load_account_from_path(&auth, account_id)
 | 
					            Self::load_account_from_path(&auth, account_id)
 | 
				
			||||||
                .await
 | 
					                .await
 | 
				
			||||||
                .map_err(|e| {
 | 
					                .map_err(|e| {
 | 
				
			||||||
                    log::error!("Failed to extract account ID from URL! {e}");
 | 
					                    log::error!("Failed to extract account ID from URL! {}", e);
 | 
				
			||||||
                    actix_web::error::ErrorNotFound("Could not fetch account information!")
 | 
					                    actix_web::error::ErrorNotFound("Could not fetch account information!")
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ impl FromRequest for AuthExtractor {
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Box::pin(async move {
 | 
					        Box::pin(async move {
 | 
				
			||||||
            // Check for authentication using API token
 | 
					            // Check for authentication using OpenID
 | 
				
			||||||
            if let Some(token) = req.headers().get(constants::API_TOKEN_HEADER) {
 | 
					            if let Some(token) = req.headers().get(constants::API_TOKEN_HEADER) {
 | 
				
			||||||
                let Ok(jwt_token) = token.to_str() else {
 | 
					                let Ok(jwt_token) = token.to_str() else {
 | 
				
			||||||
                    return Err(actix_web::error::ErrorBadRequest(
 | 
					                    return Err(actix_web::error::ErrorBadRequest(
 | 
				
			||||||
@@ -120,16 +120,16 @@ impl FromRequest for AuthExtractor {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Check IP restriction
 | 
					                // Check IP restriction
 | 
				
			||||||
                if let Some(net) = token.ip_net()
 | 
					                if let Some(net) = token.ip_net() {
 | 
				
			||||||
                    && !net.contains(&remote_ip.0)
 | 
					                    if !net.contains(&remote_ip.0) {
 | 
				
			||||||
                {
 | 
					                        log::error!(
 | 
				
			||||||
                    log::error!(
 | 
					                            "Trying to use token {:?} from unauthorized IP address: {remote_ip:?}",
 | 
				
			||||||
                        "Trying to use token {:?} from unauthorized IP address: {remote_ip:?}",
 | 
					                            token.id()
 | 
				
			||||||
                        token.id()
 | 
					                        );
 | 
				
			||||||
                    );
 | 
					                        return Err(actix_web::error::ErrorForbidden(
 | 
				
			||||||
                    return Err(actix_web::error::ErrorForbidden(
 | 
					                            "This token cannot be used from this IP address!",
 | 
				
			||||||
                        "This token cannot be used from this IP address!",
 | 
					                        ));
 | 
				
			||||||
                    ));
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Check for write access
 | 
					                // Check for write access
 | 
				
			||||||
@@ -163,15 +163,15 @@ impl FromRequest for AuthExtractor {
 | 
				
			|||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Update last use (if needed)
 | 
					                // Update last use (if needed)
 | 
				
			||||||
                if token.shall_update_time_used()
 | 
					                if token.shall_update_time_used() {
 | 
				
			||||||
                    && let Err(e) = tokens_service::update_time_used(&token).await
 | 
					                    if let Err(e) = tokens_service::update_time_used(&token).await {
 | 
				
			||||||
                {
 | 
					                        log::error!("Failed to refresh last usage of token! {}", e);
 | 
				
			||||||
                    log::error!("Failed to refresh last usage of token! {e}");
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Handle tokens expiration
 | 
					                // Handle tokens expiration
 | 
				
			||||||
                if token.is_expired() {
 | 
					                if token.is_expired() {
 | 
				
			||||||
                    log::error!("Attempted to use expired token! {token:?}");
 | 
					                    log::error!("Attempted to use expired token! {:?}", token);
 | 
				
			||||||
                    return Err(actix_web::error::ErrorBadRequest("Token has expired!"));
 | 
					                    return Err(actix_web::error::ErrorBadRequest("Token has expired!"));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -182,7 +182,7 @@ impl FromRequest for AuthExtractor {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Check if login is hard-coded as program argument
 | 
					            // Check if login is hard-coded as program argument
 | 
				
			||||||
            if let Some(email) = &AppConfig::get().unsecure_auto_login_email() {
 | 
					            if let Some(email) = &AppConfig::get().unsecure_auto_login_email {
 | 
				
			||||||
                let user = users_service::get_user_by_email(email).map_err(|e| {
 | 
					                let user = users_service::get_user_by_email(email).map_err(|e| {
 | 
				
			||||||
                    log::error!("Failed to retrieve dev user: {e}");
 | 
					                    log::error!("Failed to retrieve dev user: {e}");
 | 
				
			||||||
                    ErrorPreconditionFailed("Unable to retrieve dev user!")
 | 
					                    ErrorPreconditionFailed("Unable to retrieve dev user!")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ impl FromRequest for FileIdExtractor {
 | 
				
			|||||||
            Self::load_file_from_path(&auth, file_id)
 | 
					            Self::load_file_from_path(&auth, file_id)
 | 
				
			||||||
                .await
 | 
					                .await
 | 
				
			||||||
                .map_err(|e| {
 | 
					                .map_err(|e| {
 | 
				
			||||||
                    log::error!("Failed to extract file ID from URL! {e}");
 | 
					                    log::error!("Failed to extract file ID from URL! {}", e);
 | 
				
			||||||
                    actix_web::error::ErrorNotFound("Could not fetch file information!")
 | 
					                    actix_web::error::ErrorNotFound("Could not fetch file information!")
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,7 +50,7 @@ impl FromRequest for InboxEntryInPath {
 | 
				
			|||||||
            Self::load_inbox_entry_from_path(&auth, entry_id)
 | 
					            Self::load_inbox_entry_from_path(&auth, entry_id)
 | 
				
			||||||
                .await
 | 
					                .await
 | 
				
			||||||
                .map_err(|e| {
 | 
					                .map_err(|e| {
 | 
				
			||||||
                    log::error!("Failed to extract inbox entry ID from URL! {e}");
 | 
					                    log::error!("Failed to extract inbox entry ID from URL! {}", e);
 | 
				
			||||||
                    actix_web::error::ErrorNotFound("Could not fetch inbox entry information!")
 | 
					                    actix_web::error::ErrorNotFound("Could not fetch inbox entry information!")
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ impl FromRequest for MovementInPath {
 | 
				
			|||||||
            Self::load_movement_from_path(&auth, account_id)
 | 
					            Self::load_movement_from_path(&auth, account_id)
 | 
				
			||||||
                .await
 | 
					                .await
 | 
				
			||||||
                .map_err(|e| {
 | 
					                .map_err(|e| {
 | 
				
			||||||
                    log::error!("Failed to extract movement ID from URL! {e}");
 | 
					                    log::error!("Failed to extract movement ID from URL! {}", e);
 | 
				
			||||||
                    actix_web::error::ErrorNotFound("Could not fetch movement information!")
 | 
					                    actix_web::error::ErrorNotFound("Could not fetch movement information!")
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ async fn main() -> std::io::Result<()> {
 | 
				
			|||||||
    db_connection::initialize_conn().expect("Failed to connect to PostgresSQL database!");
 | 
					    db_connection::initialize_conn().expect("Failed to connect to PostgresSQL database!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Auto create default account, if requested
 | 
					    // Auto create default account, if requested
 | 
				
			||||||
    if let Some(mail) = &AppConfig::get().unsecure_auto_login_email() {
 | 
					    if let Some(mail) = &AppConfig::get().unsecure_auto_login_email {
 | 
				
			||||||
        users_service::create_or_update_user(mail, "Anonymous")
 | 
					        users_service::create_or_update_user(mail, "Anonymous")
 | 
				
			||||||
            .await
 | 
					            .await
 | 
				
			||||||
            .expect("Failed to create default account!");
 | 
					            .expect("Failed to create default account!");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,10 +23,10 @@ impl UpdateInboxEntryQuery {
 | 
				
			|||||||
        let constraints = ServerConstraints::default();
 | 
					        let constraints = ServerConstraints::default();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check inbox entry label
 | 
					        // Check inbox entry label
 | 
				
			||||||
        if let Some(label) = &self.label
 | 
					        if let Some(label) = &self.label {
 | 
				
			||||||
            && !constraints.inbox_entry_label.check_str(label)
 | 
					            if !constraints.inbox_entry_label.check_str(label) {
 | 
				
			||||||
        {
 | 
					                return Ok(Some("Invalid inbox entry label length!"));
 | 
				
			||||||
            return Ok(Some("Invalid inbox entry label length!"));
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check the referenced movement
 | 
					        // Check the referenced movement
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,11 +55,12 @@ impl UpdateMovementQuery {
 | 
				
			|||||||
        if let Ok(movement) =
 | 
					        if let Ok(movement) =
 | 
				
			||||||
            get_by_account_label_amount_time(self.account_id, &self.label, self.amount, self.time)
 | 
					            get_by_account_label_amount_time(self.account_id, &self.label, self.amount, self.time)
 | 
				
			||||||
                .await
 | 
					                .await
 | 
				
			||||||
            && Some(movement.id()) != ref_movement
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return Ok(Some(
 | 
					            if Some(movement.id()) != ref_movement {
 | 
				
			||||||
                "A movement taken at the same time with the same label and the same amount already exists!",
 | 
					                return Ok(Some(
 | 
				
			||||||
            ));
 | 
					                    "A movement taken at the same time with the same label and the same amount already exists!",
 | 
				
			||||||
 | 
					                ));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ok(None)
 | 
					        Ok(None)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										49
									
								
								moneymgr_mobile/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,49 +0,0 @@
 | 
				
			|||||||
# Miscellaneous
 | 
					 | 
				
			||||||
*.class
 | 
					 | 
				
			||||||
*.log
 | 
					 | 
				
			||||||
*.pyc
 | 
					 | 
				
			||||||
*.swp
 | 
					 | 
				
			||||||
.DS_Store
 | 
					 | 
				
			||||||
.atom/
 | 
					 | 
				
			||||||
.build/
 | 
					 | 
				
			||||||
.buildlog/
 | 
					 | 
				
			||||||
.history
 | 
					 | 
				
			||||||
.svn/
 | 
					 | 
				
			||||||
.swiftpm/
 | 
					 | 
				
			||||||
migrate_working_dir/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# IntelliJ related
 | 
					 | 
				
			||||||
*.iml
 | 
					 | 
				
			||||||
*.ipr
 | 
					 | 
				
			||||||
*.iws
 | 
					 | 
				
			||||||
.idea/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The .vscode folder contains launch configuration and tasks you configure in
 | 
					 | 
				
			||||||
# VS Code which you may wish to be included in version control, so this line
 | 
					 | 
				
			||||||
# is commented out by default.
 | 
					 | 
				
			||||||
#.vscode/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Flutter/Dart/Pub related
 | 
					 | 
				
			||||||
**/doc/api/
 | 
					 | 
				
			||||||
**/ios/Flutter/.last_build_id
 | 
					 | 
				
			||||||
.dart_tool/
 | 
					 | 
				
			||||||
.flutter-plugins
 | 
					 | 
				
			||||||
.flutter-plugins-dependencies
 | 
					 | 
				
			||||||
.pub-cache/
 | 
					 | 
				
			||||||
.pub/
 | 
					 | 
				
			||||||
/build/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Symbolication related
 | 
					 | 
				
			||||||
app.*.symbols
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Obfuscation related
 | 
					 | 
				
			||||||
app.*.map.json
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Android Studio will place build artifacts here
 | 
					 | 
				
			||||||
/android/app/debug
 | 
					 | 
				
			||||||
/android/app/profile
 | 
					 | 
				
			||||||
/android/app/release
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*.g.dart
 | 
					 | 
				
			||||||
*.freezed.dart
 | 
					 | 
				
			||||||
@@ -1,45 +0,0 @@
 | 
				
			|||||||
# This file tracks properties of this Flutter project.
 | 
					 | 
				
			||||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file should be version controlled and should not be manually edited.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
version:
 | 
					 | 
				
			||||||
  revision: "fcf2c11572af6f390246c056bc905eca609533a0"
 | 
					 | 
				
			||||||
  channel: "stable"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
project_type: app
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Tracks metadata for the flutter migrate command
 | 
					 | 
				
			||||||
migration:
 | 
					 | 
				
			||||||
  platforms:
 | 
					 | 
				
			||||||
    - platform: root
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
    - platform: android
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
    - platform: ios
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
    - platform: linux
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
    - platform: macos
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
    - platform: web
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
    - platform: windows
 | 
					 | 
				
			||||||
      create_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
      base_revision: fcf2c11572af6f390246c056bc905eca609533a0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # User provided section
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # List of Local paths (relative to this file) that should be
 | 
					 | 
				
			||||||
  # ignored by the migrate tool.
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  # Files that are not part of the templates will be ignored by default.
 | 
					 | 
				
			||||||
  unmanaged_files:
 | 
					 | 
				
			||||||
    - 'lib/main.dart'
 | 
					 | 
				
			||||||
    - 'ios/Runner.xcodeproj/project.pbxproj'
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
# MoneyMgrMobile
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Mobile application for MoneyMgr, built using Flutter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Build
 | 
					 | 
				
			||||||
1. Run `flutter pub get` to get dependencies.
 | 
					 | 
				
			||||||
2. Run `dart run build_runner build` to generate required files. You can also run `dart run build_runner watch` to generate files and let [build_runner] watch for changes and rebuild if necessary.
 | 
					 | 
				
			||||||
@@ -1,28 +0,0 @@
 | 
				
			|||||||
# This file configures the analyzer, which statically analyzes Dart code to
 | 
					 | 
				
			||||||
# check for errors, warnings, and lints.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
 | 
					 | 
				
			||||||
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
 | 
					 | 
				
			||||||
# invoked from the command line by running `flutter analyze`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The following line activates a set of recommended lints for Flutter apps,
 | 
					 | 
				
			||||||
# packages, and plugins designed to encourage good coding practices.
 | 
					 | 
				
			||||||
include: package:flutter_lints/flutter.yaml
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
linter:
 | 
					 | 
				
			||||||
  # The lint rules applied to this project can be customized in the
 | 
					 | 
				
			||||||
  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
 | 
					 | 
				
			||||||
  # included above or to enable additional rules. A list of all available lints
 | 
					 | 
				
			||||||
  # and their documentation is published at https://dart.dev/lints.
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  # Instead of disabling a lint rule for the entire project in the
 | 
					 | 
				
			||||||
  # section below, it can also be suppressed for a single line of code
 | 
					 | 
				
			||||||
  # or a specific dart file by using the `// ignore: name_of_lint` and
 | 
					 | 
				
			||||||
  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
 | 
					 | 
				
			||||||
  # producing the lint.
 | 
					 | 
				
			||||||
  rules:
 | 
					 | 
				
			||||||
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
 | 
					 | 
				
			||||||
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Additional information about this file can be found at
 | 
					 | 
				
			||||||
# https://dart.dev/guides/language/analysis-options
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								moneymgr_mobile/android/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,16 +0,0 @@
 | 
				
			|||||||
publish_key.properties
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
gradle-wrapper.jar
 | 
					 | 
				
			||||||
/.gradle
 | 
					 | 
				
			||||||
/captures/
 | 
					 | 
				
			||||||
/gradlew
 | 
					 | 
				
			||||||
/gradlew.bat
 | 
					 | 
				
			||||||
/local.properties
 | 
					 | 
				
			||||||
GeneratedPluginRegistrant.java
 | 
					 | 
				
			||||||
.cxx/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Remember to never publicly share your keystore.
 | 
					 | 
				
			||||||
# See https://flutter.dev/to/reference-keystore
 | 
					 | 
				
			||||||
key.properties
 | 
					 | 
				
			||||||
**/*.keystore
 | 
					 | 
				
			||||||
**/*.jks
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
# Android version of application
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Generate keystore:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
keytool -genkey -v -keystore ./keystore.jks -keyalg RSA \
 | 
					 | 
				
			||||||
        -keysize 2048 -validity 20000 -alias moneymgr
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
@@ -1,74 +0,0 @@
 | 
				
			|||||||
import java.util.Properties
 | 
					 | 
				
			||||||
import java.io.FileInputStream
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
plugins {
 | 
					 | 
				
			||||||
    id("com.android.application")
 | 
					 | 
				
			||||||
    id("kotlin-android")
 | 
					 | 
				
			||||||
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
 | 
					 | 
				
			||||||
    id("dev.flutter.flutter-gradle-plugin")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
val keystoreProperties = Properties()
 | 
					 | 
				
			||||||
val keystorePropertiesFile = rootProject.file("publish_key.properties")
 | 
					 | 
				
			||||||
if (keystorePropertiesFile.exists()) {
 | 
					 | 
				
			||||||
    keystoreProperties.load(FileInputStream(keystorePropertiesFile))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
android {
 | 
					 | 
				
			||||||
    namespace = "org.communiquons.moneymgr"
 | 
					 | 
				
			||||||
    compileSdk = flutter.compileSdkVersion
 | 
					 | 
				
			||||||
    // ndkVersion = flutter.ndkVersion
 | 
					 | 
				
			||||||
    ndkVersion = "27.0.12077973"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compileOptions {
 | 
					 | 
				
			||||||
        sourceCompatibility = JavaVersion.VERSION_11
 | 
					 | 
				
			||||||
        targetCompatibility = JavaVersion.VERSION_11
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    kotlinOptions {
 | 
					 | 
				
			||||||
        jvmTarget = JavaVersion.VERSION_11.toString()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    defaultConfig {
 | 
					 | 
				
			||||||
        applicationId = "org.communiquons.moneymgr"
 | 
					 | 
				
			||||||
        // You can update the following values to match your application needs.
 | 
					 | 
				
			||||||
        // For more information, see: https://flutter.dev/to/review-gradle-config.
 | 
					 | 
				
			||||||
        minSdk = flutter.minSdkVersion
 | 
					 | 
				
			||||||
        targetSdk = flutter.targetSdkVersion
 | 
					 | 
				
			||||||
        versionCode = flutter.versionCode
 | 
					 | 
				
			||||||
        versionName = flutter.versionName
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    signingConfigs {
 | 
					 | 
				
			||||||
        create("publish") {
 | 
					 | 
				
			||||||
            keyAlias = keystoreProperties["keyAlias"] as String
 | 
					 | 
				
			||||||
            keyPassword = keystoreProperties["keyPassword"] as String
 | 
					 | 
				
			||||||
            storeFile = keystoreProperties["storeFile"]?.let { file(it) }
 | 
					 | 
				
			||||||
            storePassword = keystoreProperties["storePassword"] as String
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    buildTypes {
 | 
					 | 
				
			||||||
        release {
 | 
					 | 
				
			||||||
            // signingConfig = signingConfigs.getByName("debug")
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    flavorDimensions += "default"
 | 
					 | 
				
			||||||
    productFlavors {
 | 
					 | 
				
			||||||
        create("development") {
 | 
					 | 
				
			||||||
            dimension = "default"
 | 
					 | 
				
			||||||
            applicationIdSuffix = ".debug"
 | 
					 | 
				
			||||||
            signingConfig = signingConfigs.getByName("debug")
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        create("publish") {
 | 
					 | 
				
			||||||
            dimension = "default"
 | 
					 | 
				
			||||||
            signingConfig = signingConfigs.getByName("publish")
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
flutter {
 | 
					 | 
				
			||||||
    source = "../.."
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					 | 
				
			||||||
    xmlns:tools="http://schemas.android.com/tools">
 | 
					 | 
				
			||||||
    <!-- The INTERNET permission is required for development. Specifically,
 | 
					 | 
				
			||||||
         the Flutter tool needs it to communicate with the running application
 | 
					 | 
				
			||||||
         to allow setting breakpoints, to provide hot reload, etc.
 | 
					 | 
				
			||||||
    -->
 | 
					 | 
				
			||||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <!-- In debug mode, unsecure traffic is permitted -->
 | 
					 | 
				
			||||||
    <application
 | 
					 | 
				
			||||||
        android:label="MoneyMgr Debug"
 | 
					 | 
				
			||||||
        android:usesCleartextTraffic="true"
 | 
					 | 
				
			||||||
        tools:replace="android:label" />
 | 
					 | 
				
			||||||
</manifest>
 | 
					 | 
				
			||||||
@@ -1,48 +0,0 @@
 | 
				
			|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 | 
					 | 
				
			||||||
    <application
 | 
					 | 
				
			||||||
        android:label="MoneyMgr"
 | 
					 | 
				
			||||||
        android:name="${applicationName}"
 | 
					 | 
				
			||||||
        android:icon="@mipmap/launcher_icon">
 | 
					 | 
				
			||||||
        <activity
 | 
					 | 
				
			||||||
            android:name=".MainActivity"
 | 
					 | 
				
			||||||
            android:exported="true"
 | 
					 | 
				
			||||||
            android:launchMode="singleTop"
 | 
					 | 
				
			||||||
            android:taskAffinity=""
 | 
					 | 
				
			||||||
            android:theme="@style/LaunchTheme"
 | 
					 | 
				
			||||||
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
 | 
					 | 
				
			||||||
            android:hardwareAccelerated="true"
 | 
					 | 
				
			||||||
            android:windowSoftInputMode="adjustResize">
 | 
					 | 
				
			||||||
            <!-- Specifies an Android theme to apply to this Activity as soon as
 | 
					 | 
				
			||||||
                 the Android process has started. This theme is visible to the user
 | 
					 | 
				
			||||||
                 while the Flutter UI initializes. After that, this theme continues
 | 
					 | 
				
			||||||
                 to determine the Window background behind the Flutter UI. -->
 | 
					 | 
				
			||||||
            <meta-data
 | 
					 | 
				
			||||||
              android:name="io.flutter.embedding.android.NormalTheme"
 | 
					 | 
				
			||||||
              android:resource="@style/NormalTheme"
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
            <intent-filter>
 | 
					 | 
				
			||||||
                <action android:name="android.intent.action.MAIN"/>
 | 
					 | 
				
			||||||
                <category android:name="android.intent.category.LAUNCHER"/>
 | 
					 | 
				
			||||||
            </intent-filter>
 | 
					 | 
				
			||||||
        </activity>
 | 
					 | 
				
			||||||
        <!-- Don't delete the meta-data below.
 | 
					 | 
				
			||||||
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
 | 
					 | 
				
			||||||
        <meta-data
 | 
					 | 
				
			||||||
            android:name="flutterEmbedding"
 | 
					 | 
				
			||||||
            android:value="2" />
 | 
					 | 
				
			||||||
    </application>
 | 
					 | 
				
			||||||
    <!-- Required to query activities that can process text, see:
 | 
					 | 
				
			||||||
         https://developer.android.com/training/package-visibility and
 | 
					 | 
				
			||||||
         https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
 | 
					 | 
				
			||||||
    <queries>
 | 
					 | 
				
			||||||
        <intent>
 | 
					 | 
				
			||||||
            <action android:name="android.intent.action.PROCESS_TEXT"/>
 | 
					 | 
				
			||||||
            <data android:mimeType="text/plain"/>
 | 
					 | 
				
			||||||
        </intent>
 | 
					 | 
				
			||||||
    </queries>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <!-- Communication with backend -->
 | 
					 | 
				
			||||||
    <uses-permission android:name="android.permission.INTERNET"/>
 | 
					 | 
				
			||||||
</manifest>
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
package org.communiquons.moneymgr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import io.flutter.embedding.android.FlutterActivity
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class MainActivity : FlutterActivity()
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 69 B  | 
@@ -1,6 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 | 
					 | 
				
			||||||
    <item>
 | 
					 | 
				
			||||||
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
 | 
					 | 
				
			||||||
    </item>
 | 
					 | 
				
			||||||
</layer-list>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 69 B  | 
@@ -1,6 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 | 
					 | 
				
			||||||
    <item>
 | 
					 | 
				
			||||||
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
 | 
					 | 
				
			||||||
    </item>
 | 
					 | 
				
			||||||
</layer-list>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 544 B  | 
| 
		 Before Width: | Height: | Size: 833 B  | 
| 
		 Before Width: | Height: | Size: 442 B  | 
| 
		 Before Width: | Height: | Size: 536 B  | 
| 
		 Before Width: | Height: | Size: 721 B  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB  | 
@@ -1,19 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<resources>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
 | 
					 | 
				
			||||||
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
 | 
					 | 
				
			||||||
        <item name="android:forceDarkAllowed">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowFullscreen">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
					 | 
				
			||||||
         This theme determines the color of the Android Window while your
 | 
					 | 
				
			||||||
         Flutter UI initializes, as well as behind your Flutter UI while its
 | 
					 | 
				
			||||||
         running.
 | 
					 | 
				
			||||||
         
 | 
					 | 
				
			||||||
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
 | 
					 | 
				
			||||||
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
 | 
					 | 
				
			||||||
        <item name="android:windowBackground">?android:colorBackground</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
</resources>
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<resources>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
 | 
					 | 
				
			||||||
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
 | 
					 | 
				
			||||||
        <!-- Show a splash screen on the activity. Automatically removed when
 | 
					 | 
				
			||||||
             the Flutter engine draws its first frame -->
 | 
					 | 
				
			||||||
        <item name="android:windowBackground">@drawable/launch_background</item>
 | 
					 | 
				
			||||||
        <item name="android:forceDarkAllowed">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowFullscreen">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
					 | 
				
			||||||
         This theme determines the color of the Android Window while your
 | 
					 | 
				
			||||||
         Flutter UI initializes, as well as behind your Flutter UI while its
 | 
					 | 
				
			||||||
         running.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
 | 
					 | 
				
			||||||
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
 | 
					 | 
				
			||||||
        <item name="android:windowBackground">?android:colorBackground</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
</resources>
 | 
					 | 
				
			||||||
@@ -1,19 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<resources>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
 | 
					 | 
				
			||||||
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
 | 
					 | 
				
			||||||
        <item name="android:forceDarkAllowed">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowFullscreen">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
					 | 
				
			||||||
         This theme determines the color of the Android Window while your
 | 
					 | 
				
			||||||
         Flutter UI initializes, as well as behind your Flutter UI while its
 | 
					 | 
				
			||||||
         running.
 | 
					 | 
				
			||||||
         
 | 
					 | 
				
			||||||
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
 | 
					 | 
				
			||||||
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
 | 
					 | 
				
			||||||
        <item name="android:windowBackground">?android:colorBackground</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
</resources>
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<resources>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
 | 
					 | 
				
			||||||
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
 | 
					 | 
				
			||||||
        <!-- Show a splash screen on the activity. Automatically removed when
 | 
					 | 
				
			||||||
             the Flutter engine draws its first frame -->
 | 
					 | 
				
			||||||
        <item name="android:windowBackground">@drawable/launch_background</item>
 | 
					 | 
				
			||||||
        <item name="android:forceDarkAllowed">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowFullscreen">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 | 
					 | 
				
			||||||
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
    <!-- Theme applied to the Android Window as soon as the process has started.
 | 
					 | 
				
			||||||
         This theme determines the color of the Android Window while your
 | 
					 | 
				
			||||||
         Flutter UI initializes, as well as behind your Flutter UI while its
 | 
					 | 
				
			||||||
         running.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
 | 
					 | 
				
			||||||
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
 | 
					 | 
				
			||||||
        <item name="android:windowBackground">?android:colorBackground</item>
 | 
					 | 
				
			||||||
    </style>
 | 
					 | 
				
			||||||
</resources>
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 | 
					 | 
				
			||||||
    <!-- The INTERNET permission is required for development. Specifically,
 | 
					 | 
				
			||||||
         the Flutter tool needs it to communicate with the running application
 | 
					 | 
				
			||||||
         to allow setting breakpoints, to provide hot reload, etc.
 | 
					 | 
				
			||||||
    -->
 | 
					 | 
				
			||||||
    <uses-permission android:name="android.permission.INTERNET"/>
 | 
					 | 
				
			||||||
</manifest>
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <application
 | 
					 | 
				
			||||||
        android:allowBackup="false"
 | 
					 | 
				
			||||||
        android:dataExtractionRules="@xml/data_extraction_rules"
 | 
					 | 
				
			||||||
        android:fullBackupContent="false" />
 | 
					 | 
				
			||||||
</manifest>
 | 
					 | 
				
			||||||
@@ -1,17 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<data-extraction-rules>
 | 
					 | 
				
			||||||
    <cloud-backup>
 | 
					 | 
				
			||||||
        <exclude domain="root" />
 | 
					 | 
				
			||||||
        <exclude domain="file" />
 | 
					 | 
				
			||||||
        <exclude domain="database" />
 | 
					 | 
				
			||||||
        <exclude domain="sharedpref" />
 | 
					 | 
				
			||||||
        <exclude domain="external" />
 | 
					 | 
				
			||||||
    </cloud-backup>
 | 
					 | 
				
			||||||
    <device-transfer>
 | 
					 | 
				
			||||||
        <exclude domain="root" />
 | 
					 | 
				
			||||||
        <exclude domain="file" />
 | 
					 | 
				
			||||||
        <exclude domain="database" />
 | 
					 | 
				
			||||||
        <exclude domain="sharedpref" />
 | 
					 | 
				
			||||||
        <exclude domain="external" />
 | 
					 | 
				
			||||||
    </device-transfer>
 | 
					 | 
				
			||||||
</data-extraction-rules>
 | 
					 | 
				
			||||||
@@ -1,21 +0,0 @@
 | 
				
			|||||||
allprojects {
 | 
					 | 
				
			||||||
    repositories {
 | 
					 | 
				
			||||||
        google()
 | 
					 | 
				
			||||||
        mavenCentral()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
 | 
					 | 
				
			||||||
rootProject.layout.buildDirectory.value(newBuildDir)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
subprojects {
 | 
					 | 
				
			||||||
    val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
 | 
					 | 
				
			||||||
    project.layout.buildDirectory.value(newSubprojectBuildDir)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
subprojects {
 | 
					 | 
				
			||||||
    project.evaluationDependsOn(":app")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tasks.register<Delete>("clean") {
 | 
					 | 
				
			||||||
    delete(rootProject.layout.buildDirectory)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SCRIPT_DIR="$(temp=$( realpath "$0"  ) && dirname "$temp")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
KEYSTORE_PATH="$SCRIPT_DIR/keystore.jks"
 | 
					 | 
				
			||||||
PROPERTIES_PATH="$SCRIPT_DIR/publish_key.properties"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo Keystore path : $KEYSTORE_PATH
 | 
					 | 
				
			||||||
echo Properties path : $PROPERTIES_PATH
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[ ! -n "$JKS_KEYSTORE" ] && echo 'Missing JKS_KEYSTORE variable!'&& exit 1
 | 
					 | 
				
			||||||
[ ! -n "$JKS_KEYSTORE_PASSWORD" ] && echo 'Missing JKS_KEYSTORE_PASSWORD variable!' && exit 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Write keystore
 | 
					 | 
				
			||||||
echo $JKS_KEYSTORE | base64 -d > "$KEYSTORE_PATH"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Write keystore config
 | 
					 | 
				
			||||||
cat > "$PROPERTIES_PATH" <<_EOF
 | 
					 | 
				
			||||||
storePassword=$JKS_KEYSTORE_PASSWORD
 | 
					 | 
				
			||||||
keyPassword=$JKS_KEYSTORE_PASSWORD
 | 
					 | 
				
			||||||
keyAlias=moneymgr
 | 
					 | 
				
			||||||
storeFile=$KEYSTORE_PATH
 | 
					 | 
				
			||||||
_EOF
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
 | 
					 | 
				
			||||||
android.useAndroidX=true
 | 
					 | 
				
			||||||
android.enableJetifier=true
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
distributionBase=GRADLE_USER_HOME
 | 
					 | 
				
			||||||
distributionPath=wrapper/dists
 | 
					 | 
				
			||||||
zipStoreBase=GRADLE_USER_HOME
 | 
					 | 
				
			||||||
zipStorePath=wrapper/dists
 | 
					 | 
				
			||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
storePassword=<password-from-previous-step>
 | 
					 | 
				
			||||||
keyPassword=<password-from-previous-step>
 | 
					 | 
				
			||||||
keyAlias=upload
 | 
					 | 
				
			||||||
storeFile=<keystore-file-location>
 | 
					 | 
				
			||||||
@@ -1,25 +0,0 @@
 | 
				
			|||||||
pluginManagement {
 | 
					 | 
				
			||||||
    val flutterSdkPath = run {
 | 
					 | 
				
			||||||
        val properties = java.util.Properties()
 | 
					 | 
				
			||||||
        file("local.properties").inputStream().use { properties.load(it) }
 | 
					 | 
				
			||||||
        val flutterSdkPath = properties.getProperty("flutter.sdk")
 | 
					 | 
				
			||||||
        require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
 | 
					 | 
				
			||||||
        flutterSdkPath
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    repositories {
 | 
					 | 
				
			||||||
        google()
 | 
					 | 
				
			||||||
        mavenCentral()
 | 
					 | 
				
			||||||
        gradlePluginPortal()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
plugins {
 | 
					 | 
				
			||||||
    id("dev.flutter.flutter-plugin-loader") version "1.0.0"
 | 
					 | 
				
			||||||
    id("com.android.application") version "8.7.3" apply false
 | 
					 | 
				
			||||||
    id("org.jetbrains.kotlin.android") version "2.1.0" apply false
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include(":app")
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 3.2 KiB  | 
@@ -1,3 +0,0 @@
 | 
				
			|||||||
description: This file stores settings for Dart & Flutter DevTools.
 | 
					 | 
				
			||||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
 | 
					 | 
				
			||||||
extensions:
 | 
					 | 
				
			||||||
@@ -1,34 +0,0 @@
 | 
				
			|||||||
# flutter pub run flutter_launcher_icons
 | 
					 | 
				
			||||||
flutter_launcher_icons:
 | 
					 | 
				
			||||||
  image_path: "assets/icon/icon.png"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  android: "launcher_icon"
 | 
					 | 
				
			||||||
  # image_path_android: "assets/icon/icon.png"
 | 
					 | 
				
			||||||
  min_sdk_android: 21 # android min sdk min:16, default 21
 | 
					 | 
				
			||||||
  # adaptive_icon_background: "assets/icon/background.png"
 | 
					 | 
				
			||||||
  # adaptive_icon_foreground: "assets/icon/foreground.png"
 | 
					 | 
				
			||||||
  # adaptive_icon_foreground_inset: 16
 | 
					 | 
				
			||||||
  # adaptive_icon_monochrome: "assets/icon/monochrome.png"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ios: true
 | 
					 | 
				
			||||||
  # image_path_ios: "assets/icon/icon.png"
 | 
					 | 
				
			||||||
  remove_alpha_ios: true
 | 
					 | 
				
			||||||
  # image_path_ios_dark_transparent: "assets/icon/icon_dark.png"
 | 
					 | 
				
			||||||
  # image_path_ios_tinted_grayscale: "assets/icon/icon_tinted.png"
 | 
					 | 
				
			||||||
  # desaturate_tinted_to_grayscale_ios: true
 | 
					 | 
				
			||||||
  # background_color_ios: "#ffffff"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#  web:
 | 
					 | 
				
			||||||
#    generate: true
 | 
					 | 
				
			||||||
#    image_path: "path/to/image.png"
 | 
					 | 
				
			||||||
#    background_color: "#hexcode"
 | 
					 | 
				
			||||||
#    theme_color: "#hexcode"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#  windows:
 | 
					 | 
				
			||||||
#    generate: true
 | 
					 | 
				
			||||||
#    image_path: "path/to/image.png"
 | 
					 | 
				
			||||||
#    icon_size: 48 # min:48, max:256, default: 48
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#  macos:
 | 
					 | 
				
			||||||
#    generate: true
 | 
					 | 
				
			||||||
#    image_path: "path/to/image.png"
 | 
					 | 
				
			||||||
@@ -1,154 +0,0 @@
 | 
				
			|||||||
flutter_native_splash:
 | 
					 | 
				
			||||||
  # This package generates native code to customize Flutter's default white native splash screen
 | 
					 | 
				
			||||||
  # with background color and splash image.
 | 
					 | 
				
			||||||
  # Customize the parameters below, and run the following command in the terminal:
 | 
					 | 
				
			||||||
  # dart run flutter_native_splash:create
 | 
					 | 
				
			||||||
  # To restore Flutter's default white splash screen, run the following command in the terminal:
 | 
					 | 
				
			||||||
  # dart run flutter_native_splash:remove
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # IMPORTANT NOTE: These parameter do not affect the configuration of Android 12 and later, which
 | 
					 | 
				
			||||||
  # handle splash screens differently that prior versions of Android.  Android 12 and later must be
 | 
					 | 
				
			||||||
  # configured specifically in the android_12 section below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # color or background_image is the only required parameter.  Use color to set the background
 | 
					 | 
				
			||||||
  # of your splash screen to a solid color.  Use background_image to set the background of your
 | 
					 | 
				
			||||||
  # splash screen to a png image.  This is useful for gradients. The image will be stretch to the
 | 
					 | 
				
			||||||
  # size of the app. Only one parameter can be used, color and background_image cannot both be set.
 | 
					 | 
				
			||||||
  color: "#42a5f5"
 | 
					 | 
				
			||||||
  #background_image: "assets/background.png"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Optional parameters are listed below.  To enable a parameter, uncomment the line by removing
 | 
					 | 
				
			||||||
  # the leading # character.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The image parameter allows you to specify an image used in the splash screen.  It must be a
 | 
					 | 
				
			||||||
  # png file and should be sized for 4x pixel density.
 | 
					 | 
				
			||||||
  #image: assets/splash.png
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The branding property allows you to specify an image used as branding in the splash screen.
 | 
					 | 
				
			||||||
  # It must be a png file. It is supported for Android, iOS and the Web.  For Android 12,
 | 
					 | 
				
			||||||
  # see the Android 12 section below.
 | 
					 | 
				
			||||||
  #branding: assets/dart.png
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # To position the branding image at the bottom of the screen you can use bottom, bottomRight,
 | 
					 | 
				
			||||||
  # and bottomLeft. The default values is bottom if not specified or specified something else.
 | 
					 | 
				
			||||||
  #branding_mode: bottom
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Set the branding padding from the bottom of the screen.  The default value is 0
 | 
					 | 
				
			||||||
  # (Not supported on web yet)
 | 
					 | 
				
			||||||
  # branding_bottom_padding: 24
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The color_dark, background_image_dark, image_dark, branding_dark are parameters that set the background
 | 
					 | 
				
			||||||
  # and image when the device is in dark mode. If they are not specified, the app will use the
 | 
					 | 
				
			||||||
  # parameters from above.  If there is no parameter above, the app will use the light mode values.
 | 
					 | 
				
			||||||
  # If the image_dark parameter is specified, color_dark or background_image_dark must be specified.
 | 
					 | 
				
			||||||
  # color_dark and background_image_dark cannot both be set.
 | 
					 | 
				
			||||||
  #color_dark: "#042a49"
 | 
					 | 
				
			||||||
  #background_image_dark: "assets/dark-background.png"
 | 
					 | 
				
			||||||
  #image_dark: assets/splash-invert.png
 | 
					 | 
				
			||||||
  #branding_dark: assets/dart_dark.png
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # From Android 12 onwards, the splash screen is handled differently than in previous versions.
 | 
					 | 
				
			||||||
  # Please visit https://developer.android.com/guide/topics/ui/splash-screen
 | 
					 | 
				
			||||||
  # Following are specific parameters for Android 12+.
 | 
					 | 
				
			||||||
  android_12:
 | 
					 | 
				
			||||||
  # The image parameter sets the splash screen icon image.  If this parameter is not specified,
 | 
					 | 
				
			||||||
  # the app's launcher icon will be used instead.
 | 
					 | 
				
			||||||
  # Please note that the splash screen will be clipped to a circle on the center of the screen.
 | 
					 | 
				
			||||||
  # App icon with an icon background: This should be 960×960 pixels, and fit within a circle
 | 
					 | 
				
			||||||
  # 640 pixels in diameter.
 | 
					 | 
				
			||||||
  # App icon without an icon background: This should be 1152×1152 pixels, and fit within a circle
 | 
					 | 
				
			||||||
  # 768 pixels in diameter.  To fit a 1152x1152 image within a circle with a 768 diameter, simply
 | 
					 | 
				
			||||||
  # ensure that the most important design elements of your image are placed within a circular area
 | 
					 | 
				
			||||||
  # with a 768 diameter at the center of the 1152x1152 canvas.
 | 
					 | 
				
			||||||
  #image: assets/android12splash.png
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Splash screen background color.
 | 
					 | 
				
			||||||
  #color: "#42a5f5"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # App icon background color.
 | 
					 | 
				
			||||||
  #icon_background_color: "#111111"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The branding property allows you to specify an image used as branding in the splash screen.
 | 
					 | 
				
			||||||
  #branding: assets/dart.png
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The image_dark, color_dark, icon_background_color_dark, and branding_dark set values that
 | 
					 | 
				
			||||||
  # apply when the device is in dark mode. If they are not specified, the app will use the
 | 
					 | 
				
			||||||
  # parameters from above.  If there is no parameter above, the app will use the light mode values.
 | 
					 | 
				
			||||||
  #image_dark: assets/android12splash-invert.png
 | 
					 | 
				
			||||||
  #color_dark: "#042a49"
 | 
					 | 
				
			||||||
  #icon_background_color_dark: "#eeeeee"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The android, ios and web parameters can be used to disable generating a splash screen on a given
 | 
					 | 
				
			||||||
  # platform.
 | 
					 | 
				
			||||||
  #android: false
 | 
					 | 
				
			||||||
  #ios: false
 | 
					 | 
				
			||||||
  #web: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Platform specific images can be specified with the following parameters, which will override
 | 
					 | 
				
			||||||
  # the respective parameter.  You may specify all, selected, or none of these parameters:
 | 
					 | 
				
			||||||
  #color_android: "#42a5f5"
 | 
					 | 
				
			||||||
  #color_dark_android: "#042a49"
 | 
					 | 
				
			||||||
  #color_ios: "#42a5f5"
 | 
					 | 
				
			||||||
  #color_dark_ios: "#042a49"
 | 
					 | 
				
			||||||
  #color_web: "#42a5f5"
 | 
					 | 
				
			||||||
  #color_dark_web: "#042a49"
 | 
					 | 
				
			||||||
  #image_android: assets/splash-android.png
 | 
					 | 
				
			||||||
  #image_dark_android: assets/splash-invert-android.png
 | 
					 | 
				
			||||||
  #image_ios: assets/splash-ios.png
 | 
					 | 
				
			||||||
  #image_dark_ios: assets/splash-invert-ios.png
 | 
					 | 
				
			||||||
  #image_web: assets/splash-web.gif
 | 
					 | 
				
			||||||
  #image_dark_web: assets/splash-invert-web.gif
 | 
					 | 
				
			||||||
  #background_image_android: "assets/background-android.png"
 | 
					 | 
				
			||||||
  #background_image_dark_android: "assets/dark-background-android.png"
 | 
					 | 
				
			||||||
  #background_image_ios: "assets/background-ios.png"
 | 
					 | 
				
			||||||
  #background_image_dark_ios: "assets/dark-background-ios.png"
 | 
					 | 
				
			||||||
  #background_image_web: "assets/background-web.png"
 | 
					 | 
				
			||||||
  #background_image_dark_web: "assets/dark-background-web.png"
 | 
					 | 
				
			||||||
  #branding_android: assets/brand-android.png
 | 
					 | 
				
			||||||
  #branding_bottom_padding_android: 24
 | 
					 | 
				
			||||||
  #branding_dark_android: assets/dart_dark-android.png
 | 
					 | 
				
			||||||
  #branding_ios: assets/brand-ios.png
 | 
					 | 
				
			||||||
  #branding_bottom_padding_ios: 24
 | 
					 | 
				
			||||||
  #branding_dark_ios: assets/dart_dark-ios.png
 | 
					 | 
				
			||||||
  #branding_web: assets/brand-web.gif
 | 
					 | 
				
			||||||
  #branding_dark_web: assets/dart_dark-web.gif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The position of the splash image can be set with android_gravity, ios_content_mode, and
 | 
					 | 
				
			||||||
  # web_image_mode parameters.  All default to center.
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  # android_gravity can be one of the following Android Gravity (see
 | 
					 | 
				
			||||||
  # https://developer.android.com/reference/android/view/Gravity): bottom, center,
 | 
					 | 
				
			||||||
  # center_horizontal, center_vertical, clip_horizontal, clip_vertical, end, fill, fill_horizontal,
 | 
					 | 
				
			||||||
  # fill_vertical, left, right, start, or top. android_gravity can be combined using the | operator to achieve multiple effects.
 | 
					 | 
				
			||||||
  # For example:
 | 
					 | 
				
			||||||
  # `android_gravity: fill|clip_vertical` - This will fill the width while maintaining the image's vertical aspect ratio
 | 
					 | 
				
			||||||
  #android_gravity: center
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  # ios_content_mode can be one of the following iOS UIView.ContentMode (see
 | 
					 | 
				
			||||||
  # https://developer.apple.com/documentation/uikit/uiview/contentmode): scaleToFill,
 | 
					 | 
				
			||||||
  # scaleAspectFit, scaleAspectFill, center, top, bottom, left, right, topLeft, topRight,
 | 
					 | 
				
			||||||
  # bottomLeft, or bottomRight.
 | 
					 | 
				
			||||||
  #ios_content_mode: center
 | 
					 | 
				
			||||||
  #
 | 
					 | 
				
			||||||
  # web_image_mode can be one of the following modes: center, contain, stretch, and cover.
 | 
					 | 
				
			||||||
  #web_image_mode: center
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # The screen orientation can be set in Android with the android_screen_orientation parameter.
 | 
					 | 
				
			||||||
  # Valid parameters can be found here:
 | 
					 | 
				
			||||||
  # https://developer.android.com/guide/topics/manifest/activity-element#screen
 | 
					 | 
				
			||||||
  #android_screen_orientation: sensorLandscape
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # To hide the notification bar, use the fullscreen parameter.  Has no effect in web since web
 | 
					 | 
				
			||||||
  # has no notification bar.  Defaults to false.
 | 
					 | 
				
			||||||
  # NOTE: Unlike Android, iOS will not automatically show the notification bar when the app loads.
 | 
					 | 
				
			||||||
  #       To show the notification bar, add the following code to your Flutter app:
 | 
					 | 
				
			||||||
  #       WidgetsFlutterBinding.ensureInitialized();
 | 
					 | 
				
			||||||
  #       SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom, SystemUiOverlay.top], );
 | 
					 | 
				
			||||||
  #fullscreen: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # If you have changed the name(s) of your info.plist file(s), you can specify the filename(s)
 | 
					 | 
				
			||||||
  # with the info_plist_files parameter.  Remove only the # characters in the three lines below,
 | 
					 | 
				
			||||||
  # do not remove any spaces:
 | 
					 | 
				
			||||||
  #info_plist_files:
 | 
					 | 
				
			||||||
  #  - 'ios/Runner/Info-Debug.plist'
 | 
					 | 
				
			||||||
  #  - 'ios/Runner/Info-Release.plist'
 | 
					 | 
				
			||||||
							
								
								
									
										34
									
								
								moneymgr_mobile/ios/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,34 +0,0 @@
 | 
				
			|||||||
**/dgph
 | 
					 | 
				
			||||||
*.mode1v3
 | 
					 | 
				
			||||||
*.mode2v3
 | 
					 | 
				
			||||||
*.moved-aside
 | 
					 | 
				
			||||||
*.pbxuser
 | 
					 | 
				
			||||||
*.perspectivev3
 | 
					 | 
				
			||||||
**/*sync/
 | 
					 | 
				
			||||||
.sconsign.dblite
 | 
					 | 
				
			||||||
.tags*
 | 
					 | 
				
			||||||
**/.vagrant/
 | 
					 | 
				
			||||||
**/DerivedData/
 | 
					 | 
				
			||||||
Icon?
 | 
					 | 
				
			||||||
**/Pods/
 | 
					 | 
				
			||||||
**/.symlinks/
 | 
					 | 
				
			||||||
profile
 | 
					 | 
				
			||||||
xcuserdata
 | 
					 | 
				
			||||||
**/.generated/
 | 
					 | 
				
			||||||
Flutter/App.framework
 | 
					 | 
				
			||||||
Flutter/Flutter.framework
 | 
					 | 
				
			||||||
Flutter/Flutter.podspec
 | 
					 | 
				
			||||||
Flutter/Generated.xcconfig
 | 
					 | 
				
			||||||
Flutter/ephemeral/
 | 
					 | 
				
			||||||
Flutter/app.flx
 | 
					 | 
				
			||||||
Flutter/app.zip
 | 
					 | 
				
			||||||
Flutter/flutter_assets/
 | 
					 | 
				
			||||||
Flutter/flutter_export_environment.sh
 | 
					 | 
				
			||||||
ServiceDefinitions.json
 | 
					 | 
				
			||||||
Runner/GeneratedPluginRegistrant.*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Exceptions to above rules.
 | 
					 | 
				
			||||||
!default.mode1v3
 | 
					 | 
				
			||||||
!default.mode2v3
 | 
					 | 
				
			||||||
!default.pbxuser
 | 
					 | 
				
			||||||
!default.perspectivev3
 | 
					 | 
				
			||||||
@@ -1,26 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					 | 
				
			||||||
<plist version="1.0">
 | 
					 | 
				
			||||||
<dict>
 | 
					 | 
				
			||||||
  <key>CFBundleDevelopmentRegion</key>
 | 
					 | 
				
			||||||
  <string>en</string>
 | 
					 | 
				
			||||||
  <key>CFBundleExecutable</key>
 | 
					 | 
				
			||||||
  <string>App</string>
 | 
					 | 
				
			||||||
  <key>CFBundleIdentifier</key>
 | 
					 | 
				
			||||||
  <string>io.flutter.flutter.app</string>
 | 
					 | 
				
			||||||
  <key>CFBundleInfoDictionaryVersion</key>
 | 
					 | 
				
			||||||
  <string>6.0</string>
 | 
					 | 
				
			||||||
  <key>CFBundleName</key>
 | 
					 | 
				
			||||||
  <string>App</string>
 | 
					 | 
				
			||||||
  <key>CFBundlePackageType</key>
 | 
					 | 
				
			||||||
  <string>FMWK</string>
 | 
					 | 
				
			||||||
  <key>CFBundleShortVersionString</key>
 | 
					 | 
				
			||||||
  <string>1.0</string>
 | 
					 | 
				
			||||||
  <key>CFBundleSignature</key>
 | 
					 | 
				
			||||||
  <string>????</string>
 | 
					 | 
				
			||||||
  <key>CFBundleVersion</key>
 | 
					 | 
				
			||||||
  <string>1.0</string>
 | 
					 | 
				
			||||||
  <key>MinimumOSVersion</key>
 | 
					 | 
				
			||||||
  <string>12.0</string>
 | 
					 | 
				
			||||||
</dict>
 | 
					 | 
				
			||||||
</plist>
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
#include "Generated.xcconfig"
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
#include "Generated.xcconfig"
 | 
					 | 
				
			||||||
@@ -1,616 +0,0 @@
 | 
				
			|||||||
// !$*UTF8*$!
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	archiveVersion = 1;
 | 
					 | 
				
			||||||
	classes = {
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	objectVersion = 54;
 | 
					 | 
				
			||||||
	objects = {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXBuildFile section */
 | 
					 | 
				
			||||||
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 | 
					 | 
				
			||||||
		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
 | 
					 | 
				
			||||||
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 | 
					 | 
				
			||||||
		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
 | 
					 | 
				
			||||||
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
 | 
					 | 
				
			||||||
		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
 | 
					 | 
				
			||||||
		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
 | 
					 | 
				
			||||||
/* End PBXBuildFile section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXContainerItemProxy section */
 | 
					 | 
				
			||||||
		331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
 | 
					 | 
				
			||||||
			isa = PBXContainerItemProxy;
 | 
					 | 
				
			||||||
			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 | 
					 | 
				
			||||||
			proxyType = 1;
 | 
					 | 
				
			||||||
			remoteGlobalIDString = 97C146ED1CF9000F007C117D;
 | 
					 | 
				
			||||||
			remoteInfo = Runner;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXContainerItemProxy section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXCopyFilesBuildPhase section */
 | 
					 | 
				
			||||||
		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
 | 
					 | 
				
			||||||
			isa = PBXCopyFilesBuildPhase;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			dstPath = "";
 | 
					 | 
				
			||||||
			dstSubfolderSpec = 10;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = "Embed Frameworks";
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXCopyFilesBuildPhase section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXFileReference section */
 | 
					 | 
				
			||||||
		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
					 | 
				
			||||||
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
					 | 
				
			||||||
		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
/* End PBXFileReference section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXFrameworksBuildPhase section */
 | 
					 | 
				
			||||||
		97C146EB1CF9000F007C117D /* Frameworks */ = {
 | 
					 | 
				
			||||||
			isa = PBXFrameworksBuildPhase;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXFrameworksBuildPhase section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXGroup section */
 | 
					 | 
				
			||||||
		331C8082294A63A400263BE5 /* RunnerTests */ = {
 | 
					 | 
				
			||||||
			isa = PBXGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				331C807B294A618700263BE5 /* RunnerTests.swift */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			path = RunnerTests;
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		9740EEB11CF90186004384FC /* Flutter */ = {
 | 
					 | 
				
			||||||
			isa = PBXGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
 | 
					 | 
				
			||||||
				9740EEB21CF90195004384FC /* Debug.xcconfig */,
 | 
					 | 
				
			||||||
				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
 | 
					 | 
				
			||||||
				9740EEB31CF90195004384FC /* Generated.xcconfig */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = Flutter;
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146E51CF9000F007C117D = {
 | 
					 | 
				
			||||||
			isa = PBXGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				9740EEB11CF90186004384FC /* Flutter */,
 | 
					 | 
				
			||||||
				97C146F01CF9000F007C117D /* Runner */,
 | 
					 | 
				
			||||||
				97C146EF1CF9000F007C117D /* Products */,
 | 
					 | 
				
			||||||
				331C8082294A63A400263BE5 /* RunnerTests */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146EF1CF9000F007C117D /* Products */ = {
 | 
					 | 
				
			||||||
			isa = PBXGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				97C146EE1CF9000F007C117D /* Runner.app */,
 | 
					 | 
				
			||||||
				331C8081294A63A400263BE5 /* RunnerTests.xctest */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = Products;
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146F01CF9000F007C117D /* Runner */ = {
 | 
					 | 
				
			||||||
			isa = PBXGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				97C146FA1CF9000F007C117D /* Main.storyboard */,
 | 
					 | 
				
			||||||
				97C146FD1CF9000F007C117D /* Assets.xcassets */,
 | 
					 | 
				
			||||||
				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
 | 
					 | 
				
			||||||
				97C147021CF9000F007C117D /* Info.plist */,
 | 
					 | 
				
			||||||
				1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
 | 
					 | 
				
			||||||
				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
 | 
					 | 
				
			||||||
				74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
 | 
					 | 
				
			||||||
				74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			path = Runner;
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXGroup section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXNativeTarget section */
 | 
					 | 
				
			||||||
		331C8080294A63A400263BE5 /* RunnerTests */ = {
 | 
					 | 
				
			||||||
			isa = PBXNativeTarget;
 | 
					 | 
				
			||||||
			buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
 | 
					 | 
				
			||||||
			buildPhases = (
 | 
					 | 
				
			||||||
				331C807D294A63A400263BE5 /* Sources */,
 | 
					 | 
				
			||||||
				331C807F294A63A400263BE5 /* Resources */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			buildRules = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			dependencies = (
 | 
					 | 
				
			||||||
				331C8086294A63A400263BE5 /* PBXTargetDependency */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = RunnerTests;
 | 
					 | 
				
			||||||
			productName = RunnerTests;
 | 
					 | 
				
			||||||
			productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
 | 
					 | 
				
			||||||
			productType = "com.apple.product-type.bundle.unit-test";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146ED1CF9000F007C117D /* Runner */ = {
 | 
					 | 
				
			||||||
			isa = PBXNativeTarget;
 | 
					 | 
				
			||||||
			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
 | 
					 | 
				
			||||||
			buildPhases = (
 | 
					 | 
				
			||||||
				9740EEB61CF901F6004384FC /* Run Script */,
 | 
					 | 
				
			||||||
				97C146EA1CF9000F007C117D /* Sources */,
 | 
					 | 
				
			||||||
				97C146EB1CF9000F007C117D /* Frameworks */,
 | 
					 | 
				
			||||||
				97C146EC1CF9000F007C117D /* Resources */,
 | 
					 | 
				
			||||||
				9705A1C41CF9048500538489 /* Embed Frameworks */,
 | 
					 | 
				
			||||||
				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			buildRules = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			dependencies = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = Runner;
 | 
					 | 
				
			||||||
			productName = Runner;
 | 
					 | 
				
			||||||
			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
 | 
					 | 
				
			||||||
			productType = "com.apple.product-type.application";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXNativeTarget section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXProject section */
 | 
					 | 
				
			||||||
		97C146E61CF9000F007C117D /* Project object */ = {
 | 
					 | 
				
			||||||
			isa = PBXProject;
 | 
					 | 
				
			||||||
			attributes = {
 | 
					 | 
				
			||||||
				BuildIndependentTargetsInParallel = YES;
 | 
					 | 
				
			||||||
				LastUpgradeCheck = 1510;
 | 
					 | 
				
			||||||
				ORGANIZATIONNAME = "";
 | 
					 | 
				
			||||||
				TargetAttributes = {
 | 
					 | 
				
			||||||
					331C8080294A63A400263BE5 = {
 | 
					 | 
				
			||||||
						CreatedOnToolsVersion = 14.0;
 | 
					 | 
				
			||||||
						TestTargetID = 97C146ED1CF9000F007C117D;
 | 
					 | 
				
			||||||
					};
 | 
					 | 
				
			||||||
					97C146ED1CF9000F007C117D = {
 | 
					 | 
				
			||||||
						CreatedOnToolsVersion = 7.3.1;
 | 
					 | 
				
			||||||
						LastSwiftMigration = 1100;
 | 
					 | 
				
			||||||
					};
 | 
					 | 
				
			||||||
				};
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
 | 
					 | 
				
			||||||
			compatibilityVersion = "Xcode 9.3";
 | 
					 | 
				
			||||||
			developmentRegion = en;
 | 
					 | 
				
			||||||
			hasScannedForEncodings = 0;
 | 
					 | 
				
			||||||
			knownRegions = (
 | 
					 | 
				
			||||||
				en,
 | 
					 | 
				
			||||||
				Base,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			mainGroup = 97C146E51CF9000F007C117D;
 | 
					 | 
				
			||||||
			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
 | 
					 | 
				
			||||||
			projectDirPath = "";
 | 
					 | 
				
			||||||
			projectRoot = "";
 | 
					 | 
				
			||||||
			targets = (
 | 
					 | 
				
			||||||
				97C146ED1CF9000F007C117D /* Runner */,
 | 
					 | 
				
			||||||
				331C8080294A63A400263BE5 /* RunnerTests */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXProject section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXResourcesBuildPhase section */
 | 
					 | 
				
			||||||
		331C807F294A63A400263BE5 /* Resources */ = {
 | 
					 | 
				
			||||||
			isa = PBXResourcesBuildPhase;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146EC1CF9000F007C117D /* Resources */ = {
 | 
					 | 
				
			||||||
			isa = PBXResourcesBuildPhase;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
				97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
 | 
					 | 
				
			||||||
				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
 | 
					 | 
				
			||||||
				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
 | 
					 | 
				
			||||||
				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXResourcesBuildPhase section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXShellScriptBuildPhase section */
 | 
					 | 
				
			||||||
		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
 | 
					 | 
				
			||||||
			isa = PBXShellScriptBuildPhase;
 | 
					 | 
				
			||||||
			alwaysOutOfDate = 1;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			inputPaths = (
 | 
					 | 
				
			||||||
				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = "Thin Binary";
 | 
					 | 
				
			||||||
			outputPaths = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
			shellPath = /bin/sh;
 | 
					 | 
				
			||||||
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		9740EEB61CF901F6004384FC /* Run Script */ = {
 | 
					 | 
				
			||||||
			isa = PBXShellScriptBuildPhase;
 | 
					 | 
				
			||||||
			alwaysOutOfDate = 1;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			inputPaths = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = "Run Script";
 | 
					 | 
				
			||||||
			outputPaths = (
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
			shellPath = /bin/sh;
 | 
					 | 
				
			||||||
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXShellScriptBuildPhase section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXSourcesBuildPhase section */
 | 
					 | 
				
			||||||
		331C807D294A63A400263BE5 /* Sources */ = {
 | 
					 | 
				
			||||||
			isa = PBXSourcesBuildPhase;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
				331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146EA1CF9000F007C117D /* Sources */ = {
 | 
					 | 
				
			||||||
			isa = PBXSourcesBuildPhase;
 | 
					 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
					 | 
				
			||||||
			files = (
 | 
					 | 
				
			||||||
				74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
 | 
					 | 
				
			||||||
				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXSourcesBuildPhase section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXTargetDependency section */
 | 
					 | 
				
			||||||
		331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
 | 
					 | 
				
			||||||
			isa = PBXTargetDependency;
 | 
					 | 
				
			||||||
			target = 97C146ED1CF9000F007C117D /* Runner */;
 | 
					 | 
				
			||||||
			targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXTargetDependency section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin PBXVariantGroup section */
 | 
					 | 
				
			||||||
		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
 | 
					 | 
				
			||||||
			isa = PBXVariantGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				97C146FB1CF9000F007C117D /* Base */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = Main.storyboard;
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
 | 
					 | 
				
			||||||
			isa = PBXVariantGroup;
 | 
					 | 
				
			||||||
			children = (
 | 
					 | 
				
			||||||
				97C147001CF9000F007C117D /* Base */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			name = LaunchScreen.storyboard;
 | 
					 | 
				
			||||||
			sourceTree = "<group>";
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End PBXVariantGroup section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin XCBuildConfiguration section */
 | 
					 | 
				
			||||||
		249021D3217E4FDB00AE95B9 /* Profile */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
					 | 
				
			||||||
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
					 | 
				
			||||||
				CLANG_ANALYZER_NONNULL = YES;
 | 
					 | 
				
			||||||
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 | 
					 | 
				
			||||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
					 | 
				
			||||||
				CLANG_ENABLE_MODULES = YES;
 | 
					 | 
				
			||||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_COMMA = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
					 | 
				
			||||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
					 | 
				
			||||||
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_STRICT_PROTOTYPES = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
					 | 
				
			||||||
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 | 
					 | 
				
			||||||
				COPY_PHASE_STRIP = NO;
 | 
					 | 
				
			||||||
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 | 
					 | 
				
			||||||
				ENABLE_NS_ASSERTIONS = NO;
 | 
					 | 
				
			||||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
					 | 
				
			||||||
				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 | 
					 | 
				
			||||||
				GCC_C_LANGUAGE_STANDARD = gnu99;
 | 
					 | 
				
			||||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
					 | 
				
			||||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
					 | 
				
			||||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
					 | 
				
			||||||
				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 | 
					 | 
				
			||||||
				MTL_ENABLE_DEBUG_INFO = NO;
 | 
					 | 
				
			||||||
				SDKROOT = iphoneos;
 | 
					 | 
				
			||||||
				SUPPORTED_PLATFORMS = iphoneos;
 | 
					 | 
				
			||||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
					 | 
				
			||||||
				VALIDATE_PRODUCT = YES;
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Profile;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		249021D4217E4FDB00AE95B9 /* Profile */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
					 | 
				
			||||||
				CLANG_ENABLE_MODULES = YES;
 | 
					 | 
				
			||||||
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
 | 
					 | 
				
			||||||
				ENABLE_BITCODE = NO;
 | 
					 | 
				
			||||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
					 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
					 | 
				
			||||||
					"$(inherited)",
 | 
					 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
					 | 
				
			||||||
				);
 | 
					 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = org.communiquons.moneymgrMobile;
 | 
					 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
					 | 
				
			||||||
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
 | 
					 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
					 | 
				
			||||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Profile;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		331C8088294A63A400263BE5 /* Debug */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				BUNDLE_LOADER = "$(TEST_HOST)";
 | 
					 | 
				
			||||||
				CODE_SIGN_STYLE = Automatic;
 | 
					 | 
				
			||||||
				CURRENT_PROJECT_VERSION = 1;
 | 
					 | 
				
			||||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
					 | 
				
			||||||
				MARKETING_VERSION = 1.0;
 | 
					 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = org.communiquons.moneymgrMobile.RunnerTests;
 | 
					 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
					 | 
				
			||||||
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
 | 
					 | 
				
			||||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
					 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
					 | 
				
			||||||
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Debug;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		331C8089294A63A400263BE5 /* Release */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				BUNDLE_LOADER = "$(TEST_HOST)";
 | 
					 | 
				
			||||||
				CODE_SIGN_STYLE = Automatic;
 | 
					 | 
				
			||||||
				CURRENT_PROJECT_VERSION = 1;
 | 
					 | 
				
			||||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
					 | 
				
			||||||
				MARKETING_VERSION = 1.0;
 | 
					 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = org.communiquons.moneymgrMobile.RunnerTests;
 | 
					 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
					 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
					 | 
				
			||||||
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Release;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		331C808A294A63A400263BE5 /* Profile */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				BUNDLE_LOADER = "$(TEST_HOST)";
 | 
					 | 
				
			||||||
				CODE_SIGN_STYLE = Automatic;
 | 
					 | 
				
			||||||
				CURRENT_PROJECT_VERSION = 1;
 | 
					 | 
				
			||||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
					 | 
				
			||||||
				MARKETING_VERSION = 1.0;
 | 
					 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = org.communiquons.moneymgrMobile.RunnerTests;
 | 
					 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
					 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
					 | 
				
			||||||
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Profile;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C147031CF9000F007C117D /* Debug */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
					 | 
				
			||||||
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
 | 
					 | 
				
			||||||
				CLANG_ANALYZER_NONNULL = YES;
 | 
					 | 
				
			||||||
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 | 
					 | 
				
			||||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
					 | 
				
			||||||
				CLANG_ENABLE_MODULES = YES;
 | 
					 | 
				
			||||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_COMMA = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
					 | 
				
			||||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
					 | 
				
			||||||
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_STRICT_PROTOTYPES = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
					 | 
				
			||||||
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 | 
					 | 
				
			||||||
				COPY_PHASE_STRIP = NO;
 | 
					 | 
				
			||||||
				DEBUG_INFORMATION_FORMAT = dwarf;
 | 
					 | 
				
			||||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
					 | 
				
			||||||
				ENABLE_TESTABILITY = YES;
 | 
					 | 
				
			||||||
				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 | 
					 | 
				
			||||||
				GCC_C_LANGUAGE_STANDARD = gnu99;
 | 
					 | 
				
			||||||
				GCC_DYNAMIC_NO_PIC = NO;
 | 
					 | 
				
			||||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
					 | 
				
			||||||
				GCC_OPTIMIZATION_LEVEL = 0;
 | 
					 | 
				
			||||||
				GCC_PREPROCESSOR_DEFINITIONS = (
 | 
					 | 
				
			||||||
					"DEBUG=1",
 | 
					 | 
				
			||||||
					"$(inherited)",
 | 
					 | 
				
			||||||
				);
 | 
					 | 
				
			||||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
					 | 
				
			||||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
					 | 
				
			||||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
					 | 
				
			||||||
				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 | 
					 | 
				
			||||||
				MTL_ENABLE_DEBUG_INFO = YES;
 | 
					 | 
				
			||||||
				ONLY_ACTIVE_ARCH = YES;
 | 
					 | 
				
			||||||
				SDKROOT = iphoneos;
 | 
					 | 
				
			||||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Debug;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C147041CF9000F007C117D /* Release */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
					 | 
				
			||||||
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
 | 
					 | 
				
			||||||
				CLANG_ANALYZER_NONNULL = YES;
 | 
					 | 
				
			||||||
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 | 
					 | 
				
			||||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
					 | 
				
			||||||
				CLANG_ENABLE_MODULES = YES;
 | 
					 | 
				
			||||||
				CLANG_ENABLE_OBJC_ARC = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_COMMA = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
					 | 
				
			||||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
					 | 
				
			||||||
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_STRICT_PROTOTYPES = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
					 | 
				
			||||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
					 | 
				
			||||||
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 | 
					 | 
				
			||||||
				COPY_PHASE_STRIP = NO;
 | 
					 | 
				
			||||||
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 | 
					 | 
				
			||||||
				ENABLE_NS_ASSERTIONS = NO;
 | 
					 | 
				
			||||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
					 | 
				
			||||||
				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 | 
					 | 
				
			||||||
				GCC_C_LANGUAGE_STANDARD = gnu99;
 | 
					 | 
				
			||||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
					 | 
				
			||||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
					 | 
				
			||||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
					 | 
				
			||||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
					 | 
				
			||||||
				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 | 
					 | 
				
			||||||
				MTL_ENABLE_DEBUG_INFO = NO;
 | 
					 | 
				
			||||||
				SDKROOT = iphoneos;
 | 
					 | 
				
			||||||
				SUPPORTED_PLATFORMS = iphoneos;
 | 
					 | 
				
			||||||
				SWIFT_COMPILATION_MODE = wholemodule;
 | 
					 | 
				
			||||||
				SWIFT_OPTIMIZATION_LEVEL = "-O";
 | 
					 | 
				
			||||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
					 | 
				
			||||||
				VALIDATE_PRODUCT = YES;
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Release;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C147061CF9000F007C117D /* Debug */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
					 | 
				
			||||||
				CLANG_ENABLE_MODULES = YES;
 | 
					 | 
				
			||||||
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
 | 
					 | 
				
			||||||
				ENABLE_BITCODE = NO;
 | 
					 | 
				
			||||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
					 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
					 | 
				
			||||||
					"$(inherited)",
 | 
					 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
					 | 
				
			||||||
				);
 | 
					 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = org.communiquons.moneymgrMobile;
 | 
					 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
					 | 
				
			||||||
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
 | 
					 | 
				
			||||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
					 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
					 | 
				
			||||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Debug;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C147071CF9000F007C117D /* Release */ = {
 | 
					 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
					 | 
				
			||||||
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
 | 
					 | 
				
			||||||
			buildSettings = {
 | 
					 | 
				
			||||||
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
					 | 
				
			||||||
				CLANG_ENABLE_MODULES = YES;
 | 
					 | 
				
			||||||
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
 | 
					 | 
				
			||||||
				ENABLE_BITCODE = NO;
 | 
					 | 
				
			||||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
					 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
					 | 
				
			||||||
					"$(inherited)",
 | 
					 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
					 | 
				
			||||||
				);
 | 
					 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = org.communiquons.moneymgrMobile;
 | 
					 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
					 | 
				
			||||||
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
 | 
					 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
					 | 
				
			||||||
				VERSIONING_SYSTEM = "apple-generic";
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			name = Release;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End XCBuildConfiguration section */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Begin XCConfigurationList section */
 | 
					 | 
				
			||||||
		331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
 | 
					 | 
				
			||||||
			isa = XCConfigurationList;
 | 
					 | 
				
			||||||
			buildConfigurations = (
 | 
					 | 
				
			||||||
				331C8088294A63A400263BE5 /* Debug */,
 | 
					 | 
				
			||||||
				331C8089294A63A400263BE5 /* Release */,
 | 
					 | 
				
			||||||
				331C808A294A63A400263BE5 /* Profile */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			defaultConfigurationIsVisible = 0;
 | 
					 | 
				
			||||||
			defaultConfigurationName = Release;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
 | 
					 | 
				
			||||||
			isa = XCConfigurationList;
 | 
					 | 
				
			||||||
			buildConfigurations = (
 | 
					 | 
				
			||||||
				97C147031CF9000F007C117D /* Debug */,
 | 
					 | 
				
			||||||
				97C147041CF9000F007C117D /* Release */,
 | 
					 | 
				
			||||||
				249021D3217E4FDB00AE95B9 /* Profile */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			defaultConfigurationIsVisible = 0;
 | 
					 | 
				
			||||||
			defaultConfigurationName = Release;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
 | 
					 | 
				
			||||||
			isa = XCConfigurationList;
 | 
					 | 
				
			||||||
			buildConfigurations = (
 | 
					 | 
				
			||||||
				97C147061CF9000F007C117D /* Debug */,
 | 
					 | 
				
			||||||
				97C147071CF9000F007C117D /* Release */,
 | 
					 | 
				
			||||||
				249021D4217E4FDB00AE95B9 /* Profile */,
 | 
					 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
			defaultConfigurationIsVisible = 0;
 | 
					 | 
				
			||||||
			defaultConfigurationName = Release;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
/* End XCConfigurationList section */
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	rootObject = 97C146E61CF9000F007C117D /* Project object */;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<Workspace
 | 
					 | 
				
			||||||
   version = "1.0">
 | 
					 | 
				
			||||||
   <FileRef
 | 
					 | 
				
			||||||
      location = "self:">
 | 
					 | 
				
			||||||
   </FileRef>
 | 
					 | 
				
			||||||
</Workspace>
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					 | 
				
			||||||
<plist version="1.0">
 | 
					 | 
				
			||||||
<dict>
 | 
					 | 
				
			||||||
	<key>IDEDidComputeMac32BitWarning</key>
 | 
					 | 
				
			||||||
	<true/>
 | 
					 | 
				
			||||||
</dict>
 | 
					 | 
				
			||||||
</plist>
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					 | 
				
			||||||
<plist version="1.0">
 | 
					 | 
				
			||||||
<dict>
 | 
					 | 
				
			||||||
	<key>PreviewsEnabled</key>
 | 
					 | 
				
			||||||
	<false/>
 | 
					 | 
				
			||||||
</dict>
 | 
					 | 
				
			||||||
</plist>
 | 
					 | 
				
			||||||
@@ -1,101 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<Scheme
 | 
					 | 
				
			||||||
   LastUpgradeVersion = "1510"
 | 
					 | 
				
			||||||
   version = "1.3">
 | 
					 | 
				
			||||||
   <BuildAction
 | 
					 | 
				
			||||||
      parallelizeBuildables = "YES"
 | 
					 | 
				
			||||||
      buildImplicitDependencies = "YES">
 | 
					 | 
				
			||||||
      <BuildActionEntries>
 | 
					 | 
				
			||||||
         <BuildActionEntry
 | 
					 | 
				
			||||||
            buildForTesting = "YES"
 | 
					 | 
				
			||||||
            buildForRunning = "YES"
 | 
					 | 
				
			||||||
            buildForProfiling = "YES"
 | 
					 | 
				
			||||||
            buildForArchiving = "YES"
 | 
					 | 
				
			||||||
            buildForAnalyzing = "YES">
 | 
					 | 
				
			||||||
            <BuildableReference
 | 
					 | 
				
			||||||
               BuildableIdentifier = "primary"
 | 
					 | 
				
			||||||
               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
 | 
					 | 
				
			||||||
               BuildableName = "Runner.app"
 | 
					 | 
				
			||||||
               BlueprintName = "Runner"
 | 
					 | 
				
			||||||
               ReferencedContainer = "container:Runner.xcodeproj">
 | 
					 | 
				
			||||||
            </BuildableReference>
 | 
					 | 
				
			||||||
         </BuildActionEntry>
 | 
					 | 
				
			||||||
      </BuildActionEntries>
 | 
					 | 
				
			||||||
   </BuildAction>
 | 
					 | 
				
			||||||
   <TestAction
 | 
					 | 
				
			||||||
      buildConfiguration = "Debug"
 | 
					 | 
				
			||||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
					 | 
				
			||||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
					 | 
				
			||||||
      customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
 | 
					 | 
				
			||||||
      shouldUseLaunchSchemeArgsEnv = "YES">
 | 
					 | 
				
			||||||
      <MacroExpansion>
 | 
					 | 
				
			||||||
         <BuildableReference
 | 
					 | 
				
			||||||
            BuildableIdentifier = "primary"
 | 
					 | 
				
			||||||
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
 | 
					 | 
				
			||||||
            BuildableName = "Runner.app"
 | 
					 | 
				
			||||||
            BlueprintName = "Runner"
 | 
					 | 
				
			||||||
            ReferencedContainer = "container:Runner.xcodeproj">
 | 
					 | 
				
			||||||
         </BuildableReference>
 | 
					 | 
				
			||||||
      </MacroExpansion>
 | 
					 | 
				
			||||||
      <Testables>
 | 
					 | 
				
			||||||
         <TestableReference
 | 
					 | 
				
			||||||
            skipped = "NO"
 | 
					 | 
				
			||||||
            parallelizable = "YES">
 | 
					 | 
				
			||||||
            <BuildableReference
 | 
					 | 
				
			||||||
               BuildableIdentifier = "primary"
 | 
					 | 
				
			||||||
               BlueprintIdentifier = "331C8080294A63A400263BE5"
 | 
					 | 
				
			||||||
               BuildableName = "RunnerTests.xctest"
 | 
					 | 
				
			||||||
               BlueprintName = "RunnerTests"
 | 
					 | 
				
			||||||
               ReferencedContainer = "container:Runner.xcodeproj">
 | 
					 | 
				
			||||||
            </BuildableReference>
 | 
					 | 
				
			||||||
         </TestableReference>
 | 
					 | 
				
			||||||
      </Testables>
 | 
					 | 
				
			||||||
   </TestAction>
 | 
					 | 
				
			||||||
   <LaunchAction
 | 
					 | 
				
			||||||
      buildConfiguration = "Debug"
 | 
					 | 
				
			||||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
					 | 
				
			||||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
					 | 
				
			||||||
      customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
 | 
					 | 
				
			||||||
      launchStyle = "0"
 | 
					 | 
				
			||||||
      useCustomWorkingDirectory = "NO"
 | 
					 | 
				
			||||||
      ignoresPersistentStateOnLaunch = "NO"
 | 
					 | 
				
			||||||
      debugDocumentVersioning = "YES"
 | 
					 | 
				
			||||||
      debugServiceExtension = "internal"
 | 
					 | 
				
			||||||
      enableGPUValidationMode = "1"
 | 
					 | 
				
			||||||
      allowLocationSimulation = "YES">
 | 
					 | 
				
			||||||
      <BuildableProductRunnable
 | 
					 | 
				
			||||||
         runnableDebuggingMode = "0">
 | 
					 | 
				
			||||||
         <BuildableReference
 | 
					 | 
				
			||||||
            BuildableIdentifier = "primary"
 | 
					 | 
				
			||||||
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
 | 
					 | 
				
			||||||
            BuildableName = "Runner.app"
 | 
					 | 
				
			||||||
            BlueprintName = "Runner"
 | 
					 | 
				
			||||||
            ReferencedContainer = "container:Runner.xcodeproj">
 | 
					 | 
				
			||||||
         </BuildableReference>
 | 
					 | 
				
			||||||
      </BuildableProductRunnable>
 | 
					 | 
				
			||||||
   </LaunchAction>
 | 
					 | 
				
			||||||
   <ProfileAction
 | 
					 | 
				
			||||||
      buildConfiguration = "Profile"
 | 
					 | 
				
			||||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
					 | 
				
			||||||
      savedToolIdentifier = ""
 | 
					 | 
				
			||||||
      useCustomWorkingDirectory = "NO"
 | 
					 | 
				
			||||||
      debugDocumentVersioning = "YES">
 | 
					 | 
				
			||||||
      <BuildableProductRunnable
 | 
					 | 
				
			||||||
         runnableDebuggingMode = "0">
 | 
					 | 
				
			||||||
         <BuildableReference
 | 
					 | 
				
			||||||
            BuildableIdentifier = "primary"
 | 
					 | 
				
			||||||
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
 | 
					 | 
				
			||||||
            BuildableName = "Runner.app"
 | 
					 | 
				
			||||||
            BlueprintName = "Runner"
 | 
					 | 
				
			||||||
            ReferencedContainer = "container:Runner.xcodeproj">
 | 
					 | 
				
			||||||
         </BuildableReference>
 | 
					 | 
				
			||||||
      </BuildableProductRunnable>
 | 
					 | 
				
			||||||
   </ProfileAction>
 | 
					 | 
				
			||||||
   <AnalyzeAction
 | 
					 | 
				
			||||||
      buildConfiguration = "Debug">
 | 
					 | 
				
			||||||
   </AnalyzeAction>
 | 
					 | 
				
			||||||
   <ArchiveAction
 | 
					 | 
				
			||||||
      buildConfiguration = "Release"
 | 
					 | 
				
			||||||
      revealArchiveInOrganizer = "YES">
 | 
					 | 
				
			||||||
   </ArchiveAction>
 | 
					 | 
				
			||||||
</Scheme>
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<Workspace
 | 
					 | 
				
			||||||
   version = "1.0">
 | 
					 | 
				
			||||||
   <FileRef
 | 
					 | 
				
			||||||
      location = "group:Runner.xcodeproj">
 | 
					 | 
				
			||||||
   </FileRef>
 | 
					 | 
				
			||||||
</Workspace>
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					 | 
				
			||||||
<plist version="1.0">
 | 
					 | 
				
			||||||
<dict>
 | 
					 | 
				
			||||||
	<key>IDEDidComputeMac32BitWarning</key>
 | 
					 | 
				
			||||||
	<true/>
 | 
					 | 
				
			||||||
</dict>
 | 
					 | 
				
			||||||
</plist>
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					 | 
				
			||||||
<plist version="1.0">
 | 
					 | 
				
			||||||
<dict>
 | 
					 | 
				
			||||||
	<key>PreviewsEnabled</key>
 | 
					 | 
				
			||||||
	<false/>
 | 
					 | 
				
			||||||
</dict>
 | 
					 | 
				
			||||||
</plist>
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
import Flutter
 | 
					 | 
				
			||||||
import UIKit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@main
 | 
					 | 
				
			||||||
@objc class AppDelegate: FlutterAppDelegate {
 | 
					 | 
				
			||||||
  override func application(
 | 
					 | 
				
			||||||
    _ application: UIApplication,
 | 
					 | 
				
			||||||
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
 | 
					 | 
				
			||||||
  ) -> Bool {
 | 
					 | 
				
			||||||
    GeneratedPluginRegistrant.register(with: self)
 | 
					 | 
				
			||||||
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 24 KiB  | 
| 
		 Before Width: | Height: | Size: 345 B  | 
| 
		 Before Width: | Height: | Size: 504 B  | 
| 
		 Before Width: | Height: | Size: 859 B  | 
| 
		 Before Width: | Height: | Size: 488 B  | 
| 
		 Before Width: | Height: | Size: 845 B  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 504 B  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 777 B  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 811 B  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 967 B  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.0 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB  | 
@@ -1,21 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "images" : [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "background.png",
 | 
					 | 
				
			||||||
      "idiom" : "universal",
 | 
					 | 
				
			||||||
      "scale" : "1x"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "idiom" : "universal",
 | 
					 | 
				
			||||||
      "scale" : "2x"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "idiom" : "universal",
 | 
					 | 
				
			||||||
      "scale" : "3x"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "info" : {
 | 
					 | 
				
			||||||
    "author" : "xcode",
 | 
					 | 
				
			||||||
    "version" : 1
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 69 B  | 
@@ -1,23 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "images" : [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "LaunchImage.png",
 | 
					 | 
				
			||||||
      "idiom" : "universal",
 | 
					 | 
				
			||||||
      "scale" : "1x"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "LaunchImage@2x.png",
 | 
					 | 
				
			||||||
      "idiom" : "universal",
 | 
					 | 
				
			||||||
      "scale" : "2x"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "filename" : "LaunchImage@3x.png",
 | 
					 | 
				
			||||||
      "idiom" : "universal",
 | 
					 | 
				
			||||||
      "scale" : "3x"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "info" : {
 | 
					 | 
				
			||||||
    "author" : "xcode",
 | 
					 | 
				
			||||||
    "version" : 1
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 69 B  | 
| 
		 Before Width: | Height: | Size: 69 B  | 
| 
		 Before Width: | Height: | Size: 69 B  | 
@@ -1,5 +0,0 @@
 | 
				
			|||||||
# Launch Screen Assets
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
 | 
					 | 
				
			||||||