Xcode address sanitizer issue with `UIImage imageNamed:#""` - ios

When activating address sanitizer in Xcode 8, I do get an issue at the following line of code:
UIImage *myImage = [UIImage imageNamed:imageName];
imageName is an NSString, the according image exists in #1x, #2x,
#3x. The address sanitizer issue:
=================================================================
==2484==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x01d37310 in thread T0
#0 0x1fff73 in wrap_free (/private/var/mobile/Containers/Bundle/Application/C92A762E-DAAF-46D9-857B-151BAF97D0BB/Example.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib+0x32f73)
#1 0x2b50fab5 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2ab5)
#2 0x2b50fbe5 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2be5)
#3 0x2b5463e1 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x393e1)
#4 0x2b548307 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b307)
#5 0x2b548233 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b233)
#6 0x2b5606db in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x536db)
#7 0x2b560233 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x53233)
#8 0x2924b611 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632611)
#9 0x2924b375 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632375)
#10 0x2924baf3 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632af3)
#11 0x28eaf8bd in (/System/Library/Frameworks/UIKit.framework/UIKit+0x2968bd)
#12 0x28d46e45 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x12de45)
#13 0x76c4d1 in -[MyClass myMethod] (/private/var/mobile/Containers/Bundle/Application/C92A762E-DAAF-46D9-857B-151BAF97D0BB/Example.app/Frameworks/XY.framework/XY+0x2e4d1)
#16 0x28c2874b in (/System/Library/Frameworks/UIKit.framework/UIKit+0xf74b)
#17 0x28c284bb in (/System/Library/Frameworks/UIKit.framework/UIKit+0xf4bb)
#18 0x28c2e5e5 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x155e5)
#19 0x28c2bf5d in (/System/Library/Frameworks/UIKit.framework/UIKit+0x12f5d)
#20 0x28c9707f in (/System/Library/Frameworks/UIKit.framework/UIKit+0x7e07f)
#21 0x28e8a505 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x271505)
#22 0x28e8cacd in (/System/Library/Frameworks/UIKit.framework/UIKit+0x273acd)
#23 0x28e977a7 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x27e7a7)
#24 0x28e8b285 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x272285)
#25 0x2c09aebf in (/System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices+0x15ebf)
#26 0x2558e253 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xd0253)
#27 0x2558d517 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xcf517)
#28 0x2558c071 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xce071)
#29 0x254d799f in CFRunLoopRunSpecific (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x1999f)
#30 0x254d77b1 in CFRunLoopRunInMode (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x197b1)
#31 0x28c8da55 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x74a55)
#32 0x28c88633 in UIApplicationMain (/System/Library/Frameworks/UIKit.framework/UIKit+0x6f633)
#34 0x34020aad in (/usr/lib/system/libdyld.dylib+0x1aad)
0x01d37310 is located 0 bytes inside of 34-byte region [0x01d37310,0x01d37332)
When I use a non-existing imageName, then the address sanitizer has no problem with that line.
The problem only seems to affect iOS 8, address sanitizer has no problems on iOS 9 and iOS 10 (latest beta). On iOS 8 it also works when I don't put the image in an asset but directly into the bundle.

This seems to be a bug in Xcode 8 Beta 6 (8S201h).
When setting the Deployment Target of your App to iOS 8.3 calling UIImage imageNamed: will crash when the referenced image is coming from an asset catalog. Using UIImage imageNamed:inBundle:compatibleWithTraitCollection: will not make a difference.
Workarounds:
Set the deployment target < iOS 8.3. iOS 8.0/.1/.2 works for me, 8.3/.4 keeps crashing
put the image directly in the apps bundle, not an asset catalog
An example project for this issue can be found on GitHub

Related

Bad Access exception at startup in Xcode 14.0.1 debugger (iOS)

