#      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe9;T6Helper class for generating anonymous parameter lists.Represents a list of parameter names. The number of names in the list is statically encoded using the length of the function type held in the type parameter a. Coverts a % list to an ordinary list of strings.Adds one parameter name to a  list. An empty  list. Produces a  list with a single name.Polymorphically produces 8 lists of any length filled with blank parameter names.    Safe Safe  Safe <Represents a named member of the QML class which wraps type tt.9Generate MOC meta-data from a class name and member list.S S 6  None@      !"#$%&'()*+,-./0123456789:;@      !"#$%&'()*+,-./0123456789:;>      !"#$%&'()*+,-./0123456789:; None5<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop5<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop2<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop NoneDORT FEncapsulates the functionality to needed to implement an instance of Q so that such instances can be defined without access to implementation details. Type index into B for querying the type encapsulated by the mode's object handles. gType function which returns the type encapsulated by the object handles used by the marshallable type t.Type index into 3 for querying if the mode supports an object type.Type function equal to  if the marshallable type t is an object.Type index into < for querying if the mode supports returning values to QML.Type function equal to  if the marshallable type t! supports being returned to QML.Type index into : for querying if the mode supports passing values to QML.Type function equal to  if the marshallable type t supports being passed to QML.Type index into > for querying if the mode supports receiving values from QML.Type function equal to  if the marshallable type t# supports being received from QML.q4Type value indicating a capability is not supported.0Type value indicating a capability is supported.+ for object types with to-only marshalling.- for object types with from-only marshalling.1 for object types with bidirectional marshalling. for void in method returns./ for non-object types with to-only marshalling.1 for non-object types with from-only marshalling.5 for non-object types with bidirectional marshalling. The class I allows Haskell values to be marshalled to and from the QML environment.The Y associated type family specifies the marshalling capabilities offered by the instance. c* indicates the capability being queried. dB is dummy parameter which allows certain instances to type check.  Yields the   for the type t.F rstuvwxyz q {|}~E rstuvwxyz q {|}~; rstuvwxyz q {|}~None9;DRT!.Represents an argument whose value is ignored.#Provides a bidirectional  , which allows you to define an instance of  for your own type b( in terms of another marshallable type a. Type b should have a  of  or  depending on whether a was an object type or not.$ Variant of #/ where the conversion functions between types a and b do not live in the IO monad.%Provides a "from"  , which allows you to define an instance of  for your own type b' in terms of another marshallable type a. Type b should have a  of  or  depending on whether a was an object type or not.& Variant of %. where the conversion function between types a and b does not live in the IO monad.'Provides a "to"  , which allows you to define an instance of  for your own type b' in terms of another marshallable type a. Type b should have a  of  or  depending on whether a was an object type or not.( Variant of '. where the conversion function between types a and b does not live in the IO monad.!"#$%&'()*+,-./0  !"#$%&'(  !"#$%&'(!"#$%&'()*+,-./0NoneDRT1URepresents an instance of a QML class which wraps an arbitrary Haskell type. Unlike 2, an 1e only carries the type of its Haskell value dynamically and does not encode it into the static type.2=Represents an instance of the QML class which wraps the type tt.121212None 3ZRepresents an object factory which maintains a one-to-one mapping between values of type tt and QML object instances.2=s manufactured by the pool are cached using the wrapped type tt as the lookup key in an ordered map. The pool uses weak references to automatically purge objects which no longer have any strong references leading to them from either Haskell or QML code.4MRepresents an object finaliser function for QML objects which wrap the type tt.5ARepresents a weak reference to a QML object which wraps the type tt.Unlike ordinary strong references, a weak reference does not prevent the QML garbage collector from collecting the underlying object. Weak references can be used to monitor the life cycles of QML objects.6Converts a strong 2 into a 5. 7 Converts a 5 into a strong 2.LIf the underlying QML object has already been collected then the resulting 2 can be used to reincarnate it.88Create a new object finaliser from a finaliser function.Note that at the time the finaliser is called the runtime will have already comitted to collecting the underlying QML object. The 2 passed into the finaliser can be used to reincarnate the object, but this QML object will have a distinct identity to the original.9*Adds an object finaliser to an QML object.KThe finaliser will be called no more than once for each time it was added to an object. The timing of finaliser execution is subject to the combined behaviour of the Haskell and QML garbage collectors. All outstanding finalisers will be run when the QML engine is terminated provided that the program does not prematurely exit.:Creates a new 3% using the supplied factory function.;6Return the pool's canonical QML object for a value of ttI, either by creating it or looking it up in the pool's cache of objects.3456789:; 3456789:; 5674893:; 3456789:;None43,NoneNone 9:;DNRT<HSupports marshalling an arbitrary number of arguments into a QML signal.=Instances of the =: class identify distinct signals by type. The associated >' type specifies the signal's signature.?Values of the type ?9 identify distinct signals by value. The type parameter p" specifies the signal's signature.@NSupports marshalling Haskell functions with an arbitrary number of arguments.A The class A5 specifies a standard class definition for the type tt.BList of default class members.C,Represents a QML class which wraps the type tt.DCreates a QML object given a C and a Haskell value of type tt.E3Creates a QML object given a Haskell value of type tt which has a A instance.F<Returns the associated value of the underlying Haskell type tt3 from an instance of the QML class which wraps it.G Upcasts an 2 into an 1.HAttempts to downcast an 1 into an 2, with the specific underlying Haskell type tt.I%Creates a new QML class for the type tt.J(Defines a named method using a function f in the IO monad.The first argument to f receives the "this" object and hence must match the type of the class on which the method is being defined. Subsequently, there may be zero or more parameter arguments followed by an optional return argument in the IO monad.K Alias of JC which is less polymorphic to reduce the need for type signatures.LIDefines a named signal. The signal is identified in subsequent calls to N using a *. This can be either i) type-based using  sk where sk is an instance of the =# class or ii) value-based using a ? value creating using O.MNDefines a named signal with named parameters. This is otherwise identical to LY, but allows QML code to reference signal parameters by-name in addition to by-position.NFires a signal defined on an object instance. The signal is identified using either a type- or value-based signal key, as described in the documentation for L. The first argument is the signal key, the second is the object, and the remaining arguments, if any, are the arguments to the signal as specified by the signal key.If this function is called using a signal key which doesn't match a signal defined on the supplied object, it will silently do nothing.This function is safe to call from any thread. Any attached signal handlers will be executed asynchronously on the event loop thread.OCreates a new ?. PNDefines a named constant property using an accessor function in the IO monad.QODefines a named read-only property using an accessor function in the IO monad.R=Defines a named read-only property with an associated signal.SdDefines a named read-write property using a pair of accessor and mutator functions in the IO monad.T>Defines a named read-write property with an associated signal.U Alias of PC which is less polymorphic to reduce the need for type signatures.V Alias of QC which is less polymorphic to reduce the need for type signatures.W Alias of RC which is less polymorphic to reduce the need for type signatures.X Alias of SC which is less polymorphic to reduce the need for type signatures.Y Alias of TC which is less polymorphic to reduce the need for type signatures.H<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab! 12<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY!2DEF1GHCIAB JK@LMN?O=><PQRSTUVWXY4<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abNone      !"#$      !"#$      !"#$None0:IcPath to a QML document file.dBException type used to report errors pertaining to the event loop.e!Represents a Qt application flag.faEnables resource sharing between OpenGL contexts. This must be set in order to use QtWebEngine. gSWrapper around the IO monad for running actions which depend on the Qt event loop.hRepresents a QML engine.i6Holds parameters for configuring a QML runtime engine.k,Path to the first QML document to be loaded.lContext Object# made available to QML script code.m'Additional search paths for QML modulesn.Additional search paths for QML native pluginso$Default engine configuration. Loads  "main.qml"R from the current working directory into a visible window with no context object.pcStarts a new QML engine using the supplied configuration and returns immediately without blocking.q,Waits for the specified Engine to terminate.r*Kills the specified Engine asynchronously.sStarts a new QML engine using the supplied configuration. The 'with' function is executed once the engine has been started and after it returns this function blocks until the engine has terminated.teStarts a new QML engine using the supplied configuration and blocks until the engine has terminated.uConveniance function that both runs the event loop and starts a new QML engine. It blocks keeping the event loop running until the engine has terminated.vRThis function enters the Qt event loop and executes the supplied function in the g` monad on a new unbound thread. The event loop will continue to run until all functions in the g/ monad have completed. This includes both the gE function launched by this call and any launched asynchronously via x=. When the event loop exits, all engines will be terminated.It's recommended that applications run the event loop on their primordial thread as some platforms mandate this. Once the event loop has finished, it can be started again, but only on the same operating system thread as before. If the event loop fails to start then an d will be thrown.MIf the event loop is entered for the first time then the currently set runtime command line arguments will be passed to Qt. Hence, while calling back to the supplied function, attempts to read the runtime command line arguments using the System.Environment module will only return those arguments not already consumed by Qt (per z).w/Enters the Qt event loop in the same manner as vI, but does not perform any processing related to command line arguments.xExecutes a function in the g monad asynchronously to the event loop. Callers must apply their own sychronisation to ensure that the event loop is currently running when this function is called, otherwise an dY will be thrown. The event loop will not exit until the supplied function has completed.ySets the program name and command line arguments used by Qt and returns True if successful. This must be called before the first time the Qt event loop is entered otherwise it will have no effect and return False. By default Qt receives no arguments and the program name is set to HsQML.zXGets the program name and any command line arguments remaining from an earlier call to yV once Qt has removed any it understands, leaving only application specific arguments.{Sets or clears one of the application flags used by Qt and returns True if successful. If the flag or flag value is not supported then it will return False. Setting flags once the Qt event loop is entered is unsupported and will also cause this function to return False.|:Gets the state of one of the application flags used by Qt.}Shuts down and frees resources used by the Qt framework, preventing further use of the event loop. The framework is initialised when v is first called and remains initialised afterwards so that the event loop can be reentered if desired (e.g. when using GHCi). Once shut down, the framework cannot be reinitialised.(It is recommended that you call this function at the end of your program as this library will try, but cannot guarantee in all configurations to be able to shut it down for you. Failing to shutdown the framework has been known to intermittently cause crashes on process exit on some platforms.yThis function must be called from the event loop thread and the event loop must not be running at the time otherwise an d will be thrown.~"Converts a local file path into a c.Converts a URI string into a c.-c%d&'()*efg+h,ijklmnop-.qrstuvw/xyz01{|}2~cdefghijklmnopqrstuvwxyz{|}~ijklmnohtspuqrgvwxyzef{|}dc~c%d&'()*efg+h,ijklmnop-.qrstuvw/xyz01{|}2~NoneSets the global debug log level. At level zero, no logging information will be printed. Higher levels will increase debug verbosity.None9;DRTSpecialised version of  with no model.)Encapsulates parameters for OpenGL paint.Gets the setup state.Gets the active model.Pointer to a 4 by 4 matrix which transform coordinates in the range (-1, -1) to (1, 1) on to the target rectangle in the scene.8Width of the canvas item in its local coordinate system.9Height of the canvas item in its local coordinate system.)Encapsulates parameters for OpenGL setup.Type of OpenGL context.'Major version number of OpenGL context.'Minor version number of OpenGL context.)Represents the type of an OpenGL context.Desktop OpenGL context.OpenGL ES context.&Delegate for painting OpenGL graphics.Creates a new * from setup, paint, and cleanup functions.34567 34567Nonee  !"#$%&'(123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYcdefghijklmnopqrstuvwxyz{|}~8     ! " # $ % & ' ( ) * + , - . / 0 1 2 34456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{{|}~                                                         ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F F G G H H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w  x y z { | } ~                                       CDEFGQU      u !"yz#$%&'()*+$hsqml-0.3.5.0-KSpT97HWJnaJsk5LjKaEWMGraphics.QML.Objects.ParamNamesGraphics.QML.ObjectsGraphics.QML.MarshalGraphics.QML.Objects.WeakGraphics.QML.EngineGraphics.QML.DebugGraphics.QML.CanvasGraphics.QML.ModelGraphics.QML.Internal.TypesGraphics.QML.Internal.MetaObjGraphics.QML.Internal.BindPrimGraphics.QML.Internal.BindObjGraphics.QML.Internal.MarshalGraphics.QML.Internal.ObjectsGraphics.QML.Internal.BindCoreGraphics.QML.Internal.JobQueue Graphics.QML.Internal.BindCanvas Graphics.QML AnonParams ParamNames paramNamesplusNamenoNamesfstName anonParams$fAnonParams()$fAnonParams(->)$fShowParamNamesMember Marshaller IGetObjType GetObjType IIsObjType IsObjType ICanReturnTo CanReturnTo ICanPassTo CanPassTo ICanGetFrom CanGetFromYes ModeObjTo ModeObjFrom ModeObjBidi ModeRetVoidModeToModeFromModeBidiMarshal MarshalMode marshallerIgnoredbidiMarshallerIObidiMarshallerfromMarshallerIOfromMarshallertoMarshallerIO toMarshaller$fMarshalIgnored $fMarshal[]$fMarshalMaybe $fMarshalText$fMarshalDouble $fMarshalInt$fMarshalInt32 $fMarshalBool AnyObjRefObjRef FactoryPool ObjFinaliser WeakObjRef toWeakObjReffromWeakObjRefnewObjFinaliseraddObjFinalisernewFactoryPool getPoolObject SignalSuffixSignalKeyClass SignalParams SignalKey MethodSuffix DefaultClass classMembersClass newObject newObjectDC fromObjRef anyObjRef fromAnyObjRefnewClass defMethod defMethod' defSignaldefSignalNamedParams fireSignal newSignalKeydefPropertyConst defPropertyROdefPropertySigRO defPropertyRWdefPropertySigRWdefPropertyConst'defPropertyRO'defPropertySigRO'defPropertyRW'defPropertySigRW'$fSignalSuffixIO$fSignalSuffix(->)$fSignalKeyValueSignalKey$fSignalKeyValueProxy$fIsVoidIOVoidIO$fIsVoidIO(->)$fMethodSuffixVoidIO$fMethodSuffixIO$fMethodSuffix(->) DocumentPathEventLoopExceptionQtFlagQtShareOpenGLContextsRunQMLEngine EngineConfiginitialDocument contextObject importPaths pluginPathsdefaultEngineConfigrunEngineAsync joinEngine killEngine runEngineWith runEngine runEngineLoop runEventLooprunEventLoopNoArgsrequireEventLoop setQtArgs getQtArgs setQtFlag getQtFlag shutdownQt fileDocument uriDocument$fExceptionEventLoopException$fMonadIORunQML$fFunctorRunQML$fApplicativeRunQML $fMonadRunQML $fShowQtFlag$fShowEventLoopExceptionsetDebugLogLevel OpenGLPaint' OpenGLPaint setupData modelData matrixPtr itemWidth itemHeight OpenGLSetup openGLType openGLMajor openGLMinor OpenGLType OpenGLDesktopOpenGLESOpenGLDelegatenewOpenGLDelegate$fMarshalOpenGLDelegate$fEqOpenGLType$fShowOpenGLType anonParams_StrengthStrongWeak ClassInfo cinfoObjType cinfoSignals MemberKeyTypeKeyDataKey UniformFuncTypeId compileClassMOCStatemDatamDataMethodsIdx mDataPropsIdxmStrCharmStrInfomStrMap mParamMapmSigMap mFuncMethodsmFuncProperties mMethodCount mSignalCountmPropertyCount memberKind memberName memberType memberParams memberFun memberFunAux memberKey MemberKind MethodMemberConstPropertyMemberPropertyMember SignalMemberCRListcrlLencrlListcrlEmpty crlSingle crlAppend1 crlAppend crlToNewArray crlToList filterMembers newMOCStatewriteInt writeIntegral writeStringwriteMethodParams writeMethod writePropertywritePropertySig memberTypestypeIdofDynamicMetaObjectmfAccessPrivatemfAccessProtectedmfAccessPublic mfAccessMaskmfMethodMethodmfMethodSignal mfMethodSlotmfMethodConstructormfMethodTypeMaskmfMethodCompatibilitymfMethodClonedmfMethodScriptable pfInvalid pfReadable pfWritable pfResettable pfEnumOrFlag pfStdCppSet pfConstantpfFinal pfDesignablepfResolveDesignable pfScriptablepfResolveScriptablepfStoredpfResolveStored pfEditablepfResolveEditablepfUser pfResolveUserpfNotifyHsQMLJValHandleHsQMLStringHandlehsqmlJvalArraySet'_hsqmlJvalArrayGet'_hsqmlGetJvalArrayLength'_hsqmlIsJvalArray'_hsqmlInitJvalArray'_hsqmlGetJvalString'_hsqmlIsJvalString'_hsqmlInitJvalString'_hsqmlGetJvalDouble'_hsqmlGetJvalInt'_hsqmlIsJvalNumber'_hsqmlInitJvalDouble'_hsqmlInitJvalInt'_hsqmlGetJvalBool'_hsqmlIsJvalBool'_hsqmlInitJvalBool'_hsqmlSetJval'_hsqmlDeinitJval'_hsqmlInitJvalNull'_hsqmlGetJvalTypeid'_hsqmlGetJvalSize'_hsqmlReadString'_hsqmlWriteString'_hsqmlDeinitString'_hsqmlInitString'_hsqmlGetStringSize'_ cIntToEnum enumToCInthsqmlGetStringSizehsqmlStringSizehsqmlInitStringhsqmlDeinitStringhsqmlWriteStringhsqmlReadString withStrHndlhsqmlGetJvalSize hsqmlJValSizehsqmlGetJvalTypeidhsqmlJValTypeIdhsqmlInitJvalNullhsqmlDeinitJval hsqmlSetJvalhsqmlInitJvalBoolhsqmlIsJvalBoolhsqmlGetJvalBoolhsqmlInitJvalInthsqmlInitJvalDoublehsqmlIsJvalNumberhsqmlGetJvalInthsqmlGetJvalDoublehsqmlInitJvalStringhsqmlIsJvalStringhsqmlGetJvalStringfromJValwithJValhsqmlInitJvalArrayhsqmlIsJvalArrayhsqmlGetJvalArrayLengthhsqmlJvalArrayGethsqmlJvalArraySetObjFinaliserFuncHsQMLObjFinaliserHandleHsQMLObjectHandleHsQMLClassHandlehsqmlObjectAddFinaliser'_hsqmlCreateObjFinaliser'_hsqmlFireSignal'_hsqmlObjectReferenceHandle'_hsqmlGetObjectFromJval'_hsqmlGetObjectFromPointer'_hsqmlObjectGetJval'_hsqmlObjectGetPointer'_hsqmlObjectGetHsValue'_hsqmlObjectGetHsTyperep'_hsqmlObjectSetActive'_hsqmlCreateObject'_hsqmlCreateClass'_hsqmlGetNextClassId'_marshalObjFinaliserhsqmlFinaliseObjFinaliserPtr hsqmlFinaliseObjectWeakHandlePtrhsqmlFinaliseObjectHandlePtrhsqmlFinaliseClassHandlePtr marshalFunc marshalStable fromStablehsqmlGetNextClassIdwithHsQMLClassHandlenewClassHandlehsqmlCreateClasswithMaybeHsQMLObjectHandlewithHsQMLObjectHandlenewObjectHandleisNullObjectHandlehsqmlCreateObjecthsqmlObjectSetActivewithActiveObjecthsqmlObjectGetHsTyperephsqmlObjectGetHsValuehsqmlObjectGetPointerhsqmlObjectGetJvalhsqmlGetObjectFromPointerhsqmlGetObjectFromJvalhsqmlObjectReferenceHandlecopyObjectHandlehsqmlFireSignalwithHsQMLObjFinaliserHandlenewObjFinaliserHandlehsqmlCreateObjFinaliserhsqmlObjectAddFinaliserNo mTypeCVal_ mFromCVal_mToCVal_ mWithCVal_ mFromJVal_ mWithJVal_ mFromHndl_mToHndl_MarshallerForMode MarshallerFor MToHndlFunc MFromHndlFunc MWithJValFunc MFromJValFunc MWithCValFunc MToCValFunc MFromCValFunc MTypeCValFuncErrIOrunErrIOerrIOtyInttyDoubletyStringtyObjecttyVoid tyJSValue mTypeCVal mFromCValmToCVal mWithCVal mFromJVal mWithJVal mFromHndlmToHndlunimplFromCVal unimplToCValunimplWithCValunimplFromJValunimplWithJValunimplFromHndl unimplToHndl jvalFromCVal jvalToCVal jvalWithCVal $fMarshal() ToMarshallerFromMarshallerBidiMarshaller fromObjRefIOfromAnyObjRefIO$fMarshalAnyObjRef$fMarshalObjReffactory_pool_ finaliser_HsQMLEngineHandleHsQMLEventLoopStatus HsqmlEvloopOkHsqmlEvloopAlreadyRunningHsqmlEvloopPostShutdownHsqmlEvloopWrongThreadHsqmlEvloopNotRunningHsqmlEvloopOtherError TrivialCbHsQMLGlobalFlagHsqmlGflagShareOpenglContextsHsFreeStablePtr HsFreeFunPtrhsqmlSetDebugLoglevel'_hsqmlKillEngine'_hsqmlCreateEngine'_hsqmlEvloopShutdown'_hsqmlEvloopNotifyJobs'_hsqmlEvloopRelease'_hsqmlEvloopRequire'_hsqmlEvloopRun'_hsqmlGetFlag'_hsqmlSetFlag'_hsqmlGetArgs'_hsqmlGetArgsCount'_hsqmlSetArgs'_ hsqmlInit_'_hsqmlFinaliseEngineHandlePtrmarshalTrivialCbhsFreeStablePtr hsFreeFunPtr hsqmlInit_ hsqmlInit hsqmlSetArgshsqmlGetArgsCount hsqmlGetArgs hsqmlSetFlag hsqmlGetFlag withTrivialCbwithMaybeTrivialCbhsqmlEvloopRunhsqmlEvloopRequirehsqmlEvloopReleasehsqmlEvloopNotifyJobshsqmlEvloopShutdownwithHsQMLEngineHandlenewEngineHandlehsqmlCreateEnginehsqmlKillEnginehsqmlSetDebugLoglevel$fEnumHsQMLEventLoopStatusjobQueuepostJob processJobsSignalKeyValuebase Data.ProxyProxySignalParamNames mkSignalArgs mkSignalTypesSignalValueParams signalKey SignalDataSignalTypeInfosignalParamTypesIsVoidIOVoidIO runVoidIO mkMethodFunc mkMethodTypesMethodTypeInfomethodParamTypesmethodReturnType MemoStore createClassimplicitSignals newMemoStoregetFromMemoStoredefaultClassDbgetDefaultClass mkUniformFunc mkSpecialFuncHsQMLGLCanvasTypeHsqmlGlDesktop HsqmlGlEsCallbacksFactoryMakeCbPaintCbSyncCb CleanupCbSetupCbHsQMLGLDelegateHandlehsqmlGldelegateFromJval'_hsqmlGldelegateToJval'_hsqmlGldelegateSetup'_hsqmlCreateGldelegate'_ hsqmlFinaliseGldelegateHandlePtr marshalMakeCbmarshalPaintCb marshalSyncCbmarshalCleanupCbmarshalSetupCbwithHsQMLGLDelegateHandlewithCallbacksFactorynewGLDelegateHandlehsqmlCreateGldelegatehsqmlGldelegateSetuphsqmlGldelegateToJvalhsqmlGldelegateFromJvalEventLoopAlreadyRunningEventLoopPostShutdownEventLoopWrongThreadEventLoopNotRunningEventLoopOtherErrorwithManywithManyArray0tryRunInBoundThread getQtArgsIO internalFlagstatusException mapGLTypenewOpenGLCallbacks