D?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > NoneE ]A positive integer that is an offset into the array of objects returned by the Stripe API.)Describes an object in the Stripe system.YRepresents a currency (e.g., "usd") in the Stripe system. This is a 3-letter ISO code.rA maximum number of objects that the Stripe API will return. This value should be between 1 and 100, inclusive.3Represents an amount in cents in the Stripe system.#3Represents a 'Customer'\'s ID in the Stripe system.)5Convert a time in seconds (from Stripe's servers) to  . See Data.Time.Format for more on working with .* Convert a 7 back to an Integer suitable for use with Stripe's API.+Takes a list of key-value arguments, where the value is optional, and returns a list of key-value pairs with only the supplied values."Essentially, this filters out all ?s and unwraps the @s.7optionalArgs [("k1", Just "supplied"), ("k2", Nothing)][("k1","supplied")] !"#$%&'()*+0ABCDEFGHIJKLMN  !"#$%&'()*+#$% !"+)*('& !"#$%&'()*+NoneBE,[Defines the monad transformer under which all Stripe REST API resource calls take place..$A convenience specialization of the ,: monad transformer in which the underlying monad is IO./.Stripe Version Represents Stripe API Versions0"Format: 2011-09-15-d"2xRepresents a request to the Stripe API, providing the fields necessary to specify a Stripe resource. More generally, cU will be desired as it provides sensible defaults that can be overriden as needed.8Attempts to describe a H? in more detail, classifying in what specific way it failed.OPlease consult the official Stripe REST API documentation on error codes at  "https://stripe.com/docs/api#errors for more information.9,Could not be matched; text gives error name.F Describes a K in more detail, categorizing the error and providing additional information about it. At minimum, this is a message, and for H0, this is a message, even more precise code (8_), and potentially a paramter that helps suggest where an error message should be displayed.RIn case the appropriate error could not be determined from the specified type,  UnkownError5 will be returned with the supplied type and message.OPlease consult the official Stripe REST API documentation on error codes at  "https://stripe.com/docs/api#errors for more information.K[This represents the possible failures that a connection to the Stripe API can encounter.OPlease consult the official Stripe REST API documentation on error codes at  "https://stripe.com/docs/api#errors for more information.VThis represents the possible successes that a connection to the Stripe API can encounter. For specificity, a success can be represented by other error codes, and so the same is true in this data type.OPlease consult the official Stripe REST API documentation on error codes at  "https://stripe.com/docs/api#errors for more information.Y1A key used when authenticating to the Stripe API.\Configuration for the , monad transformer.a Runs the , monad transformer with a given \b. This will handle all of the authorization dance steps necessary to utilize the Stripe API.4Its use is demonstrated in other functions, such as d.bProvides a default \ . Essentially, this inserts the Yh, but leaves other fields blank. This is especially relavent due to the current CA file check bug.c The basic 2 environment upon which all other Stripe API requests will be built. Standard usage involves overriding one or more of the fields. E.g., for a request to "https:/api.stripe.comv1/coupons", one would have: &baseSReq { sDestinaton = ["charges"] }OIQueries the Stripe API. This returns the response body along with the V undecoded. Use d to try to decode it into a JSON type. E.g., klet conf = StripeConfig "key" "secret" runStripeT conf $ query' baseSReq { sDestination = ["charges"] }ddQueries the Stripe API and attempts to parse the results into a data type that is an instance of JSON. This is primarily for internal use by other Stripe submodules, which supply the request values accordingly. However, it can also be used directly. E.g., klet conf = StripeConfig "key" "CA file" runStripeT conf $ query baseSReq { sDestination = ["charges"] }esame as d= but pulls out the value inside a data field and returns thatfActs just like dg, but on success, throws away the response. Errors contacting the Stripe API will still be reported.P Transforms a 2 into a more general URIr, which can be used to make an authenticated query to the Stripe server. _TODO there is lots of sloppy Text  - String stuff here.. should fixQGiven an HTTP status code and the response body as input, this function determines whether or not the status code represents an error as per Stripe's REST API documentation. If it does, K& is thrown as an error. Otherwise, V8 is returned, representing the status of the request.[If an error is encountered, this function will attempt to decode the response body with R5 to retrieve (and return) an explanation with the K.S Converts a T!-represented error code into the 84 data type to more descriptively classify errors.5If the string does not represent a known error code, 9C will be returned with the raw text representing the error code.RThis function attempts to decode the contents of a response body as JSON and retrieve an error message in an "error" field. E.g.,+errorMsg "{\"error\":\"Oh no, an error!\"}"Just "Oh no, an error!"UPDefines the behavior for more general error messages that can be thrown with V and W in combination with X.YAttempts to parse error information provided with each error by the Stripe API. In the parsing, the error is classified as a specific F] and any useful data, such as a message explaining the error, is extracted accordingly.F,-Z./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcOdef[PQSRUY\]E ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefE\]^_`YZ[/10VXWKUTSRQPONMLFJIHG8EDCBA@?>=<;:9234567.,-bacdef  ,-Z./102345678 EDCBA@?>=<;:9FJIHGK UTSRQPONMLVXWYZ[\]^_`abcOdef[PQSRUY\]NoneE ghRepresents the length of the trial period. That is, the number of days before the customer is billed.j&Represents the identifier for a given q in the Stripe system.mTRepresents the billing cycle for a plan. If an interval identifier is not known, n@ is used to carry the original identifier supplied by Stripe.q'Represents a plan in the Stripe system.z Creates a q in the Stripe system.{Retrieves a specific q based on its j.|Retrieves a list of all q8s. The query can optionally be refined to a specific:number of charges, via  andpage of results, via .} Deletes a q" if it exists. If it does not, an InvalidRequestError# will be thrown indicating this.~ Deletes a q, identified by its j', if it exists. If it does not, an InvalidRequestError will be thrown indicating this.^!Convenience function to create a 2% specific to plan-related actions._ Converts a m3 to a T.Text for input into the Stripe API. For n+s, the original interval code will be used.`Convert a T.Text to a m1. Used for parsing output from the Stripe API.aAttempts to parse JSON into a q.ghijklmnopqrstuvwxyz{|}~^_`a,,-\]^_`aghijklmnopqrstuvwxyz{|}~,qrstuvwxymponjklghiz{|}~\]^_`,-aghijklmponqrstuvwxyz{|}~^_`aNoneENUTC timestamp specifying the last time at which the coupon can be redeemed.\A positive number representing the maximum number of times that a coupon can be redeemed.ZRepresents the percent off that is applied by a coupon. This must be between 1 and 100.PRepresents the duration of a coupon. If an interval identifier is not known, @ is used to carry the original identifier supplied by Stripe.7Field specifies how long (months) discount is in effect&Represents the identifier for a given  in the Stripe system.)Represents a coupon in the Stripe system. Creates a  in the Stripe system.Retrieves a specific  based on its .Retrieves a list of all 8s. The query can optionally be refined to a specific:number of charges, via  andpage of results, via . Deletes a % if it exists. If it does not, an InvalidRequestError will be thrown indicating this. Deletes a , identified by its ', if it exists. If it does not, an InvalidRequestError will be thrown indicating this.b!Convenience function to create a 2' specific to coupon-related actions.cmReturns a list of key-value pairs representing duration specifications for use as input in the Stripe API.d Converts a 3 to a string for input into the Stripe API. For +s, the original interval code will be used.eConvert a string to a 1. Used for parsing output from the Stripe API.fAttempts to parse JSON into a .!bcdef*,-\]^_`a*\]^_`,-abcdefNoneEggNoneEWRepresents a credit car (with full details) that is used as input to the Stripe API.Highly recommended to supply.Represents a credit card in the Stripe system.Turns a V into a list of key-value pairs that can be submitted to the Stripe API in a query.h%Attempts to parse JSON into a credit .&ijh##  ijhNoneE&Represents the identifier for a given  in the Stripe system.(Represents a token in the Stripe system. Creates a  in the Stripe system.Retrieves a specific  based on its .!Convenience function to create a 2 specific to tokens.kAttempts to parse JSON into a .k) ,-\]^_`a) \]^_`,-akNoneE$Represents a standard email address.+Represents a customer in the Stripe system. Create a new  in the Stripe system. Create a new & in the Stripe system using a TokenId.Update an existing  in the Stripe system.Update an existing , identified by #, in the Stripe system.Update an existing  in the Stripe system.Update an existing , identified by #, in the Stripe system.Retrieves a specific  based on its #.Retrieves a list of all 8s. The query can optionally be refined to a specific:number of charges, via  andpage of results, via . Deletes a % if it exists. If it does not, an InvalidRequestError will be thrown indicating this. Deletes a , identified by its #', if it exists. If it does not, an InvalidRequestError will be thrown indicating this.l!Convenience function to create a 2) specific to customer-related actions.mAttempts to parse JSON into a .lm. #$%,-\]^_`a.#$% \]^_`,-alm NoneE&Represents the identifier for a given  in the Stripe system.)Represents a charge in the Stripe system. Submit a 0 to the Stripe API using an already constructed . Submit a  to the Stripe API using a . Submit a  to the Stripe for a specific - that already has payment details on file. Submit a  to the Stripe for a specific , identified by its #+, that already has payment details on file. Submit a  to the Stripe API using a  to describe payment details.n>Internal convenience function to handle actually submitting a  request to the Stripe API. Retrieve a $ from the Stripe API, identified by .Retrieve a list of Ls from the Stripe API. The query can optionally be refined to a specific:number of charges, via ,page of results, via , and.:Requests that Stripe issue a partial refund to a specific  for a particular .:Requests that Stripe issue a partial refund to a specific , identified by , for a particular .7Requests that Stripe issue a full refund to a specific .7Requests that Stripe issue a full refund to a specific , identified by .oVInternal convenience function used to handle submitting a refund request to Stripe.p!Convenience function to create a 2' specific to coupon-related actions.qAttempts to parse JSON into a .nopq4 ,-\]^_`a4 \]^_`,-a nopq None+E    rs tuvwxyzYZ[     YZ[         rs tuvwxyz NoneEIA boolean flag that determines whether or not the cancellation of the +7 should be delayed until the end of the current period.UTC integer timestamp representing the end of the trial period that the customer receives before being charged for the first time.!cA boolean flag that determines whether or not to prorate switching plans during a billing cycle.$#Describes the various stages that a+,Represents a subscription in the Stripe API.4Current period start5Current period end7*Update the subscription associated with a Customer, identified by #, in the Stripe system.If m is provided, this will override the default trial period of the plan to which the customer is subscribed.8Behaves precisely like 7 , but uses a Token, identified by , rather than a .9 Create a new +T. Limitations: does not yet support passing a card, quantity, or application fee< Update a +=*Internal convenience function to update a + . Try using <, 8, or 7> Cancels the + associated with a Customer, identified by #, in the Stripe system.{!Convenience function to create a 2- specific to subscription-related actions.|Convert a string to a $. If the code is not known,  UnkownStatus4 will be returned with the originally provided code.}Attempts to parse JSON into a +.- !"#$%&'()*+,-./0123456789:;<=>{~|}7 ,-\]^_`a !"#$%&'()*+,-./0123456789:;<=>7+,-./0123456$*)('&%!"# 9:;78<=> \]^_`,-a !"#$*)('&%+ ,-./0123456789:;<=>{~|}     !!"##$%%&''())*++,-./012334567889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_``abcdefghijjkllmnopqrrstuvwxyz{|}~                                                      ! " # $ % & ' ( )*+,*+-*./01201301405605708908:08;08<08=08>08?*@ABCDEF*G;HIJKIJLMNOPQRSTUVWXYZ[\]^_`abcd e f g h i i j k l m n o p q r s t uv stripe-0.8.3Web.Stripe.TokenWeb.Stripe.ClientWeb.Stripe.UtilsWeb.Stripe.PlanWeb.Stripe.CouponWeb.Stripe.DiscountWeb.Stripe.CardWeb.Stripe.CustomerWeb.Stripe.ChargeWeb.Stripe.ConnectWeb.Stripe.Subscription time-1.4.2Data.Time.Clock.UTCUTCTimehttp-types-0.8.5Network.HTTP.Types.MethodGETPOSTHEADPUTDELETETRACECONNECTOPTIONSPATCH StdMethod utctDayTimeutctDayOffsetunOffset Description unDescriptionCurrency unCurrencyCountunCountAmountunAmountSubscriptionIdunSubscriptionIdCardIdunCardId CustomerId unCustomerIdshowByteStringtextToByteStringstringToByteString fromSeconds toSeconds optionalArgsStripeTStripe StripeVersion OtherVersion V20110915d StripeRequestsMethod sDestinationsDatasQStringStripeErrorCodeUnknownErrorCodeProcessingErrorDuplicateTransactionMissing CardDeclined IncorrectCVC InvalidAmount ExpiredCard InvalidCVCInvalidExpiryYearInvalidExpiryMonthIncorrectNumber InvalidNumber StripeError UnknownError CardErrorAPIErrorInvalidRequestError StripeFailure OtherFailure HttpFailureGatewayTimeoutServiceUnavailable BadGatewayInternalServerErrorPaymentRequiredNotFound Unauthorized BadRequestStripeResponseCodeUnknownOK SecretKey unSecretKey StripeConfigstripeSecretKey stripeCAFile stripeVersion runStripeT defaultConfigbaseSReqquery queryDataquery_ PlanTrialDaysunPlanTrialDaysPlanIdunPlanId PlanInterval UnknownPlanYearlyMonthlyPlanplanId planAmount planIntervalplanName planCurrency planTrialDaysamount createPlangetPlangetPlansdelPlan delPlanById CpnRedeemBy unCpnRedeemBy CpnMaxRedeemsunCpnMaxRedeems CpnPercentOffunCpnPercentOff CpnDurationUnknownDurationForever RepeatingOnceCpnIdunCpnIdCouponcpnId cpnDuration cpnPercentOff applyCoupon createCoupon getCoupon getCoupons delCoupon delCouponByIdDiscount disCustomerId disCoupondisSubscriptionIddisStartdisEndCardCheckResultFailedPassed NotChecked NotProvided CardCheckscheckCVCcheckAddrLineOnecheckZip RequestCard rCardNumber rCardExpMonth rCardExpYearrCardCVC rCardFullNamerCardAddrLineOnerCardAddrLineTwo rCardCity rCardAddrZiprCardAddrStaterCardAddrCountryCardcardIdcardType cardCountry cardLastFour cardExpMonth cardExpYearcardFingerprint cardChecksrCardKV deleteCardTokenId unTokenIdTokentokIdtokLivetokUsed tokCreatedtokCard createTokengetTokentokRqEmailunEmailCustomercustId custEmailcustDescriptioncustLive custCreatedcustActiveCard custDiscountcreateCustomercreateCustomerByTokenIdupdateCustomerupdateCustomerByIdupdateCustomerByTokenIdupdateCustomerByIdByTokenId getCustomer getCustomers delCustomerdelCustomerByIdChargeId unChargeIdChargechargeId chargeCreatedchargeDescriptionchargeCurrency chargeAmount chargeLive chargePaidchargeRefunded chargeCard chargeTokenchargeTokenByIdchargeCustomerchargeCustomerById chargeRCard getCharge getCharges partialRefundpartialRefundById fullRefundfullRefundByIdStripeConnectTokens scAccessTokenscRefreshTokenscUserIdscPublishableKeyLandingRegisterLoginScope ReadWriteReadOnlyPublishableKeyAuthCodeClientIdUserId RefreshToken AccessTokenURLauthURLgetAccessTokencreateCustomerTokenSubscriptionList subListCount subListDataSubAtPeriodEndunSubAtPeriodEnd SubTrialEnd unSubTrialEnd SubProrate unSubProrate SubStatus UnknownStatusCanceledUnpaidPastDueActiveTrialing SubscriptionsubId subCustomerIdsubPlan subStatussubStart subTrialStart subTrialEndsubPeriodStart subPeriodEnd subDiscountupdateSubRCardupdateSubToken createSubgetSubscriptiongetSubscriptionsupdateSubscription updateSub cancelSubbase Data.MaybeNothingJustControl.Applicative<*> aeson-0.8.0.2Data.Aeson.Types.Instances.:?.: withObjectData.Aeson.Types.Class parseJSONFromJSONData.Aeson.Types.InternalObjectArrayStringNumberBoolNullValue Data.Functor<$>query'prepRqtoCodeerrorMsgtoCECodeGHC.Base$fErrorStripeFailuretransformers-0.3.0.0Control.Monad.Trans.ErrornoMsgstrMsg mtl-2.1.3.1Control.Monad.Error.Class throwError$fFromJSONStripeError unStripeT setUserAgent$fMonadTransStripeT$fShowStripeVersionplanRqfromPlanIntervaltoPlanInterval$fFromJSONPlancpnRq cpnDurationKVfromCpnDuration toCpnDuration$fFromJSONCoupon$fFromJSONDiscount$fFromJSONCard delCardReq$fFromJSONCardCheckResult$fFromJSONToken customerRq$fFromJSONCustomerchargerefundChargeByIdchargeRq$fFromJSONChargeStripeConnectExceptionaccessTokenURLaccessTokenQuerystatusCodeChecker!$fExceptionStripeConnectException$fFromJSONStripeConnectTokens $fShowLanding $fShowScopesubRq toSubStatus$fFromJSONSubscriptionsubsRq$fFromJSONSubscriptionList