Our iOS app, which was working normally under earlier iOS versions, now has an exception at startup in iOS 16.
Thread 1: EXC_BAD_ACCESS (code=1, address=0x1176aca60)
But this is only visible when debugging; if I run it directly on device, it appears to run fine. Still a problem because we cannot debug our app.
There is very little information available, but this is the call stack, none of which is our code. I stepped through a lot of our startup code without noticing any problems.
Thread 1 Queue : com.apple.main-thread (serial)
#0 0x0000000183aa3518 in objc_release ()
#1 0x0000000183aa15d8 in AutoreleasePoolPage::releaseUntil(objc_object**) ()
#2 0x0000000183aa4f40 in objc_autoreleasePoolPop ()
#3 0x00000001a0061aec in -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] ()
#4 0x00000001a009cd3c in __92-[FBSWorkspaceScenesClient createSceneWithIdentity:parameters:transitionContext:completion:]_block_invoke ()
#5 0x000000010900e04c in _dispatch_client_callout ()
#6 0x0000000109011ac8 in _dispatch_block_invoke_direct ()
#7 0x00000001a006bf2c in FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK ()
#8 0x00000001a006bac8 in -[FBSSerialQueue _targetQueue_performNextIfPossible] ()
#9 0x00000001a006e2a8 in -[FBSSerialQueue _performNextFromRunLoopSource] ()
#10 0x000000018a7be22c in CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION ()
#11 0x000000018a7ca614 in __CFRunLoopDoSource0 ()
#12 0x000000018a74e57c in __CFRunLoopDoSources0 ()
#13 0x000000018a763eb8 in __CFRunLoopRun ()
#14 0x000000018a7691e4 in CFRunLoopRunSpecific ()
#15 0x00000001c3589368 in GSEventRunModal ()
#16 0x000000018cc18d88 in -[UIApplication _run] ()
#17 0x000000018cc189ec in UIApplicationMain ()
#18 0x0000000101d76580 in main at /Users/aaronl/engine-johnsonville/src/platform/ios/main.mm:8
#19 0x00000001a8a8d948 in start ()
Turning on some Xcode debug flags showed the following message:
2022-10-13 16:33:49.020927+1300 umajin_viewer[1297:357539] *** -[CaptureMTLCaptureScope release]: message sent to deallocated instance 0x280aafb40
The app is a combination of Objective-C and C++, and has Vulkan graphics rendering on top of Metal. All this was working well up till now.
I'm looking for any clues on how to find out what is going wrong!
Eventually we were able to confirm that this was a problem in MoltenVK, the implementation of Vulkan on top of Metal for iOS and Mac. It was releasing something that Apple expects to be autoreleased (MTLCaptureScope)? Because it wasn't our code we couldn't see into it. Upgrading to the latest solved this.

calling Firebase.initializeApp() but still receive an error stating No Firebase App has been created, ONLY when using ios simulator

I have initialized Firebase in different ways.
1.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
#override
void initState() {
super.initState();
Firebase.initializeApp().whenComplete(() {
print("completed");
setState(() {});
});
}
including using FirebaseOption and adding appId, apiKey, projectId, messgingSenderId(dummy id)
//Using a FutureBuilder
atm these libraries are present:
firebase_core: ^1.10.6
firebase_auth: ^3.3.7
cloud_firestore: ^3.1.8
firebase_database: ^9.0.6
firebase_core_platform_interface: ^4.2.4
GogleService-Info.plsit is under flutterProject>ios>Runner
added via Xcode
I'm using a mac
Podfile has platform: ios, '11.0'
printing snapshot.connectionState = waiting & done
I receive an error when trying to persist to the database
I'm using FireStore Database
when trying to persist to the database using the Andriod emulator, I do not receive an error. obj is persisted.
but when trying to persist the same obj using the ios simulator I receive this error:
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
When the exception was thrown, this was the stack:
#0 MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:159:5)
#1 Firebase.app (package:firebase_core/src/firebase.dart:55:41)
#2 FirebaseFirestore.instance (package:cloud_firestore/src/firestore.dart:27:21)
#3 _firestore (package:flutter_shopping_app_fraire/providers/products.dart:6:56)
#4 _firestore (package:flutter_shopping_app_fraire/providers/products.dart)
#5 Products.addProduct (package:flutter_shopping_app_fraire/providers/products.dart:71:5)
#6 _EditProductScreenState._saveForm (package:flutter_shopping_app_fraire/screens/edit_product_screen.dart:111:53)
#7 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21)
#8 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24)
#9 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11)
#10 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
#11 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
#12 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:563:9)
#13 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:94:12)
#14 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:139:9)
#15 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:539:8)
#16 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:137:18)
#17 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:123:7)
#18 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:439:19)
#19 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:419:22)
#20 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:322:11)
#21 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7)
#22 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5)
#23 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:296:7)
#24 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:279:7)
#28 _invoke1 (dart:ui/hooks.dart:170:10)
#29 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
#30 _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
(elided 3 frames from dart:async)
Handler: "onTap"
Recognizer: TapGestureRecognizer#32df4
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(372.7, 95.0)
finalLocalPosition: Offset(30.7, 48.0)
button: 1
sent tap down
If you have followed all necessary implementation from google docs. Just do the following. I've faced the same issue. Adding options fixed mine.
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
Not sure exactly where I went wrong when implementing firebase/firestore into my flutter project(I was doing everything manually), but I got the ios simulator to connect with firestore database by registering my ios app using FlutterFire CLI.
so instead of manually creating a new firebase project, and registering my ios and android apps through my firebase console, I installed Firebase CLI to my project, then installed FlutterFire CLI and ran flutterfire configure, You go through a couple prompts. That created my project and also registered my apps.
It was really that simple and now both of my ios and andriod can reach the database.

Firebase initWithUrl crashes on iOS 5.1

I'm developing a Firebase app to use on my old iPad first generation (iOS 5.1.1). It works fine on the simulator and on other devices but, when I load it on the iPad to test, I receive a crash like this one:
#0 0x33860f86 in objc_msgSend ()
#1 0x33862f94 in objc_retain ()
#2 0x000d26a0 in -[FRepoManager setQueue:] at /Users/mtse/Dev/firebase/firebase-client-objc/Firebase/Firebase/Core/FRepoManager.m:24
#3 0x33fdc5aa in dispatch_once_f$VARIANT$up ()
#4 0x000d1a80 in _dispatch_once [inlined] at /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/include/dispatch/once.h:68
#5 0x000d1a70 in +[FRepoManager singleton] at /Users/mtse/Dev/firebase/firebase-client-objc/Firebase/Firebase/Core/FRepoManager.m:37
#6 0x000e6736 in -[Firebase initWithUrl:] at /Users/mtse/Dev/firebase/firebase-client-objc/Firebase/Firebase/Firebase.m:54
#7 0x000c6f82 in -[AppDelegate application:didFinishLaunchingWithOptions:] at /xxx/AppDelegate.m:25
#8 0x3337acaa in -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] ()
#9 0x333747dc in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] ()
#10 0x33342ac2 in -[UIApplication handleEvent:withNewEvent:] ()
#11 0x33342566 in -[UIApplication sendEvent:] ()
#12 0x33341f3a in _UIApplicationHandleEvent ()
#13 0x3393422a in PurpleEventCallback ()
#14 0x35c16522 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#15 0x35c164c4 in __CFRunLoopDoSource1 ()
#16 0x35c15312 in __CFRunLoopRun ()
#17 0x35b984a4 in CFRunLoopRunSpecific ()
#18 0x35b9836c in CFRunLoopRunInMode ()
#19 0x3337386a in -[UIApplication _run] ()
#20 0x33370cd4 in UIApplicationMain ()
#21 0x000c778c in main at /xxx/main.m:14
This happens as soon as the code reaches this line:
Firebase *ref = [[Firebase alloc] initWithUrl:kFirebaseURL];
I tried even downgrading the Firebase framework to older ones but the problem persists. I have the -ObjC linker flag set too. Any ideas of how this can be solved?
Sorry, iOS 5.x is no longer supported by the Firebase SDK. You can try old versions of the SDK to see if one works, but offhand I do not know.
You can fix this by downgrading to v1.0.8 of the framework (direct link to ZIP file) — this is the newest version that doesn't experience this crash on an iPad 1 with iOS 5.1.1.

Glympse API I am not able to run the sendTicket (Glympse Lite API) when compiling against iOS 7.1 base SDK

When I envoke '[GlympseLiteWrapper instance].glympse->sendTicket(_glympseTicket, wizardFlags);'
I am getting a debugger breakpoint (exception) in Thread 1:
it seems to originate from +[NSBundle(glympse) liteBundle]_block_invoke
Anyone else having this issue or know how to fix this problem?
Glympse API version: 1.0.5
I have used version 1.0.2 on iOS 6 and iOS 7.0 with success, but this problem seemed to appear when building with Xcode 5.1 against iOS 7.1.
I do have the "-ObjC" flag set.
Note: I originally posted this in the wrong location:
https://github.com/Glympse/glympse-app-sdk/issues/1#issuecomment-39362544
Edit #1: (I also tried this using iOS 7.0 base, so now I am not sure what is going on) Here is the full stack trace:
Thread 1, Queue : com.apple.main-thread
#0 0x036948b9 in objc_exception_throw ()
#1 0x04d09fbb in +[NSException raise:format:] ()
#2 0x011bd78e in -[NSBundle initWithURL:] ()
#3 0x000bc78c in __31+[NSBundle(glympse) liteBundle]_block_invoke at /Users/egorpushkin/Projects/Glympse/ClientAPI/Cpp/Platforms/iOS/controls/GLYCommon/Categories/NSBundle+glympse.mm:35
#4 0x03a154d0 in _dispatch_client_callout ()
#5 0x03a04e12 in dispatch_once_f ()
#6 0x03a04d55 in dispatch_once ()
#7 0x000bc70d in _dispatch_once(long*, void () block_pointer) [inlined] at /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/include/dispatch/once.h:68
#8 0x000bc6f5 in +[NSBundle(glympse) liteBundle] at /Users/egorpushkin/Projects/Glympse/ClientAPI/Cpp/Platforms/iOS/controls/GLYCommon/Categories/NSBundle+glympse.mm:34
#9 0x00115df6 in -[GLYConfiguratorViewerOwner ensureWindowCreated] at /Users/egorpushkin/Projects/Glympse/ClientAPI/Cpp/Platforms/iOS/controls/GLYConfigurator/GLYConfiguratorViewerOwner.mm:113
#10 0x0011625c in -[GLYConfiguratorViewerOwner showSendWizard:ticket:intro:flags:listener:] at /Users/egorpushkin/Projects/Glympse/ClientAPI/Cpp/Platforms/iOS/controls/GLYConfigurator/GLYConfiguratorViewerOwner.mm:166
#11 0x00115b7d in +[GLYConfiguratorViewerOwner showSendWizard:ticket:intro:flags:listener:] at /Users/egorpushkin/Projects/Glympse/ClientAPI/Cpp/Platforms/iOS/controls/GLYConfigurator/GLYConfiguratorViewerOwner.mm:80
#12 0x001192ad in Glympse::ControlsFactory::showSendWizard(Glympse::O<Glympse::IGlympse> const&, Glympse::O<Glympse::ITicket> const&, bool, int, Glympse::O<Glympse::IUiControlListener> const&) at /Users/egorpushkin/Projects/Glympse/ClientAPI/Cpp/Platforms/iOS/controls/GLYCommon/ControlsFactory.mm:23
#13 0x002a41a9 in Glympse::GlympseLite::sendTicket(Glympse::O<Glympse::ITicketLite> const&, int) ()
#14 0x00062b02 in -[LiveDataViewController sendGlympse] at /Users/sgano/Desktop/HotAir_v8.0.2/Classes/LiveDataViewController.mm:2845
#15 0x0005a82c in __40-[LiveDataViewController viewDidAppear:]_block_invoke at /Users/sgano/Desktop/HotAir_v8.0.2/Classes/LiveDataViewController.mm:475
#16 0x03a007b8 in _dispatch_call_block_and_release ()
#17 0x03a154d0 in _dispatch_client_callout ()
#18 0x03a029c6 in _dispatch_after_timer_callback ()
#19 0x03a154d0 in _dispatch_client_callout ()
#20 0x03a0be93 in _dispatch_source_latch_and_call ()
#21 0x03a0643f in _dispatch_source_invoke ()
#22 0x03a036b6 in _dispatch_main_queue_callback_4CF ()
#23 0x04d6f43e in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
#24 0x04cb05cb in __CFRunLoopRun ()
#25 0x04caf9d3 in CFRunLoopRunSpecific ()
#26 0x04caf7eb in CFRunLoopRunInMode ()
#27 0x04a155ee in GSEventRunModal ()
#28 0x04a1542b in GSEventRun ()
#29 0x01546f9b in UIApplicationMain ()
#30 0x000029df in main at /Users/sgano/Desktop/HotAir_v8.0.2/main.m:14
I believe I have just solved the problem! I needed to add the "GlympseResourcesLite.bundle" to the Copy Bundle Resources area of the Target's Build Phases section. Once I did that it cleared up the exception.
You may want to add that note (and the -ObjC linker flag requirement) to the Client Integration Guide -- it might help out future devs.
Note: I got this idea from reading abbood's answer to this question:
Objective-C categories in static library

App works for ios 4.3 simulator, but not ios 5 simulator. Any ideas?

My app runs fine in the ios 4.3 simulator, but not the ios 5 simulator. I have ios 5 on my iPhone, and my app DOES work on the iPhone.
The app compiles fine in all of these three environments.
In the ios5 simulator, I get the following cryptic thread crash reports.
mig_get_reply_port appears to be the method call with a
0x935d5ef3 <+0012> test %eax,%eax
"EXC_BAD_ACCESS"
Is this a configuration issue?
- #0 0x00000000 in <????> ()
#1 0x935d5ef3 in mig_get_reply_port ()
#2 0x935cf70c in mach_ports_lookup ()
#3 0x01d4b124 in _xpc_domain_init_local ()
#4 0x01d48eb1 in _libxpc_initializer ()
#5 0x8feaa203 in __dyld__ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
()
#6 0x8fea9d68 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE
()
#7 0x8fea72c8 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#8 0x8fea725e in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#9 0x8fea725e in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#10 0x8fea725e in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#11 0x8fea725e in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#12 0x8fea725e in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#13 0x8fea725e in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE
()
#14 0x8fea8268 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE
()
#15 0x8fe9c694 in __dyld__ZN4dyld24initializeMainExecutableEv ()
#16 0x8fea0f99 in __dyld__ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_ ()
#17 0x8fe9a2ef in __dyld__ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_ ()
#18 0x8fe9a063 in __dyld__dyld_start ()
Thanks!
I believe this is a duplicate of questions asked earlier. Check out:
iOS App crashing before entering main() with Xcode 4.2 & iOS 5
Application crashes on simulator 5.0 before reaching main.m
Also, this seems to indicate that this is ultimately a bug in the simulator:
http://www.openradar.me/10464051
Replacing libxml2 to libxml2.2.7.3 worked amongst the various solutions ! :)

Resources